laminark 2.21.6
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/.claude-plugin/marketplace.json +15 -0
- package/README.md +182 -0
- package/package.json +63 -0
- package/plugin/.claude-plugin/plugin.json +13 -0
- package/plugin/.mcp.json +12 -0
- package/plugin/dist/analysis/worker.d.ts +1 -0
- package/plugin/dist/analysis/worker.js +233 -0
- package/plugin/dist/analysis/worker.js.map +1 -0
- package/plugin/dist/config-t8LZeB-u.mjs +90 -0
- package/plugin/dist/config-t8LZeB-u.mjs.map +1 -0
- package/plugin/dist/hooks/handler.d.ts +284 -0
- package/plugin/dist/hooks/handler.d.ts.map +1 -0
- package/plugin/dist/hooks/handler.js +2125 -0
- package/plugin/dist/hooks/handler.js.map +1 -0
- package/plugin/dist/index.d.ts +445 -0
- package/plugin/dist/index.d.ts.map +1 -0
- package/plugin/dist/index.js +5831 -0
- package/plugin/dist/index.js.map +1 -0
- package/plugin/dist/observations-Ch0nc47i.d.mts +170 -0
- package/plugin/dist/observations-Ch0nc47i.d.mts.map +1 -0
- package/plugin/dist/tool-registry-CZ3mJ4iR.mjs +2655 -0
- package/plugin/dist/tool-registry-CZ3mJ4iR.mjs.map +1 -0
- package/plugin/hooks/hooks.json +78 -0
- package/plugin/scripts/README.md +47 -0
- package/plugin/scripts/bump-version.sh +44 -0
- package/plugin/scripts/ensure-deps.sh +12 -0
- package/plugin/scripts/install.sh +63 -0
- package/plugin/scripts/local-install.sh +103 -0
- package/plugin/scripts/setup-tmpdir.sh +65 -0
- package/plugin/scripts/uninstall.sh +95 -0
- package/plugin/scripts/update.sh +88 -0
- package/plugin/scripts/verify-install.sh +43 -0
- package/plugin/ui/activity.js +185 -0
- package/plugin/ui/app.js +1642 -0
- package/plugin/ui/graph.js +2333 -0
- package/plugin/ui/help.js +228 -0
- package/plugin/ui/index.html +492 -0
- package/plugin/ui/settings.js +650 -0
- package/plugin/ui/styles.css +2910 -0
- package/plugin/ui/timeline.js +652 -0
|
@@ -0,0 +1,492 @@
|
|
|
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>Laminark - Memory Visualization</title>
|
|
7
|
+
<link rel="stylesheet" href="/styles.css">
|
|
8
|
+
<script src="https://unpkg.com/d3@7/dist/d3.min.js"></script>
|
|
9
|
+
</head>
|
|
10
|
+
<body>
|
|
11
|
+
<nav id="nav-bar">
|
|
12
|
+
<div class="nav-brand">Laminark</div>
|
|
13
|
+
<select id="project-selector" class="project-selector" title="Switch project"></select>
|
|
14
|
+
<div class="nav-tabs">
|
|
15
|
+
<button class="nav-tab active" data-view="graph-view">Knowledge Graph</button>
|
|
16
|
+
<button class="nav-tab" data-view="timeline-view">Timeline</button>
|
|
17
|
+
<button class="nav-tab" data-view="activity-view">Activity</button>
|
|
18
|
+
<button class="nav-tab" data-view="settings-view">Settings</button>
|
|
19
|
+
<button class="nav-tab" data-view="help-view">Help</button>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="nav-status">
|
|
22
|
+
<span id="sse-status" class="status-indicator disconnected" title="SSE connection status"></span>
|
|
23
|
+
</div>
|
|
24
|
+
</nav>
|
|
25
|
+
|
|
26
|
+
<main id="main-content">
|
|
27
|
+
<div id="filter-bar">
|
|
28
|
+
<span class="filter-label">Filter:</span>
|
|
29
|
+
<button class="filter-pill active" data-type="all">All <span class="count">0</span></button>
|
|
30
|
+
<button class="filter-pill active" data-type="Project"><svg class="type-icon" viewBox="0 0 12 12"><rect x="1" y="1" width="10" height="10" rx="2.5" fill="#58a6ff"/></svg>Project <span class="count">0</span></button>
|
|
31
|
+
<button class="filter-pill active" data-type="File"><svg class="type-icon" viewBox="0 0 12 12"><rect x="2" y="2" width="8" height="8" fill="#3fb950"/></svg>File <span class="count">0</span></button>
|
|
32
|
+
<button class="filter-pill active" data-type="Decision"><svg class="type-icon" viewBox="0 0 12 12"><polygon points="6,1 11,6 6,11 1,6" fill="#d29922"/></svg>Decision <span class="count">0</span></button>
|
|
33
|
+
<button class="filter-pill active" data-type="Problem"><svg class="type-icon" viewBox="0 0 12 12"><polygon points="6,1.5 11,10.5 1,10.5" fill="#f85149"/></svg>Problem <span class="count">0</span></button>
|
|
34
|
+
<button class="filter-pill active" data-type="Solution"><svg class="type-icon" viewBox="0 0 12 12"><polygon points="6,0.5 7.4,4.2 11.5,4.5 8.3,7.2 9.3,11.5 6,9.2 2.7,11.5 3.7,7.2 0.5,4.5 4.6,4.2" fill="#a371f7"/></svg>Solution <span class="count">0</span></button>
|
|
35
|
+
<button class="filter-pill active" data-type="Reference"><svg class="type-icon" viewBox="0 0 12 12"><polygon points="6,0.5 9.5,2.5 9.5,7.5 6,9.5 2.5,7.5 2.5,2.5" fill="#f0883e"/></svg>Reference <span class="count">0</span></button>
|
|
36
|
+
<div class="filter-search-wrapper">
|
|
37
|
+
<input type="text" id="graph-search" class="graph-search-input" placeholder="Search nodes..." autocomplete="off" spellcheck="false">
|
|
38
|
+
<div id="search-results" class="search-results-dropdown hidden"></div>
|
|
39
|
+
</div>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
<div id="time-range-bar">
|
|
43
|
+
<span class="filter-label">Time:</span>
|
|
44
|
+
<button class="time-preset active" data-preset="all">All time</button>
|
|
45
|
+
<button class="time-preset" data-preset="hour">Last hour</button>
|
|
46
|
+
<button class="time-preset" data-preset="today">Today</button>
|
|
47
|
+
<button class="time-preset" data-preset="week">This week</button>
|
|
48
|
+
<button class="time-preset" data-preset="month">This month</button>
|
|
49
|
+
<span class="time-separator">|</span>
|
|
50
|
+
<label class="time-input-label">From <input type="datetime-local" id="time-from" class="time-input"></label>
|
|
51
|
+
<label class="time-input-label">To <input type="datetime-local" id="time-to" class="time-input"></label>
|
|
52
|
+
<button class="time-apply-btn" id="time-apply">Apply</button>
|
|
53
|
+
</div>
|
|
54
|
+
|
|
55
|
+
<div id="graph-view" class="view-container active">
|
|
56
|
+
<div id="graph-breadcrumbs" class="graph-breadcrumbs hidden">
|
|
57
|
+
<button class="breadcrumb-item" data-action="full">Full Graph</button>
|
|
58
|
+
</div>
|
|
59
|
+
<div class="graph-content-row">
|
|
60
|
+
<div class="graph-area">
|
|
61
|
+
<div id="cy"></div>
|
|
62
|
+
<div id="graph-stats" class="graph-stats">0 nodes, 0 edges</div>
|
|
63
|
+
<div class="graph-toolbar">
|
|
64
|
+
<div class="layout-selector">
|
|
65
|
+
<button class="layout-btn active" data-layout="clustered" title="Force-directed layout">Clustered</button>
|
|
66
|
+
<button class="layout-btn" data-layout="hierarchical" title="Top-down tree layout">Hierarchical</button>
|
|
67
|
+
<button class="layout-btn" data-layout="concentric" title="Rings by entity type">Concentric</button>
|
|
68
|
+
<button class="layout-btn" data-layout="communities" title="Community-grouped layout">Communities</button>
|
|
69
|
+
</div>
|
|
70
|
+
<button id="edge-labels-btn" class="edge-labels-btn active" title="Toggle edge labels">
|
|
71
|
+
<svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor">
|
|
72
|
+
<path d="M1.5 8a.5.5 0 01.5-.5h12a.5.5 0 010 1H2a.5.5 0 01-.5-.5z"/>
|
|
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"/>
|
|
74
|
+
</svg>
|
|
75
|
+
</button>
|
|
76
|
+
<button id="paths-toggle-btn" class="paths-toggle-btn active" title="Toggle debug path overlay">
|
|
77
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
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"/>
|
|
82
|
+
</svg>
|
|
83
|
+
</button>
|
|
84
|
+
<button id="analysis-btn" class="analysis-btn" title="Graph analysis">
|
|
85
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
86
|
+
<path d="M1 14h14v1H0V0h1v14zM3 12V8h2v4H3zm3 0V5h2v7H6zm3 0V2h2v10H9zm3 0V6h2v6h-2z"/>
|
|
87
|
+
</svg>
|
|
88
|
+
</button>
|
|
89
|
+
<button id="fit-btn" class="fit-btn" title="Fit to view" onclick="window.laminarkGraph && window.laminarkGraph.fitToView()">
|
|
90
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
|
|
91
|
+
<path d="M2 2h4v1.5H3.5V6H2V2zm8 0h4v4h-1.5V3.5H10V2zM2 10h1.5v2.5H6V14H2v-4zm10.5 2.5V10H14v4h-4v-1.5h2.5z"/>
|
|
92
|
+
</svg>
|
|
93
|
+
</button>
|
|
94
|
+
</div>
|
|
95
|
+
<div class="graph-legend" id="graph-legend">
|
|
96
|
+
<div class="graph-legend-title">Entity Types</div>
|
|
97
|
+
<div class="graph-legend-item"><span class="legend-color" style="background:#58a6ff; border-radius:3px;"></span> Project</div>
|
|
98
|
+
<div class="graph-legend-item"><span class="legend-color" style="background:#3fb950; border-radius:2px;"></span> File</div>
|
|
99
|
+
<div class="graph-legend-item"><span class="legend-color" style="background:#d29922; border-radius:0; transform:rotate(45deg); width:9px; height:9px;"></span> Decision</div>
|
|
100
|
+
<div class="graph-legend-item"><span class="legend-color legend-triangle" style="background:transparent; border-left:6px solid transparent; border-right:6px solid transparent; border-bottom:11px solid #f85149; border-radius:0; width:0; height:0;"></span> Problem</div>
|
|
101
|
+
<div class="graph-legend-item"><span class="legend-color" style="background:#a371f7; clip-path:polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);"></span> Solution</div>
|
|
102
|
+
<div class="graph-legend-item"><span class="legend-color" style="background:#f0883e; clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);"></span> Reference</div>
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
<aside id="analysis-panel" class="analysis-panel hidden">
|
|
106
|
+
<div class="panel-header">
|
|
107
|
+
<h3>Graph Analysis</h3>
|
|
108
|
+
<button id="analysis-close" aria-label="Close analysis panel">×</button>
|
|
109
|
+
</div>
|
|
110
|
+
<div id="analysis-body" class="analysis-body">
|
|
111
|
+
<p class="empty-state">Loading analysis...</p>
|
|
112
|
+
</div>
|
|
113
|
+
</aside>
|
|
114
|
+
</div>
|
|
115
|
+
</div>
|
|
116
|
+
|
|
117
|
+
<div id="timeline-view" class="view-container">
|
|
118
|
+
<div id="timeline-content">
|
|
119
|
+
<p class="empty-state">Loading timeline data...</p>
|
|
120
|
+
</div>
|
|
121
|
+
<button class="jump-today-btn" title="Jump to latest">Today</button>
|
|
122
|
+
</div>
|
|
123
|
+
|
|
124
|
+
<div id="activity-view" class="view-container">
|
|
125
|
+
<div class="activity-feed-header">
|
|
126
|
+
<h3>Live Activity</h3>
|
|
127
|
+
<button id="activity-clear-btn" class="activity-clear-btn">Clear</button>
|
|
128
|
+
</div>
|
|
129
|
+
<div id="activity-feed" class="activity-feed">
|
|
130
|
+
<p class="empty-state">Waiting for live events...</p>
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
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>
|
|
139
|
+
</div>
|
|
140
|
+
|
|
141
|
+
<div id="settings-success" class="settings-success hidden"></div>
|
|
142
|
+
|
|
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">▼</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>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
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>
|
|
171
|
+
|
|
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>
|
|
179
|
+
|
|
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>
|
|
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>
|
|
193
|
+
|
|
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>
|
|
200
|
+
</div>
|
|
201
|
+
</div>
|
|
202
|
+
|
|
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">
|
|
210
|
+
</div>
|
|
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">
|
|
214
|
+
</div>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
</div>
|
|
218
|
+
|
|
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>
|
|
225
|
+
|
|
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">▼</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>
|
|
243
|
+
|
|
244
|
+
<div id="ge-fields">
|
|
245
|
+
<div class="config-field-group-label">Temporal Decay</div>
|
|
246
|
+
|
|
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">
|
|
252
|
+
</div>
|
|
253
|
+
</div>
|
|
254
|
+
|
|
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>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
|
|
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>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
|
|
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">
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
280
|
+
|
|
281
|
+
<div class="config-field-group-label">Fuzzy Deduplication</div>
|
|
282
|
+
|
|
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">
|
|
288
|
+
</div>
|
|
289
|
+
</div>
|
|
290
|
+
|
|
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>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
|
|
300
|
+
<div class="config-field-group-label">Quality Gate</div>
|
|
301
|
+
|
|
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>
|
|
309
|
+
|
|
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>
|
|
318
|
+
</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>
|
|
323
|
+
</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>
|
|
328
|
+
</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>
|
|
333
|
+
</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>
|
|
338
|
+
</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>
|
|
343
|
+
</div>
|
|
344
|
+
</div>
|
|
345
|
+
</div>
|
|
346
|
+
|
|
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>
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
|
|
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">
|
|
361
|
+
</div>
|
|
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">
|
|
365
|
+
</div>
|
|
366
|
+
</div>
|
|
367
|
+
</div>
|
|
368
|
+
|
|
369
|
+
<div class="config-field-group-label">Relationship Detector</div>
|
|
370
|
+
|
|
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>
|
|
377
|
+
</div>
|
|
378
|
+
</div>
|
|
379
|
+
|
|
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">
|
|
387
|
+
</div>
|
|
388
|
+
</div>
|
|
389
|
+
</div>
|
|
390
|
+
|
|
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>
|
|
394
|
+
</div>
|
|
395
|
+
</div>
|
|
396
|
+
</div>
|
|
397
|
+
|
|
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 & 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>
|
|
430
|
+
</div>
|
|
431
|
+
<button class="btn-danger-primary reset-action-btn" data-reset-type="all">Reset Everything</button>
|
|
432
|
+
</div>
|
|
433
|
+
</div>
|
|
434
|
+
</div>
|
|
435
|
+
</div>
|
|
436
|
+
|
|
437
|
+
<div id="help-view" class="view-container">
|
|
438
|
+
<div class="help-container" id="help-content">
|
|
439
|
+
<p class="empty-state">Loading help...</p>
|
|
440
|
+
</div>
|
|
441
|
+
</div>
|
|
442
|
+
</main>
|
|
443
|
+
|
|
444
|
+
<div id="confirm-overlay" class="confirm-overlay hidden">
|
|
445
|
+
<div class="confirm-dialog">
|
|
446
|
+
<h3 id="confirm-title">Confirm Reset</h3>
|
|
447
|
+
<p id="confirm-desc"></p>
|
|
448
|
+
<p id="confirm-count" class="confirm-count"></p>
|
|
449
|
+
<input type="text" id="confirm-input" class="confirm-input" autocomplete="off" spellcheck="false">
|
|
450
|
+
<div class="confirm-actions">
|
|
451
|
+
<button id="confirm-cancel" class="btn-secondary">Cancel</button>
|
|
452
|
+
<button id="confirm-btn" class="btn-danger-primary" disabled>Reset</button>
|
|
453
|
+
</div>
|
|
454
|
+
</div>
|
|
455
|
+
</div>
|
|
456
|
+
|
|
457
|
+
|
|
458
|
+
<aside id="detail-panel" class="hidden">
|
|
459
|
+
<div class="panel-header">
|
|
460
|
+
<h3 id="detail-title">Node Details</h3>
|
|
461
|
+
<div class="panel-header-actions">
|
|
462
|
+
<button id="detail-focus" class="panel-action-btn" aria-label="Focus on this node" title="Focus on this node">
|
|
463
|
+
<svg width="14" height="14" viewBox="0 0 16 16" fill="currentColor">
|
|
464
|
+
<path d="M8 3a5 5 0 100 10A5 5 0 008 3zm0 1.5a3.5 3.5 0 110 7 3.5 3.5 0 010-7zM8 6a2 2 0 100 4 2 2 0 000-4z"/>
|
|
465
|
+
</svg>
|
|
466
|
+
</button>
|
|
467
|
+
<button id="detail-close" aria-label="Close detail panel">×</button>
|
|
468
|
+
</div>
|
|
469
|
+
</div>
|
|
470
|
+
<div id="detail-body">
|
|
471
|
+
<p class="empty-state">Click a node to view details</p>
|
|
472
|
+
</div>
|
|
473
|
+
</aside>
|
|
474
|
+
|
|
475
|
+
<aside id="path-detail-panel" class="path-detail-panel hidden">
|
|
476
|
+
<div class="panel-header">
|
|
477
|
+
<h3 id="path-detail-title">Debug Path</h3>
|
|
478
|
+
<button id="path-detail-close" aria-label="Close path detail panel">×</button>
|
|
479
|
+
</div>
|
|
480
|
+
<div id="path-detail-body" class="path-detail-body">
|
|
481
|
+
<p class="empty-state">Select a debug path to view details</p>
|
|
482
|
+
</div>
|
|
483
|
+
</aside>
|
|
484
|
+
|
|
485
|
+
<script src="/app.js"></script>
|
|
486
|
+
<script src="/graph.js"></script>
|
|
487
|
+
<script src="/timeline.js"></script>
|
|
488
|
+
<script src="/activity.js"></script>
|
|
489
|
+
<script src="/settings.js"></script>
|
|
490
|
+
<script src="/help.js"></script>
|
|
491
|
+
</body>
|
|
492
|
+
</html>
|