Skip to content

feat(face): Codebuff-parity Best-of-N cards and progress UX - #128

Merged
qdang46 merged 1 commit into
reviewfrom
feat/face-bon-codebuff-parity
Jul 29, 2026
Merged

feat(face): Codebuff-parity Best-of-N cards and progress UX#128
qdang46 merged 1 commit into
reviewfrom
feat/face-bon-codebuff-parity

Conversation

@qdang46

@qdang46 qdang46 commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Bring Face Best-of-N UI closer to Codebuff ImplementorCard: rounded dashed borders, Proposal #N labels, â—� running / completed ✓ status, file A/M ± bars, 2-column masonry when wide.
  • Progress copy matches Codebuff getMultiPromptPreview (Generating N proposals..., Selecting best..., Applying selected changes...).
  • mode=show picker: Best-of-N header chip + ↑↓/Enter/Esc hints; richer option labels/descriptions.

References

Test plan

  • cargo test -p next-code-best-of-n --lib
  • cargo test -p xai-grok-pager --lib -- best_of_n
  • cargo test -p next-code --lib -- face_best_of_n::
  • Manual: [best_of_n] mode = show, count ≥ 2 → $bestofn → see Codebuff-like cards → pick/Esc

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.
@qdang46
qdang46 merged commit 2bcf8b1 into review Jul 29, 2026
1 check passed
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant