Commit Graph
2136 Commits
Author SHA1 Message Date
Felipe Coury 31eea28d4c feat(terminal-browser): add codex-owned chrome 2026-07-07 14:47:15 -03:00
Felipe Coury 9ad2bbbc60 fix(terminal-browser): route human input through carbonyl 2026-07-07 12:05:52 -03:00
Felipe Coury b47aeadeec fix(tui): restore browser access and chat focus 2026-07-07 11:26:53 -03:00
Felipe Coury 0530d747c0 fix(tui): prefer terminal browser for tab requests 2026-07-07 10:22:36 -03:00
Felipe Coury 1890039988 fix(tui): restore managed network for auto review 2026-07-07 10:22:36 -03:00
Felipe Coury 79034a9e01 fix(tui): preserve browser network access in auto review 2026-07-07 09:29:46 -03:00
Felipe Coury 798e0a2311 feat(tui): activate browser control on click 2026-07-06 22:32:13 -03:00
Felipe Coury 8e0ae8c575 feat(tui): route browser through managed proxy 2026-07-06 16:43:22 -03:00
Felipe Coury 8287563e5c feat(tui): integrate carbonyl browser panel 2026-07-06 11:05:17 -03:00
Felipe Coury 34038b638f feat(tui): expose terminal browser tools 2026-07-06 10:24:40 -03:00
Felipe Coury 29e7d97698 feat(tui): own terminal browser lifecycle 2026-07-06 10:24:40 -03:00
Felipe Coury 4cb937a1e7 feat(tui): preserve browser takeover input 2026-07-06 10:24:40 -03:00
Felipe Coury a80dffef64 feat(tui): add carbonyl browser panel adapter 2026-07-06 10:24:39 -03:00
Felipe Coury 6289c176b7 feat(tui): add responsive owned-screen frame 2026-07-05 21:54:32 -03:00
Felipe Coury 7f75cd211d feat(tui): retain owned-screen stream source 2026-07-05 19:57:26 -03:00
Felipe Coury ba9d8dd59c feat(tui): preserve owned-screen drag selections 2026-07-05 18:54:49 -03:00
Felipe Coury 25093076bb fix(tui): render single markdown blank rows 2026-07-05 16:03:25 -03:00
Felipe Coury d52a1360e5 feat(tui): expand owned-screen text selection 2026-07-05 15:56:06 -03:00
Felipe Coury 402e5da0b0 feat(tui): copy owned-screen mouse selections 2026-07-04 23:38:13 -03:00
Felipe Coury e1ce98870f feat(tui): select retained conversation text 2026-07-04 23:37:41 -03:00
Felipe Coury 11a48b6460 feat(tui): expose selectable history projections 2026-07-04 23:36:36 -03:00
Felipe Coury 1077203e36 feat(tui): map rendered cells to source text 2026-07-04 23:36:10 -03:00
Felipe Coury c899573f99 feat(tui): resize owned conversation panes 2026-07-04 22:30:36 -03:00
Felipe Coury 3cb7cef03d feat(tui): focus owned panes on click 2026-07-04 21:00:37 -03:00
Felipe Coury 589b9dde10 fix(tui): synchronize owned pane navigation 2026-07-04 19:33:35 -03:00
Felipe Coury c6a5833f3f fix(tui): coordinate terminal pane surfaces 2026-07-04 19:28:13 -03:00
Felipe Coury 894e9b2ac1 fix(tui): synchronize shared pane state 2026-07-04 19:25:32 -03:00
Felipe Coury 95ac6b2bfc fix(tui): preserve side after parent closure 2026-07-04 18:47:49 -03:00
Felipe Coury 3ef12ab1d2 fix(tui): harden side conversation switching 2026-07-04 18:46:59 -03:00
Felipe Coury b3edff66a9 feat(tui): keep side conversations live 2026-07-04 17:49:35 -03:00
Felipe Coury 4aa82bb77d feat(tui): render side conversation panes 2026-07-04 17:13:59 -03:00
Felipe Coury ecce09c53e refactor(tui): run live conversation panes 2026-07-04 16:53:26 -03:00
Felipe Coury b4ffbb1730 refactor(tui): encapsulate conversation pane state 2026-07-04 16:39:33 -03:00
Felipe Coury 231945a73e refactor(tui): scope conversation presentation events 2026-07-04 16:11:51 -03:00
Felipe Coury 0b0abcbbc3 refactor(tui): scope conversation operations 2026-07-04 15:41:22 -03:00
Felipe Coury c973ecd069 fix(tui): preserve user prompt block styling 2026-07-04 14:43:39 -03:00
Felipe Coury bcafbd142c feat(tui): add owned screen wheel scrolling 2026-07-04 13:24:36 -03:00
Felipe Coury df5fdcf5bf feat(tui): add owned screen navigation 2026-07-04 02:03:36 -03:00
Felipe Coury 9f06929e21 feat(tui): own alternate screen in always mode 2026-07-04 01:50:07 -03:00
Felipe Coury b537258fee refactor(tui): add retained conversation viewport 2026-07-04 01:02:50 -03:00
Felipe Coury 85f780f2a8 refactor(tui): centralize alternate screen ownership 2026-07-04 00:59:15 -03:00
Eric Traut 020828170f [codex] Update safety notice wording (#30645)
## Summary

The TUI biosafety block still included obsolete copy telling approved
researchers they may be able to apply for Trusted Access.

Remove that sentence and update the UI snapshot to match the approved
wording.
2026-06-30 09:31:06 -07:00
Eric Traut 9d13291955 Update safety check links (#30491)
## Summary

Bio/Cyber safety surfaces in the TUI could send users to stale Trusted
Access pages, and safety buffering did not always expose the Help
Center.

This follow-up to #30317 adds the missing Learn more action, refreshes
the Bio access URL and block copy, and updates the affected snapshots
while preserving the existing retry and wait behavior.
2026-06-29 11:10:11 -07:00
Shijie Rao 80f54d1266 [codex] Treat max as a first-class reasoning effort (#30467)
## Why

The Bedrock GPT-5.6 catalog advertises `max`, but Codex treated it as an
opaque custom effort. That made the reasoning picker render it as
lowercase `max` while known efforts use productized labels.

Making `max` a known effort aligns catalog data, parsing, and UI
presentation without changing the `max` wire value or persisted
representation.

## What changed

- Add first-class `ReasoningEffort::Max` parsing and serialization.
- Use the typed effort in the Bedrock catalog and render it as `Max` in
the TUI.
- Preserve forward-compatible custom-effort coverage with a genuinely
unknown `future` value.

### Before
<img width="559" height="124" alt="Screenshot 2026-06-28 at 12 08 47 PM"
src="https://github.com/user-attachments/assets/7c43cf4f-020b-4605-9239-0a9c97eb7364"
/>

### After
<img width="558" height="107" alt="Screenshot 2026-06-28 at 12 09 10 PM"
src="https://github.com/user-attachments/assets/b9cc5ded-c940-43b4-b024-bba25abe0a17"
/>
2026-06-29 09:38:49 -07:00
Felipe Coury 850da19dc4 fix(tui): clear completed safety buffering prompt (#30490)
## Why

The safety-buffering prompt is a modal TUI view, but the normal
successful-turn path only hid the running status indicator. If the turn
completed while the prompt was open, the stale modal remained over the
composer until the user dismissed it or another turn started.

This aligns the TUI with the app behavior: keep the safety notice
visible while the turn is active, then remove it when the turn becomes
terminal. It also prevents the stale retry action from changing the
model and reasoning effort for a future turn after the buffered turn has
already completed.

| New copy |
|---|
| <img width="1014" height="313" alt="CleanShot 2026-06-28 at 20 27 18"
src="https://github.com/user-attachments/assets/f0f37359-5d77-442f-add2-9d1874bdc422"
/> |

## What changed

- Clear the active safety-buffering view and retry state when a turn
completes successfully.
- Update the retry-capable message to say “Hang tight or retry with a
faster model”.
- Extend the safety-buffering regression coverage to verify that the
prompt remains visible after assistant output starts and disappears when
the turn completes.
- Update the TUI snapshot for the revised copy.

This is a follow-up to #29919.

## How to Test

1. Start a TUI turn that receives `model/safetyBuffering/updated` with
`showBufferingUi: true` and a `fasterModel`.
2. Confirm the prompt says “Hang tight or retry with a faster model”.
3. Let the turn continue and confirm the prompt remains visible while
the turn is active.
4. Let the turn finish successfully and confirm the prompt disappears
and the composer is restored without requiring an extra keypress.
5. Confirm a buffering update without a faster model still shows the
shorter non-retry message.

Targeted automated coverage:

- `just test -p codex-tui safety_buffering` — 4 passed.
- `just test -p codex-tui` — 2,951 passed; two unrelated Guardian
feature-flag tests failed identically on `main` in this environment.

The argument-comment lint was also audited manually. The workspace Bazel
invocation was blocked by a missing external LLVM `compiler-rt` BUILD
file, and the packaged per-crate fallback uses a nightly older than the
current `sqlx` minimum Rust version.
2026-06-28 20:55:53 -03:00
xl-openai e428a12d22 [codex] Enable remote plugins by default (#30297)
## Summary

- enable the remote plugin feature by default
- promote the remote plugin feature from under development to stable
- preserve the existing `features.remote_plugin` override for explicitly
disabling it
- keep legacy disabled-path coverage explicit in TUI and app-server
tests

## Impact

Remote plugin functionality is enabled by default for configurations
that do not set the feature flag. The existing Codex backend
authentication gate still applies.

## Validation

- `just fmt`
- `just test -p codex-features`
- `just test -p codex-tui
plugins_popup_remote_section_fallback_states_snapshot`
- targeted `codex-app-server` plugin-list and skills-list tests
- `git diff --check`

The full TUI and app-server suites were also exercised locally. All
remote-plugin-related coverage passed; unrelated local
sandbox/test-binary failures remain outside this change.
2026-06-28 11:46:25 -07:00
Eric Traut c464468493 Update security check wording (#30317) 2026-06-26 20:05:32 -07:00
charlesgong-openai 6509f3148a [codex] Support npm marketplace plugin sources (#29375)
## Why

Marketplace source deserialization treated `{"source":"npm", ...}` as
unsupported. The loader logged and skipped the entry, so npm-backed
plugins never appeared in `plugin list --available` and `plugin add`
returned "plugin not found".

Codex plugins are installed from a plugin root, not from an npm
dependency tree. For npm-backed marketplace entries, Codex should fetch
the published package contents without running package scripts or
installing unrelated dependencies.

## What changed

- Add `npm` marketplace plugin sources with `package`, optional semver
`version` or version range, and optional HTTPS `registry`.
- Reject unsafe npm source fields before materialization, including
invalid package names, non-semver version selectors, plaintext or
credential-bearing registry URLs, and registry query/fragment data.
- Materialize npm plugins with `npm pack --ignore-scripts`, then unpack
the resulting tarball through the existing hardened plugin bundle
extractor.
- Enforce npm archive and extracted-size limits, require the standard
npm `package/` archive root, and verify the extracted `package.json`
name matches the requested package before installing.
- Keep plugin listings, install-source descriptions, CLI JSON/human
output, app-server v2 `PluginSource`, TUI source summaries, regenerated
schema fixtures, and app-server documentation in sync.

## Impact

Marketplaces can distribute Codex plugins from public or configured
private HTTPS npm registries using the same install flow as existing
materialized plugin sources. `npm` must be available on `PATH` when an
npm-backed plugin is installed.

Fixes #27831

## Validation

- `just write-app-server-schema`
- `just test -p codex-core-plugins -p codex-app-server-protocol -p
codex-app-server -p codex-cli`
  - npm/schema/core-plugin coverage passed in the run.
- The full focused command finished with `1739 passed`, `11 failed`, and
`6 timed out`; the failures were unrelated local app-server environment
failures from `sandbox-exec: sandbox_apply: Operation not permitted`
plus one missing `test_stdio_server` helper binary.
- Installed an npm-published Codex plugin package through a throwaway
local marketplace and throwaway `CODEX_HOME` to exercise the real npm
materialization path end to end.
2026-06-26 17:24:46 -04:00
hefuc-oai cf36c688b3 [codex] Use managed defaults for TUI threads (#30147)
## Why

#29683 exposes managed defaults for new-thread model settings through
`configRequirements/read` without applying them server-wide. The TUI is
an app-server client, so it should explicitly consume those defaults
when it creates a fresh thread.

This lets plain `codex` start on the managed model while preserving the
existing ability to change model settings within the thread.

## What changed

- Read `requirements.models.newThread` during TUI app-server bootstrap.
- Apply the managed model, reasoning effort, and service tier to the
initial fresh thread and subsequent `/new` or `/clear` threads.
- Keep explicit launch overrides above the managed defaults.
- Normalize the managed `fast` service tier to the `priority` request
value.
- Leave resumed and forked threads unchanged.

The application logic lives in a small TUI-only module; app-server
`thread/start` behavior remains unchanged for other clients.

## User experience

- Plain `codex` starts with the managed new-thread settings.
- A user can still change settings with `/model` or the existing
service-tier controls.
- Starting another fresh thread reapplies the managed defaults.
- Explicit launch choices such as `codex -m <model>` continue to win.

## Validation

- `just test -p codex-tui managed_new_thread_defaults`
- `just fix -p codex-tui`

Depends on #29683.
2026-06-26 19:27:31 +00:00
hefuc-oai d9cf931d0e [codex] Add managed new-thread model settings (#29683)
## Why

Admins need persistent defaults for the model, reasoning effort, and
service tier shown when the Desktop App creates a new thread. These are
initialization defaults rather than runtime constraints: the App should
use them to initialize its draft while still allowing a user to make an
explicit selection.

The app-server therefore needs to expose the managed values before
thread creation without changing `thread/start` behavior for other
clients.

## What changed

- Parse `model`, `model_reasoning_effort`, and `service_tier` from
`[models.new_thread]` in `requirements.toml`.
- Compose the `models` requirements through the existing
requirements-layer precedence rules.
- Expose the resolved values through `configRequirements/read` as
`requirements.models.newThread`.
- Add the corresponding app-server protocol types and regenerate the
JSON and TypeScript schema fixtures.
- Document the new `configRequirements/read` fields in the app-server
README.

## Scope

This PR is data plumbing only. It does not apply these values during
`thread/start` and does not change thread creation for existing
app-server clients, resumed or forked sessions, internal or subagent
sessions, `codex exec`, or the TUI. A companion Desktop App change owns
draft initialization, sends the effective settings for ordinary and
prewarmed starts, and preserves explicit user changes.

## Validation

- Requirements deserialization coverage for `[models.new_thread]`
- Requirements-layer precedence coverage
- App-server API mapping coverage
- `configRequirements/read` integration coverage
- Regenerated app-server JSON and TypeScript schema fixtures
2026-06-26 18:37:40 +00:00