Commit Graph

126 Commits

  • feat: add command history persistence (#152)
    This PR adds a command history persistence feature to Codex CLI that:
    
    1. **Stores command history**: Commands are saved to
    `~/.codex/history.json` and persist between CLI sessions.
    2. **Navigates history**: Users can use the up/down arrow keys to
    navigate through command history, similar to a traditional shell.
    3. **Filters sensitive data**: Built-in regex patterns prevent commands
    containing API keys, passwords, or tokens from being saved.
    4. **Configurable**: Added configuration options for history size,
    enabling/disabling history, and custom regex patterns for sensitive
    content.
    5. **New command**: Added `/clearhistory` command to clear command
    history.
    
      ## Code Changes
    
    - Added `src/utils/storage/command-history.ts` with functions for
    history management
      - Extended config system to support history settings
      - Updated terminal input components to use persistent history
      - Added help text for the new `/clearhistory` command
      - Added CLAUDE.md file for guidance when working with the codebase
    
      ## Testing
    
      - All tests are passing
    - Core functionality works with both input components (standard and
    multiline)
    - History navigation behaves correctly at line boundaries with the
    multiline editor
  • fix: improve Windows compatibility for CLI commands and sandbox (#261)
    ## Fix Windows compatibility issues (#248)
    
    This PR addresses the Windows compatibility issues reported in #248:
    
    1. **Fix sandbox initialization failure on Windows**
    - Modified `getSandbox()` to return `SandboxType.NONE` on Windows
    instead of throwing an error
    - Added a warning log message to inform the user that sandbox is not
    available on Windows
    
    2. **Fix Unix commands not working on Windows**
    - Created a new module
    [platform-commands.ts](cci:7://file:///c:/Users/HP%20840%20G6/workflow/codex/codex-cli/src/utils/agent/platform-commands.ts:0:0-0:0)
    that automatically adapts Unix commands to their Windows equivalents
       - Implemented a mapping table for common commands and their options
       - Integrated this functionality into the command execution process
    
    ### Testing
    Tested on Windows 10 with the following commands:
    - `ls -R .` (now automatically translates to `dir /s .`)
    - Other Unix commands like `grep`, `cat`, etc.
    
    The CLI no longer crashes when running these commands on Windows.
    
    I have read the CLA Document and I hereby sign the CLA
    
    ---------
    
    Signed-off-by: Alpha Diop <alphakhoss@gmail.com>
  • docs: clarify sandboxing situation on Linux (#103)
    There doesn't appear to actually be any sandboxing on Linux. Correct the
    README.
    
    Signed-off-by: Christopher Cooper <christopher@cg505.com>
  • bugfix: additional error handling logic for model errors that occur in stream (#203)
    **What is  added?**
    
    Additional error handling functionality is added before the errors are
    thrown to be handled by upstream handlers. The changes improves the user
    experience and make the error handling smoother (and more informative).
    
    **Why is it added?**
    Before this addition, when a user tried to use a model they needed
    previous setup for, the program crashed. This is not necessary here, and
    informative message is sufficient and enhances user experience. This
    adheres to the specifications stated in the code file as well by not
    masking potential logical error detection. Following is before and
    after:
    
    
    ![first](https://github.com/user-attachments/assets/0ce7c57d-8159-4cf7-8a53-3062cfd04dc8)
    
    ![second](https://github.com/user-attachments/assets/a9f24410-d76d-43d4-a0e2-ec513026843d)
    
    Moreover, AFAIK no logic was present to handle this or a similar issue
    in upstream handlers.
    
    **How is it scoped? Why won't this mask other errors?**
    The new brach triggers *only* for `invalid_request_error` events whose
    `code` is model related (`model_not_found`)
    
    This also doesn't prevent the detection (for the case of masking logical
    errors) of wrong model names, as they would have been caught earlier on.
    
    The code passes test, lint and type checks. I believe relevant
    documentation is added, but I would be more than happy to do further
    fixes in the code if necessary.
  • fix: check workdir before spawn (#221)
    The workdir used to spawn a agent command is provide by the agent tool,
    we need to ensure its existence and fallback to process.cwd when not.
    
    fix #212
  • fix: typos in prompts and comments (#195)
    Used Codex and https://github.com/crate-ci/typos to identify + fix typos
    
    Signed-off-by: Jatan Loya <jatanloya@gmail.com>
  • fix: allow continuing after interrupting assistant (#178)
    ## Description
    This PR fixes the issue where the CLI can't continue after interrupting
    the assistant with ESC ESC (Fixes #114). The problem was caused by
    duplicate code in the `cancel()` method and improper state reset after
    cancellation.
    
    ## Changes
    - Fixed duplicate code in the `cancel()` method of the `AgentLoop` class
    - Added proper reset of the `currentStream` property in the `cancel()`
    method
    - Created a new `AbortController` after aborting the current one to
    ensure future tool calls work
    - Added a system message to indicate the interruption to the user
    - Added a comprehensive test to verify the fix
    
    ## Benefits
    - Users can now continue using the CLI after interrupting the assistant
    - Improved user experience by providing feedback when interruption
    occurs
    - Better state management in the agent loop
    
    ## Testing
    - Added a dedicated test that verifies the agent can process new input
    after cancellation
    - Manually tested the fix by interrupting the assistant and confirming
    that new input is processed correctly
    
    ---------
    
    Signed-off-by: crazywolf132 <crazywolf132@gmail.com>
  • fix: add missing "as" in prompt prefix in agent loop (#186)
    # Description
    
    This PR fixes a typo where the prompt prefix for the agent loop was
    missing the word "as"
    
    # Changes
    
    * Added missing word "as" within the agent loop prompt prefix
    
    # Benefits
    
    * The prompt is now grammatically correct and clearer
    
    # Testing
    
    * Manually tested the fix
  • (feat) expontential back-off when encountering rate limit errors (#153)
    ...and try to parse the suggested time from the error message while we
    don't yet have this in a structured way
    
    ---------
    
    Signed-off-by: Thibault Sottiaux <tibo@openai.com>
  • refactor: improve performance of renderFilesToXml using Array.join (#127)
    ### Summary
    
    Refactored the `renderFilesToXml` function to improve performance and
    readability by replacing iterative string concatenation with
    `Array.map().join()`.
    
    ### Changes
    
    - Replaced the `for...of` loop with `files.map(...).join('')`
    - Reduced number of string mutation operations
    - Preserved the existing XML structure and CDATA safety
    
    ### Why
    
    Using `join` avoids repeated string concatenation in loops, which can
    improve performance, especially when rendering a large number of files.
    It also results in more concise and idiomatic code.
    
    
    I have read the CLA Document and I hereby sign the CLA
    ---
    
    Let me know if this needs any adjustments!
    
    Signed-off-by: yonatanlavy <yehonatanmind@gmail.com>
  • Removes computeAutoApproval() and tightens up canAutoApprove() as the source of truth (#126)
    Previously, `parseToolCall()` was using `computeAutoApproval()`, which
    was a somewhat parallel implementation of `canAutoApprove()` in order to
    get `SafeCommandReason` metadata for presenting information to the user.
    The only function that was using `SafeCommandReason` was
    `useMessageGrouping()`, but it turns out that function was unused, so
    this PR removes `computeAutoApproval()` and all code related to it.
    
    More importantly, I believe this fixes
    https://github.com/openai/codex/issues/87 because
    `computeAutoApproval()` was calling `parse()` from `shell-quote` without
    wrapping it in a try-catch. This PR updates `canAutoApprove()` to use a
    tighter try-catch block that is specific to `parse()` and returns an
    appropriate `SafetyAssessment` in the event of an error, based on the
    `ApprovalPolicy`.
    
    Signed-off-by: Michael Bolin <mbolin@openai.com>
  • (feat) basic retries when hitting rate limit errors (#105)
    * w
    
    Signed-off-by: Thibault Sottiaux <tibo@openai.com>
    
    * w
    
    Signed-off-by: Thibault Sottiaux <tibo@openai.com>
    
    * w
    
    Signed-off-by: Thibault Sottiaux <tibo@openai.com>
    
    * w
    
    Signed-off-by: Thibault Sottiaux <tibo@openai.com>
    
    * w
    
    Signed-off-by: Thibault Sottiaux <tibo@openai.com>
    
    ---------
    
    Signed-off-by: Thibault Sottiaux <tibo@openai.com>
  • add: release script (#96)
    * add: release script
    
    * add: src to npm module
    
    * fix: readme
    
    Signed-off-by: Fouad Matin <fouad@openai.com>
    
    ---------
    
    Signed-off-by: Fouad Matin <fouad@openai.com>
  • fix: prompt typo (#81)
    * fix: developer typo
    
    * fix: typo
  • (feat) gracefully handle invalid commands (#79)
    * handle invalid commands
    * better test
    * format
  • remove rg requirement (#50)
    Signed-off-by: Thibault Sottiaux <tibo@openai.com>
  • (fix) o3 instead of o3-mini (#37)
    * o3 instead of o3-mini
  • Initial commit
    Signed-off-by: Ilan Bigio <ilan@openai.com>
  • Initial commit
    Signed-off-by: Ilan Bigio <ilan@openai.com>