ZacharyZcR
0214a81e5d
fix(i18n): complete Simplified Chinese core and plugin translations ( #1542 )
...
* fix(i18n): complete Chinese onboarding and navigation labels
* fix(i18n): translate remaining Chinese core and plugin interfaces
* fix(i18n): translate host editor tab overflow controls
* fix(i18n): use consistent Chinese fleet terminology
* fix(i18n): localize hardcoded controls and plugin views
* fix(i18n): translate built-in homepage widget catalog
* test(homepage): follow translated timezone placeholder
* fix(i18n): translate plugin-provided homepage widgets
* fix(i18n): localize feature settings section titles
2026-10-03 21:37:00 +08:00
ZacharyZcR
13f5736d8f
test(database): advance fake timers past the save yield ( #1555 )
2026-10-03 21:28:28 +08:00
ZacharyZcR
b00551c394
feat(hosts): add instance-wide predefined tag suggestions ( #1548 )
...
* feat(hosts): add shared predefined tag suggestions
* style(hosts): format tag catalog routes
2026-10-03 21:04:50 +08:00
ZacharyZcR
94a9f815c9
fix(database): batch database saves for bulk host writes ( #1554 )
...
* fix(database): yield to the event loop between database saves
Each SQLite save serializes and encrypts the whole database into new
buffers, which V8 only releases once the event loop turns. Boot
migrations and bulk host import write plugin settings per host and per
key in an awaited loop, so hundreds of full copies piled up and the
container ran out of memory.
* fix(database): save once per bulk host write instead of once per row
On SQLite every repository write force-saves the whole database. Boot
plugin data migrations, host defaults materialization and the bulk
host routes write one row per host per setting, so they serialized and
encrypted the full database hundreds of times in a row.
DatabaseSaveTrigger.batched wraps a function so force saves made while
it runs collapse into a single save when it finishes. Nested scopes fold
into the outer one, and work that outlives its scope saves normally.
2026-10-03 21:04:33 +08:00
ZacharyZcR
59083aac00
fix(ssh): read force keyboard-interactive as a boolean when resolving hosts ( #1553 )
...
The column holds the text "true"/"false", and the resolver passed it
through as-is. The string "false" is truthy, so the password provider
treated every saved host as forced keyboard-interactive and left the
password out. Jump hops are built straight from the resolved host, so a
password hop whose server doesn't offer keyboard-interactive failed with
"All configured authentication methods failed".
2026-10-03 21:04:21 +08:00
ZacharyZcR
57151c0e84
fix(tmux): pass full session info to the terminal's session picker ( #1552 )
...
The tmux.sessions service reduced detected sessions to bare names, but the
picker reads session.name, so every entry rendered blank and selecting one
sent an empty name, which created a new session instead of attaching.
2026-10-03 21:04:04 +08:00
ZacharyZcR
ab7a68aa84
fix(desktop): ship the plugin SDK inside Mac App Store builds ( #1551 )
2026-10-03 21:03:47 +08:00
ZacharyZcR
7b2198e18c
fix(auth): reject unresolved legacy identity provisioning ( #1550 )
2026-10-03 21:03:31 +08:00
ZacharyZcR
c9a1348836
fix(auth): allow retrying unavailable second-factor interfaces ( #1549 )
2026-10-03 21:03:13 +08:00
ZacharyZcR
c66702deb1
feat(hosts): keep compact row actions inline ( #1547 )
2026-10-03 21:02:54 +08:00
ZacharyZcR
2c4de5f705
fix(file-manager): render transfer toasts without plugin hooks ( #1546 )
2026-10-03 21:02:38 +08:00
ZacharyZcR
4785bf5dfa
fix(docker): retain stored SSH credential association ( #1543 )
2026-10-03 21:02:21 +08:00
ZacharyZcR
117e125d55
fix(snippets): repair missing note column on SQLite upgrades ( #1541 )
2026-10-03 21:02:04 +08:00
ZacharyZcR
d3568e484d
docs(api): describe cookie and API key authentication ( #1540 )
2026-10-03 21:01:47 +08:00
ZacharyZcR
c78bc37eb2
fix(database): batch session activity persistence ( #1539 )
2026-10-03 21:01:30 +08:00
ZacharyZcR
dc5d57c012
fix(status): skip TCP probes while host sessions are active ( #1538 )
2026-10-03 21:01:12 +08:00
ZacharyZcR
bd0858b5a2
fix(hosts): expose controls for overflowing editor tabs ( #1537 )
...
* fix(hosts): expose controls for overflowing editor tabs
* test(hosts): mock resize observation in admin panel tests
2026-10-03 21:00:55 +08:00
ZacharyZcR
021670ca1d
test(remote-desktop): preserve sessions beyond one hour ( #1536 )
2026-10-03 21:00:38 +08:00
ZacharyZcR
dc6c522782
fix(remote-desktop): clip cursor overflow without disabling zoom ( #1535 )
2026-10-03 21:00:20 +08:00
ZacharyZcR
93db4799c0
fix(sso): send the PKCE verifier for GitHub login ( #1534 )
2026-10-03 21:00:03 +08:00
ZacharyZcR
b45d0f9ed2
feat(installer): make the Windows desktop shortcut optional ( #1517 )
2026-09-30 11:20:44 -05:00
ZacharyZcR
9b690b9935
fix(tunnels): support TOTP for client tunnels and jump hosts ( #1508 )
2026-09-30 09:55:34 -05:00
ZacharyZcR
ec7c2c2835
fix(session-sharing): use the linked server for desktop meetings and links ( #1507 )
2026-09-30 09:54:23 -05:00
ZacharyZcR
9801cc7fc7
feat(tmux): add a per-host mouse toggle and preserve remote configuration ( #1513 )
2026-09-30 09:53:17 -05:00
ZacharyZcR
99cffc9ba6
feat(automations): add per-host maintenance mode and recurring schedules ( #1521 )
2026-09-30 09:51:51 -05:00
ZacharyZcR
fd91d4925a
feat(sidebar): add keyboard type-ahead search for hosts ( #1516 )
2026-09-30 09:51:10 -05:00
ZacharyZcR
5b0423c8e0
fix(database): preserve RDP domain during startup backfill ( #1497 )
2026-09-30 09:50:32 -05:00
ZacharyZcR
1f4b1ff6a4
fix(hosts): preserve recording and sharing settings in the dev editor ( #1509 )
2026-09-30 09:49:13 -05:00
ZacharyZcR
e161ad22e0
feat: reconnect all disconnected terminal tabs ( #1523 )
2026-09-30 09:48:15 -05:00
ZacharyZcR
5860921cbe
fix(electron): allow explicit quit with active connections ( #1522 )
2026-09-30 09:47:26 -05:00
ZacharyZcR
4c2f54dac0
feat(tmux-monitor): add a unified multi-host view ( #1520 )
2026-09-30 09:47:21 -05:00
ZacharyZcR
cbbb80bc82
fix(shortcuts): prevent accidental double-Shift palette activation ( #1519 )
2026-09-30 09:47:16 -05:00
ZacharyZcR
7d06686f62
feat(homepage): synchronize canvas layouts across devices ( #1515 )
2026-09-30 09:47:08 -05:00
ZacharyZcR
fdb2f74259
feat(file-manager): default to the remote login directory ( #1512 )
2026-09-30 09:47:02 -05:00
ZacharyZcR
e69029fbf7
feat(file-manager): allow disabling move-to-trash confirmation ( #1511 )
2026-09-30 09:46:56 -05:00
ZacharyZcR
fef33142b3
feat(ssh-terminal): add a duplicate tab action ( #1510 )
2026-09-30 09:46:50 -05:00
ZacharyZcR
55d7c8837b
fix(ai): sync provider configuration and keys across linked devices ( #1506 )
2026-09-30 09:46:45 -05:00
ZacharyZcR
4ed9b69aab
fix(session-sharing): show participant presence in member terminals ( #1504 )
2026-09-30 09:46:40 -05:00
ZacharyZcR
0f6e48a95c
fix(session-sharing): synchronize shared SSH terminal dimensions ( #1502 )
2026-09-30 09:46:35 -05:00
ZacharyZcR
c265758cdd
fix(ssh-terminal): close owner sockets when presentations unmount ( #1501 )
2026-09-30 09:46:29 -05:00
ZacharyZcR
24def2b613
fix(hosts): preserve plugin settings when reopening the editor ( #1499 )
2026-09-30 09:46:23 -05:00
ZacharyZcR
718717554d
fix(sidebar): keep compact host addresses visible ( #1524 )
2026-09-30 09:46:00 -05:00
ZacharyZcR
64b9b18fe6
fix(file-manager): restore text selection and copying in Markdown previews ( #1518 )
2026-09-30 09:45:54 -05:00
ZacharyZcR
a1f72b9e53
feat(remote-desktop): expose display zoom controls for RDP ( #1514 )
2026-09-30 09:45:49 -05:00
ZacharyZcR
12a373e598
fix(ssh-terminal): preserve input order during local echo reconciliation ( #1505 )
2026-09-30 09:45:44 -05:00
ZacharyZcR
126a8c433b
fix(file-manager): refresh disk usage with directory listing ( #1503 )
2026-09-30 09:45:39 -05:00
ZacharyZcR
f6ea218100
fix(session-sharing): replace local presentation after takeover ( #1500 )
2026-09-30 09:45:34 -05:00
ZacharyZcR
fb28cd1f21
fix(remote-desktop): release held keys on focus loss ( #1498 )
2026-09-30 09:45:29 -05:00
ZacharyZcR
5f3372f9f6
fix(sidebar): remeasure visible rows after density changes ( #1489 )
...
* fix(sidebar): remeasure visible rows after density changes
* test(credentials): avoid flaky Ed25519 key generation
2026-09-27 17:36:11 -05:00
ZacharyZcR
107cf55d8c
fix(split-screen): allow layout creation without randomUUID ( #1490 )
...
* fix(split-screen): allow layout creation without randomUUID
* test(credentials): avoid flaky Ed25519 key generation
2026-09-27 17:36:01 -05:00
ZacharyZcR
4e652720af
fix(electron): signal backend readiness over IPC ( #1488 )
2026-09-27 17:35:40 -05:00
ZacharyZcR
407d358f6b
fix(file-manager): show download progress in file viewers ( #1487 )
2026-09-27 17:35:33 -05:00
ZacharyZcR
378be3405a
fix(ldap): preserve the directory-provided bind DN ( #1486 )
2026-09-27 00:51:18 -05:00
ZacharyZcR
0c46950d4c
fix(file-manager): pipeline SFTP download reads ( #1485 )
2026-09-27 00:39:03 -05:00
ZacharyZcR
98cf62547f
fix(file-manager): accept OS file drops over existing rows ( #1484 )
...
* fix(file-manager): accept OS file drops over existing rows
* test(file-manager): target the file label in drop tests
* test(css): exercise the configured PostCSS plugin chain
* test(identity): preserve full Ed25519 public keys in fixtures
* test(remote-desktop): always mutate ciphertext in tamper test
2026-09-27 00:38:55 -05:00
ZacharyZcR
7423e33184
fix(remote-desktop): stop unsolicited clipboard read prompts ( #1482 )
...
* fix(remote-desktop): read clipboard only on explicit paste
* test(css): exercise the configured PostCSS plugin chain
* test(identity): preserve full Ed25519 public keys in fixtures
* test(remote-desktop): always mutate ciphertext in tamper test
2026-09-27 00:12:08 -05:00
ZacharyZcR
2824b49ba9
fix(homepage): check allowlisted private service reachability ( #1479 )
...
* fix(homepage): check allowlisted private service reachability
* test(css): exercise the configured PostCSS plugin chain
2026-09-27 00:11:41 -05:00
ZacharyZcR
3b9a1bacf0
fix(remote-desktop): probe the saved host guacd endpoint ( #1481 )
...
* fix(remote-desktop): probe the saved host guacd endpoint
* test(css): exercise the configured PostCSS plugin chain
* test(identity): preserve full Ed25519 public keys in fixtures
2026-09-27 00:11:09 -05:00
ZacharyZcR
c98003f90e
fix(file-manager): prioritize file names in narrow lists ( #1483 )
...
* fix(file-manager): prioritize file names in narrow lists
* test(css): exercise the configured PostCSS plugin chain
* test(identity): preserve full Ed25519 public keys in fixtures
* test(remote-desktop): always mutate ciphertext in tamper test
2026-09-27 00:10:51 -05:00
ZacharyZcR
44f751a5e5
fix(file-manager): preserve font sizes in compact mode ( #1480 )
...
* fix(file-manager): preserve font sizes in compact mode
* test(css): exercise the configured PostCSS plugin chain
2026-09-27 00:10:41 -05:00
ZacharyZcR
322f811f2c
fix(file-manager): apply compact density to directory tree ( #1478 )
...
* fix(file-manager): apply compact density to directory tree
* test(css): exercise the configured PostCSS plugin chain
2026-09-27 00:10:28 -05:00
ZacharyZcR
2a2ba2f790
fix(file-manager): cancel uploads and stop remote writes ( #1477 )
...
* fix(file-manager): cancel uploads and stop remote writes
* test(css): exercise the configured PostCSS plugin chain
2026-09-27 00:10:19 -05:00
ZacharyZcR
2770f14a25
fix(file-manager): restore Ctrl/Cmd+F file search ( #1472 )
...
* fix(ci): build plugin SDK before dependent checks
* fix(mysql): keep plugin settings scope indexes within limits
* test(mysql): refresh reviewed plugin upgrade SQL
* fix(file-manager): focus file search with Ctrl or Cmd F
2026-09-26 18:19:35 -05:00
ZacharyZcR
5e02e30d0f
fix(file-manager): preserve selected backgrounds on hover ( #1473 )
...
* fix(ci): build plugin SDK before dependent checks
* fix(mysql): keep plugin settings scope indexes within limits
* test(mysql): refresh reviewed plugin upgrade SQL
* fix(file-manager): preserve selection feedback on hover
* test(ui): await dialog focus cleanup before teardown
2026-09-26 18:19:25 -05:00
ZacharyZcR
8192886a69
docs(api): clarify local and remote version fields ( #1474 )
...
* fix(ci): build plugin SDK before dependent checks
* fix(mysql): keep plugin settings scope indexes within limits
* test(mysql): refresh reviewed plugin upgrade SQL
* docs(api): clarify local and remote version fields
2026-09-26 18:19:15 -05:00
ZacharyZcR
4a1880acb8
fix(dashboard): reuse translated host status labels ( #1475 )
...
* fix(ci): build plugin SDK before dependent checks
* fix(mysql): keep plugin settings scope indexes within limits
* test(mysql): refresh reviewed plugin upgrade SQL
* fix(dashboard): reuse translated host status labels
2026-09-26 18:19:05 -05:00
ZacharyZcR
488e940c1a
fix(file-manager): keep inline rename consistent ( #1476 )
...
* fix(ci): build plugin SDK before dependent checks
* fix(mysql): keep plugin settings scope indexes within limits
* test(mysql): refresh reviewed plugin upgrade SQL
* fix(file-manager): keep inline rename consistent
2026-09-26 18:18:40 -05:00
ZacharyZcR
f05f626507
fix(ci): build plugin SDK and repair MySQL settings migration ( #1471 )
...
* fix(ci): build plugin SDK before dependent checks
* fix(mysql): keep plugin settings scope indexes within limits
* test(mysql): refresh reviewed plugin upgrade SQL
2026-09-26 18:18:30 -05:00
ZacharyZcR
ec982aadb5
fix(hosts): normalize imported jump host references ( #1470 )
...
* fix(hosts): normalize imported jump host references
* fix(ci): build plugin SDK before dependent checks
* fix(mysql): keep plugin settings scope indexes within limits
* test(mysql): refresh reviewed plugin upgrade SQL
2026-09-26 18:18:21 -05:00
ZacharyZcR
710f545e34
fix(host-metrics): exclude image and firmware filesystems ( #1469 )
...
* fix(host-metrics): exclude image and firmware filesystems
* fix(ci): build plugin SDK before dependent checks
* fix(mysql): keep plugin settings scope indexes within limits
* test(mysql): refresh reviewed plugin upgrade SQL
2026-09-26 18:18:12 -05:00
ZacharyZcR
38e128bd16
Revert "feat: add Open File Manager to tab right-click menu ( #1046 )" ( #1050 )
...
This reverts commit 0712fdd731 .
2026-07-14 01:36:12 +08:00