- Publish the compatibility reference in the VitePress site and link localized AI guides to the canonical English page
- Correct current Anthropic and credential-storage behavior
- Make CORS, streaming, pricing, context, and reasoning measurements reproducible and security-safe
The probe behind this page used max_tokens 2000, which starves reasoning
models: they spend the whole budget thinking and emit no tool calls, with
finish_reason length and no error. That looks identical to a model that
cannot call tools, and two models were wrongly marked "avoid" because of it.
Re-ran every Scaleway model at 16384. All five are clean -- qwen3.6-35b-a3b
goes from 1/3 to 3/3, mistral-small-3.2-24b from 2/3 to 3/3. Tool calling no
longer separates them, so the recommendation now follows price, vision and
context: mistral-small-3.2-24b is cheapest with vision, gemma-4-26b-a4b-it
for double the context.
Document the failure mode, the reasoning_effort lever (only "none" had any
effect on Scaleway; "low" did nothing), and ask contributors to record the
token budget alongside results. Nebius and TensorX rows are marked as
measured at 2000 so they are not read as comparable.
Refs #454
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Add measured Vision and context-window columns alongside the tool-calling
metrics, and four more Scaleway models. gemma-4-26b-a4b-it becomes the
recommendation: the only model tested that is clean on cost, tool calling
and vision at once, with 2x the context of gpt-oss-120b.
Document models.dev as a prefill source for new rows, with the caveat that
it describes nominal capabilities rather than deployment behaviour. It was
wrong on two of seven models checked here -- it marks scaleway/gpt-oss-120b
as vision-capable when the model refuses images, marks
scaleway/mistral-small-3.2-24b as text-only when it reads them, and reports
tool_call: true for models that emit no tool calls in practice.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
TensorX was marked browser-broken based on unauthenticated probes. With a
valid key it returns Access-Control-Allow-Origin on 200 responses; only
errors (401/403/500) omit it. Downgrade to a warning and document the
methodology error, since an unauthenticated probe cannot distinguish a
gateway-rejected error from a genuinely broken provider.
Scaleway behaves the same way and is added with the same caveat.
Add four Scaleway model results. gpt-oss-120b streams cleanly there
(0 violations / 135 deltas) despite misrouting on Nebius, so the vLLM
tool-call bug is a deployment issue rather than a model one, and the
client-side shim is avoidable by switching provider. That makes
gpt-oss-120b the cost-effective recommendation at EUR 0.15/0.60.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The table ranked models on tool-calling correctness alone, which recommended
Kimi-K3 at $3/$15 per 1M tokens. The chat panel runs up to 50 agent steps and
resends tool schemas each step, so price compounds and that was the wrong
default.
Add a cost column, move the recommendation to Kimi-K2.7-Code (same clean
behaviour, ~1/4 the price), and note that gpt-oss-120b is ~25x cheaper than
K3 and would be the obvious default once the vLLM shim exists.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Whether a provider works in the web build depends on CORS headers being set
on the response (not just the preflight), and whether a model is usable in
the AI chat panel depends on its streaming tool calls being well-formed.
Neither is documented by providers, so record what has been measured.
Covers 11 providers and 5 models, each row dated. Documents two recurring
failure modes: vLLM misrouting the final tool-call argument chunk to
index + 1 without an id, and reasoning models returning null content under
the connection test's maxOutputTokens: 1.
Includes copy-paste curl recipes so others can add rows.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Reframe entries around user-visible outcomes and consolidate related changes
- Document missing features, fixes, performance improvements, and SDK migrations
- Support vectorPaths, vectorNetwork, and async network assignment
- Normalize geometry bounds and preserve winding and region paint semantics
- Validate network topology and expose handle mirroring only on vectors
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Include stroke color and rounded weight in node and child summaries
- Select the first visible stroke when hidden paints precede it
- Cover both describe output paths with mixed stroke visibility
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Validate inline SVG roots against their supported root props
- Leave descendant SVG markup to the SVG renderer instead of Design JSX validation
- Keep warnings for unsupported root props and cover both paths
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Name every create_shape node type in the tool description
- Direct arbitrary geometry requests to SVG-backed create_vector input
- Keep the prose synchronized with the declared type enum
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Normalize SVG paint sentinels before creating icon vector nodes
- Keep inline outline artwork transparent instead of falling back to black
- Cover fill and stroke none values through the Design JSX renderer
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Make MiniMax-M3 the default MiniMax model
- Verify the existing OpenAI-compatible adapter sends M3 requests correctly
- Update AI documentation and release notes for #431
Anthropic omits Access-Control-Allow-Origin unless the caller sends
anthropic-dangerous-direct-browser-access, so the web build failed with an
opaque "Could not reach this endpoint from the browser" for the anthropic
provider. @ai-sdk/anthropic does not send the header and neither did our
adapter.
Send it from the browser only. The desktop build routes through tauriFetch
and is not subject to CORS, so it does not need to advertise browser access.
Fixes#436
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Resolve the active graph at action time and map edit geometry through full world transforms
- Regenerate live path fills and discard stale imported stroke outlines after edits
- Preserve fill and stroke geometry through resize previews, undo, and redo
- Cover graph replacement, nested transforms, edit history, resizing, and CanvasKit output
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Resolve Figma path style overrides into format-neutral geometry fills
- Render and export per-path paints across normal and pattern drawing
- Preserve path fills through copying, instance scaling, and derived geometry
- Cover import, serialization, scaling, and CanvasKit output
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Export text and basic shapes as editable PowerPoint elements
- Rasterize unsupported geometry, effects, masks, and clipped content for fidelity
- Support app and CLI exports across multiple pages
Co-authored-by: TKman <102001532+greekr4@users.noreply.github.com>
- Reuse component-linked nodes across resolved fill passes
- Reuse corresponding instance child pairs across placement passes
- Preserve global fixed-point order and nested override behavior
- Match regional language tags to supported base locales in preference order
- Preserve exact regional matches and English fallback
- Cover the reported locale sequence and unsupported variants
- Add a lightweight AI assistance field to the pull request template
- Ask contributors to list materially used models without requiring prompts or automated enforcement
* perf(fig): scope lazy page population work
- Limit override propagation and clone indexing to active page nodes
- Reuse clone membership sets instead of rebuilding them per subtree
- Coalesce Layers tree structural rebuilds during population
- Add a regression test that rejects document-wide scans
* fix(fig): preserve global override propagation
- Keep fill and child-placement propagation across clone lineages
- Retain scoped work only for passes proven independent of inactive pages
- Cover the two required global propagation scans
* perf(fig): finish scoped population review
- Stream active override candidates without temporary arrays
- Scope fallback clone maps when no lineage index is supplied
- Skip stale queued Layers tree rebuilds after synchronous refreshes
- Default fresh browser sessions to encrypted credential persistence with an explicit session-only opt-out
- Keep API-key links left-aligned, legible, and limited to their text click target
- Update credential guidance and browser coverage
- Replace regex-based list and error parsing with xmldom
- Decode entities through the parser and support namespaced pagination responses
- Treat malformed listing documents as empty pages
- Replace attribute and element regexes with the existing xmldom parser
- Preserve nested presentation attributes and transforms while skipping non-rendered definitions
- Read gradient coordinates through svgpath segments instead of reparsing path strings
- Cover malformed markup, quoted attributes, inheritance, and attribute-like text
- Add secure Recraft and fal.ai clients with centralized credentials and Media settings
- Replace image rectangles with editable vector frames in one undoable operation
- Bound desktop proxy responses, timeouts, and redirects for provider downloads
- Cover provider parsing, placement, settings, context-menu visibility, and undo
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Resume persisted outbox jobs at startup without dropping writes when credentials are unavailable
- Serialize IndexedDB revisions and guard sync completion against concurrent saves
- Reconcile tombstones without reviving deleted documents and bound S3 metadata requests
- Require explicit CORS configuration instead of overwriting bucket rules during connection tests
- Keep ACP agents exclusive to the Design role and normalize invalid model limits
- Separate provider connections, model profiles, capabilities, and role assignments
- Replace role-specific forms with a reusable model library and assignment table
- Resolve credentials lazily per connection and preserve existing Design settings
- Route Design chat through the assigned profile while exposing Review, Fast, and Vision runtimes
- Add one themed placeholder primitive for page, panel, dialog, and setup states
- Vertically center chat, code, assets, variables, and storage placeholders
- Let Vue replace the static boot splash instead of mutating global DOM from views
- Show one centered setup action instead of simultaneous error and empty states
- Refresh configuration after closing Settings without requiring route remount
- Keep document creation and refresh unavailable until setup is complete
- Reuse one named source-state contract across save and source actions
- Keep storage bindings and local source identity typed without duplicated shapes
- List local and remote documents from an explicit storage workspace route
- Open remote .fig documents into deduplicated storage-bound editor tabs
- Create locally durable documents only after storage configuration is complete
- Cover unconfigured guidance and mocked S3 document opening end to end
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Track remote storage bindings without replacing local file identity
- Route saves and autosaves through the durable local cache before enqueueing uploads
- Clear storage bindings on Save As and cover ordering and identity behavior
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Drain local outbox jobs through the active registered storage adapter
- Preserve revision guards, retry backoff, tombstones, progress, and offline recovery
- Resolve the active adapter and credentials for each queued operation
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Add schema-driven S3 preferences and status-only credential controls to unified Settings
- Keep storage preferences persistent while secrets remain in the selected credential backend
- Include storage credentials when browser persistence changes and test session behavior
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Recover the IndexedDB and in-memory document cache behind the storage domain
- Add persistent outbox supersession, cache eviction, import validation, and naming helpers
- Keep the substrate provider-neutral and cover its pure behavior
Co-authored-by: Rob Coenen <753704+rcoenen@users.noreply.github.com>
- Define backend-neutral document storage and provider schema contracts
- Keep provider preferences separate from credential references
- Resolve declared secrets lazily through the shared credential service