Skip to content

v0.0.2

Choose a tag to compare

@Xustalis Xustalis released this 23 Aug 15:44
· 154 commits to main since this release

The CLI-first release: the kernel redesign lands (stages A–C) — every web capability gains a CLI peer, the REPL becomes the product's front door, and the CLI gains conversation memory, live task reporting, and per-sink Markdown rendering.

Added

  • CLI command families — every web capability has a CLI peer: panda session | task | memory | config | agents | project, all sharing the panel's service layer; panda ask gains --output-format json|stream-json for headless use (a4cba5f).
  • Resource-aware local task queuecore.Submit becomes async: drag-seq → priority → FIFO ordering, gated by a resource-lock registry plus MaxConcurrent, so disjoint-resource tasks run ahead of a blocked queue; tasks gain priority/seq/session_id/resource_keys (SQLite v9) (0e8d850).
  • REPL conversation memory — a 24k-character budget with pair-aligned eviction (a user turn never replays without its answer), persisted to ~/.local/state/openpanda/conversation.json; /new, /history, !!, and panda ask --continue (f0a1b9f).
  • Out-of-band task reporting — a REPL watcher prints a ✓/✗ line when any task reaches a terminal state (board submissions, web console, peer delegations) without disturbing the input line; inline asks are never double-notified (f0a1b9f).
  • Live task boardpanda queue --watch and /tasks watch redraw the queue every 2s with state-colored rows; Ctrl-C exits the view, not the process (f0a1b9f).
  • internal/mdtext — per-sink Markdown rendering: ANSI emphasis on color TTYs, plain text for pipes and bare consoles, always stripped before TTS; streaming deltas render line-by-line through the same rules (e94f72f).
  • Live agent progress — adapters stream NDJSON progress notes on stderr, recorded as throttled EvProgress events: panda task <id> and the panel timeline show what the agent is doing while it runs (93a453a).
  • Injection policyinjection.model: auto|always|never: agent-native credentials win by default; every credential injection is announced in the task output and audit-logged (852b27e).
  • Cost-aware routing — agent selection scores capability × cost_tier with a preferred_agents bonus, falling back to the next-best matching agent (852b27e).
  • Memory overhaul — configurable caps (memory.limits), multi-file topics with manifest-style selective injection, low-weight dream sedimentation (852b27e).
  • internal/hwinfo — shared hardware probing backing panda detect and the new GET /api/self device-profile endpoint (852b27e, 1a97fd7).
  • Panel app settings + memory topicsGET/PUT /api/settings/app with validated policy storage; the memory API gains per-file topics; the console memory page is productized and settings grouped, i18n synced across five languages (1a97fd7).
  • panda init — interactive first-run bootstrap writing config.yaml + capabilities.yaml; config.ResolvePath unifies resolution (flag > env > user config > system default) across daemon, web, sidecar, and doctor (f5610fc).
  • Console polish — shared PageHeader/ErrorState components, global toasts, and confirmation dialogs on destructive actions (45ee941).
  • REPL ergonomics — slash-command menu under the prompt, pure-ASCII figlet banner, TERM=linux English/ASCII degradation, and --card autodiscovery (./capabilities.yaml then /etc/openpanda/capabilities.yaml) (f0a1b9f).
  • scripts/deploy-pi.sh — one-command Orange Pi deployment: cross-compile, atomic binary swap, systemd install, health check (d7bc87f).

Fixed

  • Whole-run adapter timeout — a CLI wedged mid-stream (pipe open, no output) blocked the adapters' read loop forever; the timeout only covered the tail after stdout EOF. Both adapters now run the CLI in its own process group with a watchdog thread that kills the whole tree at the deadline (332f2d4).
  • Anthropic tools API compatibility — tool_use blocks now always carry input (empty object for no-arg tools); strict Anthropic-compatible providers (DeepSeek /anthropic) previously rejected follow-up turns with a 400. Dotted tool names renamed to underscores to satisfy ^[a-zA-Z0-9_-]+$ (93a453a).
  • codex could not initialize under a non-interactive parent (EPERM writing its state DB and PATH aliases before the first turn) — runs with -s danger-full-access, confined by PANDA's external sandbox (332f2d4).
  • Agent failures recorded an empty reason — the adapter's diagnosis now mirrors into Stderr, so store.Fail and task results carry the actual error (93a453a).
  • Mutual-dial reconnect storm — the dedup loser's final hello reply went out on the registry conn instead of the arriving conn, so it never bound the peer identity and redialed every second (869 reconnects in 15 minutes on real hardware; now 1) (93a453a).
  • Missing work_path surfaced as a misleading fork/exec ENOENT blaming the command binary — the daemon mkdirs all storage roots at boot (f0a1b9f).
  • Trailing flags silently swallowed into positional args (panda task <id> --config x lost the config) — every subcommand now hoists flags ahead of positionals (f0a1b9f).
  • Completion loop/e snapped to /exit and backspacing re-triggered it (f0a1b9f).
  • SQLite v9 migration crashed on legacy databases created before the tasks table existed; the table is now created when missing (0e8d850).
  • API errors arrive as guidance, not transport noise — 401/403 point at model.api_key, 404 at base_url/model name, persistent 429/5xx name rate limiting, connection failures suggest a network check (df47725).
  • Gates and hardeningmake measure referenced a non-existent config; gofmt drift; README stated the wrong Go version; .gitignore missed .openpanda/; the example config's phantom peer hot-looped warnings; the panel gained securityHeaders middleware (cacde7b).

Changed

  • Answer discipline — the entry prompt demands conclusions-first answers (no visible reasoning, minimal structure); agent prompts carry an output rider: the final message reports what was done, execution detail stays in panda task <id> events (93a453a).
  • Streaming resiliencestreamWithRetry replays transient drops (429/5xx/network) with backoff while nothing was delivered; deltaGuard keeps task JSON out of chat bubbles and keeps mid-JSON drops retryable; an exhausted tool loop converges via one final tool-free call instead of erroring; tool execution pins the classification-time registry snapshot, preventing "unknown tool" during MCP hot-switching (df47725).
  • Grouped sidebar navigation — collapsible sections (Tasks / Devices & agents / Personal / System) with the entry prompt recast as the "conductor" persona (f5610fc).
  • Panel endpoint tests — seventeen tests close the highest-risk audit gaps: sessions CRUD plus a real git end-to-end (worktree carve over HTTP, diff, merge), model-key masking (the raw secret never leaves), MCP spawn failure as 400, skills lifecycle, reminders CRUD, system endpoints (ad884bf).
  • Quiet interactive config loading — interactive commands mute the config loader's slog chatter; the daemon keeps full logs (f0a1b9f).

Breaking changes

  • Bare panda now opens the interactive REPL instead of the headless daemon; the kernel moved to an explicit panda daemon subcommand. The systemd unit, LaunchAgent, Windows launchers, and Makefile run targets were updated — deployments invoking panda directly must switch to panda daemon (f0a1b9f).