Repository navigation
[codex] Align Wework Codex transcript rendering - #1659
Conversation
|
Caution Review failedAn error occurred during the review process. Please try again later. 📝 WalkthroughWalkthroughThis PR updates desktop sidebar toggling, desktop model submenu behavior, implementation-plan copy and handling, tool activity/file rendering, diff preview paths, and Codex UI directive stripping across chat and workbench flows. ChangesDesktop Sidebar Toggle Request
Model Selector Desktop Submenu Refactor
Implementation-Plan Text Unification and Plan Card UX
Tool Block Activity and File Rendering
Diff Preview Display Path
Codex UI Directive Stripping
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant TitlebarSidebarToggle
participant App
participant DesktopWorkbenchLayout
TitlebarSidebarToggle->>App: onClick
App->>App: requestDesktopSidebarToggle()
App->>DesktopWorkbenchLayout: dispatch cancelable window event
DesktopWorkbenchLayout->>DesktopWorkbenchLayout: preventDefault + updateSidebarCollapsed(!effectiveSidebarCollapsed)
DesktopWorkbenchLayout-->>App: defaultPrevented = true
App->>App: skip local fallback toggle
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (7)
wework/src/components/layout/useDesktopSidebarCollapsed.ts (1)
64-74: 🚀 Performance & Scalability | 🔵 Trivial | ⚡ Quick winEffect re-subscribes on every render for unstable callback identities.
useDesktopSidebarToggleRequest's effect depends on[onToggleSidebar]. Downstream,DesktopWorkbenchLayoutpasses an inline arrow function (seeDesktopWorkbenchLayout.tsxLine 202-204), so a new function identity is created on every render, causing the window listener to be removed and re-added on every re-render of the layout. It still works correctly since the closure captures fresh state each time, but it's unnecessary churn on a hot component.Consider storing the latest callback in a ref internally so the effect only needs to run once, removing the burden from callers to memoize:
♻️ Proposed fix using a ref to stabilize the listener
export function useDesktopSidebarToggleRequest(onToggleSidebar: () => void) { + const onToggleSidebarRef = useRef(onToggleSidebar) + onToggleSidebarRef.current = onToggleSidebar + useEffect(() => { const handleToggleRequest = (event: Event) => { event.preventDefault() - onToggleSidebar() + onToggleSidebarRef.current() } window.addEventListener(SIDEBAR_TOGGLE_REQUEST_EVENT, handleToggleRequest) return () => window.removeEventListener(SIDEBAR_TOGGLE_REQUEST_EVENT, handleToggleRequest) - }, [onToggleSidebar]) + }, []) }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@wework/src/components/layout/useDesktopSidebarCollapsed.ts` around lines 64 - 74, useDesktopSidebarToggleRequest is re-subscribing the window listener on every render because the effect depends on onToggleSidebar and DesktopWorkbenchLayout passes an inline callback. Update useDesktopSidebarToggleRequest to keep the latest onToggleSidebar in a ref and register the SIDEBAR_TOGGLE_REQUEST_EVENT listener only once, so handleToggleRequest can always invoke the current callback without forcing repeated add/remove cycles.wework/src/components/layout/DesktopWorkbenchLayout.tsx (1)
202-205: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueInline callback passed to
useDesktopSidebarToggleRequest.This passes a new arrow function on every render, unlike the rest of this file's handlers (
collapseSidebar,updateSidebarCollapsed) which are consistently wrapped inuseCallback. This causes the hook's internal effect to tear down and reattach the window listener on every re-render (see comment onuseDesktopSidebarCollapsed.ts, where fixing the hook itself would be the better root-cause fix). If the hook isn't updated to use a ref internally, wrapping this callback inuseCallbackhere would be a lower-effort mitigation.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@wework/src/components/layout/DesktopWorkbenchLayout.tsx` around lines 202 - 205, The `useDesktopSidebarToggleRequest` handler in `DesktopWorkbenchLayout` is recreated on every render, causing the hook to re-register its listener repeatedly. Wrap the toggle callback in `useCallback` alongside the existing `collapseSidebar` and `updateSidebarCollapsed` handlers, and keep its dependencies aligned with `effectiveSidebarCollapsed` and `updateSidebarCollapsed`. If the hook is later fixed to use an internal ref, this can stay as the local mitigation for now.wework/src/components/chat/FileChangesCard.tsx (1)
454-463: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueMixed path separators possible for non-POSIX workspace paths.
absoluteFilePathjoinsnormalizedWorkspacePathwith/unconditionally. IfworkspacePathuses backslashes (Windows-style), the resultingdisplayPathmixes\and/separators (e.g.C:\Users\foo/src/file.ts). Purely cosmetic since this is display-only, but worth normalizing for consistency.♻️ Optional normalization
function absoluteFilePath(workspacePath: string, filePath: string): string { if (isAbsolutePath(filePath)) return filePath const normalizedWorkspacePath = workspacePath.replace(/[\\/]+$/, '') if (!normalizedWorkspacePath) return filePath - return `${normalizedWorkspacePath}/${filePath.replace(/^[\\/]+/, '')}` + const separator = /\\/.test(normalizedWorkspacePath) ? '\\' : '/' + return `${normalizedWorkspacePath}${separator}${filePath.replace(/^[\\/]+/, '')}` }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@wework/src/components/chat/FileChangesCard.tsx` around lines 454 - 463, The absoluteFilePath helper in FileChangesCard mixes separators by always joining with “/”, which can produce inconsistent display paths when workspacePath is Windows-style. Update absoluteFilePath (and any related path formatting in the same component) to normalize separators consistently for display, while preserving the existing absolute-path check in isAbsolutePath and the current behavior for already-absolute inputs.wework/src/components/chat/composer/ModelSelector.tsx (1)
398-431: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueOptional: expose submenu semantics to assistive tech.
renderControlMenuItemopens a submenu on hover/focus/click but the button doesn't advertise it. Consideraria-haspopup="menu"andaria-expanded={active}so screen-reader users get the same disclosure state the visual chevron implies. The existing family buttons share this gap, so it can be applied consistently there too.♿ Suggested attributes
<button ref={node => { if (node) { controlButtonRefs.current.set(control.id, node) } else { controlButtonRefs.current.delete(control.id) } }} key={control.id} type="button" data-testid={`model-control-menu-${control.id}`} + aria-haspopup="menu" + aria-expanded={active} onMouseEnter={event => activateControl(control.id, event.currentTarget)}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@wework/src/components/chat/composer/ModelSelector.tsx` around lines 398 - 431, `renderControlMenuItem` in `ModelSelector.tsx` opens a submenu via hover/focus/click but the trigger button does not expose that relationship to assistive tech. Update the button in `renderControlMenuItem` to advertise submenu behavior with `aria-haspopup="menu"` and reflect its open state with `aria-expanded={active}`, and apply the same pattern consistently to the related family buttons that use the same submenu activation flow.wework/src/components/chat/MessageList.tsx (1)
588-608: 🩺 Stability & Availability | 🔵 Trivial | ⚖️ Poor tradeoffNested interactive elements inside
role="button"container.
PlanCardActions' native<button>s live inside a<section role="button">. This works today only because clicks are stopped viaevent.stopPropagation()and keyboard events are filtered viaisNestedInteractiveElement, but nested interactive controls inside an element exposed as a button is a recognized anti-pattern (e.g., axe-core's "nested-interactive" check) — some assistive tech may not reliably expose/announce the inner buttons.Also, activating on Space via
keydown(line 589) diverges slightly from native<button>semantics, which fire onkeyupto avoid accidental activation while scrolling.Consider structuring the header actions outside the
role="button"boundary (e.g., non-interactive wrapper with the primary "open" affordance separate from the secondary action buttons) for stronger AT compatibility.Also applies to: 632-705, 719-726
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@wework/src/components/chat/MessageList.tsx` around lines 588 - 608, The `assistant-plan-card` wrapper in `MessageList.tsx` is exposing a `section` as `role="button"` while `PlanCardActions` renders native buttons inside it, which creates a nested interactive control pattern. Refactor the `openPlan`/`handleCardClick`/`handleCardKeyDown` interaction so the primary expand target is separate from the action buttons, keeping `PlanCardActions` outside any button-like container. Update the surrounding plan card markup and related keyboard handling to avoid `role="button"` on a parent that contains interactive children, and align Space activation behavior with native button semantics where applicable.wework/src/components/chat/blocks/ToolBlocksDisplay.tsx (1)
478-480: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winThird copy of the identical
basenamehelper.An identical
basename(path)implementation now exists in this file, intoolBlockActivity.ts, and inToolBlockItem.tsx. Worth consolidating into a single exported helper (e.g. intoolBlockKinds.ts, alongside the other shared file-path utilities) and importing it from the three call sites.♻️ Suggested consolidation
-function basename(path: string): string { - return path.split(/[\\/]/).filter(Boolean).pop() || path -} +import { basename } from './toolBlockKinds'(with a corresponding
export function basename(path: string): string { ... }added once totoolBlockKinds.ts, and the local copies intoolBlockActivity.ts/ToolBlockItem.tsxremoved.)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@wework/src/components/chat/blocks/ToolBlocksDisplay.tsx` around lines 478 - 480, The file-path basename logic is duplicated across ToolBlocksDisplay, toolBlockActivity, and ToolBlockItem, so consolidate it into one shared exported helper. Add basename(path: string) to toolBlockKinds.ts alongside the other shared file-path utilities, then replace the local copies in ToolBlocksDisplay, toolBlockActivity, and ToolBlockItem with imports from that shared helper.wework/src/components/chat/blocks/toolBlockActivity.ts (1)
223-504: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winSolid, well-tested parsing logic — consider extracting into its own module.
This block adds a substantial shell-command tokenization/parsing layer (tokenizer, search/find/git argument parsing, path extraction) inside a file whose primary concern is tool-activity classification/grouping. Traced the logic against all provided test cases (read commands,
rg/git grep/find, quoting,||/&&merging) and it holds up correctly. Given its size and orthogonal concern, splitting it into a dedicatedshellCommandParsing.tsmodule would improve cohesion and maketoolBlockActivity.tseasier to navigate.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@wework/src/components/chat/blocks/toolBlockActivity.ts` around lines 223 - 504, Extract the shell-command tokenization and parsing helpers from toolBlockActivity into a dedicated shellCommandParsing module to improve cohesion. Move the related functions and constants such as splitShellWords, getPatternSearchArguments, getReadCommandFilePaths, getSearchCommandSummary, getGitSearchCommandSummary, getFindSearchCommandSummary, getPathArguments, and the command option sets into the new module. Update toolBlockActivity to import and use those helpers so the file stays focused on tool-activity classification/grouping while preserving the existing behavior and tests.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@wework/src/features/workbench/runtimePaneMessages.test.ts`:
- Around line 89-136: Add an edge-case test for
runtimeMessagesToWorkbenchMessages covering assistant messages whose content is
undefined or non-string, since the current coverage in
runtimePaneMessages.test.ts only exercises string content. Update the test
around runtimeMessagesToWorkbenchMessages to assert it safely preserves or skips
such messages without crashing, so the unguarded content handling in
runtimePaneMessages.ts is protected by a regression test.
---
Nitpick comments:
In `@wework/src/components/chat/blocks/toolBlockActivity.ts`:
- Around line 223-504: Extract the shell-command tokenization and parsing
helpers from toolBlockActivity into a dedicated shellCommandParsing module to
improve cohesion. Move the related functions and constants such as
splitShellWords, getPatternSearchArguments, getReadCommandFilePaths,
getSearchCommandSummary, getGitSearchCommandSummary,
getFindSearchCommandSummary, getPathArguments, and the command option sets into
the new module. Update toolBlockActivity to import and use those helpers so the
file stays focused on tool-activity classification/grouping while preserving the
existing behavior and tests.
In `@wework/src/components/chat/blocks/ToolBlocksDisplay.tsx`:
- Around line 478-480: The file-path basename logic is duplicated across
ToolBlocksDisplay, toolBlockActivity, and ToolBlockItem, so consolidate it into
one shared exported helper. Add basename(path: string) to toolBlockKinds.ts
alongside the other shared file-path utilities, then replace the local copies in
ToolBlocksDisplay, toolBlockActivity, and ToolBlockItem with imports from that
shared helper.
In `@wework/src/components/chat/composer/ModelSelector.tsx`:
- Around line 398-431: `renderControlMenuItem` in `ModelSelector.tsx` opens a
submenu via hover/focus/click but the trigger button does not expose that
relationship to assistive tech. Update the button in `renderControlMenuItem` to
advertise submenu behavior with `aria-haspopup="menu"` and reflect its open
state with `aria-expanded={active}`, and apply the same pattern consistently to
the related family buttons that use the same submenu activation flow.
In `@wework/src/components/chat/FileChangesCard.tsx`:
- Around line 454-463: The absoluteFilePath helper in FileChangesCard mixes
separators by always joining with “/”, which can produce inconsistent display
paths when workspacePath is Windows-style. Update absoluteFilePath (and any
related path formatting in the same component) to normalize separators
consistently for display, while preserving the existing absolute-path check in
isAbsolutePath and the current behavior for already-absolute inputs.
In `@wework/src/components/chat/MessageList.tsx`:
- Around line 588-608: The `assistant-plan-card` wrapper in `MessageList.tsx` is
exposing a `section` as `role="button"` while `PlanCardActions` renders native
buttons inside it, which creates a nested interactive control pattern. Refactor
the `openPlan`/`handleCardClick`/`handleCardKeyDown` interaction so the primary
expand target is separate from the action buttons, keeping `PlanCardActions`
outside any button-like container. Update the surrounding plan card markup and
related keyboard handling to avoid `role="button"` on a parent that contains
interactive children, and align Space activation behavior with native button
semantics where applicable.
In `@wework/src/components/layout/DesktopWorkbenchLayout.tsx`:
- Around line 202-205: The `useDesktopSidebarToggleRequest` handler in
`DesktopWorkbenchLayout` is recreated on every render, causing the hook to
re-register its listener repeatedly. Wrap the toggle callback in `useCallback`
alongside the existing `collapseSidebar` and `updateSidebarCollapsed` handlers,
and keep its dependencies aligned with `effectiveSidebarCollapsed` and
`updateSidebarCollapsed`. If the hook is later fixed to use an internal ref,
this can stay as the local mitigation for now.
In `@wework/src/components/layout/useDesktopSidebarCollapsed.ts`:
- Around line 64-74: useDesktopSidebarToggleRequest is re-subscribing the window
listener on every render because the effect depends on onToggleSidebar and
DesktopWorkbenchLayout passes an inline callback. Update
useDesktopSidebarToggleRequest to keep the latest onToggleSidebar in a ref and
register the SIDEBAR_TOGGLE_REQUEST_EVENT listener only once, so
handleToggleRequest can always invoke the current callback without forcing
repeated add/remove cycles.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 132fa134-87db-4c3a-9910-0933c7726fea
📒 Files selected for processing (29)
wework/src/App.tsxwework/src/components/chat/ChatInput.test.tsxwework/src/components/chat/FileChangesCard.test.tsxwework/src/components/chat/FileChangesCard.tsxwework/src/components/chat/MessageList.test.tsxwework/src/components/chat/MessageList.tsxwework/src/components/chat/RequestUserInputCard.test.tsxwework/src/components/chat/RequestUserInputCard.tsxwework/src/components/chat/blocks/ToolBlockItem.test.tsxwework/src/components/chat/blocks/ToolBlockItem.tsxwework/src/components/chat/blocks/ToolBlocksDisplay.test.tsxwework/src/components/chat/blocks/ToolBlocksDisplay.tsxwework/src/components/chat/blocks/toolBlockActivity.test.tswework/src/components/chat/blocks/toolBlockActivity.tswework/src/components/chat/blocks/toolBlockKinds.tswework/src/components/chat/composer/ModelSelector.tsxwework/src/components/chat/requestUserInputMessages.tswework/src/components/layout/DesktopWorkbenchLayout.test.tsxwework/src/components/layout/DesktopWorkbenchLayout.tsxwework/src/components/layout/MobileWorkbenchLayout.test.tsxwework/src/components/layout/requestUserInputOverlay.test.tswework/src/components/layout/requestUserInputOverlay.tswework/src/components/layout/useDesktopSidebarCollapsed.tswework/src/components/topnav/ChromeTitlebar.test.tsxwework/src/components/topnav/ChromeTitlebar.tsxwework/src/features/workbench/WorkbenchProvider.test.tsxwework/src/features/workbench/runtimePaneMessages.test.tswework/src/features/workbench/runtimePaneMessages.tswework/src/lib/codex-directives.ts
💤 Files with no reviewable changes (1)
- wework/src/components/topnav/ChromeTitlebar.tsx
| describe('runtimeMessagesToWorkbenchMessages', () => { | ||
| test('strips Codex UI directives from restored assistant transcript content', () => { | ||
| const messages = runtimeMessagesToWorkbenchMessages([ | ||
| { | ||
| id: 'assistant-1', | ||
| role: 'assistant', | ||
| content: [ | ||
| '完成了。', | ||
| '', | ||
| '```text', | ||
| '::git-stage{cwd="/workspace/project"}', | ||
| '```', | ||
| '', | ||
| '::git-commit{cwd="/workspace/project"}', | ||
| ].join('\n'), | ||
| }, | ||
| ]) | ||
|
|
||
| expect(messages[0].content).toBe( | ||
| ['完成了。', '', '```text', '::git-stage{cwd="/workspace/project"}', '```'].join('\n') | ||
| ) | ||
| }) | ||
|
|
||
| test('keeps user-authored Codex directive text unchanged', () => { | ||
| const messages = runtimeMessagesToWorkbenchMessages([ | ||
| { | ||
| id: 'user-1', | ||
| role: 'user', | ||
| content: '解释一下 ::git-stage{cwd="/workspace/project"} 是什么', | ||
| }, | ||
| ]) | ||
|
|
||
| expect(messages[0].content).toBe('解释一下 ::git-stage{cwd="/workspace/project"} 是什么') | ||
| }) | ||
|
|
||
| test('keeps assistant prose that mentions a Codex directive inline', () => { | ||
| const messages = runtimeMessagesToWorkbenchMessages([ | ||
| { | ||
| id: 'assistant-1', | ||
| role: 'assistant', | ||
| content: '这类 ::git-stage{cwd="/workspace/project"} 指令会刷新 Git UI。', | ||
| }, | ||
| ]) | ||
|
|
||
| expect(messages[0].content).toBe( | ||
| '这类 ::git-stage{cwd="/workspace/project"} 指令会刷新 Git UI。' | ||
| ) | ||
| }) |
There was a problem hiding this comment.
📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
Missing edge-case test for non-string/undefined assistant content.
Given the unguarded call at runtimePaneMessages.ts Line 286 flagged above, a test with an assistant message that has content: undefined (or non-string) would have caught the potential runtime crash. As per coding guidelines, tests should cover edge cases.
As per coding guidelines, "follow the project's testing principles: AAA, mock external services, test edge cases, and keep tests isolated."
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@wework/src/features/workbench/runtimePaneMessages.test.ts` around lines 89 -
136, Add an edge-case test for runtimeMessagesToWorkbenchMessages covering
assistant messages whose content is undefined or non-string, since the current
coverage in runtimePaneMessages.test.ts only exercises string content. Update
the test around runtimeMessagesToWorkbenchMessages to assert it safely preserves
or skips such messages without crashing, so the unguarded content handling in
runtimePaneMessages.ts is protected by a regression test.
Source: Coding guidelines
4f806e4 to
e9e23c7
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
wework/src/lib/codex-directives.ts (1)
21-51: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winAdd unit tests for
stripCodexUiDirectives.This utility has non-trivial branching (code-fence toggling, directive matching, blank-line collapsing) but no accompanying test file is included in this cohort. Recommend covering: directive stripping outside fences, preservation inside fences, mixed directive/non-directive content, and the blank-line collapsing behavior.
As per coding guidelines,
**/*.{py,ts,tsx,js,jsx}files should "follow the project's testing principles: AAA, mock external services, test edge cases, and keep tests isolated."🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@wework/src/lib/codex-directives.ts` around lines 21 - 51, Add a focused unit test suite for stripCodexUiDirectives to cover its branching behavior: stripping CODEX UI directive lines outside code fences, preserving the same directive text inside fences, handling mixed directive and non-directive content, and verifying the newline-collapsing/trim behavior when multiple blank lines are introduced. Place the tests alongside the codex-directives module and use the stripCodexUiDirectives function name in the assertions so the cases stay tied to the implementation.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@wework/src/lib/codex-directives.ts`:
- Around line 38-41: The directive-stripping logic in codex-directives.ts
removes matched lines entirely, which can collapse neighboring content that was
only separated by a directive. Update the line-processing in the directive
handling path around CODEX_UI_DIRECTIVE_LINE_PATTERN so matched directive lines
are replaced with an empty line placeholder instead of being skipped, preserving
separation between adjacent content lines/paragraphs. Keep the behavior
localized to the existing stripping flow that sets changed and continues.
---
Nitpick comments:
In `@wework/src/lib/codex-directives.ts`:
- Around line 21-51: Add a focused unit test suite for stripCodexUiDirectives to
cover its branching behavior: stripping CODEX UI directive lines outside code
fences, preserving the same directive text inside fences, handling mixed
directive and non-directive content, and verifying the newline-collapsing/trim
behavior when multiple blank lines are introduced. Place the tests alongside the
codex-directives module and use the stripCodexUiDirectives function name in the
assertions so the cases stay tied to the implementation.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 6158b50c-9a20-45a3-ac10-dd5aabb9be18
📒 Files selected for processing (29)
wework/src/App.tsxwework/src/components/chat/ChatInput.test.tsxwework/src/components/chat/FileChangesCard.test.tsxwework/src/components/chat/FileChangesCard.tsxwework/src/components/chat/MessageList.test.tsxwework/src/components/chat/MessageList.tsxwework/src/components/chat/RequestUserInputCard.test.tsxwework/src/components/chat/RequestUserInputCard.tsxwework/src/components/chat/blocks/ToolBlockItem.test.tsxwework/src/components/chat/blocks/ToolBlockItem.tsxwework/src/components/chat/blocks/ToolBlocksDisplay.test.tsxwework/src/components/chat/blocks/ToolBlocksDisplay.tsxwework/src/components/chat/blocks/toolBlockActivity.test.tswework/src/components/chat/blocks/toolBlockActivity.tswework/src/components/chat/blocks/toolBlockKinds.tswework/src/components/chat/composer/ModelSelector.tsxwework/src/components/chat/requestUserInputMessages.tswework/src/components/layout/DesktopWorkbenchLayout.test.tsxwework/src/components/layout/DesktopWorkbenchLayout.tsxwework/src/components/layout/MobileWorkbenchLayout.test.tsxwework/src/components/layout/requestUserInputOverlay.test.tswework/src/components/layout/requestUserInputOverlay.tswework/src/components/layout/useDesktopSidebarCollapsed.tswework/src/components/topnav/ChromeTitlebar.test.tsxwework/src/components/topnav/ChromeTitlebar.tsxwework/src/features/workbench/WorkbenchProvider.test.tsxwework/src/features/workbench/runtimePaneMessages.test.tswework/src/features/workbench/runtimePaneMessages.tswework/src/lib/codex-directives.ts
💤 Files with no reviewable changes (1)
- wework/src/components/topnav/ChromeTitlebar.tsx
✅ Files skipped from review due to trivial changes (2)
- wework/src/components/layout/requestUserInputOverlay.test.ts
- wework/src/features/workbench/WorkbenchProvider.test.tsx
🚧 Files skipped from review as they are similar to previous changes (25)
- wework/src/components/layout/DesktopWorkbenchLayout.tsx
- wework/src/App.tsx
- wework/src/components/layout/useDesktopSidebarCollapsed.ts
- wework/src/components/chat/blocks/toolBlockActivity.test.ts
- wework/src/components/layout/requestUserInputOverlay.ts
- wework/src/components/topnav/ChromeTitlebar.test.tsx
- wework/src/features/workbench/runtimePaneMessages.test.ts
- wework/src/components/chat/RequestUserInputCard.tsx
- wework/src/components/chat/blocks/ToolBlockItem.test.tsx
- wework/src/components/chat/RequestUserInputCard.test.tsx
- wework/src/components/layout/MobileWorkbenchLayout.test.tsx
- wework/src/features/workbench/runtimePaneMessages.ts
- wework/src/components/chat/requestUserInputMessages.ts
- wework/src/components/chat/blocks/ToolBlockItem.tsx
- wework/src/components/chat/MessageList.test.tsx
- wework/src/components/chat/blocks/ToolBlocksDisplay.test.tsx
- wework/src/components/chat/FileChangesCard.tsx
- wework/src/components/chat/MessageList.tsx
- wework/src/components/chat/blocks/ToolBlocksDisplay.tsx
- wework/src/components/layout/DesktopWorkbenchLayout.test.tsx
- wework/src/components/chat/blocks/toolBlockKinds.ts
- wework/src/components/chat/ChatInput.test.tsx
- wework/src/components/chat/blocks/toolBlockActivity.ts
- wework/src/components/chat/composer/ModelSelector.tsx
- wework/src/components/chat/FileChangesCard.test.tsx
e9e23c7 to
58be11f
Compare
Summary
Conflict Resolution
origin/main(afab8869c).wework/src/components/chat/requestUserInputMessages.tsby keeping the main-branchRequestUserInputBlocktype guard structure while retaining the new Codex plan-confirmation labels and compatibility checks.wework/src/components/layout/DesktopWorkbenchMain.tsxby keeping the main-branch split floating-composer clearance constants and reapplying the Wework UI parity changes.Validation
pnpm --dir wework exec prettier --check <touched files>pnpm --dir wework exec eslint <touched files>pnpm --dir wework exec tsc -bpnpm --dir wework test -- --runInBand(109 files, 1054 tests)git pushpre-push hook passed withAI_VERIFIED=1after verifying this UI-only Wework change does not require docs updates. The hook also passed frontend, Wework, backend syntax/format, knowledge syntax, executor cargo test/clippy, executor-manager syntax, and Alembic multi-head checks.Summary by CodeRabbit
New Features
Bug Fixes
Tests