Commit Graph
78 Commits
Author SHA1 Message Date
ZacharyZcR 42c5682243 fix(hosts): display protocol credential usernames for non-SSH hosts (#1572) 2026-10-07 16:37:58 -05:00
ZacharyZcR bb4b345feb fix(sidebar): reclaim space from hidden folder actions (#1571) 2026-10-07 16:37:54 -05:00
ZacharyZcR 9c31dd41c7 fix(ssh): normalize PKCS8 private keys before connecting (#1570) 2026-10-07 16:37:50 -05:00
ZacharyZcR f4164a74b2 fix(ssh): accept full passwords in keyboard-interactive prompts (#1569) 2026-10-07 16:37:45 -05:00
ZacharyZcR f412a28bb8 fix(sync): resolve shared hosts for connect-only recipients (#1568) 2026-10-07 16:37:41 -05:00
ZacharyZcR abbfca2e94 fix(audit): store plugin entries with no acting user as a null user_id (#1556)
Plugin audit entries written outside a request used the literal "system"
as user_id. That column references users.id, so the insert was refused
(Postgres logs it as an FK violation) and the entry was silently dropped.
Write null instead and keep "system" / plugin:<id> in username.
2026-10-04 18:40:13 +08:00
ZacharyZcR bf817d8bd1 feat(ai): add remote coding agent sessions for SSH hosts (#1545)
* feat(ai): add host coding agent sessions with configured providers

* Wait for agent initialization and shutdown before resuming sessions

* Keep Pi transcripts outside its configuration migration directory

* Cover Pi session directory separation

* Update core permission catalog expectations for remote agents

* Install remote agent runtimes from verified official sources

* Wait for the identity panel credentials request in its test

* Add scoped SSH forwarding setup for remote agents

* Verify forwarding setup through a fresh SSH connection

* Bound the SSH forwarding verification timeout

* Return the forwarding verification callback result

* fix(ai): support agent send and interrupt keyboard shortcuts

* feat(ai): add agent queues attachments worktrees and session recovery

* fix(ai): handle deleted workspace paths and duplicate status events

* fix(ai): accept file references in root workspaces

* fix(ai): refresh paused queues after agent errors

* fix(ai): store agent sessions in plugin tables and lock down OpenCode

Agent sessions lived in a single ctx.kv value holding up to 2000 events,
which passed the 256 KB kv limit within minutes of a normal run. Every
save after that failed, so history, nativeId, queue and archive changes
were lost and every event wrote a kv audit row.

Sessions, events and queued prompts now have their own tables. A running
agent appends events in batches at most once a second with a lazy save;
session and queue changes save immediately. Prompts, drafts and stored
event text are capped in UTF-8 bytes to fit MySQL TEXT. kv:own is no
longer requested.

The OpenCode server now requires a per-session password, so other local
accounts on the host cannot drive the agent through its loopback port.

* test(upgrade): include agent session tables in the reviewed upgrade SQL
2026-10-03 16:01:47 -05:00
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