v0.10.13
Added
- Plugin guardrail parity (#324). Third-party MCP plugin tools now get the same guardrails as the built-in Google/Meta tools: server-side
inputSchemavalidation (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
MCPReversibleToolProviderprotocol: a plugin can implementcapture_reversalto 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 viarollback_apply, mirroring the built-in before-state capture. Plugins that don't opt in keep their staticmeta["mureo"]["reversal"]behavior.
Fixed
- Reports view crash on missing
account_id(#329). The read-only Reports dashboard crashed withKeyError: 'account_id'(empty summary + a per-poll traceback flood) for an agent-/hand-authored STATE.json whose platforms omitaccount_id. The tolerant read now defaults a missingaccount_idto""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 toaction_logas 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
Writepath — tool output usesname, but STATE.json requirescampaign_name, and platform entries requireaccount_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.