Skip to content

v0.10.13

Choose a tag to compare

@hyoshi hyoshi released this 24 Jun 09:01
3c1f7b1

Added

  • Plugin guardrail parity (#324). Third-party MCP plugin tools now get the same guardrails as the built-in Google/Meta tools: server-side inputSchema validation (declared real-spend bounds enforced before dispatch), a STRATEGY.md reminder after a mutating plugin call, and executable rollback for a plugin-declared reversal that names a registered, non-destructive plugin tool.
  • Runtime-correct plugin reversal capture (#327, #328). New optional MCPReversibleToolProvider protocol: a plugin can implement capture_reversal to return a reversal carrying the actual entity id + the prior state it reads itself, captured before the mutation — so a plugin status toggle becomes reversible via rollback_apply, mirroring the built-in before-state capture. Plugins that don't opt in keep their static meta["mureo"]["reversal"] behavior.

Fixed

  • Reports view crash on missing account_id (#329). The read-only Reports dashboard crashed with KeyError: 'account_id' (empty summary + a per-poll traceback flood) for an agent-/hand-authored STATE.json whose platforms omit account_id. The tolerant read now defaults a missing account_id to "" so the platform's totals/periods still render, and the strict-fail → tolerant-retry path + per-entry skips now log at DEBUG instead of WARNING (supersedes #323).
  • Phantom plugin mutations (#325). A plugin that returned an "API error: ..." result without raising was promoted to action_log as a phantom mutation (and a phantom executable rollback). The plugin dispatch path now skips that promotion for an error-envelope result, matching built-in behavior.
  • STATE.json schema drift (#330, #331). Skills now pin the canonical STATE.json schema for the Claude Code Write path — tool output uses name, but STATE.json requires campaign_name, and platform entries require account_id — preventing the field-name drift that made the Reports view skip campaigns.

Upgrade with mureo upgrade (also refreshes deployed skills and restarts the always-on service), or pip install -U mureo.