claude-memory-layer 1.0.10 → 1.0.11

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 (74) hide show
  1. package/dist/cli/index.js +1266 -181
  2. package/dist/cli/index.js.map +4 -4
  3. package/dist/core/index.js +367 -7
  4. package/dist/core/index.js.map +2 -2
  5. package/dist/hooks/post-tool-use.js +598 -40
  6. package/dist/hooks/post-tool-use.js.map +4 -4
  7. package/dist/hooks/session-end.js +486 -49
  8. package/dist/hooks/session-end.js.map +3 -3
  9. package/dist/hooks/session-start.js +474 -22
  10. package/dist/hooks/session-start.js.map +3 -3
  11. package/dist/hooks/stop.js +586 -70
  12. package/dist/hooks/stop.js.map +4 -4
  13. package/dist/hooks/user-prompt-submit.js +537 -27
  14. package/dist/hooks/user-prompt-submit.js.map +4 -4
  15. package/dist/server/api/index.js +938 -39
  16. package/dist/server/api/index.js.map +4 -4
  17. package/dist/server/index.js +947 -48
  18. package/dist/server/index.js.map +4 -4
  19. package/dist/services/memory-service.js +475 -22
  20. package/dist/services/memory-service.js.map +3 -3
  21. package/dist/ui/app.js +1380 -55
  22. package/dist/ui/index.html +311 -148
  23. package/dist/ui/style.css +892 -0
  24. package/docs/OPERATIONS.md +18 -0
  25. package/package.json +8 -2
  26. package/scripts/fix-sync-gap.js +32 -0
  27. package/scripts/heartbeat-memory-orchestrator.sh +28 -0
  28. package/scripts/report-sync-gap.js +26 -0
  29. package/scripts/review-queue-auto-resolve.js +21 -0
  30. package/scripts/sync-gap-auto-heal.sh +17 -0
  31. package/specs/20260207-dashboard-upgrade/context.md +38 -0
  32. package/specs/20260207-dashboard-upgrade/spec.md +96 -0
  33. package/src/cli/index.ts +110 -58
  34. package/src/core/sqlite-event-store.ts +444 -6
  35. package/src/core/sqlite-wrapper.ts +8 -0
  36. package/src/core/turn-state.ts +159 -0
  37. package/src/core/types.ts +23 -8
  38. package/src/core/vector-store.ts +21 -3
  39. package/src/hooks/post-tool-use.ts +68 -23
  40. package/src/hooks/session-end.ts +8 -3
  41. package/src/hooks/stop.ts +96 -25
  42. package/src/hooks/user-prompt-submit.ts +44 -5
  43. package/src/server/api/chat.ts +244 -0
  44. package/src/server/api/citations.ts +3 -3
  45. package/src/server/api/events.ts +30 -5
  46. package/src/server/api/index.ts +7 -1
  47. package/src/server/api/projects.ts +74 -0
  48. package/src/server/api/search.ts +3 -3
  49. package/src/server/api/sessions.ts +3 -3
  50. package/src/server/api/stats.ts +43 -7
  51. package/src/server/api/turns.ts +143 -0
  52. package/src/server/api/utils.ts +46 -0
  53. package/src/services/memory-service.ts +137 -5
  54. package/src/services/session-history-importer.ts +215 -51
  55. package/src/ui/app.js +1380 -55
  56. package/src/ui/index.html +311 -148
  57. package/src/ui/style.css +892 -0
  58. package/.claude/settings.local.json +0 -27
  59. package/.claude-memory/test.sqlite +0 -0
  60. package/.history/package_20260201112328.json +0 -45
  61. package/.history/package_20260201113602.json +0 -45
  62. package/.history/package_20260201113713.json +0 -45
  63. package/.history/package_20260201114110.json +0 -45
  64. package/.history/package_20260201114632.json +0 -46
  65. package/.history/package_20260201133143.json +0 -45
  66. package/.history/package_20260201134319.json +0 -45
  67. package/.history/package_20260201134326.json +0 -45
  68. package/.history/package_20260201134334.json +0 -45
  69. package/.history/package_20260201134912.json +0 -45
  70. package/.history/package_20260201142928.json +0 -46
  71. package/.history/package_20260201192048.json +0 -47
  72. package/.history/package_20260202114053.json +0 -49
  73. package/.history/package_20260202121115.json +0 -49
  74. package/test_access.js +0 -49
@@ -4,229 +4,392 @@
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
6
  <title>Code Memory | Deep Space Dashboard</title>
7
-
7
+
8
8
  <!-- Fonts -->
9
9
  <link rel="preconnect" href="https://fonts.googleapis.com">
10
10
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
11
11
  <link href="https://fonts.googleapis.com/css2?family=Outfit:wght@300;400;500;600;700&display=swap" rel="stylesheet">
12
-
12
+
13
13
  <!-- Icons -->
14
14
  <link href="https://cdn.jsdelivr.net/npm/remixicon@3.5.0/fonts/remixicon.css" rel="stylesheet">
15
-
15
+
16
16
  <!-- Styles -->
17
17
  <link rel="stylesheet" href="style.css">
18
-
18
+
19
19
  <!-- Charts -->
20
20
  <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
21
21
  </head>
22
22
  <body>
23
23
 
24
24
  <div class="app-container">
25
-
25
+
26
26
  <!-- Sidebar -->
27
27
  <aside class="sidebar">
28
28
  <div class="logo-area">
29
29
  <div class="logo-icon">🧠</div>
30
30
  <div class="logo-text">CodeMemory</div>
31
31
  </div>
32
-
32
+
33
+ <div class="project-selector">
34
+ <label class="project-label"><i class="ri-folder-line"></i> Project</label>
35
+ <select id="project-select" class="project-dropdown">
36
+ <option value="">All (Global)</option>
37
+ </select>
38
+ </div>
39
+
33
40
  <nav>
34
41
  <ul class="nav-menu">
35
- <li class="nav-item active">
42
+ <li class="nav-item active" data-nav="overview">
36
43
  <i class="ri-dashboard-line"></i>
37
44
  <span>Overview</span>
38
45
  </li>
39
- <li class="nav-item">
46
+ <li class="nav-item" data-nav="knowledge-graph">
40
47
  <i class="ri-database-2-line"></i>
41
48
  <span>Knowledge Graph</span>
42
49
  </li>
43
- <li class="nav-item">
50
+ <li class="nav-item" data-nav="memory-banks">
44
51
  <i class="ri-brain-line"></i>
45
52
  <span>Memory Banks</span>
46
53
  </li>
47
- <li class="nav-item">
54
+ <li class="nav-item" data-nav="configuration">
48
55
  <i class="ri-settings-4-line"></i>
49
56
  <span>Configuration</span>
50
57
  </li>
51
58
  </ul>
52
59
  </nav>
60
+
61
+ <div class="sidebar-bottom">
62
+ <button id="chat-toggle-btn" class="chat-toggle-btn">
63
+ <i class="ri-chat-ai-line"></i>
64
+ <span>Ask Memory</span>
65
+ </button>
66
+ </div>
53
67
  </aside>
54
68
 
55
69
  <!-- Main Content -->
56
70
  <main class="main-content">
57
-
58
- <!-- Header -->
59
- <header class="top-header">
60
- <div class="page-title">
61
- <h1>Dashboard</h1>
62
- <p>Real-time memory visualization & management</p>
63
- </div>
64
-
65
- <div class="header-actions">
66
- <div class="search-wrapper">
67
- <i class="ri-search-line"></i>
68
- <input type="text" id="search-input" class="search-input" placeholder="Search memories...">
71
+
72
+ <!-- ========== VIEW: Overview (default) ========== -->
73
+ <div id="view-overview" class="page-view active">
74
+
75
+ <!-- Header -->
76
+ <header class="top-header">
77
+ <div class="page-title">
78
+ <h1>Dashboard</h1>
79
+ <p>Real-time memory visualization & management</p>
69
80
  </div>
70
-
71
- <button id="refresh-btn" class="btn btn-secondary">
72
- <i class="ri-refresh-line"></i>
73
- <span>Refresh</span>
74
- </button>
75
- </div>
76
- </header>
77
-
78
- <!-- Stats Grid -->
79
- <div class="stats-grid">
80
- <div class="stat-card">
81
- <div class="stat-value" id="stat-events">0</div>
82
- <div class="stat-label">
83
- <i class="ri-file-list-3-line"></i> Total Events
81
+
82
+ <div class="header-actions">
83
+ <div class="search-wrapper">
84
+ <i class="ri-search-line"></i>
85
+ <input type="text" id="search-input" class="search-input" placeholder="Search memories...">
86
+ </div>
87
+
88
+ <button id="refresh-btn" class="btn btn-secondary">
89
+ <i class="ri-refresh-line"></i>
90
+ <span>Refresh</span>
91
+ </button>
84
92
  </div>
85
- </div>
86
- <div class="stat-card">
87
- <div class="stat-value" id="stat-sessions">0</div>
88
- <div class="stat-label">
89
- <i class="ri-discuss-line"></i> Active Sessions
93
+ </header>
94
+
95
+ <!-- Stats Grid -->
96
+ <div class="stats-grid">
97
+ <div class="stat-card" data-stat="events">
98
+ <div class="stat-value" id="stat-events">0</div>
99
+ <div class="stat-label">
100
+ <i class="ri-file-list-3-line"></i> Total Events
101
+ </div>
90
102
  </div>
91
- </div>
92
- <div class="stat-card">
93
- <div class="stat-value" id="stat-shared">0</div>
94
- <div class="stat-label">
95
- <i class="ri-share-forward-line"></i> Shared Items
103
+ <div class="stat-card" data-stat="sessions">
104
+ <div class="stat-value" id="stat-sessions">0</div>
105
+ <div class="stat-label">
106
+ <i class="ri-discuss-line"></i> Active Sessions
107
+ </div>
96
108
  </div>
97
- </div>
98
- <div class="stat-card">
99
- <div class="stat-value" id="stat-vectors">0</div>
100
- <div class="stat-label">
101
- <i class="ri-node-tree"></i> Vector Nodes
109
+ <div class="stat-card" data-stat="shared">
110
+ <div class="stat-value" id="stat-shared">0</div>
111
+ <div class="stat-label">
112
+ <i class="ri-share-forward-line"></i> Shared Items
113
+ </div>
114
+ </div>
115
+ <div class="stat-card" data-stat="vectors">
116
+ <div class="stat-value" id="stat-vectors">0</div>
117
+ <div class="stat-label">
118
+ <i class="ri-node-tree"></i> Vector Nodes
119
+ </div>
102
120
  </div>
103
121
  </div>
104
- </div>
105
122
 
106
- <!-- Main Grid -->
107
- <div class="dashboard-grid">
108
-
109
- <!-- Left Column -->
110
- <div class="left-col">
111
-
112
- <!-- Memory Pipeline -->
113
- <div class="card">
114
- <div class="card-header">
115
- <div class="card-title">
116
- <i class="ri-flow-chart"></i>
117
- <span>Memory Pipeline</span>
123
+ <!-- Main Grid -->
124
+ <div class="dashboard-grid">
125
+
126
+ <!-- Left Column -->
127
+ <div class="left-col">
128
+
129
+ <!-- Memory Pipeline -->
130
+ <div class="card">
131
+ <div class="card-header">
132
+ <div class="card-title">
133
+ <i class="ri-flow-chart"></i>
134
+ <span>Memory Pipeline</span>
135
+ </div>
118
136
  </div>
119
- </div>
120
-
121
- <!-- Pipeline Steps (Tabs) -->
122
- <div class="pipeline-container">
123
- <div class="pipeline-steps">
124
- <div class="p-step active" data-level="L0">
125
- <span class="p-step-name">Raw Events</span>
126
- <span class="p-step-count">0</span>
127
- </div>
128
- <div class="p-step" data-level="L1">
129
- <span class="p-step-name">Structured</span>
130
- <span class="p-step-count">0</span>
131
- </div>
132
- <div class="p-step" data-level="L2">
133
- <span class="p-step-name">Validated</span>
134
- <span class="p-step-count">0</span>
135
- </div>
136
- <div class="p-step" data-level="L3">
137
- <span class="p-step-name">Verified</span>
138
- <span class="p-step-count">0</span>
139
- </div>
140
- <div class="p-step" data-level="L4">
141
- <span class="p-step-name">Active</span>
142
- <span class="p-step-count">0</span>
137
+
138
+ <!-- Pipeline Steps (Tabs) -->
139
+ <div class="pipeline-container">
140
+ <div class="pipeline-steps">
141
+ <div class="p-step active" data-level="L0">
142
+ <span class="p-step-name">Raw Events</span>
143
+ <span class="p-step-count">0</span>
144
+ </div>
145
+ <div class="p-step" data-level="L1">
146
+ <span class="p-step-name">Structured</span>
147
+ <span class="p-step-count">0</span>
148
+ </div>
149
+ <div class="p-step" data-level="L2">
150
+ <span class="p-step-name">Validated</span>
151
+ <span class="p-step-count">0</span>
152
+ </div>
153
+ <div class="p-step" data-level="L3">
154
+ <span class="p-step-name">Verified</span>
155
+ <span class="p-step-count">0</span>
156
+ </div>
157
+ <div class="p-step" data-level="L4">
158
+ <span class="p-step-name">Active</span>
159
+ <span class="p-step-count">0</span>
160
+ </div>
143
161
  </div>
144
162
  </div>
145
- </div>
146
-
147
- <!-- Events List -->
148
- <div id="event-list-container" class="event-list">
149
- <!-- Events injected by JS -->
150
- <div class="event-item">
151
- <div class="event-header">
152
- <span class="event-type-badge type-system">System</span>
153
- <span class="event-time">Just now</span>
163
+
164
+ <!-- Sort Controls -->
165
+ <div class="sort-controls">
166
+ <span class="sort-label">Sort:</span>
167
+ <button class="sort-btn active" data-sort="recent">Latest</button>
168
+ <button class="sort-btn" data-sort="accessed">Recently Used</button>
169
+ <button class="sort-btn" data-sort="most-accessed">Most Used</button>
170
+ </div>
171
+
172
+ <!-- Events List -->
173
+ <div id="event-list-container" class="event-list">
174
+ <!-- Events injected by JS -->
175
+ <div class="event-item">
176
+ <div class="event-header">
177
+ <span class="event-type-badge type-system">System</span>
178
+ <span class="event-time">Just now</span>
179
+ </div>
180
+ <div class="event-content">Initializing dashboard interface...</div>
154
181
  </div>
155
- <div class="event-content">Initializing dashboard interface...</div>
156
182
  </div>
157
- </div>
158
- </div>
183
+ </div>
159
184
 
160
- <!-- Activity Chart -->
161
- <div class="card">
162
- <div class="card-header">
163
- <div class="card-title">
164
- <i class="ri-bar-chart-grouped-line"></i>
165
- <span>Activity Persistence</span>
185
+ <!-- Activity Chart -->
186
+ <div class="card">
187
+ <div class="card-header">
188
+ <div class="card-title">
189
+ <i class="ri-bar-chart-grouped-line"></i>
190
+ <span>Activity Persistence</span>
191
+ </div>
166
192
  </div>
193
+ <div id="activity-chart"></div>
167
194
  </div>
168
- <div id="activity-chart"></div>
195
+
169
196
  </div>
170
-
171
- </div>
172
197
 
173
- <!-- Right Column -->
174
- <div class="right-col">
175
-
176
- <!-- Endless Mode Status -->
177
- <div class="card endless-card">
178
- <div class="card-header">
179
- <div class="card-title">
180
- <i class="ri-infinite-loop-line"></i>
181
- <span>Endless Mode</span>
198
+ <!-- Right Column -->
199
+ <div class="right-col">
200
+
201
+ <!-- Endless Mode Status -->
202
+ <div class="card endless-card">
203
+ <div class="card-header">
204
+ <div class="card-title">
205
+ <i class="ri-infinite-loop-line"></i>
206
+ <span>Endless Mode</span>
207
+ </div>
208
+ </div>
209
+ <div style="display:flex; align-items:center; gap:12px; margin-top:10px;">
210
+ <div id="status-dot" class="status-dot"></div>
211
+ <span id="status-text" style="color:var(--text-muted); font-weight:500;">Idle</span>
182
212
  </div>
183
213
  </div>
184
- <div style="display:flex; align-items:center; gap:12px; margin-top:10px;">
185
- <div id="status-dot" class="status-dot"></div>
186
- <span id="status-text" style="color:var(--text-muted); font-weight:500;">Idle</span>
187
- </div>
188
- </div>
189
214
 
190
- <!-- Shared Knowledge -->
191
- <div class="card">
192
- <div class="card-header">
193
- <div class="card-title">
194
- <i class="ri-global-line"></i>
195
- <span>Global Knowledge</span>
215
+ <!-- Shared Knowledge -->
216
+ <div class="card">
217
+ <div class="card-header">
218
+ <div class="card-title">
219
+ <i class="ri-global-line"></i>
220
+ <span>Global Knowledge</span>
221
+ </div>
196
222
  </div>
197
- </div>
198
-
199
- <div class="shared-list">
200
- <div class="shared-item">
201
- <div class="shared-info">
202
- <div class="shared-icon">🔧</div>
203
- <span>Troubleshooting</span>
223
+
224
+ <div class="shared-list">
225
+ <div class="shared-item">
226
+ <div class="shared-info">
227
+ <div class="shared-icon">🔧</div>
228
+ <span>Troubleshooting</span>
229
+ </div>
230
+ <div class="shared-count" id="shared-troubleshooting">0</div>
231
+ </div>
232
+ <div class="shared-item">
233
+ <div class="shared-info">
234
+ <div class="shared-icon">✨</div>
235
+ <span>Best Practices</span>
236
+ </div>
237
+ <div class="shared-count" id="shared-best-practices">0</div>
238
+ </div>
239
+ <div class="shared-item">
240
+ <div class="shared-info">
241
+ <div class="shared-icon">⚠️</div>
242
+ <span>Common Errors</span>
243
+ </div>
244
+ <div class="shared-count" id="shared-errors">0</div>
204
245
  </div>
205
- <div class="shared-count" id="shared-troubleshooting">0</div>
206
246
  </div>
207
- <div class="shared-item">
208
- <div class="shared-info">
209
- <div class="shared-icon">✨</div>
210
- <span>Best Practices</span>
247
+ </div>
248
+
249
+ <!-- Memory Usage -->
250
+ <div class="card">
251
+ <div class="card-header">
252
+ <div class="card-title">
253
+ <i class="ri-bar-chart-box-line"></i>
254
+ <span>Memory Usage</span>
211
255
  </div>
212
- <div class="shared-count" id="shared-best-practices">0</div>
213
256
  </div>
214
- <div class="shared-item">
215
- <div class="shared-info">
216
- <div class="shared-icon">⚠️</div>
217
- <span>Common Errors</span>
257
+
258
+ <div class="graduation-stats">
259
+ <div class="section-label">Graduation Distribution</div>
260
+ <div id="graduation-bars"></div>
261
+ </div>
262
+
263
+ <div style="margin-top:20px;">
264
+ <div class="section-label">Helpfulness</div>
265
+ <div id="helpfulness-summary" style="padding:8px 0; font-size:13px; color:var(--text-muted);">Loading...</div>
266
+ </div>
267
+
268
+ <div style="margin-top:20px;">
269
+ <div class="section-label">Most Helpful Memories</div>
270
+ <div id="most-helpful-list" class="shared-list">
271
+ <div style="padding:12px; text-align:center; color:var(--text-muted); font-size:13px;">Loading...</div>
218
272
  </div>
219
- <div class="shared-count" id="shared-errors">0</div>
220
273
  </div>
221
274
  </div>
275
+
276
+ </div>
277
+
278
+ </div>
279
+ </div>
280
+
281
+ <!-- ========== VIEW: Knowledge Graph ========== -->
282
+ <div id="view-knowledge-graph" class="page-view">
283
+ <header class="top-header">
284
+ <div class="page-title">
285
+ <h1>Knowledge Graph</h1>
286
+ <p>Most accessed memories and topic distribution</p>
222
287
  </div>
223
-
288
+ </header>
289
+ <div id="kg-content">
290
+ <div style="text-align:center; padding:60px; color:var(--text-muted);">Loading...</div>
224
291
  </div>
292
+ </div>
225
293
 
294
+ <!-- ========== VIEW: Memory Banks ========== -->
295
+ <div id="view-memory-banks" class="page-view">
296
+ <header class="top-header">
297
+ <div class="page-title">
298
+ <h1>Memory Banks</h1>
299
+ <p>Memory levels and graduation pipeline</p>
300
+ </div>
301
+ </header>
302
+ <div id="mb-content">
303
+ <div style="text-align:center; padding:60px; color:var(--text-muted);">Loading...</div>
304
+ </div>
226
305
  </div>
306
+
307
+ <!-- ========== VIEW: Configuration ========== -->
308
+ <div id="view-configuration" class="page-view">
309
+ <header class="top-header">
310
+ <div class="page-title">
311
+ <h1>Configuration</h1>
312
+ <p>System settings and graduation criteria</p>
313
+ </div>
314
+ </header>
315
+ <div id="cfg-content">
316
+ <div style="text-align:center; padding:60px; color:var(--text-muted);">Loading...</div>
317
+ </div>
318
+ </div>
319
+
227
320
  </main>
228
321
  </div>
229
322
 
323
+ <!-- Chat Panel (slide-out) -->
324
+ <div id="chat-panel" class="chat-panel">
325
+ <div class="chat-header">
326
+ <div class="chat-title">
327
+ <i class="ri-chat-ai-line"></i>
328
+ <span>Ask Memory</span>
329
+ </div>
330
+ <div class="chat-header-tabs">
331
+ <button class="chat-header-tab active" data-chat-tab="chat">Chat</button>
332
+ <button class="chat-header-tab" data-chat-tab="history">History</button>
333
+ <button id="chat-new-btn" class="chat-new-btn" title="New conversation"><i class="ri-add-line"></i></button>
334
+ </div>
335
+ <button id="chat-close-btn" class="modal-close-btn"><i class="ri-close-line"></i></button>
336
+ </div>
337
+
338
+ <div id="chat-messages" class="chat-messages">
339
+ <div class="chat-welcome">
340
+ <div class="chat-welcome-icon">🧠</div>
341
+ <div class="chat-welcome-title">Ask about your memories</div>
342
+ <div class="chat-welcome-text">
343
+ I can search through your coding sessions, tool usage, and stored knowledge to answer questions.
344
+ </div>
345
+ </div>
346
+ </div>
347
+
348
+ <div id="chat-history-view" class="chat-history-view">
349
+ <div class="chat-history-empty">No conversation history yet.</div>
350
+ </div>
351
+
352
+ <div class="chat-input-area">
353
+ <div class="chat-input-wrapper">
354
+ <textarea id="chat-input" class="chat-input"
355
+ placeholder="Ask about your code memories..."
356
+ rows="1"></textarea>
357
+ <button id="chat-send-btn" class="chat-send-btn" disabled>
358
+ <i class="ri-send-plane-2-fill"></i>
359
+ </button>
360
+ </div>
361
+ <div class="chat-input-hint">
362
+ <span id="chat-project-scope"></span>
363
+ </div>
364
+ </div>
365
+ </div>
366
+
367
+ <!-- Detail Modal -->
368
+ <div id="detail-modal" class="modal-overlay" style="display:none;">
369
+ <div class="modal-container">
370
+ <div class="modal-header">
371
+ <div class="modal-title">Event Detail</div>
372
+ <button class="modal-close-btn" data-modal="detail-modal"><i class="ri-close-line"></i></button>
373
+ </div>
374
+ <div class="modal-body" id="detail-modal-body">
375
+ <div style="text-align:center; padding:40px; color:var(--text-muted);">Loading...</div>
376
+ </div>
377
+ </div>
378
+ </div>
379
+
380
+ <!-- List Modal -->
381
+ <div id="list-modal" class="modal-overlay" style="display:none;">
382
+ <div class="modal-container modal-lg">
383
+ <div class="modal-header">
384
+ <div class="modal-title" id="list-modal-title">List</div>
385
+ <button class="modal-close-btn" data-modal="list-modal"><i class="ri-close-line"></i></button>
386
+ </div>
387
+ <div class="modal-body" id="list-modal-body">
388
+ <div style="text-align:center; padding:40px; color:var(--text-muted);">Loading...</div>
389
+ </div>
390
+ </div>
391
+ </div>
392
+
230
393
  <script src="app.js"></script>
231
394
  </body>
232
395
  </html>