You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Changed
The mcp dependency floor moves to >=1.8.0 (#863). mureo.learning.federation now imports its MCP client transports at
module level, and 1.8.0 is the first mcp release that ships mcp.client.streamable_http. With an older mcp the module now fails
to import instead of failing on the first http source.
mureo.rollback, mureo.policy, mureo.amazon_ads and mureo.core
no longer import mureo.mcp (#863). The failure-envelope reader
(failure_of, is_error_result, is_auth_error_result, Failure, FAILURE_STATUSES, API_ERROR_PREFIX, API_ERROR_CODE) now lives in mureo.core.tool_failure; every name is still importable from mureo.mcp._helpers as the same object. mureo.mcp.server.plugin_reversal_param_keys
is removed: the server publishes its plugin reversal keys to the rollback
registry through mureo.rollback.planner.set_plugin_reversal_keys at load,
so a caller outside the server that plans plugin reversals must import mureo.mcp.server first (mureo rollback list / show do, only when they
run).
The built-in platform tool names the learning-reset pre-flight uses are
likewise published to mureo.policy.learning_reset by the server
(set_builtin_platform_tool_names); reading them before the server has
loaded raises instead of answering with an empty set.
mureo.core.credential_source is the new home of the credential-source
API (#863). The old path, mureo.mcp.credential_source, still works and
re-exports the same objects (one context variable), but it imports the
whole MCP server; the new path does not. Workspace account scoping
(mureo.core.account_scope) and the BYOD-or-live client factory
(mureo.client_factory) moved below mureo.mcp too, so the analytics
adapters and change import no longer load the MCP server to open a client.
Visible side effects of the move: the credential-source logger is now named mureo.core.credential_source, and CredentialSource.__module__ (and that
of the other credential-source classes and functions) is mureo.core.credential_source.
The configure OAuth wizard moved from mureo.cli.web_auth to mureo.web.auth_wizard (#863); the old module path is removed. mureo.web.oauth_bridge imports it at load, so code that patched WebAuthWizard for the bridge patches mureo.web.oauth_bridge.WebAuthWizard. mureo.meta_ads no longer imports mureo.auth or mureo.auth_setup:
the Meta OAuth scopes and the Graph HTTP timeout are public as mureo.meta_ads.accounts.META_OAUTH_SCOPES / META_HTTP_TIMEOUT_SECONDS (replacing the private mureo.auth_setup._META_OAUTH_SCOPES and mureo.meta_ads.accounts._HTTP_TIMEOUT / _META_GRAPH_API_BASE), and the
log-line bounding helpers are public as mureo.logging_setup.truncate_text / one_log_line. The legacy
credentials location has one definition, mureo.core.secret_store.default_credentials_path(), and mureo.core.runtime_context.runtime_credentials_path() now takes an
optional default that falls back to it.
mureo.web no longer imports the configure server at load (#863). mureo.web.ConfigureWizard and mureo.web.run_configure_wizard are still
importable (__all__ and from mureo.web import ... are unchanged) and
resolve to the mureo.web.server objects on first access. A fresh import mureo.web now loads 26 modules instead of 549 (sys.modules after
the import minus a bare interpreter's). Two visible side effects: import mureo.web alone no longer sets mureo.web.server as a package
attribute (import the submodule explicitly, import mureo.web.server; first
access of either name also sets it), and dir(mureo.web) no longer lists ConfigureWizard / run_configure_wizard. DEFAULT_CONFIGURE_PORT lives in mureo.web.instance
(mureo.web.server.DEFAULT_CONFIGURE_PORT is the same object), so mureo.web.service no longer loads the server either. Installed-distribution
discovery is public in mureo.installed_packages (canonicalise, is_mureo_package, discover_all_mureo_packages, replacing the private mureo.cli.upgrade_cmd._canonicalise / _is_mureo_package / _discover_all_mureo_packages), and skill-version detection moved from mureo.web.status_collector to mureo.cli.skill_status (SKILLS_MISSING, SKILLS_STALE, SKILLS_CURRENT, SkillsStatus, and detect_workflow_skills, formerly _detect_workflow_skills). Code that
patched mureo.web.service.is_managed_service for the dashboard's restart
patches mureo.web.handlers.is_managed_service.
The MCP server now fails to start if the bundled Amazon money-path table
cannot be imported (#863). mureo.mcp._plugin_declarations imports mureo.amazon_ads.money_paths at load; previously a failed import logged a
warning and the server started without the bridged money declarations.
Registering each declaration is still best-effort.
Fixed
A hand-edited platform, campaign or ad entry no longer blocks every
write to STATE.json (#881). A platform without account_id, a campaigns value that is not a list, or a campaign or ad missing a
required field made every write to that workspace fail — sync, action_log appends, decisions, the ops history switch — while the
dashboard kept rendering. Such entries are now read (missing values
empty) and written back as found, with mureo's own changes applied on
top. Keys mureo does not know on these entries are kept on every write
instead of being dropped — except on a campaign in the legacy top-level campaigns list matched by an upsert, which is replaced whole as before
(that match is platform-blind). The read-only Reports view now shows such
a campaign with the missing fields empty instead of skipping it, so its
campaign count includes it. mureo repair no longer offers an entry
holding a hand-written campaigns value or unknown keys as an empty stub.
A platforms value, a platform value or a document that is not a JSON
object now fails with a ValueError naming the section instead of an AttributeError.