Commit graph

2496 commits

Author SHA1 Message Date
Kayshen-X 6a780c7425 fix(web): pre-open the sign-in popup in the click gesture and use popup wording
Opening the verification page from the async poll callback was popup-
blocked (the 'click sign-in twice' bug); a placeholder window opened
synchronously inside the press is navigated once the URL arrives, and
closed on cancel/failure. The wasm login modal now says 'popup window'
instead of 'your browser' — the web editor already runs in one.
2026-07-25 23:51:27 +08:00
Kayshen-X 7d3b66e07b fix(desktop): link prebuilt op-auth with -bundle so thin-lto release links
Bundled foreign archive members were fed to thin-LTO and failed with
'failed to get bitcode from object file for LTO'; -bundle defers the
archive to the final link.
2026-07-25 23:44:27 +08:00
Kayshen-X 5c5003e90d fix(desktop): rebuild prebuilt op-auth libraries without lto
The archives previously carried LTO'd objects that broke openpencil's
thin-LTO release link (failed to get bitcode from object file).
2026-07-25 23:44:26 +08:00
Can H. Tartanoglu bb27a7458f
feat(integration): expose declarative harness surface (#185)
* chore(nix): add reproducible OpenPencil flake

* fix(nix): patch and smoke-test prebuilt binaries

* chore(ci): keep workflow validation in integration follow-up

* feat(integration): expose declarative harness surface

* ci: run Nix checks for integration surface

* test: verify all OpenPencil runtime tools

* feat(integration): expose web server package

* chore(nix): remove rebase conflict marker

* fix(nix): update OpenPencil CLI prebuilt hash

* fix(nix): validate source outputs and pin release assets

* fix(nix): refresh desktop release hash

* fix(nix): refresh Bun dependency hash

* fix(nix): normalize Bun hoisted aliases

* ci: make headless desktop smoke test deterministic
2026-07-25 23:44:01 +08:00
Kayshen-X e77355e193 feat(web): unified device login through the serve-web daemon
The wasm bundle ships no auth code: the daemon proxies the device-login
flow over /api/auth/* using the same prebuilt op-auth library and the
same ~/.openpencil/auth credential store as the desktop GUI, so a
session started in either host signs both in. The web shell opens the
verification page in a popup, polls flow progress into the shared login
modal, and re-checks session health every 30s. The proxy refuses
non-loopback binds outside managed mode — the daemon session belongs to
its owner, not to whoever can reach the port.
2026-07-25 23:28:03 +08:00
Kayshen-X 5888b29323 fix(editor): report machine name to sso and drop workspace menu row
The approval page already labels the product and platform, so the
device name must be just the machine (scutil ComputerName / hostname);
the account dropdown's workspace row was a no-op placeholder.
2026-07-25 22:45:26 +08:00
Kayshen-X 16373e2cc2 feat(desktop): prebuilt op-auth library for windows arm64 2026-07-25 22:22:58 +08:00
Kayshen-X d1fef42e0b feat(desktop): prebuilt op-auth library for windows msvc 2026-07-25 19:44:58 +08:00
Kayshen-X 50a6c228a2 feat(desktop): prebuilt op-auth libraries for intel macos and linux
Extends the prebuilt matrix to x86_64-apple-darwin and both linux-gnu
architectures (built against glibc 2.17); the msvc artifact follows the
<name>.lib convention build.rs now resolves per target.
2026-07-25 19:43:20 +08:00
Kayshen-X cacaeefc95 feat(desktop): browser device login through prebuilt op-auth library
The proprietary device-login client (ZSeven-W/op-platform) ships as a
C-ABI static library committed under op-auth-bridge/prebuilt/<target>;
builds without an artifact fall back to an inert stub so any checkout
compiles with login hidden. The desktop host starts the pairing flow
from the sign-in modal, opens the verification page in the system
browser, polls flow status each frame, restores persisted sessions at
startup, and revokes the device token on sign-out.
2026-07-25 19:08:38 +08:00
Kayshen-X 39287ac03d feat(editor): runtime account gate and device-login flow status state
Replace the compile-time ACCOUNT_UI_AVAILABLE release gate with
EditorUiState::account_ui_available so hosts enable the account UI only
when an auth backend is actually linked, and surface device-login
progress (waiting for browser / approval / exchanging / failure) in the
sign-in modal.
2026-07-25 19:08:15 +08:00
Kayshen-X 4702c8e06a test(agent): stop cli probe tests racing process startup
The hung-CLI probe tests gave the deadline 200ms, which a cold exec of a
just-written temp executable can exceed before it prints — the capture
came back empty and the auth-marker assert flaked (2 of 3 isolated runs).
Give the probes a 2s budget, well past spawn cost, so the timeout branch
is reached with the script's output already drained.
2026-07-25 13:09:19 +08:00
Kayshen-X 685c5dd17e docs(release): title v0.8.2 and promote note headings to release names
GitHub releases were named by bare tag because the action got no name.
The note's leading heading is the natural title, so publish it as the
release name and drop it from the body instead of repeating it.
2026-07-25 12:53:31 +08:00
Kayshen-X 898fbd7503 docs(release): cover design agent and canvas perf in v0.8.2 notes
The notes stopped at the 2026-07-23 state and never described the design
agent at all, despite it carrying the largest share of the v0.8.2 work.
Add the multi-screen generation, geometry-repair, provider/skill, and
large-document canvas performance sections, plus the image-crop, stroke
ordering, right-rail, and Windows save changes landed since.
2026-07-25 12:49:50 +08:00
Fini 6bf47c5bbc fix(agent): share timeout diagnostics with model discovery probes
The discovery chain's command_output still discarded captured bytes on timeout, the same defect fixed for connect probes. Extract BoundedProbe and diagnose_timeout into a shared cli_probe_support module so both chains surface auth hints and output tails, and add an exe/timeout seam so timeout paths are testable.
2026-07-25 09:12:37 +08:00
Fini 81d90fc9d4 fix(ai): make skill names unique across the registry
Two skills both declared name: design-system, making get_skill_by_name order-dependent. Rename the knowledge composition skill to design-system-composition (the generation token-architect skill keeps the name every code path references) and pin registry-wide uniqueness with a test. The public get_guidelines topic key is unchanged.
2026-07-25 09:12:37 +08:00
Fini 7831cea7b1 fix(agent): close deck opacity and cta corner-radius blind spots
Structural fixes with no name heuristics: exempt decorative stack layers from the empty-shell blocker (it was pushing models to stuff content into deck back layers), give a transparent text-bearing front card a surface fill when a painted layer bleeds through, and round compact painted text capsules missing a corner radius when the design already shows a rounded convention. Teach mobile-app domain that tappable CTAs carry cornerRadius.
2026-07-25 08:01:53 +08:00
Fini ac14c0c3b6 fix(agent): surface auth hints when cli connect probes time out
A first-run CLI blocked on browser OAuth always exceeded the 10s probe window, and the timeout path discarded captured output, leaving only 'failed or timed out'. Retain the captured bytes, recognize authentication prompts for an actionable message, append an output tail otherwise, and make the resolver's antigravity install dir explicit.
2026-07-24 23:34:10 +08:00
Fini 92ca558f39 fix(ai): stop silent skill prompt truncation and honor full-tier budget
Five skills had drifted past their own injection budgets (variables lost its color table tail, overflow its fallback example); the phase knapsack also tail-cut compliant domain skills with zero diagnostics, and full tier trimmed at 8000 while reporting 12000. Compress or relocate oversized content, raise the generation default to the intended 12000, warn on both truncation paths, and add regression tests pinning zero truncation.
2026-07-24 23:34:10 +08:00
Fini 1ed7930d57 test(agent): serialize tests racing the global indicator registry
mcp_live and design_agent_tools tests clear/assert the process-global agent_indicators REGISTRY from parallel test threads; CI macos-aarch64 caught one leaking two frames into another's snapshot. Serialize them behind a shared guard owned by the registry.
2026-07-24 23:32:22 +08:00
Kayshen-X 089783efec test(desktop): stabilize title and pan cache CI 2026-07-24 22:23:44 +08:00
Kayshen-X 81944cf7b0 perf(canvas): smooth pan/zoom on huge documents via layer caching and LOD
A 38k-node zoomed-out document panned at 4-5 fps. Five layered fixes,
each verified by profiling a live session:

- svg path cache: 2048-entry FIFO thrashed on 11.8k visible paths
  (every frame re-parsed the whole working set); now byte-budgeted
- text greeking: sub-3-device-px text skips shaping, paints a bar
- effect LOD: sub-pixel shadows/blurs skip their save-layers (each
  broke the GL-on-Metal render pass and forced a command submit)
- sub-pixel leaves (<0.75 device px) always skip paint
- pan bitmap cache: gestures blit an offscreen layer (margin +
  in-place scroll strips + approximate scaled zoom); the layer is
  retained across gestures and the gesture-end frame restores full
  quality progressively, one tile per frame
- event loop: elapsed WaitUntil deadlines re-armed immediately
  (idle timer spin); periodic deadlines now sit on a fixed grid so
  casement's waker dedups the CFRunLoop re-arm

OP_SLOW_FRAME_LOG=1 prints >32ms frames with blit/scroll/build
attribution for future regressions.
2026-07-24 21:35:04 +08:00
Kayshen-X d31039f613 feat(editor): image fill crop editing and upload wiring 2026-07-24 21:35:04 +08:00
Fini f15b3a2680 fix(ai): teach stacked deck pattern and surface skill budget truncation 2026-07-24 21:12:05 +08:00
Fini d70cd2bc8b feat(agent): detect cross-subtree text collisions in geometry diagnostics 2026-07-24 21:12:05 +08:00
Fini 47be58eb39 feat(agent): gate loop completion on unresolved blockers 2026-07-24 21:12:05 +08:00
Fini ac9aa89c67 fix(agent): repair content rails in appended mobile subtrees 2026-07-24 21:12:04 +08:00
Fini 10003db186 fix(agent): keep status indicator dots out of stub cleanup 2026-07-24 21:11:54 +08:00
Fini 239ea6f10d fix(agent): round missing corners on badges, pills, avatars and status dots 2026-07-24 21:11:54 +08:00
Fini 8f56eeda9c fix(agent): keep nested card roles and rescue near-full-bleed orphan cards 2026-07-24 21:11:54 +08:00
Fini f4fccc63c0 fix(agent): pad clipped child strokes in fit-content rows 2026-07-24 21:11:34 +08:00
Fini 9aaab7b35a fix(canvas): keep container stroke above children when painting 2026-07-24 21:11:34 +08:00
Fini dcd05503e8 fix(renderer): keep container stroke above children in svg export 2026-07-24 21:11:34 +08:00
Fini ea9dca5d10 fix(panels): hide right rail when nothing is selected 2026-07-24 21:11:27 +08:00
Fini 124db9d144 fix(agent): retire gemini cli provider, add antigravity and grok build 2026-07-24 21:11:15 +08:00
Fini 37f80d8e4a fix(agent): terminate aborted design validation 2026-07-24 07:10:57 +08:00
Fini aea6979091 fix(agent): recover rejected radial sections 2026-07-24 07:10:29 +08:00
Fini 1ae53fa615 fix(agent): require navigation on primary mobile screens 2026-07-24 07:09:54 +08:00
Fini b4322f6d2b fix(desktop): preserve design terminal progress 2026-07-24 07:09:26 +08:00
Fini 0067cedb34 fix(agent): stabilize compact status geometry 2026-07-24 01:51:34 +08:00
Fini 379f10420a fix(agent): harden mobile rail edge cases 2026-07-24 00:56:09 +08:00
Fini ee25b87d16 fix(agent): align mobile rail guidance 2026-07-24 00:11:06 +08:00
Fini 364c670ac5 fix(agent): lint mobile section rails 2026-07-24 00:10:29 +08:00
Fini 37d0898bd4 fix(agent): enforce mobile content rails 2026-07-24 00:10:16 +08:00
Fini 78a80e74f6 fix(agent): accept logical text alignment 2026-07-23 23:50:51 +08:00
Kayshen-X 6f4206c4d4 fix(desktop): serialize Windows save commits 2026-07-23 23:50:50 +08:00
Kayshen-X d7236d7c99 test(renderer): stabilize cross-platform tests 2026-07-23 23:30:37 +08:00
Kayshen-X 9ed85e5c24 fix(renderer): refresh scenes after property edits 2026-07-23 23:13:29 +08:00
Kayshen-X 4eea87db2d feat(editor): hide account entry points for v0.8.2 2026-07-23 22:10:42 +08:00
Kayshen-X 5c8a4163c2 docs(release): expand v0.8.2 notes 2026-07-23 22:03:55 +08:00