blume@1.6.6
Patch Changes
- 2c373ef: Stop repeating
APIin generated descriptions when the name already says it. API reference overview and operation meta descriptions no longer turn a spec titledExample API(orPayments APIs,Example API v2) intoExample API API, and the generated/openapi.jsontitle no longer doubles the word for a site titled the same way. - 520a660: Write the deploy artifacts from the integration’s
astro:build:donehook instead of afterastro buildreturns: the search index and hosted-provider sync,llms.txt,sitemap.xml,robots.txt,agent-readability.json, the.well-knowndiscovery files, Agent Skills, and the platform_redirects/_headersfiles now land in the directory Astro reports as its client output during the build.blume buildoutput is unchanged. An ejected app keeps producing all of them from plainastro build— its config tells the hook to scan the project — soblume ejectno longer warns that they are lost. - a63c10e: Serve the prerendered per-page JSON documents on Cloudflare server builds whose requests run through the Worker: the wrapper answers them from the asset binding (conditional revalidations included) instead of letting Astro hand them to the
/api/catch-all, and.jsonfiles stay on the static path under a deployment base or the coarse worker-first fallback. - 1197e8b: Opt Cloudflare server builds out of Astro sessions with
session: falseinstead of configuring an in-memory session driver. Blume never readsAstro.session; the driver only existed to keep@astrojs/cloudflarefrom declaring aSESSIONKV binding, which Astro’s opt-out now does directly. - 1328384: Declare Blume’s page front-matter schema on the generated content collections, so
entry.datain the runtime is typed and normalized the same way the scan’s page metadata is. Custom front-matter keys pass through, and a page the scan already dropped as invalid resolves to defaults instead of failing Astro’s content sync. - 4f5660b: Honor
Accept: text/markdownand send the homepage agent-discoveryLinkheader inblume devwhendeployment.baseis set. Astro’s dev server rewrites the base off the URL before Blume’s handler runs, so stripping it a second time left every request unmatched. - bbdaa55: Keep the dev server up across page adds, removes, and folder renames.
blume devused to stop and recreate the Astro server on every route-set change; it now asks Astro’s content layer to re-sync (refreshContent) and republishes the Markdown-negotiation routes in memory, so the generated config no longer changes with content and Astro never restarts in place for it. A moved page answers under its new route within a second, and editing an<include>partial re-syncs the store the same way instead of touching page mtimes. - 6b9f367: Drop the
image-sizedependency. Its ICNS, HEIF/AVIF, and JXL parsers can be driven into an infinite loop by a crafted file with a zero-sized box or entry, which would hangblume auditor a build, and no patched release exists. The audit’s Open Graph image checks now read dimensions through sharp, the image optimizer the build already ships, which covers the same formats and rejects malformed input instead of looping on it. SVG logos for the header and the OG card are measured by a small root-tag parser with the same rules as before: explicitwidth/height, aviewBoxfallback, and CSS units at 96dpi. - 7ee1100: Show Blume’s config and content errors in the browser error overlay during
blume devon published installs. The dev-server handle was a module-level variable, and the CLI bundle and the copy of the integration Vite loads are separate module instances, so the overlay only ever worked inside the Blume repository itself. The handle now lives onglobalThis, like the runtime data registry. - 6b26322: Improve Ask AI grounding for conversational follow-ups and long structured pages. A bare follow-up (“Why?”, “And then?”) retrieves from the earlier user turn, a short follow-up keeps that turn’s best match in view behind its own, and a question that names its subject always leads. Excerpts now keep whole Markdown sections — heading, list, and code fence intact — chosen by how well they cover the question rather than by length, and pages are parsed once per endpoint instead of per request. A closing code fence must now be bare, as CommonMark requires, so a same-length fence line with an info string inside an open block no longer ends it.
- 8d32eb3: Keep
<include>-bearing Markdown pages fresh through Astro’s documented loader context instead of patching the content store’s writes. The collection loader now records a digest of each including page’s partials in the collection’s meta store and evicts the page’s entry when that digest changes, so Astro’s glob loader re-renders it on the next sync exactly as it would a new file. Same behavior on a partial edit in dev and on a warm-cache production build; no more replaying the store’s private import bookkeeping. - e9cd88f: Declare the
blume:*virtual modules through Astro’sinjectTypeshook instead of a generatedsrc/env.d.ts. The declarations now live under.astro/integrations/blume/and are referenced from Astro’s owntypes.d.ts, so every project that mounts the integration — the hidden runtime and an ejected app alike — gets them without a hand-written file. A projecttsconfig.jsonno longer needs.blume/src/env.d.tsin itsinclude. - 3e58b91: Load only the selected CLI command, reducing startup time for every command.
- f04afce: Read the Vercel function bundle audit’s imports with
es-module-lexerinstead of a text scan, so code samples inside the MCP data chunk (a page quotingimport { config } from 'dotenv'orawait import('bcryptjs')) no longer failblume buildas missing packages. - 3422d29: Read provider secrets through Astro’s
getSecret()fromastro:env/serverinstead ofprocess.env: the Ask AI endpoint’s provider key (and the AI Gateway key, now passed to the gateway provider explicitly), the Mixedbread search endpoint’s key, and<GithubInfo>’sGITHUB_TOKEN. Each adapter supplies secrets its own way, so a Cloudflare deployment’s Worker bindings now reach these endpoints the same as environment variables do on Node and Vercel. - 9dde9cb: Default
<html lang>anddirin every document shell to the locale Astro resolves from the URL (Astro.currentLocale), then the site’s default locale. A custompages/page or a Scalar reference page under/fr/rendered aslang="en"unless it passedlocaleitself; the content catch-all still passes the manifest’s locale, which also covers fallback pages. - 8bbf9a1: Set Astro’s
trailingSlash: "never"in the generated config instead of hand-splicing a trailing-slash redirect into the Vercel routing config. Blume already treats the slashless URL as the one address for a page (canonicals, sitemap, hreflang), so Astro now enforces it too:blume devanswers/guide/with a 404 that names the setting, an on-demand server route redirects to/guide, and the Vercel adapter emits the same 308 route from the config that Blume used to splice by hand. Prerendered pages on static hosts are served exactly as before.