feat(face): Codebuff-parity Best-of-N cards and progress UX - #128
Merged
Conversation
Match ImplementorCard chrome from Codebuff CLI: rounded dashed borders, Proposal #N labels, running/completed status text, file +/- bars, 2-col masonry when wide, and getMultiPromptPreview-style progress copy. mode=show picker gains Best-of-N header chip and keyboard hints.
3 tasks
qdang46
added a commit
that referenced
this pull request
Jul 29, 2026
* feat(face): AskUserQuestion multi-question chips + Claude schema parity Phase A aligns tool schema/prompt with Claude (header, multiSelect, 1-4 questions, 2-4 options). Phase B adds a Claude-style chip tab bar for multi-question Face overlays with clickable answered/active chips. * feat(face): Claude-style agent team panel under prompt Unify Grok subagents and swarm mirrors in a selectable roster with Enter/message/kill, Ctrl+Shift+T team tasks, and soft DM routing. Implements plan #85; defers tmux and live daemon SwarmStatus ACP emit. * feat(face): add remappable keybindings.json and /keybindings Ship a Claude-style user keybindings file under ~/.next-code that merges onto Face ActionRegistry, with /keybindings open+reload and registry-routed demote/tasks chords. * feat(face): Best-of-N candidate cards and picker for mode=show Wire structured BoN progress/pick through daemon ACP so Face can show live candidates and let users select or cancel instead of silent auto-apply. * feat(face): wire Plan→execute gate through daemon ACP Bridge ExitPlanMode/EnterPlanMode tools to Face PlanApprovalView, allow plan.md writes under DCG Plan, restore prePlanMode on exit, and add /plan open editor support. * feat(face): add Claude-style /memory typed browser Open a local typed memory/notepad catalog from /memory (memdir taxonomy + Enter to $EDITOR) instead of waiting on ACP MemoryFiles. * feat(face): wire ! bash mode through pager_agent Face already owns bang chrome; honor PromptBlockMeta.bash_command, run the shell locally, and emit execute tool updates with bash_mode so output lands in the transcript without a model turn. * feat(face): tool-specific permission cards for bash and edit Bridge ACP requests with ToolKind, Claude-style titles/options, and command/cwd/diff preview chrome so Face permission_view is not a generic Approve overlay. * feat(tools): replace stub lsp with real language-server client Wire go-to-definition, hover, references, diagnostics, and related Claude-parity ops over stdio LSP servers (lazy start/stop per language via PATH builtins or .next-code/lsp.json). * feat(face): EnterPlanMode/ExitPlanMode tools with prePlanMode restore Stash and restore pre-plan permission mode on the daemon, load plan.md when ExitPlanMode omits plan_content, and wire SetPermissionMode through the same enter/leave helpers. * feat(face): Claude-style one-row sticky prompt chrome on scroll Default sticky_chrome collapses Face sticky headers to a pinned preview while scrolling history; click jumps to the prompt. Set sticky_chrome = false for the previous multi-row sticky. * feat(tools): add Claude-style TaskCreate/Get/List/Update graph API Session-scoped task graph with blocks/blockedBy, owner, and activeForm, registered alongside the existing todo tool without replacing it. * fix(face): wire live swarm ACP for agent-team panel Forward SwarmStatus/DM/plan from pager, stop via CommStop, and fix team-task nav/claim so the Claude-style panel is not Grok-only chrome. * feat(face): OMO-shaped session /goal with daemon store and idle continuation Add per-session goal persistence, create/update/get_goal tools, ACP x.ai/goal/* + GoalUpdated, and Face slash Effects so chrome tracks the daemon instead of local-only state. * feat(tools): add Claude-compatible unified Agent facade Thin Agent tool over swarm spawn/DM with subagent_type mapping, isolation=worktree, model override, and resume via existing DM path. Aliases Task/task/task_runner to Agent; cite LOOK tools-gaps survey. * docs(face): drop OMO wording from session /goal comments and LOOK * feat(face): wire AlwaysApprove/YOLO to DCG BypassPermissions Map Face chrome modes onto DCG SetPermissionMode (ask→Default, always-approve→Bypass), handle x.ai/yolo_mode_changed so Shift+Tab YOLO is not Face-local only, and document the Face↔DCG cycle mapping. * wip: BestOfN candidate cards + fix highlight merge * feat: add multiple new features and enhancements to the Face and Hashline components - Implemented paste API key UX in the connect screen. - Integrated hashline Editor API with SnapshotStore and BlockResolver. - Added configurable statusline for prompt chrome. - Introduced /experimental checklist and gates. - Developed /context command for session view model breakdown. - Created background task hub with enhanced UX. - Migrated mermaid rendering to sidebar and updated to mermaid-rs-renderer. - Highlighted bare magic keywords and planned multi-question support for AskUserQuestion. * fix(face): auto-create NewSession after auth complete when on Welcome screen After handle_auth_complete, drain_startup_actions may not create a session when deferred_startup is empty (no resume/worktree/prompt). The user lands on an empty/black welcome screen with no agent and has to type a character to trigger NewSession — which may race with ACP init. Fix: after drain_startup_actions, if still on Welcome with no deferred actions and access is granted, auto-create NewSession (mirrors minimal-mode behavior in event_loop.rs). * fix: clear auth_input_at on login flow start * fix(face): notify daemon after API key connect and defer empty model picker After Face /connect saves credentials, NotifyAuthChanged so the daemon reloads routes and pushes a catalog; keep the post-connect picker closed until models exist so status is not stuck on unknown with Popular providers only. * fix(face): atomic welcome submit and create session on plain SendPrompt Welcome Enter with text now NewSession+SendPrompt in one shot; unbound plain prompts call skip_picker_and_create_session like bash so the first message is not stuck until a second send. Deferred NewSession keystrokes are stashed; Face retries Message send once on daemon disconnect. * chore: refresh Cargo.lock after Best-of-N merge * fix(face): show bg-task pill on prompt statusline (Claude footer parity) Surface ambient background work on the prompt chrome (Claude SummaryPill / PromptInputFooterLeftSide) so tasks remain visible while turn-status shows spinner. Use BuiltinStatusLine-style Context N% and │ separators; keep Face Ctrl+B hub hint on the idle watching row. * fix(face): emit ACP Diff content for edit/hashline tools Map lowercase daemon edit tools to ToolKind::Edit and pass old/new text via ToolDone metadata + ToolCallContent::Diff so Face scrollback can render +/- hunks (same path as grok-build SearchReplace EditsApplied). * feat(face): add AcceptEdits to Shift+Tab permission cycle Claude Code cycles default → acceptEdits → plan → auto → bypass; Face skipped AcceptEdits despite DCG already supporting it. Wire settings, prompt flag, and session mirror so edits auto-allow while shell still asks. * feat(face): Cursor-style /multitask parallel workers Drain queued (or inline) prompts into headless CommSpawn workers so the lead stays interactive with summary-only report-back. Steer running workers via agent-team soft DM or /multitask --to. Route legacy run_subagent through the Agent façade. * feat(face): Codebuff-parity Best-of-N cards and progress UX Match ImplementorCard chrome from Codebuff CLI: rounded dashed borders, Proposal #N labels, running/completed status text, file +/- bars, 2-col masonry when wide, and getMultiPromptPreview-style progress copy. mode=show picker gains Best-of-N header chip and keyboard hints. * fix(face): honor render_mermaid_target sidebar (cache + crop) Settings updated current_ui / disk but not the appearance cache the render path reads, so sidebar stayed ignored. Sync the cache on set/ rollback/prime, crop inline ASCII when target is sidebar, and keep [Open Sidebar] working. * fix(face): keep post-connect model picker flag on Welcome Catalog can land via NotifyAuth/models update before NewSession leaves Welcome; clearing the flag there made OpenModelPicker a no-op and skipped the picker permanently. * fix(face): drop duplicate Best-of-N Question.header #128 re-added header after #124 already set it, breaking next-code compile. * fix(face): make /memory edit usable without black screen Enter/e opens an in-modal TextArea editor (Ctrl+S save). External $EDITOR handoff keeps the alt screen for GUI editors and uses Claude-parity Windows defaults (notepad + wait), so select-to-edit no longer leaves a blank main buffer when vi is missing. * fix(face): repair ToolContext literals after PR #112 merge Remove duplicated ToolContext blocks and restore the BestOfN setter brace so app-core tests compile cleanly on review. * feat(face): Claude footer statusline interactivity parity Wire SummaryPill click to Tasks hub, paint clickable @agent pills with enterTeammateView-style switch, surface multitask workers on chrome, and expose agent-panel hit targets for click-to-enter. * Add Face session /diff modal with Claude DiffDialog parity. Review git HEAD working tree and per-turn scrollback edits in a ModalWindow with list/detail navigation, wired through /diff slash command and ActiveModal::DiffReview. * docs(face): refresh LOOK matrix after session /diff lands Mark /diff and sibling Face chrome ports as done on review; drop unused DiffModalState helper. * Add Alt+T reasoning effort toggle (Claude thinking-toggle parity). Maps Alt+T / dagger to ToggleThinkingEffort: none-menu models toggle off/on with stash; otherwise cycle the offered effort list. Distinct from Ctrl+E display fold. * docs(plans): exhaustive Face vs .tmp cross-repo UX inventory Honest has/partial/missing scoring after #112/#124-#135; dozens of portable gaps with file pointers. Supersedes shallow all-Done matrix claims. * feat(face): Claude footer keyboard snag (Down/arrows/Enter) Complete #133 mouse-only pills: empty Down and history-exit Down focus footer items; Left/Right cycle; Enter opens tasks hub or @agent; Esc clears. Port of Claude footerSelection / Footer context. * feat(face): Codex statusline reasoning + run-state segments Add configurable Reasoning (effort) and RunState (idle/running/...) statusline segments with Settings and /statusline toggle. When Reasoning is on, Model stays bare (Codex-like density). * docs(plans): mark footer snag + statusline reasoning shipped Update cross-repo inventory after #137/#138. * chore: update workflow status * feat(face): which-key binding overlay (Ctrl+K) OpenCode-style compact bottom-panel overlay showing active keyboard bindings grouped by category (Essentials, Input, Navigation, View, Panels, Session, Dashboard). Distinct from the full ShortcutsHelp modal (Ctrl+./Ctrl+X). - WhichKeyState with group tabs, scroll, keyboard navigation - build_groups() from ActionRegistry filtered by active When contexts - render_which_key() — 8-line bottom panel with tab bar + grid - handle_input() — h/l switch groups, j/k scroll, PgUp/PgDn/Home/End - Toggle with Ctrl+K on AgentScreen --------- Co-authored-by: quangdang46 <tranquangdang21@gmail.com>
bfloat32
pushed a commit
to bfloat32/next-code
that referenced
this pull request
Jul 30, 2026
quangdang46#128 re-added header after quangdang46#124 already set it, breaking next-code compile.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Proposal #Nlabels,� running/completed ✓status, file A/M ± bars, 2-column masonry when wide.getMultiPromptPreview(Generating N proposals...,Selecting best...,Applying selected changes...).mode=showpicker: Best-of-N header chip + ↑↓/Enter/Esc hints; richer option labels/descriptions.References
.tmp/codebuff/cli/src/components/blocks/implementor-row.tsx.tmp/codebuff/cli/src/utils/implementor-helpers.ts(getMultiPromptPreview, file stats)docs/plans/LOOK-20260724-codebuff-ux-parity-face.md/ PR docs(plans): Codebuff vs Face UX parity LOOK (BoN, edit, @picker) #96Test plan
cargo test -p next-code-best-of-n --libcargo test -p xai-grok-pager --lib -- best_of_ncargo test -p next-code --lib -- face_best_of_n::[best_of_n] mode = show, count ≥ 2 →$bestofn→ see Codebuff-like cards → pick/Esc