Spaces:
Sleeping
Sleeping
Commit History
-
Improve mobile header and participants dropdown UX.
Jordan Miller +1: CursorAdd a header overflow menu on narrow screens, show the participants picker as a bottom sheet, and surface Create Expert Persona at the top of the dropdown with updated helper copy. Co-authored-by: Cursor <cursoragent@cursor.com>958ebfa
-
Build credentials during Phase 1 and streamline human participant setup.
NeonClary +1: CursorGenerate per-participant credentials concurrently with initial opinions, rebuild only on model changes, and let humans join from profile text with background credential generation—no question required upfront. Also refresh chat-start controls, rate-limit notices, and header layout. Co-authored-by: Cursor <cursoragent@cursor.com>d4017c8
-
feat(conversation): pluggable structures + decision methods (Robert's Rules, ranked-choice, majority)
NeonClary +1: CursorThe orchestrator is now structured as ConversationStructure → DecisionMethod plugins joined by a standardized DecisionInput contract. The existing six-phase flow is preserved as CollaborativeDiscussion + ConsensusDecision (unchanged behavior); three new decision methods (MajorityRulesDecision, RankedChoiceDecision, RobertsRulesVote) and one new structure (RobertsRulesDiscussion) are wired into the registry. Adding a new structure or decision method now means dropping a class into backend/app/services/conversation/{structures,decisions}/ and adding one line to the registry. Backend - New package backend/app/services/conversation/ with base classes, DecisionInput contract, and a get_structure/get_decision registry resolver (defaults: collaborative + consensus, so older /chat/start payloads keep working). - CollaborativeDiscussion + ConsensusDecision are thin wrappers over the original _phase_* functions in orchestrator.py — zero behavior change for the default path. - RobertsR…e661e91 -
feat(resilience): multi-tier participant failure recovery + Response-priority toggle
NeonClary +1: CursorWhen a participant's LLM call fails, the orchestrator now has a real recovery cascade instead of silently dropping the turn and relying solely on auto-disable-after-N-failures. The behaviour is gated on the new "Response priority" setting in the Settings menu, which mirrors the LLMChats3 toggle that used to live there: under "Prioritize model choice" (default) we preserve the user's chosen model and just note failures in chat as today, relying on the existing 2-attempt HTTP retry in openai_compat for the "always a second try" guarantee. Under "Prioritize conversation speed" we additionally race the chosen model against a fast fallback (existing logic in clients/llm_router.py) and then layer the new cascade on top. Backend - clients/openai_compat.py: classify failures as transient (5xx, 429, 408, 425, timeouts, connection errors) vs permanent (4xx auth/invalid/content-filter/404) and propagate via new error_kind / error_status fields on the result dict. - clients/llm_…cdef1a0 -
refactor(ui): shorten Settings menu — accordions + Model Selection merge
NeonClary +1: CursorThe Settings panel had grown long enough that scanning it required scrolling. Three changes to make it manageable: - Drop the Downloads section at the bottom. Every item it offered (chat .txt, chat .md, summary .csv) is already in the header DownloadMenu; duplicating them here was just noise. Removed the corresponding props from DevMenu and from the Header forwarding. - Convert each multi-item category (Model Selection, Display options, Transparency) into a collapsible accordion that defaults to closed. Added a new SectionHeader subcomponent and matching .dev-panel-section-header CSS that mimics the existing .dev-panel-label styling so collapsed sections still read as plain uppercase labels. Single-item categories (Theme, Max participants, Advanced) stay inline since collapsing a one-item section would just add a click without saving any vertical space. - Merge the old "Models" and "Participants" categories into a single "Model Selection" accordion containing Orc…d38c4fe -
feat(ui): header cleanup + Table View shortcut + post-chat downloads strip
NeonClary +1: Cursor- Header: drop the redundant 'Human: ' prefix on the human-participant button; the sidebar already labels the entry as Human, so the prefix was just visual noise. - Header: add a dedicated 'Table View' button that opens the same Summary Table modal as the Settings menu item, so users don't have to dig through a dropdown to view it. - ChatArea: after 'End of Chat', render a row mirroring every item in the header DownloadMenu (Summary table view, .txt, .md, summary .csv, full API history). The row stacks vertically on phones for full-label readability. - ParticipantSidebar: remove the 'Drag to reorder is not supported yet...' note; reordering isn't on the roadmap and the message just cluttered the sidebar header. Co-authored-by: Cursor <cursoragent@cursor.com>53edcb8
-
feat: human participant turns + credential intake redesign
NeonClary +1: CursorHuman Participant: new human_io service and HumanInputSlot/HumanParticipantModal/HumanTurnIndicator UI; orchestrator and chat API support human turns; ParticipantSidebar/ChatArea/MessageBubble wiring. Credential intake: new credential_intake prompt, expanded credential service, redesigned Credential Summary modal, prompt registry entry. Supporting: App state and routing for human turns + credentials, Header surface, ccai.css styling for new components, api/storage helpers. Co-authored-by: Cursor <cursoragent@cursor.com>11bf9b7
-
feat(ui): consolidate downloads, move theme into settings, restructure & darken settings menu, fix max-participants prop wiring
NeonClary +1: CursorHeader * Replace the standalone Sun/Moon button + the four-button download strip with a single Download dropdown (DownloadMenu.js). Members: View summary table, Chat .txt, Chat .md, Summary table .csv, and Full API history (the only download that lives only here). * Header now passes every prop to DevMenu explicitly. The previous '...devProps' rest spread silently dropped 'maxParticipants' because Header was destructuring it for ParticipantDropdown's use, leaving DevMenu's stepper to compute Math.max(3, undefined - 1) = NaN on every click. With explicit wiring the stepper receives a real number; the +/- buttons update state again. Settings menu (DevMenu.js) * New top item: Theme toggle (Sun/Moon flips Switch to dark/light mode label). * Every category's items are now indented to match the old Display Options pattern, so the small uppercase category labels read as headers. * Models / Per-participant rows render two-line: name on top, currently-selected model on a second line, elli…a808caa -
rename: 'CCAI Vibe Demo' -> 'Collaborative Conversational AI (CCAI) Demo'
NeonClary +1: CursorUpdates the user-visible product name everywhere it surfaced as a string: README frontmatter + H1, FastAPI app title, header H1, prompt-catalog download banner, and the additive-styles file header. No behavior change. Co-authored-by: Cursor <cursoragent@cursor.com>6a3a7e1
-
feat(participants): add "Select N Automatically" option
NeonClary +1: CursorWhen the user picks the new top-of-dropdown "Select N Automatically" option, the trigger label switches to "Participants Auto Selected" and manual persona checkboxes are hidden. Clicking either start button calls a new /api/chat/auto-select-participants endpoint that uses the orchestrator LLM to rank all available candidates by relevance to the question, populates the sidebar with the top N, then proceeds with /chat/start as usual. Manual selection is restored if auto mode is turned back off. Co-authored-by: Cursor <cursoragent@cursor.com>af5d1df -
Build CCAI Vibe Demo on top of LLMChats3 baseline
NeonClary +1: CursorMulti-participant Collaborative Conversational AI demo: the orchestrator runs a six-phase state machine (Initial Opinions, Critique x2, Status Assessment, Finalization, Consensus, Closure), produces a JSON Credential Summary keyed on credibility-for-question, and routes addressed-to messages through alliance detection. Two failsafes - 60+20 participant messages and 100+50 orchestrator calls - pause the loop until the user clicks Continue. Every LLM response is funneled through a centralized strip_thinking sanitizer before being stored, displayed, or fed back to the summarizer. Backend - New: services/{models,prompts/*,credential,consensus,context_budget, json_calls,extra_personas,orchestrator}.py, utils/sanitize.py, api/personas.py, data/demo_questions.json (10 long-context prompts). - Rewrote api/chat.py with /chat/start (N participants, summarizer + max-participants overrides), /chat/{id}/continue, table-view + csv-table exports. - Rate limit bumped to 30/day per IP; HF org …0bb4dfa