Commit 8ca1453
feat: add SSH remote workspace support (#206)
* feat: add SSH remote workspace support
- SSH connection management with saved connections, key/agent/password auth
- Remote file system access via SFTP (read, write, edit, delete, rename)
- Remote terminal sessions over SSH PTY
- Multi-workspace registry: path-keyed HashMap replaces single global state,
allowing multiple concurrent remote workspaces without path conflicts
- Per-workspace connection status indicator (green/yellow/red dot) in sidebar
- Auto-reconnect on startup: retries up to 5 times with 10s intervals,
keeps workspace in sidebar with error state if reconnection fails
- Session list re-initialized after SSH reconnect to fix timing race where
sessions loaded before workspace was registered in state manager
- Snapshot/rollback skipped for remote workspaces (no local .bitfun dir);
rollback commands return empty success instead of "directory not found" error
- Agentic tools (file read/write/edit, bash, glob, grep) routed through SSH
when workspace path matches a registered remote workspace
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: vendor OpenSSL to fix Windows CI build failure
russh-keys uses the openssl crate which requires a system OpenSSL
installation. On Windows runners there is none, so the build fails.
Adding openssl with the vendored feature compiles OpenSSL from source
(same approach already used by git2 via vendored-openssl).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: improve SSH error diagnostics, algorithm compatibility, and Windows build
- Make HandlerError carry actual error message (was unit struct, discarding all info)
- Implement disconnected() callback to capture real SSH disconnect reason
- Add DH_G14_SHA1/DH_G1_SHA1 KEX and SSH_RSA host key for legacy server compatibility
- Improve error message when server closes connection before sending SSH banner
- Fix win32job missing from bitfun-core Windows target dependencies
- Fix type annotation needed for MutexGuard in process_manager.rs
- Fix RemoteFileBrowser cancel button using missing i18n key (common.cancel → actions.cancel)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: remove unreconnectable remote workspaces on startup instead of showing error
Password-auth workspaces cannot auto-reconnect (BitFun does not persist passwords).
Any workspace that fails reconnection (password, key, or agent) is now silently
removed from the sidebar instead of being shown with a permanent red error state.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: suppress FlowChat init error for disconnected remote workspaces on startup
Before initializing FlowChatManager, check that a remote workspace's SSH
connection is actually live. If not (e.g. password-auth workspace that cannot
auto-reconnect), log a warning and skip initialization instead of showing an
error notification to the user.
---------
Co-authored-by: bowen628 <bowen628@noreply.gitcode.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>1 parent 405c76a commit 8ca1453
82 files changed
Lines changed: 9478 additions & 456 deletions
File tree
- src
- apps
- desktop
- src
- api
- server/src
- crates/core
- src
- agentic
- coordination
- execution
- session
- tools
- implementations
- tool-runtime/src/fs
- pipeline
- infrastructure/filesystem
- service
- remote_ssh
- snapshot
- terminal/src
- workspace
- util
- web-ui/src
- app
- components
- TitleBar
- layout
- scenes/shell/hooks
- features/ssh-remote
- infrastructure
- api
- adapters
- service-api
- services/business
- locales
- en-US
- zh-CN
- tools/terminal/types
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
83 | 86 | | |
84 | 87 | | |
85 | 88 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
19 | 19 | | |
20 | 20 | | |
21 | 21 | | |
22 | | - | |
| 22 | + | |
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| |||
42 | 42 | | |
43 | 43 | | |
44 | 44 | | |
| 45 | + | |
45 | 46 | | |
46 | 47 | | |
47 | 48 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
6 | 5 | | |
7 | 6 | | |
8 | 7 | | |
| |||
14 | 13 | | |
15 | 14 | | |
16 | 15 | | |
| 16 | + | |
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
| |||
435 | 435 | | |
436 | 436 | | |
437 | 437 | | |
| 438 | + | |
438 | 439 | | |
439 | | - | |
| 440 | + | |
440 | 441 | | |
441 | 442 | | |
442 | 443 | | |
| |||
446 | 447 | | |
447 | 448 | | |
448 | 449 | | |
| 450 | + | |
449 | 451 | | |
450 | | - | |
| 452 | + | |
451 | 453 | | |
452 | 454 | | |
453 | 455 | | |
| |||
459 | 461 | | |
460 | 462 | | |
461 | 463 | | |
| 464 | + | |
| 465 | + | |
462 | 466 | | |
463 | | - | |
| 467 | + | |
464 | 468 | | |
465 | 469 | | |
466 | 470 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
8 | 11 | | |
9 | 12 | | |
10 | 13 | | |
11 | 14 | | |
12 | 15 | | |
| 16 | + | |
13 | 17 | | |
14 | 18 | | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
15 | 30 | | |
16 | 31 | | |
17 | 32 | | |
| |||
28 | 43 | | |
29 | 44 | | |
30 | 45 | | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
31 | 55 | | |
32 | 56 | | |
33 | 57 | | |
| |||
46 | 70 | | |
47 | 71 | | |
48 | 72 | | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
49 | 78 | | |
50 | 79 | | |
51 | 80 | | |
| |||
143 | 172 | | |
144 | 173 | | |
145 | 174 | | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
146 | 243 | | |
147 | 244 | | |
148 | 245 | | |
| |||
161 | 258 | | |
162 | 259 | | |
163 | 260 | | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
164 | 266 | | |
165 | 267 | | |
166 | 268 | | |
| |||
207 | 309 | | |
208 | 310 | | |
209 | 311 | | |
210 | | - | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 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 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
0 commit comments