Skip to content

v0.0.6

Choose a tag to compare

@github-actions github-actions released this 26 Aug 18:05
· 94 commits to main since this release

Release notes: English · 简体中文 · 日本語 · Español · Deutsch

[0.0.6] - 2026-08-27

The cross-device compute release takes shape: a request that needs different machines for different steps is now a first-class plan whose stages run where the hardware is, and both surfaces — the CLI and the web console — gained the presentation layer they lacked: live feedback while an ask converges, real Markdown in the browser, and the input editor a daily driver needs.

Added

  • Plan plane — pipelines whose stages run on different machines — a stage is an ordinary task (CAS state machine, lease, retry, supervision, review parking), so a pipeline inherits everything a task already has; a finished stage's work dir is packed and chunked over the bus to the machine running the next stage. Two entry paths: panda plan example > train.yaml, panda plan run train.yaml [--dry-run], panda plan show <id> — or one sentence via panda ask, the model emitting a plan precisely when a request must change machines. No stage carries tier-2 consent: an irreversible stage parks in review for a person (c10b8af).
  • Routing by declared hardwareresource_profile is a hard filter (ledger.Fits) and the scorer ranks free capacity + queue depth + tier, discounted by heartbeat freshness, so two tasks published at once land on two machines; the entry prompt carries each node's real hardware so the model fills the routing filter sighted, not blind (c10b8af).
  • panda voice — wake word → ASR → the same entry pipeline → TTS: the desk-pet entry for a device with no keyboard (c10b8af).
  • panda card show | rescan | edit | set — one command family over the capability card: print it (and which file it came from), re-scan hardware + installed agent CLIs (rescan prints a diff, --write applies it and keeps a .bak, hand-written decisions preserved), open it in $EDITOR, or set fields headlessly. panda detect, the card rescan, and the panel now share one detection layer (internal/hwinfo) (fdb56b8).
  • A presentation layer for the CLIinternal/cliui: one palette resolved once, and a live status line (spinner, verb, elapsed, token count — both were already recorded, just never shown) that degrades to a static line on pipes. The line editor learns bracketed paste and multi-line input (a pasted multi-line prompt is one ask, and history recalls it as one), Ctrl-R incremental history search, and argument-position completion for the ids nobody retypes. Unknown commands get a did-you-mean; /help prints inline grouped by intent; new commands cover what a session reaches for after the first ask works (/cost, /model, /status, /doctor, /export, /clear) plus @file attach and !cmd passthrough so the prompt is never left (c538ab6).
  • The web chat surface catches up — a hand-written Markdown renderer (zero innerHTML, so no sanitizer dependency; 29 node tests) replaces literal **bold** and ``` fences in replies; the composer's primary action while streaming is a stop button (the SSE reader takes an AbortSignal); autoscroll stops yanking the view once the reader scrolls up; Cmd+K palette over the same navigation vocabulary as the sidebar; mobile thread drawer replacing display:none (c538ab6).
  • A status pagedocs/status.md records what works, what is only built, and what is missing, with the flagship pipeline's verification state (76c5b69).
  • Stale node rows can be removedpanda nodes remove <id> and a Remove button on offline node cards drop a directory row that no live peer backs (a renamed machine, a changed identity, a decommissioned node). The local node's own row and online nodes are refused — both re-register themselves, so removing them would be a no-op wearing a success message.
  • Release-notes tooling — the release workflow publishes the version's CHANGELOG section plus per-platform install commands as the release body and fails the build when the section is missing; the 0.0.5 release page was rewritten to that standard with an English-only body and language switcher, and every CHANGELOG now leads with one-command install (4e12779, c25a3cb, 98e10df, 600ffb3).

Fixed

  • Queued tasks and plan stages actually route now — the queue path kept a local "if I can do it, I do it" short-circuit that the router itself had removed, and it was the path every panel task and plan stage took: the hardware filter never ran where the flagship pipeline actually runs (a GPU stage stayed on the Pi whenever the Pi held the ability; a burst of tasks all stayed on the node that accepted them). The decision belongs to the scheduler; an empty ability list means "no constraint", not "nobody matches"; plan stages get a resource key each, so independent stages fan out instead of queueing behind each other (a5b792e).
  • A finished run's result fits a frametask_result output is clamped to the bus frame size, so a completed run's result reaches the submitter instead of overflowing the frame and vanishing (c1310da).
  • Memory fences cannot be closed from inside — the <memory_data> fence wrapped the body without touching the body's own tags, so an entry containing the literal closing tag ended the fence early and had its remainder read as instructions — and memory is writable by the model's own tools, the panel, and promoted dream candidates. Tags inside are neutralized; the text stays visible for audit (3f18994).
  • A node no longer describes another machine's hardware — every one of these was a hardcoded value standing where a probe belonged: the default node name was "macbook", so every node that never ran panda init announced itself under the author's laptop name; macOS/Windows had no machine-id source, so renaming the machine looked like a different node; the Windows sandbox stripped PATHEXT/SYSTEMROOT/TEMP — which is why a Windows compute node could not launch an adapter at all; python3 is not a portable interpreter name (probed now, py -3 first on Windows); a timed-out task hung forever on Windows because the harness could not kill a process tree (taskkill /T now); a card advertising a native ability whose command is absent won the route and died with 127 (pruned at load); a GPU whose size no probe could read wrote 0 and was excluded from exactly the work it exists for (unknown is a third state now); deploy-pi.sh defaulted to one developer's LAN address (required now) (fdb56b8).
  • i18n regressions closed — hardcoded Chinese in the voice path, ask/repl plan output, conversation summaries, uninstall errors, and one hint in panda help moved into internal/i18n across all five locales — ja/es/de users were seeing Chinese in those surfaces (c538ab6).
  • The REPL opens in under a second, not after the peer dial timeout — interactive startup dialed every configured peer serially before the banner and then waited for them to settle: an offline peer burned the dialer's full 10s timeout as dead air before the first prompt. The REPL, panda session, and panda voice now dial peers in the background (an offline peer is routine in a long-lived session, and its failure no longer prints WARN lines mid-keystroke), and one-shot panda ask dials peers concurrently so an unreachable peer stops gating a reachable one.

Install

macOS / Linux

curl -fsSL https://raw.githubusercontent.com/Xustalis/OpenPanda/main/scripts/install.sh | sh

Windows (PowerShell)

irm https://raw.githubusercontent.com/Xustalis/OpenPanda/main/scripts/install.ps1 | iex

macOS (Homebrew)

brew install Xustalis/openpanda/openpanda

After installing, run panda init to set the node up, or just type panda to drop into the REPL. An older install upgrades in place with the same command — user data is preserved.