Skip to content

Hotline Computer 0.10.0

Choose a tag to compare

@1broseidon 1broseidon released this 23 Sep 21:17
· 10 commits to main since this release

Hotline Computer 0.10.0: a repository describes itself in a manifest, and its desktop app builds, launches and answers to an agent.

  • Workspace manifests. .hotline/manifest.json names a project's packages, platform, libraries, env, services, hooks and runs, and composes over the image's base. state manifest drafts one from the repository's own lockfiles and build files, with a reason for each line; state prepare takes it, and shell run NAME starts a run in the prepared environment. A workspace keeps the base it was composed against until prepare is given upgrade: true. Services and start hooks come back after a restart.
  • Runs that answer when ready. A desktop run answers when its window is up and settled, with the window and a screenshot of it; a web run gets $PORT and answers when it listens, over IPv4 or IPv6. A first prepare locks Nixpkgs from the image and fetches nothing from GitHub.
  • GUI platforms. gl, gtk, gtk4, webkit, qt, native (X11, XKB and Vulkan for winit, wgpu, egui, iced, GLFW, SDL, Fyne, Gio), prebuilt (the manylinux library policy of PEP 600, for pip and uv wheels and downloaded binaries) and qt-wheel (what PySide6 and PyQt wheels load beyond it). Electron runs from node_modules unsandboxed, as Chromium does. The image carries Noto CJK.
  • Driving apps.
    • type and paste return once the focused field has taken every character, so a click that follows cannot overtake a slow webview.
    • scroll takes direction.
    • capture takes window or region, has an image mode, and says how image pixels map to the screen.
    • The accessibility tree leaves out hidden nodes and unnamed wrappers: the whole desktop with Chromium open went from over 25k tokens to 3.3 KB.
    • Reading a Qt 6.8 app's tree no longer crashes it, and Qt trees now read.
  • Calls and shell. No call waits longer than 50 s, so every answer beats a client's one-minute timeout; exec waits up to 45 s. shell exec takes a whole command line in command.
  • Links and the browser. xdg-open, $BROWSER and the desktop's http and https handlers open addresses as tabs of the managed browser, where the person's sign-ins are. Navigating to a page that answers with an HTTP error status shows the page with a note instead of failing.
  • The bars. The desktop's bar and the viewer's control bar count a failure only while it is under an hour old and nothing has run the same command since; cancelled and restart-interrupted jobs never count. The image sets SHELL=/bin/bash.

Known gaps:

  • Drafts can miss what an app needs to launch. A Python project importing tkinter isn't given Tk, and a Cargo workspace with no default binary is drafted cargo run. Correct the manifest's packages and runs.
  • egui, Dear ImGui, Tk and Fyne expose no accessibility tree; drive them from screenshots.
  • flake cannot yet be combined with platform or services.

Validation: the local release gate passed all 24 acceptance scenarios, including a native Hotline (Tauri) build and screens, Qt wheel, WebKitGTK typing and scrolling, and package workspaces. Unit, contract and image-identity checks passed. By hand, from their own repositories: Hotline, Dear ImGui (C++), CustomTkinter (Python), egui (Rust), Fyne, Electron, PySide6 6.8 and 6.11, pygame, and numpy with pandas. Evidence for each release candidate is in qa/0.10.0-rc.1 through qa/0.10.0-rc.5.

Native ARM64/x86_64 release gates passed all 24 scenarios per architecture, then image-identity checks and cold pulls.

Cold registry pulls: 22.65 s ARM64 / 25.53 s x86_64. Downloaded-image start-to-health: 0.286 s / 0.320 s. Compressed layers: 745,560,653 / 749,121,079 bytes, up from about 425 MB in 0.9.0, mostly the image's Nix substituter cache and Noto CJK. The combined image digest is sha256:7d8c5634a3c4f5ede8ccffc188e8f343fbb6e644e42886b6bdb60afd9549c5b3.

Existing computers keep their running version until updated from the teammate's pane; state info and state guide identify the attached computer.

Use ghcr.io/1broseidon/hotline-computer:0.10.0.