Conversation
- Keep success feedback visible in the Git action control for 10 seconds - Move the running elapsed timer into the panel menu slot
…s with v2 Post-rebase reconciliation sweep: - Sidebar: main's folded Sidebar.tsx/Sidebar.logic.ts adapted to v2 shells (latestRun/runtime naming, waiting status instead of monitoring), with subagent-thread filtering and main's pinned-reorder helpers re-exported - Pinned drag reorder (pingdotgg#5581) ported into v2: thread.pin orderKey + thread.pin.reorder command, thread.pin-reordered event, Orchestrator fold, ProjectionStore/Maintenance, client-runtime commands and shell mapping - Project favicon (pingdotgg#4849-era) and defaultThreadEnvMode flowed through v2 contracts (OrchestrationProjectShell, application event payloads) - ChatView: main's pingdotgg#5592 header props, pull-request right-panel surfaces, liveAgentCount badge (pingdotgg#5745) wired into the v2 panel layout - enableAssistantStreaming -> enableLegacyTokenStreaming rename applied to v2 RunExecutionService and replay testkit - Removed v1 zombies resurrected by the rebase (provider service/reaper/ ingestion + v1 layer tests, server.test.ts, integration harness) - routeTree: main's tree + branch's /settings/scheduled-tasks route - Misc marker-sweep syntax repairs (rpc.ts, entities.ts, localApi.test.ts, rightPanelStore.test.ts, GitManager.test.ts, mobile model menu helpers) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… 038-040 Main released ProjectionThreadsPinOrderKey (038), ProjectionProjectsDefaultThreadEnvMode (039) and ProjectionProjectFaviconPath (040), so the branch-private v2 stack shifts up by three. Registry ids were already 41-49; this renames the files and identifiers to match and updates the ledger expectations and through-id boundaries in the migration tests (released boundary 37 -> 40). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- a6c9b41 (agents open pasted images): ClaudeAdapterV2 now grants the attachments dir alongside cwd via additionalDirectories and appends '[Attached ... is saved at: path]' lines to the turn text so tools can dereference pasted images (pixels alone are not tool-readable). - 5bb8c03 (settle leaves monitors running): thread.settle now joins archive/delete in the provider-session detach set, so PR monitors, dev servers and subagent fleets stop when the user parks the thread. The settle guard already rejects active runs, and serialized dispatch closes the re-engage race the v1 fix handled with onlyIfSettled. - e70cdb4 (Claude resume handshakes) and 2c7267a (reaper vs live background subagents) are already covered structurally in v2: results are turn-scoped with explicit zero-turn handshake drops, and idle release is pinned while background work is pending. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e panel-visibility merge The keep-both merge nested main's plan-surface migration test inside a branch popover test and dropped the threadPanelVisibilityByThreadKey key from the migration results. Restore main's test body and include the branch's (empty) visibility map in the expected persisted shape. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…n text Follow-up to the pingdotgg#5757 port: start and steer turns now append the '[Attached ... is saved at: path]' line, so the adapter fixtures assert it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The round-3 reconciliation took main's ChatHeader wholesale and wired its full prop set, resurrecting the scripts/open-in/git-actions cluster the branch had deliberately relocated into the thread panel. Restore the 79-line slim header (project favicon + name + thread title) and its minimal ChatView call. pingdotgg#5592's header actions stay a documented v2 follow-up, as decided in round 2. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Add ready, merge, and conflict-resolution actions to the PR row - Share pull request action and handoff logic with the detail panel - Fix thread details scrolling and row alignment
…reens Round-4 reconciliation of pingdotgg#5986/pingdotgg#5988 with the v2 cutover files: - PendingUserInputCard adopts main's collapsible overlay redesign with the v2 RuntimeRequestId/responseCapability plumbing (dead provider processes still read-only the card) - ThreadFeed adopts the thread-feed-live-follow transition model, the user-scroll settle window, momentum handoff, and env-scoped feed keys while keeping the v2 nearListEnd layout gating - ThreadDetailScreen hides (not unmounts) the composer while a user-input request owns the slot; multi-select answers flow as arrays end to end (threadActivity toggle/build helpers + tests, ThreadUserInputQuestion) - ThreadComposer keeps the v2 canStopThread stop gate under main's onEditorFocusChange rename; standalone stop reuses the shared renderer - Restored the branch's steer stop/send tests alongside main's composer test suite Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- PullRequestDetailPanel takes main's pingdotgg#6039 rework wholesale (reactions, update-branch, auto-merge, in-place editing); the thread-details action hooks stay in usePullRequestActions with label maps extended for the new action variants - CommandPalette pingdotgg#6330 provider subtitles adapted to the v2 shell (session -> runtime for provider instance and display name) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Add conflict, draft, failing-check, and merge action ranking - Show check progress and pull request details in row tooltips
… PR panel The round-5 ChatView reconciliation kept the round-3-era PullRequestDetailPanel call, so the panel mounted without chromeVariant="collapse" — the pingdotgg#6039 scroll-condensing chrome never engaged and the description scrolled under a full-height chrome. Restore main's call exactly: collapse chrome, composerDraftTarget for same-thread hand-offs, the isThreadOwnPullRequest context check, and tab statuses keyed by the active surface id via updatePullRequestTabStatus instead of a key rebuilt from the status payload. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Add paginated thread history with bounded snapshots and replay limits - Trim oversized wire payloads and support progressive mobile history loading
- Add optional title regeneration request and start time to thread shells - Cover cache serialization on mobile and client runtime
- ChatView: pingdotgg#5880 auto-settle-on-merge setting flows into effectiveSettled, pingdotgg#5644 browser favicon project registration effect, activeProjectRef memo, desktopByTabId on both RightPanelTabs mounts - server: provide ServerSecretStore to the McpSessionRegistry's ServerEnvironment layer (pingdotgg#6325 reads publish opt-in per descriptor) - mobile: 3-way merged main's deltas into the v2 thread screens (NewTaskDraftScreen keeps the branch title seed + main's environmentId, threadListV2 keeps both new test suites, queries imports deduped) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…toggles Restores main's one-inset rule (pingdotgg#5226) that a rebase resolution had overridden with a conditional right-2 offset, which made the controls jump sideways whenever the right panel opened. Also restores the live-agent count badge on the right-panel toggle (pingdotgg#5745) that the round-6 replay dropped, and applies the same fixed-position rule to the pull requests page: the toggle now stays mounted at one absolute inset in both states, with a footprint spacer in the list header so the refresh button never slides underneath it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The right controls carry mr-px (main's border compensation for anchoring inside the panel frame), which left the sidebar trigger one pixel closer to its edge and the sheet-mode tab bar one pixel tighter than the closed state. Mirror the pixel on the trigger and the sheet layout-controls slot so all three read the same inset. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…gger The trigger's icon falls through to the Button default (size-4) while the right cluster hard-coded size-3.5, so the two ends of the titlebar read a pixel apart on every edge. All five layout-control icons now use size-4, matching the trigger and the pull requests page's refresh icon. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Omit transcript bodies from shell rows - Query archived threads separately and stream compact resume metadata
Re-applies the deltas that mid-stack blob reverts discarded, and merges main's work into the v2-owned surfaces: - keybindings: main's STATIC_KEYBINDING_COMMANDS rename plus both new commands (rightPanel.toggleMaximized alongside threadPanel.toggle) - OpenInPicker: main's remote-open/SSH routing and favorite-editor shortcut layered onto the branch's panel/toolbar variants; the extracted shouldShowOpenInPicker now takes remoteOpenMode - ChatMarkdown: main's bare-filename resolver (pingdotgg#6297) ported into the branch's module-level component factory, plus pingdotgg#4133 title-attribute stripping on links and images - ComposerPrimaryActions: main's pingdotgg#4781 model (stop stays reachable, send joins it when Enter-to-send is unavailable) carrying the branch's steering send button - ComposerPendingUserInputPanel: main's collapsible redesign with the v2 RuntimeRequestId and responseCapability gate - ChatComposer: main's oversized-prompt submission guard wrapping the branch's dispatch-mode send - preview shell: main's container-aware width clamp ported into the branch's usePreviewPanelInlineSize hook - MessagesTimeline/Sidebar: main's day-aware timestamps, code-font tool bodies and provider accent badges on the v2 runtime shell - index.css: main's @variant dark migration (pingdotgg#6381) replaces the branch's standalone .dark block - contracts: main's send-turn image mime allowlist re-homed to chatAttachment.ts, where v2 keeps the other send-turn limits Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ports v1's pingdotgg#5246 guard into the v2 dispatcher: a stored receipt only proves that this exact command already ran for the thread it was recorded against, so returning it for a command aimed at a different thread reports success for work that never happened there. The check is extracted as canReplayCommandReceipt so the rule is unit-testable, and reuse now fails with OrchestratorCommandIdConflictError like the v1 path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Keep prominent activity rows visible with lifecycle status and provider metadata - Move feed sizing logic into tested helpers and preserve native measurement for activity groups
Re-applies the deltas that mid-stack blob reverts discarded, and merges main's round-9 work into the v2-owned surfaces: - settings: main's Integrations page (pingdotgg#7082) coexists with the branch's Scheduled Tasks page in the path union, section labels, icons, and search catalog - contracts: main's preview appearance/zoom/viewport settings imports restored beside the branch's modelSelection home for ModelSelection - mobile: main's built-in themes (pingdotgg#6619) re-applied to the v2 thread screens and work log (useThemeColor over hand-rolled color-scheme ternaries) - MessagesTimeline: main's pingdotgg#7157 cleanup adopted (toolCallExpandedBody class name unexported, implementation-detail test dropped) - ChangedFilesTree: main's styled tooltip (pingdotgg#7209) carrying the v2 runId - pullRequestDetail tests: branch's row-action coverage renamed onto main's buildAddSelectionToAgentHandoff (pingdotgg#6597) - lint: migrated the six branch-owned native title tooltips that main's new no-native-title-tooltip rule (pingdotgg#7209) flags to styled Tooltips (GitActionsControl, QueuedRunsControl, TimelineSystemDivider, MessagesTimeline intent badge and MCP tool logo) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ports pingdotgg#7083 into the v2 session path, which replaced the v1 ProviderService where main's gate lives. Instead of withholding the whole t3-code MCP credential — on this branch it also carries the thread orchestration and worktree toolkits — the credential is minted without the "preview" capability when enableAgentBrowserAccess is off, so every preview tool call rejects while orchestration stays available. ProviderSessionManager reads the setting at prepare time (deny on an unreadable settings file, matching main), rotates a reused credential whose capability set no longer reflects the setting, and the session config now carries browserToolsAvailable so the Codex adapter keeps its developer instructions truthful via main's parameterized instruction builders instead of the removed constants. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…s style simplification Main's pingdotgg#6381 deleted the shared .workspace-topbar and scroll-fade rules from index.css after inlining them at main's own call sites, but this branch's slim chat chrome still references both classes. The round-8 rebase took the deletion without migrating the branch call sites, so the header collapsed to zero height — the breadcrumb sat on the window edge, timeline rows scrolled unfaded through it, and the thread-details popover anchored to the collapsed header. Restores both as composable utilities in pingdotgg#6381's own style: a workspace-topbar utility for the titlebar rows, and the branch's chat-timeline-scroll-fade mask (soft ramp plus a full-height scrollbar column). Also drops the duplicated media override and its dead settings-page-scroll-fade selector. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ation A follow-up sweep against pingdotgg#6381 found the branch still carrying the pre-simplification forms it replaced, which my earlier fix had papered over with a compat utility instead of finishing the migration: - ChatView now uses main's inlined titlebar sizing and the data-workspace-titlebar-controls hook on both control clusters. The class-based markup was silently missing the themed-toggle bridge (html[data-theme-id] [data-workspace-titlebar-controls] …), so custom themes lost their titlebar accent in the thread view. - The scroll-to-end pill becomes main's Button size="xs" variant="glass" instead of a hand-rolled button recreating it. - MessagesTimeline uses main's consolidated topbar-scroll-fade utility; the byte-identical chat-timeline-scroll-fade copy and the workspace-topbar compat utility are gone. - The composer-glass dark rules move into nested @variant dark like main's (the raw .dark duplicates could drift from the nested copies they shadowed), including the branch-only queue strip. - The pre-pingdotgg#6381 dialog-glass/dialog-backdrop/dropdown-glass class rules and their .dark variants are deleted: the pingdotgg#6381 utilities plus call-site shadow utilities own every declaration, and the stale dropdown rule still had the saturate-less backdrop-filter. The dead model-picker-surface dark rule goes with them. index.css now has zero raw .dark selectors outside the variant definitions, matching the doctrine in .macroscope/check-run-agents/ui-consistency.md. Verified against the emitted production CSS: dark variants compile to :is(.dark,.dark *) with their @supports color-mix fallbacks intact. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- Complete retry items when provider activity resumes - Keep retry progress visible across web and mobile clients
Ten days of main (194 commits, 640 files) re-integrated with the v2 re-architecture. The headline mechanics: - migrations: main added 041-043 (AuthSessionClientConnection, ProjectionThreadLinkedPullRequest, ProjectionThreadsUnsettledAt), so the v2 block renumbers 041-049 → 044-052 with the migration tests shifted to match - contracts: OrchestrationClientOrigin (pingdotgg#7774) and the origin metadata field live in applicationEvent.ts and re-export through the legacy path; ProviderApprovalOption + acceptAlways + mcp-elicitation (pingdotgg#8058) land in providerPolicy.ts; OrchestrationDispatchCommandError (pingdotgg#8824) added; the send-turn image-mime home stays chatAttachment.ts - threadSettled: main's settle-once-on-merge semantics (pingdotgg#7454) and un-settle re-anchor (pingdotgg#8231) hand-merged onto the v2 duck-typed shells (latestRun ?? latestTurn reads); web callers pass the new ChangeRequestSettleSource shape - timeline anchoring: main's pingdotgg#7897 (follow-up sends no longer push to the top) ported by scanning user rows only; the branch test now encodes the new semantics, as does mobile's pingdotgg#7969 settled-pinned shelf behavior - vcs: branch's deleteLocalBranch coexists with main's pruneWorktrees and the pingdotgg#7674 submodule checkout tests - ws: v2 RPC surface keeps its dispatch path; main's attachment upload RPCs (pingdotgg#8048) and client-connection analytics recording are wired; providerUploadFeedback (pingdotgg#7949) fails explicitly pending a v2 route - approvals: main's option-driven approval buttons (pingdotgg#8058) render through the v2 canRespond gate on web and mobile - ChatView/ChatComposer/MessagesTimeline/Sidebar/session-logic/ threadActivity keep the branch's v2 architecture; main's v1-coupled deltas to those files are recorded for follow-up rather than force-fitted Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…in the v2 work log Ports main's pingdotgg#7999/pingdotgg#7893 failure policy onto the v2 turn-item work log: output text that reports a failure (command not found, ENOENT, nonzero exit markers) now flags a row even when the provider item completed "successfully", while the rendered row judges only its displayed result — a command that merely greps for failure strings stays calm. Success now also requires the failure check to pass, so recovered failures no longer get the blue check. The server half of pingdotgg#7893 needs no port: CodexAdapterV2 already projects item.status directly, so a failed item never masquerades as completed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…dotgg#8160) Main's thread↔PR linking never reached the v2 runtime: the client types were optional stubs and the v2 server dropped the field, so linking a PR on a v2 environment silently no-opped and pingdotgg#7454's settle-once logic could never match the linked identity. The link now flows end to end: thread.metadata.update carries an optional linkedPullRequest (object to link, null to unlink), the orchestrator folds it into thread state, and both shell builders project it — no migration needed since v2 shells persist as payload JSON. The client command sends the field and the shell mapper surfaces it, so the existing web/mobile badge and settle plumbing light up on v2 threads. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ingdotgg#11518) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
ConnectionCatalogEntry gained a required enabled flag in pingdotgg#11478, but the threadShell harness never set it, so enabled-gated atoms filtered every environment out and two tests failed. Two dead exports also tripped knip. Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…d composer state ThreadNotificationCoordinator presents raw OrchestrationV2ThreadShell records, but its tests still fed the pre-v2 thread shape (session / latestTurn), which crashed presentThreadShell on missing DateTime fields. Rebuild the fixtures as v2 shells with pendingRuntimeRequest and run statuses, and remove the composerHasUnsentContent binding left unused by the compaction gating change.
…#11534) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
pingdotgg#11566) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ed restarts (pingdotgg#11565) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…otgg#11533) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ation fails (pingdotgg#11557) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…ords (pingdotgg#11505) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
…tgg#11508) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This XXL change adds a new Devin ACP integration with account/workspace model discovery, Fusion selection, native option resolution, skill invocation, and coordinated web/mobile UI behavior across production paths. Its scope and product-default changes are substantial, and unresolved Medium/High findings cover stale-account/workspace state and model-option dispatch risks. Not approved because:
Adjust the Minimum Blocking Severity for this repo — including turning it Off — in Settings. You can add or adjust custom eligibility rules. Learn more. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f915168404
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
463d0c6 to
e10a1e2
Compare
What Changed
Devin's ACP model list can be stale and exposes native variants as separate rows. This adds fresh account-specific model families, exact thinking/Fast/context options, Fusion pairing controls, and native workspace skill invocation to the existing Orchestrator v2 ACP Registry integration.
The registry-resolved CLI supplies models and skills for the configured executable, account environment, and workspace. Saved choices remain visible if they become unavailable. Web/desktop and mobile share Fusion grouping, valid pair selection, and exact option handling. The Fusion editor owns its own view state; returning to the list preserves search and focus. Keyboard shortcuts use the visible list. Refresh and logout retire cached workspace probes, and resumed sessions discover models in their current workspace.
Why
Targets
t3code/codex-turn-mapping(#2829) and replaces #11276. V2 already owns Devin's sessions, authentication, approvals, MCP tools, and subagent handling through ACP Registry. This change extends that path and keeps provider-specific catalog and skill translation at the adapter boundary.Implements the model/skill experience from Ideas discussion #6749.
UI Changes
Before/after below use the same deterministic catalog to compare the base v2 picker with the Fusion editor.
The verification provider now uses the installed Devin CLI. Its live catalog contained 48 families and 385 native variants, represented as 73 entries including 26 Fusion pairs; no family was missing.
Short recording of the Fusion editor (idle time removed).
Validation
Checklist
Model: GPT-6. Harness: Codex in T3 Code.