Commit Graph

8634 Commits

Author SHA1 Message Date
Michael Bolin
0645126f30 Enforce ASCII in README.md 2025-04-22 00:15:11 -07:00
Michael Bolin
cdf7eaaeea merge commit for archive created by Sapling 2025-04-22 00:14:33 -07:00
Michael Bolin
3f1e43cdec Enforce ASCII in README.md 2025-04-22 00:14:28 -07:00
Michael Bolin
f3d0676046 merge commit for archive created by Sapling 2025-04-22 00:13:50 -07:00
Michael Bolin
0d56667bf9 Enforce ASCII in README.md 2025-04-22 00:13:45 -07:00
Michael Bolin
f187ad05a7 merge commit for archive created by Sapling 2025-04-22 00:09:35 -07:00
Michael Bolin
d1eba37951 Enforce ASCII in README.md 2025-04-22 00:09:29 -07:00
Michael Bolin
39fd035577 merge commit for archive created by Sapling 2025-04-22 00:04:07 -07:00
Michael Bolin
b5dc6314e1 Enforce ASCII in README.md 2025-04-22 00:04:02 -07:00
Michael Bolin
3fa2b0050f merge commit for archive created by Sapling 2025-04-21 23:55:39 -07:00
Michael Bolin
7077f16482 Enforce ASCII in README.md 2025-04-21 23:55:32 -07:00
Michael Bolin
b340e5e1a8 merge commit for archive created by Sapling 2025-04-21 23:34:11 -07:00
Michael Bolin
66d4d73e24 Enforce ASCII in README.md 2025-04-21 23:34:06 -07:00
Michael Bolin
ecff5acff6 merge commit for archive created by Sapling 2025-04-21 23:19:11 -07:00
Michael Bolin
835501ad65 Enforce ASCII in README.md 2025-04-21 23:19:07 -07:00
Michael Bolin
e1d577c641 Merge c616733e55 into sapling-pr-archive-bolinfest 2025-04-21 23:17:19 -07:00
Michael Bolin
c616733e55 Enforce ASCII in README.md 2025-04-21 23:17:11 -07:00
Michael Bolin
3eba86a553 include fractional portion of chunk that exceeds stdout/stderr limit (#497)
I saw cases where the first chunk of output from `ls -R` could be large
enough to exceed `MAX_OUTPUT_BYTES` or `MAX_OUTPUT_LINES`, in which case
the loop would exit early in `createTruncatingCollector()` such that
nothing was appended to the `chunks` array. As a result, the reported
`stdout` of `ls -R` would be empty.

I asked Codex to add logic to handle this edge case and write a unit
test. I used this as my test:

```
./codex-cli/dist/cli.js -q 'what is the output of `ls -R`'
```

now it appears to include a ton of stuff whereas before this change, I
saw:

```
{"type":"function_call_output","call_id":"call_a2QhVt7HRJYKjb3dIc8w1aBB","output":"{\"output\":\"\\n\\n[Output truncated: too many lines or bytes]\",\"metadata\":{\"exit_code\":0,\"duration_seconds\":0.5}}"}
```
2025-04-21 19:06:03 -07:00
Michael Bolin
f21d7c4157 merge commit for archive created by Sapling 2025-04-21 17:14:48 -07:00
Michael Bolin
8ff34daa48 include fractional portion of chunk that exceeds stdout/stderr limit 2025-04-21 17:13:43 -07:00
Michael Bolin
b03eef7f3b merge commit for archive created by Sapling 2025-04-21 17:12:23 -07:00
Michael Bolin
5fa24ca8ab include fractional portion of chunk that exceeds stdout/stderr limit 2025-04-21 17:12:18 -07:00
Michael Bolin
58a221e565 merge commit for archive created by Sapling 2025-04-21 17:09:11 -07:00
Michael Bolin
0f9dfe3b8a include fractional portion of chunk that exceeds stdout/stderr limit 2025-04-21 17:09:02 -07:00
Michael Bolin
a8a51c508d Merge d13a3708b3 into sapling-pr-archive-bolinfest 2025-04-21 16:58:51 -07:00
Michael Bolin
d13a3708b3 include fractional portion of chunk that exceeds stdout/stderr limit 2025-04-21 16:58:28 -07:00
Michael Bolin
32d0968bca Merge a1afcb6916 into sapling-pr-archive-bolinfest 2025-04-21 16:37:59 -07:00
Michael Bolin
a1afcb6916 add instructions for connecting to a visual debugger under Contributing 2025-04-21 16:37:23 -07:00
Fouad Matin
99ed27ad1b bump(version): 0.1.2504211509 (#493)
## `0.1.2504211509`

### 🚀 Features

- Support multiple providers via Responses-Completion transformation
(#247)
- Add user-defined safe commands configuration and approval logic #380
(#386)
- Allow switching approval modes when prompted to approve an
edit/command (#400)
- Add support for `/diff` command autocomplete in TerminalChatInput
(#431)
- Auto-open model selector if user selects deprecated model (#427)
- Read approvalMode from config file (#298)
- `/diff` command to view git diff (#426)
- Tab completions for file paths (#279)
- Add /command autocomplete (#317)
- Allow multi-line input (#438)

### 🐛 Bug Fixes

- `full-auto` support in quiet mode (#374)
- Enable shell option for child process execution (#391)
- Configure husky and lint-staged for pnpm monorepo (#384)
- Command pipe execution by improving shell detection (#437)
- Name of the file not matching the name of the component (#354)
- Allow proper exit from new Switch approval mode dialog (#453)
- Ensure /clear resets context and exclude system messages from
approximateTokenUsed count (#443)
- `/clear` now clears terminal screen and resets context left indicator
(#425)
- Correct fish completion function name in CLI script (#485)
- Auto-open model-selector when model is not found (#448)
- Remove unnecessary isLoggingEnabled() checks (#420)
- Improve test reliability for `raw-exec` (#434)
- Unintended tear down of agent loop (#483)
- Remove extraneous type casts (#462)
2025-04-21 15:13:33 -07:00
Fouad Matin
0e9d75657b update: readme (#491) 2025-04-21 15:06:03 -07:00
Daniel Nakov
e7a3eec942 docs: Add note about non-openai providers; add --provider cli flag to the help (#484) 2025-04-21 14:53:09 -07:00
Mitchell Kutchuk
09f0ae3899 fix: unintended tear down of agent loop (#483)
fixes #465
2025-04-21 15:01:09 -04:00
Benny Yen
f72cfd7ef3 fix: correct fish completion function name in CLI script (#485)
Missing an underscore.

fish function:
https://github.com/fish-shell/fish-shell/blob/master/share/functions/__fish_complete_path.fish

fixes https://github.com/openai/codex/issues/469
2025-04-21 14:45:49 -04:00
Michael Bolin
12ec57b330 do not auto-approve the find command if it contains options that write files or spawn commands (#482)
Updates `isSafeCommand()` so that an invocation of `find` is not
auto-approved if it contains any of: `-exec`, `-execdir`, `-ok`,
`-okdir`, `-delete`, `-fls`, `-fprint`, `-fprint0`, `-fprintf`.
2025-04-21 10:29:58 -07:00
Michael Bolin
b31c7eb313 merge commit for archive created by Sapling 2025-04-21 10:15:59 -07:00
Michael Bolin
cb1e638306 do not auto-approve the find command if it contains options that write files or spawn commands 2025-04-21 10:15:48 -07:00
Jon Church
7346f4388e chore: drop src from publish (#474)
Publish shouldn't need the source files published along with the
distributable bin.

`src` is being shipped to the registry rn:
https://www.npmjs.com/package/@openai/codex?activeTab=code

You can verify that the src is not needed by packing the project
manually after removing src from the files:

```sh
# from the codex-cli dir
rm -rf dist # just for hygiene
pnpm run build
pnpm pack

mkdir /tmp/codex-tar-test
mv openai-codex-0.1.2504181820.tgz /tmp/codex-tar-test
cd /tmp/codex-tar-test

pnpm init
pnpm add ./openai-codex-0.1.2504181820.tgz /tmp/codex-tar-test
pnpm exec codex --full-auto "run a bash -c command to echo hello world"
```

The cli is operational

> noticed this when checking the screenshot included in
https://github.com/openai/codex/pull/461
2025-04-21 09:56:00 -07:00
Michael Bolin
d36d295a1a revert #386 due to unsafe shell command parsing (#478)
Reverts https://github.com/openai/codex/pull/386 because:

* The parsing logic for shell commands was unsafe (`split(/\s+/)`
instead of something like `shell-quote`)
* We have a different plan for supporting auto-approved commands.
2025-04-21 12:52:11 -04:00
Michael Bolin
fd65e65d95 merge commit for archive created by Sapling 2025-04-21 09:48:13 -07:00
Michael Bolin
b54367d34b revert #386 due to unsafe shell command parsing 2025-04-21 09:47:58 -07:00
nerdielol
797eba4930 fix: /clear now clears terminal screen and resets context left indicator (#425)
## What does this PR do?
* Implements the full `/clear` command in **codex‑cli**:
  * Resets chat history **and** wipes the terminal screen.
  * Shows a single system message: `Context cleared`.
* Adds comprehensive unit tests for the new behaviour.

## Why is it needed?
* Fixes user‑reported bugs:  
  * **#395**  
  * **#405**

## How is it implemented?
* **Code** – Adds `process.stdout.write('\x1b[3J\x1b[H\x1b[2J')` in
`terminal.tsx`. Removed reference to `prev` in `
        setItems((prev) => [
          ...prev,
` in `terminal-chat-new-input.tsx` & `terminal-chat-input.tsx`.

## CI / QA
All commands pass locally:
```bash
pnpm test      # green
pnpm run lint  # green
pnpm run typecheck  # zero TS errors
```

## Results



https://github.com/user-attachments/assets/11dcf05c-e054-495a-8ecb-ac6ef21a9da4

---------

Co-authored-by: Thibault Sottiaux <tibo@openai.com>
2025-04-21 12:39:46 -04:00
Jon Church
5b19451770 chore(build): cleanup dist before build (#477)
Another one that I noticed.

The dist structure is very simple rn, so unlikely to run into orphaned
files as you're emitting a single built artifact which wil be
overwritten on build, but I always prefer to do clean builds as
"hygiene".

I had a dirty dist personally after local development and testing some
things, as an example.

Alternatives could be to create a `clean` script with cross platform
`rimraf dist`
2025-04-21 12:35:25 -04:00
Thibault Sottiaux
3c4f1fea9b chore: consolidate model utils and drive-by cleanups (#476)
Signed-off-by: Thibault Sottiaux <tibo@openai.com>
2025-04-21 12:33:57 -04:00
Thibault Sottiaux
dc276999a9 chore: improve storage/ implementation; use log(...) consistently (#473)
This PR tidies up primitives under storage/.

**Noop changes:**

* Promote logger implementation to top-level utility outside of agent/
* Use logger within storage primitives
* Cleanup doc strings and comments

**Functional changes:**

* Increase command history size to 10_000
* Remove unnecessary debounce implementation and ensure a session ID is
created only once per agent loop

---------

Signed-off-by: Thibault Sottiaux <tibo@openai.com>
2025-04-21 09:51:34 -04:00
Aaron Casanova
8f1ea7fa85 fix: remove extraneous type casts (#462) 2025-04-21 00:00:56 -07:00
Benny Yen
3e71c87708 refactor(updates): fetch version from registry instead of npm CLI to support multiple managers (#446)
## Background  
Addressing feedback from
https://github.com/openai/codex/pull/333#discussion_r2050893224, this PR
adds support for Bun alongside npm, pnpm while keeping the code simple.

## Summary  
The update‑check flow is refactored to use a direct registry lookup
(`fast-npm-meta` + `semver`) instead of shelling out to `npm outdated`,
and adds a lightweight installer‑detection mechanism that:

1. Checks if the invoked script lives under a known global‑bin directory
(npm, pnpm, or bun)
2. If not, falls back to local detection via `getUserAgent()` (the
`package‑manager‑detector` library)

## What’s Changed  
- **Registry‑based version check**  
- Replace `execFile("npm", ["outdated"])` with `getLatestVersion()` and
`semver.gt()`
- **Multi‑manager support**  
- New `renderUpdateCommand` handles update commands for `npm`, `pnpm`,
and `bun`.
  - Detect global installer first via `detectInstallerByPath()`  
  - Fallback to local detection via `getUserAgent()`  
- **Module cleanup**  
- Extract `detectInstallerByPath` into
`utils/package-manager-detector.ts`
- Remove legacy `checkOutdated`, `getNPMCommandPath`, and child‑process
JSON parsing
- **Flow improvements in `checkForUpdates`**  
  1. Short‑circuit by `UPDATE_CHECK_FREQUENCY`  
  3. Fetch & compare versions  
  4. Persist new timestamp immediately  
  5. Render & display styled box only when an update exists  
- **Maintain simplicity**
- All multi‑manager logic lives in one small helper and a concise lookup
rather than a complex adapter hierarchy
- Core `checkForUpdates` remains a single, easy‑to‑follow async function
- **Dependencies added**  
- `fast-npm-meta`, `semver`, `package-manager-detector`, `@types/semver`

## Considerations
If we decide to drop the interactive update‑message (`npm install -g
@openai/codex`) rendering altogether, we could remove most of the
installer‑detection code and dependencies, which would simplify the
codebase further but result in a less friendly UX.

## Preview

* npm

![refactor-update-check-flow-npm](https://github.com/user-attachments/assets/57320114-3fb6-4985-8780-3388a1d1ec85)

* bun

![refactor-update-check-flow-bun](https://github.com/user-attachments/assets/d93bf0ae-a687-412a-ab92-581b4f967307)

## Simple Flow Chart

```mermaid
flowchart TD
  A(Start) --> B[Read state]
  B --> C{Recent check?}
  C -- Yes --> Z[End]
  C -- No --> D[Fetch latest version]
  D --> E[Save check time]
  E --> F{Version data OK?}
  F -- No --> Z
  F -- Yes --> G{Update available?}
  G -- No --> Z
  G -- Yes --> H{Global install?}
  H -- Yes --> I[Select global manager]
  H -- No --> K{Local install?}
  K -- No --> Z
  K -- Yes --> L[Select local manager]
  I & L --> M[Render update message]
  M --> N[Format with boxen]
  N --> O[Print update]
  O --> Z
```
2025-04-21 00:00:20 -07:00
Abdelrhman Kamal Mahmoud Ali Slim
655564f25d fix: auto-open model-selector when model is not found (#448)
Change the check from checking if the model has been deprecated to check
if the model_not_found


https://github.com/user-attachments/assets/ad0f7daf-5eb4-4e4b-89e5-04240044c64f
2025-04-20 23:56:20 -07:00
Aaron Casanova
ee3a9bc14b Remove README.md and bin from package.json#files field (#461)
This PR removes always included files and folders from the
[`package.json#files`
field](https://docs.npmjs.com/cli/v11/configuring-npm/package-json#files):

> Certain files are always included, regardless of settings:
> - package.json
> - README
> - LICENSE / LICENCE
> - The file in the "main" field
> - The file(s) in the "bin" field

Validated by running `pnpm i && cd codex-cli && pnpm build && pnpm
release:readme && pnpm pack` and confirming both the `README.md` file
and `bin` directory are still included in the tarball:

<img width="227" alt="image"
src="https://github.com/user-attachments/assets/ecd90a07-73c7-4940-8c83-cb1d51dfcf96"
/>
2025-04-20 23:54:27 -07:00
Aiden Cline
ee7ce5b601 feat: tab completions for file paths (#279)
Made a PR as was requested in the #113
2025-04-20 22:34:27 -07:00
Jordan Docherty
f6b12aa994 refactor(history-overlay): split into modular functions & add tests (fixes #402) (#403)
## What
This PR targets #402 and refactors the `history-overlay.tsx`component to
reduce cognitive complexity by splitting the `buildLists` function into
smaller, focused helper functions. It also adds comprehensive test
coverage to ensure the functionality remains intact.

## Why
The original `buildLists` function had high cognitive complexity due to
multiple nested conditionals, complex string manipulation, and mixed
responsibilities. This refactor makes the code more maintainable and
easier to understand while preserving all existing functionality.

## How
- Split `buildLists` into focused helper functions
- Added comprehensive test coverage for all functionality
- Maintained existing behavior and keyboard interactions
- Improved code organization and readability

## Testing
All tests pass, including:
- Command mode functionality
- File mode functionality
- Keyboard interactions
- Error handling
2025-04-20 22:27:06 -07:00