Repository navigation
Feat/desktop polish - #249
Merged
Merged
Conversation
Replace the ad-hoc "-" signing identity with the real Developer ID Application identity so `tauri build` produces a signable/notarizable DMG. Notarization credentials (App Store Connect API key) are supplied at build time via env, never committed. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
Wire tauri-plugin-updater for signed, self-hosted auto-updates: - tauri.conf.json: createUpdaterArtifacts + plugins.updater (minisign pubkey + GitHub Releases endpoint at Hyper-Int/OrcaBot). - main.rs: register the plugin + a GUI-only background check on startup (check -> download -> install -> relaunch); skipped in the headless CLI backend so `orcabot` sessions don't trigger updates. - Realign the Tauri stack (tauri 2.11.3 / wry 0.55.1) so the plugin's deps resolve consistently (now needs rustc >= 1.88). - gitignore *.p12/*.p8 alongside existing *.key/*.pem. Update artifacts are minisign-signed at build time via TAURI_SIGNING_* env (never committed). REVISION: main-v7-updater Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
Notarization rejected the bundled resource executables (workerd, vz-helper, d1-shim) — Tauri signs the app shell but not these, so they lacked Developer ID, hardened runtime, and a secure timestamp. Sign them in build-desktop-resources.sh (runs as beforeBuildCommand, before Tauri seals/notarizes the bundle), gated on APPLE_SIGNING_IDENTITY so dev builds are unaffected. Per-binary entitlements: - workerd: allow-jit + allow-unsigned-executable-memory (V8) - vz-helper: com.apple.security.virtualization (calls VZ.framework) - d1-shim: hardened runtime only Result: app notarized + stapled, deep verify clean. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
Replace the bare "Loading Orcabot..." redirect (which fired immediately at :8788 and hung silently if a service wasn't up) with a staged loader: - polls each local service (d1-shim, web :8788, control plane :8787, sandbox VM :8080) and shows the current boot stage, so a stuck launch is diagnosable at a glance; - lighthearted KSP-style flavor per stage, with the real stage label always shown; - only redirects once the required services (web + control plane) are actually reachable; VM boots in the background; - "Open the dashboard anyway" escape hatch appears after 8s so it can never be more stuck than before. loading.html is a committed source file, copied into dist/ by build-desktop-resources.sh (with orca.png for the logo). Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
- Loading screen now shows a clear failure state if the required services (web + control plane) aren't up after 60s: error heading, the stuck stage marked red, a selectable diagnostics block (per-service up/down + elapsed), and Retry / Open anyway / Quit actions. - Add a `quit_app` Tauri command (app.exit -> clean service shutdown) so the loading screen can close a stuck launch. - Rename productName + window title "Orcabot Desktop" -> "Orcabot" (bundle identifier com.orcabot.desktop unchanged). REVISION: main-v8-loading-quit Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
…ld box resolve_resource_root() checked resource_dir() (Contents/Resources) for workerd/d1-shim, but the bundle stages them one level deeper at Contents/Resources/resources/ (tauri.conf resource paths are prefixed "resources/"). That check failed, so an installed .app only resolved via the compile-time CARGO_MANIFEST_DIR/resources path — which exists only on the build machine. On any other Mac, resources weren't found and service autostart was skipped (all services down; the staged loader now surfaces this). Fix: check resource_dir()/resources first, then resource_dir() itself. REVISION: main-v9-resource-root-fix Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
publish-release.sh uploads the DMG + updater artifacts (.app.tar.gz, .sig) and generates/uploads latest.json (the updater manifest) to a GitHub Release tagged v<version>, so the updater endpoint (/releases/latest/download/latest.json) resolves. Requires gh auth and a prior signed `cargo tauri build`. Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
cargo tauri icon generated Square*Logo.png + StoreLogo.png (Windows MSIX tiles), but we only bundle macOS and nothing references them. Keep just the icons bundle.icon uses (.icns, .ico, 32/64/128/128@2x PNGs) + the icon.png source master.
…ion) The updater checked, downloaded (~1GB), installed, and restarted silently on launch. restart() triggers RunEvent::Exit, which shuts down the VM / terminals / agents — so an update landing mid-session would kill the user's work with no warning. Now: check automatically (cheap), but gate the download + install + restart behind an explicit "Update & restart / Later" dialog that spells out that running sessions will stop. "Later" defers to a future launch. REVISION: main-v10-updater-prompt Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]> Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
Tauri doesn't clean bundle/dmg between builds, so a bare *.dmg glob could
publish a stale previous-version (or pre-rename "Orcabot Desktop_...") DMG
while latest.json points at the current tarball — and the space-vs-
underscore sort even makes head -1 prefer the stale name.
Match Orcabot_${VERSION}_*.dmg and fail if it isn't exactly one.
Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_014t8Ukp4NPWtqJ55X261wMZ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.