Skip to content

feat(wework): add Codex permission modes - #2044

Open
qdaxb wants to merge 14 commits into
mainfrom
feature/wework-codex-permissions
Open

feat(wework): add Codex permission modes#2044
qdaxb wants to merge 14 commits into
mainfrom
feature/wework-codex-permissions

Conversation

@qdaxb

@qdaxb qdaxb commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

What changed

  • Add three Codex permission modes in Wework: full access, request approval, and approve for me.
  • Persist a global default and a per-session override, including updates for the next turn.
  • Route Codex command, file, and dynamic permission approval requests into interactive approval cards.
  • Map each mode to Codex app-server sandbox, approval policy, and approvals reviewer settings.
  • Add Chinese and English user documentation.

Why

Wework previously started Codex sessions with unrestricted access and no approval choice. Users now have an explicit safety/automation tradeoff while preserving full access as the compatibility default.

Validation

  • Wework pre-push: ESLint, TypeScript project build, and unit tests passed.
  • Executor pre-push: cargo fmt, lib tests with all features, and clippy passed.
  • Wework full suite: 181 files / 1800 tests passed after merging latest main.
  • Executor approval and runtime send contract tests passed.
  • Tauri Rust tests and formatting checks passed.
  • Real Tauri AI verification captured the composer selector and general settings control.

Summary by CodeRabbit

  • New Features
    • Added Codex permission modes (Full access, Ask for approval, Approve for me) with an in-chat selector for new and existing conversations (next turn takes effect).
    • Added interactive approval cards for runtime approval requests, including one-time, session, and rule-based actions.
    • Added a General Settings option to set the default Codex permission mode (desktop and non-desktop).
  • Documentation
    • Updated English and Chinese user guides with permission behavior, inheritance, and approval details.
  • Tests
    • Added/updated unit, UI, and E2E coverage for permission propagation and approval flows.

@coderabbitai

coderabbitai Bot commented Jul 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 627c74fa-defe-49a0-b868-c546663d171b

📥 Commits

Reviewing files that changed from the base of the PR and between 25127e4 and 3df86b3.

📒 Files selected for processing (20)
  • executor/src/agents/codex.rs
  • executor/src/agents/mod.rs
  • executor/src/runtime_work/handler.rs
  • wework/e2e/desktop/task-flow.e2e.mjs
  • wework/src/api/local/localServices.test.ts
  • wework/src/api/local/localServices.ts
  • wework/src/components/chat/ChatInput.test.tsx
  • wework/src/components/chat/ChatInput.tsx
  • wework/src/components/chat/composer/CompactChatComposer.tsx
  • wework/src/components/chat/composer/ComposerToolbar.tsx
  • wework/src/components/chat/composer/ProjectChatComposer.tsx
  • wework/src/components/layout/DesktopWorkbenchMain.tsx
  • wework/src/components/layout/MobileWorkbenchLayout.tsx
  • wework/src/components/layout/useWorkbenchPaneSession.ts
  • wework/src/features/workbench/WorkbenchProvider.test.tsx
  • wework/src/features/workbench/useWorkbenchRuntimeMessaging.ts
  • wework/src/features/workbench/workbenchContextTypes.ts
  • wework/src/i18n/locales/en/common.json
  • wework/src/i18n/locales/zh-CN/common.json
  • wework/src/types/api.ts
🚧 Files skipped from review as they are similar to previous changes (20)
  • wework/src/i18n/locales/en/common.json
  • wework/src/i18n/locales/zh-CN/common.json
  • wework/src/features/workbench/workbenchContextTypes.ts
  • wework/src/components/layout/DesktopWorkbenchMain.tsx
  • wework/src/components/chat/ChatInput.test.tsx
  • executor/src/agents/mod.rs
  • wework/src/components/layout/MobileWorkbenchLayout.tsx
  • wework/src/components/chat/composer/ProjectChatComposer.tsx
  • wework/src/components/chat/ChatInput.tsx
  • wework/src/features/workbench/useWorkbenchRuntimeMessaging.ts
  • wework/src/api/local/localServices.test.ts
  • wework/src/types/api.ts
  • wework/src/api/local/localServices.ts
  • wework/src/components/chat/composer/ComposerToolbar.tsx
  • wework/src/features/workbench/WorkbenchProvider.test.tsx
  • wework/src/components/chat/composer/CompactChatComposer.tsx
  • wework/src/components/layout/useWorkbenchPaneSession.ts
  • executor/src/runtime_work/handler.rs
  • wework/e2e/desktop/task-flow.e2e.mjs
  • executor/src/agents/codex.rs

📝 Walkthrough

Walkthrough

Codex permission modes now persist in preferences and runtime tasks, flow through Codex execution, and appear in desktop and compact chat composers. Codex approval requests are rendered as interactive cards whose responses return to the executor, with supporting settings, localization, tests, E2E scenarios, and documentation.

Changes

Codex permissions and approvals

Layer / File(s) Summary
Permission contracts and defaults
wework/src/types/api.ts, wework/src/tauri/appPreferences.ts, wework/src-tauri/src/lib.rs, executor/src/runtime_work/response.rs, docs/*/user-guide/chat/codex-permissions.md
Adds permission-mode and approval-response types, persisted defaults, task-link serialization, validation, localized strings, and user documentation.
Runtime permission propagation
executor/src/runtime_work/*, wework/src/api/local/localServices.ts, wework/src/features/workbench/*
Carries selected modes through task creation, sending, updates, persistence, task addresses, and follow-up messages.
Codex execution and approval transport
executor/src/agents/codex.rs, executor/src/runtime_work/events.rs
Maps modes to Codex runtime permissions, validates profiles, handles approval requests, and emits approval events.
Approval cards and interactive responses
wework/src/components/chat/{ApprovalCard.tsx,runtimeApproval.ts}, wework/src/components/chat/blocks/ToolBlocksDisplay.tsx, wework/src/components/layout/useWorkbenchPaneSession.ts
Types approval payloads, renders approval cards, and routes approval responses through runtime messaging.
Permission selector, settings, and validation
wework/src/components/chat/*, wework/src/components/settings/GeneralSettingsPage.tsx, wework/e2e/desktop/task-flow.e2e.mjs, wework/src/e2e/*
Adds composer controls, default settings, responsive styling, component tests, workbench tests, local-service tests, and desktop permission scenarios.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant ChatComposer
  participant WorkbenchSession
  participant RuntimeTask
  participant Codex
  participant ApprovalCard
  User->>ChatComposer: Select permission mode
  ChatComposer->>WorkbenchSession: Update permission mode
  WorkbenchSession->>RuntimeTask: Create or update task permissions
  RuntimeTask->>Codex: Start turn with permission parameters
  Codex->>ApprovalCard: Request approval
  ApprovalCard->>RuntimeTask: Submit approval response
  RuntimeTask->>Codex: Return approval result
Loading

Possibly related PRs

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 21.43% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title is concise and accurately summarizes the main change: adding Codex permission modes to Wework.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/wework-codex-permissions

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@qdaxb
qdaxb marked this pull request as ready for review July 19, 2026 03:16
…permissions

# Conflicts:
#	executor/src/agents/codex.rs
#	wework/src/api/local/localServices.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (2)
wework/src/components/chat/composer/ComposerToolbar.module.css (1)

36-51: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Replace deprecated clip property with clip-path.

The clip property is deprecated in CSS. Both CSS module files use it to accessibly hide text in .modeControl [data-mode-label], which triggers modern linting errors. Use clip-path: inset(50%); instead.

  • wework/src/components/chat/composer/ComposerToolbar.module.css#L36-L51: replace clip: rect(0, 0, 0, 0); with clip-path: inset(50%);.
  • wework/src/components/chat/composer/CompactChatComposer.module.css#L32-L43: replace clip: rect(0, 0, 0, 0); with clip-path: inset(50%);.
🤖 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/ComposerToolbar.module.css` around lines
36 - 51, The visually hidden data-mode-label styles in
wework/src/components/chat/composer/ComposerToolbar.module.css lines 36-51 and
wework/src/components/chat/composer/CompactChatComposer.module.css lines 32-43
must replace the deprecated clip declaration with clip-path: inset(50%); in both
.modeControl [data-mode-label] rules, preserving the existing accessible hiding
styles.

Source: Linters/SAST tools

wework/src/components/chat/ApprovalCard.test.tsx (1)

6-46: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider covering decline/session buttons and the permission-request payload branch.

Current tests only exercise the accept-once and rule-amendment paths. The decline and accept-for-session buttons, and the permissionRequest branch (payload.method === 'item/permissions/requestApproval', which changes the submitted shape to { permissions, scope }), are untested.

🤖 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/ApprovalCard.test.tsx` around lines 6 - 46, The
ApprovalCard tests only cover one-time acceptance and execpolicy amendments.
Extend the ApprovalCard test suite to cover the decline and accept-for-session
buttons, asserting their expected onSubmit decisions, and add a
permissionRequest payload case with method item/permissions/requestApproval that
verifies submission uses the { permissions, scope } shape.
🤖 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 `@executor/src/agents/codex.rs`:
- Around line 4018-4061: The permission-mode mapping is private and duplicated
by handler.rs. Make CodexPermissionMode and its canonical conversion methods
available as pub(crate), add a stable as_str()/to_string() representation for
RuntimeTaskLink.permission_mode, and update handler.rs functions
request_permission_mode and update_task_permissions to reuse from_request,
permission_profile, approval_policy, approvals_reviewer, and the new string
conversion instead of maintaining separate parsing and mapping logic.

In `@executor/src/runtime_work/handler.rs`:
- Around line 4039-4051: Remove the duplicated parsing logic from
request_permission_mode and reuse CodexPermissionMode::from_request from
codex.rs as the single source of truth. Convert the returned enum to the
required String label using its existing representation, while preserving the
current full_access fallback and accepted mode values.
- Around line 1953-1988: The update_task_permissions flow should parse the
requested mode through CodexPermissionMode, normalize unknown or missing values
to the canonical "full_access" mode before persisting, and derive permissions,
approval policy, and reviewer via that type’s permission_profile(),
approval_policy(), and approvals_reviewer() methods. Expose CodexPermissionMode
at the needed visibility and remove the local mode match so stored and
Codex-applied values cannot diverge.
- Line 1871: Update the permission_mode resolution near request_permission_mode
and the corresponding flow around the additionally affected lines to fall back
to existing_link.permission_mode when the request omits both permission_mode
keys. Preserve explicit request values, and only use "full_access" when neither
the request nor the existing task link provides a setting, mirroring the
workspace_path fallback before update_task persists the value.

In `@wework/src/api/local/localServices.ts`:
- Line 1331: Update the send execution request construction around
permissionMode so omitted normalizedData.permissionMode falls back to the task’s
current permission mode, matching the create-task path. Apply this fallback
consistently to both send branches while preserving an explicitly provided
normalizedData.permissionMode.

In `@wework/src/components/chat/ApprovalCard.tsx`:
- Around line 13-18: Update approvalDescription in ApprovalCard.tsx so its
fallback returns an empty string instead of payload.reason, preventing the
reason from being duplicated in the preformatted description while preserving
command, grantRoot, and cwd precedence.

In `@wework/src/components/layout/useWorkbenchPaneSession.ts`:
- Around line 156-174: Update useWorkbenchPaneSession’s updatePermissionMode to
use a functional setPermissionMode rollback that restores previous only when the
current mode still matches the failed request’s mode, preserving newer
selections during overlapping requests. Initialize the local
useTranslation('common') hook in the hook and replace the catch block’s global
i18n.t call with the returned t function.

---

Nitpick comments:
In `@wework/src/components/chat/ApprovalCard.test.tsx`:
- Around line 6-46: The ApprovalCard tests only cover one-time acceptance and
execpolicy amendments. Extend the ApprovalCard test suite to cover the decline
and accept-for-session buttons, asserting their expected onSubmit decisions, and
add a permissionRequest payload case with method
item/permissions/requestApproval that verifies submission uses the {
permissions, scope } shape.

In `@wework/src/components/chat/composer/ComposerToolbar.module.css`:
- Around line 36-51: The visually hidden data-mode-label styles in
wework/src/components/chat/composer/ComposerToolbar.module.css lines 36-51 and
wework/src/components/chat/composer/CompactChatComposer.module.css lines 32-43
must replace the deprecated clip declaration with clip-path: inset(50%); in both
.modeControl [data-mode-label] rules, preserving the existing accessible hiding
styles.
🪄 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: 971ab1c2-7677-4293-a831-8cf5b92da142

📥 Commits

Reviewing files that changed from the base of the PR and between 1d927af and b5e5cbf.

📒 Files selected for processing (39)
  • docs/en/user-guide/chat/codex-permissions.md
  • docs/zh/user-guide/chat/codex-permissions.md
  • executor/src/agents/codex.rs
  • executor/src/runtime_work/events.rs
  • executor/src/runtime_work/handler.rs
  • executor/src/runtime_work/response.rs
  • executor/src/runtime_work/worktrees.rs
  • wework/src-tauri/src/lib.rs
  • wework/src/api/local/localServices.ts
  • wework/src/components/chat/ApprovalCard.test.tsx
  • wework/src/components/chat/ApprovalCard.tsx
  • wework/src/components/chat/ChatInput.test.tsx
  • wework/src/components/chat/ChatInput.tsx
  • wework/src/components/chat/MessageList.tsx
  • wework/src/components/chat/ScrollableMessageArea.tsx
  • wework/src/components/chat/blocks/ToolBlocksDisplay.tsx
  • wework/src/components/chat/composer/CompactChatComposer.module.css
  • wework/src/components/chat/composer/CompactChatComposer.tsx
  • wework/src/components/chat/composer/ComposerToolbar.module.css
  • wework/src/components/chat/composer/ComposerToolbar.tsx
  • wework/src/components/chat/composer/GoalDraftPill.tsx
  • wework/src/components/chat/composer/PermissionModeSelector.test.tsx
  • wework/src/components/chat/composer/PermissionModeSelector.tsx
  • wework/src/components/chat/composer/ProjectChatComposer.tsx
  • wework/src/components/chat/composer/QuickPhraseMenu.tsx
  • wework/src/components/chat/runtimeApproval.ts
  • wework/src/components/layout/DesktopWorkbenchMain.tsx
  • wework/src/components/layout/MobileWorkbenchLayout.tsx
  • wework/src/components/layout/useWorkbenchPaneSession.ts
  • wework/src/components/settings/GeneralSettingsPage.tsx
  • wework/src/features/workbench/useWorkbenchRuntimeMessaging.ts
  • wework/src/features/workbench/workbenchContextTypes.ts
  • wework/src/i18n/locales/en/chat.json
  • wework/src/i18n/locales/en/common.json
  • wework/src/i18n/locales/zh-CN/chat.json
  • wework/src/i18n/locales/zh-CN/common.json
  • wework/src/tauri/appPreferences.test.ts
  • wework/src/tauri/appPreferences.ts
  • wework/src/types/api.ts

Comment thread executor/src/agents/codex.rs
Comment thread executor/src/runtime_work/handler.rs Outdated
Comment thread executor/src/runtime_work/handler.rs
Comment thread executor/src/runtime_work/handler.rs Outdated
Comment thread wework/src/api/local/localServices.ts Outdated
Comment thread wework/src/components/chat/ApprovalCard.tsx
Comment thread wework/src/components/layout/useWorkbenchPaneSession.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (3)
wework/src/features/workbench/WorkbenchProvider.test.tsx (1)

6368-6440: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Test can't distinguish override vs. persisted metadata for permissionMode.

The mocked task's listRuntimeWork entry already sets permissionMode: 'request_approval' (Line 6395), and the "open approval runtime a" button also explicitly passes permissionMode: 'request_approval' to openRuntimeTask (Line 1406). Since both agree, the test can't tell whether the per-session override is actually applied, or whether paneSession.permissionMode/the sendRuntimeMessage payload is simply reading the task's own persisted metadata. Using two different values would make this a meaningful precedence test.

🤖 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/WorkbenchProvider.test.tsx` around lines 6368 -
6440, Make the permission precedence test use conflicting values: set the mocked
task metadata in listRuntimeWork to a different permissionMode than the value
passed by the “open approval runtime a” probe to openRuntimeTask. Keep the
expected follow-up and sendRuntimeMessage assertion focused on the explicit
per-session override, proving it takes precedence over persisted task metadata.
wework/src/e2e/automation.ts (1)

400-406: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate select-value logic between fillDesktopControlElement and the new selectValue case.

fillDesktopControlElement already knows how to set a <select>'s value via the native prototype setter and dispatch input+change (Lines 403-406, 457-465). The new selectValue case reimplements value-setting inline with a different technique (direct element.value = assignment, dispatching only change). Two divergent implementations for the same operation will drift over time.

♻️ Proposed refactor to reuse `fillDesktopControlElement`
     case 'selectValue': {
       const element = findDesktopControlElements(command.selector)[0]
       if (!(element instanceof HTMLSelectElement)) {
         throw new Error(`Selector "${command.selector}" is not a select element`)
       }
-      element.value = command.value ?? ''
-      element.dispatchEvent(new Event('change', { bubbles: true }))
+      fillDesktopControlElement(element, command.value ?? '')
       return element.value
     }

Also applies to: 550-558

🤖 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/e2e/automation.ts` around lines 400 - 406, Update the new
selectValue handling to reuse fillDesktopControlElement instead of assigning
element.value and dispatching events inline. Preserve the existing select-value
behavior, including native setter usage and both input and change events, by
routing the operation through fillDesktopControlElement.
wework/e2e/desktop/task-flow.e2e.mjs (1)

386-428: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

selectEscalatedShellTool duplicates selectShellTool almost entirely.

Both functions branch on exec_command vs shell_command and build near-identical tool argument objects; only sandbox_permissions/justification and the command string differ. Consider extracting a shared helper parameterized by the extra fields to avoid the two helpers drifting apart as the tool contract evolves.

♻️ Proposed refactor
-function selectShellTool(request, workspacePath) {
-  const command = 'pwd'
+function selectShellTool(request, workspacePath, extra = {}) {
+  const command = extra.command ?? 'pwd'
   const tools = Array.isArray(request.tools) ? request.tools : []
   if (tools.some(tool => tool?.name === 'exec_command')) {
     return selectTool(request, 'exec_command', {
       cmd: command,
       workdir: workspacePath,
       yield_time_ms: 1000,
+      ...extra.execCommandFields,
     })
   }
   if (tools.some(tool => tool?.name === 'shell_command')) {
     return selectTool(request, 'shell_command', {
       command,
       workdir: workspacePath,
       timeout_ms: 10_000,
+      ...extra.shellCommandFields,
     })
   }
   throw new Error('Real Codex did not advertise a supported shell tool')
 }
-
-function selectEscalatedShellTool(request, workspacePath) {
-  ...
-}
+
+function selectEscalatedShellTool(request, workspacePath) {
+  return selectShellTool(request, workspacePath, {
+    command: 'ps -Ao pid,command | head -n 3',
+    execCommandFields: {
+      sandbox_permissions: 'require_escalated',
+      justification: 'Allow the desktop E2E host process query?',
+    },
+    shellCommandFields: {
+      sandbox_permissions: 'require_escalated',
+      justification: 'Allow the desktop E2E host process query?',
+    },
+  })
+}
🤖 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/e2e/desktop/task-flow.e2e.mjs` around lines 386 - 428, Refactor
selectShellTool and selectEscalatedShellTool to use a shared helper that selects
between exec_command and shell_command and builds their common arguments.
Parameterize the helper with the command, workspacePath, and optional escalation
fields, then preserve the current non-escalated and escalated values and
unsupported-tool error behavior.
🤖 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.

Nitpick comments:
In `@wework/e2e/desktop/task-flow.e2e.mjs`:
- Around line 386-428: Refactor selectShellTool and selectEscalatedShellTool to
use a shared helper that selects between exec_command and shell_command and
builds their common arguments. Parameterize the helper with the command,
workspacePath, and optional escalation fields, then preserve the current
non-escalated and escalated values and unsupported-tool error behavior.

In `@wework/src/e2e/automation.ts`:
- Around line 400-406: Update the new selectValue handling to reuse
fillDesktopControlElement instead of assigning element.value and dispatching
events inline. Preserve the existing select-value behavior, including native
setter usage and both input and change events, by routing the operation through
fillDesktopControlElement.

In `@wework/src/features/workbench/WorkbenchProvider.test.tsx`:
- Around line 6368-6440: Make the permission precedence test use conflicting
values: set the mocked task metadata in listRuntimeWork to a different
permissionMode than the value passed by the “open approval runtime a” probe to
openRuntimeTask. Keep the expected follow-up and sendRuntimeMessage assertion
focused on the explicit per-session override, proving it takes precedence over
persisted task metadata.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 750b5ff0-d681-47c6-8022-b4eb7dc1bb15

📥 Commits

Reviewing files that changed from the base of the PR and between 9697159 and 25127e4.

📒 Files selected for processing (20)
  • executor/src/agents/codex.rs
  • executor/src/agents/mod.rs
  • executor/src/runtime_work/handler.rs
  • wework/e2e/desktop/task-flow.e2e.mjs
  • wework/src/api/local/localServices.test.ts
  • wework/src/api/local/localServices.ts
  • wework/src/components/chat/ApprovalCard.test.tsx
  • wework/src/components/chat/ApprovalCard.tsx
  • wework/src/components/chat/blocks/ToolBlocksDisplay.tsx
  • wework/src/components/layout/runtimeTaskSidebarHelpers.ts
  • wework/src/components/layout/useWorkbenchPaneSession.ts
  • wework/src/e2e/automation.ts
  • wework/src/features/workbench/WorkbenchProvider.test.tsx
  • wework/src/features/workbench/useWorkbenchRuntimeMessaging.ts
  • wework/src/features/workbench/workbenchReducer.ts
  • wework/src/features/workbench/workbenchRuntimeHelpers.ts
  • wework/src/i18n/locales/en/chat.json
  • wework/src/i18n/locales/en/common.json
  • wework/src/i18n/locales/zh-CN/chat.json
  • wework/src/i18n/locales/zh-CN/common.json
🚧 Files skipped from review as they are similar to previous changes (11)
  • wework/src/i18n/locales/zh-CN/chat.json
  • wework/src/components/chat/ApprovalCard.test.tsx
  • wework/src/i18n/locales/zh-CN/common.json
  • wework/src/i18n/locales/en/chat.json
  • wework/src/i18n/locales/en/common.json
  • wework/src/api/local/localServices.ts
  • wework/src/components/chat/blocks/ToolBlocksDisplay.tsx
  • wework/src/components/chat/ApprovalCard.tsx
  • executor/src/runtime_work/handler.rs
  • executor/src/agents/codex.rs
  • wework/src/components/layout/useWorkbenchPaneSession.ts

Wegent Test added 2 commits July 20, 2026 00:54
…permissions

# Conflicts:
#	executor/src/runtime_work/handler.rs
#	wework/src/components/chat/composer/ComposerToolbar.tsx
#	wework/src/components/chat/composer/ProjectChatComposer.tsx
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