Spaces:
Sleeping
Sleeping
Commit History
-
fix(ui): honor disabled human in auto-select; rename Transparency to View Prompts
NeonClary +1: CursorAuto-select no longer prepends a human participant when they are turned off in the sidebar, and buildStartPayload always filters by enabledMap even when an override list is supplied. Rename the Settings accordion header from Transparency to View Prompts. Co-authored-by: Cursor <cursoragent@cursor.com>de1db91 -
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
-
chore: remove Max Participants debug instrumentation (verified working)
NeonClary +1: CursorReverts the temporary fetch()-based debug instrumentation added in a808caa (the "Debug instrumentation" section of that commit's message): * frontend/src/App.js (handleMaxParticipantsChange): - Removed the `// #region agent log` POST to 127.0.0.1:7660 that forwarded n / clamped / prev maxParticipants state to the local debug server. - Reverted the useCallback deps from [selectedIds, maxParticipants] back to [selectedIds]; `maxParticipants` was only in the deps because the instrumentation closed over it. * frontend/src/components/DevMenu.js: - Removed the panel-open render-snapshot useEffect that POSTed to 127.0.0.1:7660. - Restored the +/- stepper button onClick handlers to their original one-liner form (Math.max(3, ...) / Math.min(9, ...)), removing the wrapped click handlers that POSTed click-snapshots to the debug server. All non-instrumentation changes from a808caa (DownloadMenu split, Header prop wiring fix for maxParticipants, settings-m…0239f6d -
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 -
settings: drop Response Priority, make dev panel scrollable
NeonClary +1: CursorRemoves the "Prioritize model choice / Prioritize conversation speed" toggle from the settings menu (and its plumbing in App.js and the speedPriority/setSpeedPriority handlers) - the racing logic is no longer surfaced as a user choice. Caps the settings dropdown at calc(100vh - 80px) with overflow-y: auto so the menu always fits in the viewport and long content scrolls inside the panel instead of bleeding off the bottom. Co-authored-by: Cursor <cursoragent@cursor.com>6cac4f0
-
feat(transparency): add "View current chat prompts" to settings
NeonClary +1: CursorNew PromptCatalogModal under Settings -> Transparency lists every prompt template the orchestrator and participants use, grouped by phase, with a 1-2 sentence purpose for each, the runtime template variables, and a copy-to-clipboard button per prompt. Powered by a new GET /api/chat/prompts/catalog endpoint and a hand-curated backend/app/services/prompts/catalog.py. Header includes a "Download as .txt" button that produces a flat ccai-prompts-*.txt dump. Co-authored-by: Cursor <cursoragent@cursor.com>478df90 -
feat(limits): expose repetition / failsafe limits in settings menu
NeonClary +1: CursorHard-coded repetition counts in orchestrator (critique rounds, status-assessment iterations, consensus turn budget, dyad cap, stall recovery, auto-disable threshold) and the failsafe pause points are now driven by a `ConversationLimits` dataclass on `Session`. Defaults match the historical values; the API layer clamps user-supplied overrides to per-field bounds. Frontend: new "Conversation limits..." item under an "Advanced" section in the settings menu, opens a modal with steppers + descriptions grouped into Discussion structure / Reliability / Failsafes. Overrides persist via localStorage and ride along on /chat/start. Backend: GET /api/chat/limits/defaults serves defaults + bounds + descriptions so the modal is server-driven; new test_conversation_limits.py covers clamping behavior and endpoint shape (60 backend tests pass). Co-authored-by: Cursor <cursoragent@cursor.com>1ec996f -
Surface Credential Summary in settings + exports
NeonClary +1: CursorAdd a transparency section so users can see and download the orchestrator-generated Credential Summary (per-participant expertise, debating style, credibility on this question, biases to watch). Built after Phase 1 and refreshed once after Phase 2. Backend: - New GET /api/chat/{session_id}/credentials endpoint. - Credentials block included in TXT and MD exports after the participants list, omitted cleanly when the summary isn't built yet. - CSV table gains four columns (Expertise, Style, Credibility 0-1, Bias to watch) inserted between Participant and First opinion so the row reads as a self-contained narrative. - New `credentials_updated` SSE event fires after the Phase-1.5 build and after the Phase-3 refresh (only when the payload actually changes), so the frontend can cache the latest snapshot without polling. Frontend: - New CredentialSummaryModal: per-participant cards with name, expertise, style, bias, and a 0-1 credibility bar. - "View Credential Summary..." it…64d902c -
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 -
Import LLMChats3 master as CCAI baseline
NeonClary +1: CursorCo-authored-by: Cursor <cursoragent@cursor.com>c44fab6