Skip to content

v0.19.0

Choose a tag to compare

@hyoshi hyoshi released this 18 Sep 05:50
e75842c

Added

  • mureo_state_get names the file it read (#767). mureo_state_get
    now carries path — the file the answer came from — which
    mureo_strategy_get already did, and both read tools now also carry the
    runtime's workspace_id and, when the runtime provides any, notices.
    A scheduled run whose cwd is one workspace and an operator terminal
    opened in another read different STATE.json files, and "the last check
    was 11 days ago" was uncheckable because nothing said which file that
    came from. Like server_now these are response fields only and are never
    persisted. RuntimeContext.notices is new (default empty) so an alternate
    runtime can put a warning in front of the agent instead of on stderr.
    /daily-check now opens its report with a Workspace: line and names
    the file when it declares the previous summary missing or stale, and
    stops at step 0 when notices is non-empty instead of diagnosing the
    wrong STATE.json.

  • Dispatcher-level journal (#758, phase 1). Every MCP tool call that
    enters the dispatcher now leaves exactly one append-only JSON line in
    JOURNAL.jsonl — every family (built-in Google / Meta / Search Console /
    analysis / context / learning / creative studio / rollback / batch /
    change-import, and every plugin) and every outcome: ok, a platform
    error envelope, an exception, a policy denial, an exclusion-preflight
    refusal, invalid arguments. Until now only plugin calls were recorded
    (plugin_audit.jsonl) and STATE.json's action_log received a small
    allow-list of native mutations, so the calls an operator most wants to
    see after the fact — the ones that were refused or that failed — were
    the ones nothing kept. The journal is the complete record; action_log
    keeps its job as the curated, strategy-aware summary of what actually
    changed, and plugin_audit.jsonl is untouched. Each record carries the
    tool, family, whether it was a mutation, the masked arguments, the
    outcome and its scrubbed reason, the duration, the open batch_id, the
    MCP client, and the mureo version — never a result body and never a
    credential: arguments go through the same masker and reasons through
    the same scrubber as the plugin audit log. The file is written 0600
    beside STATE.json / STRATEGY.md so the record travels with the
    workspace (a directory that is not a workspace falls back to
    ~/.mureo/journal.jsonl rather than being littered with a file nobody
    asked for); commit the workspace to git and you should add
    JOURNAL.jsonl to .gitignore. Read it with the new mureo journal
    (--last / --tool / --since / --failures / --mutations /
    --json / --path), and switch the whole thing off with
    MUREO_DISABLE_JOURNAL=1. No behaviour change for any caller: the
    dispatcher returns and raises exactly what it did before.

Fixed

  • Raw GoogleAdsException text in read-path error results.
    api_error_handler returned str(exc) for a failing read (*_list,
    *_report, …), which for a Google Ads error is the gRPC call repr —
    request metadata included. Mutation paths already curated the message
    (#603); reads now do too, through one shared exception_text, and the
    plugin-audit / journal scrubber additionally masks developer-token and
    authorization values.

  • docs/native-vs-official.md claimed Yahoo / LINE / Logly (and GA4) as
    native families
    (#762). Only Google Ads, Meta Ads and Search Console ship
    in this repository; the rest are provider-registry plugins or the official
    GA4 driver. Tool counts and the official-MCP sections re-verified against
    0.18.0, English and Japanese pages; architecture.md draws GA4 outside the
    native boxes.

  • mureo configure re-asked for Google OAuth on every run and could switch
    mureo-native off behind an unreadable service-account path
    (#761). The
    Google Ads auth slot is now skipped when a Google refresh token is already
    on disk (as the Search Console slot already was), with a Re-authorize
    Google
    button, and the "already authorized" note no longer vanishes when
    another auth slot follows it. A GOOGLE_APPLICATION_CREDENTIALS value must
    be an absolute path to a readable file before the official Google Ads
    provider counts as credentialed, so a mistyped path keeps mureo-native on
    and reaches the wizard's still_needs_credentials message.

  • Stale developer-token copy after the 0.18.0 sunset changes (#756). The
    mureo configure official-Google-Ads install hint no longer says a Developer
    Token is required — the service-account JSON path is the only credential the
    official server needs — the credentials.json samples in the authentication
    and Docker docs list the token last and mark it optional, and the
    plugin-authoring guide, the Amazon Ads docs and the code comments describe
    the shared Google credential as the OAuth client with the token as optional
    legacy. No behaviour change.