Repository navigation
Make command help complete and consistent - #384
Conversation
Castiron custom codeEvaluated main: ✅ No new custom-code files detected. 2 mixed files remain; 0 existing customizations changed. Compared 2 existing customizations unchanged
A changed generated baseline means this report cannot reliably identify which handwritten lines changed. Inspect the custom-code diffDownload the exact patch produced by this run (requires repository access): gh run download 37814988099 --repo openai/openai-cli \
--name castiron-custom-code-37814988099-1 --dir /tmp/castiron-custom-code-37814988099-1
git apply --stat /tmp/castiron-custom-code-37814988099-1/custom-code.patch
cat /tmp/castiron-custom-code-37814988099-1/custom-code.patchOr reproduce it from an SDK checkout containing the vendored reporter: git fetch --no-tags origin babc0e001e2def850d66303c08330ee704e6886c 1f6c0a8bb87eff90526b39b27152aab411ac28ad
python3 scripts/castiron/custom_code_report.py report \
--base babc0e001e2def850d66303c08330ee704e6886c \
--head 1f6c0a8bb87eff90526b39b27152aab411ac28ad --fetch --require-head-hash --public \
--out /tmp/castiron-custom-code-1f6c0a8bb87e
cat /tmp/castiron-custom-code-1f6c0a8bb87e/custom-code.patchThis is the current full custom patch for mixed files, not an attribution of only the handwritten lines changed by this PR. |
|
@codex review Please review commit |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. Chef's kiss. Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
markstuart-oai
left a comment
There was a problem hiding this comment.
Reviewed 1f6c0a8bb87eff90526b39b27152aab411ac28ad. No actionable findings.
I checked help routing, legacy --all, flag and positional-input descriptions, terminal text, completion behavior, and parser-error guidance. The changes keep request handling separate from help presentation.
Source-only review; I did not run repository tests or builds. Hosted tests, build, lint, and help checks on macOS, Ubuntu, and Windows passed for this head.
Help could discard option values such as `--project --help`. Bash completion could duplicate `--file=` in quoted paths. This preserves the intended help topic and completes the correct file argument. ### What changes - Keep literal help switches and delimiters when they are global flag values. - Preserve quoted and escaped file assignments during Bash completion. - Add regression cases that fail against the previous behavior. - Select both regressions through the existing native OS CI tests. ### Commands No new commands or flags. ```sh openai help --project --help models list # Keep --help as the project value. openai transcribe --file='assets/lo' # Press Tab to complete the filename. ``` ### Code The fixes stay in `internal/clihelp` and the existing Bash completion script. Public process tests check help routing. Native Readline tests check the accepted arguments. The native Bash check reuses the existing PTY helper and the CLI built by the shell test. The demo recorder reuses the shared capture lifecycle. ### Tested Focused help, completion, routing, global flag, tokenizer, Codex, and admin setup checks passed on macOS arm64. The Go 1.27.0 runs had no failures or skips. Focused Go vet and Bash syntax checks passed. The Go 1.26.9 binary passed 64 independent Bash/zsh help probes and ten native Bash 3.2 completion cases. Four completion cases failed on the baseline. Seven admin setup PTY cases also passed. Independent review found no remaining defects in this change. The existing CI filter now selects the literal-help regression and the Unix Bash Readline check. Required Bash jobs fail if Python is missing or any of the five cases remains unexecuted. The focused follow-up passed locally with Go 1.26.9 and Bash 3.2.57. The old binary fails the intended argument assertion. Fresh CI execution remains pending. Native Windows, Linux, Fish, Bash 5, WSL, SSH/tmux, and graphical terminal coverage remain incomplete. This PR does not claim complete platform coverage. Fresh native CI results remain pending. Six source-preparation tests and eleven classifier tests passed after merging main `541cc03`. The PR diff and production blobs remain unchanged. Fresh CodeQL source preparation passed for head `79d1810` and base `541cc03`. ### Demo macOS arm64, Bash 3.2 PTY replay, comparing main `0ca3ac7` with `205292b`. The completion backend runs against a synthetic filename. The recorder captures arguments without sending a transcription request. Help shows seven lines; the recorder retains complete output and exit status. This replay does not establish graphical terminal behavior. The follow-up changes tests only, so the recorded runtime remains unchanged. [View image: comparison.gif](https://flow.apps.openai.org/api/v1/gh/attachments/openai/openai-cli/440/a30b50b9462b4599824d416a4e531517.gif) Before: [View image: before.png](https://flow.apps.openai.org/api/v1/gh/attachments/openai/openai-cli/440/ff304785ad02482daf6de8f2cfa5db51.png) After: [View image: after.png](https://flow.apps.openai.org/api/v1/gh/attachments/openai/openai-cli/440/1f74fde52a9548a397a38dd0e461e2ae.png) These attachment links use Flow sign-in. Inline GitHub media remains unavailable. [Recording recipe](https://github.com/openai/openai-cli/blob/205292b8e6569145de021a110d53092b1e5daf86/scripts/demos/record-command-compatibility.sh) <!-- compatibility-parent: openai#246 --> <!-- compatibility-parent: openai#299 --> <!-- compatibility-parent: openai#315 --> <!-- compatibility-parent: openai#316 --> <!-- compatibility-parent: openai#317 --> <!-- compatibility-parent: openai#347 --> <!-- compatibility-parent: openai#348 --> <!-- compatibility-parent: openai#349 --> <!-- compatibility-parent: openai#379 --> <!-- compatibility-parent: openai#382 --> <!-- compatibility-parent: openai#384 --> <!-- compatibility-parent: openai#386 --> <!-- compatibility-parent: openai#387 --> <!-- compatibility-parent: openai#399 --> <!-- compatibility-parent: openai#413 --> <!-- codex-thread: 01a131fd-7e05-7622-8102-817940a4b4ee -->
The help matrix lacks explicit jobs for macOS amd64, Linux arm64, and Windows arm64. This adds those jobs and checks the architecture before tests start. ### What changes - Add the standard `macos-15-intel`, `ubuntu-24.04-arm`, and `windows-11-arm` runners. - Preserve the three existing `Help on ...` status names. - Check the runner architecture and both Go host and target platforms before testing. - Keep the existing test selections and required shells for each operating system. ### Commands No CLI commands, flags, defaults, or output behavior change. Each runner uses the existing commands: ```sh go test ./internal/clihelp ./internal/requestflag -count=1 -v go test ./cmd/openai -run '^(TestMainHelp|TestMainDispatch|TestMainNativeShell)' -count=1 -v ``` macOS requires Bash and zsh. Linux requires Bash. Windows requires Command Prompt, Windows PowerShell, and PowerShell 7. ### Code Only `.github/workflows/help-compatibility.yml` changes. It adds matrix entries and verifies runner, Go host, and Go target identities. Prepared-source handling, action pins, permissions, SDK linking, and test selectors remain unchanged. Runtime code and generated commands stay unchanged. ### Tested Before committing, YAML parsing, workflow comparisons, Bash syntax, and 13 simulated architecture cases passed on macOS. Commit `3d4d9ac` contains the same workflow bytes. The existing source-boundary test also passed. These checks ran no Go product tests. CI passed on `3d4d9ac`, including all six native compatibility jobs. The new jobs ran Go 1.26.9 on macOS amd64, Linux arm64, and Windows arm64. Required shell checks passed. Optional Linux ARM64 zsh and three Windows ARM64 symlink/POSIX cases skipped. Linux `386`/`arm` and Windows `386` remain unverified. These CI checks do not establish graphical-terminal appearance. ### Demo This workflow change has no visible CLI change, so no graphical demo is needed. <!-- compatibility-parent: openai#246 --> <!-- compatibility-parent: openai#265 --> <!-- compatibility-parent: openai#266 --> <!-- compatibility-parent: openai#279 --> <!-- compatibility-parent: openai#291 --> <!-- compatibility-parent: openai#297 --> <!-- compatibility-parent: openai#315 --> <!-- compatibility-parent: openai#316 --> <!-- compatibility-parent: openai#347 --> <!-- compatibility-parent: openai#348 --> <!-- compatibility-parent: openai#357 --> <!-- compatibility-parent: openai#379 --> <!-- compatibility-parent: openai#384 --> <!-- compatibility-parent: openai#386 --> <!-- compatibility-parent: openai#387 --> <!-- compatibility-parent: openai#392 --> <!-- compatibility-parent: openai#397 --> <!-- codex-thread: 01a131fd-7e05-7622-8102-817940a4b4ee -->
In Ubuntu's Fish 3, typing `openai images gen` and pressing Tab could print an option error instead of completing `generate`. File completion also returned unrelated matches such as `assets/a=assets/` when the intended file was `assets/a=b.png`. This fixes those completion paths and checks them on Linux x64 and ARM64. ### What changes - Restore Fish 3 completion through its supported tokenization command while preserving Fish 4 token expansion. - Keep literal `=` and `:` filename prefixes from producing unrelated Fish 3 matches. - Check restored Tab bindings against each shell's original binding, so equivalent Fish 3 and Fish 4 output both pass. - Require zsh, Fish, and quoting checks on both existing Linux runners; missing or skipped tests fail. - Install zsh, Fish, and Expect from signed Ubuntu sources and record their versions, architectures, and executable paths. ### Commands No CLI commands or flags change. These examples show the prefixes to type before pressing Tab: ```sh # Press Tab after gen to complete generate. openai images gen # With assets/a=b.png present, press Tab after a= to complete that filename. openai files create --file=assets/a= ``` ### Code The Fish adapter in `internal/autocomplete/shellscripts/fish_autocomplete.fish` retains `commandline -xpc` and falls back to `-opc`. The fallback does not evaluate command substitutions. Fish 3 retains literal-token behavior; Fish 4 retains variable expansion. For legacy literal file prefixes, Fish's tokenizer removes quoting before the adapter encodes separators for the existing path helper. Expansion-bearing paths keep Fish's native behavior. This does not fix Fish 3 separator matches after variables or substitutions. The adjacent binding tests compare exact before/after bytes and preserve Tab execution, fallback, resourcing, and repeated disable checks. The workflow preserves all six job names, action pins, permissions, prepared-source handling, and native architecture guards. The existing tests use isolated settings, synthetic executables, and private PTYs. This adds no Go package or test framework. The [workflow recipe](https://github.com/openai/openai-cli/blob/ad584b96be03d19bffdc82f2fcb98edfd550b8e0/.github/workflows/help-compatibility.yml) contains the exact test selections and required-shell settings. ### Tested Local validation passed: YAML, Bash syntax, preserved workflow fields, ten execution-gate probes, six pipeline probes, and the existing source-boundary test. Six executable-identity probes also passed. They cover Ubuntu path aliases, unrelated executables, empty metadata, failed metadata commands, and architecture mismatches. Fish 4.9.3 passed all eight Fish test groups and 49 subtests on macOS ARM64, with no skips. The added cases cover literal separators, balanced and unfinished quotes, spaces, backslashes, variable paths, and inert command substitutions. Independent source review accepted the Fish correction. Corrected Linux execution remains pending. SDK CODEOWNER review remains required for this workflow change. The Fish package tests explicitly source rendered scripts. They do not establish automatic `vendor_conf.d` discovery or production package installation. ### Demo Fish 3 before: Tab prints `commandline: -xpc: unknown option` instead of completing the command. Expected Fish 3 result, pending hosted verification: `openai images gen<Tab>` completes to `openai images generate`. Hosted shell execution does not establish graphical terminal appearance or interactive zsh Tab behavior. <!-- compatibility-parent: openai#246 --> <!-- compatibility-parent: openai#291 --> <!-- compatibility-parent: openai#297 --> <!-- compatibility-parent: openai#315 --> <!-- compatibility-parent: openai#316 --> <!-- compatibility-parent: openai#347 --> <!-- compatibility-parent: openai#348 --> <!-- compatibility-parent: openai#357 --> <!-- compatibility-parent: openai#359 --> <!-- compatibility-parent: openai#360 --> <!-- compatibility-parent: openai#361 --> <!-- compatibility-parent: openai#379 --> <!-- compatibility-parent: openai#384 --> <!-- codex-thread: 01a131fd-7e05-7622-8102-817940a4b4ee -->
WSL CI did not check several behaviors already tested elsewhere, including some command aliases and per-command API settings. This adds those checks, including real Bash commands with quoted and empty values. CI fails if an expected check is missing, skipped, or fails. ### What changes - Add a WSL 1 profile for command and request checks. - Cover request settings, environment restoration, command routing, help, output formats, errors, and saved settings. - Exercise requests through real Bash, including quoted values, empty overrides, API errors, and local completion. - Keep the existing WSL profile and its evidence separate. The supplement contains no duplicate baseline roots. - Require every expected result exactly once, with no skips or failures. - Reserve the complete 70-second custom stage before launch. Preserve the process and cleanup deadlines. ### Commands No CLI commands or flags change. The CI runner gains `--command-contracts`. ```sh python -I -B scripts/test_wsl_pager.py # offline runner controls ``` The hosted workflow builds both Linux test binaries and supplies the required run identity and deadlines. Its Windows command is: ```powershell python -I -B scripts/check-wsl-pager.py --command-contracts --binary (Join-Path $env:RUNNER_TEMP 'wsl-pager.test') --process-binary (Join-Path $env:RUNNER_TEMP 'wsl-process.test') ``` Omitting `--command-contracts` preserves the existing pager and process selection. `--cleanup` remains independent of the supplemental inventory. ### Code The existing WSL runner owns import, payload verification, test execution, and cleanup. `scripts/wsl-command-cases.json` holds the fixed expected names. The offline controls check selection, failure handling, deadline admission, and cleanup. The Bash test reuses the existing process payload, so the guest needs no compiler. The workflow keeps both profiles isolated on separate hosted runners with distinct artifacts. Production Go code, generated files, and dependencies remain unchanged. ### Tested Candidate `4a68d479` includes shipping main `d01b8549`. All six PR files match `16856d47`. The incoming changes update generated API documentation and generation metadata. Selected runtime paths, test bodies, helpers, and dependencies remain unchanged. The results below retain their original source attribution. Fresh protected checks remain pending. At `16856d47`, workflow structure checks and all 55 offline controls passed. [Native WSL jobs](https://github.com/openai/openai-cli/actions/runs/38641281697) passed all 632 supplemental names on Ubuntu 24.04 WSL 1 AMD64. The separate baseline passed all 147 names. Neither profile skipped or failed a selected case. All 1,121 prepared source files matched `16856d47`. Both profiles verified payloads, process exits, stream completion, deadlines, and removal of their owned distributions. Repeated cleanup confirmed their absence. The five Bash cases made five CLI calls and four requests. The API 400 preserved exit 1; completion made no requests. On macOS ARM64 with Go 1.26.9, all 69 tests and 563 subtests passed at `d2e2cdd`. No selected tests skipped or failed. All five validation jobs exited zero, with unchanged source and input hashes. The selected test bodies, shared helpers, selected runtime paths, and dependencies remain unchanged. Those earlier process results retain their original source attribution. These checks do not establish Windows Terminal appearance, physical keyboard behavior, or native Windows CLI compatibility. WSL 2, ARM64 WSL, and general DrvFS behavior remain untested. ### Demo No visible behavior changes. This PR adds compatibility checks only. <!-- compatibility-parent: openai#265 --> <!-- compatibility-parent: openai#266 --> <!-- compatibility-parent: openai#297 --> <!-- compatibility-parent: openai#315 --> <!-- compatibility-parent: openai#347 --> <!-- compatibility-parent: openai#358 --> <!-- compatibility-parent: openai#379 --> <!-- compatibility-parent: openai#382 --> <!-- compatibility-parent: openai#384 --> <!-- compatibility-parent: openai#394 --> <!-- codex-thread: 01a131fd-7e05-7622-8102-817940a4b4ee -->
Automated Release PR --- ## [1.39.0](openai/openai-cli@v1.38.0...v1.39.0) (2026-10-19) ### Features * **admin:** add guided admin-key setup and access verification ([openai#387](openai#387)) ([4183995](openai@4183995)) * **api:** add Decisions creation and hosted environment reference ([openai#437](openai#437)) ([0ca3ac7](openai@0ca3ac7)) * **api:** add Decisions prompt caching options ([openai#501](openai#501)) ([5031be2](openai@5031be2)) * **api:** add organization Decisions usage reporting ([openai#435](openai#435)) ([ba6cb09](openai@ba6cb09)) * **api:** add prompt-based voice creation ([openai#502](openai#502)) ([72f552b](openai@72f552b)) * **api:** add safety identifiers to image requests and responses ([openai#503](openai#503)) ([b624c9f](openai@b624c9f)) * **api:** configure Decisions when accepting Live SIP calls ([openai#505](openai#505)) ([e17ac83](openai@e17ac83)) * **api:** support project API key scope updates ([openai#478](openai#478)) ([7afecce](openai@7afecce)) * **api:** support updating project API key expiry ([openai#462](openai#462)) ([97b43f2](openai@97b43f2)) * **audio:** add speech workflows, local history, playback, export, and readable transcripts ([openai#403](openai#403)) ([fe17bcb](openai@fe17bcb)) * **batches:** add waiting, result collection, and safe downloads ([openai#388](openai#388)) ([ecaf876](openai@ecaf876)) * **cli:** add scoped error recovery and optional shell typo suggestions ([openai#409](openai#409)) ([a81ec27](openai@a81ec27)) * **cli:** show a welcome card during bare interactive startup ([openai#401](openai#401)) ([024dbaa](openai@024dbaa)) * **files:** add get and download routes with positional uploads ([openai#397](openai#397)) ([e689398](openai@e689398)) * **help:** show complete help consistently and improve flag diagnostics ([openai#384](openai#384)) ([6fcc478](openai@6fcc478)) * **images:** add interactive and opt-in Konsole previews ([openai#371](openai#371)) ([d3bc819](openai@d3bc819)) * **images:** retain picker drafts and keep failed requests editable ([openai#394](openai#394)) ([1dc9d3d](openai@1dc9d3d)) * **models:** add filtered ID and owner lists with interactive navigation ([openai#391](openai#391)) ([86502b0](openai@86502b0)) * **output:** add quiet and verbose controls ([openai#392](openai#392)) ([866d877](openai@866d877)) * **tokenizer:** add offline token inspection and local Codex guidance ([openai#386](openai#386)) ([217ff2e](openai@217ff2e)) ### Bug Fixes * **autocomplete:** preserve colon argument boundaries ([openai#413](openai#413)) ([5739ce0](openai@5739ce0)) * **autocomplete:** preserve quoted and Unicode filenames during Bash completion ([openai#446](openai#446)) ([6ec7646](openai@6ec7646)) * **autocomplete:** preserve quoted Bash command prefixes ([openai#399](openai#399)) ([c3c66c4](openai@c3c66c4)) * **autocomplete:** restore Fish 3 completion and literal filename prefixes ([openai#447](openai#447)) ([f93670c](openai@f93670c)) * **ci:** decode SDK cross-link events as UTF-8 ([openai#457](openai#457)) ([af0e8a0](openai@af0e8a0)) * **cli:** emit finite JSON arrays; use --format jsonl for independent records ([openai#407](openai#407)) ([b93e41e](openai@b93e41e)) * **cli:** wait briefly for Windows piped input ([openai#485](openai#485)) ([8b40840](openai@8b40840)) * **errors:** preserve incomplete resumed-stream failures and empty API error details ([openai#439](openai#439)) ([e8ffaab](openai@e8ffaab)) * **help:** preserve literal flag values and quoted Bash file completion ([openai#440](openai#440)) ([47d6a16](openai@47d6a16)) * **images:** preserve reserved probe directories during Windows image saves ([openai#470](openai#470)) ([e330cc2](openai@e330cc2)) * **images:** retain saved-file recovery guidance after cancellation ([openai#442](openai#442)) ([337a7e4](openai@337a7e4)) * **io:** preserve explicit stdin, stream events promptly, and protect incomplete downloads ([openai#395](openai#395)) ([390a9c3](openai@390a9c3)) * **models:** finish SIGINT shutdown with status 130 ([openai#441](openai#441)) ([673c5eb](openai@673c5eb)) * **output:** keep redirected results undecorated and preserve stream cleanup ([openai#392](openai#392)) ([866d877](openai@866d877)) * **output:** send successful API save receipts to stderr ([openai#395](openai#395)) ([390a9c3](openai@390a9c3)) * **tokenizer:** preserve Windows Unicode input and split terminal replies ([openai#454](openai#454)) ([911218a](openai@911218a)) ### Chores * **api:** clarify Decisions request and response fields ([openai#476](openai#476)) ([8301197](openai@8301197)) * **api:** correct the shida Live voice name ([openai#430](openai#430)) ([193ee5b](openai@193ee5b)) * **api:** document 128-character safety identifiers ([openai#428](openai#428)) ([a6bf1af](openai@a6bf1af)) * **api:** document beta pagination validation and migration ([openai#431](openai#431)) ([729045e](openai@729045e)) * **api:** document beta session spending controls ([openai#432](openai#432)) ([47df976](openai@47df976)) * **api:** document billing_not_active session errors ([openai#429](openai#429)) ([8f26fe4](openai@8f26fe4)) * **api:** document detailed safety alert explanations ([openai#434](openai#434)) ([2b61ced](openai@2b61ced)) * **api:** document Files API rate-limit responses ([openai#427](openai#427)) ([88cd309](openai@88cd309)) * **api:** document image tool error and moderation details ([openai#451](openai#451)) ([53b3b6e](openai@53b3b6e)) * **api:** document Live audio fixture events in the API reference ([openai#481](openai#481)) ([38c82ce](openai@38c82ce)) * **api:** document OCI external-storage providers ([openai#433](openai#433)) ([4f1f7df](openai@4f1f7df)) * **api:** document Realtime response error messages ([openai#479](openai#479)) ([ec8d114](openai@ec8d114)) * **api:** document regional processing residency values ([openai#477](openai#477)) ([75865b6](openai@75865b6)) * **api:** document snapshot lifecycle status values and events ([openai#415](openai#415)) ([53828f0](openai@53828f0)) * **api:** document vault updates and metadata filters ([openai#426](openai#426)) ([b724518](openai@b724518)) * **api:** use neutral moderation examples ([openai#518](openai#518)) ([180544a](openai@180544a)) * clarify Live limits and refresh generated-file verification ([openai#510](openai#510)) ([9cddd6b](openai@9cddd6b)) * **deps:** bump charm.land/bubbletea/v2 from 2.0.10 to 2.1.0 in the go-minor-and-patch group across 1 directory ([openai#539](openai#539)) ([37d5e5c](openai@37d5e5c)) * **deps:** bump the codeql group across 1 directory with 2 updates ([openai#543](openai#543)) ([9023b9e](openai@9023b9e)) * **deps:** bump the go-minor-and-patch group across 1 directory with 5 updates ([openai#444](openai#444)) ([263dadd](openai@263dadd)) * **deps:** bump the golang-x group across 1 directory with 2 updates ([openai#540](openai#540)) ([52f0ad0](openai@52f0ad0)) * **deps:** update openai-go to v3.74.0 ([openai#393](openai#393)) ([e32158e](openai@e32158e)) * **deps:** update openai-go to v3.75.0 ([openai#412](openai#412)) ([077ae69](openai@077ae69)) * **deps:** update openai-go to v3.77.0 ([openai#414](openai#414)) ([835de59](openai@835de59)) * **deps:** update openai-go to v3.78.0 ([openai#450](openai#450)) ([8f79e98](openai@8f79e98)) * **deps:** update openai-go to v3.79.0 ([openai#507](openai#507)) ([0828c79](openai@0828c79)) * **deps:** update openai-go to v3.81.0 ([openai#516](openai#516)) ([6c26343](openai@6c26343)) * **deps:** update openai-go to v3.82.0 ([openai#532](openai#532)) ([00add07](openai@00add07)) * restore generated reporting tools without behavior changes ([openai#475](openai#475)) ([c12cd56](openai@c12cd56)) ### Documentation * define CLI layout migration and compatibility contract ([openai#486](openai#486)) ([e9ad31e](openai@e9ad31e)) * **windows:** explain JSON stderr capture in Windows PowerShell 5.1 ([openai#443](openai#443)) ([960af77](openai@960af77)) ### Refactors * **batches:** separate local workflows from assembly policy ([openai#547](openai#547)) ([0486923](openai@0486923)) * extract CLI invocation runner into internal app ([openai#488](openai#488)) ([ee7a731](openai@ee7a731)) * **files:** separate handwritten workflows and shared shell helpers ([openai#546](openai#546)) ([a6bfb0b](openai@a6bfb0b)) * **input:** move non-consuming piped input probes ([openai#529](openai#529)) ([904c95d](openai@904c95d)) * isolate browser platform handling in internal/terminal ([openai#504](openai#504)) ([9d304ca](openai@9d304ca)) * isolate command-tree organization ([openai#515](openai#515)) ([b5cc7a8](openai@b5cc7a8)) * isolate generated tokenizer tables ([openai#496](openai#496)) ([efda414](openai@efda414)) * isolate the Codex command feature ([openai#509](openai#509)) ([a6530ae](openai@a6530ae)) * isolate the manpage command feature ([openai#514](openai#514)) ([7617d3d](openai@7617d3d)) * isolate the shared terminal output runtime ([openai#512](openai#512)) ([d93d0d0](openai@d93d0d0)) * isolate the tokenizer command feature ([openai#513](openai#513)) ([fb023ee](openai@fb023ee)) * keep mTLS transport construction in internal/request ([openai#522](openai#522)) ([393e1ae](openai@393e1ae)) * keep request-input help with its renderer ([openai#519](openai#519)) ([5791763](openai@5791763)) * **lists:** add shared paged-list navigation runtime ([openai#389](openai#389)) ([d866707](openai@d866707)) * **lists:** prepare compact table rendering for resource lists ([openai#390](openai#390)) ([c65e03e](openai@c65e03e)) * move command recovery into help ([openai#517](openai#517)) ([5662bc2](openai@5662bc2)) * move response transformations into internal output ([openai#487](openai#487)) ([55ebd62](openai@55ebd62)) * **output:** move finite JSON list framing and paging ([openai#537](openai#537)) ([ee77628](openai@ee77628)) * **output:** move lazy transformation iterator ([openai#535](openai#535)) ([ad22022](openai@ad22022)) * **output:** move pager and stdout streaming runtime ([openai#536](openai#536)) ([cb5a5a8](openai@cb5a5a8)) * **output:** move readable list and stream rendering ([openai#538](openai#538)) ([8b304b0](openai@8b304b0)) * **output:** move result formatting and format selection ([openai#534](openai#534)) ([50db1df](openai@50db1df)) * **request:** extract piped input reading and merge policy ([openai#528](openai#528)) ([068bddc](openai@068bddc)) * **request:** move default client options and URL validation ([openai#530](openai#530)) ([211f056](openai@211f056)) * **request:** move file expansion and single-use stdin ([openai#526](openai#526)) ([8be3c0b](openai@8be3c0b)) * **request:** move multipart encoding and owned uploads ([openai#524](openai#524)) ([73f9a1f](openai@73f9a1f)) * **request:** move shared flag and stdin preparation ([openai#533](openai#533)) ([8e64575](openai@8e64575)) * **request:** move stdin provenance and input policies ([openai#525](openai#525)) ([ac5aa07](openai@ac5aa07)) * **request:** move streaming mode resolution ([openai#527](openai#527)) ([64ae997](openai@64ae997)) * **request:** separate final encoding from feature hooks ([openai#531](openai#531)) ([711596c](openai@711596c)) * separate generated API commands from handwritten CLI code ([openai#500](openai#500)) ([d44fb85](openai@d44fb85)) * separate generated commands from CLI compatibility behavior ([openai#474](openai#474)) ([08df3f6](openai@08df3f6)) * share literal request headers through internal/request ([openai#521](openai#521)) ([a9f35b9](openai@a9f35b9)) * share output writing and error classification ([openai#506](openai#506)) ([bce2ab8](openai@bce2ab8)) * share root request flags and mTLS configuration ([openai#523](openai#523)) ([a718ab6](openai@a718ab6)) * share terminal color and presentation policy ([openai#508](openai#508)) ([575d494](openai@575d494)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: openai-sdks[bot] <284451331+openai-sdks[bot]@users.noreply.github.com>
Command help currently shows a short page and requires
help --allfor the full reference. This gives every help entrypoint the same complete command page. The layout follows gcloud's full reference, with concrete syntax and clearer flag descriptions.What changes
-h,--help, andhelpshow the same page, including after valid options and through nested command paths.help --allprints migration guidance before the same page. Command-ownedimages models --allstays available.Commands
No new commands or flags. These help forms now show identical content:
Help remains offline. Required-input notes preserve existing positional, flag, JSON, and YAML input contracts. Request defaults and output modes are unchanged.
Code
internal/clihelpowns help routing, synopses, flag references, and terminal prose.pkg/customsupplies presentation metadata and parser-error guidance. Generated path-input metadata follows existing command clones without changing flags or actions.The completion change preserves manually typed legacy help flags while hiding them from suggestions. Generated API sources, dependencies, and
main.goare unchanged.Tested
Merged pinned main
d32b3aeinto the reviewed Help branch. The merge preservesc9817b1and imports the exact upstream voice contract.Fresh macOS validation at
fc944dapassed 1,166 public test/subtest checks, including required native Bash/zsh execution. Internal help/request-flag checks passed 540 records. Custom integration passed 191 records; voice contracts passed 29. These runs had no failures or skips.The owned voice-type read cancellation test passed under the race detector. All package tests compiled. The candidate build,
go vet ./..., andgo mod verifypassed.Independent adversarial review passed 584 assertions across 527 processes. It covered complete-help equality, native copied commands, parser privacy, multipart inputs, and the merged voice contract.
Generated sources, schemas, and generation metadata match pinned main exactly. Main's trusted custom-code checker passed at 21/1,000 lines.
CI and native help checks passed at
fc944da; conditional jobs were skipped.The naming-only follow-up preserves every test assertion. It passed 11 focused test records, and the existing help CI selector discovers all four renamed tests. CI is rerunning at
1f6c0a8. The broader manual platform campaign remains deferred.Demo
Real binaries on macOS, recorded at 90 and 56 columns. Before is main
da762ff; after is this PR. Captures made no API requests. Images show labeled excerpts; the recorder also retains complete stdout. Fresh comparison checks confirm all four recorded help pages remain byte-identical after the pinned-main merge.Before:
After:
Recording recipe
BEGIN_COMMIT_OVERRIDE
feat(help): show complete help consistently and improve flag diagnostics (#384)
END_COMMIT_OVERRIDE