Skip to content

Writ coordinator v1.0.1

Choose a tag to compare

@benjamingarciaMTL benjamingarciaMTL released this 09 Aug 21:06
· 5 commits to main since this release
v1.0.1
1011a3a

A feature and fix release. No schema or configuration changes — upgrade by pulling and rebuilding.

git pull && docker compose up -d --build

Added

Attach a file while recording. When a page opens its file chooser mid-recording, the recorder now asks which stored file to hand it instead of dismissing the dialog empty. Pick one and recording continues; the step is saved bound to that file, so every replay uploads it again with no model in the loop.

The agent never receives your credentials. It is handed a short-lived signed URL for that one file (GET /files/{id}/signed-url, TTL from FILE_SIGNED_URL_TTL_SECONDS), minted only after ownership is checked server-side — an agent cannot authenticate as you, and so cannot read /files/{id}/content itself. Declining is always available and never blocks the page: the chooser is answered either way, and the step is simply recorded unbound rather than leaving the browser stuck on an open dialog.

Changed

A goal-directed crawl now spends its page budget best-first instead of breadth-first. crawl_targeting gained a lexical relevance score — token overlap between the goal and a link's URL path and anchor text, with discounted credit for stem and plural variants, a boost for include-path hits, and a mild depth penalty. It runs on the coordinator with no AI, no network call and no embeddings, so it costs nothing per link. The frontier is ranked before admission rather than filtered after, which is what makes the budget go to pages the goal actually names.

With no goal supplied the score reduces to shallow-first, reproducing the previous breadth-first sweep exactly — untargeted crawls behave as before. Links that match the goal not at all are still followed, because the page you want is often two hub pages away, but they draw from a bounded allowance so they cannot starve the on-topic links found later.

/map harvests a real candidate pool before ranking.

Fixed

Every image in a crawled article rendered as a broken tile. Two defects stacked: the markdown preview had no raw-HTML support, so an <img> tag arrived as literal text; and once it did render, the app's Content-Security-Policy (img-src 'self' data: blob:) refused the remote host anyway.

Markdown ![](…) and raw-HTML <img> now take one path, so the two cannot diverge. An image is embedded only when its URL is one the CSP actually permits — inline data:/blob: bytes, or this origin — and anything else degrades to its alt text, the caption the page's author wrote, which is real information rather than a broken tile. The CSP is deliberately not widened to arbitrary remote hosts: rendering a crawled page must not become a way to make your browser fetch from whatever that page names.

The onboarding tour's buttons could sit outside its own card, and a first-time operator could reach the last step and be unable to click Done. The dot strip is now a single progress track that flexes to nothing, the three actions travel as one non-shrinking group, and the panel is sized for the longest language rather than for English. The track carries role="progressbar", so progress is announced rather than being decorative markup a screen reader skipped.

Two invisible elements caused by an invalid utility class. Both asked for bg-border-border-strong; the token is border-strong, so the correct utility is bg-border-strong. Tailwind emits nothing for a class it cannot resolve and warns about nothing at build time, so both elements rendered with no background and simply were not visible.

Verification

Tagged only after scripts/release-e2e.sh passed against this commit: docker compose up → create the owner → install the published writ-agent release through the same one-liner the UI prints, checksum verified → record a workflow on a real browser → replay it → call it over REST and over MCP.

You can run the same gate yourself with ./scripts/release-e2e.sh.

The tag is signed — git verify-tag v1.0.1.

Full changelog: CHANGELOG.md · v1.0.0…v1.0.1