Commit c7ab48a
Add voice input, workspaces, onboarding, multi-chat sessions, and thread safety fixes
Major features:
- Voice input (Whisper.net STT): hold-to-record mic button, model download, settings UI
- Multi-project workspaces: named project groups with primary/related, workspace manager UI
- Project onboarding: automatic CLAUDE.md generation for new projects via background CLI
- Technical writer: background KB article extraction from chat responses
- Multi-chat sub-tabs: ChatSessionViewModel extracted from MainViewModel, per-tab chat sessions
- OpenTabEntry model for workspace-aware tab persistence (replaces OpenTabPaths)
Bug fixes and improvements:
- UsageService: always start timers even if token unavailable at startup (retry on poll)
- SpeechRecognitionService: set _isRecording before waveInStart to prevent buffer loss,
move waveInStop out of waveIn callback (MSDN restriction), use _transcribeLock to prevent
processor dispose during transcription, add ObjectDisposedException guards
- TechnicalWriterService: dispose timer on shutdown, _shutdownCalled flag prevents
ContinueWith from touching disposed timer, idempotent Shutdown()
- KnowledgeBaseService: add per-directory lock to LoadEntries for read consistency
- App.xaml.cs: single CollectionChanged handler, fix tab service initialization order
- MainWindow: atomic mic button entry guard, workspace menu and context menu
- OnboardingService: only check glob (not regex pattern) for path traversal
- ExplorerViewModel: multi-root support with SetRoots()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>1 parent ed2cc8f commit c7ab48a
38 files changed
Lines changed: 6056 additions & 2974 deletions
File tree
- src/ClaudeCodeWin
- Models
- Services
- ViewModels
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
99 | 99 | | |
100 | 100 | | |
101 | 101 | | |
| 102 | + | |
102 | 103 | | |
103 | 104 | | |
104 | 105 | | |
| |||
115 | 116 | | |
116 | 117 | | |
117 | 118 | | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
126 | 129 | | |
127 | 130 | | |
128 | 131 | | |
129 | | - | |
130 | | - | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
131 | 135 | | |
132 | | - | |
| 136 | + | |
133 | 137 | | |
134 | 138 | | |
135 | 139 | | |
| |||
178 | 182 | | |
179 | 183 | | |
180 | 184 | | |
181 | | - | |
182 | | - | |
183 | | - | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
184 | 188 | | |
185 | | - | |
186 | | - | |
187 | | - | |
| 189 | + | |
188 | 190 | | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
189 | 198 | | |
190 | | - | |
| 199 | + | |
191 | 200 | | |
| 201 | + | |
192 | 202 | | |
| 203 | + | |
| 204 | + | |
193 | 205 | | |
194 | | - | |
195 | | - | |
| 206 | + | |
| 207 | + | |
196 | 208 | | |
197 | | - | |
198 | | - | |
199 | | - | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
200 | 215 | | |
201 | 216 | | |
202 | 217 | | |
| |||
214 | 229 | | |
215 | 230 | | |
216 | 231 | | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
217 | 273 | | |
218 | 274 | | |
219 | 275 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
| 29 | + | |
28 | 30 | | |
29 | 31 | | |
30 | 32 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
75 | 76 | | |
76 | 77 | | |
77 | 78 | | |
78 | | - | |
| 79 | + | |
79 | 80 | | |
80 | 81 | | |
81 | 82 | | |
| |||
97 | 98 | | |
98 | 99 | | |
99 | 100 | | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
100 | 118 | | |
101 | 119 | | |
102 | 120 | | |
| |||
317 | 335 | | |
318 | 336 | | |
319 | 337 | | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
320 | 370 | | |
321 | 371 | | |
322 | 372 | | |
| |||
850 | 900 | | |
851 | 901 | | |
852 | 902 | | |
853 | | - | |
| 903 | + | |
854 | 904 | | |
855 | 905 | | |
856 | 906 | | |
857 | 907 | | |
858 | | - | |
| 908 | + | |
859 | 909 | | |
860 | 910 | | |
861 | 911 | | |
| |||
1057 | 1107 | | |
1058 | 1108 | | |
1059 | 1109 | | |
| 1110 | + | |
| 1111 | + | |
| 1112 | + | |
| 1113 | + | |
| 1114 | + | |
| 1115 | + | |
| 1116 | + | |
| 1117 | + | |
| 1118 | + | |
| 1119 | + | |
| 1120 | + | |
1060 | 1121 | | |
1061 | 1122 | | |
1062 | 1123 | | |
| |||
1370 | 1431 | | |
1371 | 1432 | | |
1372 | 1433 | | |
1373 | | - | |
| 1434 | + | |
| 1435 | + | |
1374 | 1436 | | |
1375 | | - | |
1376 | | - | |
| 1437 | + | |
| 1438 | + | |
1377 | 1439 | | |
1378 | | - | |
1379 | | - | |
| 1440 | + | |
| 1441 | + | |
1380 | 1442 | | |
1381 | 1443 | | |
1382 | 1444 | | |
| |||
0 commit comments