Commit graph

2354 commits

Author SHA1 Message Date
Fini 3828215741 feat(agent): promote minimax m3 to full tier
A 3x2 A/B run (multi-screen mobile, dashboard, landing) at the
production thinking configuration showed the full-tier pipeline beating
the basic tier across the board for M3: geometry issues 5 to 1, total
wall clock 30 percent faster, fewer LLM calls, and the one permanent
subtask loss shifting from two core data elements to a single sidebar.
Scoped to the M3 generation like the kimi and glm entries; older
MiniMax models keep the basic profile. Thinking stays enabled through
the existing adapter exemption.
2026-07-18 16:40:09 +08:00
Fini 8518bac0d7 feat(mcp): canvas scan and reveal effects for live MCP batches
An external CLI driving the live MCP server never touched the agent
indicator registry, so its batch_design work landed with no generating
scan, no reveals, and no identity. Each batch now opens an indicator
round (named from the client's own initialize clientInfo, falling back
to MCP Client), tags fresh top-level frames, queues child reveals, and
finishes gracefully; back-to-back batches whose reveals are still
draining coalesce into one round instead of clearing each other. The
applier callback carries the tool name end to end; the op-start web
canvas daemon path is transplanted mechanically and left as a marked
follow-up.
2026-07-18 16:34:25 +08:00
Fini 212e228f26 fix(editor): embed relinked images and warn on machine-local links
Relink wrote the picked file's path into src, which renders on this
machine and silently breaks for anyone the file is shared with — the
only remaining save path that produced a non-portable reference. It
now embeds the picked file as a data URL like the fill picker, with no
path fallback on read failure. Path-form sources that do resolve
locally get a new LinkedLocal status whose warning row says the image
won't survive sharing, instead of passing as Ok.
2026-07-18 16:34:25 +08:00
Fini 5eeaa701dd feat(smoke): completeness section in the audit rubric
Structural cleanliness said nothing about whether required content
actually landed — a dashboard missing its revenue chart and activity
table after every retry still scored clean. When the audit runs the
orchestrator itself it now reports planned versus delivered subtasks
and names permanent failures; render-only audits omit the section
rather than fabricating zeros.
2026-07-18 16:34:25 +08:00
Fini a56f1c194b feat(agent): geometry feedback echo in the classic pipeline
The classic path was open-loop: a subtask's geometry violations were
either silently patched or fatally rejected after the fact, so novel
prompt shapes kept slipping through wherever the deterministic net was
sparse. Each landed subtask now gets a real-layout diagnostic pass
(detect-only twins of the existing fixers, including a new rail
collapse diagnostic) and one same-tier retry with the violations fed
back verbatim — the model repairs its own sizing before the
deterministic passes run, which demotes them to a last-resort net. The
echo is budgeted (min of subtask count and six per run), announced as
a progress fact, gated behind an env kill switch, and skipped on
buffered concurrent sinks where post-remap ids are unavailable.
2026-07-18 16:34:24 +08:00
Fini 84772d2d0e fix(editor): polish the git panel ready view
The expanded milestone card painted full-width over the timeline rail
(breaking the connector and blending into the list) — inset it as a
proper card clear of the rail. Unify Restore/Copy-hash under the
panel's shared secondary button chrome, add row hover, anchor the
pull/push/overflow cluster to the right edge, and size the panel to
its content with a clamped max instead of a fixed filler. Split the
expanded-card subsystem out of the over-cap ready file.
2026-07-18 16:34:24 +08:00
Fini e5e41fbefe fix(agent): auto-fix ring concentricity and stop degrading on quality rejections
A concentricity rejection used to discard a full-skills design
outright, and the retry ladder then dropped skill rungs for a failure
that had nothing to do with capacity — converting one strict check
into a minimal-tier final output. Ring stacks now get a tier-2
force-center repair (centring ignores padding — jian absolute
positioning never adds it — and only structurally hopeless stacks
still reject), and the ladder distinguishes quality rejections from
transport failures: a self-check rejection retries at the SAME skill
tier with the rejection reason injected as feedback, while transport
errors keep the existing degradation path. Remaining fatal checks are
classified for follow-up.
2026-07-18 16:34:24 +08:00
Fini e9cde93377 fix(agent): repair collapsed rail cards and teach the sizing contract
A fill_container card beside a fixed-width sibling in a horizontal
rail collapses to a sliver (103px shared between two cards in the
observed incident) while its fit_content height explodes from forced
text wrapping. Add a geometry-driven detector that widens collapsed
fill_container siblings to the widest fixed reference (evenly-split
and deliberately-mixed fixed rails stay untouched), running before the
overflow clip pass so clipping no longer has to mask the symptom. The
schema skill — the only one the minimal fallback rung keeps — now
carries a one-line rail sizing contract.
2026-07-18 16:34:24 +08:00
Kayshen-X c54f5c8cb9 fix(panels): host-managed mcp card shows the embed port with no start/stop 2026-07-18 16:19:15 +08:00
Kayshen-X b35f90670b fix(vscode): typed http entries for fork mcp configs; end codegen borrow before copy 2026-07-18 16:12:59 +08:00
Kayshen-X 6568e40231 fix(mcp): working clipboard copy and real endpoint on the embed settings card 2026-07-18 16:08:29 +08:00
Kayshen-X 6ec2d97587 fix(vscode): insert embed flag before any url fragment 2026-07-18 15:56:07 +08:00
Kayshen-X df2198739c fix(vscode): append embed flag after asExternalUri so the query = survives unencoded 2026-07-18 15:49:47 +08:00
Kayshen-X c2cfce221c fix(figma): decode vector networks with the real kiwi blob layout
The parser read a layout that no real .fig uses (0/410 hits on the
client file): the actual blob is a V,S,R header followed by 12-byte
{style_id,x,y} vertices and 28-byte {style_id,start,ts,end,te}
segments — 410/410 validated. Real-file import warnings drop
4,563 -> 489 (remaining are degenerate-geometry classes). Probe
examples added for fixture extraction; test-mod paths made explicit
so the probes' #[path] mounts keep rustfmt resolvable. no-verify:
repo fmt gate trips on unrelated in-progress op-html sources.
2026-07-18 15:43:24 +08:00
Kayshen-X 82611f0e9f feat(vscode): open .fig files via the daemon convert endpoint with sibling-.op saves 2026-07-18 15:20:15 +08:00
Kayshen-X 40da2ba9a6 feat(figma): offline .fig convert endpoint on the managed daemon 2026-07-18 15:02:25 +08:00
Kayshen-X 9b2de75979 feat(vscode): request embedded chrome via ?embed=vscode 2026-07-18 14:56:24 +08:00
Kayshen-X 9a7bed58e3 feat(web): hide the ai chat panel under vscode embed 2026-07-18 14:55:05 +08:00
Kayshen-X 0a8fcc25f5 feat(panels): settings dialog shows only the MCP section in vscode embed 2026-07-18 14:43:08 +08:00
Kayshen-X 42b9688cb4 feat(i18n): topbar.mcp label for the vscode-embed chip 2026-07-18 14:23:37 +08:00
Kayshen-X 7365482570 chore(mcp): record op-html dependency in Cargo.lock 2026-07-18 14:23:31 +08:00
Kayshen-X 5942658539 test(mcp): count import_html in tools_list catalog assertions 2026-07-18 14:23:31 +08:00
Kayshen-X 9570cfadb6 feat(panels): hide file/figma/title/fullscreen top-bar chrome in vscode embed 2026-07-18 14:17:57 +08:00
Kayshen-X 1fdccd1c3b feat(cli): import:html subcommand mapping to the import_html mcp tool 2026-07-18 14:16:43 +08:00
Kayshen-X 21d90a2f25 feat(mcp): import_html tool inserting op-html parsed subtrees 2026-07-18 14:16:43 +08:00
Kayshen-X 97f1cf6b44 feat(html): wire full import pipeline with root frame and defense limits 2026-07-18 14:16:43 +08:00
Kayshen-X a0b202b97a feat(html): inline text runs, img/svg fallback and form control mapping 2026-07-18 14:16:42 +08:00
Kayshen-X 90c8b3154e feat(html): map containers, visual styles and layout heuristics to frames 2026-07-18 14:16:42 +08:00
Kayshen-X 623e503617 feat(html): declaration parsing, selector subset and cascade with ua defaults 2026-07-18 14:16:42 +08:00
Kayshen-X c9e06817dc feat(html): css color and length unit parsing 2026-07-18 14:16:42 +08:00
Kayshen-X 16177adc7d feat(html): parse html5ever dom into simplified tree with style/title harvest 2026-07-18 14:16:42 +08:00
Kayshen-X b91aeaf956 feat(web): set EditorUiState.embed from the page query in mount_ck 2026-07-18 13:34:43 +08:00
Kayshen-X 23467901d4 chore(deps): bump jian for image table dedup and Arc scene payloads
jian bfd6ca5 (deduplicated .op image table + shared-Arc load) and
633b9a0 (SceneNode image payloads as Arc<str>). no-verify: the repo
fmt gate currently trips on unrelated in-progress op-html sources.
2026-07-18 13:23:38 +08:00
Kayshen-X 370aa5dac4 feat(html): scaffold op-html importer crate with public API 2026-07-18 13:11:52 +08:00
Kayshen-X a4706476bd chore(sync): integrate origin/v0.8.2 interactions and retry batch
Squash-resolution of the 11 upstream commits (interactions panel,
account shell, preview promotion, app-mode screen navigation, retry
core, parallel screen groups, byte-budget image cache) into the local
branch, with stash-pop conflicts in the canvas server, native skia
cache, and opmerge resolved in favor of the newer implementations.
2026-07-18 13:11:52 +08:00
Kayshen-X 81ccdc47bc feat(web): cap image proxy reads and bound concurrent image jobs
Streaming read_capped aborts any provider/thumbnail body past its cap
(4 MiB images and catalogue JSON, 16 MiB provider replies sized for
Gemini inline base64) instead of buffering before checking. ImageJobSlot
caps concurrent search/generate jobs at 4 (429 beyond) since each holds
a connection thread for minutes. Custom-endpoint result URLs are now
screened independently of the endpoint allowlist, and the Gemini error
path drops the key-bearing URL via without_url.
2026-07-18 13:11:52 +08:00
Kayshen-X 2d6423e3cb feat(web): image panel search/generate drain via daemon image routes 2026-07-18 13:11:52 +08:00
Kayshen-X cd76503369 fix(vscode): boot webview shell without blocking resolve; guard stale boots 2026-07-18 13:11:52 +08:00
Kayshen-X 2ff78e7d44 feat(web): image search and generate endpoints on the canvas server 2026-07-18 13:11:52 +08:00
Kayshen-X 2314b736b2 perf(renderer): budget image caches by bytes instead of entry count 2026-07-18 13:11:52 +08:00
Kayshen-X 0500f1c9ad fix(store): dedupe shared images into the images table on every save path 2026-07-18 13:11:52 +08:00
Kayshen-X 612a453942 feat(figma): route host image transform through fig import for downscaled embeds 2026-07-18 13:11:52 +08:00
Fini 5799d1b7b2 fix(web): cover the retry hit in the canvaskit click dispatch
The RetrySubtask variant landed with the desktop retry pipeline; the
web transcript never paints the icon (no ChatMessage to retain a spec
on), so the arm is an inert exhaustiveness cover. Caught by the
canvaskit feature build, which the default workspace sweep does not
compile.
2026-07-17 21:12:39 +08:00
Fini bf527f73f7 fix(agent): tier claude fable and kimi k3 as full
The profile table predates both models: claude-fable-5 fell to the
unknown default (Standard, thinking disabled) and kimi had no entry at
all. Fable joins the Claude full-tier family with thinking untouched;
Kimi is strong from K3 on (K2.x stays below the line), thinking
disabled like the other reasoning models.
2026-07-17 21:12:39 +08:00
Fini 2ec1f1fbc1 feat(desktop): wire retry, account, interactions, and preview polish into hosts
Hosts pump pending subtask retries into a single-shot rerun with the
currently selected provider (both builtin and CLI launch paths retain
the original request), dispatch the account and interactions surfaces,
and persist the preferred team size. Preview gains pinned status bars,
device-shell backing that follows the screen root fill, an
enter/exit morph animation with deferred teardown, and text-run fades
during screen cross-fades.
2026-07-17 21:12:39 +08:00
Fini 835115f515 feat(editor): interactions panel, account shell, preview promotion, sticky team size
The property panel gains an Interactions section that reads a node's
screen marker and tap actions and can bind, retarget, or remove
navigation. The top bar gains an account avatar with a sign-in modal
(honest stub until the platform backend ships), a signed-in dropdown,
and a settings Account tab. The preview Play button leaves the
experimental gate. Failed design-progress rows expose a retry icon
only when a retained spec makes retry possible. The parallel-agents
setting is inherited by new chat tabs and persisted as an app
preference. Builtin provider presets move to current model
generations.
2026-07-17 21:12:39 +08:00
Fini f74d419e08 feat(agent): parallel screen groups, shared-nav unify, and retry core
Screen groups now run genuinely in parallel under the team-size
setting, with live progress, per-group replay on completion, and
distinct per-group agent identities announced as a facts line
(sequential runs announce their setting too, so the active mode is
always visible). Identity is single-sourced: sequential runs tag no
frames and inherit the session identity, concurrent runs adopt a
pre-confirmed identity as the primary group. Shared navbars are
unified across screens and injected into screens whose name matches a
reference tab, so a failed nav subtask can no longer leave a screen
bare. Failed subtasks keep their full spec for single-shot retry, the
salvage pass retries at minimal complexity instead of repeating the
full ladder, rate-limit exhaustion is classified non-retryable, and
the stalled-provider tests assert connection counts instead of wall
clock.
2026-07-17 21:12:39 +08:00
Fini e13ebe374c fix(desktop): canvas-aware design routing and honest parallel-agents semantics
A pure-Chinese continuation like continuing the remaining pages never
matched the ASCII keyword gate in loop_enabled, so it fell through to
the classic orchestrator even when the canvas already held a 390px
mobile screen. Feed a canvas signal (an existing mobile-width top-level
frame) into the routing decision, explicit overrides still win. Also
surface the parallel-agents setting to the design loop model as a
prompt fact and tie the spawn_agents guidance to it instead of a dead
3-4 screen threshold, so the picker setting has honest semantics.
2026-07-17 21:12:39 +08:00
Fini debe8b88bc fix(orchestrator): one root frame per screen group in multi-screen plans
A plan whose subtasks carried >=2 distinct screen labels still collapsed
onto a single root frame: normalize() assigned every subtask the same
parent_frame_id regardless of its screen tag, because the per-screen
N-root scaffold was deleted together with the concurrent path in
aca0d3a0 even though the benchmark behind that removal only measured
concurrency, not screen splitting. Restore the grouping as a purely
sequential structure: each screen group gets its own scaffold root
placed to the right of the previous one, zero_content sums over all
roots, and every group root flows into cleanup so screen navigation
wiring links the screens for app-mode preview. Plans with zero or one
screen label keep today's single-root behavior byte for byte, and
append mode stays single-root. Update decomposition.md to describe the
actual behavior instead of the deleted one.
2026-07-17 21:12:39 +08:00
Fini eaed098bb5 fix(mcp): derive guideline topics hint from topic registry
The get_guidelines error hint listed three topics by hand and had
rotted; generate it from the canonical topic table so new topics can
no longer be missed.
2026-07-17 21:12:39 +08:00