Commit graph

3288 commits

Author SHA1 Message Date
Timothy Jaeryang Baek
6b01f96eac refac 2026-02-27 15:56:25 -06:00
Timothy Jaeryang Baek
d6d9d1c535 refac 2026-02-27 14:36:13 -06:00
Timothy Jaeryang Baek
646b64a318 refac 2026-02-27 13:37:03 -06:00
Timothy Jaeryang Baek
4737e1f118 feat: open terminal integration 2026-02-27 13:08:59 -06:00
Classic298
7ea6afdf95
perf: cache KaTeX module import as singleton across all renderer instances (#21880)
* perf: cache KaTeX module import as singleton across all renderer instances

KatexRenderer.svelte dynamically imports katex, mhchem, and the CSS on every component mount. When a message contains multiple math expressions, this triggers redundant module resolution for each one. Move the import promise to a module-level singleton using Svelte's context='module' script block so it loads once and is shared across all KatexRenderer instances.

* Update KatexRenderer.svelte
2026-02-26 15:34:42 -06:00
Classic298
4654ecbf1b
perf: fast-path comparison in ResponseMessage to skip JSON.stringify during streaming (#21884)
ResponseMessage compared the entire message object via JSON.stringify on every reactive tick to detect changes. During streaming, content changes on every token, making the two O(content_length) JSON.stringify calls always return different results — pure wasted work. Add a fast O(1) comparison on content and done fields first. When either differs (the common streaming case), skip straight to cloning. Only fall through to the expensive JSON.stringify comparison for infrequent changes like sources, annotations, or status updates.
2026-02-26 14:47:32 -06:00
Timothy Jaeryang Baek
419ea1c346 refac 2026-02-26 00:00:01 -06:00
Timothy Jaeryang Baek
eca9b405eb refac 2026-02-25 19:58:50 -06:00
Timothy Jaeryang Baek
58d685eea4 refac 2026-02-25 19:39:24 -06:00
Timothy Jaeryang Baek
44ed941a5d refac 2026-02-25 19:38:00 -06:00
Timothy Jaeryang Baek
46229a93ce refac 2026-02-25 19:32:01 -06:00
Timothy Jaeryang Baek
50eff6a672 refac 2026-02-25 19:14:02 -06:00
Timothy Jaeryang Baek
c303388296 refac 2026-02-25 19:02:52 -06:00
Timothy Jaeryang Baek
5a08084899 refac 2026-02-25 19:00:56 -06:00
Timothy Jaeryang Baek
819ea0d9be refac 2026-02-25 18:30:53 -06:00
Timothy Jaeryang Baek
1f77691b01 refac 2026-02-25 18:16:20 -06:00
Timothy Jaeryang Baek
50e6a19957 refac 2026-02-25 18:06:09 -06:00
Timothy Jaeryang Baek
c5225039ab refac 2026-02-25 17:23:22 -06:00
Timothy Jaeryang Baek
f2c3fff278 refac 2026-02-25 17:07:24 -06:00
Timothy Jaeryang Baek
3271a5277c refac 2026-02-25 16:56:32 -06:00
Timothy Jaeryang Baek
8b2160f2f7 refac 2026-02-25 16:13:18 -06:00
Timothy Jaeryang Baek
bee13f72ad refac 2026-02-25 15:59:23 -06:00
Timothy Jaeryang Baek
64ff15a536 refac 2026-02-25 15:52:12 -06:00
Timothy Jaeryang Baek
636ab99ad8 feat: experimental open terminal integration 2026-02-25 15:15:53 -06:00
Timothy Jaeryang Baek
484ba91b07 refac
Co-Authored-By: Algorithm5838 <108630393+Algorithm5838@users.noreply.github.com>
2026-02-25 13:56:28 -06:00
Timothy Jaeryang Baek
50f95a4f1a refac 2026-02-25 13:17:29 -06:00
Timothy Jaeryang Baek
184e921930 refac 2026-02-25 03:09:23 -06:00
Timothy Jaeryang Baek
958fbdd5c0 refac 2026-02-24 16:12:02 -06:00
Timothy Jaeryang Baek
b36e55cf1f refac 2026-02-24 13:27:48 -06:00
Timothy Jaeryang Baek
2461121637 refac 2026-02-23 18:31:26 -06:00
EntropyYue
22f074cf59 fix: dictation toggle shortcuts i18n 2026-02-23 22:18:34 +08:00
Timothy Jaeryang Baek
895c805e62 feat: dictation toggle 2026-02-23 02:54:53 -06:00
Timothy Jaeryang Baek
9044abf3bb chore: format 2026-02-23 01:40:53 -06:00
G30
a8a3098782
fix(ui): apply select-none to remaining dropdown menus globally to prevent text highlighting (#21763) 2026-02-23 01:22:02 -06:00
G30
238e9da209
fix(ui): prevent highlighting and dragging of text in admin settings menu link (#21761) 2026-02-23 01:21:55 -06:00
G30
49a1b37e5d
fix(ui): prevent highlighting of text in chat integrations menu (#21758) 2026-02-23 01:21:46 -06:00
Timothy Jaeryang Baek
c035ff7d14 refac 2026-02-22 19:18:25 -06:00
Timothy Jaeryang Baek
2558fe1a3b refac 2026-02-22 19:16:35 -06:00
Timothy Jaeryang Baek
e61406c825 refac 2026-02-22 18:19:49 -06:00
Timothy Jaeryang Baek
4853ededca refac 2026-02-22 18:05:25 -06:00
Timothy Jaeryang Baek
30a13b9b2f refac: ollama str think support 2026-02-22 17:11:50 -06:00
Classic298
e0087acfb4
fix: model fallback routing for all model types and default model selection (#21736)
fix: model fallback routing for all model types and default model selection

Backend: When ENABLE_CUSTOM_MODEL_FALLBACK is active and a custom model's
base model is unavailable, the fallback now swaps the model and form data
to the configured default model directly. This ensures routing uses the
fallback model's type (pipe, Ollama, or OpenAI) instead of the original
model's type, which previously caused "Model not found" errors when the
fallback was a different backend type.

Frontend: Fixed default model selection in new chat initialization where
the admin-configured default models were always overwritten by the first
available model. The first-available fallback now only triggers when the
configured defaults don't resolve to valid available models.
2026-02-22 15:24:14 -06:00
Timothy Jaeryang Baek
1f474187a7 refac
Co-Authored-By: Classic298 <27028174+Classic298@users.noreply.github.com>
2026-02-22 15:22:53 -06:00
Classic298
2beeeb90c2
fix(a11y): add aria-labels to chat message components (#21708)
Add aria-labels, aria-expanded, and semantic improvements to:
- RateComment: close button, rating scale, feedback textarea
- Citations: toggle button with count, source item buttons
- Source/SourceToken: contextual aria-labels for citation buttons
- StatusHistory: toggle button with expanded state
- WebSearchResults: descriptive favicon alt text
- FollowUps: convert div to button element
- RegenerateMenu: submit suggestion button
- FloatingButtons: action buttons, input field, submit button
- CitationModal: close button

WCAG: 4.1.2 (Name, Role, Value), 2.1.1 (Keyboard), 1.1.1 (Non-text Content)
2026-02-22 14:36:42 -06:00
Classic298
16e567df57
fix(a11y): enhance accessibility for chat settings components (#21715)
This commit adds aria-labels to the text inputs and textareas that previously lacked them, applies role=switch to inputs, and adds accessible titles to floating quick actions.
2026-02-22 14:33:07 -06:00
Classic298
2ef55972ff
fix: reset taskIds and messageQueue on new chat (#21731)
fix: reset taskIds and messageQueue on new chat

Fixes a bug where clicking "New Chat" after sending a message would
silently drop subsequent messages. The initNewChat function reset most
chat state but did not clear taskIds or messageQueue, causing
submitPrompt to queue messages indefinitely instead of sending them.
2026-02-22 14:30:44 -06:00
G30
f95cff0895
fix(ui): replace static dropdown backgrounds with transparent mapping (#21728) 2026-02-22 14:23:34 -06:00
Classic298
bf0fb1c449
fix(a11y): add aria-labels to chat core components (#21709)
Add aria-labels to close, back, and action buttons across:
- Controls/Controls.svelte: close chat controls button
- ChatControls/Embeds.svelte: close embed button
- Overview/Node.svelte: favorite toggle button
- Overview/View.svelte: back and close overview buttons
- ShortcutsModal.svelte: close button
- ShareChatModal.svelte: close button
- ToolServersModal.svelte: close button
- Placeholder/FolderTitle.svelte: folder icon picker, folder options menu

WCAG: 4.1.2 (Name, Role, Value)
2026-02-22 14:18:19 -06:00
Classic298
08f1c823ad
fix(a11y): improve model selector accessibility with proper listbox/option pattern (#21706)
- Replace incorrect aria-roledescription='model-item' with role='option' and aria-selected on ModelItem.svelte. The previous attribute was not a valid ARIA role description and provided no useful information to screen readers.

- Add contextual aria-label to each model item button (e.g. 'Select GPT-4 model') instead of just the raw model name, making the action clear to screen reader users.

- Add role='listbox' and aria-label='Available models' to the scrollable model list container in Selector.svelte so screen readers announce the container's purpose and navigate items correctly.

- Make the model selector trigger button's aria-label dynamic: it now announces 'Selected model: GPT-4' when a model is selected, falling back to 'Select a model' when nothing is selected.

- Add aria-label to the eject (unload) button in ModelItem.svelte so screen readers announce its purpose.

- Add aria-label to the cancel download button in Selector.svelte with the specific model name being canceled.

- Improve model profile image alt text from generic 'Model' to contextual '{{modelName}} profile image'.
2026-02-21 16:14:09 -06:00
Timothy Jaeryang Baek
631e30e22d refac 2026-02-21 15:35:34 -06:00