summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-02-14Clarify Gemini file expiry wording in Quick GuideHEADmainYurenHao0426
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14Rewrite Quick Guide as compact accordion with updated feature coverageYurenHao0426
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14Create quick chat nodes immediately on send, fix Enter key routingYurenHao0426
- 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>
2026-02-14Fix file drag-drop: allow dragging items out of folders and to empty areaYurenHao0426
- 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>
2026-02-14Add horizontal scroll and thin borders for markdown tablesYurenHao0426
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>
2026-02-14Fix stale closure bug in council/debate node title generationYurenHao0426
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>
2026-02-14Add model response selection UI when no final verdict in debateYurenHao0426
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>
2026-02-14Include elimination info in debate prompts so remaining debaters stop ↵YurenHao0426
referencing eliminated participants Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14Fix debate elimination display and preserve original debater role numbersYurenHao0426
- 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>
2026-02-14Add background task persistence for debate & council operationsYurenHao0426
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>
2026-02-14Add README with startup instructions and add google-genai dependencyYurenHao0426
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14Enable web search for Claude models via web_search_20250305 toolYurenHao0426
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>
2026-02-14Rework debate prompts, add turn-based rounds and self-elimination convergenceYurenHao0426
- 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>
2026-02-13Hide ReactFlow attribution badge in bottom-right cornerYurenHao0426
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13Style all scrollbars to match katex thin transparent styleYurenHao0426
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>
2026-02-13Add cyan border and debate label to LLMNode in debate modeYurenHao0426
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>
2026-02-13Add LLM Debate mode for multi-round iterative model discussionsYurenHao0426
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>
2026-02-13Add per-model council settings, Quick Chat council mode, and per-member ↵YurenHao0426
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>
2026-02-13Add LLM Council mode for multi-model consensusYurenHao0426
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>
2026-02-13Fix theme desync when loading blueprintsYurenHao0426
- 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>
2026-02-13Default theme to system/browser color scheme preferenceYurenHao0426
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>
2026-02-13Add copy response button to response toolbarYurenHao0426
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>
2026-02-13Add rendered/plain text toggle for response viewsYurenHao0426
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>
2026-02-13Fix expanded response view dark mode and KaTeX scrollbar stylingYurenHao0426
- 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>
2026-02-13Add LaTeX math rendering with KaTeXYurenHao0426
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>
2026-02-13Remove JWT token expirationYurenHao0426
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>
2026-02-13Add username fallback for API key resolution when JWT token expiresYurenHao0426
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>
2026-02-13Remove provider badge from file list and add upload indicator to right sidebarYurenHao0426
- 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>
2026-02-13Add auth headers to file upload/delete requestsYurenHao0426
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>
2026-02-13Fix file upload/delete using user API keys instead of env vars onlyYurenHao0426
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>
2026-02-13Auto re-upload expired Google files on node runYurenHao0426
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>
2026-02-13Add Anthropic Files API and persistent Google file caching for all providersYurenHao0426
- 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>
2026-02-13Deduplicate merged trace messages and fix double-count in contextYurenHao0426
- 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>
2026-02-13Add unfold merged trace: convert to sequential node chainYurenHao0426
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>
2026-02-13Add Claude provider, OpenRouter fallback, and GFM markdown supportYurenHao0426
- 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>
2025-12-14rm 4.5blackhao
2025-12-14model managementblackhao
2025-12-14auto saveblackhao
2025-12-14add tutorialblackhao
2025-12-11fix traceblackhao
2025-12-11add some logblackhao
2025-12-11add some logblackhao
2025-12-10fix: hide .json extension when renaming blueprintsblackhao
2025-12-10fix: use getCurrentUser() for all project/file API callsblackhao
2025-12-10fix: resolve all TypeScript errors for production buildblackhao
2025-12-10set keys 2blackhao
2025-12-10set keysblackhao
2025-12-10fix: add allowed hostsblackhao
2025-12-10fix: use relative API paths for production deploymentblackhao
2025-12-10user datablackhao