Commit Graph

1797 Commits

Author SHA1 Message Date
Michael Bolin
ebf34f7255 merge commit for archive created by Sapling 2025-04-22 09:41:31 -07:00
Michael Bolin
debc389f94 add instructions for connecting to a visual debugger under Contributing 2025-04-22 09:40:22 -07:00
Michael Bolin
9b06fb48a7 add check to ensure ToC in README.md matches headings in the file (#541)
This introduces a Python script (written by Codex!) to verify that the
table of contents in the root `README.md` matches the headings. Like
`scripts/asciicheck.py` in https://github.com/openai/codex/pull/513, it
reports differences by default (and exits non-zero if there are any) and
also has a `--fix` option to synchronize the ToC with the headings.

This will be enforced by CI and the changes to `README.md` in this PR
were generated by the script, so you can see that our ToC was missing
some entries prior to this PR.
2025-04-22 09:38:12 -07:00
narenoai
dd330646d2 feat: add CLI –version flag (#492)
Adds a new flag to cli `--version` that prints the current version and
exits

---------

Co-authored-by: Thibault Sottiaux <tibo@openai.com>
2025-04-22 12:28:21 -04:00
Michael Bolin
fb9908ddc3 merge commit for archive created by Sapling 2025-04-22 09:25:06 -07:00
Michael Bolin
df973e7007 add check to ensure ToC in README.md matches headings in the file 2025-04-22 09:24:32 -07:00
Scott Leibrand
ee6e1765fa agent-loop: minimal mid-stream #429 retry loop using existing back-off (#506)
As requested by @tibo-openai at
https://github.com/openai/codex/pull/357#issuecomment-2816554203, this
attempts a more minimal implementation of #357 that preserves as much as
possible of the existing code's exponential backoff logic.

Adds a small retry wrapper around the streaming for‑await loop so that
HTTP 429s which occur *after* the stream has started no longer crash the
CLI.

Highlights
• Re‑uses existing RATE_LIMIT_RETRY_WAIT_MS constant and 5‑attempt
limit.
• Exponential back‑off identical to initial request handling. 

This comment is probably more useful here in the PR:
// The OpenAI SDK may raise a 429 (rate‑limit) *after* the stream has
// started. Prior logic already retries the initial `responses.create`
        // call, but we need to add equivalent resilience for mid‑stream
        // failures.  We keep the implementation minimal by wrapping the
// existing `for‑await` loop in a small retry‑for‑loop that re‑creates
        // the stream with exponential back‑off.
2025-04-22 11:02:10 -04:00
Gabriel Bianconi
98a22273d9 fix: inconsistent usage of base URL and API key (#507)
A recent commit introduced the ability to use third-party model
providers. (Really appreciate it!)

However, the usage is inconsistent: some pieces of code use the custom
providers, whereas others still have the old behavior. Additionally,
`OPENAI_BASE_URL` is now being disregarded when it shouldn't be.

This PR normalizes the usage to `getApiKey` and `getBaseUrl`, and
enables the use of `OPENAI_BASE_URL` if present.

---------

Co-authored-by: Gabriel Bianconi <GabrielBianconi@users.noreply.github.com>
2025-04-22 10:51:26 -04:00
Thomas
d78f77edb7 fix(agent-loop): update required properties to include workdir and ti… (#530)
Without this I get an issue running codex it in a docker container. I
receive:

```
{
    "answer": "{\"role\":\"user\",\"content\":[{\"type\":\"input_text\",\"text\":\"\\\"Say hello world\\\"\"}],\"type\":\"message\"}\n{\"id\":\"error-1745325184914\",\"type\":\"message\",\"role\":\"system\",\"content\":[{\"type\":\"input_text\",\"text\":\"⚠️  OpenAI rejected the request (request ID: req_f9027b59ebbce00061e9cd2dbb2d529a). Error details: Status: 400, Code: invalid_function_parameters, Type: invalid_request_error, Message: 400 Invalid schema for function 'shell': In context=(), 'required' is required to be supplied and to be an array including every key in properties. Missing 'workdir'.. Please verify your settings and try again.\"}]}\n"
}
```

This fix makes it work.
2025-04-22 10:32:36 -04:00
Michael Bolin
c00ae2dcc1 Enforce ASCII in README.md (#513)
This all started because I was going to write a script to autogenerate
the Table of Contents in the root `README.md`, but I noticed that the
`href` for the "Why Codex?" heading was `#whycodex` instead of
`#why-codex`. This piqued my curiosity and it turned out that the space
in "Why Codex?" was not an ASCII space but **U+00A0**, a non-breaking
space, and so GitHub ignored it when generating the `href` for the
heading.

This also meant that when I did a text search for `why codex` in the
`README.md` in VS Code, the "Why Codex" heading did not match because of
the presence of **U+00A0**.

In short, these types of Unicode characters seem like a hazard, so I
decided to introduce this script to flag them, and if desired, to
replace them with "good enough" ASCII equivalents. For now, this only
applies to the root `README.md` file, but I think we should ultimately
apply this across our source code, as well, as we seem to have quite a
lot of non-ASCII Unicode and it's probably going to cause `rg` to miss
things.

Contributions of this PR:

* `./scripts/asciicheck.py`, which takes a list of filepaths and returns
non-zero if any of them contain non-ASCII characters. (Currently, there
is one exception for  aka **U+2728**, though I would like to default to
an empty allowlist and then require all exceptions to be specified as
flags.)
* A `--fix` option that will attempt to rewrite files with violations
using a equivalents from a hardcoded substitution list.
* An update to `ci.yml` to verify `./scripts/asciicheck.py README.md`
succeeds.
* A cleanup of `README.md` using the `--fix` option as well as some
editorial decisions on my part.
* I tried to update the `href`s in the Table of Contents to reflect the
changes in the heading titles. (TIL that if a heading has a character
like `&` surrounded by spaces, it becomes `--` in the generated `href`.)
2025-04-22 10:07:40 -04:00
Fouad Matin
2cb8355968 bump(version): 0.1.2504220136 (#518)
## `0.1.2504220136`

### 🚀 Features

- Add support for ZDR orgs (#481)
- Include fractional portion of chunk that exceeds stdout/stderr limit
(#497)
2025-04-22 01:45:30 -07:00
Fouad Matin
9f5ccbb618 feat: add support for ZDR orgs (#481)
- Add `store: boolean` to `AgentLoop` to enable client-side storage of
response items
- Add `--disable-response-storage` arg + `disableResponseStorage` config
2025-04-22 01:30:16 -07:00
Michael Bolin
0ed78a13c3 merge commit for archive created by Sapling 2025-04-22 00:15:15 -07:00
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