Commit Graph
8463 Commits
Author SHA1 Message Date
Matthew Zeng c37560069a [apps] Add is_enabled to app info. (#11417)
- [x] Add is_enabled to app info and the response of `app/list`.
- [x] Update TUI to have Enable/Disable button on the app detail page.
2026-02-13 00:30:52 +00:00
Michael Bolin ed85fd14f1 Merge f07f8b3ccd into sapling-pr-archive-bolinfest 2026-02-12 16:22:19 -08:00
Michael Bolin f07f8b3ccd fix: reduce flakiness of compact_resume_after_second_compaction_preserves_history 2026-02-12 16:22:05 -08:00
Owen Lin 8d97b5c246 fix(app-server): surface more helpful errors for json-rpc (#11638)
Propagate client JSON-RPC errors for app-server request callbacks.
Previously a number of possible errors were collapsed to `channel
closed`. Now we should be able to see the underlying client error.

### Summary
This change stops masking client JSON-RPC error responses as generic
callback cancellation in app-server server->client request flows.

Previously, when the client responded with a JSON-RPC error, we removed
the callback entry but did not send anything to the waiting oneshot
receiver. Waiters then observed channel closure (for example, auth
refresh request canceled: channel closed), which hid the actual client
error.

Now, client JSON-RPC errors are forwarded through the callback channel
and handled explicitly by request consumers.

### User-visible behavior
- External auth refresh now surfaces real client JSON-RPC errors when
provided.
- True transport/callback-drop cases still report
canceled/channel-closed semantics.

### Example: client JSON-RPC error is now propagated (not masked as
"canceled")

When app-server asks the client to refresh ChatGPT auth tokens, it sends
a server->client JSON-RPC request like:

```json
{
  "id": 42,
  "method": "account/chatgptAuthTokens/refresh",
  "params": {
    "reason": "unauthorized",
    "previousAccountId": "org-abc"
  }
}
```

If the client cannot refresh and responds with a JSON-RPC error:
```
{
  "id": 42,
  "error": {
    "code": -32000,
    "message": "refresh failed",
    "data": null
  }
}
```

app-server now forwards that error through the callback path and
surfaces:
`auth refresh request failed: code=-32000 message=refresh failed`

Previously, this same case could be reported as:
`auth refresh request canceled: channel closed`
2026-02-13 00:14:55 +00:00
Michael Bolin 2825ac85a8 app-server: stabilize detached review start on Windows (#11646)
## Why

`review_start_with_detached_delivery_returns_new_thread_id` has been
failing on Windows CI. The failure mode is a process crash
(`tokio-runtime-worker` stack overflow) during detached review setup,
which causes EOF in the test harness.

This test is intended to validate detached review thread identity, not
shell snapshot behavior. We also still want detached review to avoid
unnecessary rollout-path rediscovery when the parent thread is already
loaded.

## What Changed

- Updated detached review startup in
`codex-rs/app-server/src/codex_message_processor.rs`:
  - `start_detached_review` now receives the loaded parent thread.
  - It prefers `parent_thread.rollout_path()`.
- It falls back to `find_thread_path_by_id_str(...)` only if the
in-memory path is unavailable.
- Hardened the review test fixture in
`codex-rs/app-server/tests/suite/v2/review.rs` by setting
`shell_snapshot = false` in test config, so this test no longer depends
on unrelated Windows PowerShell snapshot initialization.

## Verification

- `cargo test -p codex-app-server`
- Verified
`suite::v2::review::review_start_with_detached_delivery_returns_new_thread_id`
passes locally.

## Notes

- Related context: rollout-path lookup behavior changed in #10532.
2026-02-12 16:12:44 -08:00
Michael Bolin aef4af1079 app-server tests: disable shell_snapshot for review suite (#11657)
## Why


`suite::v2::review::review_start_with_detached_delivery_returns_new_thread_id`
was failing on Windows CI due to an unrelated process crash during shell
snapshot initialization (`tokio-runtime-worker` stack overflow).

This review test suite validates review API behavior and should not
depend on shell snapshot behavior. Keeping shell snapshot enabled in
this fixture made the test flaky for reasons outside the scenario under
test.

## What Changed

- Updated the review suite test config in
`codex-rs/app-server/tests/suite/v2/review.rs` to set:
  - `shell_snapshot = false`

This keeps the review tests focused on review behavior by disabling
shell snapshot initialization in this fixture.

## Verification

- `cargo test -p codex-app-server`
- Confirmed the previously failing Windows CI job for this test now
passes on this PR.
2026-02-12 23:56:43 +00:00
Michael Bolin 5d4aea7273 Merge ae8a86f883 into sapling-pr-archive-bolinfest 2026-02-12 15:44:29 -08:00
Michael Bolin ae8a86f883 fix review_start_with_detached_delivery_returns_new_thread_id 2026-02-12 15:43:54 -08:00
Curtis 'Fjord' Hawthorne 0dcfc59171 Add js_repl_tools_only model and routing restrictions (#10671)
# External (non-OpenAI) Pull Request Requirements

Before opening this Pull Request, please read the dedicated
"Contributing" markdown file or your PR may be closed:
https://github.com/openai/codex/blob/main/docs/contributing.md

If your PR conforms to our contribution guidelines, replace this text
with a detailed and high quality description of your changes.

Include a link to a bug report or enhancement request.


#### [git stack](https://github.com/magus/git-stack-cli)
- ✅ `1` https://github.com/openai/codex/pull/10674
- ✅ `2` https://github.com/openai/codex/pull/10672
- 👉 `3` https://github.com/openai/codex/pull/10671
- ⏳ `4` https://github.com/openai/codex/pull/10673
- ⏳ `5` https://github.com/openai/codex/pull/10670
2026-02-12 15:41:05 -08:00
Wendy Jiao a7ce2a1c31 Remove absolute path in rollout_summary (#11622) 2026-02-12 23:32:41 +00:00
Celia Chen dfd1e199a0 [feat] add seatbelt permission files (#11639)
Add seatbelt permission extension abstraction as permission files for
seatbelt profiles. This should complement our current sandbox policy
2026-02-12 23:30:22 +00:00
Michael Bolin 10800d8d21 Merge e327ffdfa3 into sapling-pr-archive-bolinfest 2026-02-12 15:27:21 -08:00
Michael Bolin e327ffdfa3 app-server: use parent rollout path for detached review 2026-02-12 15:26:42 -08:00
Owen Lin 76256a8cec fix: skip review_start_with_detached_delivery_returns_new_thread_id o… (#11645)
…n windows
2026-02-12 15:12:57 -08:00
Michael Bolin aac227d4a7 Merge 0be91c3e24 into sapling-pr-archive-bolinfest 2026-02-12 14:56:54 -08:00
Michael Bolin 0be91c3e24 app-server: use in-memory rollout path for detached review 2026-02-12 14:53:34 -08:00
Josh McKinney 75e79cf09a docs: require insta snapshot coverage for UI changes (#10669)
Adds an explicit requirement in AGENTS.md that any user-visible UI
change includes corresponding insta snapshot coverage and that snapshots
are reviewed/accepted in the PR.

Tests: N/A (docs only)
2026-02-12 22:47:09 +00:00
Michael Bolin a4cc1a4a85 feat: introduce Permissions (#11633)
## Why
We currently carry multiple permission-related concepts directly on
`Config` for shell/unified-exec behavior (`approval_policy`,
`sandbox_policy`, `network`, `shell_environment_policy`,
`windows_sandbox_mode`).

Consolidating these into one in-memory struct makes permission handling
easier to reason about and sets up the next step: supporting named
permission profiles (`[permissions.PROFILE_NAME]`) without changing
behavior now.

This change is mostly mechanical: it updates existing callsites to go
through `config.permissions`, but it does not yet refactor those
callsites to take a single `Permissions` value in places where multiple
permission fields are still threaded separately.

This PR intentionally **does not** change the on-disk `config.toml`
format yet and keeps compatibility with legacy config keys.

## What Changed
- Introduced `Permissions` in `core/src/config/mod.rs`.
- Added `Config::permissions` and moved effective runtime permission
fields under it:
  - `approval_policy`
  - `sandbox_policy`
  - `network`
  - `shell_environment_policy`
  - `windows_sandbox_mode`
- Updated config loading/building so these effective values are still
derived from the same existing config inputs and constraints.
- Updated Windows sandbox helpers/resolution to read/write via
`permissions`.
- Threaded the new field through all permission consumers across core
runtime, app-server, CLI/exec, TUI, and sandbox summary code.
- Updated affected tests to reference `config.permissions.*`.
- Renamed the struct/field from
`EffectivePermissions`/`effective_permissions` to
`Permissions`/`permissions` and aligned variable naming accordingly.

## Verification
- `just fix -p codex-core -p codex-tui -p codex-cli -p codex-app-server
-p codex-exec -p codex-utils-sandbox-summary`
- `cargo build -p codex-core -p codex-tui -p codex-cli -p
codex-app-server -p codex-exec -p codex-utils-sandbox-summary`
2026-02-12 14:42:54 -08:00
Michael Bolin 8a9a1418a3 Merge 9bd73555e6 into sapling-pr-archive-bolinfest 2026-02-12 14:28:43 -08:00
Michael Bolin 9bd73555e6 feat: introduce EffectivePermissions 2026-02-12 14:28:38 -08:00
Michael Bolin 951b550b66 Merge d913a7ac76 into sapling-pr-archive-bolinfest 2026-02-12 14:17:15 -08:00
Michael Bolin d913a7ac76 feat: introduce EffectivePermissions 2026-02-12 14:17:10 -08:00
Michael Bolin 099492af0c Merge 5032154ecf into sapling-pr-archive-bolinfest 2026-02-12 14:15:59 -08:00
Michael Bolin 5032154ecf feat: introduce EffectivePermissions 2026-02-12 14:15:45 -08:00
Michael Bolin 768797dae0 merge commit for archive created by Sapling 2026-02-12 14:14:26 -08:00
Michael Bolin ebf5556cab feat: introduce EffectivePermissions 2026-02-12 14:14:15 -08:00
xl-openai d7cb70ed26 Better error message for model limit hit. (#11636)
<img width="553" height="147" alt="image"
src="https://github.com/user-attachments/assets/f04cdebd-608a-4055-a413-fae92aaf04e5"
/>
2026-02-12 14:10:30 -08:00
Dylan Hurd 4668feb43a chore(core) Deprecate approval_policy: on-failure (#11631)
## Summary
In an effort to start simplifying our sandbox setup, we're announcing
this approval_policy as deprecated. In general, it performs worse than
`on-request`, and we're focusing on making fewer sandbox configurations
perform much better.

## Testing
- [x] Tested locally
- [x] Existing tests pass
2026-02-12 13:23:30 -08:00
iceweasel-oai 5c3ca73914 add a slash command to grant sandbox read access to inaccessible directories (#11512)
There is an edge case where a directory is not readable by the sandbox.
In practice, we've seen very little of it, but it can happen so this
slash command unlocks users when it does.

Future idea is to make this a tool that the agent knows about so it can
be more integrated.
2026-02-12 12:48:36 -08:00
Michael Bolin 02f090798f Merge 17091797a1 into sapling-pr-archive-bolinfest 2026-02-12 12:43:27 -08:00
Michael Bolin 17091797a1 feat: introduce EffectivePermissions 2026-02-12 12:43:22 -08:00
Michael Bolin a32479dfdc merge commit for archive created by Sapling 2026-02-12 12:41:36 -08:00
Michael Bolin 937f1e0003 feat: introduce EffectivePermissions 2026-02-12 12:39:41 -08:00
Michael Bolin 533b413563 merge commit for archive created by Sapling 2026-02-12 12:36:49 -08:00
Michael Bolin 682618f4a8 feat: introduce EffectivePermissions 2026-02-12 12:36:32 -08:00
Curtis 'Fjord' Hawthorne 466be55abc Add js_repl host helpers and exec end events (#10672)
## Summary

This PR adds host-integrated helper APIs for `js_repl` and updates model
guidance so the agent can use them reliably.

### What’s included

- Add `codex.tool(name, args?)` in the JS kernel so `js_repl` can call
normal Codex tools.
- Keep persistent JS state and scratch-path helpers available:
  - `codex.state`
  - `codex.tmpDir`
- Wire `js_repl` tool calls through the standard tool router path.
- Add/align `js_repl` execution completion/end event behavior with
existing tool logging patterns.
- Update dynamic prompt injection (`project_doc`) to document:
  - how to call `codex.tool(...)`
  - raw output behavior
- image flow via `view_image` (`codex.tmpDir` +
`codex.tool("view_image", ...)`)
- stdio safety guidance (`console.log` / `codex.tool`, avoid direct
`process.std*`)

## Why

- Standardize JS-side tool usage on `codex.tool(...)`
- Make `js_repl` behavior more consistent with existing tool execution
and event/logging patterns.
- Give the model enough runtime guidance to use `js_repl` safely and
effectively.

## Testing

- Added/updated unit and runtime tests for:
  - `codex.tool` calls from `js_repl` (including shell/MCP paths)
  - image handoff flow via `view_image`
  - prompt-injection text for `js_repl` guidance
  - execution/end event behavior and related regression coverage




#### [git stack](https://github.com/magus/git-stack-cli)
- ✅ `1` https://github.com/openai/codex/pull/10674
- 👉 `2` https://github.com/openai/codex/pull/10672
- ⏳ `3` https://github.com/openai/codex/pull/10671
- ⏳ `4` https://github.com/openai/codex/pull/10673
- ⏳ `5` https://github.com/openai/codex/pull/10670
2026-02-12 12:10:25 -08:00
Owen Lin efc8d45750 feat(app-server): experimental flag to persist extended history (#11227)
This PR adds an experimental `persist_extended_history` bool flag to
app-server thread APIs so rollout logs can retain a richer set of
EventMsgs for non-lossy Thread > Turn > ThreadItems reconstruction (i.e.
on `thread/resume`).

### Motivation
Today, our rollout recorder only persists a small subset (e.g. user
message, reasoning, assistant message) of `EventMsg` types, dropping a
good number (like command exec, file change, etc.) that are important
for reconstructing full item history for `thread/resume`, `thread/read`,
and `thread/fork`.

Some clients want to be able to resume a thread without lossiness. This
lossiness is primarily a UI thing, since what the model sees are
`ResponseItem` and not `EventMsg`.

### Approach
This change introduces an opt-in `persist_full_history` flag to preserve
those events when you start/resume/fork a thread (defaults to `false`).

This is done by adding an `EventPersistenceMode` to the rollout
recorder:
- `Limited` (existing behavior, default)
- `Extended` (new opt-in behavior)

In `Extended` mode, persist additional `EventMsg` variants needed for
non-lossy app-server `ThreadItem` reconstruction. We now store the
following ThreadItems that we didn't before:
- web search
- command execution
- patch/file changes
- MCP tool calls
- image view calls
- collab tool outcomes
- context compaction
- review mode enter/exit

For **command executions** in particular, we truncate the output using
the existing `truncate_text` from core to store an upper bound of 10,000
bytes, which is also the default value for truncating tool outputs shown
to the model. This keeps the size of the rollout file and command
execution items returned over the wire reasonable.

And we also persist `EventMsg::Error` which we can now map back to the
Turn's status and populates the Turn's error metadata.

#### Updates to EventMsgs
To truly make `thread/resume` non-lossy, we also needed to persist the
`status` on `EventMsg::CommandExecutionEndEvent` and
`EventMsg::PatchApplyEndEvent`. Previously it was not obvious whether a
command failed or was declined (similar for apply_patch). These
EventMsgs were never persisted before so I made it a required field.
2026-02-12 19:34:22 +00:00
canvrno-oai 22fa283511 Parse first order skill/connector mentions (#11547)
This PR introduces a skill-expansion mechanism for mentions so nested or
skill or connection mentions are expanded if present in skills invoked
by the user. This keeps behavior aligned with existing mention handling
while extending coverage to deeper scenarios. With these changes, users
can create skills that invoke connectors, and skills that invoke other
skills.

Replaces #10863, which is not needed with the addition of
[search_tool_bm25](https://github.com/openai/codex/issues/10657)
2026-02-12 10:55:22 -08:00
Jeremy Rose 66e0c3aaa3 app-server: add fuzzy search sessions for streaming file search (#10268) 2026-02-12 10:49:44 -08:00
jif-oai 545b266839 fix: fmt (#11619) 2026-02-12 18:13:00 +00:00
jif-oai b3674dcce0 chore: reduce concurrency of memories (#11614) 2026-02-12 17:55:21 +00:00
Wendy Jiaoandjif-oai 88c5ca2573 Add cwd to memory files (#11591)
Add cwd to memory files so that model can deal with multi cwd memory
better.

---------

Co-authored-by: jif-oai <jif@openai.com>
2026-02-12 17:46:49 +00:00
Wendy Jiaoandjif-oai 82acd815e4 exclude developer messages from phase-1 memory input (#11608)
Co-authored-by: jif-oai <jif@openai.com>
2026-02-12 17:43:38 +00:00
Dylan HurdandAhmed Ibrahim f39f506700 fix(core) model_info preserves slug (#11602)
## Summary
Preserve the specified model slug when we get a prefix-based match

## Testing
- [x] added unit test

---------

Co-authored-by: Ahmed Ibrahim <aibrahim@openai.com>
2026-02-12 09:43:32 -08:00
jif-oai f741fad5c0 chore: drop and clean from phase 1 (#11605)
This PR is mostly cleaning and simplifying phase 1 of memories
2026-02-12 17:23:00 +00:00
jif-oai ba6f7a9e15 chore: drop mcp validation of dynamic tools (#11609)
Drop validation of dynamic tools using MCP names to reduce latency
2026-02-12 17:15:25 +00:00
jif-oai cf4ef84b52 feat: add sanitizer to redact secrets (#11600)
Adding a sanitizer crate that can redact API keys and other secret with
known pattern from a String
2026-02-12 16:44:01 +00:00
gt-oai d8b130d9a4 Fix config test on macOS (#11579)
When running these tests locally, you may have system-wide config or
requirements files. This makes the tests ignore these files.
2026-02-12 15:56:48 +00:00
jif-oai aeaa68347f feat: metrics to memories (#11593) 2026-02-12 15:28:48 +00:00
jif-oai 04b60d65b3 chore: clean consts (#11590) 2026-02-12 14:44:40 +00:00