| Age | Commit message (Collapse) | Author |
|
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>
|
|
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>
|
|
- 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>
|
|
- 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>
|
|
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>
|
|
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>
|
|
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>
|
|
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>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|