Repository navigation
Replies: 1 comment
|
Status on 0.52.1:
For the other items (Wayland and the rest), please test on 0.52.1 and file one bug issue for each item that stays, from the form. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
RFC: Linux desktop hardening + voice parity — what we had to patch to run 0.47.1 daily
Context. We run OpenBot 0.47.1 on two machines: a self-hosted Linux server (Debian, 49 agents,
grok-4.7through the Cursor provider) and a Linux desktop client (Debian 13 container onChromeOS/Crostini). 0.47.1 is a solid release for us: keeping each agent's provider session when the
service stops on SIGTERM removed a real context-loss bug from our upgrade procedure, the provider pages
made diagnosis faster, and the Tasks page fixes landed well. This note is not a complaint list — it is
the delta between 0.47.1 and what a Linux desktop user needs to reach parity with macOS/Windows, with
reproductions, measurements, and acceptance criteria. We are willing to open PRs for any item.
1. Voice on Linux: the runtime exists upstream, the Linux build does not ship it
0.47.1 behaviour
src/renderer/src/features/conversation/voice-status.ts→voiceSupported(platform) { return platform !== "linux" }scripts/prepare-voice.ts→RUNTIME_PACKAGEScontains onlydarwin-arm64,darwin-x64,win32-x64, and throws for any other target.cannot discover why, and cannot report it precisely.
Measured on 0.47.1, unmodified binary
sherpa-onnx-linux-x64@1.13.8(integrity
sha512-6plnhjagsSeTntCgnlag86hWbs/uZE9Crms1LgOb68/1nKsIQjMd+WG519m+aPwT6TrsBOiEMzrx41t8sL5L5g==)placed in
resources/voice/runtime/— the exact pathVoiceSpeechServiceexpects — loads with104 exports, including
createOfflineTts,offlineTtsGenerate,getOfflineTtsSampleRate.getSpeechModelStatus() → { phase: "ready", progress: 100 }.Speech of 59 characters (4.7s) completed in 6928ms.rc=0).Ask
linux-x64(andlinux-arm64where the package exists) toRUNTIME_PACKAGES, with the sameintegrity pinning you already apply to mac/win.
link instead of hiding it. Hidden features read as broken features.
engineering evidence it lacked; I am not asking for a duplicate issue, only for the technical call.
Acceptance criteria
app.asarpatch required.scripts/speech-voice-select-e2e.tsassertingphase: readyand non-empty PCM.2. Wayland: the window is created, reported visible, and never presented
Reproduction (ChromeOS/Crostini, Debian 13, sommelier)
ozone-platform=wayland): process tree healthy (main, GPU, renderer, zygotes).readyState: "complete",visibilityState: "visible",window.openbotpresent, URL
openbot-app://app/index.html, body rendered (sign-in screen).Map State: IsUnMapped. Nothing appears on screen.--ozone-platform=x11:0x400003 "OpenBot" … Map State: IsViewable, full UI.Ruled out along the way:
libfuse2(installed), singleton lock, GPU (--disable-gpuchangesnothing), memory (1 GB free during tests), saved window bounds (1213×837 at +490+267 on a
2742×1714 screen).
Ask
ready-to-show, add a presentation self-check: if the window is not actually presented withinN seconds (or the compositor is sommelier), retry once with
ozone-platform=x11, or emit a singleactionable line:
window created but not presented; try --ozone-platform=x11.caught before users.
3. Secret storage: silence becomes a re-authentication loop
0.47.1 on a machine without Secret Service
The session is never persisted → e-mail code on every launch. 0.47.1 improved the case when a Secret
Service runs; when none runs, nothing tells the user why.
Ask
safeStorage.isEncryptionAvailable() === falseonce at startup, show a non-blocking bannerwith the remedy (install a Secret Service, or launch with
--password-store=gnome-libsecret).Measured after installing
gnome-keyring+--password-store=gnome-libsecret: keyring grows105 → 1 046 bytes after sign-in; full restart → opens directly on the server, no code requested.
The wiring works; only discovery and fallback are missing.
4. Self-hosted updates: the failure is opaque and the preflight is missing
What happened (0.44.3 → 0.45.0, matching upstream #2586)
agent_memory_selections.runMigration()callsassertForeignKeys()on the whole database; the migration threw and theservice entered a restart loop. The log said
migration to version 44 failedwithouterror.causeand without the violating rows. Diagnosis required readingapp.asarbyte by byte.Ask
error.causeand the offending rows (table|rowid|parent) on FK failure.openbot db check [--repair](read-only by default).openbot update: consistent.backup,foreign_key_check,quick_check;on failure, refuse the update with an actionable message and keep the previous version running.
5. Stop forcing users to patch
app.asarTwo concrete cases on our side:
parseAgentAvatarUrlin place; the patch asserts an exact568-byte function, and the service refuses to start if a release changes it. A landmine on every
update.
"linux"→"l1nux") to unhide the tab.Ask
avatarBaseUrl(+ avatar shape) as a supported setting.Principle: if users patch the bundle, the product is missing a configuration surface.
6. Two small ones, cheap to fix
projection_turnsstayedstatus='running'for days (oldest 2026-10-18)across restarts. No functional impact — a thread carrying a stale row ran a new turn normally — but
counters and any fatigue/latency metric are wrong. Ask: at startup, mark
runningturnsinterruptedwhen no live provider session matches, and report the count.openbot doctor --json: platform + ozone backend, window mapped yes/no, provider states, DBintegrity, disk, secret-storage availability, CLI versions. Today we need
xwininfo, CDP andsqlite3to answer "why is nothing on screen?".Platform matrix we would put in the release notes
One table like this would have saved us an evening and would set honest expectations.
What we run in userland today (happy to contribute)
foreign_key_check,quick_check, refuse on debt.StartLimitIntervalSec=300,StartLimitBurst=5,OnFailure=openbot-crash-alert.verification, re-applies the anchored patch, and launches under X11.
None of this belongs in userland if you can own it upstream.
What I did not verify
All reactions