[pull] main from xintaofei:main#156
Merged
Merged
Conversation
Pin codex-acp to 1.1.4 (codex 0.144.4) and adapt to the three new runtime signals it emits so the upgrade is regression-free: - Retry: surface `_meta.codex.error` (willRetry only) as a transient TurnRetrying event, reusing the existing retry banner. - Context compaction: render `_meta.contextCompaction` tool calls as a dedicated status card instead of a generic tool shell. - Sub-agent activity: suppress `_meta.codex.subagent` tool calls at the emit point to preserve current live and reload behavior.
… card Surface the sub-agent's model and reasoningEffort (codex-acp #304, top-level in the collab tool-call rawInput) on the live execution capsule — info that was previously visible only after a history reload. Gated to the spawn capsule so the live and reconstructed wait capsules stay in parity.
…selector codex-acp 1.1.4 (#293) advertises `/plan` as an AvailableCommand tagged `_meta.commandAction.kind = "setConfigOption"` (configId `collaboration_mode`, presentation `state`) — codex's signal that the client should render it as state, not an invokable command. codeg already surfaces that state through the generic `collaboration_mode` config-option selector, so listing `/plan` in the slash menu is redundant and its static description is wrong once plan mode is already on. Drop config-option state toggles from the command list, gated on Codex; commands with other action kinds (e.g. `/goal`'s `prefixPrompt`) stay.
…trol codex-acp 1.1.4 (#293) exposes a bespoke `_codex/session/goal_control` request ({sessionId, action: "pause"|"clear"}) to pause or clear the session's active goal. Wire it end-to-end, mirroring set_config_option: a GoalControlAction enum and ConnectionCommand::GoalControl, a UntypedMessage sender (the escape hatch already used for set_config_option / fork), both connection dispatch arms, a manager method, and the tauri command + HTTP endpoint. The backend sources the sessionId from the live session, so the frontend only supplies connectionId. On the card, GoalCard gains Pause/Clear buttons driven by a goal-control context: the panel decides liveness + ownership once and passes a callback, so the buttons hide on history reload, for viewers, and in the read-only sub-agent dialog (which renders MessageListView with no provider). Pause shows for an active goal, Clear for active or paused; resume is re-issuing the /goal prompt. Also pin 1.1.4's slimmed goal snapshot: it drops tokensUsed and adds createdAt / controlMethod, which pass through goal_marker unchanged while the absent tokensUsed degrades to a hidden stat.
AgentCapsule always drew a bordered, scrollable body frame below the pill, so a capsule whose conditional children were all absent rendered an empty "white box". The newer codex triggers this on every wait_agent — its wait returns no per-agent result, leaving the collab wait capsule with nothing to show. Detect an empty body with Children.toArray (which drops the false/null entries of the callers' conditional children) and, when there's nothing to show, render just a bare, non-interactive pill — no chevron, no frame. Fixes the long-standing sub-agent white box for both the live collab card and the history Agent capsule.
# Conflicts: # src/components/conversations/conversation-detail-panel.tsx # src/components/message/agent-capsule.tsx
…review The "Show completed" view toggle now defaults to off, so finished conversations are hidden until the user enables it. Imported local sessions are created with pending-review status instead of completed, keeping them visible under the new default and flagged for review.
…lemetry Add two switches below the reasoning settings on the Claude Code config page that control native config env vars in ~/.claude/settings.json: - Send attribution/billing identifier to the API (CLAUDE_CODE_ATTRIBUTION_HEADER) — default off - Disable telemetry or redundant network requests (CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC) — default on Each toggle writes an explicit value to both the native config env and the DB env overlay, and the defaults are materialized on save. Labels are localized across all supported locales.
Grok's native exit_plan_mode sends a blocking _x.ai/exit_plan_mode request to get the user's decision before leaving plan mode. codeg had no handler, so the turn stalled with nothing rendered. Bridge it to an interactive approval card (approve / request changes / abandon), shown in both the main conversation and the delegated sub-agent dialog and carried on the session snapshot so a mid-turn attach recovers it. Cancelling a turn now reclaims the pending question and plan-approval registries so the next request still renders. Also fix a pre-existing test that asserted a conversation status against the enum variant instead of its serialized string.
…n cards Advertise elicitation.form to codex and classify every form it sends — Plan-mode request_user_input, generic MCP forms, MCP tool-call approvals, and message-only confirms — into either the interactive ask card or the permission card, replying with typed content. Render the request_user_input ask consistently: synthesized in-stream while live, and standalone with the chosen answer echoed on history reload (hoisted out of the generic tool group, with codex's id-keyed answer envelope now parsed). Pin codex-acp 1.1.7, keep the codeg-mcp injection from being dropped by config.toml name filtering, render <proposed_plan> as a markdown card, and run each ACP connection on a dedicated 8 MiB thread to avoid a debug-only stack overflow. Mask secret answers, and support free-text (option-less) questions in the ask card.
…ent import picker
Integrate the codex-acp elicitation bridge (Plan-mode request_user_input and generic MCP forms routed to the native ask and permission cards), the codex-acp 1.1.7 pin, standalone goal capsules, and grok exit-plan approval. Grok's exit_plan_mode and codex's elicitation/create requests register as side-by-side ACP handlers; the connection context exposes both answerPlanApproval and goalControl; the folded task-duration outcome renders as a body-less "Completed" chip.
Drive each tab's isActive/showActiveFlow from a deferred active id so the visibility toggle commits before the memoized ConversationTabView bodies re-render, instead of the previous view (notably the new-session welcome page) lingering until that heavy work finished.
…tead of full width
…ompiles
The block_on(async move { … }) frame wrapping run_connection nests deep enough that computing its type layout overflows rustc's default query depth of 128. Set recursion_limit to 256 on the codeg_lib crate root.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )