Commit 358caf6
feat(v1.3.0): Compare (file+folder diff), Recent Files, file watcher, Tier 1 AI, find UX, preview maximize, double-click open fix
═════════════════════════════════════════════════════════════════
🆕 New features
═════════════════════════════════════════════════════════════════
Compare — file & folder diff (see DIFF.md):
- File → Compare → Compare Files / Compare with Saved / Compare Folders
- Right-click tab → Select for Compare → "Compare with selected"
- New 'diff' tab type rendering Monaco DiffEditor (side-by-side or inline)
with Swap / Inline / Next / Prev / Reload toolbar
- New 'folder-diff' tab type — side-by-side tree powered by dir-compare,
colour-coded (green added · red removed · yellow modified)
- Click a modified-file row in folder-diff → opens that file's diff
- Skips node_modules / .git / dist / build / out / .next / .cache / .vscode /
.idea / __pycache__ automatically; content-hash comparison
Recent Files menu:
- File → Open Recent → submenu with last 15 opened files (persisted in
settings.json, deduped, stale entries auto-pruned)
- Mnemonic accelerators &1–&9 for the first nine entries
- "Clear Recent Files" at the bottom
External file-change watcher:
- fs.watch per open editor tab (debounced 250 ms)
- Clean tab → auto-reload with toast
- Dirty tab → confirm dialog "Reload from disk / Keep my version"
- Deletion detection (warning + marks tab dirty)
- Knows about our own writes — doesn't fire on the user's saves
Find UX overhaul:
- Live gutter + minimap markers update as you type (debounced 120 ms)
- Yellow bar + ● dot in gutter on every match line
- Orange bar + larger orange dot on the CURRENT match
- Find status now shows "3 of 58 matches"
- Find/Replace input contrast fixed (always white bg + black text)
- Find in Files tab — recursive search via main process, results in panel
- Mark tab — multi-colour persistent highlights (yellow / cyan / pink /
green / orange), survives Find panel close, "Clear Marks"
- Notepad++-style search-results panel — green header, per-file group with
collapse, click any row to navigate (or open the file in Find-in-Files mode)
- Per-tab action buttons hide when not relevant (Mark / Find in Files
modes only show their own buttons)
Tier 1 AI Assistant additions (see ROADMAP.md):
- AGENTS.md + .notepp/memory.md auto-injected into AI system prompt
- Quick-action chips: ✨ Polish · 🔧 Refactor · 📝 Comments · 🧪 Tests ·
💡 Explain · 📓 Memory (opens .notepp/memory.md)
- Multi-model picker — separate model setting for Chat vs Agent
Preview pane:
- Zoom controls in the preview header (−, %, +)
- Ctrl+Wheel inside the preview body zooms
- ⛶ Maximise toggle — preview takes the full editor row
- Mermaid diagrams zoom via the existing mermaid scale-transform (the new
buttons delegate to it so the SVG actually resizes)
═════════════════════════════════════════════════════════════════
🐛 Fixes
═════════════════════════════════════════════════════════════════
- Double-click a file on Windows now reliably opens it inside Note++
(was: IPC race — main sent open-files before renderer registered the
listener; now main buffers and flushes on renderer-ready)
- Open dialog: "All Files" is the default filter again + added category
filters (Text / Config-Data / Source Code / Web / Whiteboard)
- restoreSession editor tabs now get type:'editor' so encryption /
compare context-menu checks no longer misfire
═════════════════════════════════════════════════════════════════
🗑 Removed
═════════════════════════════════════════════════════════════════
Voice / Whisper / Dictation Buddy code:
- Removed entirely (src/whisper-main.js, src/audio-capture-worklet.js,
DICTATION.md, mic button, dictation buddy UI/CSS,
@xenova/transformers + onnxruntime-node deps)
- Multiple attempts (Web Speech API, transformers.js in renderer +
proxy, main-process onnxruntime-node + AudioWorklet PCM capture) all
hit assorted instability in Electron 28. Deferred to a proper
whisper.cpp native-bindings rewrite in a future release.
═════════════════════════════════════════════════════════════════
📦 Dependencies
═════════════════════════════════════════════════════════════════
- + dir-compare (folder-diff backend)
- - @xenova/transformers, onnxruntime-node (voice removed)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent 39c0c5f commit 358caf6
9 files changed
Lines changed: 2032 additions & 45 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
362 | 362 | | |
363 | 363 | | |
364 | 364 | | |
| 365 | + | |
365 | 366 | | |
366 | 367 | | |
367 | 368 | | |
| |||
0 commit comments