Files
codex/agentydragon/tasks/16-confirm-on-ctrl-c.md
2025-06-24 16:30:35 -07:00

46 lines
2.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Task 16: Confirm on Ctrl+C to Exit
> *This task is specific to codex-rs.*
## Status
**General Status**: Not started
**Summary**: Not started; missing Implementation details (How it was implemented and How it works).
## Goal
Require two consecutive Ctrl+C keystrokes (within a short timeout) to exit the TUI, preventing accidental termination from a single SIGINT.
## Acceptance Criteria
- Add a `[tui] require_double_ctrl_c = true` config flag (default `false`) to enable doubleCtrl+C exit confirmation.
- When `require_double_ctrl_c` is enabled:
- First Ctrl+C within the TUI suspends exit and shows a status message like "Press Ctrl+C again to confirm exit".
- If a second Ctrl+C occurs within a configurable timeout (e.g. 2sec), the TUI exits normally.
- If no second Ctrl+C arrives before timeout, clear the confirmation state and resume normal operation.
- Ensure that child processes (shell tool calls) still receive SIGINT immediately and are not affected by the doubleCtrl+C logic.
- Prevent immediate exit on Ctrl+D (EOF); require the same doubleconfirmation workflow as for Ctrl+C when EOF is received.
- Provide unit or integration tests simulating SIGINT events to verify behavior.
## Implementation
**How it was implemented**
- Introduce `require_double_ctrl_c: bool` in `ConfigToml``Config` under the `tui` section, with default `false`.
- Extend the TUI event loop (e.g. in `tui/src/app.rs`) to handle SIGINT events:
1. If `require_double_ctrl_c` is disabled, behave as before (exit on first Ctrl+C).
2. If enabled and not already confirming, enter a `ConfirmExit` state, record timestamp, and display confirmation message.
3. If enabled and in `ConfirmExit` state, exit immediately on second Ctrl+C.
4. On each TUI tick, if in `ConfirmExit` and timeout elapsed, clear `ConfirmExit` state.
5. Intercept EOF (Ctrl+D) events in the input handler and apply the same `ConfirmExit` logic as for Ctrl+C when `require_double_ctrl_c` is enabled.
- Add rendering logic in the status bar (`tui/src/status_indicator_widget.rs` or similar) to show the confirmation prompt.
**How it works**
- On startup, the TUI reads `require_double_ctrl_c` from config.
- When SIGINT is captured by the event loop, doubleCtrl+C logic intercepts and requires confirmation.
- Child processes continue to get raw SIGINT from the OS because the TUI should delegate signals while awaiting child termination.
## Notes
- Make the doubleCtrl+C timeout duration configurable if desired (e.g. via `tui.double_ctrl_c_timeout_secs`).
- Ensure that existing tests for Ctrl+C behavior are updated or new tests added to cover the confirmation state.