laminark 0.1.0 → 2.21.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/.claude-plugin/marketplace.json +15 -0
  2. package/README.md +71 -36
  3. package/package.json +7 -9
  4. package/plugin/.claude-plugin/plugin.json +1 -1
  5. package/plugin/dist/hooks/handler.d.ts +1 -3
  6. package/plugin/dist/hooks/handler.d.ts.map +1 -1
  7. package/plugin/dist/hooks/handler.js +22 -310
  8. package/plugin/dist/hooks/handler.js.map +1 -1
  9. package/plugin/dist/index.d.ts +1 -3
  10. package/plugin/dist/index.d.ts.map +1 -1
  11. package/plugin/dist/index.js +392 -1895
  12. package/plugin/dist/index.js.map +1 -1
  13. package/plugin/dist/{observations-CorAAc1A.d.mts → observations-Ch0nc47i.d.mts} +1 -23
  14. package/plugin/dist/observations-Ch0nc47i.d.mts.map +1 -0
  15. package/plugin/dist/{tool-registry-e710BvXq.mjs → tool-registry-CZ3mJ4iR.mjs} +13 -932
  16. package/plugin/dist/tool-registry-CZ3mJ4iR.mjs.map +1 -0
  17. package/plugin/hooks/hooks.json +6 -6
  18. package/plugin/scripts/README.md +1 -19
  19. package/plugin/scripts/bump-version.sh +3 -1
  20. package/plugin/scripts/ensure-deps.sh +2 -5
  21. package/plugin/scripts/install.sh +39 -115
  22. package/plugin/scripts/local-install.sh +58 -93
  23. package/plugin/scripts/setup-tmpdir.sh +65 -0
  24. package/plugin/scripts/uninstall.sh +38 -76
  25. package/plugin/scripts/update.sh +69 -20
  26. package/plugin/scripts/verify-install.sh +25 -69
  27. package/plugin/ui/activity.js +0 -12
  28. package/plugin/ui/app.js +54 -24
  29. package/plugin/ui/graph.js +186 -413
  30. package/plugin/ui/help.js +172 -876
  31. package/plugin/ui/index.html +242 -506
  32. package/plugin/ui/settings.js +17 -781
  33. package/plugin/ui/styles.css +44 -990
  34. package/plugin/ui/timeline.js +2 -2
  35. package/plugin/CLAUDE.md +0 -10
  36. package/plugin/commands/recall.md +0 -55
  37. package/plugin/commands/remember.md +0 -34
  38. package/plugin/commands/resume.md +0 -45
  39. package/plugin/commands/stash.md +0 -34
  40. package/plugin/commands/status.md +0 -33
  41. package/plugin/dist/observations-CorAAc1A.d.mts.map +0 -1
  42. package/plugin/dist/tool-registry-e710BvXq.mjs.map +0 -1
  43. package/plugin/laminark.db +0 -0
  44. package/plugin/package.json +0 -17
  45. package/plugin/scripts/dev-sync.sh +0 -58
  46. package/plugin/ui/help/activity-feed.png +0 -0
  47. package/plugin/ui/help/analysis-panel.png +0 -0
  48. package/plugin/ui/help/graph-toolbar.png +0 -0
  49. package/plugin/ui/help/graph-view.png +0 -0
  50. package/plugin/ui/help/settings.png +0 -0
  51. package/plugin/ui/help/timeline.png +0 -0
  52. package/plugin/ui/tools.js +0 -826
@@ -15,7 +15,6 @@
15
15
  <button class="nav-tab active" data-view="graph-view">Knowledge Graph</button>
16
16
  <button class="nav-tab" data-view="timeline-view">Timeline</button>
17
17
  <button class="nav-tab" data-view="activity-view">Activity</button>
18
- <button class="nav-tab" data-view="tools-view">Tools</button>
19
18
  <button class="nav-tab" data-view="settings-view">Settings</button>
20
19
  <button class="nav-tab" data-view="help-view">Help</button>
21
20
  </div>
@@ -67,7 +66,6 @@
67
66
  <button class="layout-btn" data-layout="hierarchical" title="Top-down tree layout">Hierarchical</button>
68
67
  <button class="layout-btn" data-layout="concentric" title="Rings by entity type">Concentric</button>
69
68
  <button class="layout-btn" data-layout="communities" title="Community-grouped layout">Communities</button>
70
- <button class="layout-btn" data-layout="detangle" title="Minimize edge crossings">Detangle</button>
71
69
  </div>
72
70
  <button id="edge-labels-btn" class="edge-labels-btn active" title="Toggle edge labels">
73
71
  <svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor">
@@ -75,11 +73,12 @@
75
73
  <path d="M5 5.5a1.5 1.5 0 013 0v.25h1V5.5a2.5 2.5 0 00-5 0v5a2.5 2.5 0 005 0v-.25H8v.25a1.5 1.5 0 01-3 0v-5z" opacity=".6"/>
76
74
  </svg>
77
75
  </button>
78
- <button id="paths-toggle-btn" class="paths-toggle-btn" title="Find shortest path between two nodes">
76
+ <button id="paths-toggle-btn" class="paths-toggle-btn active" title="Toggle debug path overlay">
79
77
  <svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
80
- <circle cx="3" cy="13" r="2" opacity=".8"/>
81
- <circle cx="13" cy="3" r="2" opacity=".8"/>
82
- <path d="M4.5 11.5L11.5 4.5" stroke="currentColor" stroke-width="1.5" stroke-dasharray="3 2" fill="none"/>
78
+ <path d="M2 8c0-.4.3-.7.7-.7h1.6c.4 0 .7.3.7.7s-.3.7-.7.7H2.7C2.3 8.7 2 8.4 2 8zm4.3 0c0-.4.3-.7.7-.7h1.6c.4 0 .7.3.7.7s-.3.7-.7.7H7C6.6 8.7 6.3 8.4 6.3 8zm4.4 0c0-.4.3-.7.7-.7h1.6c.4 0 .7.3.7.7s-.3.7-.7.7h-1.6c-.4 0-.7-.3-.7-.7z"/>
79
+ <circle cx="2" cy="8" r="1.5"/>
80
+ <circle cx="8" cy="8" r="1.5"/>
81
+ <circle cx="14" cy="8" r="1.5"/>
83
82
  </svg>
84
83
  </button>
85
84
  <button id="analysis-btn" class="analysis-btn" title="Graph analysis">
@@ -132,573 +131,311 @@
132
131
  </div>
133
132
  </div>
134
133
 
135
- <div id="tools-view" class="view-container">
136
- <div class="tools-toolbar">
137
- <div class="tools-toolbar-left">
138
- <button class="tools-layout-btn active" data-layout="force" title="Force-directed layout">Force</button>
139
- <button class="tools-layout-btn" data-layout="cluster" title="Cluster by server">Clustered</button>
140
- <span class="tools-separator">|</span>
141
- <label class="tools-toggle-label">
142
- <input type="checkbox" id="tools-cluster-toggle" checked>
143
- <span>Show clusters</span>
144
- </label>
145
- </div>
146
- <div class="tools-toolbar-right">
147
- <select id="tools-filter-type" class="tools-filter-select" title="Filter by tool type">
148
- <option value="">All types</option>
149
- <option value="mcp_server">MCP Server</option>
150
- <option value="mcp_tool">MCP Tool</option>
151
- <option value="slash_command">Slash Command</option>
152
- <option value="skill">Skill</option>
153
- <option value="plugin">Plugin</option>
154
- <option value="builtin">Built-in</option>
155
- </select>
156
- <select id="tools-filter-server" class="tools-filter-select" title="Filter by server">
157
- <option value="">All servers</option>
158
- </select>
159
- </div>
160
- </div>
161
- <div class="tools-content-row">
162
- <div class="tools-graph-area">
163
- <svg id="tools-svg"></svg>
164
- <div class="tools-graph-stats" id="tools-stats">0 tools, 0 flows</div>
134
+ <div id="settings-view" class="view-container">
135
+ <div class="settings-container">
136
+ <h2 class="settings-heading">Database Statistics</h2>
137
+ <div id="db-stats-grid" class="db-stats-grid">
138
+ <p class="empty-state">Loading statistics...</p>
165
139
  </div>
166
- <aside id="tools-detail-panel" class="tools-detail-panel hidden">
167
- <div class="panel-header">
168
- <h3 id="tools-detail-title">Tool Details</h3>
169
- <button id="tools-detail-close" aria-label="Close detail panel">&times;</button>
170
- </div>
171
- <div id="tools-detail-body">
172
- <p class="empty-state">Click a tool node to view details</p>
173
- </div>
174
- </aside>
175
- </div>
176
- <div class="tools-session-strip" id="tools-session-strip">
177
- <div class="tools-session-strip-label">Recent sessions</div>
178
- <div class="tools-session-strip-content" id="tools-session-strip-content"></div>
179
- </div>
180
- </div>
181
140
 
182
- <div id="settings-view" class="view-container">
183
- <div class="settings-layout">
184
- <nav class="settings-sidebar">
185
- <div class="settings-sidebar-item active" data-settings-tab="overview">Overview</div>
186
- <div class="settings-sidebar-item" data-settings-tab="database">Database</div>
187
- <div class="settings-sidebar-item" data-settings-tab="intelligence">Intelligence</div>
188
- <div class="settings-sidebar-item" data-settings-tab="configuration">Configuration</div>
189
- <div class="settings-sidebar-item settings-sidebar-item-danger" data-settings-tab="danger">Danger Zone</div>
190
- </nav>
191
-
192
- <div class="settings-content">
193
- <div id="settings-success" class="settings-success hidden"></div>
194
-
195
- <!-- Overview Panel -->
196
- <div class="settings-panel active" data-settings-panel="overview">
197
- <h2 class="settings-heading">Database Statistics</h2>
198
- <div id="db-stats-grid" class="db-stats-grid">
199
- <p class="empty-state">Loading statistics...</p>
200
- </div>
141
+ <div id="settings-success" class="settings-success hidden"></div>
201
142
 
202
- <h2 class="settings-heading" style="margin-top:24px;">System Info</h2>
203
- <div id="system-info-grid" class="db-stats-grid system-info-grid">
204
- <p class="empty-state">Loading...</p>
143
+ <!-- Topic Detection Config -->
144
+ <div id="topic-detection-section" class="config-section collapsed">
145
+ <div class="config-section-header" data-config-toggle="topic-detection">
146
+ <h3><span class="toggle-icon">&#9660;</span> Topic Detection</h3>
147
+ <span id="td-status" class="config-section-status enabled">Enabled</span>
148
+ </div>
149
+ <div class="config-section-body" id="td-body">
150
+ <div class="config-field">
151
+ <div class="config-field-header">
152
+ <span class="config-field-label">Enabled</span>
153
+ <label class="config-toggle">
154
+ <input type="checkbox" id="td-enabled" checked>
155
+ <span class="config-toggle-slider"></span>
156
+ </label>
157
+ </div>
158
+ <div class="config-field-desc">Master toggle for topic shift detection</div>
205
159
  </div>
206
160
 
207
- <h2 class="settings-heading" style="margin-top:24px;">Database Storage</h2>
208
- <div id="db-storage-grid" class="db-stats-grid">
209
- <p class="empty-state">Loading...</p>
210
- </div>
161
+ <div id="td-fields">
162
+ <div class="config-field">
163
+ <div class="config-field-label">Sensitivity Preset</div>
164
+ <div class="config-field-desc">Controls how easily topic shifts are detected</div>
165
+ <div class="config-radio-group" id="td-preset">
166
+ <button class="config-radio" data-value="sensitive">Sensitive</button>
167
+ <button class="config-radio active" data-value="balanced">Balanced</button>
168
+ <button class="config-radio" data-value="relaxed">Relaxed</button>
169
+ </div>
170
+ </div>
211
171
 
212
- <h2 class="settings-heading" style="margin-top:24px;">Process Memory</h2>
213
- <div id="process-memory-grid" class="db-stats-grid">
214
- <p class="empty-state">Loading...</p>
215
- </div>
216
- </div>
172
+ <div class="config-field">
173
+ <div class="config-field-label">Sensitivity Multiplier</div>
174
+ <div class="config-field-desc">Multiplied with EWMA stddev for threshold (auto-filled from preset)</div>
175
+ <div class="config-field-value">
176
+ <input type="number" id="td-multiplier" class="config-number-input" step="0.1" min="0.1" value="1.5">
177
+ </div>
178
+ </div>
217
179
 
218
- <!-- Database Panel -->
219
- <div class="settings-panel" data-settings-panel="database">
220
- <h2 class="settings-heading">Database Hygiene</h2>
221
- <div id="hygiene-section" class="config-section">
222
- <div class="config-section-body" id="hy-body" style="border-top:none;">
223
- <p class="config-field-desc" style="margin-bottom: 12px;">
224
- Analyze observations for deletion candidates scored on 6 signals: orphaned, island node, noise classified, short content, auto-captured, stale.
225
- </p>
226
- <span id="hy-status" class="config-section-status disabled" style="margin-bottom:12px;display:inline-block;">Not scanned</span>
227
-
228
- <div class="config-field">
229
- <div class="config-field-label">Tier Filter</div>
230
- <div class="config-field-desc">Which confidence tier to analyze</div>
231
- <div class="config-radio-group" id="hy-tier">
232
- <button class="config-radio active" data-value="high">High (&ge; 0.7)</button>
233
- <button class="config-radio" data-value="medium">Medium+ (&ge; 0.5)</button>
234
- <button class="config-radio" data-value="all">All</button>
235
- </div>
180
+ <div class="config-field">
181
+ <div class="config-field-header">
182
+ <span class="config-field-label">Manual Threshold</span>
183
+ <label class="config-toggle">
184
+ <input type="checkbox" id="td-manual-enabled">
185
+ <span class="config-toggle-slider"></span>
186
+ </label>
236
187
  </div>
188
+ <div class="config-field-desc">Override adaptive threshold with a fixed value</div>
189
+ <div class="config-field-value">
190
+ <input type="number" id="td-manual-value" class="config-number-input" step="0.01" min="0" value="0.3" disabled>
191
+ </div>
192
+ </div>
237
193
 
238
- <div class="config-actions" style="margin-bottom: 16px;">
239
- <button class="btn-config-save" id="hy-scan">Scan Now</button>
194
+ <div class="config-field">
195
+ <div class="config-field-label">EWMA Alpha</div>
196
+ <div class="config-field-desc">Decay factor for exponentially weighted moving average (0.01 - 1.0)</div>
197
+ <div class="config-field-value">
198
+ <input type="range" id="td-ewma" class="config-slider" min="0.01" max="1" step="0.01" value="0.3">
199
+ <span id="td-ewma-val" class="config-slider-value">0.30</span>
240
200
  </div>
201
+ </div>
241
202
 
242
- <div id="hy-results" class="hygiene-results hidden">
243
- <div id="hy-summary" class="hygiene-summary"></div>
244
- <div id="hy-table-wrap" class="hygiene-table-wrap">
245
- <table id="hy-table" class="hygiene-table">
246
- <thead>
247
- <tr>
248
- <th>ID</th>
249
- <th>Kind</th>
250
- <th>Source</th>
251
- <th>Confidence</th>
252
- <th>Signals</th>
253
- <th>Preview</th>
254
- </tr>
255
- </thead>
256
- <tbody id="hy-table-body"></tbody>
257
- </table>
203
+ <div class="config-field">
204
+ <div class="config-field-label">Threshold Bounds</div>
205
+ <div class="config-field-desc">Hard min/max limits for the adaptive threshold</div>
206
+ <div class="config-field-row">
207
+ <div class="config-field-inline">
208
+ <span>Min</span>
209
+ <input type="number" id="td-bounds-min" class="config-number-input" step="0.01" min="0.05" max="0.95" value="0.15">
258
210
  </div>
259
- <div class="config-actions" style="margin-top: 12px;">
260
- <button class="btn-danger" id="hy-purge">Purge Selected Tier</button>
211
+ <div class="config-field-inline">
212
+ <span>Max</span>
213
+ <input type="number" id="td-bounds-max" class="config-number-input" step="0.01" min="0.05" max="0.95" value="0.6">
261
214
  </div>
262
215
  </div>
263
216
  </div>
264
217
  </div>
265
218
 
266
- <h2 class="settings-heading" style="margin-top:24px;">Hygiene Settings</h2>
267
- <div id="hygiene-config-section" class="config-section">
268
- <div class="config-section-body" id="hc-body" style="border-top:none;">
269
- <p class="config-field-desc" style="margin-bottom: 12px;">
270
- Configure signal weights and tier thresholds used to score deletion candidates.
271
- </p>
272
-
273
- <div class="config-field-group-label">Signal Weights</div>
274
-
275
- <div class="config-threshold-grid" id="hc-weights">
276
- <div class="config-threshold-row">
277
- <span class="config-threshold-label">Orphaned</span>
278
- <input type="range" class="config-slider" id="hc-w-orphaned" min="0" max="1" step="0.01" value="0.30">
279
- <span class="config-slider-value" id="hc-w-orphaned-val">0.30</span>
280
- </div>
281
- <div class="config-threshold-row">
282
- <span class="config-threshold-label">Island Node</span>
283
- <input type="range" class="config-slider" id="hc-w-islandNode" min="0" max="1" step="0.01" value="0.25">
284
- <span class="config-slider-value" id="hc-w-islandNode-val">0.25</span>
285
- </div>
286
- <div class="config-threshold-row">
287
- <span class="config-threshold-label">Noise</span>
288
- <input type="range" class="config-slider" id="hc-w-noiseClassified" min="0" max="1" step="0.01" value="0.25">
289
- <span class="config-slider-value" id="hc-w-noiseClassified-val">0.25</span>
290
- </div>
291
- <div class="config-threshold-row">
292
- <span class="config-threshold-label">Short Content</span>
293
- <input type="range" class="config-slider" id="hc-w-shortContent" min="0" max="1" step="0.01" value="0.10">
294
- <span class="config-slider-value" id="hc-w-shortContent-val">0.10</span>
295
- </div>
296
- <div class="config-threshold-row">
297
- <span class="config-threshold-label">Auto-Captured</span>
298
- <input type="range" class="config-slider" id="hc-w-autoCaptured" min="0" max="1" step="0.01" value="0.10">
299
- <span class="config-slider-value" id="hc-w-autoCaptured-val">0.10</span>
300
- </div>
301
- <div class="config-threshold-row">
302
- <span class="config-threshold-label">Stale</span>
303
- <input type="range" class="config-slider" id="hc-w-stale" min="0" max="1" step="0.01" value="0.10">
304
- <span class="config-slider-value" id="hc-w-stale-val">0.10</span>
305
- </div>
306
- </div>
219
+ <div class="config-actions">
220
+ <button class="btn-config-save" id="td-save">Save</button>
221
+ <button class="btn-config-defaults" id="td-defaults">Reset to Defaults</button>
222
+ </div>
223
+ </div>
224
+ </div>
307
225
 
308
- <div class="config-field-group-label">Thresholds</div>
226
+ <!-- Graph Extraction Config -->
227
+ <div id="graph-extraction-section" class="config-section collapsed">
228
+ <div class="config-section-header" data-config-toggle="graph-extraction">
229
+ <h3><span class="toggle-icon">&#9660;</span> Graph Extraction</h3>
230
+ <span id="ge-status" class="config-section-status enabled">Enabled</span>
231
+ </div>
232
+ <div class="config-section-body" id="ge-body">
233
+ <div class="config-field">
234
+ <div class="config-field-header">
235
+ <span class="config-field-label">Enabled</span>
236
+ <label class="config-toggle">
237
+ <input type="checkbox" id="ge-enabled" checked>
238
+ <span class="config-toggle-slider"></span>
239
+ </label>
240
+ </div>
241
+ <div class="config-field-desc">Master toggle for knowledge graph extraction</div>
242
+ </div>
309
243
 
310
- <div class="config-threshold-grid" id="hc-thresholds">
311
- <div class="config-threshold-row">
312
- <span class="config-threshold-label">High Tier &ge;</span>
313
- <input type="range" class="config-slider" id="hc-t-high" min="0" max="1" step="0.01" value="0.70">
314
- <span class="config-slider-value" id="hc-t-high-val">0.70</span>
315
- </div>
316
- <div class="config-threshold-row">
317
- <span class="config-threshold-label">Medium Tier &ge;</span>
318
- <input type="range" class="config-slider" id="hc-t-medium" min="0" max="1" step="0.01" value="0.50">
319
- <span class="config-slider-value" id="hc-t-medium-val">0.50</span>
320
- </div>
321
- </div>
244
+ <div id="ge-fields">
245
+ <div class="config-field-group-label">Temporal Decay</div>
322
246
 
323
- <div class="config-field">
324
- <div class="config-field-label">Short Content Threshold (chars)</div>
325
- <div class="config-field-value">
326
- <input type="number" id="hc-short-threshold" class="config-number-input" min="0" value="50">
327
- </div>
247
+ <div class="config-field">
248
+ <div class="config-field-label">Half-Life (days)</div>
249
+ <div class="config-field-desc">How many days until edge weight decays to 50%</div>
250
+ <div class="config-field-value">
251
+ <input type="number" id="ge-halflife" class="config-number-input" min="1" value="30">
328
252
  </div>
253
+ </div>
329
254
 
330
- <div class="config-actions">
331
- <button class="btn-config-save" id="hc-save">Save</button>
332
- <button class="btn-config-defaults" id="hc-defaults">Reset to Defaults</button>
255
+ <div class="config-field">
256
+ <div class="config-field-label">Minimum Floor</div>
257
+ <div class="config-field-desc">Lowest weight an edge can decay to before deletion check</div>
258
+ <div class="config-field-value">
259
+ <input type="range" id="ge-minfloor" class="config-slider" min="0" max="0.99" step="0.01" value="0.05">
260
+ <span id="ge-minfloor-val" class="config-slider-value">0.05</span>
333
261
  </div>
262
+ </div>
334
263
 
335
- <div class="config-field-group-label" style="margin-top:16px;">Find Analysis</div>
336
- <p class="config-field-desc" style="margin-bottom: 12px;">
337
- Score distribution of all observations using current weights. Shows where the cutoff line falls.
338
- </p>
339
- <div class="config-actions" style="margin-bottom: 12px;">
340
- <button class="btn-config-save" id="hc-find">Find</button>
341
- </div>
342
- <div id="hc-find-results" class="hidden">
343
- <div id="hc-find-summary" class="hygiene-summary"></div>
344
- <div id="hc-find-histogram" class="hygiene-distribution"></div>
345
- <div id="hc-find-islands" class="hygiene-summary" style="margin-top:8px;"></div>
264
+ <div class="config-field">
265
+ <div class="config-field-label">Deletion Threshold</div>
266
+ <div class="config-field-desc">Edges below this weight are deleted during curation</div>
267
+ <div class="config-field-value">
268
+ <input type="range" id="ge-delthresh" class="config-slider" min="0" max="0.99" step="0.01" value="0.08">
269
+ <span id="ge-delthresh-val" class="config-slider-value">0.08</span>
346
270
  </div>
347
271
  </div>
348
- </div>
349
- </div>
350
272
 
351
- <!-- Intelligence Panel -->
352
- <div class="settings-panel" data-settings-panel="intelligence">
353
- <h2 class="settings-heading">Topic Detection</h2>
354
- <div id="topic-detection-section" class="config-section">
355
- <div class="config-section-body" id="td-body" style="border-top:none;">
356
- <div class="config-field">
357
- <div class="config-field-header">
358
- <span class="config-field-label">Enabled</span>
359
- <label class="config-toggle">
360
- <input type="checkbox" id="td-enabled" checked>
361
- <span class="config-toggle-slider"></span>
362
- </label>
363
- </div>
364
- <div class="config-field-desc">Master toggle for topic shift detection</div>
365
- <span id="td-status" class="config-section-status enabled" style="margin-top:8px;display:inline-block;">Enabled</span>
273
+ <div class="config-field">
274
+ <div class="config-field-label">Max Age (days)</div>
275
+ <div class="config-field-desc">Maximum age before forced deletion regardless of weight</div>
276
+ <div class="config-field-value">
277
+ <input type="number" id="ge-maxage" class="config-number-input" min="1" value="180">
366
278
  </div>
279
+ </div>
367
280
 
368
- <div id="td-fields">
369
- <div class="config-field">
370
- <div class="config-field-label">Sensitivity Preset</div>
371
- <div class="config-field-desc">Controls how easily topic shifts are detected</div>
372
- <div class="config-radio-group" id="td-preset">
373
- <button class="config-radio" data-value="sensitive">Sensitive</button>
374
- <button class="config-radio active" data-value="balanced">Balanced</button>
375
- <button class="config-radio" data-value="relaxed">Relaxed</button>
376
- </div>
377
- </div>
378
-
379
- <div class="config-field">
380
- <div class="config-field-label">Sensitivity Multiplier</div>
381
- <div class="config-field-desc">Multiplied with EWMA stddev for threshold (auto-filled from preset)</div>
382
- <div class="config-field-value">
383
- <input type="number" id="td-multiplier" class="config-number-input" step="0.1" min="0.1" value="1.5">
384
- </div>
385
- </div>
386
-
387
- <div class="config-field">
388
- <div class="config-field-header">
389
- <span class="config-field-label">Manual Threshold</span>
390
- <label class="config-toggle">
391
- <input type="checkbox" id="td-manual-enabled">
392
- <span class="config-toggle-slider"></span>
393
- </label>
394
- </div>
395
- <div class="config-field-desc">Override adaptive threshold with a fixed value</div>
396
- <div class="config-field-value">
397
- <input type="number" id="td-manual-value" class="config-number-input" step="0.01" min="0" value="0.3" disabled>
398
- </div>
399
- </div>
400
-
401
- <div class="config-field">
402
- <div class="config-field-label">EWMA Alpha</div>
403
- <div class="config-field-desc">Decay factor for exponentially weighted moving average (0.01 - 1.0)</div>
404
- <div class="config-field-value">
405
- <input type="range" id="td-ewma" class="config-slider" min="0.01" max="1" step="0.01" value="0.3">
406
- <span id="td-ewma-val" class="config-slider-value">0.30</span>
407
- </div>
408
- </div>
409
-
410
- <div class="config-field">
411
- <div class="config-field-label">Threshold Bounds</div>
412
- <div class="config-field-desc">Hard min/max limits for the adaptive threshold</div>
413
- <div class="config-field-row">
414
- <div class="config-field-inline">
415
- <span>Min</span>
416
- <input type="number" id="td-bounds-min" class="config-number-input" step="0.01" min="0.05" max="0.95" value="0.15">
417
- </div>
418
- <div class="config-field-inline">
419
- <span>Max</span>
420
- <input type="number" id="td-bounds-max" class="config-number-input" step="0.01" min="0.05" max="0.95" value="0.6">
421
- </div>
422
- </div>
423
- </div>
424
- </div>
281
+ <div class="config-field-group-label">Fuzzy Deduplication</div>
425
282
 
426
- <div class="config-actions">
427
- <button class="btn-config-save" id="td-save">Save</button>
428
- <button class="btn-config-defaults" id="td-defaults">Reset to Defaults</button>
283
+ <div class="config-field">
284
+ <div class="config-field-label">Max Levenshtein Distance</div>
285
+ <div class="config-field-desc">Maximum edit distance for typo matching</div>
286
+ <div class="config-field-value">
287
+ <input type="number" id="ge-levenshtein" class="config-number-input" min="1" max="10" value="2">
429
288
  </div>
430
289
  </div>
431
- </div>
432
290
 
433
- <h2 class="settings-heading" style="margin-top:24px;">Graph Extraction</h2>
434
- <div id="graph-extraction-section" class="config-section">
435
- <div class="config-section-body" id="ge-body" style="border-top:none;">
436
- <div class="config-field">
437
- <div class="config-field-header">
438
- <span class="config-field-label">Enabled</span>
439
- <label class="config-toggle">
440
- <input type="checkbox" id="ge-enabled" checked>
441
- <span class="config-toggle-slider"></span>
442
- </label>
443
- </div>
444
- <div class="config-field-desc">Master toggle for knowledge graph extraction</div>
445
- <span id="ge-status" class="config-section-status enabled" style="margin-top:8px;display:inline-block;">Enabled</span>
291
+ <div class="config-field">
292
+ <div class="config-field-label">Jaccard Threshold</div>
293
+ <div class="config-field-desc">Minimum word-overlap similarity for dedup matching</div>
294
+ <div class="config-field-value">
295
+ <input type="range" id="ge-jaccard" class="config-slider" min="0" max="1" step="0.01" value="0.7">
296
+ <span id="ge-jaccard-val" class="config-slider-value">0.70</span>
446
297
  </div>
298
+ </div>
447
299
 
448
- <div id="ge-fields">
449
- <div class="config-field-group-label">Temporal Decay</div>
450
-
451
- <div class="config-field">
452
- <div class="config-field-label">Half-Life (days)</div>
453
- <div class="config-field-desc">How many days until edge weight decays to 50%</div>
454
- <div class="config-field-value">
455
- <input type="number" id="ge-halflife" class="config-number-input" min="1" value="30">
456
- </div>
457
- </div>
458
-
459
- <div class="config-field">
460
- <div class="config-field-label">Minimum Floor</div>
461
- <div class="config-field-desc">Lowest weight an edge can decay to before deletion check</div>
462
- <div class="config-field-value">
463
- <input type="range" id="ge-minfloor" class="config-slider" min="0" max="0.99" step="0.01" value="0.05">
464
- <span id="ge-minfloor-val" class="config-slider-value">0.05</span>
465
- </div>
466
- </div>
467
-
468
- <div class="config-field">
469
- <div class="config-field-label">Deletion Threshold</div>
470
- <div class="config-field-desc">Edges below this weight are deleted during curation</div>
471
- <div class="config-field-value">
472
- <input type="range" id="ge-delthresh" class="config-slider" min="0" max="0.99" step="0.01" value="0.08">
473
- <span id="ge-delthresh-val" class="config-slider-value">0.08</span>
474
- </div>
475
- </div>
476
-
477
- <div class="config-field">
478
- <div class="config-field-label">Max Age (days)</div>
479
- <div class="config-field-desc">Maximum age before forced deletion regardless of weight</div>
480
- <div class="config-field-value">
481
- <input type="number" id="ge-maxage" class="config-number-input" min="1" value="180">
482
- </div>
483
- </div>
484
-
485
- <div class="config-field-group-label">Fuzzy Deduplication</div>
486
-
487
- <div class="config-field">
488
- <div class="config-field-label">Max Levenshtein Distance</div>
489
- <div class="config-field-desc">Maximum edit distance for typo matching</div>
490
- <div class="config-field-value">
491
- <input type="number" id="ge-levenshtein" class="config-number-input" min="1" max="10" value="2">
492
- </div>
493
- </div>
494
-
495
- <div class="config-field">
496
- <div class="config-field-label">Jaccard Threshold</div>
497
- <div class="config-field-desc">Minimum word-overlap similarity for dedup matching</div>
498
- <div class="config-field-value">
499
- <input type="range" id="ge-jaccard" class="config-slider" min="0" max="1" step="0.01" value="0.7">
500
- <span id="ge-jaccard-val" class="config-slider-value">0.70</span>
501
- </div>
502
- </div>
300
+ <div class="config-field-group-label">Quality Gate</div>
503
301
 
504
- <div class="config-field-group-label">Quality Gate</div>
302
+ <div class="config-field">
303
+ <div class="config-field-label">Max Files per Observation</div>
304
+ <div class="config-field-desc">Maximum File nodes extracted from a single observation</div>
305
+ <div class="config-field-value">
306
+ <input type="number" id="ge-maxfiles" class="config-number-input" min="1" value="5">
307
+ </div>
308
+ </div>
505
309
 
506
- <div class="config-field">
507
- <div class="config-field-label">Max Files per Observation</div>
508
- <div class="config-field-desc">Maximum File nodes extracted from a single observation</div>
509
- <div class="config-field-value">
510
- <input type="number" id="ge-maxfiles" class="config-number-input" min="1" value="5">
511
- </div>
310
+ <div class="config-field">
311
+ <div class="config-field-label">Type Confidence Thresholds</div>
312
+ <div class="config-field-desc">Minimum confidence to persist each entity type</div>
313
+ <div class="config-threshold-grid" id="ge-thresholds">
314
+ <div class="config-threshold-row">
315
+ <span class="config-threshold-label">File</span>
316
+ <input type="range" class="config-slider" data-type="File" min="0" max="1" step="0.01" value="0.95">
317
+ <span class="config-slider-value">0.95</span>
512
318
  </div>
513
-
514
- <div class="config-field">
515
- <div class="config-field-label">Type Confidence Thresholds</div>
516
- <div class="config-field-desc">Minimum confidence to persist each entity type</div>
517
- <div class="config-threshold-grid" id="ge-thresholds">
518
- <div class="config-threshold-row">
519
- <span class="config-threshold-label">File</span>
520
- <input type="range" class="config-slider" data-type="File" min="0" max="1" step="0.01" value="0.95">
521
- <span class="config-slider-value">0.95</span>
522
- </div>
523
- <div class="config-threshold-row">
524
- <span class="config-threshold-label">Project</span>
525
- <input type="range" class="config-slider" data-type="Project" min="0" max="1" step="0.01" value="0.8">
526
- <span class="config-slider-value">0.80</span>
527
- </div>
528
- <div class="config-threshold-row">
529
- <span class="config-threshold-label">Reference</span>
530
- <input type="range" class="config-slider" data-type="Reference" min="0" max="1" step="0.01" value="0.85">
531
- <span class="config-slider-value">0.85</span>
532
- </div>
533
- <div class="config-threshold-row">
534
- <span class="config-threshold-label">Decision</span>
535
- <input type="range" class="config-slider" data-type="Decision" min="0" max="1" step="0.01" value="0.65">
536
- <span class="config-slider-value">0.65</span>
537
- </div>
538
- <div class="config-threshold-row">
539
- <span class="config-threshold-label">Problem</span>
540
- <input type="range" class="config-slider" data-type="Problem" min="0" max="1" step="0.01" value="0.6">
541
- <span class="config-slider-value">0.60</span>
542
- </div>
543
- <div class="config-threshold-row">
544
- <span class="config-threshold-label">Solution</span>
545
- <input type="range" class="config-slider" data-type="Solution" min="0" max="1" step="0.01" value="0.6">
546
- <span class="config-slider-value">0.60</span>
547
- </div>
548
- </div>
319
+ <div class="config-threshold-row">
320
+ <span class="config-threshold-label">Project</span>
321
+ <input type="range" class="config-slider" data-type="Project" min="0" max="1" step="0.01" value="0.8">
322
+ <span class="config-slider-value">0.80</span>
549
323
  </div>
550
-
551
- <div class="config-field">
552
- <div class="config-field-label">File Non-Change Multiplier</div>
553
- <div class="config-field-desc">Confidence multiplier for File paths from non-change observations</div>
554
- <div class="config-field-value">
555
- <input type="range" id="ge-filenonchange" class="config-slider" min="0" max="1" step="0.01" value="0.74">
556
- <span id="ge-filenonchange-val" class="config-slider-value">0.74</span>
557
- </div>
324
+ <div class="config-threshold-row">
325
+ <span class="config-threshold-label">Reference</span>
326
+ <input type="range" class="config-slider" data-type="Reference" min="0" max="1" step="0.01" value="0.85">
327
+ <span class="config-slider-value">0.85</span>
558
328
  </div>
559
-
560
- <div class="config-field">
561
- <div class="config-field-row">
562
- <div class="config-field-inline">
563
- <span>Min Name Length</span>
564
- <input type="number" id="ge-minname" class="config-number-input" min="1" value="3">
565
- </div>
566
- <div class="config-field-inline">
567
- <span>Max Name Length</span>
568
- <input type="number" id="ge-maxname" class="config-number-input" min="10" value="200">
569
- </div>
570
- </div>
329
+ <div class="config-threshold-row">
330
+ <span class="config-threshold-label">Decision</span>
331
+ <input type="range" class="config-slider" data-type="Decision" min="0" max="1" step="0.01" value="0.65">
332
+ <span class="config-slider-value">0.65</span>
571
333
  </div>
572
-
573
- <div class="config-field-group-label">Relationship Detector</div>
574
-
575
- <div class="config-field">
576
- <div class="config-field-label">Min Edge Confidence</div>
577
- <div class="config-field-desc">Minimum confidence to persist a relationship edge</div>
578
- <div class="config-field-value">
579
- <input type="range" id="ge-minedge" class="config-slider" min="0" max="1" step="0.01" value="0.45">
580
- <span id="ge-minedge-val" class="config-slider-value">0.45</span>
581
- </div>
334
+ <div class="config-threshold-row">
335
+ <span class="config-threshold-label">Problem</span>
336
+ <input type="range" class="config-slider" data-type="Problem" min="0" max="1" step="0.01" value="0.6">
337
+ <span class="config-slider-value">0.60</span>
582
338
  </div>
583
-
584
- <div class="config-field-group-label">Signal Classifier</div>
585
-
586
- <div class="config-field">
587
- <div class="config-field-label">Min Content Length</div>
588
- <div class="config-field-desc">Minimum characters required to process an observation</div>
589
- <div class="config-field-value">
590
- <input type="number" id="ge-mincontent" class="config-number-input" min="0" value="30">
591
- </div>
339
+ <div class="config-threshold-row">
340
+ <span class="config-threshold-label">Solution</span>
341
+ <input type="range" class="config-slider" data-type="Solution" min="0" max="1" step="0.01" value="0.6">
342
+ <span class="config-slider-value">0.60</span>
592
343
  </div>
593
344
  </div>
345
+ </div>
594
346
 
595
- <div class="config-actions">
596
- <button class="btn-config-save" id="ge-save">Save</button>
597
- <button class="btn-config-defaults" id="ge-defaults">Reset to Defaults</button>
347
+ <div class="config-field">
348
+ <div class="config-field-label">File Non-Change Multiplier</div>
349
+ <div class="config-field-desc">Confidence multiplier for File paths from non-change observations</div>
350
+ <div class="config-field-value">
351
+ <input type="range" id="ge-filenonchange" class="config-slider" min="0" max="1" step="0.01" value="0.74">
352
+ <span id="ge-filenonchange-val" class="config-slider-value">0.74</span>
598
353
  </div>
599
354
  </div>
600
- </div>
601
- </div>
602
355
 
603
- <!-- Configuration Panel -->
604
- <div class="settings-panel" data-settings-panel="configuration">
605
- <h2 class="settings-heading">Tool Response Verbosity</h2>
606
- <div id="tool-verbosity-section" class="config-section">
607
- <div class="config-section-body" id="tv-body" style="border-top:none;">
608
- <div class="config-field">
609
- <div class="config-field-label">Verbosity Level</div>
610
- <div class="config-field-desc">Controls how much detail MCP tool responses include</div>
611
- <span id="tv-status" class="config-section-status enabled" style="margin-bottom:8px;display:inline-block;">Standard</span>
612
- <div class="config-radio-group" id="tv-level">
613
- <button class="config-radio" data-value="1">Minimal</button>
614
- <button class="config-radio active" data-value="2">Standard</button>
615
- <button class="config-radio" data-value="3">Verbose</button>
356
+ <div class="config-field">
357
+ <div class="config-field-row">
358
+ <div class="config-field-inline">
359
+ <span>Min Name Length</span>
360
+ <input type="number" id="ge-minname" class="config-number-input" min="1" value="3">
616
361
  </div>
617
- </div>
618
-
619
- <div class="config-field">
620
- <div class="config-field-desc" style="margin-top: 4px; line-height: 1.6;">
621
- <strong>Minimal:</strong> Just confirms the tool ran<br>
622
- <strong>Standard:</strong> Shows titles and key info<br>
623
- <strong>Verbose:</strong> Full text with all details
362
+ <div class="config-field-inline">
363
+ <span>Max Name Length</span>
364
+ <input type="number" id="ge-maxname" class="config-number-input" min="10" value="200">
624
365
  </div>
625
366
  </div>
367
+ </div>
368
+
369
+ <div class="config-field-group-label">Relationship Detector</div>
626
370
 
627
- <div class="config-actions">
628
- <button class="btn-config-save" id="tv-save">Save</button>
629
- <button class="btn-config-defaults" id="tv-defaults">Reset to Defaults</button>
371
+ <div class="config-field">
372
+ <div class="config-field-label">Min Edge Confidence</div>
373
+ <div class="config-field-desc">Minimum confidence to persist a relationship edge</div>
374
+ <div class="config-field-value">
375
+ <input type="range" id="ge-minedge" class="config-slider" min="0" max="1" step="0.01" value="0.45">
376
+ <span id="ge-minedge-val" class="config-slider-value">0.45</span>
630
377
  </div>
631
378
  </div>
632
- </div>
633
379
 
634
- <h2 class="settings-heading" style="margin-top:24px;">Cross-Project Access</h2>
635
- <div id="cross-access-section" class="config-section">
636
- <div class="config-section-body" id="ca-body" style="border-top:none;">
637
- <p class="config-field-desc" style="margin-bottom: 12px;">Allow the current project to read memories from other projects. Read-only &mdash; no writes cross projects.</p>
638
- <span id="ca-status" class="config-section-status disabled" style="margin-bottom:12px;display:inline-block;">0 projects</span>
639
- <div class="cross-access-lists">
640
- <div class="cross-access-list">
641
- <div class="cross-access-list-header">Available</div>
642
- <ul id="ca-available" class="cross-access-items"></ul>
643
- </div>
644
- <div class="cross-access-list">
645
- <div class="cross-access-list-header">Can Read From</div>
646
- <ul id="ca-readable" class="cross-access-items"></ul>
647
- </div>
648
- </div>
649
- <div class="config-actions">
650
- <button class="btn-config-save" id="ca-save">Save</button>
651
- <button class="btn-config-defaults" id="ca-defaults">Reset to Defaults</button>
380
+ <div class="config-field-group-label">Signal Classifier</div>
381
+
382
+ <div class="config-field">
383
+ <div class="config-field-label">Min Content Length</div>
384
+ <div class="config-field-desc">Minimum characters required to process an observation</div>
385
+ <div class="config-field-value">
386
+ <input type="number" id="ge-mincontent" class="config-number-input" min="0" value="30">
652
387
  </div>
653
388
  </div>
654
389
  </div>
655
- </div>
656
390
 
657
- <!-- Danger Zone Panel -->
658
- <div class="settings-panel" data-settings-panel="danger">
659
- <h2 class="settings-heading settings-heading-danger">Danger Zone</h2>
660
- <div class="settings-scope">
661
- <label class="scope-radio"><input type="radio" name="reset-scope" value="current" checked> Current project only (<span id="reset-scope-project-name">—</span>)</label>
662
- <label class="scope-radio"><input type="radio" name="reset-scope" value="all"> All projects</label>
391
+ <div class="config-actions">
392
+ <button class="btn-config-save" id="ge-save">Save</button>
393
+ <button class="btn-config-defaults" id="ge-defaults">Reset to Defaults</button>
663
394
  </div>
395
+ </div>
396
+ </div>
664
397
 
665
- <div class="danger-zone">
666
- <div class="reset-action-card">
667
- <div class="reset-action-info">
668
- <h3>Reset Observations</h3>
669
- <p>Delete all observations, FTS indexes, and vector embeddings.</p>
670
- </div>
671
- <button class="btn-danger reset-action-btn" data-reset-type="observations">Reset Observations</button>
672
- </div>
673
- <div class="reset-action-card">
674
- <div class="reset-action-info">
675
- <h3>Reset Knowledge Graph</h3>
676
- <p>Delete all graph nodes and edges.</p>
677
- </div>
678
- <button class="btn-danger reset-action-btn" data-reset-type="graph">Reset Graph</button>
679
- </div>
680
- <div class="reset-action-card">
681
- <div class="reset-action-info">
682
- <h3>Reset Sessions &amp; Intelligence</h3>
683
- <p>Delete all sessions, context stashes, threshold history, and shift decisions.</p>
684
- </div>
685
- <button class="btn-danger reset-action-btn" data-reset-type="sessions">Reset Sessions</button>
686
- </div>
687
- <div class="reset-action-card reset-action-card-destructive">
688
- <div class="reset-action-info">
689
- <h3>Reset Everything</h3>
690
- <p>Delete all data across all table groups. This cannot be undone.</p>
691
- </div>
692
- <button class="btn-danger-primary reset-action-btn" data-reset-type="all">Reset Everything</button>
693
- </div>
398
+ <h2 class="settings-heading settings-heading-danger">Danger Zone</h2>
399
+ <div class="settings-scope">
400
+ <label class="scope-radio"><input type="radio" name="reset-scope" value="current" checked> Current project only</label>
401
+ <label class="scope-radio"><input type="radio" name="reset-scope" value="all"> All projects</label>
402
+ </div>
403
+
404
+ <div class="danger-zone">
405
+ <div class="reset-action-card">
406
+ <div class="reset-action-info">
407
+ <h3>Reset Observations</h3>
408
+ <p>Delete all observations, FTS indexes, and vector embeddings.</p>
409
+ </div>
410
+ <button class="btn-danger reset-action-btn" data-reset-type="observations">Reset Observations</button>
411
+ </div>
412
+ <div class="reset-action-card">
413
+ <div class="reset-action-info">
414
+ <h3>Reset Knowledge Graph</h3>
415
+ <p>Delete all graph nodes and edges.</p>
416
+ </div>
417
+ <button class="btn-danger reset-action-btn" data-reset-type="graph">Reset Graph</button>
418
+ </div>
419
+ <div class="reset-action-card">
420
+ <div class="reset-action-info">
421
+ <h3>Reset Sessions &amp; Intelligence</h3>
422
+ <p>Delete all sessions, context stashes, threshold history, and shift decisions.</p>
423
+ </div>
424
+ <button class="btn-danger reset-action-btn" data-reset-type="sessions">Reset Sessions</button>
425
+ </div>
426
+ <div class="reset-action-card reset-action-card-destructive">
427
+ <div class="reset-action-info">
428
+ <h3>Reset Everything</h3>
429
+ <p>Delete all data across all table groups. This cannot be undone.</p>
694
430
  </div>
431
+ <button class="btn-danger-primary reset-action-btn" data-reset-type="all">Reset Everything</button>
695
432
  </div>
696
433
  </div>
697
434
  </div>
698
435
  </div>
699
436
 
700
437
  <div id="help-view" class="view-container">
701
- <div id="help-content" style="display:flex;flex:1;min-height:0;">
438
+ <div class="help-container" id="help-content">
702
439
  <p class="empty-state">Loading help...</p>
703
440
  </div>
704
441
  </div>
@@ -751,6 +488,5 @@
751
488
  <script src="/activity.js"></script>
752
489
  <script src="/settings.js"></script>
753
490
  <script src="/help.js"></script>
754
- <script src="/tools.js"></script>
755
491
  </body>
756
492
  </html>