Skip to content

[3 of 4] tui: route feature and memory toggles through app server#22915

Open
etraut-openai wants to merge 18 commits into
etraut/tui-config-app-server-2-catalog-statefrom
etraut/tui-config-app-server-3-feature-toggles
Open

[3 of 4] tui: route feature and memory toggles through app server#22915
etraut-openai wants to merge 18 commits into
etraut/tui-config-app-server-2-catalog-statefrom
etraut/tui-config-app-server-3-feature-toggles

Conversation

@etraut-openai
Copy link
Copy Markdown
Collaborator

@etraut-openai etraut-openai commented May 15, 2026

Why

Experimental feature toggles and memory settings can update several related config values in one interaction. Keeping those writes local in a remote TUI session is especially dangerous because the UI can diverge from the app-server config while also leaving behind partially stale supporting keys.

This is [3 of 4] in a stacked series that moves TUI-owned config mutations onto app-server APIs.

What changed

  • Routed feature flag persistence through app-server batch writes, including the supporting reviewer and permission updates used by guardian approval.
  • Routed Windows sandbox mode persistence and legacy Windows feature cleanup through app-server writes.
  • Routed memory settings through app-server batch writes and updated the TUI tests to exercise the embedded app-server path.

Config keys affected

  • features.<feature_key>
  • profiles.<profile>.features.<feature_key>
  • approval_policy
  • sandbox_mode
  • approvals_reviewer
  • windows.sandbox
  • features.experimental_windows_sandbox
  • features.elevated_windows_sandbox
  • features.enable_experimental_windows_sandbox
  • Profile-scoped Windows legacy feature variants under profiles.<profile>.features.*
  • memories.use_memories
  • memories.generate_memories
  • Profile-scoped memory variants under profiles.<profile>.memories.*

Suggested manual validation

  • Connect the TUI to a remote app server, toggle guardian approval on and off, and confirm the remote config updates features.guardian_approval, reviewer state, approval policy, and sandbox mode coherently.
  • Toggle a default-false experimental feature at the root level, disable it again, and confirm the key clears instead of lingering as an unnecessary explicit false.
  • Change memory settings and confirm the remote config updates both memory keys while the running TUI reflects the new state.
  • On Windows, switch sandbox mode through the TUI and confirm windows.sandbox is updated while the legacy Windows feature keys are cleared.

Stack

  1. #22913 [1 of 4] primary settings writes
  2. #22914 [2 of 4] app and skill enablement
  3. #22915 [3 of 4] feature and memory toggles
  4. #22916 [4 of 4] startup and onboarding bookkeeping

@etraut-openai etraut-openai force-pushed the etraut/tui-config-app-server-2-catalog-state branch from ff17872 to 6a181fa Compare May 15, 2026 22:48
@etraut-openai etraut-openai force-pushed the etraut/tui-config-app-server-3-feature-toggles branch from 15dc6d3 to d8375c8 Compare May 15, 2026 22:48
@etraut-openai etraut-openai force-pushed the etraut/tui-config-app-server-3-feature-toggles branch from d8375c8 to d5f9063 Compare May 15, 2026 22:50
etraut-openai added a commit that referenced this pull request May 16, 2026
## Why
The TUI can run against a remote app server, but several high-traffic
settings still persisted by editing the local config file. That sends
remote sessions' preference writes to the wrong machine and lets local
disk state drift from the app-server-owned config.

This is **[1 of 4]** in a stacked series that moves TUI-owned config
mutations onto app-server APIs.

## What changed
- Added a small TUI helper for typed app-server config writes.
- Routed primary interactive preference writes through
`config/batchWrite`.
- Preserved existing profile scoping for settings that already support
`profiles.<profile>.*` overrides.

## Config keys affected
- `model`
- `model_reasoning_effort`
- `personality`
- `service_tier`
- `plan_mode_reasoning_effort`
- `approvals_reviewer`
- `notice.fast_default_opt_out`
- Profile-scoped equivalents under `profiles.<profile>.*`

## Suggested manual validation
- Connect the TUI to a remote app server, change `model` and
`model_reasoning_effort`, reconnect, and confirm the remote config
retained both values while the local `config.toml` did not change.
- Change `personality`, `plan_mode_reasoning_effort`, and the explicit
auto-review selection, then reconnect and confirm those choices persist
through the app server.
- Clear the service tier back to default and confirm `service_tier` is
cleared while `notice.fast_default_opt_out = true` is persisted
remotely.
- Repeat one setting change with an active profile and confirm the write
lands under `profiles.<profile>.*`.

## Stack
1. [#22913](#22913) `[1 of 4]`
primary settings writes
2. [#22914](#22914) `[2 of 4]` app
and skill enablement
3. [#22915](#22915) `[3 of 4]`
feature and memory toggles
4. [#22916](#22916) `[4 of 4]`
startup and onboarding bookkeeping
@etraut-openai etraut-openai force-pushed the etraut/tui-config-app-server-2-catalog-state branch from df4e122 to fd994c7 Compare May 16, 2026 21:31
…ut/tui-config-app-server-3-feature-toggles

# Conflicts:
#	codex-rs/app-server/src/config_manager_service.rs
#	codex-rs/app-server/tests/suite/v2/config_rpc.rs
#	codex-rs/tui/src/app.rs
#	codex-rs/tui/src/app/tests.rs
#	codex-rs/tui/src/config_update.rs
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