superlocalmemory 3.4.17 → 3.4.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/package.json +1 -3
- package/pyproject.toml +10 -1
- package/src/superlocalmemory/cli/setup_wizard.py +30 -0
- package/src/superlocalmemory.egg-info/PKG-INFO +4 -1
- package/src/superlocalmemory.egg-info/requires.txt +3 -0
- package/docs/ARCHITECTURE.md +0 -149
- package/docs/api-reference.md +0 -284
- package/docs/auto-memory.md +0 -150
- package/docs/cli-reference.md +0 -327
- package/docs/cloud-backup.md +0 -174
- package/docs/compliance.md +0 -191
- package/docs/configuration.md +0 -182
- package/docs/getting-started.md +0 -102
- package/docs/ide-setup.md +0 -261
- package/docs/mcp-tools.md +0 -220
- package/docs/migration-from-v2.md +0 -170
- package/docs/profiles.md +0 -173
- package/docs/screenshots/01-dashboard-main.png +0 -0
- package/docs/screenshots/02-knowledge-graph.png +0 -0
- package/docs/screenshots/03-math-health.png +0 -0
- package/docs/screenshots/03-patterns-learning.png +0 -0
- package/docs/screenshots/04-learning-dashboard.png +0 -0
- package/docs/screenshots/04-recall-lab.png +0 -0
- package/docs/screenshots/05-behavioral-analysis.png +0 -0
- package/docs/screenshots/05-trust-dashboard.png +0 -0
- package/docs/screenshots/06-graph-communities.png +0 -0
- package/docs/screenshots/06-settings.png +0 -0
- package/docs/screenshots/07-memories-blurred.png +0 -0
- package/docs/skill-evolution.md +0 -256
- package/docs/troubleshooting.md +0 -310
- package/docs/v2-archive/ACCESSIBILITY.md +0 -291
- package/docs/v2-archive/ARCHITECTURE.md +0 -886
- package/docs/v2-archive/CLI-COMMANDS-REFERENCE.md +0 -425
- package/docs/v2-archive/COMPRESSION-README.md +0 -390
- package/docs/v2-archive/FRAMEWORK-INTEGRATIONS.md +0 -300
- package/docs/v2-archive/MCP-MANUAL-SETUP.md +0 -775
- package/docs/v2-archive/MCP-TROUBLESHOOTING.md +0 -787
- package/docs/v2-archive/PATTERN-LEARNING.md +0 -228
- package/docs/v2-archive/PROFILES-GUIDE.md +0 -453
- package/docs/v2-archive/RESET-GUIDE.md +0 -353
- package/docs/v2-archive/SEARCH-ENGINE-V2.2.0.md +0 -749
- package/docs/v2-archive/SEARCH-INTEGRATION-GUIDE.md +0 -502
- package/docs/v2-archive/UI-SERVER.md +0 -262
- package/docs/v2-archive/UNIVERSAL-INTEGRATION.md +0 -488
- package/docs/v2-archive/V2.2.0-OPTIONAL-SEARCH.md +0 -666
- package/docs/v2-archive/WINDOWS-INSTALL-README.txt +0 -34
- package/docs/v2-archive/WINDOWS-POST-INSTALL.txt +0 -45
- package/docs/v2-archive/example_graph_usage.py +0 -146
- package/ui/index.html +0 -1879
- package/ui/js/agents.js +0 -192
- package/ui/js/auto-settings.js +0 -399
- package/ui/js/behavioral.js +0 -276
- package/ui/js/clusters.js +0 -206
- package/ui/js/compliance.js +0 -252
- package/ui/js/core.js +0 -246
- package/ui/js/dashboard.js +0 -110
- package/ui/js/events.js +0 -178
- package/ui/js/fact-detail.js +0 -92
- package/ui/js/feedback.js +0 -333
- package/ui/js/graph-core.js +0 -447
- package/ui/js/graph-filters.js +0 -220
- package/ui/js/graph-interactions.js +0 -351
- package/ui/js/graph-ui.js +0 -214
- package/ui/js/ide-status.js +0 -102
- package/ui/js/init.js +0 -45
- package/ui/js/learning.js +0 -435
- package/ui/js/lifecycle.js +0 -298
- package/ui/js/math-health.js +0 -98
- package/ui/js/memories.js +0 -264
- package/ui/js/modal.js +0 -357
- package/ui/js/patterns.js +0 -93
- package/ui/js/profiles.js +0 -236
- package/ui/js/recall-lab.js +0 -292
- package/ui/js/search.js +0 -59
- package/ui/js/settings.js +0 -224
- package/ui/js/timeline.js +0 -32
- package/ui/js/trust-dashboard.js +0 -73
package/docs/troubleshooting.md
DELETED
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
# Troubleshooting
|
|
2
|
-
> SuperLocalMemory V3 Documentation
|
|
3
|
-
> https://superlocalmemory.com | Part of Qualixar
|
|
4
|
-
|
|
5
|
-
Solutions for common issues. If your problem is not listed here, run `slm status --verbose` and check the output for clues.
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Installation Issues
|
|
10
|
-
|
|
11
|
-
### "slm: command not found"
|
|
12
|
-
|
|
13
|
-
The npm global bin directory is not in your shell's PATH.
|
|
14
|
-
|
|
15
|
-
**Fix:**
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# Find where npm puts global binaries
|
|
19
|
-
npm root -g
|
|
20
|
-
# Example output: /usr/local/lib/node_modules
|
|
21
|
-
|
|
22
|
-
# The bin directory is one level up
|
|
23
|
-
# Add to your shell profile (~/.zshrc, ~/.bashrc, or ~/.bash_profile):
|
|
24
|
-
export PATH="$(npm prefix -g)/bin:$PATH"
|
|
25
|
-
|
|
26
|
-
# Reload your shell
|
|
27
|
-
source ~/.zshrc # or source ~/.bashrc
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
**Alternative — use npx:**
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
npx superlocalmemory status
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### "Python not found" during setup
|
|
37
|
-
|
|
38
|
-
SLM V3 requires Python 3.10 or later for the math engine.
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
# Check Python version
|
|
42
|
-
python3 --version
|
|
43
|
-
|
|
44
|
-
# Install if missing
|
|
45
|
-
# macOS:
|
|
46
|
-
brew install python@3.12
|
|
47
|
-
|
|
48
|
-
# Ubuntu/Debian:
|
|
49
|
-
sudo apt install python3.12
|
|
50
|
-
|
|
51
|
-
# Windows:
|
|
52
|
-
winget install Python.Python.3.12
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### "Permission denied" during install
|
|
56
|
-
|
|
57
|
-
```bash
|
|
58
|
-
# Option 1: Fix npm permissions (recommended)
|
|
59
|
-
mkdir -p ~/.npm-global
|
|
60
|
-
npm config set prefix '~/.npm-global'
|
|
61
|
-
export PATH=~/.npm-global/bin:$PATH
|
|
62
|
-
npm install -g superlocalmemory
|
|
63
|
-
|
|
64
|
-
# Option 2: Use sudo (not recommended)
|
|
65
|
-
sudo npm install -g superlocalmemory
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## Recall Issues
|
|
69
|
-
|
|
70
|
-
### "No memories found" when you know they exist
|
|
71
|
-
|
|
72
|
-
**Check your active profile:**
|
|
73
|
-
|
|
74
|
-
```bash
|
|
75
|
-
slm profile list
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
Memories are profile-scoped. If you stored a memory in the `work` profile but are currently in `default`, it will not appear.
|
|
79
|
-
|
|
80
|
-
```bash
|
|
81
|
-
slm profile switch work
|
|
82
|
-
slm recall "your query"
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**Check your mode:**
|
|
86
|
-
|
|
87
|
-
```bash
|
|
88
|
-
slm mode
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
Mode A uses math-based retrieval. If you recently switched from Mode C, the retrieval behavior changes. Both modes search the same memories, but ranking differs.
|
|
92
|
-
|
|
93
|
-
**Try a broader query:**
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
slm recall "database" # Instead of "PostgreSQL 16 configuration on staging"
|
|
97
|
-
slm list --limit 20 # Browse recent memories directly
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### Recall returns irrelevant results
|
|
101
|
-
|
|
102
|
-
**Lower your result count:**
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
slm recall "your query" --limit 3
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Fewer results means only the highest-confidence matches are returned.
|
|
109
|
-
|
|
110
|
-
**Use trace to debug:**
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
slm trace "your query"
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
This shows which channels contributed what. If BM25 is dominating with weak keyword matches, the query may need different terms.
|
|
117
|
-
|
|
118
|
-
**Rebuild the graph:**
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
slm build_graph
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
If entity relationships seem wrong, rebuilding the graph can fix ranking issues.
|
|
125
|
-
|
|
126
|
-
## Mode C Issues
|
|
127
|
-
|
|
128
|
-
### "API key not set" or authentication errors
|
|
129
|
-
|
|
130
|
-
```bash
|
|
131
|
-
# Check your provider configuration
|
|
132
|
-
slm provider
|
|
133
|
-
|
|
134
|
-
# Reset your provider and key
|
|
135
|
-
slm provider set openai
|
|
136
|
-
# Enter your API key when prompted
|
|
137
|
-
|
|
138
|
-
# Or set via environment variable
|
|
139
|
-
export OPENAI_API_KEY="sk-..."
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### "Connection timeout" or network errors
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
# Test connectivity to your provider
|
|
146
|
-
slm status --verbose
|
|
147
|
-
|
|
148
|
-
# Check if you're behind a proxy
|
|
149
|
-
echo $HTTP_PROXY
|
|
150
|
-
echo $HTTPS_PROXY
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
If behind a corporate proxy, set the proxy variables:
|
|
154
|
-
|
|
155
|
-
```bash
|
|
156
|
-
export HTTPS_PROXY="http://proxy.company.com:8080"
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### Mode C is slow
|
|
160
|
-
|
|
161
|
-
Cloud LLM calls add latency. If speed matters more than maximum recall quality:
|
|
162
|
-
|
|
163
|
-
```bash
|
|
164
|
-
slm mode b # Local LLM (fast, no network)
|
|
165
|
-
slm mode a # Math-only (fastest)
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
## Migration Issues
|
|
169
|
-
|
|
170
|
-
### Migration failed or was interrupted
|
|
171
|
-
|
|
172
|
-
```bash
|
|
173
|
-
# Check if backup exists
|
|
174
|
-
ls ~/.superlocalmemory/backups/
|
|
175
|
-
|
|
176
|
-
# Roll back to V2
|
|
177
|
-
slm migrate --rollback
|
|
178
|
-
|
|
179
|
-
# Try migration again
|
|
180
|
-
slm migrate
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
### "Database is locked"
|
|
184
|
-
|
|
185
|
-
Close all IDE sessions that might be accessing SLM, then retry:
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
# Check for processes using the database
|
|
189
|
-
lsof ~/.superlocalmemory/memory.db
|
|
190
|
-
|
|
191
|
-
# Close IDEs, then retry
|
|
192
|
-
slm migrate
|
|
193
|
-
```
|
|
194
|
-
|
|
195
|
-
### Migration succeeded but recall quality seems worse
|
|
196
|
-
|
|
197
|
-
After migration, the entity graph and BM25 index are rebuilt from existing data. This process is automatic but can take a moment for large databases.
|
|
198
|
-
|
|
199
|
-
```bash
|
|
200
|
-
# Force a full re-index
|
|
201
|
-
slm build_graph
|
|
202
|
-
slm compact
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
## IDE Connection Issues
|
|
206
|
-
|
|
207
|
-
### IDE does not show SLM tools
|
|
208
|
-
|
|
209
|
-
1. **Verify SLM is installed:**
|
|
210
|
-
|
|
211
|
-
```bash
|
|
212
|
-
npm list -g superlocalmemory
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
2. **Check the IDE config file has correct JSON:**
|
|
216
|
-
|
|
217
|
-
```bash
|
|
218
|
-
slm connect <your-ide> # Regenerates the config
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
3. **Restart the IDE completely** (not just reload the window).
|
|
222
|
-
|
|
223
|
-
4. **Test the MCP server directly:**
|
|
224
|
-
|
|
225
|
-
```bash
|
|
226
|
-
npx superlocalmemory mcp --test
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
### "Connection refused" in IDE
|
|
230
|
-
|
|
231
|
-
The MCP server failed to start. Common causes:
|
|
232
|
-
|
|
233
|
-
- Node.js version too old (need 18+)
|
|
234
|
-
- Port conflict with another service
|
|
235
|
-
- Corrupted installation
|
|
236
|
-
|
|
237
|
-
```bash
|
|
238
|
-
# Reinstall
|
|
239
|
-
npm uninstall -g superlocalmemory
|
|
240
|
-
npm install -g superlocalmemory
|
|
241
|
-
|
|
242
|
-
# Verify
|
|
243
|
-
slm status
|
|
244
|
-
```
|
|
245
|
-
|
|
246
|
-
### Multiple IDEs conflicting
|
|
247
|
-
|
|
248
|
-
Each IDE has its own MCP config file. They do not conflict. All IDEs share the same underlying database. Concurrent access is safe (SQLite WAL mode handles this).
|
|
249
|
-
|
|
250
|
-
## Database Issues
|
|
251
|
-
|
|
252
|
-
### Database corruption
|
|
253
|
-
|
|
254
|
-
Extremely rare with SQLite WAL mode, but if it happens:
|
|
255
|
-
|
|
256
|
-
```bash
|
|
257
|
-
# Check integrity
|
|
258
|
-
slm status --verbose
|
|
259
|
-
|
|
260
|
-
# Restore from automatic backup
|
|
261
|
-
ls ~/.superlocalmemory/backups/
|
|
262
|
-
cp ~/.superlocalmemory/backups/memory-2026-03-15.db ~/.superlocalmemory/memory.db
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
### Database is too large
|
|
266
|
-
|
|
267
|
-
```bash
|
|
268
|
-
# Check size
|
|
269
|
-
slm memory_used
|
|
270
|
-
|
|
271
|
-
# Compact (merges redundant memories, reclaims space)
|
|
272
|
-
slm compact
|
|
273
|
-
|
|
274
|
-
# Apply a retention policy to auto-delete old memories
|
|
275
|
-
slm retention set custom --days 180
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
## Health Check
|
|
279
|
-
|
|
280
|
-
Run a full diagnostic:
|
|
281
|
-
|
|
282
|
-
```bash
|
|
283
|
-
slm health
|
|
284
|
-
```
|
|
285
|
-
|
|
286
|
-
This reports the status of:
|
|
287
|
-
|
|
288
|
-
| Component | What it checks |
|
|
289
|
-
|-----------|---------------|
|
|
290
|
-
| Database | Integrity, size, table counts |
|
|
291
|
-
| Embedding model | Loaded, version, dimension |
|
|
292
|
-
| Fisher-Rao | Similarity layer active |
|
|
293
|
-
| Sheaf | Consistency layer active |
|
|
294
|
-
| Langevin | Lifecycle layer active |
|
|
295
|
-
| BM25 index | Token count, index health |
|
|
296
|
-
| Entity graph | Node count, edge count |
|
|
297
|
-
|
|
298
|
-
If any component shows an error, the output includes a suggested fix.
|
|
299
|
-
|
|
300
|
-
## Getting Help
|
|
301
|
-
|
|
302
|
-
If none of the above resolves your issue:
|
|
303
|
-
|
|
304
|
-
1. Run `slm status --verbose` and note the output
|
|
305
|
-
2. Check the [GitHub Issues](https://github.com/qualixar/superlocalmemory/issues)
|
|
306
|
-
3. Open a new issue with your `slm status --verbose` output
|
|
307
|
-
|
|
308
|
-
---
|
|
309
|
-
|
|
310
|
-
*SuperLocalMemory V3 — Copyright 2026 Varun Pratap Bhardwaj. Elastic License 2.0. Part of Qualixar.*
|
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
# Accessibility Features - SuperLocalMemory V2.6.5
|
|
2
|
-
|
|
3
|
-
**Last Updated:** February 16, 2026
|
|
4
|
-
**Author:** Varun Pratap Bhardwaj
|
|
5
|
-
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
## Overview
|
|
9
|
-
|
|
10
|
-
SuperLocalMemory V2.6.5 includes comprehensive keyboard navigation and screen reader support for the interactive knowledge graph, making it fully accessible to users with disabilities.
|
|
11
|
-
|
|
12
|
-
## Keyboard Navigation
|
|
13
|
-
|
|
14
|
-
### Graph Container Focus
|
|
15
|
-
|
|
16
|
-
The graph container (`#graph-container`) is focusable via keyboard:
|
|
17
|
-
|
|
18
|
-
- **Focus method:** Click graph OR press `Tab` from controls above
|
|
19
|
-
- **Visual indicator:** Browser native focus outline + first node highlighted with blue border
|
|
20
|
-
- **ARIA role:** `role="application"` signals custom keyboard handling
|
|
21
|
-
|
|
22
|
-
### Node Navigation
|
|
23
|
-
|
|
24
|
-
| Key | Action |
|
|
25
|
-
|-----|--------|
|
|
26
|
-
| **Tab** | Move to next node (cycles through all nodes) |
|
|
27
|
-
| **Shift+Tab** | Move to previous node |
|
|
28
|
-
| **→** (Right Arrow) | Move to nearest node on the right |
|
|
29
|
-
| **←** (Left Arrow) | Move to nearest node on the left |
|
|
30
|
-
| **↓** (Down Arrow) | Move to nearest node below |
|
|
31
|
-
| **↑** (Up Arrow) | Move to nearest node above |
|
|
32
|
-
| **Home** | Jump to first node |
|
|
33
|
-
| **End** | Jump to last node |
|
|
34
|
-
|
|
35
|
-
**Arrow Key Algorithm:**
|
|
36
|
-
- Finds nodes in specified direction (based on X/Y coordinates)
|
|
37
|
-
- Prioritizes nodes closer to current position
|
|
38
|
-
- Combines Euclidean distance with directional score
|
|
39
|
-
- Ensures no "stuck" states (always finds a valid next node)
|
|
40
|
-
|
|
41
|
-
### Actions
|
|
42
|
-
|
|
43
|
-
| Key | Action |
|
|
44
|
-
|-----|--------|
|
|
45
|
-
| **Enter** or **Space** | Open modal for focused node |
|
|
46
|
-
| **Escape** | Clear active filter OR blur graph (if no filter) |
|
|
47
|
-
|
|
48
|
-
### Visual Focus Indicator
|
|
49
|
-
|
|
50
|
-
Focused nodes have the CSS class `.keyboard-focused` with:
|
|
51
|
-
|
|
52
|
-
```css
|
|
53
|
-
border-width: 5px;
|
|
54
|
-
border-color: #0066ff;
|
|
55
|
-
border-style: solid;
|
|
56
|
-
box-shadow: 0 0 15px #0066ff;
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
The graph smoothly animates to center the focused node in the viewport.
|
|
60
|
-
|
|
61
|
-
---
|
|
62
|
-
|
|
63
|
-
## Screen Reader Support
|
|
64
|
-
|
|
65
|
-
### ARIA Attributes
|
|
66
|
-
|
|
67
|
-
#### Graph Container
|
|
68
|
-
|
|
69
|
-
```html
|
|
70
|
-
<div id="graph-container"
|
|
71
|
-
role="application"
|
|
72
|
-
aria-label="Interactive knowledge graph - use Tab to navigate nodes, Enter to view details, Arrow keys to move between adjacent nodes, Escape to clear filters"
|
|
73
|
-
aria-describedby="graph-stats">
|
|
74
|
-
</div>
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
- **`role="application"`** - Signals custom keyboard handling
|
|
78
|
-
- **`aria-label`** - Provides usage instructions
|
|
79
|
-
- **`aria-describedby`** - Links to graph statistics (node/edge count)
|
|
80
|
-
|
|
81
|
-
#### Status Regions
|
|
82
|
-
|
|
83
|
-
```html
|
|
84
|
-
<div id="graph-status-full" role="status" aria-live="polite">
|
|
85
|
-
Showing all memories
|
|
86
|
-
</div>
|
|
87
|
-
|
|
88
|
-
<div id="graph-status-filtered" role="status" aria-live="polite">
|
|
89
|
-
Viewing Cluster X (Y memories)
|
|
90
|
-
</div>
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
- **`role="status"`** - Semantic status information
|
|
94
|
-
- **`aria-live="polite"`** - Announces changes when user is idle
|
|
95
|
-
|
|
96
|
-
#### Hidden Status Region
|
|
97
|
-
|
|
98
|
-
An off-screen status region announces keyboard navigation events:
|
|
99
|
-
|
|
100
|
-
```html
|
|
101
|
-
<div id="graph-sr-status"
|
|
102
|
-
role="status"
|
|
103
|
-
aria-live="polite"
|
|
104
|
-
aria-atomic="true"
|
|
105
|
-
style="position:absolute; left:-10000px; width:1px; height:1px; overflow:hidden;">
|
|
106
|
-
</div>
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
This element is invisible but screen readers announce its content changes.
|
|
110
|
-
|
|
111
|
-
#### Buttons
|
|
112
|
-
|
|
113
|
-
All interactive buttons have `aria-label` attributes:
|
|
114
|
-
|
|
115
|
-
```html
|
|
116
|
-
<button aria-label="Refresh graph data">...</button>
|
|
117
|
-
<button aria-label="Clear filter and show all memories">...</button>
|
|
118
|
-
<button aria-label="Toggle dark mode">...</button>
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
#### Dropdowns
|
|
122
|
-
|
|
123
|
-
Form controls have proper labels:
|
|
124
|
-
|
|
125
|
-
```html
|
|
126
|
-
<label for="graph-layout-selector">Layout Algorithm:</label>
|
|
127
|
-
<select id="graph-layout-selector" aria-label="Select graph layout algorithm">
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
### Screen Reader Announcements
|
|
131
|
-
|
|
132
|
-
The `updateScreenReaderStatus()` function announces:
|
|
133
|
-
|
|
134
|
-
1. **Graph load:** "Graph loaded with X memories and Y connections"
|
|
135
|
-
2. **Node navigation:** "Memory 123: SuperLocalMemory Project, Cluster 2, Importance 8 out of 10"
|
|
136
|
-
3. **Filter cleared:** "Filters cleared, showing all memories"
|
|
137
|
-
|
|
138
|
-
These announcements are sent to the hidden `#graph-sr-status` region.
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## Modal Focus Management
|
|
143
|
-
|
|
144
|
-
### Opening Modal
|
|
145
|
-
|
|
146
|
-
When `openMemoryModal()` is called:
|
|
147
|
-
|
|
148
|
-
1. **Store last focused element:** `window.lastFocusedElement = document.activeElement`
|
|
149
|
-
2. **Bootstrap modal shown event:** Focus moves to first button in modal
|
|
150
|
-
3. **Tab order:** Close button → Modal content → Action buttons → Footer buttons
|
|
151
|
-
|
|
152
|
-
### Closing Modal
|
|
153
|
-
|
|
154
|
-
When modal closes (via Bootstrap `hidden.bs.modal` event):
|
|
155
|
-
|
|
156
|
-
1. **Restore focus:** `window.lastFocusedElement.focus()`
|
|
157
|
-
2. **Clear stored element:** `window.lastFocusedElement = null`
|
|
158
|
-
3. **User can continue:** Keyboard navigation resumes from same node
|
|
159
|
-
|
|
160
|
-
This ensures users don't lose their place in the graph when opening/closing modals.
|
|
161
|
-
|
|
162
|
-
---
|
|
163
|
-
|
|
164
|
-
## Skip Links
|
|
165
|
-
|
|
166
|
-
A skip link is provided for keyboard users:
|
|
167
|
-
|
|
168
|
-
```html
|
|
169
|
-
<a href="#memories-pane" class="visually-hidden-focusable">Skip to Memories list</a>
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
This link is invisible until focused (via Tab), allowing users to bypass the graph and jump directly to the Memories tab.
|
|
173
|
-
|
|
174
|
-
---
|
|
175
|
-
|
|
176
|
-
## Testing with Screen Readers
|
|
177
|
-
|
|
178
|
-
### macOS VoiceOver
|
|
179
|
-
|
|
180
|
-
1. **Enable:** Press `Cmd+F5`
|
|
181
|
-
2. **Navigate:** `Control+Option+Arrow keys`
|
|
182
|
-
3. **Read current element:** `Control+Option+A`
|
|
183
|
-
4. **Test focus:** Tab through graph → Verify announcements
|
|
184
|
-
|
|
185
|
-
### Windows NVDA
|
|
186
|
-
|
|
187
|
-
1. **Install:** Download from [nvaccess.org](https://www.nvaccess.org/)
|
|
188
|
-
2. **Start:** `Control+Alt+N`
|
|
189
|
-
3. **Navigate:** Arrow keys
|
|
190
|
-
4. **Browse mode:** Press `Insert+Space` to toggle
|
|
191
|
-
|
|
192
|
-
### Windows JAWS
|
|
193
|
-
|
|
194
|
-
1. **Commercial software:** Most widely used screen reader
|
|
195
|
-
2. **Navigate:** Arrow keys + Tab
|
|
196
|
-
3. **Read mode:** Virtual cursor navigation
|
|
197
|
-
|
|
198
|
-
### Linux Orca
|
|
199
|
-
|
|
200
|
-
1. **Enable:** `Alt+F2`, type "orca"
|
|
201
|
-
2. **Configure:** `orca --setup`
|
|
202
|
-
3. **Navigate:** Arrow keys
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
|
-
## Compliance
|
|
207
|
-
|
|
208
|
-
### WCAG 2.1 AA Compliance
|
|
209
|
-
|
|
210
|
-
| Criterion | Status | Implementation |
|
|
211
|
-
|-----------|--------|----------------|
|
|
212
|
-
| **1.3.1 Info and Relationships** | ✅ Pass | Semantic HTML, ARIA roles |
|
|
213
|
-
| **2.1.1 Keyboard** | ✅ Pass | Full keyboard navigation |
|
|
214
|
-
| **2.1.2 No Keyboard Trap** | ✅ Pass | Escape key blurs graph |
|
|
215
|
-
| **2.4.3 Focus Order** | ✅ Pass | Logical tab order |
|
|
216
|
-
| **2.4.7 Focus Visible** | ✅ Pass | Blue outline on focused nodes |
|
|
217
|
-
| **3.2.1 On Focus** | ✅ Pass | No unexpected context changes |
|
|
218
|
-
| **4.1.2 Name, Role, Value** | ✅ Pass | ARIA labels on all controls |
|
|
219
|
-
| **4.1.3 Status Messages** | ✅ Pass | aria-live regions |
|
|
220
|
-
|
|
221
|
-
### Section 508 Compliance
|
|
222
|
-
|
|
223
|
-
- ✅ **(a) Keyboard access** - All graph functions accessible via keyboard
|
|
224
|
-
- ✅ **(c) Color contrast** - Blue focus indicator meets 4.5:1 contrast ratio
|
|
225
|
-
- ✅ **(d) Screen reader compatible** - ARIA labels and live regions
|
|
226
|
-
|
|
227
|
-
---
|
|
228
|
-
|
|
229
|
-
## Developer Notes
|
|
230
|
-
|
|
231
|
-
### Code Location
|
|
232
|
-
|
|
233
|
-
- **Keyboard navigation:** `/ui/js/graph-cytoscape.js` (lines 950-1150)
|
|
234
|
-
- **Modal focus management:** `/ui/js/modal.js` (lines 10-18, 142-160)
|
|
235
|
-
- **ARIA attributes:** `/ui/index.html` (graph-pane section)
|
|
236
|
-
|
|
237
|
-
### Key Functions
|
|
238
|
-
|
|
239
|
-
| Function | Purpose |
|
|
240
|
-
|----------|---------|
|
|
241
|
-
| `setupKeyboardNavigation()` | Attaches keyboard event handlers to graph container |
|
|
242
|
-
| `focusNodeAtIndex(index)` | Highlights node and centers viewport |
|
|
243
|
-
| `moveToAdjacentNode(direction, currentNode)` | Finds nearest node in specified direction |
|
|
244
|
-
| `announceNode(node)` | Sends node info to screen reader |
|
|
245
|
-
| `updateScreenReaderStatus(message)` | Updates hidden status region |
|
|
246
|
-
|
|
247
|
-
### Global State Variables
|
|
248
|
-
|
|
249
|
-
```javascript
|
|
250
|
-
var focusedNodeIndex = 0; // Currently focused node index
|
|
251
|
-
var keyboardNavigationEnabled = false; // Is keyboard nav active?
|
|
252
|
-
var lastFocusedElement = null; // For modal focus return
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
### Cytoscape.js Style Class
|
|
256
|
-
|
|
257
|
-
```javascript
|
|
258
|
-
{
|
|
259
|
-
selector: 'node.keyboard-focused',
|
|
260
|
-
style: {
|
|
261
|
-
'border-width': 5,
|
|
262
|
-
'border-color': '#0066ff',
|
|
263
|
-
'border-style': 'solid',
|
|
264
|
-
'box-shadow': '0 0 15px #0066ff'
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
---
|
|
270
|
-
|
|
271
|
-
## Future Enhancements (v2.7+)
|
|
272
|
-
|
|
273
|
-
1. **Voice commands:** Integrate Web Speech API for voice navigation
|
|
274
|
-
2. **Braille support:** Test with refreshable Braille displays
|
|
275
|
-
3. **High contrast mode:** Additional theme for low vision users
|
|
276
|
-
4. **Keyboard shortcuts help:** Press `?` to show keyboard shortcuts overlay
|
|
277
|
-
5. **Focus trapping in modal:** Prevent Tab from leaving modal when open
|
|
278
|
-
|
|
279
|
-
---
|
|
280
|
-
|
|
281
|
-
## Feedback
|
|
282
|
-
|
|
283
|
-
If you encounter accessibility issues, please report them:
|
|
284
|
-
|
|
285
|
-
- **GitHub Issues:** https://github.com/qualixar/superlocalmemory/issues
|
|
286
|
-
- **Label:** Use `accessibility` tag
|
|
287
|
-
- **Include:** Browser, screen reader (if applicable), and steps to reproduce
|
|
288
|
-
|
|
289
|
-
---
|
|
290
|
-
|
|
291
|
-
**Copyright © 2026 Varun Pratap Bhardwaj - AGPL-3.0**
|