v0.0.2
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 askgains--output-format json|stream-jsonfor headless use (a4cba5f). - Resource-aware local task queue —
core.Submitbecomes async: drag-seq → priority → FIFO ordering, gated by a resource-lock registry plusMaxConcurrent, so disjoint-resource tasks run ahead of a blocked queue; tasks gainpriority/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,!!, andpanda 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 board —
panda queue --watchand/tasks watchredraw 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
EvProgressevents:panda task <id>and the panel timeline show what the agent is doing while it runs (93a453a). - Injection policy —
injection.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_agentsbonus, 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 backingpanda detectand the newGET /api/selfdevice-profile endpoint (852b27e, 1a97fd7).- Panel app settings + memory topics —
GET/PUT /api/settings/appwith 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 writingconfig.yaml+capabilities.yaml;config.ResolvePathunifies resolution (flag > env > user config > system default) across daemon, web, sidecar, and doctor (f5610fc).- Console polish — shared
PageHeader/ErrorStatecomponents, 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
--cardautodiscovery (./capabilities.yamlthen/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.Failand 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 xlost the config) — every subcommand now hoists flags ahead of positionals (f0a1b9f). - Completion loop —
/esnapped to/exitand backspacing re-triggered it (f0a1b9f). - SQLite v9 migration crashed on legacy databases created before the
taskstable 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 atbase_url/model name, persistent 429/5xx name rate limiting, connection failures suggest a network check (df47725). - Gates and hardening —
make measurereferenced a non-existent config; gofmt drift; README stated the wrong Go version;.gitignoremissed.openpanda/; the example config's phantom peer hot-looped warnings; the panel gainedsecurityHeadersmiddleware (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 resilience —
streamWithRetryreplays transient drops (429/5xx/network) with backoff while nothing was delivered;deltaGuardkeeps 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
pandanow opens the interactive REPL instead of the headless daemon; the kernel moved to an explicitpanda daemonsubcommand. The systemd unit, LaunchAgent, Windows launchers, and Makefile run targets were updated — deployments invokingpandadirectly must switch topanda daemon(f0a1b9f).