| Age | Commit message (Collapse) | Author |
|
Read prefers-color-scheme media query on init instead of hardcoding
light mode. Sync dark class to <html> element at store creation so
global CSS applies immediately.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Adds a clipboard copy button next to the response label that copies
the raw response text. Shows a brief green checkmark on success.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Add an Eye/EyeOff toggle button to switch between rendered markdown and
raw plain text in all three response locations: main response panel,
expanded response modal, and Quick Chat messages. Useful for copying
raw text without formatting artifacts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Add dark mode background/text/border to response modal
- Add prose-invert to expanded response markdown container
- Style katex-display with thin transparent-track scrollbar for overflow formulas
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Support both $...$ / $$...$$ (remark-math) and \(...\) / \[...\] (GPT-style)
delimiters via a preprocessor that normalizes to dollar-sign syntax before
passing to ReactMarkdown.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Tokens no longer include an exp claim and decode skips expiry
verification, so users stay authenticated indefinitely.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
When the JWT token is expired or missing, endpoints could not resolve
user API keys and fell back to environment variables (which are unset).
Added resolve_user() helper that falls back to DB lookup by username
query param, and added ?user= to all frontend API calls as a belt-and-
suspenders approach alongside auth tokens.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Remove per-provider label from left sidebar file list since files are
now uploaded to all providers simultaneously
- Add uploading spinner to right sidebar "Upload & Attach" button
- Always upload with provider 'local' from right sidebar settings tab
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
The frontend upload and delete file fetch calls were missing auth
headers, so the backend could not resolve user-specific API keys.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
The upload_file and delete_file endpoints were calling API clients
without passing user-specific API keys, falling back only to environment
variables. Now both endpoints resolve keys from the authenticated user's
settings via get_user_api_key(), fixing "API key not found" errors for
users who configured keys through the frontend.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Add _check_google_file_active() to verify cached Google file URIs
before reuse. If expired (48h limit), clears cache and transparently
re-uploads via ensure_google_file_upload().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Add anthropic_file_id/google_file_uri fields to FileMeta (backend + frontend)
- Eager upload to Anthropic and Google at file upload time (like OpenAI)
- Cache and reuse file references in prepare_attachments for all 3 providers
- Add document content block injection in stream_claude (file_id, base64, text fallback)
- Conditional beta streaming for Anthropic Files API references
- Persist on-demand upload results (changed flag + save_files_index)
- Clean up file deletion for all providers (Anthropic warn-only, Google deduplicated)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Add dedup helper in computeMergedMessages to remove duplicate messages
by ID across all merge strategies (e.g. A-B-C + A-D-C → A-B-D-C)
- Fix getActiveContext adding merged trace messages twice (from both
outgoingTraces and mergedTraces)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Unfold takes a merged trace's messages, extracts the node order,
and creates real edges chaining those nodes sequentially (A→B→C→D→E).
The merged trace is deleted and replaced by a regular pass-through trace.
- Add unfoldMergedTrace() to flowStore (creates edges, rewires downstream)
- Add Unfold button (Layers icon) to Sidebar merged traces UI
- Fix isMerged edge detection to use explicit flag instead of ID prefix
- Fix LLMNode useUpdateNodeInternals deps for dynamic handle updates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Add Claude (Anthropic) as third LLM provider with streaming support
- Add OpenRouter as transparent fallback when official API keys are missing or fail
- Add remark-gfm to ReactMarkdown for table/strikethrough rendering
- Claude models: sonnet-4.5, opus-4, opus-4.5, opus-4.6
- Backend: new stream_claude(), stream_openrouter(), provider routing, API key CRUD
- Frontend: model selectors, API key inputs for Claude and OpenRouter
- Auto-migration for new DB columns (claude_api_key, openrouter_api_key)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|