superlocalmemory 3.4.17 → 3.4.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/package.json +1 -3
- package/pyproject.toml +10 -1
- package/src/superlocalmemory/cli/setup_wizard.py +30 -0
- package/src/superlocalmemory.egg-info/PKG-INFO +4 -1
- package/src/superlocalmemory.egg-info/requires.txt +3 -0
- package/docs/ARCHITECTURE.md +0 -149
- package/docs/api-reference.md +0 -284
- package/docs/auto-memory.md +0 -150
- package/docs/cli-reference.md +0 -327
- package/docs/cloud-backup.md +0 -174
- package/docs/compliance.md +0 -191
- package/docs/configuration.md +0 -182
- package/docs/getting-started.md +0 -102
- package/docs/ide-setup.md +0 -261
- package/docs/mcp-tools.md +0 -220
- package/docs/migration-from-v2.md +0 -170
- package/docs/profiles.md +0 -173
- package/docs/screenshots/01-dashboard-main.png +0 -0
- package/docs/screenshots/02-knowledge-graph.png +0 -0
- package/docs/screenshots/03-math-health.png +0 -0
- package/docs/screenshots/03-patterns-learning.png +0 -0
- package/docs/screenshots/04-learning-dashboard.png +0 -0
- package/docs/screenshots/04-recall-lab.png +0 -0
- package/docs/screenshots/05-behavioral-analysis.png +0 -0
- package/docs/screenshots/05-trust-dashboard.png +0 -0
- package/docs/screenshots/06-graph-communities.png +0 -0
- package/docs/screenshots/06-settings.png +0 -0
- package/docs/screenshots/07-memories-blurred.png +0 -0
- package/docs/skill-evolution.md +0 -256
- package/docs/troubleshooting.md +0 -310
- package/docs/v2-archive/ACCESSIBILITY.md +0 -291
- package/docs/v2-archive/ARCHITECTURE.md +0 -886
- package/docs/v2-archive/CLI-COMMANDS-REFERENCE.md +0 -425
- package/docs/v2-archive/COMPRESSION-README.md +0 -390
- package/docs/v2-archive/FRAMEWORK-INTEGRATIONS.md +0 -300
- package/docs/v2-archive/MCP-MANUAL-SETUP.md +0 -775
- package/docs/v2-archive/MCP-TROUBLESHOOTING.md +0 -787
- package/docs/v2-archive/PATTERN-LEARNING.md +0 -228
- package/docs/v2-archive/PROFILES-GUIDE.md +0 -453
- package/docs/v2-archive/RESET-GUIDE.md +0 -353
- package/docs/v2-archive/SEARCH-ENGINE-V2.2.0.md +0 -749
- package/docs/v2-archive/SEARCH-INTEGRATION-GUIDE.md +0 -502
- package/docs/v2-archive/UI-SERVER.md +0 -262
- package/docs/v2-archive/UNIVERSAL-INTEGRATION.md +0 -488
- package/docs/v2-archive/V2.2.0-OPTIONAL-SEARCH.md +0 -666
- package/docs/v2-archive/WINDOWS-INSTALL-README.txt +0 -34
- package/docs/v2-archive/WINDOWS-POST-INSTALL.txt +0 -45
- package/docs/v2-archive/example_graph_usage.py +0 -146
- package/ui/index.html +0 -1879
- package/ui/js/agents.js +0 -192
- package/ui/js/auto-settings.js +0 -399
- package/ui/js/behavioral.js +0 -276
- package/ui/js/clusters.js +0 -206
- package/ui/js/compliance.js +0 -252
- package/ui/js/core.js +0 -246
- package/ui/js/dashboard.js +0 -110
- package/ui/js/events.js +0 -178
- package/ui/js/fact-detail.js +0 -92
- package/ui/js/feedback.js +0 -333
- package/ui/js/graph-core.js +0 -447
- package/ui/js/graph-filters.js +0 -220
- package/ui/js/graph-interactions.js +0 -351
- package/ui/js/graph-ui.js +0 -214
- package/ui/js/ide-status.js +0 -102
- package/ui/js/init.js +0 -45
- package/ui/js/learning.js +0 -435
- package/ui/js/lifecycle.js +0 -298
- package/ui/js/math-health.js +0 -98
- package/ui/js/memories.js +0 -264
- package/ui/js/modal.js +0 -357
- package/ui/js/patterns.js +0 -93
- package/ui/js/profiles.js +0 -236
- package/ui/js/recall-lab.js +0 -292
- package/ui/js/search.js +0 -59
- package/ui/js/settings.js +0 -224
- package/ui/js/timeline.js +0 -32
- package/ui/js/trust-dashboard.js +0 -73
package/ui/index.html
DELETED
|
@@ -1,1879 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en" data-bs-theme="light">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="UTF-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
-
<title>SuperLocalMemory V3 — Dashboard</title>
|
|
7
|
-
|
|
8
|
-
<!-- Bootstrap CSS -->
|
|
9
|
-
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
10
|
-
<!-- Bootstrap Icons -->
|
|
11
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.0/font/bootstrap-icons.css">
|
|
12
|
-
|
|
13
|
-
<style>
|
|
14
|
-
:root {
|
|
15
|
-
--slm-gradient: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
16
|
-
--slm-gradient-success: linear-gradient(135deg, #43e97b 0%, #38f9d7 100%);
|
|
17
|
-
--slm-gradient-info: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
|
|
18
|
-
--slm-gradient-warning: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
html {
|
|
22
|
-
scroll-behavior: smooth;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
body {
|
|
26
|
-
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
27
|
-
overflow-x: auto;
|
|
28
|
-
overflow-y: scroll;
|
|
29
|
-
min-width: min-content;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
[data-bs-theme="light"] body,
|
|
33
|
-
[data-bs-theme="light"] {
|
|
34
|
-
background: #f8f9fa;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
.navbar {
|
|
38
|
-
background: var(--slm-gradient);
|
|
39
|
-
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/* Stat cards with gradient backgrounds */
|
|
43
|
-
.stat-card {
|
|
44
|
-
border: none;
|
|
45
|
-
border-radius: 12px;
|
|
46
|
-
box-shadow: 0 4px 15px rgba(0,0,0,0.08);
|
|
47
|
-
transition: transform 0.2s, box-shadow 0.2s;
|
|
48
|
-
overflow: hidden;
|
|
49
|
-
position: relative;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.stat-card:hover {
|
|
53
|
-
transform: translateY(-5px);
|
|
54
|
-
box-shadow: 0 8px 25px rgba(0,0,0,0.12);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.stat-card .stat-bg {
|
|
58
|
-
position: absolute;
|
|
59
|
-
top: 0; left: 0; right: 0; bottom: 0;
|
|
60
|
-
opacity: 0.08;
|
|
61
|
-
border-radius: 12px;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
.stat-card-memories .stat-bg { background: var(--slm-gradient); }
|
|
65
|
-
.stat-card-clusters .stat-bg { background: var(--slm-gradient-success); }
|
|
66
|
-
.stat-card-nodes .stat-bg { background: var(--slm-gradient-info); }
|
|
67
|
-
.stat-card-edges .stat-bg { background: var(--slm-gradient-warning); }
|
|
68
|
-
|
|
69
|
-
.stat-icon {
|
|
70
|
-
font-size: 2rem;
|
|
71
|
-
opacity: 0.8;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
.stat-value {
|
|
75
|
-
font-size: 1.75rem;
|
|
76
|
-
font-weight: 700;
|
|
77
|
-
margin: 0;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.tab-content {
|
|
81
|
-
min-height: 700px;
|
|
82
|
-
overflow-x: auto;
|
|
83
|
-
overflow-y: visible;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
.tab-pane {
|
|
87
|
-
overflow-x: auto;
|
|
88
|
-
overflow-y: visible;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
#graph-container {
|
|
92
|
-
background: var(--bs-body-bg);
|
|
93
|
-
border-radius: 10px;
|
|
94
|
-
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
|
|
95
|
-
height: 600px !important;
|
|
96
|
-
max-height: 600px;
|
|
97
|
-
width: 100% !important;
|
|
98
|
-
position: relative;
|
|
99
|
-
overflow: hidden;
|
|
100
|
-
/* Mobile touch support - prevent default gestures */
|
|
101
|
-
touch-action: none;
|
|
102
|
-
-webkit-user-select: none;
|
|
103
|
-
-moz-user-select: none;
|
|
104
|
-
-ms-user-select: none;
|
|
105
|
-
user-select: none;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
#graph-container canvas {
|
|
109
|
-
max-width: 100% !important;
|
|
110
|
-
max-height: 100% !important;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.node {
|
|
114
|
-
cursor: pointer;
|
|
115
|
-
stroke: #fff;
|
|
116
|
-
stroke-width: 2px;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
.link {
|
|
120
|
-
stroke: #999;
|
|
121
|
-
stroke-opacity: 0.6;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.node-label {
|
|
125
|
-
font-size: 10px;
|
|
126
|
-
pointer-events: none;
|
|
127
|
-
fill: #333;
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/* Memory table styling */
|
|
131
|
-
.memory-table {
|
|
132
|
-
font-size: 0.9rem;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
.memory-table tbody tr {
|
|
136
|
-
cursor: pointer;
|
|
137
|
-
transition: background-color 0.15s;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
.memory-table tbody tr:hover {
|
|
141
|
-
background-color: rgba(102, 126, 234, 0.08) !important;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
.memory-content {
|
|
145
|
-
max-width: 350px;
|
|
146
|
-
overflow: hidden;
|
|
147
|
-
text-overflow: ellipsis;
|
|
148
|
-
white-space: nowrap;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
.badge-importance {
|
|
152
|
-
min-width: 30px;
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
.search-box {
|
|
156
|
-
border-radius: 20px;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
.cluster-card {
|
|
160
|
-
border-left: 4px solid;
|
|
161
|
-
margin-bottom: 1rem;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
.entity-badge {
|
|
165
|
-
margin: 2px;
|
|
166
|
-
font-size: 0.8rem;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
/* Loading spinner */
|
|
170
|
-
.loading {
|
|
171
|
-
text-align: center;
|
|
172
|
-
padding: 60px 40px;
|
|
173
|
-
color: #888;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.loading .spinner-border {
|
|
177
|
-
width: 2rem;
|
|
178
|
-
height: 2rem;
|
|
179
|
-
margin-bottom: 12px;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/* Empty state */
|
|
183
|
-
.empty-state {
|
|
184
|
-
text-align: center;
|
|
185
|
-
padding: 60px 40px;
|
|
186
|
-
color: #888;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
.empty-state i {
|
|
190
|
-
font-size: 3rem;
|
|
191
|
-
opacity: 0.3;
|
|
192
|
-
margin-bottom: 12px;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
.tooltip-custom {
|
|
196
|
-
position: absolute;
|
|
197
|
-
padding: 10px;
|
|
198
|
-
background: rgba(0,0,0,0.8);
|
|
199
|
-
color: white;
|
|
200
|
-
border-radius: 5px;
|
|
201
|
-
pointer-events: none;
|
|
202
|
-
font-size: 12px;
|
|
203
|
-
z-index: 1000;
|
|
204
|
-
max-width: 300px;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
.timeline-chart {
|
|
208
|
-
min-height: 300px;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
/* Score bar for search results */
|
|
212
|
-
.score-bar-container {
|
|
213
|
-
width: 80px;
|
|
214
|
-
display: inline-block;
|
|
215
|
-
vertical-align: middle;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
.score-bar {
|
|
219
|
-
height: 8px;
|
|
220
|
-
border-radius: 4px;
|
|
221
|
-
background: #e9ecef;
|
|
222
|
-
overflow: hidden;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
.score-bar-fill {
|
|
226
|
-
height: 100%;
|
|
227
|
-
border-radius: 4px;
|
|
228
|
-
transition: width 0.4s ease;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
.score-label {
|
|
232
|
-
font-size: 0.75rem;
|
|
233
|
-
font-weight: 600;
|
|
234
|
-
min-width: 36px;
|
|
235
|
-
display: inline-block;
|
|
236
|
-
text-align: right;
|
|
237
|
-
margin-right: 6px;
|
|
238
|
-
vertical-align: middle;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
/* Project select in navbar */
|
|
242
|
-
.profile-select {
|
|
243
|
-
background: rgba(255,255,255,0.15);
|
|
244
|
-
border: 1px solid rgba(255,255,255,0.3);
|
|
245
|
-
color: white;
|
|
246
|
-
border-radius: 20px;
|
|
247
|
-
padding: 2px 28px 2px 10px;
|
|
248
|
-
font-size: 0.85rem;
|
|
249
|
-
min-width: 120px;
|
|
250
|
-
cursor: pointer;
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
.profile-select option {
|
|
254
|
-
background: var(--bs-body-bg);
|
|
255
|
-
color: var(--bs-body-color);
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/* Sortable table headers */
|
|
259
|
-
.sortable {
|
|
260
|
-
cursor: pointer;
|
|
261
|
-
user-select: none;
|
|
262
|
-
position: relative;
|
|
263
|
-
padding-right: 18px !important;
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
.sortable:hover {
|
|
267
|
-
background-color: rgba(102, 126, 234, 0.08);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
.sortable::after {
|
|
271
|
-
content: '\F282';
|
|
272
|
-
font-family: 'bootstrap-icons';
|
|
273
|
-
position: absolute;
|
|
274
|
-
right: 4px;
|
|
275
|
-
opacity: 0.3;
|
|
276
|
-
font-size: 0.7rem;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
.sortable.sort-asc::after {
|
|
280
|
-
content: '\F235';
|
|
281
|
-
opacity: 0.8;
|
|
282
|
-
}
|
|
283
|
-
|
|
284
|
-
.sortable.sort-desc::after {
|
|
285
|
-
content: '\F229';
|
|
286
|
-
opacity: 0.8;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
/* Confidence bar for patterns */
|
|
290
|
-
.confidence-bar {
|
|
291
|
-
height: 6px;
|
|
292
|
-
border-radius: 3px;
|
|
293
|
-
background: var(--bs-border-color);
|
|
294
|
-
overflow: hidden;
|
|
295
|
-
margin-top: 4px;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
.confidence-fill {
|
|
299
|
-
height: 100%;
|
|
300
|
-
border-radius: 3px;
|
|
301
|
-
transition: width 0.6s ease;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/* Backup status cards */
|
|
305
|
-
.backup-stat {
|
|
306
|
-
padding: 12px;
|
|
307
|
-
border-radius: 8px;
|
|
308
|
-
background: var(--bs-tertiary-bg);
|
|
309
|
-
text-align: center;
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
.backup-stat .value {
|
|
313
|
-
font-size: 1.3rem;
|
|
314
|
-
font-weight: 700;
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
.backup-stat .label {
|
|
318
|
-
font-size: 0.75rem;
|
|
319
|
-
color: var(--bs-secondary-color);
|
|
320
|
-
text-transform: uppercase;
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
/* Project delete button */
|
|
324
|
-
.btn-delete-profile {
|
|
325
|
-
padding: 2px 8px;
|
|
326
|
-
font-size: 0.75rem;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
/* Dark mode toggle button */
|
|
330
|
-
.theme-toggle {
|
|
331
|
-
background: none;
|
|
332
|
-
border: 1px solid rgba(255,255,255,0.3);
|
|
333
|
-
color: white;
|
|
334
|
-
border-radius: 20px;
|
|
335
|
-
padding: 4px 12px;
|
|
336
|
-
font-size: 0.9rem;
|
|
337
|
-
cursor: pointer;
|
|
338
|
-
transition: background 0.2s;
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
.theme-toggle:hover {
|
|
342
|
-
background: rgba(255,255,255,0.15);
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
/* Modal content formatting */
|
|
346
|
-
.memory-detail-content {
|
|
347
|
-
white-space: pre-wrap;
|
|
348
|
-
word-break: break-word;
|
|
349
|
-
font-size: 0.95rem;
|
|
350
|
-
line-height: 1.6;
|
|
351
|
-
max-height: 400px;
|
|
352
|
-
overflow-y: auto;
|
|
353
|
-
padding: 16px;
|
|
354
|
-
background: var(--bs-tertiary-bg);
|
|
355
|
-
border-radius: 8px;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
.memory-detail-meta dt {
|
|
359
|
-
font-weight: 600;
|
|
360
|
-
color: var(--bs-secondary-color);
|
|
361
|
-
font-size: 0.8rem;
|
|
362
|
-
text-transform: uppercase;
|
|
363
|
-
letter-spacing: 0.5px;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
.memory-detail-meta dd {
|
|
367
|
-
margin-bottom: 12px;
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
/* Export dropdown */
|
|
371
|
-
.export-dropdown .dropdown-menu {
|
|
372
|
-
min-width: 200px;
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
/* Tab badge */
|
|
376
|
-
.tab-count {
|
|
377
|
-
font-size: 0.7rem;
|
|
378
|
-
vertical-align: super;
|
|
379
|
-
margin-left: 2px;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
/* Footer */
|
|
383
|
-
footer {
|
|
384
|
-
text-align: center;
|
|
385
|
-
padding: 20px;
|
|
386
|
-
margin-top: 40px;
|
|
387
|
-
border-top: 1px solid var(--bs-border-color);
|
|
388
|
-
color: var(--bs-secondary-color);
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
footer a {
|
|
392
|
-
color: #667eea;
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
[data-bs-theme="dark"] footer a {
|
|
396
|
-
color: #8fa4ff;
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
/* ========================================
|
|
400
|
-
MOBILE & TABLET RESPONSIVE STYLES
|
|
401
|
-
======================================== */
|
|
402
|
-
|
|
403
|
-
/* Tablet (768px and below) */
|
|
404
|
-
@media (max-width: 768px) {
|
|
405
|
-
.navbar-brand {
|
|
406
|
-
font-size: 1rem;
|
|
407
|
-
}
|
|
408
|
-
|
|
409
|
-
#navbar-subtitle {
|
|
410
|
-
display: none !important;
|
|
411
|
-
}
|
|
412
|
-
|
|
413
|
-
.stat-card {
|
|
414
|
-
margin-bottom: 12px;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
.stat-value {
|
|
418
|
-
font-size: 1.4rem;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
.stat-icon {
|
|
422
|
-
font-size: 1.5rem;
|
|
423
|
-
}
|
|
424
|
-
|
|
425
|
-
/* Graph container - smaller on tablet */
|
|
426
|
-
#graph-container {
|
|
427
|
-
height: 450px !important;
|
|
428
|
-
max-height: 450px;
|
|
429
|
-
}
|
|
430
|
-
|
|
431
|
-
/* Stack controls vertically on tablet */
|
|
432
|
-
.tab-pane .row > .col-md-6,
|
|
433
|
-
.tab-pane .row > .col-md-8,
|
|
434
|
-
.tab-pane .row > .col-md-4 {
|
|
435
|
-
margin-bottom: 10px;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
/* Smaller buttons on mobile */
|
|
439
|
-
.btn-sm {
|
|
440
|
-
font-size: 0.8rem;
|
|
441
|
-
padding: 4px 8px;
|
|
442
|
-
}
|
|
443
|
-
|
|
444
|
-
/* Memory table - hide less important columns */
|
|
445
|
-
.memory-table th:nth-child(4),
|
|
446
|
-
.memory-table td:nth-child(4),
|
|
447
|
-
.memory-table th:nth-child(5),
|
|
448
|
-
.memory-table td:nth-child(5) {
|
|
449
|
-
display: none;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
.memory-content {
|
|
453
|
-
max-width: 200px;
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
/* Mobile (480px and below) */
|
|
458
|
-
@media (max-width: 480px) {
|
|
459
|
-
body {
|
|
460
|
-
font-size: 0.9rem;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
.navbar-brand {
|
|
464
|
-
font-size: 0.9rem;
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
.container-fluid {
|
|
468
|
-
padding-left: 10px;
|
|
469
|
-
padding-right: 10px;
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
/* Stat cards - 2 per row on mobile */
|
|
473
|
-
.col-6.mb-3 {
|
|
474
|
-
padding-left: 5px;
|
|
475
|
-
padding-right: 5px;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
.stat-card {
|
|
479
|
-
padding: 12px 8px !important;
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
.stat-value {
|
|
483
|
-
font-size: 1.2rem;
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
.stat-icon {
|
|
487
|
-
font-size: 1.2rem;
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
.stat-card small {
|
|
491
|
-
font-size: 0.7rem;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
/* Graph container - even smaller on mobile */
|
|
495
|
-
#graph-container {
|
|
496
|
-
height: 350px !important;
|
|
497
|
-
max-height: 350px;
|
|
498
|
-
border-radius: 6px;
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
/* Tabs - smaller text */
|
|
502
|
-
.nav-tabs .nav-link {
|
|
503
|
-
font-size: 0.8rem;
|
|
504
|
-
padding: 8px 10px;
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
.nav-tabs .nav-link i {
|
|
508
|
-
display: none;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
/* Search controls - stack vertically */
|
|
512
|
-
#memories-pane .row > div {
|
|
513
|
-
margin-bottom: 8px;
|
|
514
|
-
}
|
|
515
|
-
|
|
516
|
-
/* Memory table - show only essentials */
|
|
517
|
-
.memory-table {
|
|
518
|
-
font-size: 0.8rem;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
.memory-table th:nth-child(3),
|
|
522
|
-
.memory-table td:nth-child(3),
|
|
523
|
-
.memory-table th:nth-child(4),
|
|
524
|
-
.memory-table td:nth-child(4),
|
|
525
|
-
.memory-table th:nth-child(5),
|
|
526
|
-
.memory-table td:nth-child(5) {
|
|
527
|
-
display: none;
|
|
528
|
-
}
|
|
529
|
-
|
|
530
|
-
.memory-content {
|
|
531
|
-
max-width: 150px;
|
|
532
|
-
font-size: 0.75rem;
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
/* Modal - full screen on mobile */
|
|
536
|
-
.modal-dialog {
|
|
537
|
-
margin: 0;
|
|
538
|
-
max-width: 100%;
|
|
539
|
-
height: 100vh;
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
.modal-content {
|
|
543
|
-
height: 100%;
|
|
544
|
-
border-radius: 0;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
/* Dropdown controls */
|
|
548
|
-
.form-select-sm {
|
|
549
|
-
font-size: 0.8rem;
|
|
550
|
-
padding: 4px 8px;
|
|
551
|
-
}
|
|
552
|
-
|
|
553
|
-
/* Project select - smaller */
|
|
554
|
-
.profile-select {
|
|
555
|
-
min-width: 90px;
|
|
556
|
-
font-size: 0.75rem;
|
|
557
|
-
padding: 2px 24px 2px 8px;
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
/* Theme toggle - smaller */
|
|
561
|
-
.theme-toggle {
|
|
562
|
-
font-size: 0.8rem;
|
|
563
|
-
padding: 3px 10px;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
/* Footer - smaller text */
|
|
567
|
-
footer {
|
|
568
|
-
font-size: 0.75rem;
|
|
569
|
-
padding: 15px;
|
|
570
|
-
margin-top: 20px;
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
/* Graph controls - stack vertically on mobile */
|
|
574
|
-
#graph-pane .card .row > div {
|
|
575
|
-
margin-bottom: 10px;
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
/* Hide "Show All Memories" button text on mobile, icon only */
|
|
579
|
-
#graph-status-filtered .btn span {
|
|
580
|
-
display: none;
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
#graph-status-filtered .btn i::after {
|
|
584
|
-
content: ' All';
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
/* Landscape mobile (small height) */
|
|
589
|
-
@media (max-height: 500px) and (orientation: landscape) {
|
|
590
|
-
#graph-container {
|
|
591
|
-
height: 250px !important;
|
|
592
|
-
max-height: 250px;
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
.stat-card {
|
|
596
|
-
padding: 8px !important;
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
.stat-value {
|
|
600
|
-
font-size: 1rem;
|
|
601
|
-
}
|
|
602
|
-
|
|
603
|
-
.navbar {
|
|
604
|
-
padding: 5px 0;
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
/* Touch feedback for interactive elements */
|
|
609
|
-
@media (hover: none) and (pointer: coarse) {
|
|
610
|
-
/* This targets touch devices only */
|
|
611
|
-
.btn:active,
|
|
612
|
-
.nav-link:active,
|
|
613
|
-
.sortable:active {
|
|
614
|
-
opacity: 0.7;
|
|
615
|
-
transform: scale(0.98);
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
/* Larger tap targets on touch devices */
|
|
619
|
-
.btn {
|
|
620
|
-
min-height: 44px;
|
|
621
|
-
min-width: 44px;
|
|
622
|
-
}
|
|
623
|
-
|
|
624
|
-
.nav-tabs .nav-link {
|
|
625
|
-
min-height: 44px;
|
|
626
|
-
}
|
|
627
|
-
|
|
628
|
-
/* Prevent accidental double-tap zoom on buttons */
|
|
629
|
-
.btn,
|
|
630
|
-
.nav-link,
|
|
631
|
-
.form-control,
|
|
632
|
-
.form-select {
|
|
633
|
-
touch-action: manipulation;
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
</style>
|
|
637
|
-
</head>
|
|
638
|
-
<body>
|
|
639
|
-
<!-- Navbar -->
|
|
640
|
-
<nav class="navbar navbar-dark mb-4">
|
|
641
|
-
<div class="container-fluid">
|
|
642
|
-
<span class="navbar-brand mb-0 h1">
|
|
643
|
-
<i class="bi bi-diagram-3"></i> SuperLocalMemory V3
|
|
644
|
-
<span id="mode-badge" class="badge bg-light text-dark ms-2">...</span>
|
|
645
|
-
</span>
|
|
646
|
-
<div class="d-flex align-items-center gap-3">
|
|
647
|
-
<div class="d-flex align-items-center gap-2">
|
|
648
|
-
<i class="bi bi-person-circle text-white-50"></i>
|
|
649
|
-
<select class="form-select form-select-sm profile-select" id="profile-select" title="Switch profile">
|
|
650
|
-
<option value="default">default</option>
|
|
651
|
-
</select>
|
|
652
|
-
<button class="btn btn-sm theme-toggle" id="add-profile-btn" title="Create new profile" style="padding:2px 8px;font-size:1rem;line-height:1;">
|
|
653
|
-
<i class="bi bi-plus-lg"></i>
|
|
654
|
-
</button>
|
|
655
|
-
</div>
|
|
656
|
-
<span class="text-white-50 d-none d-md-inline" id="navbar-subtitle">Knowledge Graph Explorer</span>
|
|
657
|
-
<button class="btn btn-sm theme-toggle" id="refresh-dashboard-btn" onclick="refreshDashboard()" title="Refresh Dashboard" style="padding:4px 8px;">
|
|
658
|
-
<i class="bi bi-arrow-clockwise" aria-hidden="true"></i>
|
|
659
|
-
</button>
|
|
660
|
-
<button class="theme-toggle" id="theme-toggle" onclick="toggleDarkMode()" aria-label="Toggle dark mode">
|
|
661
|
-
<i class="bi bi-sun-fill" id="theme-icon" aria-hidden="true"></i>
|
|
662
|
-
</button>
|
|
663
|
-
</div>
|
|
664
|
-
</div>
|
|
665
|
-
</nav>
|
|
666
|
-
|
|
667
|
-
<div class="container-fluid">
|
|
668
|
-
<!-- Stats Overview -->
|
|
669
|
-
<div class="row mb-4" id="stats-container">
|
|
670
|
-
<div class="col-md-3 col-6 mb-3">
|
|
671
|
-
<div class="card stat-card stat-card-memories text-center p-3">
|
|
672
|
-
<div class="stat-bg"></div>
|
|
673
|
-
<i class="bi bi-journal-text stat-icon text-primary"></i>
|
|
674
|
-
<h3 class="mt-2 mb-0 stat-value" id="stat-memories">-</h3>
|
|
675
|
-
<small class="text-muted">Total Memories</small>
|
|
676
|
-
</div>
|
|
677
|
-
</div>
|
|
678
|
-
<div class="col-md-3 col-6 mb-3">
|
|
679
|
-
<div class="card stat-card stat-card-clusters text-center p-3">
|
|
680
|
-
<div class="stat-bg"></div>
|
|
681
|
-
<i class="bi bi-collection stat-icon text-success"></i>
|
|
682
|
-
<h3 class="mt-2 mb-0 stat-value" id="stat-clusters">-</h3>
|
|
683
|
-
<small class="text-muted">Clusters</small>
|
|
684
|
-
</div>
|
|
685
|
-
</div>
|
|
686
|
-
<div class="col-md-3 col-6 mb-3">
|
|
687
|
-
<div class="card stat-card stat-card-nodes text-center p-3">
|
|
688
|
-
<div class="stat-bg"></div>
|
|
689
|
-
<i class="bi bi-diagram-2 stat-icon text-info"></i>
|
|
690
|
-
<h3 class="mt-2 mb-0 stat-value" id="stat-nodes">-</h3>
|
|
691
|
-
<small class="text-muted">Graph Nodes</small>
|
|
692
|
-
</div>
|
|
693
|
-
</div>
|
|
694
|
-
<div class="col-md-3 col-6 mb-3">
|
|
695
|
-
<div class="card stat-card stat-card-edges text-center p-3">
|
|
696
|
-
<div class="stat-bg"></div>
|
|
697
|
-
<i class="bi bi-arrows-angle-expand stat-icon text-warning"></i>
|
|
698
|
-
<h3 class="mt-2 mb-0 stat-value" id="stat-edges">-</h3>
|
|
699
|
-
<small class="text-muted">Connections</small>
|
|
700
|
-
</div>
|
|
701
|
-
</div>
|
|
702
|
-
</div>
|
|
703
|
-
|
|
704
|
-
<!-- Main Content Tabs -->
|
|
705
|
-
<ul class="nav nav-tabs flex-wrap mb-3" id="mainTabs" role="tablist">
|
|
706
|
-
<li class="nav-item">
|
|
707
|
-
<button class="nav-link active" id="dashboard-tab" data-bs-toggle="tab" data-bs-target="#dashboard-pane">
|
|
708
|
-
<i class="bi bi-speedometer2"></i> Dashboard
|
|
709
|
-
</button>
|
|
710
|
-
</li>
|
|
711
|
-
<li class="nav-item">
|
|
712
|
-
<button class="nav-link" id="graph-tab" data-bs-toggle="tab" data-bs-target="#graph-pane">
|
|
713
|
-
<i class="bi bi-diagram-3"></i> Knowledge Graph
|
|
714
|
-
</button>
|
|
715
|
-
</li>
|
|
716
|
-
<li class="nav-item">
|
|
717
|
-
<button class="nav-link" id="memories-tab" data-bs-toggle="tab" data-bs-target="#memories-pane">
|
|
718
|
-
<i class="bi bi-list-ul"></i> Memories
|
|
719
|
-
</button>
|
|
720
|
-
</li>
|
|
721
|
-
<li class="nav-item">
|
|
722
|
-
<button class="nav-link" id="recall-lab-tab" data-bs-toggle="tab" data-bs-target="#recall-lab-pane">
|
|
723
|
-
<i class="bi bi-search-heart"></i> Recall Lab
|
|
724
|
-
</button>
|
|
725
|
-
</li>
|
|
726
|
-
<li class="nav-item">
|
|
727
|
-
<button class="nav-link" id="clusters-tab" data-bs-toggle="tab" data-bs-target="#clusters-pane">
|
|
728
|
-
<i class="bi bi-collection"></i> Clusters
|
|
729
|
-
</button>
|
|
730
|
-
</li>
|
|
731
|
-
<li class="nav-item">
|
|
732
|
-
<button class="nav-link" id="patterns-tab" data-bs-toggle="tab" data-bs-target="#patterns-pane">
|
|
733
|
-
<i class="bi bi-puzzle"></i> Patterns
|
|
734
|
-
</button>
|
|
735
|
-
</li>
|
|
736
|
-
<li class="nav-item">
|
|
737
|
-
<button class="nav-link" id="timeline-tab" data-bs-toggle="tab" data-bs-target="#timeline-pane">
|
|
738
|
-
<i class="bi bi-clock-history"></i> Timeline
|
|
739
|
-
</button>
|
|
740
|
-
</li>
|
|
741
|
-
<li class="nav-item">
|
|
742
|
-
<button class="nav-link" id="learning-tab" data-bs-toggle="tab" data-bs-target="#learning-pane">
|
|
743
|
-
<i class="bi bi-mortarboard"></i> Learning
|
|
744
|
-
</button>
|
|
745
|
-
</li>
|
|
746
|
-
<li class="nav-item">
|
|
747
|
-
<button class="nav-link" id="events-tab" data-bs-toggle="tab" data-bs-target="#events-pane">
|
|
748
|
-
<i class="bi bi-broadcast"></i> Live Events
|
|
749
|
-
</button>
|
|
750
|
-
</li>
|
|
751
|
-
<li class="nav-item">
|
|
752
|
-
<button class="nav-link" id="agents-tab" data-bs-toggle="tab" data-bs-target="#agents-pane">
|
|
753
|
-
<i class="bi bi-robot"></i> Agents
|
|
754
|
-
</button>
|
|
755
|
-
</li>
|
|
756
|
-
<li class="nav-item">
|
|
757
|
-
<button class="nav-link" id="trust-tab" data-bs-toggle="tab" data-bs-target="#trust-pane">
|
|
758
|
-
<i class="bi bi-shield-check"></i> Trust
|
|
759
|
-
</button>
|
|
760
|
-
</li>
|
|
761
|
-
<li class="nav-item" role="presentation">
|
|
762
|
-
<button class="nav-link" id="lifecycle-tab" data-bs-toggle="tab" data-bs-target="#lifecycle-pane" type="button" role="tab">
|
|
763
|
-
<i class="bi bi-hourglass-split"></i> Lifecycle
|
|
764
|
-
</button>
|
|
765
|
-
</li>
|
|
766
|
-
<li class="nav-item" role="presentation">
|
|
767
|
-
<button class="nav-link" id="behavioral-tab" data-bs-toggle="tab" data-bs-target="#behavioral-pane" type="button" role="tab">
|
|
768
|
-
<i class="bi bi-lightbulb"></i> Behavioral
|
|
769
|
-
</button>
|
|
770
|
-
</li>
|
|
771
|
-
<li class="nav-item" role="presentation">
|
|
772
|
-
<button class="nav-link" id="compliance-tab" data-bs-toggle="tab" data-bs-target="#compliance-pane" type="button" role="tab">
|
|
773
|
-
<i class="bi bi-shield-lock"></i> Compliance
|
|
774
|
-
</button>
|
|
775
|
-
</li>
|
|
776
|
-
<li class="nav-item">
|
|
777
|
-
<button class="nav-link" id="math-health-tab" data-bs-toggle="tab" data-bs-target="#math-health-pane">
|
|
778
|
-
<i class="bi bi-calculator"></i> Math Health
|
|
779
|
-
</button>
|
|
780
|
-
</li>
|
|
781
|
-
<li class="nav-item">
|
|
782
|
-
<button class="nav-link" id="ide-tab" data-bs-toggle="tab" data-bs-target="#ide-pane">
|
|
783
|
-
<i class="bi bi-plug"></i> IDEs
|
|
784
|
-
</button>
|
|
785
|
-
</li>
|
|
786
|
-
<li class="nav-item">
|
|
787
|
-
<button class="nav-link" id="settings-tab" data-bs-toggle="tab" data-bs-target="#settings-pane">
|
|
788
|
-
<i class="bi bi-gear"></i> Settings
|
|
789
|
-
</button>
|
|
790
|
-
</li>
|
|
791
|
-
</ul>
|
|
792
|
-
|
|
793
|
-
<!-- Privacy Notice & Feedback Progress (v2.7.4) -->
|
|
794
|
-
<div id="privacy-notice"></div>
|
|
795
|
-
<div id="feedback-progress" class="mb-3"></div>
|
|
796
|
-
|
|
797
|
-
<div class="tab-content">
|
|
798
|
-
<!-- Graph Visualization -->
|
|
799
|
-
<!-- V3 Dashboard -->
|
|
800
|
-
<div class="tab-pane fade show active" id="dashboard-pane">
|
|
801
|
-
<div class="row g-3 mb-4">
|
|
802
|
-
<!-- Mode Card -->
|
|
803
|
-
<div class="col-md-4">
|
|
804
|
-
<div class="card stat-card h-100">
|
|
805
|
-
<div class="card-body">
|
|
806
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
807
|
-
<h6 class="card-subtitle text-muted">Operating Mode</h6>
|
|
808
|
-
<i class="bi bi-shield-check stat-icon text-primary"></i>
|
|
809
|
-
</div>
|
|
810
|
-
<h3 id="dashboard-mode" class="stat-value">Loading...</h3>
|
|
811
|
-
<p id="dashboard-mode-desc" class="text-muted small mb-2">Connecting...</p>
|
|
812
|
-
<div class="btn-group btn-group-sm" role="group">
|
|
813
|
-
<button class="btn btn-outline-primary mode-btn" data-mode="a">A</button>
|
|
814
|
-
<button class="btn btn-outline-primary mode-btn" data-mode="b">B</button>
|
|
815
|
-
<button class="btn btn-outline-primary mode-btn" data-mode="c">C</button>
|
|
816
|
-
</div>
|
|
817
|
-
</div>
|
|
818
|
-
</div>
|
|
819
|
-
</div>
|
|
820
|
-
<!-- Stats Card -->
|
|
821
|
-
<div class="col-md-4">
|
|
822
|
-
<div class="card stat-card h-100">
|
|
823
|
-
<div class="card-body">
|
|
824
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
825
|
-
<h6 class="card-subtitle text-muted">Memories</h6>
|
|
826
|
-
<i class="bi bi-database stat-icon text-success"></i>
|
|
827
|
-
</div>
|
|
828
|
-
<h3 id="dashboard-memory-count" class="stat-value">0</h3>
|
|
829
|
-
<p class="text-muted small mb-0">facts stored</p>
|
|
830
|
-
</div>
|
|
831
|
-
</div>
|
|
832
|
-
</div>
|
|
833
|
-
<!-- Provider Card -->
|
|
834
|
-
<div class="col-md-4">
|
|
835
|
-
<div class="card stat-card h-100">
|
|
836
|
-
<div class="card-body">
|
|
837
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
838
|
-
<h6 class="card-subtitle text-muted">LLM Provider</h6>
|
|
839
|
-
<i class="bi bi-cloud stat-icon text-info"></i>
|
|
840
|
-
</div>
|
|
841
|
-
<h3 id="dashboard-provider" class="stat-value">Loading...</h3>
|
|
842
|
-
<p id="dashboard-model" class="text-muted small mb-0"></p>
|
|
843
|
-
</div>
|
|
844
|
-
</div>
|
|
845
|
-
</div>
|
|
846
|
-
</div>
|
|
847
|
-
<!-- Quick Actions -->
|
|
848
|
-
<div class="row g-3 mb-4">
|
|
849
|
-
<div class="col-md-6">
|
|
850
|
-
<div class="card">
|
|
851
|
-
<div class="card-body">
|
|
852
|
-
<h6><i class="bi bi-plus-circle"></i> Quick Store</h6>
|
|
853
|
-
<div class="input-group">
|
|
854
|
-
<input type="text" id="quick-store-input" class="form-control" placeholder="Type something to remember...">
|
|
855
|
-
<button class="btn btn-primary" id="quick-store-btn">Store</button>
|
|
856
|
-
</div>
|
|
857
|
-
</div>
|
|
858
|
-
</div>
|
|
859
|
-
</div>
|
|
860
|
-
<div class="col-md-6">
|
|
861
|
-
<div class="card">
|
|
862
|
-
<div class="card-body">
|
|
863
|
-
<h6><i class="bi bi-search"></i> Quick Recall</h6>
|
|
864
|
-
<div class="input-group">
|
|
865
|
-
<input type="text" id="quick-recall-input" class="form-control" placeholder="Search your memories...">
|
|
866
|
-
<button class="btn btn-success" id="quick-recall-btn">Recall</button>
|
|
867
|
-
</div>
|
|
868
|
-
<div id="quick-recall-results" class="mt-2 small"></div>
|
|
869
|
-
</div>
|
|
870
|
-
</div>
|
|
871
|
-
</div>
|
|
872
|
-
</div>
|
|
873
|
-
<!-- System Info -->
|
|
874
|
-
<div class="row g-3">
|
|
875
|
-
<div class="col-md-12">
|
|
876
|
-
<div class="card">
|
|
877
|
-
<div class="card-body">
|
|
878
|
-
<h6><i class="bi bi-info-circle"></i> System</h6>
|
|
879
|
-
<div class="row text-muted small">
|
|
880
|
-
<div class="col-md-3">Version: <strong id="dashboard-version">...</strong></div>
|
|
881
|
-
<div class="col-md-3">Profile: <strong id="dashboard-profile">default</strong></div>
|
|
882
|
-
<div class="col-md-3">Base: <strong id="dashboard-basedir">~/.superlocalmemory</strong></div>
|
|
883
|
-
<div class="col-md-3">Math Layers: <strong class="text-success">Active</strong></div>
|
|
884
|
-
</div>
|
|
885
|
-
</div>
|
|
886
|
-
</div>
|
|
887
|
-
</div>
|
|
888
|
-
</div>
|
|
889
|
-
</div>
|
|
890
|
-
|
|
891
|
-
<!-- Graph Visualization -->
|
|
892
|
-
<div class="tab-pane fade" id="graph-pane">
|
|
893
|
-
<div class="card p-3 mb-3">
|
|
894
|
-
<div class="row align-items-center mb-2">
|
|
895
|
-
<div class="col-md-8">
|
|
896
|
-
<h5 class="mb-0">Interactive Knowledge Graph</h5>
|
|
897
|
-
<small class="text-muted">Zoom, pan, click nodes to explore • Powered by Cytoscape.js</small>
|
|
898
|
-
<div id="graph-stats" class="mt-2"></div>
|
|
899
|
-
</div>
|
|
900
|
-
<div class="col-md-4 text-end">
|
|
901
|
-
<button class="btn btn-sm btn-outline-primary" onclick="loadGraph()" aria-label="Refresh graph data">
|
|
902
|
-
<i class="bi bi-arrow-clockwise"></i> Refresh
|
|
903
|
-
</button>
|
|
904
|
-
<select class="form-select form-select-sm d-inline-block w-auto" id="graph-max-nodes" onchange="loadGraph()" aria-label="Select maximum number of nodes to display">
|
|
905
|
-
<option value="50" selected>50 nodes</option>
|
|
906
|
-
<option value="100">100 nodes</option>
|
|
907
|
-
<option value="200">200 nodes</option>
|
|
908
|
-
<option value="500">500 nodes</option>
|
|
909
|
-
</select>
|
|
910
|
-
</div>
|
|
911
|
-
</div>
|
|
912
|
-
<div class="row align-items-center">
|
|
913
|
-
<div class="col-md-6">
|
|
914
|
-
<label class="form-label mb-1 small" for="graph-layout-selector">Layout Algorithm:</label>
|
|
915
|
-
<select class="form-select form-select-sm" id="graph-layout-selector" onchange="changeGraphLayout(this.value)" aria-label="Select graph layout algorithm">
|
|
916
|
-
<option value="fcose" selected>Force-Directed (Fast)</option>
|
|
917
|
-
<option value="cose">Force-Directed (Classic)</option>
|
|
918
|
-
<option value="circle">Circular</option>
|
|
919
|
-
<option value="grid">Grid</option>
|
|
920
|
-
<option value="breadthfirst">Hierarchical</option>
|
|
921
|
-
<option value="concentric">Concentric (by Importance)</option>
|
|
922
|
-
</select>
|
|
923
|
-
</div>
|
|
924
|
-
<div class="col-md-6">
|
|
925
|
-
<!-- Clear status indicator - shows what user is viewing -->
|
|
926
|
-
<div id="graph-status-container">
|
|
927
|
-
<!-- When viewing FULL graph (default state) -->
|
|
928
|
-
<div id="graph-status-full" style="display:block;" role="status" aria-live="polite">
|
|
929
|
-
<div class="d-flex align-items-center">
|
|
930
|
-
<span class="text-muted small">
|
|
931
|
-
<i class="bi bi-diagram-3"></i> <span id="graph-status-full-text">Showing all memories</span>
|
|
932
|
-
</span>
|
|
933
|
-
<button class="btn btn-sm btn-outline-secondary ms-2" onclick="loadGraph()" aria-label="Refresh current graph view">
|
|
934
|
-
<i class="bi bi-arrow-clockwise"></i> Refresh
|
|
935
|
-
</button>
|
|
936
|
-
</div>
|
|
937
|
-
</div>
|
|
938
|
-
|
|
939
|
-
<!-- When viewing FILTERED by cluster (show BIG clear button) -->
|
|
940
|
-
<div id="graph-status-filtered" style="display:none;" role="status" aria-live="polite">
|
|
941
|
-
<div class="alert alert-info py-2 px-3 mb-0 d-flex align-items-center justify-content-between">
|
|
942
|
-
<span>
|
|
943
|
-
<i class="bi bi-funnel-fill"></i>
|
|
944
|
-
<strong id="graph-filter-description">Viewing Cluster X</strong>
|
|
945
|
-
<span class="small text-muted ms-2" id="graph-filter-count">(X memories)</span>
|
|
946
|
-
</span>
|
|
947
|
-
<button class="btn btn-primary btn-sm ms-3" onclick="clearGraphFilters()" aria-label="Clear filter and show all memories">
|
|
948
|
-
<i class="bi bi-grid-3x3"></i> Show All Memories
|
|
949
|
-
</button>
|
|
950
|
-
</div>
|
|
951
|
-
</div>
|
|
952
|
-
</div>
|
|
953
|
-
</div>
|
|
954
|
-
</div>
|
|
955
|
-
</div>
|
|
956
|
-
<div id="graph-container"
|
|
957
|
-
role="application"
|
|
958
|
-
aria-label="Interactive knowledge graph - use Tab to navigate nodes, Enter to view details, Arrow keys to move between adjacent nodes, Escape to clear filters"
|
|
959
|
-
aria-describedby="graph-stats"
|
|
960
|
-
style="width:100%; height:600px; border:1px solid #dee2e6; border-radius:8px; background:#f8f9fa;">
|
|
961
|
-
</div>
|
|
962
|
-
|
|
963
|
-
<!-- Skip link for keyboard users -->
|
|
964
|
-
<a href="#memories-pane" class="visually-hidden-focusable">Skip to Memories list</a>
|
|
965
|
-
</div>
|
|
966
|
-
|
|
967
|
-
<!-- Memories List -->
|
|
968
|
-
<div class="tab-pane fade" id="memories-pane">
|
|
969
|
-
<div class="card p-3 mb-3">
|
|
970
|
-
<div class="row g-2">
|
|
971
|
-
<div class="col-md-5">
|
|
972
|
-
<input type="text" class="form-control search-box" id="search-query" placeholder="Search memories...">
|
|
973
|
-
</div>
|
|
974
|
-
<div class="col-md-2">
|
|
975
|
-
<select class="form-select" id="filter-category">
|
|
976
|
-
<option value="">All Categories</option>
|
|
977
|
-
</select>
|
|
978
|
-
</div>
|
|
979
|
-
<div class="col-md-2">
|
|
980
|
-
<select class="form-select" id="filter-project">
|
|
981
|
-
<option value="">All Projects</option>
|
|
982
|
-
</select>
|
|
983
|
-
</div>
|
|
984
|
-
<div class="col-md-1">
|
|
985
|
-
<button class="btn btn-primary w-100" onclick="searchMemories()" title="Search">
|
|
986
|
-
<i class="bi bi-search"></i>
|
|
987
|
-
</button>
|
|
988
|
-
</div>
|
|
989
|
-
<div class="col-md-2">
|
|
990
|
-
<div class="dropdown export-dropdown">
|
|
991
|
-
<button class="btn btn-outline-secondary w-100 dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
|
992
|
-
<i class="bi bi-download"></i> Export
|
|
993
|
-
</button>
|
|
994
|
-
<ul class="dropdown-menu">
|
|
995
|
-
<li><a class="dropdown-item" href="#" onclick="exportAll('json'); return false;">
|
|
996
|
-
<i class="bi bi-filetype-json"></i> Export All (JSON)
|
|
997
|
-
</a></li>
|
|
998
|
-
<li><a class="dropdown-item" href="#" onclick="exportAll('jsonl'); return false;">
|
|
999
|
-
<i class="bi bi-file-text"></i> Export All (JSONL)
|
|
1000
|
-
</a></li>
|
|
1001
|
-
<li><hr class="dropdown-divider"></li>
|
|
1002
|
-
<li><a class="dropdown-item" href="#" id="export-search-btn" onclick="exportSearchResults(); return false;" style="display:none;">
|
|
1003
|
-
<i class="bi bi-funnel"></i> Export Search Results
|
|
1004
|
-
</a></li>
|
|
1005
|
-
</ul>
|
|
1006
|
-
</div>
|
|
1007
|
-
</div>
|
|
1008
|
-
</div>
|
|
1009
|
-
</div>
|
|
1010
|
-
<div class="card p-3">
|
|
1011
|
-
<div id="memories-list" class="table-responsive">
|
|
1012
|
-
<div class="loading">
|
|
1013
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1014
|
-
<div>Loading memories...</div>
|
|
1015
|
-
</div>
|
|
1016
|
-
</div>
|
|
1017
|
-
</div>
|
|
1018
|
-
</div>
|
|
1019
|
-
|
|
1020
|
-
<!-- V3 Recall Lab -->
|
|
1021
|
-
<div class="tab-pane fade" id="recall-lab-pane">
|
|
1022
|
-
<h5>Recall Lab — Search with Channel Breakdown</h5>
|
|
1023
|
-
<p class="text-muted">See how each retrieval channel contributes to results.</p>
|
|
1024
|
-
<div class="input-group mb-3">
|
|
1025
|
-
<input type="text" id="recall-lab-query" class="form-control form-control-lg" placeholder="Enter your query...">
|
|
1026
|
-
<select id="recall-lab-per-page" class="form-select" style="max-width:100px;">
|
|
1027
|
-
<option value="10" selected>10</option>
|
|
1028
|
-
<option value="25">25</option>
|
|
1029
|
-
<option value="50">50</option>
|
|
1030
|
-
</select>
|
|
1031
|
-
<button class="btn btn-primary btn-lg" id="recall-lab-search">
|
|
1032
|
-
<i class="bi bi-search"></i> Search
|
|
1033
|
-
</button>
|
|
1034
|
-
</div>
|
|
1035
|
-
<div id="recall-lab-meta" class="mb-3 text-muted small"></div>
|
|
1036
|
-
<div id="recall-lab-results"></div>
|
|
1037
|
-
</div>
|
|
1038
|
-
|
|
1039
|
-
<!-- Clusters -->
|
|
1040
|
-
<div class="tab-pane fade" id="clusters-pane">
|
|
1041
|
-
<div class="card p-3">
|
|
1042
|
-
<h5 class="mb-3">Knowledge Clusters</h5>
|
|
1043
|
-
<div id="clusters-list">
|
|
1044
|
-
<div class="loading">
|
|
1045
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1046
|
-
<div>Loading clusters...</div>
|
|
1047
|
-
</div>
|
|
1048
|
-
</div>
|
|
1049
|
-
</div>
|
|
1050
|
-
</div>
|
|
1051
|
-
|
|
1052
|
-
<!-- Patterns -->
|
|
1053
|
-
<div class="tab-pane fade" id="patterns-pane">
|
|
1054
|
-
<div class="card p-3">
|
|
1055
|
-
<h5 class="mb-3">Learned Patterns</h5>
|
|
1056
|
-
<div id="patterns-list">
|
|
1057
|
-
<div class="loading">
|
|
1058
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1059
|
-
<div>Loading patterns...</div>
|
|
1060
|
-
</div>
|
|
1061
|
-
</div>
|
|
1062
|
-
</div>
|
|
1063
|
-
</div>
|
|
1064
|
-
|
|
1065
|
-
<!-- Timeline -->
|
|
1066
|
-
<div class="tab-pane fade" id="timeline-pane">
|
|
1067
|
-
<div class="card p-3">
|
|
1068
|
-
<h5 class="mb-3">Memory Creation Timeline</h5>
|
|
1069
|
-
<div id="timeline-chart" class="timeline-chart">
|
|
1070
|
-
<div class="loading">
|
|
1071
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1072
|
-
<div>Loading timeline...</div>
|
|
1073
|
-
</div>
|
|
1074
|
-
</div>
|
|
1075
|
-
</div>
|
|
1076
|
-
</div>
|
|
1077
|
-
|
|
1078
|
-
<!-- Learning System -->
|
|
1079
|
-
<div class="tab-pane fade" id="learning-pane">
|
|
1080
|
-
<!-- Getting Started Guide -->
|
|
1081
|
-
<div class="alert alert-light border mb-3" id="learning-getting-started">
|
|
1082
|
-
<h6 class="mb-2"><i class="bi bi-info-circle text-primary"></i> How Learning Works</h6>
|
|
1083
|
-
<p class="mb-1 small">SuperLocalMemory learns from your usage patterns to improve retrieval ranking over time. This happens automatically as you use <code>slm recall</code> or search via MCP.</p>
|
|
1084
|
-
<ul class="small mb-0">
|
|
1085
|
-
<li><strong>0-20 signals:</strong> Baseline phase (collecting data)</li>
|
|
1086
|
-
<li><strong>20+ signals:</strong> Rule-based ranking adjustments</li>
|
|
1087
|
-
<li><strong>200+ signals:</strong> ML model trained on your patterns</li>
|
|
1088
|
-
</ul>
|
|
1089
|
-
<p class="mb-0 mt-1 small text-muted">Each recall query generates a signal. Keep using SLM and this tab will populate automatically.</p>
|
|
1090
|
-
</div>
|
|
1091
|
-
<!-- Ranking Phase & Engagement -->
|
|
1092
|
-
<div class="row g-3 mb-3">
|
|
1093
|
-
<div class="col-md-4">
|
|
1094
|
-
<div class="card p-3 text-center">
|
|
1095
|
-
<div class="fw-bold text-muted small">RANKING PHASE</div>
|
|
1096
|
-
<div class="fs-3 fw-bold" id="learning-phase" style="color: var(--bs-primary);">--</div>
|
|
1097
|
-
<small class="text-muted" id="learning-phase-detail">Loading...</small>
|
|
1098
|
-
</div>
|
|
1099
|
-
</div>
|
|
1100
|
-
<div class="col-md-4">
|
|
1101
|
-
<div class="card p-3 text-center">
|
|
1102
|
-
<div class="fw-bold text-muted small">FEEDBACK SIGNALS</div>
|
|
1103
|
-
<div class="fs-3 fw-bold" id="learning-feedback-count">0</div>
|
|
1104
|
-
<small class="text-muted" id="learning-feedback-detail">0 unique queries</small>
|
|
1105
|
-
</div>
|
|
1106
|
-
</div>
|
|
1107
|
-
<div class="col-md-4">
|
|
1108
|
-
<div class="card p-3 text-center">
|
|
1109
|
-
<div class="fw-bold text-muted small">ENGAGEMENT HEALTH</div>
|
|
1110
|
-
<div class="fs-3 fw-bold" id="learning-health" style="color: var(--bs-success);">--</div>
|
|
1111
|
-
<small class="text-muted" id="learning-health-detail">Loading...</small>
|
|
1112
|
-
</div>
|
|
1113
|
-
</div>
|
|
1114
|
-
</div>
|
|
1115
|
-
|
|
1116
|
-
<!-- Phase Progress Bar -->
|
|
1117
|
-
<div class="card p-3 mb-3">
|
|
1118
|
-
<h6 class="mb-2"><i class="bi bi-bar-chart-steps"></i> Adaptive Ranking Progress</h6>
|
|
1119
|
-
<div class="d-flex align-items-center gap-2 mb-2">
|
|
1120
|
-
<div class="flex-grow-1">
|
|
1121
|
-
<div class="progress" style="height: 24px; border-radius: 12px;">
|
|
1122
|
-
<div class="progress-bar" id="learning-progress" role="progressbar" style="width: 0%; border-radius: 12px; transition: width 0.8s ease;" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
|
|
1123
|
-
</div>
|
|
1124
|
-
</div>
|
|
1125
|
-
</div>
|
|
1126
|
-
</div>
|
|
1127
|
-
<div class="d-flex justify-content-between small text-muted">
|
|
1128
|
-
<span>Baseline (0)</span>
|
|
1129
|
-
<span>Rule-Based (20+)</span>
|
|
1130
|
-
<span>ML Model (200+)</span>
|
|
1131
|
-
</div>
|
|
1132
|
-
</div>
|
|
1133
|
-
|
|
1134
|
-
<!-- What We Learned (v2.7.4 — Summary Card) -->
|
|
1135
|
-
<div class="card p-3 mb-3" id="what-we-learned-card">
|
|
1136
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
1137
|
-
<h6 class="mb-0"><i class="bi bi-lightbulb"></i> What SuperLocalMemory Learned About You</h6>
|
|
1138
|
-
<span class="badge bg-success" id="learned-profile-badge">default</span>
|
|
1139
|
-
</div>
|
|
1140
|
-
<div id="what-we-learned-content">
|
|
1141
|
-
<div class="text-center text-muted py-3">
|
|
1142
|
-
<i class="bi bi-hourglass-split" style="font-size: 1.5rem;"></i>
|
|
1143
|
-
<p class="mt-2 mb-0 small">Loading learned insights...</p>
|
|
1144
|
-
</div>
|
|
1145
|
-
</div>
|
|
1146
|
-
</div>
|
|
1147
|
-
|
|
1148
|
-
<div class="row g-3">
|
|
1149
|
-
<!-- Tech Preferences (Layer 1) -->
|
|
1150
|
-
<div class="col-md-6">
|
|
1151
|
-
<div class="card p-3 h-100">
|
|
1152
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
1153
|
-
<h6 class="mb-0"><i class="bi bi-cpu"></i> Tech Preferences</h6>
|
|
1154
|
-
<span class="badge bg-primary">Layer 1</span>
|
|
1155
|
-
</div>
|
|
1156
|
-
<div id="learning-tech-prefs">
|
|
1157
|
-
<div class="text-center text-muted py-3">
|
|
1158
|
-
<i class="bi bi-hourglass-split" style="font-size: 1.5rem;"></i>
|
|
1159
|
-
<p class="mt-2 mb-0 small">Patterns detected after using recall with feedback</p>
|
|
1160
|
-
</div>
|
|
1161
|
-
</div>
|
|
1162
|
-
</div>
|
|
1163
|
-
</div>
|
|
1164
|
-
|
|
1165
|
-
<!-- Workflow Patterns (Layer 3) -->
|
|
1166
|
-
<div class="col-md-6">
|
|
1167
|
-
<div class="card p-3 h-100">
|
|
1168
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
1169
|
-
<h6 class="mb-0"><i class="bi bi-diagram-3"></i> Workflow Patterns</h6>
|
|
1170
|
-
<span class="badge bg-info">Layer 3</span>
|
|
1171
|
-
</div>
|
|
1172
|
-
<div id="learning-workflows">
|
|
1173
|
-
<div class="text-center text-muted py-3">
|
|
1174
|
-
<i class="bi bi-hourglass-split" style="font-size: 1.5rem;"></i>
|
|
1175
|
-
<p class="mt-2 mb-0 small">Sequences detected after 30+ memories</p>
|
|
1176
|
-
</div>
|
|
1177
|
-
</div>
|
|
1178
|
-
</div>
|
|
1179
|
-
</div>
|
|
1180
|
-
</div>
|
|
1181
|
-
|
|
1182
|
-
<div class="row g-3 mt-0">
|
|
1183
|
-
<!-- Source Quality -->
|
|
1184
|
-
<div class="col-md-6">
|
|
1185
|
-
<div class="card p-3 h-100">
|
|
1186
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
1187
|
-
<h6 class="mb-0"><i class="bi bi-stars"></i> Source Quality</h6>
|
|
1188
|
-
<span class="badge bg-success">Per-Tool Scoring</span>
|
|
1189
|
-
</div>
|
|
1190
|
-
<div id="learning-sources">
|
|
1191
|
-
<div class="text-center text-muted py-3">
|
|
1192
|
-
<i class="bi bi-hourglass-split" style="font-size: 1.5rem;"></i>
|
|
1193
|
-
<p class="mt-2 mb-0 small">Quality scores computed after feedback signals</p>
|
|
1194
|
-
</div>
|
|
1195
|
-
</div>
|
|
1196
|
-
</div>
|
|
1197
|
-
</div>
|
|
1198
|
-
|
|
1199
|
-
<!-- Engagement & Privacy -->
|
|
1200
|
-
<div class="col-md-6">
|
|
1201
|
-
<div class="card p-3 h-100">
|
|
1202
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
1203
|
-
<h6 class="mb-0"><i class="bi bi-shield-lock"></i> Privacy & Data</h6>
|
|
1204
|
-
<span class="badge bg-secondary">GDPR Compliant</span>
|
|
1205
|
-
</div>
|
|
1206
|
-
<div id="learning-privacy">
|
|
1207
|
-
<div class="small">
|
|
1208
|
-
<div class="d-flex justify-content-between border-bottom py-1">
|
|
1209
|
-
<span class="text-muted">Learning DB</span>
|
|
1210
|
-
<span class="fw-bold" id="learning-db-size">--</span>
|
|
1211
|
-
</div>
|
|
1212
|
-
<div class="d-flex justify-content-between border-bottom py-1">
|
|
1213
|
-
<span class="text-muted">Patterns learned</span>
|
|
1214
|
-
<span class="fw-bold" id="learning-pattern-count">0</span>
|
|
1215
|
-
</div>
|
|
1216
|
-
<div class="d-flex justify-content-between border-bottom py-1">
|
|
1217
|
-
<span class="text-muted">Models trained</span>
|
|
1218
|
-
<span class="fw-bold" id="learning-model-count">0</span>
|
|
1219
|
-
</div>
|
|
1220
|
-
<div class="d-flex justify-content-between border-bottom py-1">
|
|
1221
|
-
<span class="text-muted">Sources tracked</span>
|
|
1222
|
-
<span class="fw-bold" id="learning-source-count">0</span>
|
|
1223
|
-
</div>
|
|
1224
|
-
<div class="d-flex justify-content-between py-1">
|
|
1225
|
-
<span class="text-muted">Telemetry</span>
|
|
1226
|
-
<span class="text-success fw-bold">None</span>
|
|
1227
|
-
</div>
|
|
1228
|
-
</div>
|
|
1229
|
-
<div class="mt-2">
|
|
1230
|
-
<button class="btn btn-sm btn-outline-danger" onclick="resetLearning()">
|
|
1231
|
-
<i class="bi bi-trash"></i> Reset Learning Data
|
|
1232
|
-
</button>
|
|
1233
|
-
<small class="text-muted d-block mt-1">Deletes learning.db. Memories preserved.</small>
|
|
1234
|
-
</div>
|
|
1235
|
-
</div>
|
|
1236
|
-
</div>
|
|
1237
|
-
</div>
|
|
1238
|
-
</div>
|
|
1239
|
-
</div>
|
|
1240
|
-
|
|
1241
|
-
<!-- Live Events (v2.5) -->
|
|
1242
|
-
<div class="tab-pane fade" id="events-pane">
|
|
1243
|
-
<div class="card p-3 mb-3">
|
|
1244
|
-
<div class="row align-items-center mb-3">
|
|
1245
|
-
<div class="col-md-6">
|
|
1246
|
-
<h5 class="mb-0"><i class="bi bi-broadcast"></i> Live Event Stream</h5>
|
|
1247
|
-
<small class="text-muted">Real-time memory operations as they happen</small>
|
|
1248
|
-
</div>
|
|
1249
|
-
<div class="col-md-6 text-end">
|
|
1250
|
-
<span id="event-connection-status" class="badge bg-secondary me-2">Connecting...</span>
|
|
1251
|
-
<select class="form-select form-select-sm d-inline-block w-auto" id="event-type-filter" onchange="filterEvents()">
|
|
1252
|
-
<option value="">All Events</option>
|
|
1253
|
-
<option value="memory.created">Memory Created</option>
|
|
1254
|
-
<option value="memory.updated">Memory Updated</option>
|
|
1255
|
-
<option value="memory.deleted">Memory Deleted</option>
|
|
1256
|
-
<option value="memory.recalled">Memory Recalled</option>
|
|
1257
|
-
<option value="agent.connected">Agent Connected</option>
|
|
1258
|
-
</select>
|
|
1259
|
-
<button class="btn btn-sm btn-outline-secondary ms-1" onclick="clearEventStream()">
|
|
1260
|
-
<i class="bi bi-trash"></i> Clear
|
|
1261
|
-
</button>
|
|
1262
|
-
</div>
|
|
1263
|
-
</div>
|
|
1264
|
-
<!-- Event Stats Row -->
|
|
1265
|
-
<div class="row g-2 mb-3" id="event-stats-row">
|
|
1266
|
-
<div class="col-md-3">
|
|
1267
|
-
<div class="border rounded p-2 text-center">
|
|
1268
|
-
<div class="fw-bold" id="event-stat-total">0</div>
|
|
1269
|
-
<small class="text-muted">Total Events</small>
|
|
1270
|
-
</div>
|
|
1271
|
-
</div>
|
|
1272
|
-
<div class="col-md-3">
|
|
1273
|
-
<div class="border rounded p-2 text-center">
|
|
1274
|
-
<div class="fw-bold" id="event-stat-24h">0</div>
|
|
1275
|
-
<small class="text-muted">Last 24h</small>
|
|
1276
|
-
</div>
|
|
1277
|
-
</div>
|
|
1278
|
-
<div class="col-md-3">
|
|
1279
|
-
<div class="border rounded p-2 text-center">
|
|
1280
|
-
<div class="fw-bold" id="event-stat-listeners">0</div>
|
|
1281
|
-
<small class="text-muted">Listeners</small>
|
|
1282
|
-
</div>
|
|
1283
|
-
</div>
|
|
1284
|
-
<div class="col-md-3">
|
|
1285
|
-
<div class="border rounded p-2 text-center">
|
|
1286
|
-
<div class="fw-bold" id="event-stat-buffer">0</div>
|
|
1287
|
-
<small class="text-muted">In Buffer</small>
|
|
1288
|
-
</div>
|
|
1289
|
-
</div>
|
|
1290
|
-
</div>
|
|
1291
|
-
<!-- Event Stream -->
|
|
1292
|
-
<div id="event-stream" style="max-height: 500px; overflow-y: auto; font-family: 'Courier New', monospace; font-size: 0.85rem; background: var(--bs-body-bg); border: 1px solid var(--bs-border-color); border-radius: 8px; padding: 12px;">
|
|
1293
|
-
<div class="text-muted text-center py-4">
|
|
1294
|
-
<i class="bi bi-broadcast" style="font-size: 2rem;"></i>
|
|
1295
|
-
<p class="mt-2">Waiting for events...</p>
|
|
1296
|
-
<small>Events will appear here in real-time as memories are created, updated, or deleted.</small>
|
|
1297
|
-
</div>
|
|
1298
|
-
</div>
|
|
1299
|
-
</div>
|
|
1300
|
-
</div>
|
|
1301
|
-
|
|
1302
|
-
<!-- Connected Agents (v2.5) -->
|
|
1303
|
-
<div class="tab-pane fade" id="agents-pane">
|
|
1304
|
-
<div class="card p-3 mb-3">
|
|
1305
|
-
<div class="row align-items-center mb-3">
|
|
1306
|
-
<div class="col-md-6">
|
|
1307
|
-
<h5 class="mb-0"><i class="bi bi-robot"></i> Connected Agents</h5>
|
|
1308
|
-
<small class="text-muted">AI tools that interact with your memory</small>
|
|
1309
|
-
</div>
|
|
1310
|
-
<div class="col-md-6 text-end">
|
|
1311
|
-
<button class="btn btn-sm btn-outline-primary" onclick="loadAgents()">
|
|
1312
|
-
<i class="bi bi-arrow-clockwise"></i> Refresh
|
|
1313
|
-
</button>
|
|
1314
|
-
</div>
|
|
1315
|
-
</div>
|
|
1316
|
-
<!-- Agent Stats -->
|
|
1317
|
-
<div class="row g-2 mb-3" id="agent-stats-row">
|
|
1318
|
-
<div class="col-md-3">
|
|
1319
|
-
<div class="border rounded p-2 text-center">
|
|
1320
|
-
<div class="fw-bold" id="agent-stat-total">0</div>
|
|
1321
|
-
<small class="text-muted">Total Agents</small>
|
|
1322
|
-
</div>
|
|
1323
|
-
</div>
|
|
1324
|
-
<div class="col-md-3">
|
|
1325
|
-
<div class="border rounded p-2 text-center">
|
|
1326
|
-
<div class="fw-bold" id="agent-stat-active">0</div>
|
|
1327
|
-
<small class="text-muted">Active (24h)</small>
|
|
1328
|
-
</div>
|
|
1329
|
-
</div>
|
|
1330
|
-
<div class="col-md-3">
|
|
1331
|
-
<div class="border rounded p-2 text-center">
|
|
1332
|
-
<div class="fw-bold" id="agent-stat-writes">0</div>
|
|
1333
|
-
<small class="text-muted">Total Writes</small>
|
|
1334
|
-
</div>
|
|
1335
|
-
</div>
|
|
1336
|
-
<div class="col-md-3">
|
|
1337
|
-
<div class="border rounded p-2 text-center">
|
|
1338
|
-
<div class="fw-bold" id="agent-stat-recalls">0</div>
|
|
1339
|
-
<small class="text-muted">Total Recalls</small>
|
|
1340
|
-
</div>
|
|
1341
|
-
</div>
|
|
1342
|
-
</div>
|
|
1343
|
-
<!-- Agent List -->
|
|
1344
|
-
<div id="agents-list" class="table-responsive">
|
|
1345
|
-
<div class="loading">
|
|
1346
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1347
|
-
<div>Loading agents...</div>
|
|
1348
|
-
</div>
|
|
1349
|
-
</div>
|
|
1350
|
-
</div>
|
|
1351
|
-
<!-- Trust Overview -->
|
|
1352
|
-
<div class="card p-3">
|
|
1353
|
-
<h5 class="mb-3"><i class="bi bi-shield-check"></i> Trust Scoring <span class="badge bg-info">Silent Collection</span></h5>
|
|
1354
|
-
<p class="text-muted small mb-3">Trust scores are being collected silently. No enforcement in v2.5 — scores will affect recall ranking in v2.6.</p>
|
|
1355
|
-
<div id="trust-overview">
|
|
1356
|
-
<div class="loading">
|
|
1357
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1358
|
-
<div>Loading trust data...</div>
|
|
1359
|
-
</div>
|
|
1360
|
-
</div>
|
|
1361
|
-
</div>
|
|
1362
|
-
</div>
|
|
1363
|
-
|
|
1364
|
-
<!-- Trust Dashboard (V3) -->
|
|
1365
|
-
<div class="tab-pane fade" id="trust-pane">
|
|
1366
|
-
<h5><i class="bi bi-shield-check"></i> Trust Dashboard</h5>
|
|
1367
|
-
<p class="text-muted">Bayesian trust scoring per agent and per fact.</p>
|
|
1368
|
-
<div class="row g-3 mb-3">
|
|
1369
|
-
<div class="col-md-4">
|
|
1370
|
-
<div class="card text-center">
|
|
1371
|
-
<div class="card-body">
|
|
1372
|
-
<h6>Total Agents</h6>
|
|
1373
|
-
<h3 id="trust-agent-count">0</h3>
|
|
1374
|
-
</div>
|
|
1375
|
-
</div>
|
|
1376
|
-
</div>
|
|
1377
|
-
<div class="col-md-4">
|
|
1378
|
-
<div class="card text-center">
|
|
1379
|
-
<div class="card-body">
|
|
1380
|
-
<h6>Avg Trust Score</h6>
|
|
1381
|
-
<h3 id="trust-avg-score">—</h3>
|
|
1382
|
-
</div>
|
|
1383
|
-
</div>
|
|
1384
|
-
</div>
|
|
1385
|
-
<div class="col-md-4">
|
|
1386
|
-
<div class="card text-center">
|
|
1387
|
-
<div class="card-body">
|
|
1388
|
-
<h6>Burst Alerts</h6>
|
|
1389
|
-
<h3 id="trust-burst-count" class="text-danger">0</h3>
|
|
1390
|
-
</div>
|
|
1391
|
-
</div>
|
|
1392
|
-
</div>
|
|
1393
|
-
</div>
|
|
1394
|
-
<div id="trust-agents-table" class="table-responsive">
|
|
1395
|
-
<table class="table table-sm table-striped">
|
|
1396
|
-
<thead><tr><th>Agent/Fact</th><th>Type</th><th>Trust Score</th><th>Evidence</th><th>Status</th></tr></thead>
|
|
1397
|
-
<tbody id="trust-agents-body"></tbody>
|
|
1398
|
-
</table>
|
|
1399
|
-
</div>
|
|
1400
|
-
</div>
|
|
1401
|
-
|
|
1402
|
-
<!-- Lifecycle (v2.8) -->
|
|
1403
|
-
<div class="tab-pane fade" id="lifecycle-pane" role="tabpanel">
|
|
1404
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
1405
|
-
<h5 class="mb-0"><i class="bi bi-hourglass-split text-warning"></i> Memory Lifecycle</h5>
|
|
1406
|
-
<div>
|
|
1407
|
-
<span class="badge bg-secondary me-2" id="lifecycle-profile-badge">default</span>
|
|
1408
|
-
<button class="btn btn-sm btn-outline-info" onclick="compactDryRun()"><i class="bi bi-funnel"></i> Preview Compaction</button>
|
|
1409
|
-
<button class="btn btn-sm btn-outline-warning ms-1" onclick="compactExecute()"><i class="bi bi-lightning"></i> Compact Now</button>
|
|
1410
|
-
</div>
|
|
1411
|
-
</div>
|
|
1412
|
-
<!-- State Distribution -->
|
|
1413
|
-
<div class="row g-3 mb-4" id="lifecycle-states-row">
|
|
1414
|
-
<div class="col-md-2"><div class="card p-3 text-center"><div class="text-success fw-bold fs-3" id="lc-active-count">-</div><small class="text-muted">Active</small></div></div>
|
|
1415
|
-
<div class="col-md-2"><div class="card p-3 text-center"><div class="text-warning fw-bold fs-3" id="lc-warm-count">-</div><small class="text-muted">Warm</small></div></div>
|
|
1416
|
-
<div class="col-md-2"><div class="card p-3 text-center"><div class="text-info fw-bold fs-3" id="lc-cold-count">-</div><small class="text-muted">Cold</small></div></div>
|
|
1417
|
-
<div class="col-md-2"><div class="card p-3 text-center"><div class="text-secondary fw-bold fs-3" id="lc-archived-count">-</div><small class="text-muted">Archived</small></div></div>
|
|
1418
|
-
<div class="col-md-2"><div class="card p-3 text-center"><div class="text-danger fw-bold fs-3" id="lc-tombstoned-count">-</div><small class="text-muted">Tombstoned</small></div></div>
|
|
1419
|
-
<div class="col-md-2"><div class="card p-3 text-center"><div class="fw-bold fs-3" id="lc-total-count">-</div><small class="text-muted">Total</small></div></div>
|
|
1420
|
-
</div>
|
|
1421
|
-
<!-- State Progress Bar -->
|
|
1422
|
-
<div class="card p-3 mb-4">
|
|
1423
|
-
<h6 class="mb-2">State Distribution</h6>
|
|
1424
|
-
<div class="progress" style="height: 24px;" id="lifecycle-progress-bar"></div>
|
|
1425
|
-
</div>
|
|
1426
|
-
<!-- Age Stats -->
|
|
1427
|
-
<div class="card p-3 mb-4" id="lifecycle-age-stats">
|
|
1428
|
-
<h6 class="mb-2">Average Memory Age by State</h6>
|
|
1429
|
-
<div id="lifecycle-age-content"><span class="text-muted">Loading...</span></div>
|
|
1430
|
-
</div>
|
|
1431
|
-
<!-- Recent Transitions -->
|
|
1432
|
-
<div class="card p-3">
|
|
1433
|
-
<h6 class="mb-2">Recent Transitions</h6>
|
|
1434
|
-
<div id="lifecycle-transitions-content"><span class="text-muted">Loading...</span></div>
|
|
1435
|
-
</div>
|
|
1436
|
-
<!-- Compaction Results Modal -->
|
|
1437
|
-
<div id="compaction-results" class="card p-3 mt-3 d-none">
|
|
1438
|
-
<h6 class="mb-2" id="compaction-results-title">Compaction Preview</h6>
|
|
1439
|
-
<div id="compaction-results-content"></div>
|
|
1440
|
-
</div>
|
|
1441
|
-
</div>
|
|
1442
|
-
|
|
1443
|
-
<!-- Behavioral Learning -->
|
|
1444
|
-
<div class="tab-pane fade" id="behavioral-pane" role="tabpanel">
|
|
1445
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
1446
|
-
<h5 class="mb-0"><i class="bi bi-lightbulb text-info"></i> Behavioral Learning</h5>
|
|
1447
|
-
<span class="badge bg-secondary" id="behavioral-profile-badge">default</span>
|
|
1448
|
-
</div>
|
|
1449
|
-
<!-- Getting Started Guide -->
|
|
1450
|
-
<div class="alert alert-light border mb-3">
|
|
1451
|
-
<h6 class="mb-2"><i class="bi bi-info-circle text-primary"></i> How Behavioral Learning Works</h6>
|
|
1452
|
-
<p class="mb-1 small">This tab tracks how memories are used in practice — which recalls led to successful outcomes (code written, decisions made, bugs fixed) and which didn't.</p>
|
|
1453
|
-
<p class="mb-0 small text-muted">Report outcomes using the form below, or via MCP: <code>report_outcome</code>. Patterns emerge after 10+ outcomes.</p>
|
|
1454
|
-
</div>
|
|
1455
|
-
<!-- Stats Row -->
|
|
1456
|
-
<div class="row g-3 mb-4">
|
|
1457
|
-
<div class="col-md-3"><div class="card p-3 text-center"><div class="fw-bold fs-3 text-success" id="bh-success-count">-</div><small class="text-muted">Successes</small></div></div>
|
|
1458
|
-
<div class="col-md-3"><div class="card p-3 text-center"><div class="fw-bold fs-3 text-danger" id="bh-failure-count">-</div><small class="text-muted">Failures</small></div></div>
|
|
1459
|
-
<div class="col-md-3"><div class="card p-3 text-center"><div class="fw-bold fs-3 text-warning" id="bh-partial-count">-</div><small class="text-muted">Partial</small></div></div>
|
|
1460
|
-
<div class="col-md-3"><div class="card p-3 text-center"><div class="fw-bold fs-3 text-info" id="bh-patterns-count">-</div><small class="text-muted">Patterns Learned</small></div></div>
|
|
1461
|
-
</div>
|
|
1462
|
-
<!-- Report Outcome Form -->
|
|
1463
|
-
<div class="card p-3 mb-4">
|
|
1464
|
-
<h6 class="mb-2"><i class="bi bi-plus-circle"></i> Report Outcome</h6>
|
|
1465
|
-
<div class="row g-2">
|
|
1466
|
-
<div class="col-md-3"><input type="text" class="form-control form-control-sm" id="bh-memory-ids" placeholder="Memory IDs (comma-separated)"></div>
|
|
1467
|
-
<div class="col-md-2"><select class="form-select form-select-sm" id="bh-outcome"><option value="success">Success</option><option value="failure">Failure</option><option value="partial">Partial</option></select></div>
|
|
1468
|
-
<div class="col-md-3"><select class="form-select form-select-sm" id="bh-action-type"><option value="code_written">Code Written</option><option value="decision_made">Decision Made</option><option value="debug_resolved">Debug Resolved</option><option value="architecture_chosen">Architecture Chosen</option><option value="other">Other</option></select></div>
|
|
1469
|
-
<div class="col-md-3"><input type="text" class="form-control form-control-sm" id="bh-context" placeholder="Context (optional)"></div>
|
|
1470
|
-
<div class="col-md-1"><button class="btn btn-sm btn-info w-100" onclick="reportOutcome()"><i class="bi bi-send"></i></button></div>
|
|
1471
|
-
</div>
|
|
1472
|
-
</div>
|
|
1473
|
-
<!-- Learned Patterns -->
|
|
1474
|
-
<div class="card p-3 mb-4">
|
|
1475
|
-
<h6 class="mb-2">Learned Patterns</h6>
|
|
1476
|
-
<div id="behavioral-patterns-content"><span class="text-muted">Loading...</span></div>
|
|
1477
|
-
</div>
|
|
1478
|
-
<!-- Cross-Project Transfers -->
|
|
1479
|
-
<div class="card p-3 mb-4">
|
|
1480
|
-
<h6 class="mb-2">Cross-Project Transfers</h6>
|
|
1481
|
-
<div id="behavioral-transfers-content"><span class="text-muted">Loading...</span></div>
|
|
1482
|
-
</div>
|
|
1483
|
-
<!-- Recent Outcomes -->
|
|
1484
|
-
<div class="card p-3">
|
|
1485
|
-
<h6 class="mb-2">Recent Outcomes</h6>
|
|
1486
|
-
<div id="behavioral-outcomes-content"><span class="text-muted">Loading...</span></div>
|
|
1487
|
-
</div>
|
|
1488
|
-
</div>
|
|
1489
|
-
|
|
1490
|
-
<!-- Compliance & Audit -->
|
|
1491
|
-
<div class="tab-pane fade" id="compliance-pane" role="tabpanel">
|
|
1492
|
-
<div class="d-flex justify-content-between align-items-center mb-3">
|
|
1493
|
-
<h5 class="mb-0"><i class="bi bi-shield-lock text-success"></i> Compliance & Audit</h5>
|
|
1494
|
-
<span class="badge bg-secondary" id="compliance-profile-badge">default</span>
|
|
1495
|
-
</div>
|
|
1496
|
-
<!-- Getting Started Guide -->
|
|
1497
|
-
<div class="alert alert-light border mb-3">
|
|
1498
|
-
<h6 class="mb-2"><i class="bi bi-info-circle text-primary"></i> Compliance Overview</h6>
|
|
1499
|
-
<p class="mb-1 small">Set retention policies and access controls for your memories. In Mode A, all data stays on your device — EU AI Act compliant by default.</p>
|
|
1500
|
-
<p class="mb-0 small text-muted">Create a retention policy below to start managing memory lifecycle automatically.</p>
|
|
1501
|
-
</div>
|
|
1502
|
-
<!-- Stats Row -->
|
|
1503
|
-
<div class="row g-3 mb-4">
|
|
1504
|
-
<div class="col-md-4"><div class="card p-3 text-center"><div class="fw-bold fs-3" id="cp-audit-count">-</div><small class="text-muted">Audit Events</small></div></div>
|
|
1505
|
-
<div class="col-md-4"><div class="card p-3 text-center"><div class="fw-bold fs-3" id="cp-retention-count">-</div><small class="text-muted">Retention Policies</small></div></div>
|
|
1506
|
-
<div class="col-md-4"><div class="card p-3 text-center"><div class="fw-bold fs-3" id="cp-abac-count">-</div><small class="text-muted">Access Policies</small></div></div>
|
|
1507
|
-
</div>
|
|
1508
|
-
<!-- Set Retention Policy Form -->
|
|
1509
|
-
<div class="card p-3 mb-4">
|
|
1510
|
-
<h6 class="mb-2"><i class="bi bi-plus-circle"></i> Create Retention Policy</h6>
|
|
1511
|
-
<div class="row g-2">
|
|
1512
|
-
<div class="col-md-3"><input type="text" class="form-control form-control-sm" id="cp-policy-name" placeholder="Policy name"></div>
|
|
1513
|
-
<div class="col-md-2"><input type="number" class="form-control form-control-sm" id="cp-retention-days" placeholder="Days" value="90"></div>
|
|
1514
|
-
<div class="col-md-2"><input type="text" class="form-control form-control-sm" id="cp-category" placeholder="Category (optional)"></div>
|
|
1515
|
-
<div class="col-md-2"><select class="form-select form-select-sm" id="cp-action"><option value="archive">Archive</option><option value="tombstone">Tombstone</option><option value="notify">Notify Only</option></select></div>
|
|
1516
|
-
<div class="col-md-2"><button class="btn btn-sm btn-success w-100" onclick="createRetentionPolicy()"><i class="bi bi-shield-plus"></i> Create</button></div>
|
|
1517
|
-
</div>
|
|
1518
|
-
</div>
|
|
1519
|
-
<!-- Retention Policies List -->
|
|
1520
|
-
<div class="card p-3 mb-4">
|
|
1521
|
-
<h6 class="mb-2">Active Retention Policies</h6>
|
|
1522
|
-
<div id="compliance-policies-content"><span class="text-muted">Loading...</span></div>
|
|
1523
|
-
</div>
|
|
1524
|
-
<!-- Audit Trail -->
|
|
1525
|
-
<div class="card p-3">
|
|
1526
|
-
<div class="d-flex justify-content-between align-items-center mb-2">
|
|
1527
|
-
<h6 class="mb-0">Audit Trail</h6>
|
|
1528
|
-
<div class="d-flex gap-2">
|
|
1529
|
-
<select class="form-select form-select-sm" id="cp-audit-filter" style="width: auto;" onchange="loadCompliance()">
|
|
1530
|
-
<option value="">All Events</option>
|
|
1531
|
-
<option value="recall">Recall</option>
|
|
1532
|
-
<option value="remember">Remember</option>
|
|
1533
|
-
<option value="delete">Delete</option>
|
|
1534
|
-
<option value="lifecycle_transition">Lifecycle</option>
|
|
1535
|
-
<option value="access_denied">Access Denied</option>
|
|
1536
|
-
<option value="retention_enforced">Retention</option>
|
|
1537
|
-
</select>
|
|
1538
|
-
</div>
|
|
1539
|
-
</div>
|
|
1540
|
-
<div id="compliance-audit-content"><span class="text-muted">Loading...</span></div>
|
|
1541
|
-
</div>
|
|
1542
|
-
</div>
|
|
1543
|
-
|
|
1544
|
-
<!-- Math Health (V3) -->
|
|
1545
|
-
<div class="tab-pane fade" id="math-health-pane">
|
|
1546
|
-
<h5><i class="bi bi-calculator"></i> Mathematical Layer Health</h5>
|
|
1547
|
-
<p class="text-muted">Status of Fisher-Rao, sheaf cohomology, and Langevin dynamics.</p>
|
|
1548
|
-
<div class="row g-3" id="math-health-cards"></div>
|
|
1549
|
-
</div>
|
|
1550
|
-
|
|
1551
|
-
<!-- IDE Connections (V3) -->
|
|
1552
|
-
<div class="tab-pane fade" id="ide-pane">
|
|
1553
|
-
<h5><i class="bi bi-plug"></i> IDE Connections</h5>
|
|
1554
|
-
<p class="text-muted">Manage IDE integrations. Connect new IDEs or check connection status.</p>
|
|
1555
|
-
<button class="btn btn-primary mb-3" id="ide-connect-all-btn"><i class="bi bi-link-45deg"></i> Connect All Detected IDEs</button>
|
|
1556
|
-
<div id="ide-list" class="table-responsive">
|
|
1557
|
-
<table class="table table-sm">
|
|
1558
|
-
<thead><tr><th>IDE</th><th>Installed</th><th>Config Path</th><th>Action</th></tr></thead>
|
|
1559
|
-
<tbody id="ide-list-body"></tbody>
|
|
1560
|
-
</table>
|
|
1561
|
-
</div>
|
|
1562
|
-
</div>
|
|
1563
|
-
|
|
1564
|
-
<!-- Settings & Backup -->
|
|
1565
|
-
<div class="tab-pane fade" id="settings-pane">
|
|
1566
|
-
<!-- V3 Configuration -->
|
|
1567
|
-
<div class="card mb-3">
|
|
1568
|
-
<div class="card-header bg-primary text-white">
|
|
1569
|
-
<h6 class="mb-0"><i class="bi bi-gear-wide-connected"></i> V3 Configuration</h6>
|
|
1570
|
-
</div>
|
|
1571
|
-
<div class="card-body">
|
|
1572
|
-
<!-- Current Mode Banner -->
|
|
1573
|
-
<div id="settings-current-banner" class="alert alert-info mb-3">
|
|
1574
|
-
<div class="d-flex justify-content-between align-items-center">
|
|
1575
|
-
<span>Active: <strong id="settings-current-mode">Loading...</strong></span>
|
|
1576
|
-
<span id="settings-current-detail" class="small"></span>
|
|
1577
|
-
</div>
|
|
1578
|
-
</div>
|
|
1579
|
-
|
|
1580
|
-
<!-- Step 1: Mode -->
|
|
1581
|
-
<div class="mb-3">
|
|
1582
|
-
<label class="form-label fw-bold">Step 1: Operating Mode</label>
|
|
1583
|
-
<div class="btn-group w-100" role="group">
|
|
1584
|
-
<input type="radio" class="btn-check" name="settings-mode-radio" id="mode-a-radio" value="a" checked>
|
|
1585
|
-
<label class="btn btn-outline-success" for="mode-a-radio">
|
|
1586
|
-
<strong>Mode A</strong><br><small>Zero Cloud — EU AI Act</small>
|
|
1587
|
-
</label>
|
|
1588
|
-
<input type="radio" class="btn-check" name="settings-mode-radio" id="mode-b-radio" value="b">
|
|
1589
|
-
<label class="btn btn-outline-info" for="mode-b-radio">
|
|
1590
|
-
<strong>Mode B</strong><br><small>Local Ollama LLM</small>
|
|
1591
|
-
</label>
|
|
1592
|
-
<input type="radio" class="btn-check" name="settings-mode-radio" id="mode-c-radio" value="c">
|
|
1593
|
-
<label class="btn btn-outline-warning" for="mode-c-radio">
|
|
1594
|
-
<strong>Mode C</strong><br><small>Cloud LLM (Best Accuracy)</small>
|
|
1595
|
-
</label>
|
|
1596
|
-
</div>
|
|
1597
|
-
</div>
|
|
1598
|
-
|
|
1599
|
-
<!-- Step 2: Provider Config (Mode B/C only) -->
|
|
1600
|
-
<div id="settings-provider-panel" style="display:none;" class="card p-3 mb-3 border-primary">
|
|
1601
|
-
<h6 class="mb-2">Step 2: LLM Configuration</h6>
|
|
1602
|
-
|
|
1603
|
-
<!-- Provider select -->
|
|
1604
|
-
<div class="row mb-2">
|
|
1605
|
-
<div class="col-md-4">
|
|
1606
|
-
<label class="form-label small fw-bold">Provider</label>
|
|
1607
|
-
<select id="settings-provider" class="form-select form-select-sm">
|
|
1608
|
-
<option value="">-- Select --</option>
|
|
1609
|
-
<option value="ollama">Ollama (Local)</option>
|
|
1610
|
-
<option value="openrouter">OpenRouter</option>
|
|
1611
|
-
<option value="openai">OpenAI</option>
|
|
1612
|
-
<option value="anthropic">Anthropic</option>
|
|
1613
|
-
</select>
|
|
1614
|
-
</div>
|
|
1615
|
-
<div class="col-md-4">
|
|
1616
|
-
<label class="form-label small fw-bold">Model <span class="text-danger">*</span></label>
|
|
1617
|
-
<select id="settings-model" class="form-select form-select-sm">
|
|
1618
|
-
<option value="">Select provider first</option>
|
|
1619
|
-
</select>
|
|
1620
|
-
<small id="settings-model-hint" class="text-muted"></small>
|
|
1621
|
-
</div>
|
|
1622
|
-
<div class="col-md-4" id="settings-key-col" style="display:none;">
|
|
1623
|
-
<label class="form-label small fw-bold">API Key <span class="text-danger">*</span></label>
|
|
1624
|
-
<input type="password" id="settings-api-key" class="form-control form-control-sm" placeholder="sk-... or your key">
|
|
1625
|
-
<small class="text-muted">Saved locally in ~/.superlocalmemory/</small>
|
|
1626
|
-
</div>
|
|
1627
|
-
</div>
|
|
1628
|
-
|
|
1629
|
-
<!-- Endpoint (advanced) -->
|
|
1630
|
-
<div class="row mb-2" id="settings-endpoint-row" style="display:none;">
|
|
1631
|
-
<div class="col-md-8">
|
|
1632
|
-
<label class="form-label small">API Endpoint (advanced)</label>
|
|
1633
|
-
<input type="text" id="settings-endpoint" class="form-control form-control-sm" placeholder="https://...">
|
|
1634
|
-
</div>
|
|
1635
|
-
</div>
|
|
1636
|
-
|
|
1637
|
-
<!-- Connection test -->
|
|
1638
|
-
<div>
|
|
1639
|
-
<button class="btn btn-sm btn-outline-primary" id="settings-test-btn">
|
|
1640
|
-
<i class="bi bi-lightning"></i> Test Connection
|
|
1641
|
-
</button>
|
|
1642
|
-
<span id="settings-test-result" class="ms-2 small"></span>
|
|
1643
|
-
</div>
|
|
1644
|
-
</div>
|
|
1645
|
-
|
|
1646
|
-
<!-- Save button -->
|
|
1647
|
-
<div class="mt-2">
|
|
1648
|
-
<button class="btn btn-primary" id="settings-save-all">
|
|
1649
|
-
<i class="bi bi-check-circle"></i> Save Configuration
|
|
1650
|
-
</button>
|
|
1651
|
-
<span id="settings-save-status" class="ms-2" style="display:none;"></span>
|
|
1652
|
-
</div>
|
|
1653
|
-
<hr>
|
|
1654
|
-
<div class="row">
|
|
1655
|
-
<div class="col-md-6">
|
|
1656
|
-
<h6>Auto-Capture</h6>
|
|
1657
|
-
<div class="form-check form-switch">
|
|
1658
|
-
<input class="form-check-input" type="checkbox" id="auto-capture-toggle" checked>
|
|
1659
|
-
<label class="form-check-label">Enable auto-capture</label>
|
|
1660
|
-
</div>
|
|
1661
|
-
<div class="form-check form-switch">
|
|
1662
|
-
<input class="form-check-input" type="checkbox" id="auto-capture-decisions" checked>
|
|
1663
|
-
<label class="form-check-label">Capture decisions</label>
|
|
1664
|
-
</div>
|
|
1665
|
-
<div class="form-check form-switch">
|
|
1666
|
-
<input class="form-check-input" type="checkbox" id="auto-capture-bugs" checked>
|
|
1667
|
-
<label class="form-check-label">Capture bug fixes</label>
|
|
1668
|
-
</div>
|
|
1669
|
-
</div>
|
|
1670
|
-
<div class="col-md-6">
|
|
1671
|
-
<h6>Auto-Recall</h6>
|
|
1672
|
-
<div class="form-check form-switch">
|
|
1673
|
-
<input class="form-check-input" type="checkbox" id="auto-recall-toggle" checked>
|
|
1674
|
-
<label class="form-check-label">Enable auto-recall</label>
|
|
1675
|
-
</div>
|
|
1676
|
-
<div class="form-check form-switch">
|
|
1677
|
-
<input class="form-check-input" type="checkbox" id="auto-recall-session" checked>
|
|
1678
|
-
<label class="form-check-label">Recall on session start</label>
|
|
1679
|
-
</div>
|
|
1680
|
-
</div>
|
|
1681
|
-
</div>
|
|
1682
|
-
<hr>
|
|
1683
|
-
<h6>Migration & Database</h6>
|
|
1684
|
-
<div class="row">
|
|
1685
|
-
<div class="col-md-6">
|
|
1686
|
-
<p class="small text-muted">Database: <strong id="settings-db-path">~/.superlocalmemory/memory.db</strong></p>
|
|
1687
|
-
<p class="small text-muted">Backup: <span id="settings-backup-status">Check with <code>slm migrate --rollback</code></span></p>
|
|
1688
|
-
</div>
|
|
1689
|
-
<div class="col-md-6">
|
|
1690
|
-
<p class="small text-muted">Version: <strong id="settings-version">...</strong></p>
|
|
1691
|
-
<p class="small text-muted">Engine: <strong class="text-success">V3 Active</strong></p>
|
|
1692
|
-
</div>
|
|
1693
|
-
</div>
|
|
1694
|
-
</div>
|
|
1695
|
-
</div>
|
|
1696
|
-
|
|
1697
|
-
<!-- Profile Management -->
|
|
1698
|
-
<div class="card p-3 mb-3">
|
|
1699
|
-
<h5 class="mb-3"><i class="bi bi-people"></i> Profile Management</h5>
|
|
1700
|
-
<div class="row g-3 align-items-end mb-3">
|
|
1701
|
-
<div class="col-md-5">
|
|
1702
|
-
<label class="form-label">Create New Profile</label>
|
|
1703
|
-
<input type="text" class="form-control" id="new-profile-name" placeholder="e.g. work, personal, project-x" maxlength="32">
|
|
1704
|
-
</div>
|
|
1705
|
-
<div class="col-md-3">
|
|
1706
|
-
<button class="btn btn-primary w-100" onclick="createProfile()">
|
|
1707
|
-
<i class="bi bi-plus-circle"></i> Create Profile
|
|
1708
|
-
</button>
|
|
1709
|
-
</div>
|
|
1710
|
-
</div>
|
|
1711
|
-
<div id="profiles-table" class="table-responsive">
|
|
1712
|
-
<div class="loading">
|
|
1713
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1714
|
-
<div>Loading profiles...</div>
|
|
1715
|
-
</div>
|
|
1716
|
-
</div>
|
|
1717
|
-
</div>
|
|
1718
|
-
|
|
1719
|
-
<div class="row">
|
|
1720
|
-
<!-- Backup Status -->
|
|
1721
|
-
<div class="col-lg-6 mb-3">
|
|
1722
|
-
<div class="card p-3">
|
|
1723
|
-
<h5 class="mb-3"><i class="bi bi-shield-check"></i> Auto-Backup</h5>
|
|
1724
|
-
<div id="backup-status">
|
|
1725
|
-
<div class="loading">
|
|
1726
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1727
|
-
<div>Loading backup status...</div>
|
|
1728
|
-
</div>
|
|
1729
|
-
</div>
|
|
1730
|
-
</div>
|
|
1731
|
-
</div>
|
|
1732
|
-
<!-- Backup Configuration -->
|
|
1733
|
-
<div class="col-lg-6 mb-3">
|
|
1734
|
-
<div class="card p-3">
|
|
1735
|
-
<h5 class="mb-3"><i class="bi bi-sliders"></i> Backup Configuration</h5>
|
|
1736
|
-
<div class="mb-3">
|
|
1737
|
-
<label class="form-label">Backup Interval</label>
|
|
1738
|
-
<select class="form-select" id="backup-interval">
|
|
1739
|
-
<option value="24">Daily (every 24 hours)</option>
|
|
1740
|
-
<option value="168" selected>Weekly (every 7 days)</option>
|
|
1741
|
-
</select>
|
|
1742
|
-
</div>
|
|
1743
|
-
<div class="mb-3">
|
|
1744
|
-
<label class="form-label">Max Backups to Keep</label>
|
|
1745
|
-
<input type="number" class="form-control" id="backup-max" value="10" min="1" max="100">
|
|
1746
|
-
</div>
|
|
1747
|
-
<div class="form-check form-switch mb-3">
|
|
1748
|
-
<input class="form-check-input" type="checkbox" id="backup-enabled" checked>
|
|
1749
|
-
<label class="form-check-label" for="backup-enabled">Auto-backup enabled</label>
|
|
1750
|
-
</div>
|
|
1751
|
-
<div class="d-flex gap-2">
|
|
1752
|
-
<button class="btn btn-primary" onclick="saveBackupConfig()">
|
|
1753
|
-
<i class="bi bi-save"></i> Save Settings
|
|
1754
|
-
</button>
|
|
1755
|
-
<button class="btn btn-outline-success" onclick="createBackupNow()">
|
|
1756
|
-
<i class="bi bi-download"></i> Backup Now
|
|
1757
|
-
</button>
|
|
1758
|
-
</div>
|
|
1759
|
-
</div>
|
|
1760
|
-
</div>
|
|
1761
|
-
</div>
|
|
1762
|
-
<!-- Learning Data Management (v2.7.4) -->
|
|
1763
|
-
<div class="card p-3 mb-3">
|
|
1764
|
-
<h5 class="mb-3"><i class="bi bi-brain"></i> Learning Data</h5>
|
|
1765
|
-
<p class="text-muted small mb-3">
|
|
1766
|
-
SuperLocalMemory learns from your usage patterns to improve recall results.
|
|
1767
|
-
All learning data is stored locally in <code>~/.claude-memory/learning.db</code>.
|
|
1768
|
-
</p>
|
|
1769
|
-
<div id="learning-data-stats" class="mb-3"></div>
|
|
1770
|
-
<div class="d-flex gap-2">
|
|
1771
|
-
<button class="btn btn-outline-danger" onclick="resetLearningData()">
|
|
1772
|
-
<i class="bi bi-arrow-counterclockwise"></i> Reset Learning Data
|
|
1773
|
-
</button>
|
|
1774
|
-
<button class="btn btn-outline-info" onclick="backupLearningDb()">
|
|
1775
|
-
<i class="bi bi-download"></i> Backup Learning DB
|
|
1776
|
-
</button>
|
|
1777
|
-
</div>
|
|
1778
|
-
<small class="text-muted mt-2 d-block">Reset clears all learned preferences, feedback signals, and patterns. Your memories are preserved.</small>
|
|
1779
|
-
</div>
|
|
1780
|
-
|
|
1781
|
-
<!-- Backup History -->
|
|
1782
|
-
<div class="card p-3">
|
|
1783
|
-
<h5 class="mb-3"><i class="bi bi-clock-history"></i> Backup History</h5>
|
|
1784
|
-
<div id="backup-list" class="table-responsive">
|
|
1785
|
-
<div class="loading">
|
|
1786
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1787
|
-
<div>Loading backups...</div>
|
|
1788
|
-
</div>
|
|
1789
|
-
</div>
|
|
1790
|
-
</div>
|
|
1791
|
-
</div>
|
|
1792
|
-
</div>
|
|
1793
|
-
</div>
|
|
1794
|
-
|
|
1795
|
-
<!-- Memory Detail Modal -->
|
|
1796
|
-
<div class="modal fade" id="memoryDetailModal" tabindex="-1" aria-labelledby="memoryDetailModalLabel" aria-hidden="true">
|
|
1797
|
-
<div class="modal-dialog modal-lg modal-dialog-scrollable">
|
|
1798
|
-
<div class="modal-content">
|
|
1799
|
-
<div class="modal-header">
|
|
1800
|
-
<h5 class="modal-title" id="memoryDetailModalLabel">
|
|
1801
|
-
<i class="bi bi-journal-text"></i> Memory Detail
|
|
1802
|
-
</h5>
|
|
1803
|
-
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
|
1804
|
-
</div>
|
|
1805
|
-
<div class="modal-body">
|
|
1806
|
-
<div id="memory-detail-body">
|
|
1807
|
-
<div class="loading">
|
|
1808
|
-
<div class="spinner-border text-primary" role="status"></div>
|
|
1809
|
-
<div>Loading...</div>
|
|
1810
|
-
</div>
|
|
1811
|
-
</div>
|
|
1812
|
-
</div>
|
|
1813
|
-
<div class="modal-footer justify-content-between">
|
|
1814
|
-
<div>
|
|
1815
|
-
<button class="btn btn-sm btn-outline-secondary" onclick="copyMemoryToClipboard()" title="Copy to clipboard">
|
|
1816
|
-
<i class="bi bi-clipboard"></i> Copy
|
|
1817
|
-
</button>
|
|
1818
|
-
<button class="btn btn-sm btn-outline-secondary" onclick="exportMemoryAsMarkdown()" title="Download as Markdown">
|
|
1819
|
-
<i class="bi bi-markdown"></i> Export .md
|
|
1820
|
-
</button>
|
|
1821
|
-
</div>
|
|
1822
|
-
<button type="button" class="btn btn-secondary btn-sm" data-bs-dismiss="modal">Close</button>
|
|
1823
|
-
</div>
|
|
1824
|
-
</div>
|
|
1825
|
-
</div>
|
|
1826
|
-
</div>
|
|
1827
|
-
|
|
1828
|
-
<!-- Bootstrap JS -->
|
|
1829
|
-
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
|
|
1830
|
-
<!-- D3.js (kept for backward compatibility) -->
|
|
1831
|
-
<script src="https://d3js.org/d3.v7.min.js"></script>
|
|
1832
|
-
|
|
1833
|
-
<!-- Cytoscape.js + Extensions (v2.6.5 — interactive graph) -->
|
|
1834
|
-
<script src="https://unpkg.com/cytoscape@3.30.4/dist/cytoscape.min.js"></script>
|
|
1835
|
-
<script src="https://unpkg.com/layout-base@2.0.1/layout-base.js"></script>
|
|
1836
|
-
<script src="https://unpkg.com/cose-base@2.2.0/cose-base.js"></script>
|
|
1837
|
-
<script src="https://unpkg.com/cytoscape-fcose@2.2.0/cytoscape-fcose.js"></script>
|
|
1838
|
-
<link href="https://unpkg.com/cytoscape-navigator@1.3.3/cytoscape.js-navigator.css" rel="stylesheet" type="text/css" />
|
|
1839
|
-
<script src="https://unpkg.com/cytoscape-navigator@1.3.3/cytoscape-navigator.js"></script>
|
|
1840
|
-
|
|
1841
|
-
<!-- Modular JS (v2.5 — split from monolith app.js) -->
|
|
1842
|
-
<script src="static/js/core.js"></script>
|
|
1843
|
-
|
|
1844
|
-
<!-- Graph Visualization Scripts (v2.6.5 - Modular) -->
|
|
1845
|
-
<script src="static/js/graph-core.js"></script>
|
|
1846
|
-
<script src="static/js/graph-filters.js"></script>
|
|
1847
|
-
<script src="static/js/graph-ui.js"></script>
|
|
1848
|
-
<script src="static/js/graph-interactions.js"></script>
|
|
1849
|
-
|
|
1850
|
-
<script src="static/js/memories.js"></script>
|
|
1851
|
-
<script src="static/js/search.js"></script>
|
|
1852
|
-
<script src="static/js/modal.js"></script>
|
|
1853
|
-
<script src="static/js/clusters.js"></script>
|
|
1854
|
-
<script src="static/js/patterns.js"></script>
|
|
1855
|
-
<script src="static/js/timeline.js"></script>
|
|
1856
|
-
<script src="static/js/profiles.js"></script>
|
|
1857
|
-
<script src="static/js/settings.js"></script>
|
|
1858
|
-
<script src="static/js/events.js"></script>
|
|
1859
|
-
<script src="static/js/agents.js"></script>
|
|
1860
|
-
<script src="static/js/learning.js"></script>
|
|
1861
|
-
<script src="static/js/feedback.js"></script>
|
|
1862
|
-
<script src="static/js/lifecycle.js"></script>
|
|
1863
|
-
<script src="static/js/behavioral.js"></script>
|
|
1864
|
-
<script src="static/js/compliance.js"></script>
|
|
1865
|
-
<script src="static/js/init.js"></script>
|
|
1866
|
-
<script src="static/js/dashboard.js"></script>
|
|
1867
|
-
<script src="static/js/recall-lab.js"></script>
|
|
1868
|
-
<script src="static/js/trust-dashboard.js"></script>
|
|
1869
|
-
<script src="static/js/math-health.js"></script>
|
|
1870
|
-
<script src="static/js/auto-settings.js"></script>
|
|
1871
|
-
<script src="static/js/ide-status.js"></script>
|
|
1872
|
-
<script src="static/js/fact-detail.js"></script>
|
|
1873
|
-
|
|
1874
|
-
<footer>
|
|
1875
|
-
<p>SuperLocalMemory V3 by <a href="https://github.com/varun369">Varun Pratap Bhardwaj</a></p>
|
|
1876
|
-
<p><a href="https://github.com/qualixar/superlocalmemory">GitHub Repository</a> | Elastic License 2.0</p>
|
|
1877
|
-
</footer>
|
|
1878
|
-
</body>
|
|
1879
|
-
</html>
|