Commit Graph
3995 Commits
Author SHA1 Message Date
Timothy Jaeryang Baek e8bdbd716b refac 2026-08-31 00:33:43 -04:00
Timothy Jaeryang Baek 7a11154182 refac 2026-08-31 00:32:46 -04:00
Timothy Jaeryang Baek 84d0940da1 refac 2026-08-31 00:11:04 -04:00
G30 9a669197c8 fix: let setting row controls shrink so long values do not squeeze the label (#29229) 2026-08-31 00:06:37 -04:00
Timothy Jaeryang Baek 64e6c9f010 refac 2026-08-30 23:56:01 -04:00
Timothy Jaeryang Baek e4dbfb1276 refac 2026-08-30 23:50:30 -04:00
Timothy Jaeryang Baek 492ccf3ac0 refac 2026-08-30 17:39:56 -04:00
Timothy Jaeryang Baek 78d8c9166f refac 2026-08-30 17:38:45 -04:00
Timothy Jaeryang Baek 22379ded1a refac 2026-08-30 12:22:32 -04:00
Classic298 1f529c4eb3 fix: structured output renderer crashing on an empty output slot (#29250)
A chat could hard-fail in the browser with "TypeError: can't access property content" and stop rendering the assistant message until a reload.

Streamed response items and content parts were placed at the index the provider reports. That index is not bounded by the length of the array the client has built up, so an entry could land past the end and leave a gap behind. Spreading the array on the next event turned that gap into a real empty entry, and the renderer then dereferenced it while looking for message text.

Output items that would land past the end are now appended, since later events locate them by id anyway. Content and summary parts are padded up to the index instead, because a part carries no id and the text streamed for it is addressed by that same index. The renderer and the structured editor now skip an empty entry as well, so chats already saved in the broken state still display and edit.

Fixes #29244
2026-08-30 11:56:41 -04:00
Classic298 83556188f5 fix: hide file preview zoom buttons on touch devices (#29176)
On a phone the file preview zoom bar shows plus and minus buttons that duplicate pinch-to-zoom and sit on top of an already small preview. They are hidden on coarse pointers now, so touch users get the preview area back and still zoom the way they expect.

The check is the pointer type rather than the viewport width, because what matters is whether the person can pinch, not how narrow their window is. A narrow desktop window keeps the buttons, a tablet does not.

The zoom percentage doubles as the reset control and has no gesture equivalent, so it stays visible, along with all page and slide navigation. Keyboard zoom is unaffected. Word document previews are left alone: they have no pinch support at all, so hiding their buttons would remove zooming entirely.

Fixes #29152
2026-08-28 18:46:53 -04:00
Timothy Jaeryang Baek e6031ea6da refac 2026-08-28 12:18:37 -04:00
Classic298andClaude b3591e60b1 fix: apply the selected model's tools and skills when starting a chat from the sidebar (#29058)
Clicking a pinned model in the sidebar started a new chat with that model but sent the previous model's tool_ids and skill_ids, and they stayed until the page was reloaded. The model dropdown was unaffected, and so was temporary chat.

A pinned entry links to /?model=<id>, which runs the new-chat path. That path applied the model's defaults and then restored the composer draft over the top, and the draft still held the selection from whichever model was active when it was written. The draft save is debounced, so the stale value was reliably the one read back.

The draft is now restored before the defaults are applied, so the model always decides which tools and skills are active while the unsent prompt, files and approval mode are still kept. Starting a new chat with several models selected now clears the selection instead of carrying the draft's over, since there are no per-model defaults to apply in that case.

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-27 19:24:19 -04:00
Classic298andClaude Opus 5 3749e7dc74 fix: stop streaming responses breaking on a duplicate output key (#29053)
* fix: stop streaming responses breaking on a duplicate output key

With reasoning-capable models the chat froze mid-stream: the first chunk of the answer appeared, nothing followed, and the whole message only showed up once generation finished. The browser console showed a Svelte each_key_duplicate error.

When a stream event addresses an output slot past the end of the array, the missing slots were filled with the event's own item, id included, so a gap of two left two entries claiming the same id. The next chunk for that item was matched by id, landed in the first of the two, and the rendered list ended up with two items sharing a key, which Svelte refuses to update.

Only the addressed slot now takes the event's item, and the slots before it are anonymous placeholders. Replayed the reported event sequence against the real code: keys are unique again and the chunks stay in order instead of being split across the copies.

* fix: stream reasoning deltas when the provider also sends reasoning_details

Providers such as OpenRouter emit reasoning_details alongside the reasoning
text on the same delta. Merging those details cleared the pending event
unconditionally, discarding the response.reasoning_text.delta that had just
been built, so the client received no reasoning until the response completed
and the thinking block only appeared after generation finished.

The event is now only dropped when the details were all there was to report.
Details persistence is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014uuEg4AXPs9zE3vVUfN1Fj

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-27 18:25:49 -04:00
Timothy Jaeryang Baek ae549d3e4a refac 2026-08-27 16:41:43 -04:00
Timothy Jaeryang Baek 9d95a0148b refac 2026-08-27 16:06:25 -04:00
Timothy Jaeryang Baek 061fb43432 refac 2026-08-27 15:34:20 -04:00
Timothy Jaeryang Baek 5c62cc0517 chore: format 2026-08-25 16:53:53 -04:00
Timothy Jaeryang Baek f71e9570c0 refac 2026-08-25 16:52:31 -04:00
Timothy Jaeryang Baek 54d7a22370 refac 2026-08-25 16:34:49 -04:00
Timothy Jaeryang Baek 02400c7a50 refac 2026-08-25 15:15:18 -04:00
Timothy Jaeryang Baek f158f892f4 refac 2026-08-25 15:14:11 -04:00
Timothy Jaeryang Baek bc4c91e6d6 refac 2026-08-25 15:11:06 -04:00
Timothy Jaeryang Baek a21c8d15ee refac 2026-08-25 14:48:38 -04:00
Timothy Jaeryang Baek 3374b21a7d refac 2026-08-25 14:39:25 -04:00
Timothy Jaeryang Baek 92a1502126 refac 2026-08-25 14:22:20 -04:00
Timothy Jaeryang Baek 7198e9d0df refac 2026-08-25 14:06:25 -04:00
Timothy Jaeryang Baek d241df8d79 refac 2026-08-25 13:39:54 -04:00
Timothy Jaeryang Baek a4738e0459 refac 2026-08-25 12:45:12 -04:00
Timothy Jaeryang Baek 2f97c9fce3 refac 2026-08-25 10:00:43 -04:00
Timothy Jaeryang Baek aa3d569610 refac 2026-08-25 09:59:07 -04:00
Timothy Jaeryang Baek 2a0274a0a0 refac 2026-08-24 20:34:59 -04:00
Timothy Jaeryang Baek 11db926a7b refac 2026-08-24 19:20:24 -04:00
G30 e6648aefb5 fix: honor the terminal file browser filesystem root instead of clamping to home (#29006) 2026-08-24 17:55:51 -05:00
Timothy Jaeryang Baek e9efb95a9c refac 2026-08-24 18:17:11 -04:00
Timothy Jaeryang Baek 7a533d0d5b refac 2026-08-24 18:14:30 -04:00
Timothy Jaeryang Baek fd8cc2ba4a refac 2026-08-24 18:06:59 -04:00
G30 da9245626e fix: keep the viewport in place when older messages load above it (#28657) 2026-08-24 17:51:20 -04:00
Timothy Jaeryang Baek 8c1f3d3824 refac 2026-08-24 17:39:30 -04:00
Timothy Jaeryang Baek 8a170897ba refac 2026-08-24 07:28:09 -04:00
Timothy Jaeryang Baek 495296346e refac 2026-08-24 06:26:49 -04:00
Timothy Jaeryang Baek ef455fcef9 refac 2026-08-24 06:25:09 -04:00
Timothy Jaeryang Baek 978d257214 refac 2026-08-24 05:40:53 -04:00
Timothy Jaeryang Baek b30b11d4c9 refac 2026-08-23 16:01:36 -04:00
Timothy Jaeryang Baek e623c02acc refac 2026-08-23 15:06:30 -04:00
Timothy Jaeryang Baek 78f48a21ee refac 2026-08-23 14:40:48 -04:00
Timothy Jaeryang Baek 842c1f9d67 refac 2026-08-23 13:10:07 -04:00
Timothy Jaeryang Baek 0fb542b376 refac 2026-08-23 12:59:59 -04:00
Timothy Jaeryang Baek 3c66d639e3 refac 2026-08-23 12:33:34 -04:00
Timothy Jaeryang Baek c1c81f8127 refac 2026-08-23 03:40:40 -04:00