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
Blog site_url is harder to leave blank, so the live "View Post" link works for more users. The live URL is built from a registered site's site_url — which previously could only be auto-detected from a committed CNAME or wrangler.toml route, missing the common case (Cloudflare Pages / Vercel / Netlify with the domain set in the host dashboard). Three changes close the gap: (1) inspect_blog_repo now also queries the GitHub Pages API (gh, credential-free) as a fallback site-URL source; (2) when it still can't be determined, both inspect_blog_repo and add_blog_site return needs_site_url: true + a hint, so the agent knows to ask the user instead of silently shipping posts with no live link; (3) a new edit_blog_site MCP tool lets you backfill or correct site_url / blog_url_pattern (and other fields) on an already-registered site without re-registering. Hosts whose domain lives only in a dashboard still can't be auto-derived — but the gap is now visible and fixable rather than a silent null.
Plugin config schemas can declare a generic select (dropdown) field. Rendered as a dropdown in the right-rail Plugins settings tab — the primitive behind the Author's Voice model picker below.
Author's Voice plugin: a model-tier picker, including a Gemini Pro option. The bundled AV plugin exposes a model-tier picker config field so the generation model can be chosen from the Plugins tab.
Changed
The build now always rebuilds bundled plugins, so a plugin source change can never ship or run stale.npm run build and scripts/prepublish.cjs both run the new scripts/build-plugins.cjs, which rebuilds every plugins/* that declares a build script. Previously the app build skipped the plugins and prepublish merely copied each plugin's existing dist/ (silently skipping any missing one) — so a plugin edit shipped stale in the npm bundle and ran stale after a local restart (the same stale-bundle class as the v0.20.0 skill bundle). The plugin build lives in prepublish, not only the build script, because npm publish runs prepublishOnly but not npm run build.
The blog compose view's success affordances now match the rest of the blog UX. The compose-footer Publish button reads Republish once the doc has been published (mirroring the file-tree right-click menu), and the "Published" status pill links to the live post (publishedUrl). The per-doc font / width / spacing style controls were removed from the footer: they only ever restyled the editor, never the published Astro output (which applies its own CSS), so they misrepresented what they did. The blog editor now inherits the global Appearance panel's typeface + spacing like every other editor, keeping a fixed readable measure. → adr/blog-compose-save-loop.md
Fixed
The Post-to-Blog success screen now links the live post (not a useless commit URL), and the sent badge flips immediately with no reload.post_to_blog has always returned the live URL as live_url and written blogContext.lastPublish.publishedUrl server-side, but two contract-drift bugs hid the payoff. (1) The success modal omitted live_url from its response type and instead re-derived a GitHub commit URL from owner/repo/commit, rendering a "View commit" CTA the operator can't use; it now consumes the server's live_url and renders a primary "View Post" link, with the commit demoted to a small secondary affordance (and a graceful fall-back to the commit/file when the site has no site_url). The compose-view "Published" pill had the same drift — it read lastPublish.url while the server writes publishedUrl — so its link was always dead; now fixed. (2) post_to_blog was the lone metadata-mutating write path that persisted state without broadcasting, so the file-tree ✓, the "Republish to Blog" context-menu label, and the compose pill all stayed stale until a manual reload. The writeback now broadcasts metadata-changed + documents-changed after a successful save — the same convention the core MCP tools follow — so every connected client (and every invocation path, modal or direct-agent) converges live. A failed writeback now surfaces its warning in the success screen instead of showing a clean ✓. → adr/plugin-metadata-broadcast.md