Releases: frontman-ai/frontman
v0.15.0
@frontman-ai/client
Minor Changes
-
#788
38b50d3Thanks @BlueHotDog! - feat: add framework-conditional browser tool registrationIntroduces
Client__ToolRegistry.forFrameworkwhich composes core browser
tools with framework-specific tools based on the active runtime framework.
Creates@frontman-ai/astro-browserpackage as the first framework browser
tool package (empty for now — actual tools land in #782).
Patch Changes
-
#796
9ef1ae0Thanks @BlueHotDog! - Add get_astro_audit browser tool that reads Astro dev toolbar accessibility and performance audit results -
d8d15c1Thanks @BlueHotDog! - fix: move ScrollButton outside contentRef to break ResizeObserver feedback loopThe scroll-to-bottom button was rendered inside the ResizeObserver-watched div.
Its 32px show/hide cycle (driven byisAtBottom) caused the ResizeObserver to
snap scroll position, which toggledisAtBottom, which toggled the button —
creating an infinite oscillation that made it impossible to scroll up. -
#800
a9eb0cfThanks @itayadler! - Fix WordPress Playground relay requests to preserve the leading/scope:...prefix so tool calls and source-location POSTs do not get redirected to GET. -
#741
3dd6c04Thanks @itayadler! - Strip rich text formatting from short clipboard pastes in the chat input so contentEditable inserts plain text consistently. -
#762
e963100Thanks @BlueHotDog! - Improve error UX: human-readable categorized errors, automatic retry with exponential backoff for transient failures, live countdown during retry, and manual retry button.
@frontman-ai/astro-browser
Minor Changes
- #796
9ef1ae0Thanks @BlueHotDog! - Add get_astro_audit browser tool that reads Astro dev toolbar accessibility and performance audit results
@frontman-ai/frontman-core
Patch Changes
@frontman-ai/frontman-protocol
Minor Changes
- #796
9ef1ae0Thanks @BlueHotDog! - Add get_astro_audit browser tool that reads Astro dev toolbar accessibility and performance audit results
Patch Changes
- #762
e963100Thanks @BlueHotDog! - Improve error UX: human-readable categorized errors, automatic retry with exponential backoff for transient failures, live countdown during retry, and manual retry button.
v0.14.0
Changed
- Package version bumps (see per-package changelogs for details)
v0.13.0
Changed
- Package version bumps (see per-package changelogs for details)
v0.11.0
@frontman-ai/client
Minor Changes
-
#568
63765edThanks @BlueHotDog! - Add Anthropic API key support as alternative to OAuth- Introduce Provider as first-class domain concept with Registry, Model, and Codex modules
- Centralize LLM wiring in ResolvedKey.to_llm_args with enforced context boundaries
- Drive image dimension constraints from Provider Registry
- Add Anthropic API key configuration UI in client settings
- Extract shared parsing helpers into domain modules
-
#555
18054d0Thanks @BlueHotDog! - Model ContentBlock as a discriminated union per ACP spec instead of a flat record with optional fields. Adds TextContent, ImageContent, AudioContent, ResourceLink, and EmbeddedResource variants with compile-time type safety. Wire format unchanged. -
#549
d489b10Thanks @itayadler! - Add support for GPT-5.4 and GPT-5.4 Pro models- Added GPT-5.4 to ChatGPT OAuth provider list (default model for ChatGPT users)
- Added GPT-5.4 and GPT-5.4 Pro to OpenRouter provider list
- Configured LLMDB capabilities with 1M context window for both models
- Added blog post announcing GPT-5.4 support
-
#604
cea1cffThanks @BlueHotDog! - Add ACP-compliant LoadSessionResponse type and unify model selection with SessionConfigOption. Replaces the bespoke /api/models REST endpoint with channel-based config option delivery via session/new, session/load responses and config_option_update notifications. Adds full type tree: SessionModeState, SessionMode, SessionConfigOption (grouped/ungrouped select with category enum), sessionLoadResult. Server pushes config updates after API key saves and OAuth connect/disconnect via PubSub. -
#598
418d99cThanks @BlueHotDog! - Add interactive question tool as a client-side MCP tool. Agents can ask users questions via a drawer UI with multi-step navigation, option selection, custom text input, and skip/cancel. Includes history replay ordering fixes (flush TextDeltaBuffer at message boundaries, use server timestamps for tool calls) and disconnect resilience: unresolved tool calls are re-dispatched on reconnect via MCP tools/call, tool results carry _meta with env API keys + model for agent resume after server restart, and persistence is moved to the SwarmAi runtime process (persist-then-broadcast) so data survives channel disconnects. -
#614
ec1f378Thanks @BlueHotDog! - Automatically sync new OAuth signups to the Resend Contacts audience. A newSyncResendContactOban worker is enqueued atomically with user creation and calls the Resend Contacts API to add the user to the configured audience, enabling product update emails and announcements. -
#560
8ea2a31Thanks @BlueHotDog! - Add tool suspension primitives to SwarmAi- New
ToolResult.suspended/1constructor for creating suspended tool results ToolCall.completed?/1returns false for suspended results; newToolCall.suspended?/1predicateStep.has_suspended_tools?/1checks if any tool calls in a step are suspendedrun_streaming/3andrun_blocking/3return{:suspended, loop_id}when a tool executor returns:suspendedRuntime.run/5supportson_suspendedlifecycle callback
- New
-
#587
08d8af6Thanks @BlueHotDog! - Replace suspension/resume with blocking interactive tools, fix agent message loss on session reload- Interactive tools (e.g. question) block with a 2-minute receive timeout instead of suspending the agent
- Remove ResumeContext, ETS suspension state, on_suspended callback, resume_execution
- Simplify add_tool_result to return {:ok, interaction} directly (no resume signals)
- Pass mcp_tool_defs through for execution mode lookups (interactive vs synchronous timeout)
- Fix race condition: flush TextDeltaBuffer before LoadComplete to prevent agent messages from being silently dropped during history replay
- Thread server timestamps through agent_message_chunk for correct message ordering
- Add timestamp to agent_message_chunk in ACP protocol schema
Patch Changes
-
#573
fbbc2f6Thanks @BlueHotDog! - Add ACP elicitation protocol support and enforce compliance across server, protocol, and client layers. Wire up elicitation schema conversion, typed status constants, AgentTurnComplete notification, and idempotent TurnCompleted state transitions. Fix flaky tests and nil description handling in elicitation schemas. -
#601
15607baThanks @BlueHotDog! - Make AgentMessageChunk content field required per ACP ContentChunk spec. Removes unnecessary option wrapper and simplifies downstream consumer code. -
#603
7e0c3b6Thanks @BlueHotDog! - ### Fixed- Annotation enrichment failures are no longer silent — the three async enrichment fields (
selector,screenshot,sourceLocation) now useresult<option<T>, string>instead ofoption<T>, capturing per-field error details for debugging. - Send-before-ready race condition — the submit button is now disabled while any annotation is still enriching, preventing empty annotation stubs from being sent to the LLM.
- Missing error dispatch on outer catch — when the entire
FetchAnnotationDetailspromise chain fails, aFailedstatus with error details is now dispatched instead of only logging to console.
Added
enrichmentStatusfield onAnnotation.t(Enriching | Enriched | Failed({error: string})) to track the enrichment lifecycle.hasEnrichingAnnotationsselector for gating the send button.- Visual feedback on annotation markers: pulsing badge while enriching, amber badge with error tooltip on failure.
- Status indicator in the selected element display (spinner while enriching, warning icon on failure).
- Annotation enrichment failures are no longer silent — the three async enrichment fields (
-
#542
94f2505Thanks @BlueHotDog! - Fix ACP spec deviation: make Plan.entries a required field instead of optional. The ACP spec defines entries as required, so the Option wrapper was incorrect. -
#608
48e688aThanks @BlueHotDog! - ### Fixed- Infinite reload loop with locale-based URL rewriting middleware — four root causes fixed for apps using locale middleware (e.g.
next-intl,@formatjs/intl):stripSuffixunconditionally appended a trailing slash to every path even without a/frontmansuffix, causing false-positive navigate intercepts. A newhasSuffixpredicate now gates the intercept correctly.- Server-side redirects (e.g.
/en/→/en) fire anavigateevent beforeonLoad, causing a trailing-slash difference in theurlprop to reload the iframe whilehasLoadedwas stillfalse. The url-prop effect now normalizes trailing slashes before comparing. - Session restore mounted all persisted task iframes eagerly (20+ concurrent requests). Inactive iframes now start with
src=""and load lazily on first activation. - The generated
proxy.ts(Next.js ≥16) used a path guard that missed/en/frontman/(the trailing-slash URL written bysyncBrowserUrl). The template now delegates directly to the core middleware viaawait frontman(req), matching themiddleware.tspattern. The/:path*/frontman/matcher is also added to all generated configs.
- Infinite reload loop with locale-based URL rewriting middleware — four root causes fixed for apps using locale middleware (e.g.
-
#522
79a0411Thanks @BlueHotDog! - Fix version check banner always showing in monorepo dev. Remove hardcoded serverVersion from marketing config and replace string equality with semver comparison so the banner only appears when the installed version is strictly behind the latest.
v0.10.0
@frontman/bindings
Patch Changes
- #461
746666eThanks @itayadler! - Enforce pure bindings architecture: extract all business logic from@frontman/bindingsto domain packages, delete dead code, rename Sentry modules, and fix circular dependency in frontman-protocol.
@frontman-ai/client
Minor Changes
-
#332
995762fThanks @BlueHotDog! - Replace element picker with annotation system. Users can now pin multiple elements on the page as numbered annotations, add/remove them freely, and reference them in chat. The server interaction schema and prompts are updated to handle annotation-based context instead of single element selections. -
#485
a5530b7Thanks @BlueHotDog! - Attach annotations to messages instead of task state. Annotations are now stored as serializable snapshots on eachMessage.Userrecord, rendered as compact chips in the conversation history. This fixes empty purple chat bubbles when sending annotation-only messages and preserves annotation context in the message timeline. -
#492
4e6c80fThanks @BlueHotDog! - Fix shallow UI edits by giving the agent visual context and structural awareness. Add component name detection (React/Vue/Astro) toget_domoutput, add UI & Layout Changes guidance to the system prompt with before/after screenshot workflow, add large-file comprehension strategy toread_file, and require edit summaries with trade-off analysis. Includes a manual test fixture (test/manual/vite-dashboard/) with a 740-line component to reproduce the original issue. -
#496
4641751Thanks @BlueHotDog! - Show in-browser banner when a newer integration package is available. Integration packages now report their real version (instead of hardcoded "1.0.0"), the server proxies npm registry lookups with a 30-minute cache, and the client displays a dismissible amber banner with an "Update" button that prompts the LLM to perform the upgrade. -
#461
746666eThanks @itayadler! - Add Vue 3 + Vite support: source location capture in.vueSFCs via a Vite transform plugin, client-side Vue component instance detection for click-to-source, and a Vue E2E test fixture with installer integration.
Patch Changes
-
#463
2179444Thanks @BlueHotDog! - Fix trailing-slash 404 on Frontman API routes behind reverse proxy and mixed-content URL scheme mismatch when running behind TLS-terminating proxy (Caddy). Add containerized worktree infrastructure with Podman pods for parallel isolated development. -
#486
2f979b4Thanks @BlueHotDog! - Fix framework-specific prompt guidance never being applied in production. The middleware sent display labels like "Next.js" but the server matched on "nextjs", so 120+ lines of Next.js expert guidance were silently skipped. Introduces aFrameworkmodule as single source of truth for framework identity, normalizes at the server boundary, and updates client adapters to send normalized IDs. -
#465
fe1e276Thanks @BlueHotDog! - Fix selection mode cursor reverting to pointer/hand on interactive elements inside iframe. Replaced body-level inline cursor style with an injected<style>tag using* { cursor: crosshair !important; }so that buttons, links, and inputs can't override the crosshair during selection mode. -
#472
0e02a6aThanks @BlueHotDog! - Migrate direct Console.* calls to structured @frontman/logs logging in client-side packages. Replaces ~40 Console.log/error/warn calls across 11 files with component-tagged, level-filtered Log.info/error/warning/debug calls. Extends LogComponent.t with 10 new component variants for the migrated modules. -
#488
453bcd5Thanks @BlueHotDog! - Replace manual Dict JSON building with Sury schema types in annotation meta builders for compile-time field name safety. -
#482
604fe62Thanks @BlueHotDog! - Track all tool execution failures in Sentry. Adds error reporting for backend tool soft errors, MCP tool errors/timeouts, agent execution failures/crashes, and JSON argument parse failures. Normalizes backend tool result status from "error" to "failed" to fix client-side silent drop, and replaces silent catch-all in the client with a warning log for unexpected statuses.
@frontman-ai/astro
Minor Changes
- #496
4641751Thanks @BlueHotDog! - Show in-browser banner when a newer integration package is available. Integration packages now report their real version (instead of hardcoded "1.0.0"), the server proxies npm registry lookups with a 30-minute cache, and the client displays a dismissible amber banner with an "Update" button that prompts the LLM to perform the upgrade.
Patch Changes
-
#463
2179444Thanks @BlueHotDog! - Fix trailing-slash 404 on Frontman API routes behind reverse proxy and mixed-content URL scheme mismatch when running behind TLS-terminating proxy (Caddy). Add containerized worktree infrastructure with Podman pods for parallel isolated development. -
#438
1648416Thanks @itayadler! - Add Playwright + Vitest end-to-end test infrastructure with test suites for Next.js, Astro, and Vite. Tests validate the core product loop: open framework dev server, navigate to/frontman, log in, send a prompt, and verify the AI agent modifies source code. -
#486
2f979b4Thanks @BlueHotDog! - Fix framework-specific prompt guidance never being applied in production. The middleware sent display labels like "Next.js" but the server matched on "nextjs", so 120+ lines of Next.js expert guidance were silently skipped. Introduces aFrameworkmodule as single source of truth for framework identity, normalizes at the server boundary, and updates client adapters to send normalized IDs. -
#461
746666eThanks @itayadler! - Enforce pure bindings architecture: extract all business logic from@frontman/bindingsto domain packages, delete dead code, rename Sentry modules, and fix circular dependency in frontman-protocol.
@frontman-ai/frontman-client
Patch Changes
-
#455
ed92762Thanks @BlueHotDog! - Filter third-party errors from Frontman's internal Sentry reporting. Extracts shared Sentry types, config (DSN, internal-dev detection), and abeforeSendfilter into@frontman/bindingsso all framework integrations share a single source of truth. The filter inspects stacktrace frames and drops events that don't originate from Frontman code, preventing noise from framework internals (e.g. Next.js/Turbopack source-map WASM fetch failures). Both@frontman-ai/nextjsand@frontman-ai/frontman-clientnow use this shared filter. -
#461
746666eThanks @itayadler! - Enforce pure bindings architecture: extract all business logic from@frontman/bindingsto domain packages, del...
v0.9.0
@frontman/client
Patch Changes
- #437
bc43aecThanks @itayadler! - Fix chatbox rendering jank during streaming by adding React.memo to leaf components, buffering text deltas with requestAnimationFrame, removing unnecessary CSS transitions, and switching scroll resize mode to instant.
@frontman/frontman-client
Patch Changes
- #452
2d87685Thanks @BlueHotDog! - Fix 8 Dependabot security alerts by upgrading Sentry SDK from v8 to v9, sentry-testkit to v6, and adding yarn resolutions for vulnerable transitive dependencies (rollup, basic-ftp, minimatch, devalue, hono).
@frontman/frontman-core
Minor Changes
- #434
40c3932Thanks @BlueHotDog! - Addlist_treetool for project structure discovery during MCP initialization. The tool provides a compact, monorepo-aware directory tree view that is injected into the system prompt and available as an on-demand callable tool. Supports workspace detection (package.json workspaces, pnpm, turbo, nx), smart noise filtering, and git-aware file listing.
@frontman-ai/nextjs
Patch Changes
- #452
2d87685Thanks @BlueHotDog! - Fix 8 Dependabot security alerts by upgrading Sentry SDK from v8 to v9, sentry-testkit to v6, and adding yarn resolutions for vulnerable transitive dependencies (rollup, basic-ftp, minimatch, devalue, hono).
v0.8.0
@frontman/client
Minor Changes
- #426
1b6ececThanks @BlueHotDog! - URL-addressable preview: persist iframe URL in browser address bar using suffix-based routing. Navigation within the preview iframe is now reflected in the browser URL, enabling shareable deep links and browser back/forward support.
@frontman-ai/astro
Minor Changes
- #426
1b6ececThanks @BlueHotDog! - URL-addressable preview: persist iframe URL in browser address bar using suffix-based routing. Navigation within the preview iframe is now reflected in the browser URL, enabling shareable deep links and browser back/forward support.
@frontman/frontman-core
Minor Changes
- #426
1b6ececThanks @BlueHotDog! - URL-addressable preview: persist iframe URL in browser address bar using suffix-based routing. Navigation within the preview iframe is now reflected in the browser URL, enabling shareable deep links and browser back/forward support.
@frontman-ai/nextjs
Minor Changes
- #426
1b6ececThanks @BlueHotDog! - URL-addressable preview: persist iframe URL in browser address bar using suffix-based routing. Navigation within the preview iframe is now reflected in the browser URL, enabling shareable deep links and browser back/forward support.
@frontman-ai/vite
Minor Changes
- #426
1b6ececThanks @BlueHotDog! - URL-addressable preview: persist iframe URL in browser address bar using suffix-based routing. Navigation within the preview iframe is now reflected in the browser URL, enabling shareable deep links and browser back/forward support.
v0.7.0
@frontman/bindings
Minor Changes
- #425
3198368Thanks @BlueHotDog! - Astro dev toolbar icon now navigates to the Frontman UI route instead of logging diagnostics. Expanded Astro bindings with full dev toolbar API coverage.
Patch Changes
- #415
38cff04Thanks @itayadler! - Add Lighthouse tool for web performance auditing. Thelighthousetool runs Google Lighthouse audits on URLs and returns scores (0-100) for performance, accessibility, best practices, and SEO categories, along with the top 3 issues to fix in each category. In DevPod environments, URLs are automatically rewritten to localhost to avoid TLS/interstitial issues. The Next.js config now falls back to PHX_HOST for automatic host detection in DevPod setups.
@frontman/context-loader
Patch Changes
@frontman-ai/astro
Minor Changes
-
#425
3198368Thanks @BlueHotDog! - Astro dev toolbar icon now navigates to the Frontman UI route instead of logging diagnostics. Expanded Astro bindings with full dev toolbar API coverage. -
#398
8269bb4Thanks @itayadler! - Addedit_filetool with 9-strategy fuzzy text matching for robust LLM-driven file edits. Framework-specific wrappers (Vite, Astro, Next.js) check dev server logs for compilation errors after edits. Addget_logstool to Vite and Astro for querying captured console/build output. -
#418
930669cThanks @itayadler! - Extract shared middleware (CORS, UI shell, request handlers, SSE streaming) into frontman-core, refactor Astro/Next.js/Vite adapters to thin wrappers
@frontman/frontman-core
Minor Changes
-
#398
8269bb4Thanks @itayadler! - Addedit_filetool with 9-strategy fuzzy text matching for robust LLM-driven file edits. Framework-specific wrappers (Vite, Astro, Next.js) check dev server logs for compilation errors after edits. Addget_logstool to Vite and Astro for querying captured console/build output. -
#418
930669cThanks @itayadler! - Extract shared middleware (CORS, UI shell, request handlers, SSE streaming) into frontman-core, refactor Astro/Next.js/Vite adapters to thin wrappers -
#415
38cff04Thanks @itayadler! - Add Lighthouse tool for web performance auditing. Thelighthousetool runs Google Lighthouse audits on URLs and returns scores (0-100) for performance, accessibility, best practices, and SEO categories, along with the top 3 issues to fix in each category. In DevPod environments, URLs are automatically rewritten to localhost to avoid TLS/interstitial issues. The Next.js config now falls back to PHX_HOST for automatic host detection in DevPod setups.
Patch Changes
-
#350
0cb1e38Thanks @BlueHotDog! - Extract Swarm agent execution framework from frontman_server into standalone swarm_ai Hex package. Rename all Swarm._ modules to SwarmAi._ and update telemetry atoms accordingly. frontman_server now depends on swarm_ai via path dep for monorepo development. -
#416
893684eThanks @BlueHotDog! - Fix swarm_ai documentation: correct broken examples, add missing @doc/@moduledoc annotations, fix inaccurate descriptions, and add README.md for Hex publishing. Bump swarm_ai to 0.1.1. -
Updated dependencies [
3198368,38cff04]:- @frontman/bindings@0.3.0
@frontman-ai/nextjs
Minor Changes
-
#398
8269bb4Thanks @itayadler! - Addedit_filetool with 9-strategy fuzzy text matching for robust LLM-driven file edits. Framework-specific wrappers (Vite, Astro, Next.js) check dev server logs for compilation errors after edits. Addget_logstool to Vite and Astro for querying captured console/build output. -
#418
930669cThanks @itayadler! - Extract shared middleware (CORS, UI shell, request handlers, SSE streaming) into frontman-core, refactor Astro/Next.js/Vite adapters to thin wrappers -
#415
38cff04Thanks @itayadler! - Add Lighthouse tool for web performance auditing. Thelighthousetool runs Google Lighthouse audits on URLs and returns scores (0-100) for performance, accessibility, best practices, and SEO categories, along with the top 3 issues to fix in each category. In DevPod environments, URLs are automatically rewritten to localhost to avoid TLS/interstitial issues. The Next.js config now falls back to PHX_HOST for automatic host detection in DevPod setups.
@frontman-ai/vite
Minor Changes
-
#398
8269bb4Thanks @itayadler! - Addedit_filetool with 9-strategy fuzzy text matching for robust LLM-driven file edits. Framework-specific wrappers (Vite, Astro, Next.js) check dev server logs for compilation errors after edits. Addget_logstool to Vite and Astro for querying captured console/build output. -
#418
930669cThanks @itayadler! - Extract shared middleware (CORS, UI shell, request handlers, SSE streaming) into frontman-core, refactor Astro/Next.js/Vite adapters to thin wrappers
v0.6.0
@frontman/bindings
Minor Changes
-
#405
8a68462Thanks @BlueHotDog! - ### Added- Image saving via write_file — LLM can now save user-pasted images to disk using a new
image_refparameter referencing attachment URIs (attachment://{id}/{filename}). The browser MCP server interceptswrite_filecalls containingimage_ref, resolves image data from client state, and rewrites to base64 content before forwarding to the dev-server. - Astro component props injection — New Vite plugin that captures component display names and prop values during Astro rendering, giving the AI agent richer context when users click elements in the browser.
- ToolNames module — Centralized all 12 tool name constants (7 server + 5 browser) into a shared
ToolNamesmodule infrontman-protocol, eliminating hardcoded string literals across packages.
Changed
write_filetool now accepts optionalencodingparam ("base64"for binary writes) and validates mutual exclusion betweencontentandimage_ref.AstroAnnotations.locfield changed fromstringtoNullable.t<string>to handle missingdata-astro-source-locattributes.- MCP server uses
switchpattern matching consistently instead ofif/elsechains. - Task reducer uses
Option.getOrThrowconsistently forid,mediaType, andfilenamefields (crash-early philosophy). - Vite props injection plugin scoped to dev-only (
apply: 'serve') withmarkHTMLStringguard for Astro compatibility.
- Image saving via write_file — LLM can now save user-pasted images to disk using a new
@frontman/client
Minor Changes
-
#401
3f3fd3eThanks @BlueHotDog! - Add browser element interaction tools:get_interactive_elementsfor discovering interactive elements via accessibility tree analysis, andinteract_with_elementfor clicking, hovering, or focusing elements by CSS selector, role+name, or text content. -
#405
8a68462Thanks @BlueHotDog! - ### Added- Image saving via write_file — LLM can now save user-pasted images to disk using a new
image_refparameter referencing attachment URIs (attachment://{id}/{filename}). The browser MCP server interceptswrite_filecalls containingimage_ref, resolves image data from client state, and rewrites to base64 content before forwarding to the dev-server. - Astro component props injection — New Vite plugin that captures component display names and prop values during Astro rendering, giving the AI agent richer context when users click elements in the browser.
- ToolNames module — Centralized all 12 tool name constants (7 server + 5 browser) into a shared
ToolNamesmodule infrontman-protocol, eliminating hardcoded string literals across packages.
Changed
write_filetool now accepts optionalencodingparam ("base64"for binary writes) and validates mutual exclusion betweencontentandimage_ref.AstroAnnotations.locfield changed fromstringtoNullable.t<string>to handle missingdata-astro-source-locattributes.- MCP server uses
switchpattern matching consistently instead ofif/elsechains. - Task reducer uses
Option.getOrThrowconsistently forid,mediaType, andfilenamefields (crash-early philosophy). - Vite props injection plugin scoped to dev-only (
apply: 'serve') withmarkHTMLStringguard for Astro compatibility.
- Image saving via write_file — LLM can now save user-pasted images to disk using a new
@frontman/context-loader
Patch Changes
- Updated dependencies [
8a68462]:- @frontman/bindings@0.2.0
@frontman-ai/astro
Minor Changes
-
#405
8a68462Thanks @BlueHotDog! - ### Added- Image saving via write_file — LLM can now save user-pasted images to disk using a new
image_refparameter referencing attachment URIs (attachment://{id}/{filename}). The browser MCP server interceptswrite_filecalls containingimage_ref, resolves image data from client state, and rewrites to base64 content before forwarding to the dev-server. - Astro component props injection — New Vite plugin that captures component display names and prop values during Astro rendering, giving the AI agent richer context when users click elements in the browser.
- ToolNames module — Centralized all 12 tool name constants (7 server + 5 browser) into a shared
ToolNamesmodule infrontman-protocol, eliminating hardcoded string literals across packages.
Changed
write_filetool now accepts optionalencodingparam ("base64"for binary writes) and validates mutual exclusion betweencontentandimage_ref.AstroAnnotations.locfield changed fromstringtoNullable.t<string>to handle missingdata-astro-source-locattributes.- MCP server uses
switchpattern matching consistently instead ofif/elsechains. - Task reducer uses
Option.getOrThrowconsistently forid,mediaType, andfilenamefields (crash-early philosophy). - Vite props injection plugin scoped to dev-only (
apply: 'serve') withmarkHTMLStringguard for Astro compatibility.
- Image saving via write_file — LLM can now save user-pasted images to disk using a new
@frontman/frontman-client
Minor Changes
-
#405
8a68462Thanks @BlueHotDog! - ### Added- Image saving via write_file — LLM can now save user-pasted images to disk using a new
image_refparameter referencing attachment URIs (attachment://{id}/{filename}). The browser MCP server interceptswrite_filecalls containingimage_ref, resolves image data from client state, and rewrites to base64 content before forwarding to the dev-server. - Astro component props injection — New Vite plugin that captures component display names and prop values during Astro rendering, giving the AI agent richer context when users click elements in the browser.
- ToolNames module — Centralized all 12 tool name constants (7 server + 5 browser) into a shared
ToolNamesmodule infrontman-protocol, eliminating hardcoded string literals across packages.
Changed
write_filetool now accepts optionalencodingparam ("base64"for binary writes) and validates mutual exclusion betweencontentandimage_ref.AstroAnnotations.locfield changed fromstringtoNullable.t<string>to handle missingdata-astro-source-locattributes.- MCP server uses
switchpattern matching consistently instead ofif/elsechains. - Task reducer uses
Option.getOrThrowconsistently forid,mediaType, andfilenamefields (crash-early philosophy). - Vite props injection plugin scoped to dev-only (
apply: 'serve') withmarkHTMLStringguard for Astro compatibility.
- Image saving via write_file — LLM can now save user-pasted images to disk using a new
@frontman/frontman-core
Minor Changes
-
#405
8a68462Thanks @BlueHotDog! - ### Added- Image saving via write_file — LLM can now save user-pasted images to disk using a new
image_refparameter referencing attachment URIs (attachment://{id}/{filename}). The browser MCP server interceptswrite_filecalls containingimage_ref, resolves image data from client state, and rewrites to base64 content before forwarding to the dev-server. - Astro component props injection — New Vite plugin that captures component display names and prop values during Astro rendering, giving the AI agent richer context when users click elements in the browser.
- ToolNames module — Centralized all 12 tool name constants (7 server + 5 browser) into a shared
ToolNamesmodule infrontman-protocol, eliminating hardcoded string literals across packages.
Changed
write_filetool now accepts optionalencodingparam ("base64"for binary writes) and validates mutual exclusion betweencontentandimage_ref.AstroAnnotations.locfield changed fromstringtoNullable.t<string>to handle missingdata-astro-source-locattributes.- MCP server uses
switchpattern matching consistently instead ofif/elsechains. - Task reducer uses
Option.getOrThrowconsistently forid,mediaType, andfilenamefields (crash-early philosophy). - Vite props injection plugin scoped to dev-only (
apply: 'serve') withmarkHTMLStringguard for Astro compatibility.
- Image saving via write_file — LLM can now save user-pasted images to disk using a new
Patch Changes
- Updated dependencies [
8a68462]:- @frontman/frontman-protocol@0.3.0
- @frontman/bindings@0.2.0
@frontman/frontman-protocol
Minor Changes
- #405
8a68462Thanks @BlueHotDog! - ### Added- Image saving via write_file — LLM can now save user-pasted images to disk using a new
image_refparameter referencing attachment URIs (attachment://{id}/{filename}). The browser MCP server interceptswrite_filecalls containingimage_ref, resolves image data from client state, and rewrites to base64 content before forwarding to the dev-server. - **A...
- Image saving via write_file — LLM can now save user-pasted images to disk using a new
v0.5.0
@frontman/bindings
Patch Changes
- #393
d4cd503Thanks @BlueHotDog! - Fix Astro integration defaulting to dev host instead of production when FRONTMAN_HOST is not set, which broke production deployments. Also add stderr maxBuffer enforcement to spawnPromise to prevent unbounded memory growth from misbehaving child processes.
@frontman/client
Minor Changes
-
#391
9bcc19aThanks @itayadler! - Add Heap Analytics integration with automatic user identification. Heap is initialized in the client bundle with environment-aware env IDs (dev vs production). When a user session connects, the client fetches the user profile and callsheap.identify()andheap.addUserProperties()with the user's ID, email, and name. The server's/api/user/meendpoint now returnsidandnamein addition toemail, and the user profile is stored in global state for reuse across components. -
#368
ef6f38dThanks @BlueHotDog! - Add device mode / viewport emulation to the web preview. Developers can now simulate specific device viewports (phones, tablets, desktop) with 12 built-in presets, custom dimensions, and orientation toggle. The preview iframe auto-scales to fit the available space with a checkerboard background. Device mode state is per-task, so switching tasks restores that task's viewport. A newset_device_modeMCP tool allows the AI agent to programmatically change viewports with actions for presets, custom sizes, responsive mode, orientation, and listing available devices.
Patch Changes
- #394
40abf99Thanks @itayadler! - Fix web preview URL bar syncing so iframe link navigations update the displayed URL without forcing iframe reloads. The URL input is now editable and supports Enter-to-navigate while preserving in-iframe navigation state.
@frontman/context-loader
Patch Changes
- Updated dependencies [
d4cd503]:- @frontman/bindings@0.1.1
@frontman-ai/astro
Patch Changes
- #393
d4cd503Thanks @BlueHotDog! - Fix Astro integration defaulting to dev host instead of production when FRONTMAN_HOST is not set, which broke production deployments. Also add stderr maxBuffer enforcement to spawnPromise to prevent unbounded memory growth from misbehaving child processes.
@frontman/frontman-core
Patch Changes
-
#388
cf885f6Thanks @itayadler! - fix: resolve Dependabot security vulnerabilitiesReplace deprecated
vscode-ripgrepwith@vscode/ripgrep(same API, officially renamed package). Add yarn resolutions for 15 transitive dependencies to patch known CVEs (tar, @modelcontextprotocol/sdk, devalue, node-forge, h3, lodash, js-yaml, and others). Upgrade astro, next, and jsdom to patched versions. -
Updated dependencies [
d4cd503]:- @frontman/bindings@0.1.1