37 Commits

Author SHA1 Message Date
UNITRONIX 3f35dda693 fix(security): patch Dependabot deps and harden scanner noise
Bump echo, qs, and browserslist; redact CDAP command/session logs;
reject restore symlinks; expand CodeQL exclusions for known FPs.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-09-06 01:19:25 +02:00
UNITRONIX 34ef01e17d fix(security): harden TLS defaults, device auth, and update privileges
Require stricter client/server TLS options, centralize device auth on agent APIs, constrain Linux privileged update helpers, and harden filebrowser path checks with supporting audit notes.

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-15 23:28:03 +02:00
UNITRONIX 150b63d34b fix(security): bump Dependabot deps and harden CDAP file-transfer callbacks
Close brace-expansion, postcss, and quinn-proto alerts; validate request_id before invoking pending download callbacks (CodeQL).
2026-08-05 17:13:27 +02:00
UNITRONIX feb3d19987 chore: update .gitignore and Gitleaks configuration, enhance CI workflows
- Updated .gitignore to include new binary paths and retain .gitkeep.
- Modified Gitleaks configuration to ignore additional directories.
- Adjusted CI workflows to prevent execution on version bump pushes and improved version bump handling in scripts.
- Bumped BetterDesk Console Manager version to 3.3.136 in betterdesk.sh and related scripts.
2026-07-13 17:34:41 +02:00
UNITRONIX e5a980d0f7 chore: clean up binaries and add CI troubleshooting documentation
- Removed outdated binary files for Windows and Linux from the binaries directory.
- Added a new documentation file for GitHub Actions CI troubleshooting, outlining common failures and local commands to mirror branch protection checks.
2026-07-13 17:34:33 +02:00
UNITRONIX 655e20f512 chore: update dependencies and enhance security measures
- Bumped `vitest` and `vite` versions in both root and agent-client lockfiles.
- Added `web-nodejs` overrides for `@babel/core` and `js-yaml` to address Dependabot alerts.
- Implemented `NewConnLimiterFromInt` for relay per-IP limits in the Go server, removing the deprecated `deepSet` function from the patch-role-scope-i18n script.
- Extended CodeQL coverage to include new query filters and improved npm audit configurations.
2026-07-12 21:36:53 +02:00
UNITRONIX 6b4a4517b0 chore: update Windows schema with new permissions for multiple windows and icon handling
Added support for `allow-supports-multiple-windows` and `deny-supports-multiple-windows` permissions in the Windows schema. Updated existing permissions to include `allow-set-icon-with-as-template` and its denial counterpart.
2026-07-12 20:48:19 +02:00
UNITRONIX d4c0e6eb14 security(agent-client): align bd-signal auth with console token validation
Require auth_token or api_key before connecting; remove device_id token fallback.
2026-07-12 20:47:08 +02:00
UNITRONIX 846526a9dd fix(security): resolve Dependabot and CodeQL alerts on dev.
Bump support-agent Go deps, harden relay recording paths and clipboard HTML stripping, update agent-client Rust lockfile, and extend CodeQL/Dependabot config for known upstream limits.
2026-07-03 22:33:18 +02:00
UNITRONIX 1118fc2ba6 Anonymize operator infrastructure fingerprints from public repo.
Remove internal LAN IP, SSH user, and developer paths from docs and examples; move deploy runbook to gitignored docs/private with a public template; drop Cursor debug logging leftovers; add CI checks to prevent regression.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 19:07:42 +02:00
UNITRONIX 3a66757adc feat(capture): enhance desktop capture strategies with portal support
Updated captureFFmpegStrategies functions across macOS, Linux, and Windows to accept a DesktopStreamer parameter, enabling better management of portal sessions for screen capture. Introduced a new portalScreenCastSession type for handling session cleanup on Linux. Improved the handling of xdg-desktop-portal for Wayland, ensuring proper resource management and user experience during remote desktop sessions. Additionally, added warnings for missing dependencies in the preflight checks for Linux environments.
2026-06-20 23:37:50 +02:00
UNITRONIX 8a96de6e86 feat(agent-client): production readiness — build pipeline, security, Generator
Restore agent-client to git and wire agentClientBuildWorker for Tauri builds
(deb/rpm/AppImage/MSI) with branding and Go sidecar staging. Add TLS gate,
settings lock, policy sync, preflight UI, CDAP registry, and Generator
product_type split (agent-client vs support-agent vs rdclient).
2026-06-20 22:50:51 +02:00
UNITRONIX 6b7b1a242c feat(agent-client): initialize BetterDesk Agent Client with core components and localization support
Created the initial structure for the BetterDesk Agent Client, including essential files such as index.html, package.json, and TypeScript configuration. Implemented core components for the application, including StatusPanel, ChatPanel, and HelpRequest, along with localization support for multiple languages. Added a consent dialog for user permissions and integrated a chat window for real-time communication. Included styling and branding elements to enhance the user interface.
2026-06-20 22:48:18 +02:00
UNITRONIX 414b96ba62 chore: temporarily untrack alpha desktop clients from git
Exclude betterdesk-agent-client and betterdesk-mgmt to reduce GitHub
noise while they are not in active use; limit root i18n:check to web console.
2026-06-11 05:33:45 +02:00
UNITRONIX c219f3be68 fix(security): patch CVE-2026-50575 and harden deps, SSRF, shell exec
Complete GHSA-3v82-3gf8-fxx8 WebSocket replay fix for soft-deleted peers,
bump vulnerable Go/Rust dependencies, and apply CodeQL-driven hardening
(OIDC URL validation, path confinement, execFileSync, rate limits).
2026-06-09 02:05:17 +02:00
UNITRONIX dc6b6c088e feat(centralization): move help/chat to Go server and harden agent TLS
Phases 1-4 of the Go-server centralization plan plus optional-TLS transport.

Go server:
- db: HelpRequest model + SQLite/PostgreSQL stores (help_requests_*.go), GetDeviceOrgID.
- cdap: handleHelpRequest/handleChatMessage handlers, SendChatToDevice delivery.
- api: REST help endpoints (help_handlers.go), publish help_request/chat_message events.

Node.js panel:
- bd-api.routes.js: drop local in-memory Maps, proxy all help/chat/notification
  endpoints to the Go server (read-proxy) with status/id/timestamp normalization.

Agent (native Go + Tauri sidecar):
- config.go/agent.go: optional EnforceTLS, ServerCertPin (SPKI pin), TLSInsecureSkipVerify
  with env overlays and dialOptions() cert pinning via VerifyPeerCertificate.
- HTTP (ws://) stays a fully supported transport: TLS enforcement is an explicit
  operator opt-in (never auto-derived from the URL scheme). The agent logs a warning
  recommending wss:// for untrusted networks instead of blocking the connection.
- config.rs/sidecar.rs: propagate enforce_tls + server_cert_pin from AgentConfig
  through SidecarConfig to the Go agent config; warn on plaintext ws:// to remote hosts.

This commit was made possible thanks to Insolve.
2026-06-01 00:51:29 +02:00
UNITRONIX d34a9dbf4a feat(agent-client): enrollment auth, status panel redesign, window controls
Align agent client with managed-enrollment flow and generator-preview UI.
- commands.rs: send X-Device-Id header on help-request, cancel-help-request and chat-send (identifyDevice middleware requires it); align help-request payload to message/hostname; add unattended password command + enrollment polling helpers.
- capabilities/default.json: grant explicit window/webview mutating permissions (minimize/close/start-dragging) instead of relying on core:default.
- branding.rs/config.rs/lib.rs: branding schema mapping, unattended password config, custom title bar wiring.
- StatusPanel/SettingsPanel/HelpRequest/ChatPanel/App: rework StatusPanel to match generator card, custom TitleBar, remove bottom nav, footer/contact/pw-row layout.
- ChatWindow.tsx + TitleBar.tsx: new components.
- global.css/StatusPanel styles: edge-to-edge layout, footer, contact, password row.
- i18n: add enrollment/status/window keys to en/pl/zh-TW.

This commit was made possible thanks to Insolve.
2026-05-31 23:18:52 +02:00
UNITRONIX 27c082205f fix(i18n): complete web console translations
Complete the web console locale set so all 26 language files share the EN/PL baseline with no missing keys, extra keys, empty values, or English fallback values.

Keep strict i18n audit behavior and disabled auto-fix flow so incomplete translations are surfaced for manual review instead of being filled with English fallback text.

Validated with the strict web-nodejs i18n audit, JSON parsing for all locale files, placeholder preservation checks, and VS Code diagnostics.

This commit was made possible thanks to Insolve.
2026-05-31 18:46:27 +02:00
UNITRONIX 15bca36787 feat(codec): GPU multi-codec video for CDAP rdclient incl. plain HTTP
Enables hardware-accelerated video for the CDAP/OS-agent rdclient path instead of being stuck on 1-2fps MJPEG, including over plain HTTP (no HTTPS/domain/cert required).

Browser viewers (web-nodejs): cdap-adapter.js and cdap-desktop.js now decode video via the shared RDVideo pipeline. WebCodecs (AV1/VP9/H264, hardware-accelerated) is used in secure contexts (HTTPS/localhost); over plain HTTP, H.264 is decoded through JMuxer/MSE using the browser's native (usually GPU) decoder. Viewers advertise decodableCodecs() in the desktop_start init payload so the agent sends a real GPU stream; MJPEG/WebP remain safe fallbacks. cdap-device.ejs preloads jmuxer + RDVideo.

Go agent (betterdesk-agent): codec.go + codec_framing.go add multi-codec engine with GPU encoder probing and selection order AV1 -> VP9 -> H264 -> WebP; desktop.go intersects the operator-advertised codec list with local encoder ability and emits honest desktop_meta (format + codec_string); config.go adds codec config fields.

Go server (betterdesk-server): cdap_handlers.go + cdap/desktop.go thread the codecs[] / video_codec fields through desktop_start so operator codec advertisement reaches the agent.

Tauri agent-client: config.rs/sidecar.rs/commands.rs codec plumbing, SettingsPanel codec dropdown + en/pl/zh i18n, refreshed agent sidecar binary.

Note: AV1/VP9 still require WebCodecs (HTTPS/localhost); H.264-over-MSE covers the plain-HTTP case. Self-signed HTTPS (installer SSL menu option C) unlocks all codecs. Fully backward compatible.

This commit was made possible thanks to Insolve.
2026-05-31 02:29:53 +02:00
UNITRONIX 364242f72d build(agent-client): add prebuilt Windows sidecar binary
The Tauri externalBin config requires binaries/betterdesk-agent-<triple>.exe to exist at build time. build.rs only cross-builds the Go sidecar when the betterdesk-agent source is a sibling, which is absent in the build worker's work dir. Pre-staging the Windows sidecar (mirroring the committed Linux one) unblocks the windows/exe NSIS build in the agent-build pipeline.

This commit was made possible thanks to Insolve.
2026-05-31 01:35:09 +02:00
UNITRONIX a31d91753c feat(agent-client): wire runtime branding into SolidJS UI + fix Windows target
App.tsx now loads the per-deployment branding profile (get_branding IPC) during boot and applies it to the document: primary/accent colors map onto the existing --accent CSS variables, product name becomes the document title, and an optional logo data URL becomes the favicon. New src/lib/branding.ts exposes loadBranding()/getBranding() with safe fallbacks to built-in BetterDesk defaults so unbranded developer builds still render.

install-build-toolchain.sh now installs the x86_64-pc-windows-msvc Rust target instead of windows-gnu, because the build worker cross-compiles Windows installers via cargo-xwin (MSVC ABI). The previous gnu target caused every windows/exe build to fail with 'Target x86_64-pc-windows-msvc is not installed'.

This commit was made possible thanks to Insolve.
2026-05-31 01:25:39 +02:00
UNITRONIX 760c0e933d feat(agent-client): alpha bundle generator + cross-platform build pipeline
Generator UI: web-nodejs/views/generator.ejs + public/js/generator.js + public/css/generator.css. Logo upload up to 10 MB, 16 MB body parser, branding form (product name, colors, server URL, etc.), per-branding hash deduplication.

Build pipeline: web-nodejs/services/agentBundleService.js (queue API + branding hash) and agentBuildWorker.js (DB-backed queue, 5s poll, concurrency 1, 30 min timeout). Spawns 'cargo tauri build --bundles <fmt> [--target <triple>] [--runner cargo-xwin]' per platform under systemd User=root. Loads /etc/betterdesk/build.env at module top so BUILD_USER/CARGO_HOME/PATH survive empty service env. Uses absolute CARGO_BIN/NPM_BIN paths to avoid PATH-resolution issues. Artifact path resolution honors profile.target presence (no triple subdir when omitted).

Toolchain installer: scripts/install-build-toolchain.sh (Rust + targets + cargo-tauri + cargo-xwin + mingw + makensis + dpkg-deb + rpmbuild + appimagetool + pnpm + node), writes /etc/betterdesk/build.env, 12-tool verification. Wired into betterdesk.sh menu as option B with post-install rsync of agent source to /opt/BetterDeskConsole/agent-source/.

Agent download page: web-nodejs/views/agent-download.ejs + public/css/agent-download.css for end-user installer downloads per platform/format with live status.

Branding scaffold (Tauri side): betterdesk-agent-client/src-tauri/src/branding.rs (Branding struct + OnceLock cache + BETTERDESK_AGENT_BRANDING env override + BaseDirectory::Resource resolve). resources/branding.json (dev skeleton). lib.rs registers module + get_branding command. commands.rs exposes get_branding IPC. tauri.conf.json declares resources/branding.json. Frontend integration of get_branding is intentionally pending — alpha.

Database: web-nodejs/services/database.js + dbAdapter.js add agent_bundle_builds + agent_bundles tables with full PostgreSQL + SQLite parity.

i18n: en.json + pl.json + zh-TW.json get ~75 new keys covering generator wizard, build status, download page, and toolchain installer messages.

Validated end-to-end on prod (Ubuntu 24.04, 4-core, PostgreSQL): linux/x64/AppImage built successfully (83.7 MB, 283s) for branding hash 25e2f242. linux/deb in progress, rpm + windows/exe queued.

Known follow-ups (NOT in this commit): SolidJS invoke('get_branding') wiring in App.tsx, betterdesk.ps1 toolchain menu mirror, reset-password.js PostgreSQL support, Docker decision.

This commit was made possible thanks to Insolve.
2026-05-29 07:15:45 +02:00
UNITRONIX 8558f4cf4d chore: gitignore fix, enrollment token re-issue, desktop session events
.gitignore: scope /lib/ and /lib64/ to repo root only — was matching Tauri src/lib directories. Go server: re-issue device_token on re-registration so agents that lost config can recover auth. Go agent: emit SESSION_START/SESSION_END stdout events for overlay integration, handle DESKTOP_STOP stdin command.

This commit was made possible thanks to Insolve.
2026-05-28 01:14:09 +02:00
UNITRONIX 1a05be5220 fix(agent-client): auto-start CDAP sidecar after first registration
The boot path in lib.rs only fires the sidecar auto-start when the device is already registered at app launch. For a freshly-installed agent the user completes the Setup Wizard while the app is running, so the auto-start gate is evaluated as false and the Go CDAP sidecar never starts until the next app restart — leaving the StatusPanel stuck on 'Not configured'.

Hook sync_initial_config (the wizard's last step) so that as soon as the device is registered and auto_start_sidecar is enabled, the managed Go agent is spawned through the same SidecarManager path used at boot. This bypasses the OS-admin gate on start_sidecar (which only guards the user-facing IPC), matching the boot-time auto-start behaviour.

This commit was made possible thanks to Insolve.
2026-05-27 02:51:54 +02:00
UNITRONIX a8d3259d43 feat(server-management): add server management service and terminal proxy
- Implemented server management service providing resource snapshots, file browser, service control, and audit logging.
- Added terminal proxy for WebSocket-backed PTY, allowing browser-based shell access with user authentication and role-based access control.
- Created server management view with tabs for overview, terminal, file management, and services, including UI elements for displaying system metrics and managing files/services.

Co-authored-by: Copilot <copilot@github.com>
2026-05-07 03:09:03 +02:00
UNITRONIX 33f5e68daf security: fix rustls-webpki vulnerability (RUSTSEC-2026-0104)
Update rustls-webpki 0.103.12 → 0.103.13 in both Tauri application
crates to fix a reachable panic in CRL parsing (Dependabot alert).

Also commit Cargo.lock files for both Tauri apps — per Rust best
practice, application crates should version-lock dependencies for
reproducible builds and accurate Dependabot scanning.

Changes:
- betterdesk-agent-client/src-tauri/Cargo.lock: added (rustls-webpki fixed)
- betterdesk-mgmt/src-tauri/Cargo.lock: added (already on latest)
- .gitignore: stop ignoring Cargo.lock for application crates

Remaining Dependabot warnings (20) are all unmaintained GTK3 bindings
from Tauri 2.x on Linux — unavoidable until Tauri migrates to GTK4.

Refs: Dependabot alerts, #103 (cc @SterlynKong @dgmw-sys)
2026-04-29 01:19:08 +02:00
UNITRONIX 4eed88673c fix(updates): atomic binary replace + accurate modal status
- deployServerBinary: use rename(2) for atomic replace, fixes ETXTBSY
  when target Go binary is busy (Linux kernel handles inode swap).
  Falls back to copyFileSync on cross-device rename or non-Linux.
  Windows: rename target out of the way first, then move new in.
- settings.js: mark 'server' phase as error when build succeeded but
  deploy failed (was incorrectly marking 'done' from build alone).
- settings.js: completion modal now shows error title, error message
  and pre-formatted stderr when serverDeploy.success === false.
- i18n: added complete_with_errors, modal_done_with_errors_title in
  en/pl.
2026-04-26 01:23:18 +02:00
UNITRONIX f99d74203f feat: agent client pending approval flow + rich telemetry + chat endpoint
Agent Client (Tauri):
- registration.rs: EnrollmentStatus struct, register_get_status() and
  poll_enrollment_status() — proper pending/approved/rejected states
- commands.rs: register_device returns JSON, new poll_enrollment_status
  IPC command, format_console_url helper (port 5000), chat/help-request
  URL fixes; new telemetry commands: get_installed_software,
  get_system_services, get_disk_partitions, get_network_adapters
- lib.rs: register all new IPC commands in invoke_handler
- sysinfo_collect.rs: InstalledApp, SystemService, DiskPartition,
  NetworkAdapter structs + cross-platform collection (Win/Linux/macOS)
- SetupWizard.tsx: pending approval sub-state with 5s polling,
  cancel button, hourglass animation
- i18n: 6 pending-approval keys in en.json, pl.json, zh-TW.json
- global.css: .setup-pending block styles

Node.js console (web-nodejs):
- bd-api.routes.js: POST /api/bd/chat/send + GET /api/bd/chat/history
  endpoints — in-memory per-device store, Socket.IO push to operators
2026-04-23 01:05:27 +02:00
UNITRONIX 762ffd9719 Unify web remote, improve agent UI & telemetry
Multiple coordinated changes: frontend, backend (Tauri Rust), and web server.

Key points:
- Web remote unified to /remote/🆔 redirects legacy /remote-desktop, updated device actions, and removed old viewer rendering.
- Added adaptive quality to RDClient to avoid low-FPS stalls and defaulted to Balanced@30 with runtime promotion/demotion logic.
- Fixed session/tab cleanup to avoid stale tabs and made session teardown more robust.
- Improved agent startup responsiveness: get_agent_status now avoids slow SystemSnapshot::collect(); added a separate get_system_info command for expensive telemetry. Frontend invokes now use timeouts and parallel checks so the UI never hangs, and SetupWizard normalizes addresses before validation.
- Windows privilege check changed to CheckTokenMembership against Administrators group so menu items remain visible to admin users even without UAC elevation; tray menu items are always visible and checked on click.
- Registration/probing: server scheme (HTTPS vs HTTP) is probed and cached; API URL builder updated accordingly.
- UI/UX: added bottom navigation bar, help-session event handling, diagnostics feedback, locale display name support, CSS updates (including bundling Material Symbols font); included material-symbols-rounded.ttf and adjusted CSP to allow fonts.googleapis.com / fonts.gstatic.com.
- Added docs/PATCH_PLAN_2026-04-18.md with patch plan and rationale.

These changes aim to make the desktop agent snappier at startup, unify the web remote entrypoint, improve remote streaming stability, and harden privilege/UX behaviors.
2026-04-18 02:30:25 +02:00
UNITRONIX e556b181df Gate agent admin UI by OS privileges
Add OS-level admin detection and use it to gate sensitive agent UI and tray actions. Introduce privileges.rs (Windows TokenElevation / Unix geteuid) and expose is_os_admin as a Tauri command; wire it into tray setup to hide admin-only menu items (Settings, Quit) and re-check privileges before executing those actions. Add show_window helper and emit navigate events from the tray; frontend listens for navigate and conditionally renders /settings (shows AdminRequired component for non-admins). Update App.tsx to query is_os_admin on startup and include navigation listener; add AdminRequired component, styles, and i18n keys. Update Cargo.toml with platform deps (windows features + libc for unix). Also add UI/locale assets and CSS for agent lazy-loaded device tabs and a notifications dropdown, plus several web-nodejs route/view/style updates and new task docs describing phase work.
2026-04-18 01:18:57 +02:00
UNITRONIX fd7790ab56 Add BETTERDESK_STRICT_TLS gating & hardening
Centralize HTTP client creation and add an opt-in TLS hardening gate (BETTERDESK_STRICT_TLS). Refactor repeated reqwest::Client::builder() usages into helper builders that warn once when self-signed certs are accepted and allow enforcing strict validation. Apply changes across agent-client and management codepaths (registration, commands, inventory collector, bd_registration). Also: warn when native agent is configured with plaintext ws:// to non-local hosts, whitelist LOG_FORMAT env var to {"text","json"} in server config, and update the audit docs to reflect these fixes.
2026-04-17 23:34:37 +02:00
UNITRONIX 7b453d852f Security hardening and audit cleanup
Multiple security and maintenance fixes across components:

- betterdesk-mgmt: validate peer_id format to prevent injection in connect_to_peer (reject empty/oversized/invalid chars).
- betterdesk-mgmt (tauri.conf.json): tighten CSP by removing 'unsafe-eval' from script-src.
- betterdesk-agent-client: increase device ID entropy from 4 to 8 bytes (BD- prefix) to reduce collision/brute-force risk.
- betterdesk-server: enforce RBAC (operator+) before upgrading CDAP video WebSocket to block unauthorized access.
- betterdesk-server DBs: exclude soft_deleted peers in GetPeer queries for Postgres and SQLite.
- web-nodejs: add audit log housekeeping (hourly cleanup), add indices for audit_log, and implement cleanupOldAuditLogs(days) in sqlite adapter.
- web-nodejs brandingService: validate logo/favicon URLs to allow only http(s) or relative paths, preventing javascript:/data: XSS/SSRF vectors.
- docs: add AUDIT_BETTERDESK_2026-04-17.md (security audit summary).

These changes tighten client CSP, improve input validation, increase device identifier entropy, ensure RBAC is enforced before websocket upgrades, hide soft-deleted peers from normal queries, and add audit log maintenance and DB indexes for better performance and retention management.
2026-04-17 23:21:11 +02:00
UNITRONIX 3f7c05d7ea Merge pull request #83 from clarencetw/feat/add-zh-tw-i18n
Add Traditional Chinese (zh-TW) i18n translations
2026-04-13 06:51:12 +02:00
UNITRONIX 45e5fda9d0 Implement RBAC v52, org scoping and assorted fixes
Adds a full Phase-52 RBAC implementation and multiple server/frontend fixes. Key changes: new auth/permissions.go with 28 granular permissions and DefaultRolePermissions, expanded 7-role hierarchy and helpers in auth/roles.go, JWT org context and GenerateOrgToken, requirePermission/requireOrgMembership middlewares (Go + Node.js), DB schema & adapter changes for role_permissions and is_server_admin, org role boundary checks and peer org scoping, and guards for last-admin demotion and self-demotion. Also: TCP EOF/connection-reset log filtering in signal/relay servers, improved startup banner port display, KEYS_PATH auto-detect warning, CSS hover/transition layout fixes, admin password race mitigation, ID-change ghost peer cleanup, added Tauri ACL schema files, and a new RBAC_PHASE52.md doc. Misc: numerous web-nodejs i18n, CSS, JS and route updates and an updated .github/copilot-instructions.md timestamp/summary.
2026-04-10 23:40:55 +02:00
UNITRONIX 1ce11348b3 chore: update dependencies, fix tests and compilation errors
Go server:
- Update pgx v5.8.0->v5.9.1, crypto v0.48->v0.49, sqlite v1.46.1->v1.48.1
- Update libc, sys, sync, text, isatty, exp to latest minor/patch
- govulncheck: 0 vulnerabilities
- Fix stale TestRelayPairing test (removed RelayResponse expectation that
  conflicts with E2E encryption handshake design)

Node.js console:
- Apply minor/patch dependency updates via npm update
- npm audit: 0 vulnerabilities
- Fix auth.routes.test.js: add missing recordAttempt mock to authService
- All 61 tests passing across 10 test suites

Rust agent-client:
- Fix 5 async Tauri commands: scope MutexGuard in blocks to prevent
  !Send future errors with tauri 2.10.x (reconnect_agent, send_diagnostics,
  register_device, request_help, cancel_help_request, send_chat_message)
- Add missing icons/ directory (required by tauri-build for Windows resources)
- cargo check: 0 errors, 2 dead_code warnings

Rust MGMT client:
- cargo check: 0 errors
2026-04-09 10:55:52 +02:00
clarencetw 31b207fa5a Add Traditional Chinese (zh-TW) i18n translations
- Add zh-TW translations for web console, agent client, and MGMT client
- Update VALID_LANG_CODE regex to support BCP 47 tags (e.g. zh-TW)
- Add zh-TW to LANGUAGE_META in i18nService
2026-04-05 21:47:13 +08:00
UNITRONIX be9e65dcae Add MGMT and Agent Tauri clients
Introduce two new desktop apps: betterdesk-mgmt (operator/admin console) and betterdesk-agent-client (lightweight endpoint agent).

Key changes:
- Add complete betterdesk-agent-client scaffold: frontend (index.html, TSX components, i18n, styles, Vite/TS configs, package.json) and Rust Tauri backend (Cargo.toml, build.rs, tauri.conf.json, commands.rs, config.rs, registration.rs, sysinfo_collect.rs, NSIS language file).
- Add betterdesk-mgmt entries and assets (registered in docs) and update repo docs to describe both MGMT and Agent clients.
- Update .github/copilot-instructions.md to reflect MGMT/Agent client split and add detailed TODO/feature lists.
- Update .gitignore to exclude build artifacts for both new Tauri apps.
- Add docs/new_agents/client1.md and docs/new_agents/client2.md.
- Minor changes to server DB files and web-nodejs i18n/asset files.

This commit adds the initial scaffolding and core IPC/registration/diag features for the agent and registers the MGMT client in repository docs; further implementation and testing remain.
2026-04-03 00:41:49 +02:00