| Age | Commit message (Collapse) | Author |
|
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Move node creation decision before API call so new nodes appear
instantly with loading state instead of waiting for full response
- Use useFlowStore.getState().nodes for fresh state in the decision
- Fix Enter key in prompt textarea to call handleRunCouncil/handleRunDebate
for council/debate nodes instead of always calling handleRun
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Drop on file moves item to file's parent directory
- Drop on empty area moves item to project root
- Container gets flex-1 height so empty droppable space exists
- Mark internal drags with dataTransfer to distinguish from OS file uploads
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Matches the existing katex-display scroll pattern. Tables now have
1px borders and overflow-x: auto for wide content.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
The onComplete callbacks captured `nodes` from the closure at call time,
which was stale by the time streaming finished. Use useFlowStore.getState()
to read fresh state instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
When debate ends without a judge verdict (Display Only or Self-convergence
without winner), show last round responses with "Use this" buttons instead
of "No final verdict" placeholder.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
referencing eliminated participants
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Add elimination cards (orange themed) in Timeline showing who was convinced and by whom
- Add "N eliminated" badge in round headers
- Preserve original debater numbers after elimination by passing original_indices through debate_round()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Decouple debate/council execution from SSE connection lifecycle so tasks
survive browser disconnects. Backend runs work as asyncio.Tasks with
progressive disk persistence; frontend can reconnect and recover state.
- New backend/app/services/tasks.py: task registry, broadcast pattern,
disk persistence at milestones, stale task cleanup on startup
- New endpoints: POST start_debate/start_council, GET task stream/poll
- Frontend stores taskId on nodes, recovers running tasks on page load
- _applyPartialEvents rebuilds stage text + data from accumulated events
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
stream_claude was missing enable_google_search handling, so Claude models
could never perform web searches. Now passes the Anthropic web search tool
when enabled, affecting all modes (normal run, council, debate).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Round 1 parallel (form positions), Round 2+ sequential turn-based (each model
sees current round's prior responses before speaking)
- Prompts treat user question as open-ended, not as a debate proposition — models
form their own thesis in Round 1 then defend it
- Structured opposition: each model defends own unique position, not FOR/AGAINST
- Self-convergence: each model judges if convinced after each round, eliminated
models drop out, last one standing wins and provides final summary
- Skip convergence/judge checks on Round 1 (still forming positions)
- Auto-save now triggers on councilData/debateData updates so intermediate rounds
persist across page refresh
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Removes white scrollbar backgrounds globally, using thin translucent
thumbs on transparent tracks consistent with the LaTeX formula
scrollbar styling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Mirrors the amber border styling of council nodes with cyan for debate
nodes, including the icon color and model count subtitle.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Implements a debate feature alongside Council mode where 2-6 models
engage in multi-round discussions with configurable judge modes
(external judge, self-convergence, display-only), debate formats
(free discussion, structured opposition, iterative improvement, custom),
and early termination conditions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
trace selection
Council members now support individual temperature, reasoning effort, web search, and
context trace overrides. Quick Chat inherits council config from the source node and
streams through the 3-stage council pipeline. Blueprint loading migrates old string[]
council formats to CouncilMemberConfig[].
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
3-stage council orchestration: parallel model queries (Stage 1),
anonymous peer ranking (Stage 2), and streamed chairman synthesis
(Stage 3). Includes scope-aware file resolution for Google/Claude
providers so upstream file attachments are visible to all providers.
- Backend: council.py orchestrator, /api/run_council_stream endpoint,
query_model_full() non-streaming wrapper, resolve_provider() helper,
resolve_scoped_file_ids() for Google/Claude scope parity with OpenAI
- Frontend: council toggle UI, model checkbox selector, chairman picker,
SSE event parsing, tabbed Stage 1/2/3 response display
- Canvas: amber council node indicator with Users icon
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Stop blueprints from overriding user theme preference on load
- Replace manual <html> dark class sync with store subscriber that
keeps DOM in sync with any theme state change automatically
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|