- Make `order_key_from_order_meta` take `&OrderMeta` to remove panicking unwraps.
- Replace `ensure_stream_order_key_strict` with `try_stream_order_key`; synthesize keys via `next_internal_key()` when id/key is missing.
- Add guarded fallbacks across Answer/Reasoning/PlanUpdate/Exec/MCP paths, logging warnings rather than panicking to preserve strict per‑turn ordering.
- Interrupt manager tolerates missing metadata for queued Exec begin/end.
- Update exec_tools call sites for new signature.
- Refresh CHANGELOG with 0.2.56 summaries and ordering notes.
Users saw blank bottom when final/user messages inserted: our targeted spacer compensation used full gap (content_y - scroll_pos) which could push the draw cursor past the viewport. Clamp strictly to a single spacer row when at bottom and rendering the last item. No ordering changes.
- Replace legacy turn-window logic with stable per insert
- Require non-empty stream IDs; seed order keys per (kind,id)
- Pair out-of-order ExecEnd/Begin and drop canceled execs
- Surface init/submit errors as BackgroundEvent diagnostics
- Improve status panes, borders, and preview truncation by display width
- Update release workflow; docs: AGENTS.md, prompt_coder.md; add MERGE.md and postmortem
Build: ./build-fast.sh passes locally with no warnings.
- Add flag independent of
- Arm exactly one timer for AppEvent::ScheduleFrameIn while allowing immediate redraw debounce
- Prevents welcome logo animation from stalling until input
Also: revert intro color fade profile to original (no visual change request).
- Remove per-frame debug log in intro renderer
- Delay internal fade to last ~2% and force final frame vivid
- Defer any fade-out to AnimatedWelcomeCell alpha blending
Keeps animation smooth and visually complete on all terminals.
- Update all AuthManager::shared and CodexAuth::from_codex_home call sites with originator
- Use rollout::policy helper to filter persisted items
- Fix shell tool description formatting and UA helper reference
- Remove unused import in chatgpt_client
Build: ./build-fast.sh clean with zero warnings
- Resolve upstream delete of user_agent.rs; use default_client::get_codex_user_agent
- Switch client construction to default_client with originator header
- Update AuthManager::shared and CodexAuth::from_codex_home call sites to pass originator
- Fix openai_tools shell tool description formatting and include writable roots
- Deduplicate/repair config_types derives; import Serialize/Display early
- Use rollout::policy::is_persisted_response_item and remove dead import
- Keep our TUI architecture intact; no functional UI changes
Build: ./build-fast.sh passes with zero warnings
## Summary
It appears that #2108 hit a merge conflict with #2355 - I failed to
notice the path difference when re-reviewing the former. This PR
rectifies that, and consolidates it into the protocol package, in line
with our philosophy of specifying types in one place.
## Testing
- [x] Adds config test for model_verbosity
**What?**
Auto-approve patches when `SandboxPolicy::DangerFullAccess` is enabled
on platforms without sandbox support.
Changes in `codex-rs/core/src/safety.rs`: return
`SafetyCheck::AutoApprove { sandbox_type: SandboxType::None }` when no
sandbox is available and DangerFullAccess is set.
**Why?**
On platforms lacking sandbox support, requiring explicit user approval
despite `DangerFullAccess` being explicitly enabled adds friction
without additional safety. This aligns behavior with the stated policy
intent.
**How?**
Extend `assess_patch_safety` match:
* If `get_platform_sandbox()` returns `Some`, keep `AutoApprove {
sandbox_type }`.
* If `None` **and** `SandboxPolicy::DangerFullAccess`, return
`AutoApprove { SandboxType::None }`.
* Otherwise, fall back to `AskUser`.
**Tests**
* Local checks:
```bash
cargo test && cargo clippy --tests && cargo fmt -- --config
imports_granularity=Item
```
(Additionally: `just fmt`, `just fix -p codex-core`, `cargo check -p
codex-core`.)
**Docs**
No user-facing CLI changes. No README/help updates needed.
**Risk/Impact**
Reduces prompts on non-sandboxed platforms when DangerFullAccess is
explicitly chosen; consistent with policy semantics.
---------
Co-authored-by: Michael Bolin <[email protected]>
# Improve @ file search: include specific hidden dirs
This should close#2980
## What
- Extend `@` fuzzy file search to include select top-level hidden
directories:
`.github`, `.gitlab`, `.circleci`, `.devcontainer`, `.azuredevops`,
`.vscode`, `.cursor`.
- Keep all other hidden directories excluded to avoid noise and heavy
traversals.
## Why
- Common project config lives under these dot-dirs (CI, editor,
devcontainer); users expect `@.github/...` and similar paths to resolve.
- Prior behavior hid all dot-dirs, making these files undiscoverable.
## How
- In `codex-file-search` walker:
- Enable hidden entries via `WalkBuilder.hidden(false)`.
- Add `filter_entry` to only allow those specific root dot-directories;
other hidden paths remain filtered out.
- Preserve `.gitignore` semantics and existing exclude handling.
## Local checks
- Ran formatting: `just fmt`
- Ran lint (scoped): `just fix -p codex-file-search`
- Ran tests:
- `cargo test -p codex-file-search`
- `cargo test -p codex-tui`
## Readiness
- Branch is up-to-date locally; tests pass; lint/format applied.
- No merge conflicts expected.
- Marking Ready for review.
---------
Signed-off-by: lionelchg <[email protected]>
Correct the `shell` tool description for sandboxed runs and add targeted
tests.
- Fix the WorkspaceWrite description to clearly state that writes
outside the writable roots require escalated permissions; reads are not
restricted. The previous wording/formatting could be read as restricting
reads outside the workspace.
- Render the writable roots list on its own lines under a newline after
"writable roots:" for clarity.
- Show the "Commands that require network access" note only in
WorkspaceWrite when network is disabled.
- Add focused tests that call `create_shell_tool_for_sandbox` directly
and assert the exact description text for WorkspaceWrite, ReadOnly, and
DangerFullAccess.
- Update AGENTS.md to note that `just fmt` can be run automatically
without asking.
- Add ToolCallCtx { sub_id, call_id, output_index, seq_hint } with helper to build OrderMeta
- Add Session::send_ordered_from_ctx and migrate all tool handlers to ctx signature
- Replace execute_custom_tool signature to take &ToolCallCtx, auto-emit begin/end with OrderMeta
- Update plan/update_plan and MCP tool calls to use ctx
- Simplifies plumbing and prevents missing ordering fields across handlers
Build: ./build-fast.sh passes with zero warnings.
- Add Session::send_ordered_event helper to stamp OrderMeta and send
- Emit OrderMeta for CustomToolCallBegin/End (all browser_*, agent_*, web_fetch)
- Thread seq_hint+output_index through function-call handlers
- MCP tool calls (Begin/End) now sent with OrderMeta
- Plan tool: emit PlanUpdate via ordered event to avoid sinking to bottom
Ensures multiple tool calls (e.g., repeated web_fetch) and subsequent
assistant output render in correct order in the TUI.
This maps Release-only key events to Press when keyboard enhancement flags are unsupported, fixing unresponsive input and Ctrl+C on some Windows terminals.
Closes#18. Closes#14.