Commit Graph
4062 Commits
Author SHA1 Message Date
dwelleandClaude Fable 5 9a613904f4 tta rewrite: step 8 — re-run affordance + background generation on chat switch
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:37 +02:00
dwelleandClaude Fable 5 f853c58457 tta rewrite: record full §4 feature-parity QA results
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:36 +02:00
dwelleandClaude Fable 5 f3c64f0ad8 tta: history overlay yields Escape to a stacked confirm dialog
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:36 +02:00
dwelleandClaude Fable 5 862535bc59 tta rewrite: step 7 — useTTAChatActions extraction + history bookkeeping fold
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:35 +02:00
dwelleandClaude Fable 5 0e7c5ed0b6 tta rewrite: step 6 — thumbnail hook on shared throttle + LRU cache (M7)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:35 +02:00
dwelleandClaude Fable 5 d905401dc3 tta: keep streaming status labels until the status genuinely changes
The server streams continuous empty partial keep-alive frames; the
per-chunk status patch blindly downgraded to the unlabeled "generating"
phase, wiping "Thinking…"/server statusText moments after it appeared
(pre-existing blind clear, exposed by chunk cadence). The streaming
patch is now guarded: no-op patches keep the previous status object,
keep-alive chunks never downgrade a labeled state, and startedAt
carries over so the elapsed ticker never resets. Live-verified; pinned
by a lifecycle test that fails against the old behavior.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:35 +02:00
dwelleandClaude Fable 5 54c5072406 tta rewrite: step 5 — single canvas-draft owner, local-id keying (M1/N3)
useCanvasDraft merges the preview hook + TTADialog's replacement-tag
trio into one owner; the canvas tag is now the local message.id (server
messageId is metadata-only). Shared trailing-flush throttle fixes the
frozen-canvas-on-stall bug (M1); intermediate preview elements are
filtered from local persistence and swept on dialog open (N3).
Capture rule unified: NEVER via updateScene, IMMEDIATELY via
syncActionResult. All pinned invariants re-asserted in the rewritten
tests.

Per tta_rewrite_final.md §2.4/§6 row 5; details in the progress log.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:34 +02:00
dwelleandClaude Fable 5 cb9d76be2d tta rewrite: steps 3+4 — status union + flat per-chat persistence
Step 3 (§2.1): ChatMessage becomes a three-kind union with a
discriminated AssistantStatus (streaming/done/stopped/error); the
14-optional-field bag, dead lifecycleStatus/parseError, and warningType
fake-assistant bubbles are gone. Rate-limit warnings are system
messages; server ids are metadata; truncation surfaces as
status.warning.

Step 4 (§2.5): conversations persist flat per-chat (loadChats/saveChat/
deleteChat adapter), the messages<->turns round-trip is deleted, brand
new chats buffer until `started` (kills the history-row id-swap +
chatIdRef), assistant messages persist only at terminal status, hydrate
merges by id+updatedAt. Terminal error bubbles persist; warnings do
not. Dev IndexedDB needs a one-time wipe (legacy "all" blob ignored).

Per tta_rewrite_final.md §6 rows 3-4; details in the progress log.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:34 +02:00
dwelleandClaude Fable 5 f4377a1655 tta rewrite: add server-side TODO for the SSE ERR_ABORTED annotation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:34 +02:00
dwelleandClaude Fable 5 174af3cb61 tta: drain the SSE body to EOF after terminal chunks
Reads the trailing [DONE] sentinel + EOF (detached, 2s-bounded) so the
response body completes instead of being abandoned mid-stream, letting
the keep-alive connection be reused. Note: this does NOT remove the
net::ERR_ABORTED annotation DevTools attaches to these requests —
verified via A/B that Chrome logs it for cross-origin SSE fetches even
when the body is fully read; that annotation is a reporting quirk, not
an actual abort.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:33 +02:00
dwelleandClaude Fable 5 27123345f0 tta rewrite: record live QA of steps 0-2 in the progress log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:33 +02:00
dwelleandClaude Fable 5 30941653a4 tta rewrite: step 2 — single-flight generation owner (C1/C3/N1/N2)
New useGenerationSlot (ownership-checked slot) + runGeneration in
TTADialog: the sole entry point for send/retry, reserving the slot
before any chat mutation (Enter while streaming is a no-op that keeps
the composer draft) with one shared catch. Retry targets the turn's
last successful attempt via new persisted lastCompletedMessageId
(fixes the always-400 error-retry against the server's
current_message_id lookup); chat switch / active-chat delete now
auto-stop the stream first (commit draft, mark bubble interrupted)
instead of orphaning it. generateResponse's finally is now
ownership-checked so a canceled predecessor can't clobber its
successor's controller/throttle state; isSendingChat is derived from
the slot.

Per tta_rewrite_final.md §2.3/§6 step 2.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:33 +02:00
dwelleandClaude Fable 5 ffba5b64e4 tta rewrite: step 1 — terminal wire contract (C2)
Success now requires a `done` frame: EOF or [DONE] without one returns
STREAM_INTERRUPTED (1002) instead of a fabricated empty success, keeping
streamed partials on the message. On-error canvas policy switches from
wipe to commit-like-Stop (bubble/thumbnail/canvas agree), error-retry
queues the failed generation for replacement, and errored bubbles with
partial skeletons render their preview + "To canvas" (salvage UI).
Also: partial.isComplete forwarded, done.finishReason carried
(length/content_filter → truncated status line), truncate response
validated as { ok, chatId, updatedAt? } (M4), dead [ai-server] filter
and changed-chatId re-onStarted branch deleted, N5 spinner hole closed.
sse.ts gains an opt-in onDoneSentinel (TTD untouched).

Per tta_rewrite_final.md §2.2/§6 step 1 (design from tta_c2.md).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:32 +02:00
dwelleandClaude Fable 5 f569cbd955 tta rewrite: step 0 — dead code sweep, C4 viewport-center fix, M6 inline asset
Per tta_rewrite_final.md §6 step 0: fix getViewportCenter via
viewportCoordsToSceneCoords (+3 centering tests), delete dead helpers /
path constants / composer uncontrolled mode / 12 dead i18n keys, unexport
consumer-less atoms, merge the two scroll effects, inline
tta-chat-empty.svg as a data URI (was a root-absolute URL). Also fixes
the pre-existing typecheck break from 3a7c9fbad (syncActionResult mock
missing captureUpdate).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 10:17:32 +02:00
dwelle 5e96d7047d plans 2026-07-20 10:17:31 +02:00
dwelle 8714b93119 do not regenerate ids 2026-07-20 10:17:31 +02:00
dwelle a0fcb19534 progress indicators 2026-07-20 10:17:31 +02:00
dwelle da27ab095c feat(editor): TTA (init) 2026-07-20 10:17:30 +02:00
samiran 5cf547650b fix(editor): make Help button tooltip consistent with toolbar (#11681) 2026-07-18 00:17:39 +02:00
David Luzar a1d9b16b0d fix(editor): show scroll-back-to-content button on mobile (#11680) 2026-07-17 16:22:43 +02:00
David Luzar 65aa577e39 fix(editor): fix AnimationController scheduling race conds (#11678) 2026-07-16 20:52:06 +02:00
David Luzar 93dd51060a feat(packages/excalidraw): add props.ui.enabled.zoom/scrollBackToContent (#11677) 2026-07-16 19:50:19 +02:00
David Luzar 344878b0b5 ci(repo): skip docs & example deployments in CI (#11674) 2026-07-16 14:36:11 +00:00
David Luzar 374716304a fix(editor): improve UX around locked animations (#11671) 2026-07-16 13:30:13 +02:00
David Luzar 5ca083436d feat(packages/excalidraw): add props.activeTool and related (#11665) 2026-07-15 11:46:08 +02:00
David Luzar acb48c3f45 fix(editor): make embeddable ignore higher-z-index non-framelike elements (#11662) 2026-07-14 18:18:21 +02:00
David LuzarandClaude Fable 5 2423819ee0 feat(packages/excalidraw): interaction and UI control (#11605)
* feat(packages/excalidraw): add `props.interaction` and `props.ui`

* fix: prevent browser zoom when interaction disabled

* changelog

* clean up interactive state on disable and consolidate `viewMode` and interaction state updates

* render UI rendered to `children` even if editor-exported

* support `allowed.navigation` and `allowed.embeds/interactiveContent`

* change naming `allowed` -> `enabled`

* changelog: add PR links

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* clear flowchart sessions via consolidated `app.flowchart` after master merge

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* refactor getters -> methods

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-14 16:50:53 +02:00
Márk Tolmács 5776e1cc66 fix(editor): should not select deleted bound text (#11660)
fix: Incorrect selection of deleted bound text

Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-14 13:19:19 +02:00
Christopher TangonanandMark Tolmacs e9c856d262 chore(editor): streamline getSelectedElementsByGroup (#11636)
---------

Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
Co-authored-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-13 19:38:52 +02:00
Márk Tolmács 082b2eeb1e fix(editor): Hit cache soundness (#11630)
---------

Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-13 17:53:01 +02:00
minato32andMark Tolmacs d331bb49fc fix(editor): avoid overlap of flowchart children (#11532)
Closes #8518. Fixes the issue when adding a new child to a flowchart node that already has children (after the first creation session was committed), the new child could land on top of, or misaligned with, an existing sibling.
---------
Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
Co-authored-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-13 16:52:19 +02:00
David Luzar 339d3c3733 feat(editor): toolbar / active tool rewrites (#11649) 2026-07-13 00:30:09 +02:00
Márk Tolmácsanddwelle ed7c0c1d7d chore(editor): Refactor Actions for clarity (#11632)
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-11 17:22:35 +02:00
Márk Tolmácsanddwelle 3b9e1c07f5 fix(editor): Dragged arrow endpoint ignore grid and angle locks (#10972)
---------
Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
2026-07-10 11:19:44 +02:00
Christopher Tangonan adf9631997 fix(editor): keep multi-line bound text and container centered during alt resize (#11480) 2026-07-09 13:02:19 +02:00
David Luzar f790bf7abd feat(editor): tweak sidebar promo style (#11181) 2026-07-09 11:41:13 +02:00
David LuzarandDataVoyager-Aditya 063e0256f5 fix(editor): arrow label rendering fixes and perf improvements (#11637)
Co-authored-by: DataVoyager-Aditya <rajthakuraditya63@gmail.com>
2026-07-08 23:13:01 +02:00
Márk Tolmács fbff832424 fix(editor): Fix binding.test.ts type mismatch (#11633)
Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-08 20:20:01 +02:00
Márk Tolmács 8462bb81fb fix(editor): Very small bindables can blow up fixedPoint -> position ratio (#11607)
---
Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-08 12:20:30 +02:00
Excalidraw Botanddwelle ba0387d186 chore(editor): Update translations from Crowdin (#10731)
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
2026-07-07 22:37:30 +02:00
Augusto XavierandMark Tolmacs dd8296af18 fix(editor): narrow NonDeleted type to isDeleted: false (#11470)
---------
Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
Co-authored-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-07 16:22:31 +02:00
David Luzar b2a729c400 feat(editor): dblclick to toggle arrowhead (#11615) 2026-07-07 14:22:21 +02:00
David Luzar aaa14e9df6 feat(editor): show cursor hint when switching arrow types (#11608) 2026-07-07 12:55:32 +02:00
David Luzar 9357f98a9b fix(editor): optimize UI rendering during animation (#11604) 2026-07-05 18:44:26 +02:00
David Luzar 5b0f5a4c2d fix(editor): revert viewport animation back to 500ms (#11600) 2026-07-05 09:45:59 +02:00
51ca8abde4 feat(packages/excalidraw): viewport locking (#11554)
Co-authored-by: barnabasmolnar <barnabas@excalidraw.com>
Co-authored-by: Arnost Pleskot <arnostpleskot@gmail.com>
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
2026-07-03 22:57:47 +02:00
AnviandChristopher Tangonan cce5001aaa fix(editor): keep eraser shortcut consistent with tool switch rules (#11571)
---------
Co-authored-by: Christopher Tangonan <ctangonan123@gmail.com>
2026-06-29 10:04:08 +02:00
Dany Valverde Caldasanddwelle 4ce70b815e fix(editor): ensure canvas is cleared when background color is invalid to prevent ghosting (#11458)
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
2026-06-26 22:59:17 +02:00
David Luzar c070c8ffa6 fix(editor): improve scroll animation interpolation (#11562) 2026-06-26 09:56:12 +02:00
Márk Tolmácsanddwelle e4c70cb6c6 feat(editor): AnimationController for scrollToContent (#11553)
---------

Signed-off-by: Mark Tolmacs <mark@lazycat.hu>
Co-authored-by: dwelle <5153846+dwelle@users.noreply.github.com>
2026-06-26 09:35:32 +02:00