Commit Graph

5997 Commits

Author SHA1 Message Date
Michael Bolin
af3b8e7761 merge commit for archive created by Sapling 2025-12-23 19:04:50 -08:00
Michael Bolin
97e8a1bd29 fix: clean up tests so they pass under Buck2 2025-12-23 18:56:34 -08:00
Michael Bolin
46d432e484 feat: introduce codex-utils-cargo-bin as an alternative to assert_cmd::Command 2025-12-23 18:56:34 -08:00
Michael Bolin
ee9c29cae9 Merge 81e40c8162 into sapling-pr-archive-bolinfest 2025-12-23 17:56:33 -08:00
Michael Bolin
81e40c8162 fix: clean up tests so they pass under Buck2 2025-12-23 17:56:15 -08:00
Michael Bolin
4911fd93e7 merge commit for archive created by Sapling 2025-12-23 17:32:56 -08:00
Michael Bolin
fd72889794 feat: introduce codex-utils-cargo-bin as an alternative to assert_cmd::Command 2025-12-23 17:32:47 -08:00
Michael Bolin
f80d16a93d merge commit for archive created by Sapling 2025-12-23 17:28:29 -08:00
Michael Bolin
5e23e4dcd3 feat: introduce codex-utils-cargo-bin as an alternative to assert_cmd::Command 2025-12-23 17:28:13 -08:00
Michael Bolin
841b6c4a82 Merge 36d67372d7 into sapling-pr-archive-bolinfest 2025-12-23 17:06:21 -08:00
Michael Bolin
36d67372d7 feat: introduce codex-utils-cargo-bin as an alternative to assert_cmd::Command 2025-12-23 17:06:01 -08:00
Michael Bolin
29ff4bbd7c merge commit for archive created by Sapling 2025-12-23 16:58:37 -08:00
Michael Bolin
28ac4f8453 feat: introduce codex-utils-cargo-bin as an alternative to assert_cmd::Command 2025-12-23 16:58:28 -08:00
Michael Bolin
3184358056 Merge fade06193e into sapling-pr-archive-bolinfest 2025-12-23 16:55:49 -08:00
Michael Bolin
fade06193e feat: introduce codex-utils-cargo-bin as an alternative to assert_cmd::Command 2025-12-23 16:52:26 -08:00
Michael Bolin
972b5853a0 fix: fix test that was writing temp file to cwd instead of TMPDIR (#8493)
I am trying to support building with [Buck2](https://buck2.build), which
reports which files have changed between invocations of `buck2 test` and
`tmp_delete_example.txt` came up. This turned out to be the reason.
2025-12-23 15:48:06 -08:00
Michael Bolin
6173892d70 Merge 2f103365d7 into sapling-pr-archive-bolinfest 2025-12-23 15:29:49 -08:00
Michael Bolin
2f103365d7 fix: fix test that was writing temp file to cwd instead of TMPDIR 2025-12-23 15:29:43 -08:00
Shijie Rao
fb24c47bea fix: limit output size for exec command in unified exec (#8460)
### Issue
[Investigation
thread](https://openai.slack.com/archives/C095U48JNL9/p1766426234975789)

Github issue: [issue one](https://github.com/openai/codex/issues/8197),
[issue two](https://github.com/openai/codex/issues/8358), [issue
three](https://github.com/openai/codex/issues/7585)
Commonality: working in monorepo and large projects. Multiple threads
going and showing sluggishness ending with a crash and grey background.
Potential high usage of context.
How to reproduce:
* Open the whole monorepo with cursor or VSC on the latest extension.
* Run ls -R in current CWD.

### Change
In unified exec, we do not have max output check to the delta we ouput
for shell commands. This causes issue with our VSCE UI which take the
delta and construct the shell output.
2025-12-23 14:36:15 -08:00
Josh McKinney
f2b740c95d fix(codex-cli): improve ripgrep download diagnostics (#8486)
When rg download fails during npm package staging, log the
target/platform/url and preserve the original exception as the cause.
Emit GitHub Actions log groups and error annotations so the failure is
easier to spot.

Document why a urlopen timeout is set (the default can hang
indefinitely).

This is to make failures in the specific build step easier to understand
/ work out what's failing rather than having a big wall of text (or at
least having an obvious part of it that helps narrow that wall)

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-23 21:18:35 +00:00
Josh McKinney
0130a2fa40 feat(tui2): add multi-click transcript selection (#8471)
Support multi-click transcript selection using transcript/viewport
coordinates
(wrapped visual line index + content column), not terminal buffer
positions.

Gestures:
- double click: select word-ish token under cursor
- triple click: select entire wrapped line
- quad click: select paragraph (contiguous non-empty wrapped lines)
- quint+ click: select the entire history cell (all wrapped lines
belonging to a
  single `HistoryCell`, including blank lines inside the cell)

Selection expansion rebuilds the wrapped transcript view from
`HistoryCell::display_lines(width)` so boundaries match on-screen
wrapping during
scroll/resize/streaming reflow. Click grouping is resilient to minor
drag jitter
(some terminals emit tiny Drag events during clicks) and becomes more
tolerant as
the sequence progresses so quad/quint clicks are practical.

Tests cover expansion (word/line/paragraph/cell), sequence resets
(timing, motion,
line changes, real drags), drag jitter, and behavior on spacer lines
between
history cells (paragraph/cell selection prefers the cell above).
2025-12-23 21:05:06 +00:00
sayan-oai
53eb2e9f27 [tui] add optional details to TUI status header (#8293)
### What

Add optional `details` field to TUI's status indicator header. `details`
is shown under the header with text wrapping and a max height of 3
lines.

Duplicated changes to `tui2`.

### Why

Groundwork for displaying error details under `Reconnecting...` for
clarity with retryable errors.

Basic examples
<img width="1012" height="326" alt="image"
src="https://github.com/user-attachments/assets/dd751ceb-b179-4fb2-8fd1-e4784d6366fb"
/>

<img width="1526" height="358" alt="image"
src="https://github.com/user-attachments/assets/bbe466fc-faff-4a78-af7f-3073ccdd8e34"
/>

Truncation example
<img width="936" height="189" alt="image"
src="https://github.com/user-attachments/assets/f3f1b5dd-9050-438b-bb07-bd833c03e889"
/>

### Tests
Tested locally, added tests for truncation.
2025-12-23 12:40:40 -08:00
Josh McKinney
2828549323 fix(tui2): start transcript selection on drag (#8466)
Avoid distracting 1-cell highlights on simple click by tracking an
anchor on mouse down and only creating a visible selection once the
mouse is dragged (selection head set).

When dragging while following the bottom during streaming, request a
scroll lock so the viewport stops moving under the active selection.

Move selection state transitions into transcript_selection helpers
(returning change/lock outcomes for the caller) and add unit tests for
the state machine.
2025-12-22 21:15:57 -08:00
Anton Panasenko
cbc5fb9acf chore: save more about turn context in rollout log file (#8458)
### Motivation
- Persist richer per-turn configuration in rollouts so resumed/forked
sessions and tooling can reason about the exact instruction inputs and
output constraints used for a turn.

### Description
- Extend `TurnContextItem` to include optional `base_instructions`,
`user_instructions`, and `developer_instructions`.
- Record the optional `final_output_json_schema` associated with a turn.
- Add an optional `truncation_policy` to `TurnContextItem` and populate
it when writing turn-context rollout items.
- Introduce a protocol-level `TruncationPolicy` representation and
convert from core truncation policy when recording.

### Testing
- `cargo test -p codex-protocol` (pass)
2025-12-22 19:51:07 -08:00
Josh McKinney
310f2114ae fix(tui2): fix screen corruption (#8463)
Summary

Fixes intermittent screen corruption in tui2 (random stale characters)
by
addressing two terminal state desyncs: nested alt-screen transitions and
the
first-draw viewport clear.

- Make alt-screen enter/leave re-entrant via a small nesting guard so
closing
- Ensure the first viewport draw clears after the viewport is sized,
preventing
old terminal contents from leaking through when diff-based rendering
skips
  space cells.
- Add docs + a small unit test for the alt-screen nesting behavior.

Testing

- cargo test -p codex-tui2
- cargo clippy -p codex-tui2 --all-features --tests
- Manual:
- Opened the transcript overlay and dismissed it repeatedly; verified
the
      normal view redraws cleanly with no leftover characters.
- Ran tui2 in a new folder with no trust settings (and also cleared the
trust setting from config to re-trigger the prompt); verified the
initial
      trust/onboarding screen renders without artifacts.
2025-12-22 19:15:23 -08:00
Michael Bolin
e27d9bd88f feat: honor /etc/codex/config.toml (#8461)
This adds logic to load `/etc/codex/config.toml` and associate it with
`ConfigLayerSource::System` on UNIX. I refactored the code so it shares
logic with the creation of the `ConfigLayerSource::User` layer.
2025-12-22 19:06:04 -08:00
Josh McKinney
414fbe0da9 feat(tui2): add copy selection shortcut + UI affordance (#8462)
- Detect Ctrl+Shift+C vs VS Code Ctrl+Y and surface in footer hints
- Render clickable “⧉ copy” pill near transcript selection (hidden while
dragging)
- Handle copy hotkey + click to copy selection
- Document updated copy UX

VSCode:
<img width="1095" height="413" alt="image"
src="https://github.com/user-attachments/assets/84be0c82-4762-4c3e-80a4-c751c078bdaa"
/>

Ghosty:
<img width="505" height="68" alt="image"
src="https://github.com/user-attachments/assets/109cc1a1-f029-4f7e-a141-4c6ed2da7338"
/>
2025-12-22 18:54:58 -08:00
Michael Bolin
76a580caa3 Merge f759baa269 into sapling-pr-archive-bolinfest 2025-12-22 18:15:48 -08:00
Michael Bolin
f759baa269 feat: honor /etc/codex/config.toml 2025-12-22 18:15:43 -08:00
Michael Bolin
43d39a046a merge commit for archive created by Sapling 2025-12-22 18:08:23 -08:00
Michael Bolin
fe5e0f5972 feat: honor /etc/codex/config.toml 2025-12-22 18:08:07 -08:00
Michael Bolin
e2ac6500ea Merge 4c9ed5d6a9 into sapling-pr-archive-bolinfest 2025-12-22 17:31:53 -08:00
Michael Bolin
4c9ed5d6a9 feat: honor /etc/codex/config.toml 2025-12-22 17:31:49 -08:00
Michael Bolin
041dc1cf66 merge commit for archive created by Sapling 2025-12-22 17:31:20 -08:00
Michael Bolin
b8f2a65804 feat: honor /etc/codex/config.toml 2025-12-22 17:31:02 -08:00
Michael Bolin
277babba79 feat: load ExecPolicyManager from ConfigLayerStack (#8453)
https://github.com/openai/codex/pull/8354 added support for in-repo
`.config/` files, so this PR updates the logic for loading `*.rules`
files to load `*.rules` files from all relevant layers. The main change
to the business logic is `load_exec_policy()` in
`codex-rs/core/src/exec_policy.rs`.

Note this adds a `config_folder()` method to `ConfigLayerSource` that
returns `Option<AbsolutePathBuf>` so that it is straightforward to
iterate over the sources and get the associated config folder, if any.
2025-12-22 17:24:17 -08:00
Michael Bolin
af09870a35 merge commit for archive created by Sapling 2025-12-22 16:47:39 -08:00
Michael Bolin
85497f7bd5 feat: load ExecPolicyManager from ConfigLayerStack 2025-12-22 16:47:35 -08:00
Michael Bolin
2b0c78da7e merge commit for archive created by Sapling 2025-12-22 16:45:03 -08:00
Michael Bolin
870cf22016 feat: load ExecPolicyManager from ConfigLayerStack 2025-12-22 16:44:58 -08:00
Michael Bolin
7dc7853255 merge commit for archive created by Sapling 2025-12-22 16:44:31 -08:00
Michael Bolin
d78ca23edc feat: load ExecPolicyManager from ConfigLayerStack 2025-12-22 16:44:24 -08:00
Michael Bolin
2029c40d40 Merge 896ec2f5ff into sapling-pr-archive-bolinfest 2025-12-22 16:42:04 -08:00
Michael Bolin
896ec2f5ff feat: load ExecPolicyManager from ConfigLayerStack 2025-12-22 16:41:15 -08:00
Michael Bolin
14dbd0610a chore: include User layer in ConfigLayerStack even if config.toml is empty (#8456)
This is necessary so that `$CODEX_HOME/skills` and `$CODEX_HOME/rules`
still get loaded even if `$CODEX_HOME/config.toml` does not exist. See
#8453.

For now, it is possible to omit this layer when creating a dummy
`ConfigLayerStack` in a test. We can revisit that later, if it turns out
to be the right thing to do.
2025-12-22 16:40:26 -08:00
Michael Bolin
b883bbd010 Merge 0161ecef18 into sapling-pr-archive-bolinfest 2025-12-22 16:21:45 -08:00
Michael Bolin
0161ecef18 chore: include User layer in ConfigLayerStack even if config.toml is empty 2025-12-22 16:21:04 -08:00
Josh McKinney
f6275a5142 chore(tui): include tracing targets in file logs (#8418)
with_target(true) is the default for tracing-subscriber, but we
previously disabled it for file output.

Keep it enabled so we can selectively enable specific targets/events at
runtime via RUST_LOG=..., and then grep by target/module in the log file
during troubleshooting.

before and after:

<img width="629" height="194" alt="image"
src="https://github.com/user-attachments/assets/33f7df3f-0c5d-4d3f-b7b7-80b03d4acd21"
/>
2025-12-22 15:59:30 -08:00
Josh McKinney
7d0c5c7bd5 fix(tui2): copy transcript selection outside viewport (#8449)
Copy now operates on the full logical selection range (anchor..head),
not just the visible viewport, so selections that include offscreen
lines copy the expected text.

Selection extraction is factored into `transcript_selection` to make the
logic easier to test and reason about. It reconstructs the wrapped
visual transcript, renders each wrapped line into a 1-row offscreen
Buffer, and reads the selected cells. This keeps clipboard text aligned
with what is rendered (gutter, indentation, wrapping).

Additional behavior:
- Skip continuation cells for wide glyphs (e.g. CJK) so copied text does
not include spurious spaces like "コ X".
- Avoid copying right-margin padding spaces.

Manual tested performed:
- "tell me a story" a few times
- scroll up, select text, scroll down, copy text
- confirm copied text is what you expect
2025-12-22 15:24:52 -08:00
sayan-oai
4673090f73 feat: open prompt in configured external editor (#7606)
Add `ctrl+g` shortcut to enable opening current prompt in configured
editor (`$VISUAL` or `$EDITOR`).


- Prompt is updated with editor's content upon editor close.
- Paste placeholders are automatically expanded when opening the
external editor, and are not "recompressed" on close
- They could be preserved in the editor, but it would be hard to prevent
the user from modifying the placeholder text directly, which would drop
the mapping to the `pending_paste` value
- Image placeholders stay as-is
- `ctrl+g` explanation added to shortcuts menu, snapshot tests updated



https://github.com/user-attachments/assets/4ee05c81-fa49-4e99-8b07-fc9eef0bbfce
2025-12-22 15:12:23 -08:00