Skip to content

v0.7.84 — Usability & discoverability sweep

Choose a tag to compare

@ginkida ginkida released this 12 Jun 13:13
· 27 commits to main since this release

Usability & discoverability sweep — make what RustyHand can do visible at a glance, smooth out first contact, and stop a partial-update data-loss bug. 11 commits since v0.7.83. 1,728 tests, zero clippy warnings.

New dashboard surfaces

  • Capabilities page — one searchable view of what this can do: the 72 built-in tools grouped by category, the agent templates, and the installed skills (with source badges). Backed by GET /api/tools / /api/templates / /api/skills.
  • Security page — the live runtime guardrail posture, not static feature flags: exec mode (full flagged amber = any shell command), taint checking, auto-approve, the require-approval list, and per-channel gating (⚠ open to anyone flagged). Trust-by-default (v0.7.75+) is permissive — the page shows that honestly instead of implying a lockdown.
  • CLI: rustyhand tools [--json] and rustyhand agent templates [--json] make the same capability catalog discoverable from the terminal.

First-contact UX

  • doctor --repair now writes a valid anthropic / claude-sonnet-4-6 config (was a dead groq config); Docker default model corrected to claude-sonnet-4-6.
  • Missing-API-key errors link the exact provider console; permission-denied tool errors tell you to grant the tool via PATCH /api/agents/{id}/config.
  • Dashboard first-run: provider-aware "get a key" link (follows the selected provider), Chat empty-state CTA, and an honest demo-mode banner.
  • Channel Connect dialog now surfaces the per-channel setup guidance (quick-setup line, numbered steps, and a "Get a token →" link to BotFather / the Discord developer portal / api.slack.com) instead of bare input boxes.

Channels

  • Channel send failures map to human-readable causes — Telegram/Discord HTTP 401/403/404/429/5xx and Slack ok:false error codes — so an operator sees why a send failed.

Honesty (no stubs pretending to work)

  • WASM skills are now rejected at load time (with an actionable message) instead of registering tools that always fail when called.
  • describe_video fails fast with one honest message (no false "set a Gemini key" hint).
  • media_describe honors its optional prompt argument (was silently discarded); the tool description no longer claims "NOT YET IMPLEMENTED".

Fixes

  • PUT /api/agents/{id}/update no longer silently clobbers omitted fields. The live-apply handler deserialized the body into a typed manifest whose container-level #[serde(default)] filled every omitted field with a non-empty default, defeating the value guards — so a partial PUT that set only name reset description/temperature/max_tokens/system_prompt/model/provider. Now it uses true PATCH semantics (apply only keys actually present in the submitted TOML). Regression test added.

All checks green: cargo build, cargo test --workspace (1,728), cargo clippy --all-targets -- -D warnings, cargo fmt --check.