@memextend/webui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/config.d.ts +2 -0
- package/dist/api/config.d.ts.map +1 -0
- package/dist/api/config.js +106 -0
- package/dist/api/config.js.map +1 -0
- package/dist/api/memories.d.ts +2 -0
- package/dist/api/memories.d.ts.map +1 -0
- package/dist/api/memories.js +213 -0
- package/dist/api/memories.js.map +1 -0
- package/dist/api/projects.d.ts +2 -0
- package/dist/api/projects.d.ts.map +1 -0
- package/dist/api/projects.js +136 -0
- package/dist/api/projects.js.map +1 -0
- package/dist/api/search.d.ts +2 -0
- package/dist/api/search.d.ts.map +1 -0
- package/dist/api/search.js +97 -0
- package/dist/api/search.js.map +1 -0
- package/dist/api/stats.d.ts +2 -0
- package/dist/api/stats.d.ts.map +1 -0
- package/dist/api/stats.js +183 -0
- package/dist/api/stats.js.map +1 -0
- package/dist/public/app.js +953 -0
- package/dist/public/index.html +551 -0
- package/dist/public/styles.css +1436 -0
- package/dist/server.d.ts +7 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +84 -0
- package/dist/server.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>memextend - Web UI</title>
|
|
7
|
+
<link rel="stylesheet" href="styles.css">
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="app">
|
|
11
|
+
<!-- Header -->
|
|
12
|
+
<header class="header">
|
|
13
|
+
<div class="header-brand">
|
|
14
|
+
<h1>memextend</h1>
|
|
15
|
+
<span class="header-tagline">AI Memory Extension</span>
|
|
16
|
+
</div>
|
|
17
|
+
<nav class="header-nav">
|
|
18
|
+
<button class="nav-btn active" data-view="dashboard">Dashboard</button>
|
|
19
|
+
<button class="nav-btn" data-view="memories">Memories</button>
|
|
20
|
+
<button class="nav-btn" data-view="search">Search</button>
|
|
21
|
+
<button class="nav-btn" data-view="global">Global Profile</button>
|
|
22
|
+
<button class="nav-btn" data-view="settings">Settings</button>
|
|
23
|
+
</nav>
|
|
24
|
+
</header>
|
|
25
|
+
|
|
26
|
+
<!-- Main Content -->
|
|
27
|
+
<main class="main-content">
|
|
28
|
+
<!-- Dashboard View -->
|
|
29
|
+
<section id="view-dashboard" class="view active">
|
|
30
|
+
<div class="dashboard-grid">
|
|
31
|
+
<!-- Stats Cards -->
|
|
32
|
+
<div class="stats-row">
|
|
33
|
+
<div class="stat-card">
|
|
34
|
+
<div class="stat-value" id="stat-memories">-</div>
|
|
35
|
+
<div class="stat-label">Total Memories</div>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="stat-card">
|
|
38
|
+
<div class="stat-value" id="stat-vectors">-</div>
|
|
39
|
+
<div class="stat-label">Vector Embeddings</div>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="stat-card">
|
|
42
|
+
<div class="stat-value" id="stat-projects">-</div>
|
|
43
|
+
<div class="stat-label">Projects</div>
|
|
44
|
+
</div>
|
|
45
|
+
<div class="stat-card">
|
|
46
|
+
<div class="stat-value" id="stat-storage">-</div>
|
|
47
|
+
<div class="stat-label">Storage Used</div>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
|
|
51
|
+
<!-- Activity Chart -->
|
|
52
|
+
<div class="card activity-card">
|
|
53
|
+
<h3>Activity (Last 30 Days)</h3>
|
|
54
|
+
<div id="activity-chart" class="activity-chart"></div>
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<!-- Breakdowns -->
|
|
58
|
+
<div class="card">
|
|
59
|
+
<h3>By Type</h3>
|
|
60
|
+
<div id="type-breakdown" class="breakdown-list"></div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<div class="card">
|
|
64
|
+
<h3>By Source Tool</h3>
|
|
65
|
+
<div id="source-breakdown" class="breakdown-list"></div>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<!-- Recent Memories -->
|
|
69
|
+
<div class="card full-width">
|
|
70
|
+
<h3>Recent Memories</h3>
|
|
71
|
+
<div id="recent-memories" class="memory-list"></div>
|
|
72
|
+
</div>
|
|
73
|
+
|
|
74
|
+
<!-- Embedding Model Status -->
|
|
75
|
+
<div class="card">
|
|
76
|
+
<h3>Embedding Model</h3>
|
|
77
|
+
<div id="model-status" class="model-status"></div>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</section>
|
|
81
|
+
|
|
82
|
+
<!-- Memories View -->
|
|
83
|
+
<section id="view-memories" class="view">
|
|
84
|
+
<div class="memories-header">
|
|
85
|
+
<div class="memories-header-top">
|
|
86
|
+
<h2>All Memories</h2>
|
|
87
|
+
<button id="create-memory-btn" class="btn btn-primary">+ New Memory</button>
|
|
88
|
+
</div>
|
|
89
|
+
<div class="filters">
|
|
90
|
+
<div class="filter-group">
|
|
91
|
+
<select id="filter-project" class="filter-select">
|
|
92
|
+
<option value="">All Projects</option>
|
|
93
|
+
</select>
|
|
94
|
+
<button id="delete-project-btn" class="btn btn-danger btn-small" style="display: none;" title="Delete all memories in selected project">Delete Project Memories</button>
|
|
95
|
+
</div>
|
|
96
|
+
<select id="filter-type" class="filter-select">
|
|
97
|
+
<option value="">All Types</option>
|
|
98
|
+
<option value="reasoning">Reasoning</option>
|
|
99
|
+
<option value="tool_capture">Tool Capture</option>
|
|
100
|
+
<option value="summary">Summary</option>
|
|
101
|
+
<option value="manual">Manual</option>
|
|
102
|
+
</select>
|
|
103
|
+
<select id="filter-tool" class="filter-select">
|
|
104
|
+
<option value="">All Tools</option>
|
|
105
|
+
<option value="Edit">Edit</option>
|
|
106
|
+
<option value="Write">Write</option>
|
|
107
|
+
<option value="Bash">Bash</option>
|
|
108
|
+
<option value="Task">Task</option>
|
|
109
|
+
</select>
|
|
110
|
+
<input type="date" id="filter-start-date" class="filter-input" placeholder="Start Date">
|
|
111
|
+
<input type="date" id="filter-end-date" class="filter-input" placeholder="End Date">
|
|
112
|
+
<button id="apply-filters" class="btn btn-primary">Apply</button>
|
|
113
|
+
<button id="clear-filters" class="btn btn-secondary">Clear</button>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
<div id="memories-list" class="memory-list"></div>
|
|
117
|
+
<div id="memories-pagination" class="pagination"></div>
|
|
118
|
+
</section>
|
|
119
|
+
|
|
120
|
+
<!-- Search View -->
|
|
121
|
+
<section id="view-search" class="view">
|
|
122
|
+
<div class="search-container">
|
|
123
|
+
<div class="search-box">
|
|
124
|
+
<input type="text" id="search-input" class="search-input" placeholder="Search memories...">
|
|
125
|
+
<button id="search-btn" class="btn btn-primary">Search</button>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="search-options">
|
|
128
|
+
<label>
|
|
129
|
+
<input type="radio" name="search-scope" value="all" checked> All Memories
|
|
130
|
+
</label>
|
|
131
|
+
<label>
|
|
132
|
+
<input type="radio" name="search-scope" value="project"> Project Only
|
|
133
|
+
</label>
|
|
134
|
+
<label>
|
|
135
|
+
<input type="radio" name="search-scope" value="global"> Global Profile
|
|
136
|
+
</label>
|
|
137
|
+
<select id="search-project" class="filter-select" style="margin-left: 1rem;">
|
|
138
|
+
<option value="">Select Project</option>
|
|
139
|
+
</select>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
<div id="search-results" class="memory-list"></div>
|
|
143
|
+
<div id="search-info" class="search-info"></div>
|
|
144
|
+
</section>
|
|
145
|
+
|
|
146
|
+
<!-- Global Profile View -->
|
|
147
|
+
<section id="view-global" class="view">
|
|
148
|
+
<div class="memories-header-top">
|
|
149
|
+
<div>
|
|
150
|
+
<h2>Global Profile</h2>
|
|
151
|
+
<p class="section-desc">Cross-project preferences and patterns that apply to all sessions.</p>
|
|
152
|
+
</div>
|
|
153
|
+
<div class="header-actions">
|
|
154
|
+
<button id="create-global-btn" class="btn btn-primary">+ New Global Memory</button>
|
|
155
|
+
<button id="clear-global-btn" class="btn btn-danger">Clear All</button>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div id="global-profiles" class="memory-list"></div>
|
|
159
|
+
</section>
|
|
160
|
+
|
|
161
|
+
<!-- Settings View -->
|
|
162
|
+
<section id="view-settings" class="view">
|
|
163
|
+
<div class="settings-container">
|
|
164
|
+
<div class="settings-header">
|
|
165
|
+
<h2>Settings</h2>
|
|
166
|
+
<p class="section-desc">Configure memory capture behavior and system preferences.</p>
|
|
167
|
+
</div>
|
|
168
|
+
|
|
169
|
+
<div class="settings-grid">
|
|
170
|
+
<!-- Capture Settings Card -->
|
|
171
|
+
<div class="settings-card">
|
|
172
|
+
<div class="settings-card-header">
|
|
173
|
+
<div class="settings-card-icon">
|
|
174
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
175
|
+
<path d="M12 2L2 7l10 5 10-5-10-5z"/>
|
|
176
|
+
<path d="M2 17l10 5 10-5"/>
|
|
177
|
+
<path d="M2 12l10 5 10-5"/>
|
|
178
|
+
</svg>
|
|
179
|
+
</div>
|
|
180
|
+
<h3>Memory Capture</h3>
|
|
181
|
+
</div>
|
|
182
|
+
<p class="settings-card-desc">Control what gets captured from Claude sessions.</p>
|
|
183
|
+
|
|
184
|
+
<div class="settings-group">
|
|
185
|
+
<div class="setting-row">
|
|
186
|
+
<div class="setting-info">
|
|
187
|
+
<label for="setting-capture-reasoning">Capture Reasoning</label>
|
|
188
|
+
<span class="setting-hint">Save Claude's explanatory responses as memories</span>
|
|
189
|
+
</div>
|
|
190
|
+
<label class="toggle">
|
|
191
|
+
<input type="checkbox" id="setting-capture-reasoning" checked>
|
|
192
|
+
<span class="toggle-slider"></span>
|
|
193
|
+
</label>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<div class="setting-row">
|
|
197
|
+
<div class="setting-info">
|
|
198
|
+
<label for="setting-max-reasoning">Max Reasoning Length</label>
|
|
199
|
+
<span class="setting-hint">Maximum characters for reasoning captures</span>
|
|
200
|
+
</div>
|
|
201
|
+
<input type="number" id="setting-max-reasoning" class="setting-input" value="10000" min="100" max="100000">
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<div class="setting-row">
|
|
205
|
+
<div class="setting-info">
|
|
206
|
+
<label for="setting-max-tool">Max Tool Output Length</label>
|
|
207
|
+
<span class="setting-hint">Maximum characters for tool output captures</span>
|
|
208
|
+
</div>
|
|
209
|
+
<input type="number" id="setting-max-tool" class="setting-input" value="2000" min="100" max="50000">
|
|
210
|
+
</div>
|
|
211
|
+
</div>
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
<!-- Tool Capture Card -->
|
|
215
|
+
<div class="settings-card">
|
|
216
|
+
<div class="settings-card-header">
|
|
217
|
+
<div class="settings-card-icon">
|
|
218
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
219
|
+
<path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>
|
|
220
|
+
</svg>
|
|
221
|
+
</div>
|
|
222
|
+
<h3>Tool Capture</h3>
|
|
223
|
+
</div>
|
|
224
|
+
<p class="settings-card-desc">Enable capturing specific tool operations. All disabled by default to avoid noise.</p>
|
|
225
|
+
|
|
226
|
+
<div class="settings-group">
|
|
227
|
+
<div class="setting-row">
|
|
228
|
+
<div class="setting-info">
|
|
229
|
+
<label for="setting-tool-edit">Edit Tool</label>
|
|
230
|
+
<span class="setting-hint">File modifications and code changes</span>
|
|
231
|
+
</div>
|
|
232
|
+
<label class="toggle">
|
|
233
|
+
<input type="checkbox" id="setting-tool-edit">
|
|
234
|
+
<span class="toggle-slider"></span>
|
|
235
|
+
</label>
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
<div class="setting-row">
|
|
239
|
+
<div class="setting-info">
|
|
240
|
+
<label for="setting-tool-write">Write Tool</label>
|
|
241
|
+
<span class="setting-hint">New file creation operations</span>
|
|
242
|
+
</div>
|
|
243
|
+
<label class="toggle">
|
|
244
|
+
<input type="checkbox" id="setting-tool-write">
|
|
245
|
+
<span class="toggle-slider"></span>
|
|
246
|
+
</label>
|
|
247
|
+
</div>
|
|
248
|
+
|
|
249
|
+
<div class="setting-row">
|
|
250
|
+
<div class="setting-info">
|
|
251
|
+
<label for="setting-tool-bash">Bash Tool</label>
|
|
252
|
+
<span class="setting-hint">Command line operations</span>
|
|
253
|
+
</div>
|
|
254
|
+
<label class="toggle">
|
|
255
|
+
<input type="checkbox" id="setting-tool-bash">
|
|
256
|
+
<span class="toggle-slider"></span>
|
|
257
|
+
</label>
|
|
258
|
+
</div>
|
|
259
|
+
|
|
260
|
+
<div class="setting-row">
|
|
261
|
+
<div class="setting-info">
|
|
262
|
+
<label for="setting-tool-task">Task Tool</label>
|
|
263
|
+
<span class="setting-hint">Agent task delegations</span>
|
|
264
|
+
</div>
|
|
265
|
+
<label class="toggle">
|
|
266
|
+
<input type="checkbox" id="setting-tool-task">
|
|
267
|
+
<span class="toggle-slider"></span>
|
|
268
|
+
</label>
|
|
269
|
+
</div>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
|
|
273
|
+
<!-- Retrieval Settings Card -->
|
|
274
|
+
<div class="settings-card">
|
|
275
|
+
<div class="settings-card-header">
|
|
276
|
+
<div class="settings-card-icon">
|
|
277
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
278
|
+
<circle cx="11" cy="11" r="8"/>
|
|
279
|
+
<path d="M21 21l-4.35-4.35"/>
|
|
280
|
+
</svg>
|
|
281
|
+
</div>
|
|
282
|
+
<h3>Memory Retrieval</h3>
|
|
283
|
+
</div>
|
|
284
|
+
<p class="settings-card-desc">Control how memories are injected into new sessions.</p>
|
|
285
|
+
|
|
286
|
+
<div class="settings-group">
|
|
287
|
+
<div class="setting-row">
|
|
288
|
+
<div class="setting-info">
|
|
289
|
+
<label for="setting-auto-inject">Auto-Inject Memories</label>
|
|
290
|
+
<span class="setting-hint">Automatically inject relevant memories at session start</span>
|
|
291
|
+
</div>
|
|
292
|
+
<label class="toggle">
|
|
293
|
+
<input type="checkbox" id="setting-auto-inject" checked>
|
|
294
|
+
<span class="toggle-slider"></span>
|
|
295
|
+
</label>
|
|
296
|
+
</div>
|
|
297
|
+
|
|
298
|
+
<div class="setting-row">
|
|
299
|
+
<div class="setting-info">
|
|
300
|
+
<label for="setting-max-memories">Max Memories</label>
|
|
301
|
+
<span class="setting-hint">Maximum memories to inject per session (0 = unlimited)</span>
|
|
302
|
+
</div>
|
|
303
|
+
<input type="number" id="setting-max-memories" class="setting-input" value="0" min="0" max="100">
|
|
304
|
+
</div>
|
|
305
|
+
|
|
306
|
+
<div class="setting-row">
|
|
307
|
+
<div class="setting-info">
|
|
308
|
+
<label for="setting-recent-days">Recent Days</label>
|
|
309
|
+
<span class="setting-hint">Days back to look for memories (0 = unlimited)</span>
|
|
310
|
+
</div>
|
|
311
|
+
<input type="number" id="setting-recent-days" class="setting-input" value="0" min="0" max="365">
|
|
312
|
+
</div>
|
|
313
|
+
|
|
314
|
+
<div class="setting-row">
|
|
315
|
+
<div class="setting-info">
|
|
316
|
+
<label for="setting-include-global">Include Global Profile</label>
|
|
317
|
+
<span class="setting-hint">Include cross-project preferences in session context</span>
|
|
318
|
+
</div>
|
|
319
|
+
<label class="toggle">
|
|
320
|
+
<input type="checkbox" id="setting-include-global" checked>
|
|
321
|
+
<span class="toggle-slider"></span>
|
|
322
|
+
</label>
|
|
323
|
+
</div>
|
|
324
|
+
|
|
325
|
+
<div class="setting-row">
|
|
326
|
+
<div class="setting-info">
|
|
327
|
+
<label for="setting-dedup-threshold">Deduplication Threshold</label>
|
|
328
|
+
<span class="setting-hint">Similarity threshold for removing duplicate memories (0.0-1.0, higher = stricter)</span>
|
|
329
|
+
</div>
|
|
330
|
+
<input type="number" id="setting-dedup-threshold" class="setting-input" value="0.85" min="0" max="1" step="0.05">
|
|
331
|
+
</div>
|
|
332
|
+
|
|
333
|
+
<div class="setting-row">
|
|
334
|
+
<div class="setting-info">
|
|
335
|
+
<label for="setting-session-max-chars">Session Start Max Characters</label>
|
|
336
|
+
<span class="setting-hint">Max chars at session start (~4 chars = 1 token, 10000 chars ≈ 2500 tokens)</span>
|
|
337
|
+
</div>
|
|
338
|
+
<input type="number" id="setting-session-max-chars" class="setting-input" value="10000" min="0" max="50000" step="1000">
|
|
339
|
+
</div>
|
|
340
|
+
|
|
341
|
+
<div class="setting-row">
|
|
342
|
+
<div class="setting-info">
|
|
343
|
+
<label for="setting-compact-max-chars">Post-Compact Max Characters</label>
|
|
344
|
+
<span class="setting-hint">Max chars after compaction - keep small! (2000 chars ≈ 500 tokens)</span>
|
|
345
|
+
</div>
|
|
346
|
+
<input type="number" id="setting-compact-max-chars" class="setting-input" value="2000" min="0" max="10000" step="500">
|
|
347
|
+
</div>
|
|
348
|
+
</div>
|
|
349
|
+
</div>
|
|
350
|
+
|
|
351
|
+
<!-- Storage Limits Card -->
|
|
352
|
+
<div class="settings-card">
|
|
353
|
+
<div class="settings-card-header">
|
|
354
|
+
<div class="settings-card-icon">
|
|
355
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
356
|
+
<path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/>
|
|
357
|
+
<polyline points="3.27 6.96 12 12.01 20.73 6.96"/>
|
|
358
|
+
<line x1="12" y1="22.08" x2="12" y2="12"/>
|
|
359
|
+
</svg>
|
|
360
|
+
</div>
|
|
361
|
+
<h3>Storage Limits</h3>
|
|
362
|
+
</div>
|
|
363
|
+
<p class="settings-card-desc">Automatic pruning to prevent unlimited storage growth. Oldest memories are deleted when limits are exceeded.</p>
|
|
364
|
+
|
|
365
|
+
<div class="settings-group">
|
|
366
|
+
<div class="setting-row">
|
|
367
|
+
<div class="setting-info">
|
|
368
|
+
<label for="setting-max-per-project">Max Memories Per Project</label>
|
|
369
|
+
<span class="setting-hint">Limit per project (0 = unlimited). Oldest are pruned first.</span>
|
|
370
|
+
</div>
|
|
371
|
+
<input type="number" id="setting-max-per-project" class="setting-input" value="500" min="0" max="10000" step="100">
|
|
372
|
+
</div>
|
|
373
|
+
|
|
374
|
+
<div class="setting-row">
|
|
375
|
+
<div class="setting-info">
|
|
376
|
+
<label for="setting-max-total">Max Total Memories</label>
|
|
377
|
+
<span class="setting-hint">Total limit across all projects (0 = unlimited)</span>
|
|
378
|
+
</div>
|
|
379
|
+
<input type="number" id="setting-max-total" class="setting-input" value="5000" min="0" max="100000" step="500">
|
|
380
|
+
</div>
|
|
381
|
+
|
|
382
|
+
<div class="setting-row">
|
|
383
|
+
<div class="setting-info">
|
|
384
|
+
<label for="setting-dedupe-on-prune">Deduplicate on Prune</label>
|
|
385
|
+
<span class="setting-hint">Remove highly similar memories during pruning (uses dedup threshold)</span>
|
|
386
|
+
</div>
|
|
387
|
+
<label class="toggle">
|
|
388
|
+
<input type="checkbox" id="setting-dedupe-on-prune" checked>
|
|
389
|
+
<span class="toggle-slider"></span>
|
|
390
|
+
</label>
|
|
391
|
+
</div>
|
|
392
|
+
</div>
|
|
393
|
+
</div>
|
|
394
|
+
|
|
395
|
+
<!-- System Settings Card -->
|
|
396
|
+
<div class="settings-card">
|
|
397
|
+
<div class="settings-card-header">
|
|
398
|
+
<div class="settings-card-icon">
|
|
399
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
400
|
+
<circle cx="12" cy="12" r="3"/>
|
|
401
|
+
<path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"/>
|
|
402
|
+
</svg>
|
|
403
|
+
</div>
|
|
404
|
+
<h3>System</h3>
|
|
405
|
+
</div>
|
|
406
|
+
<p class="settings-card-desc">Debug and diagnostic options.</p>
|
|
407
|
+
|
|
408
|
+
<div class="settings-group">
|
|
409
|
+
<div class="setting-row">
|
|
410
|
+
<div class="setting-info">
|
|
411
|
+
<label for="setting-debug">Debug Mode</label>
|
|
412
|
+
<span class="setting-hint">Enable verbose logging to ~/.memextend/debug.log</span>
|
|
413
|
+
</div>
|
|
414
|
+
<label class="toggle">
|
|
415
|
+
<input type="checkbox" id="setting-debug">
|
|
416
|
+
<span class="toggle-slider"></span>
|
|
417
|
+
</label>
|
|
418
|
+
</div>
|
|
419
|
+
</div>
|
|
420
|
+
</div>
|
|
421
|
+
</div>
|
|
422
|
+
|
|
423
|
+
<div class="settings-actions">
|
|
424
|
+
<button id="settings-save" class="btn btn-primary btn-lg">Save Settings</button>
|
|
425
|
+
<button id="settings-reset" class="btn btn-secondary">Reset to Defaults</button>
|
|
426
|
+
</div>
|
|
427
|
+
</div>
|
|
428
|
+
</section>
|
|
429
|
+
</main>
|
|
430
|
+
|
|
431
|
+
<!-- Memory Detail Modal -->
|
|
432
|
+
<div id="memory-modal" class="modal">
|
|
433
|
+
<div class="modal-content">
|
|
434
|
+
<div class="modal-header">
|
|
435
|
+
<h3>Memory Details</h3>
|
|
436
|
+
<button class="modal-close">×</button>
|
|
437
|
+
</div>
|
|
438
|
+
<div class="modal-body">
|
|
439
|
+
<div class="memory-detail-meta">
|
|
440
|
+
<span class="memory-id">ID: <code id="modal-id"></code></span>
|
|
441
|
+
<span class="memory-type" id="modal-type"></span>
|
|
442
|
+
<span class="memory-date" id="modal-date"></span>
|
|
443
|
+
</div>
|
|
444
|
+
<div class="memory-detail-content">
|
|
445
|
+
<label>Content:</label>
|
|
446
|
+
<textarea id="modal-content" class="content-editor"></textarea>
|
|
447
|
+
</div>
|
|
448
|
+
<div class="memory-detail-meta">
|
|
449
|
+
<span>Source: <span id="modal-source"></span></span>
|
|
450
|
+
<span>Project: <span id="modal-project"></span></span>
|
|
451
|
+
</div>
|
|
452
|
+
</div>
|
|
453
|
+
<div class="modal-footer">
|
|
454
|
+
<button id="modal-save" class="btn btn-primary">Save Changes</button>
|
|
455
|
+
<button id="modal-delete" class="btn btn-danger">Delete</button>
|
|
456
|
+
<button id="modal-cancel" class="btn btn-secondary">Cancel</button>
|
|
457
|
+
</div>
|
|
458
|
+
</div>
|
|
459
|
+
</div>
|
|
460
|
+
|
|
461
|
+
<!-- Create Memory Modal -->
|
|
462
|
+
<div id="create-modal" class="modal">
|
|
463
|
+
<div class="modal-content">
|
|
464
|
+
<div class="modal-header">
|
|
465
|
+
<h3>Create Memory</h3>
|
|
466
|
+
<button class="modal-close">×</button>
|
|
467
|
+
</div>
|
|
468
|
+
<div class="modal-body">
|
|
469
|
+
<div class="form-group">
|
|
470
|
+
<label for="create-scope">Scope</label>
|
|
471
|
+
<select id="create-scope" class="filter-select" style="width: 100%;">
|
|
472
|
+
<option value="global">Global (all projects)</option>
|
|
473
|
+
<option value="project">Current Project</option>
|
|
474
|
+
</select>
|
|
475
|
+
</div>
|
|
476
|
+
<div class="form-group" id="create-project-group" style="display: none;">
|
|
477
|
+
<label for="create-project">Project</label>
|
|
478
|
+
<select id="create-project" class="filter-select" style="width: 100%;"></select>
|
|
479
|
+
</div>
|
|
480
|
+
<div class="form-group">
|
|
481
|
+
<label for="create-content">Content</label>
|
|
482
|
+
<textarea id="create-content" class="content-editor" placeholder="Enter memory content..."></textarea>
|
|
483
|
+
</div>
|
|
484
|
+
</div>
|
|
485
|
+
<div class="modal-footer">
|
|
486
|
+
<button id="create-save" class="btn btn-primary">Save Memory</button>
|
|
487
|
+
<button id="create-cancel" class="btn btn-secondary">Cancel</button>
|
|
488
|
+
</div>
|
|
489
|
+
</div>
|
|
490
|
+
</div>
|
|
491
|
+
|
|
492
|
+
<!-- Delete Confirmation Modal -->
|
|
493
|
+
<div id="delete-modal" class="modal">
|
|
494
|
+
<div class="modal-content modal-small">
|
|
495
|
+
<div class="modal-header">
|
|
496
|
+
<h3>Confirm Delete</h3>
|
|
497
|
+
<button class="modal-close">×</button>
|
|
498
|
+
</div>
|
|
499
|
+
<div class="modal-body">
|
|
500
|
+
<p>Are you sure you want to delete this memory? This action cannot be undone.</p>
|
|
501
|
+
</div>
|
|
502
|
+
<div class="modal-footer">
|
|
503
|
+
<button id="confirm-delete" class="btn btn-danger">Delete</button>
|
|
504
|
+
<button id="cancel-delete" class="btn btn-secondary">Cancel</button>
|
|
505
|
+
</div>
|
|
506
|
+
</div>
|
|
507
|
+
</div>
|
|
508
|
+
|
|
509
|
+
<!-- Delete Project Memories Confirmation Modal -->
|
|
510
|
+
<div id="delete-project-modal" class="modal">
|
|
511
|
+
<div class="modal-content modal-small">
|
|
512
|
+
<div class="modal-header">
|
|
513
|
+
<h3>Delete All Project Memories</h3>
|
|
514
|
+
<button class="modal-close">×</button>
|
|
515
|
+
</div>
|
|
516
|
+
<div class="modal-body">
|
|
517
|
+
<p>Are you sure you want to delete all memories from project "<strong id="delete-project-name"></strong>"?</p>
|
|
518
|
+
<p class="warning-text">This will permanently delete <strong id="delete-project-count"></strong> memories and cannot be undone.</p>
|
|
519
|
+
</div>
|
|
520
|
+
<div class="modal-footer">
|
|
521
|
+
<button id="confirm-delete-project" class="btn btn-danger">Delete All Memories</button>
|
|
522
|
+
<button id="cancel-delete-project" class="btn btn-secondary">Cancel</button>
|
|
523
|
+
</div>
|
|
524
|
+
</div>
|
|
525
|
+
</div>
|
|
526
|
+
|
|
527
|
+
<!-- Clear Global Profile Confirmation Modal -->
|
|
528
|
+
<div id="clear-global-modal" class="modal">
|
|
529
|
+
<div class="modal-content modal-small">
|
|
530
|
+
<div class="modal-header">
|
|
531
|
+
<h3>Clear Global Profile</h3>
|
|
532
|
+
<button class="modal-close">×</button>
|
|
533
|
+
</div>
|
|
534
|
+
<div class="modal-body">
|
|
535
|
+
<p>Are you sure you want to clear all global profile entries?</p>
|
|
536
|
+
<p class="warning-text">This will permanently delete <strong id="clear-global-count"></strong> entries and cannot be undone.</p>
|
|
537
|
+
</div>
|
|
538
|
+
<div class="modal-footer">
|
|
539
|
+
<button id="confirm-clear-global" class="btn btn-danger">Clear All</button>
|
|
540
|
+
<button id="cancel-clear-global" class="btn btn-secondary">Cancel</button>
|
|
541
|
+
</div>
|
|
542
|
+
</div>
|
|
543
|
+
</div>
|
|
544
|
+
|
|
545
|
+
<!-- Toast Notifications -->
|
|
546
|
+
<div id="toast-container" class="toast-container"></div>
|
|
547
|
+
</div>
|
|
548
|
+
|
|
549
|
+
<script src="app.js"></script>
|
|
550
|
+
</body>
|
|
551
|
+
</html>
|