Repository navigation
Prepare compact tables for file, batch, and project lists - #390
Conversation
|
@codex review |
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. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 69679c182b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
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. |
|
@codex review |
|
Codex Review: Didn't find any major issues. Already looking forward to the next diff. 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 203d7aa72b8f2421802fe0d661640f7824cdb99f against b2d0924f451ce09a113ef1ab699f37c4375a62e0. No new blocking findings.
The table renderer preserves full IDs, escapes cells before measuring them, and falls back to labels for narrow or unsupported pages. Projection preserves actionable details through that fallback. Caller cancellation reaches the projection checks, and the navigation boundary checks it again before returning output. Rendering does not fetch pages.
This approval covers the staged table change; public-command activation remains a separate step. Source-only review: no local tests, builds, or PTY execution. Hosted test, build, lint, and baseline-consistency checks passed on this head. Queue-signal checks were skipped.
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 37846836094 --repo openai/openai-cli \
--name castiron-custom-code-37846836094-1 --dir /tmp/castiron-custom-code-37846836094-1
git apply --stat /tmp/castiron-custom-code-37846836094-1/custom-code.patch
cat /tmp/castiron-custom-code-37846836094-1/custom-code.patchOr reproduce it from an SDK checkout containing the vendored reporter: git fetch --no-tags origin d86670735891cb7cb1c948573430d3df4641c237 ff042a3bda90f51fb5f8591d08f9ce2f22d77eda
python3 scripts/castiron/custom_code_report.py report \
--base d86670735891cb7cb1c948573430d3df4641c237 \
--head ff042a3bda90f51fb5f8591d08f9ce2f22d77eda --fetch --require-head-hash --public \
--out /tmp/castiron-custom-code-ff042a3bda90
cat /tmp/castiron-custom-code-ff042a3bda90/custom-code.patchThis is the current full custom patch for mixed files, not an attribution of only the handwritten lines changed by this PR. |
203d7aa to
ff042a3
Compare
| assert "detail-002" in screen_text(terminal), "viewport omitted unfamiliar data" | ||
| assert terminal.child.poll() is None, "viewer exited before key delivery" | ||
| after_key = len(terminal.raw) | ||
| assert os.write(terminal.master, b"q" if scenario == "empty" else b"p") == 1, "short key write" |
| if not waited: | ||
| try: | ||
| os.kill(pid, signal.SIGKILL) | ||
| except ProcessLookupError: |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ff042a3bda
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
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".
| if err != nil || !supported { | ||
| return "", false, err | ||
| } | ||
| content, fits := readable.ListTable(headers, rows, width) |
There was a problem hiding this comment.
Thread context through table rendering
When a loaded page contains a very large filename, project name, or ID and the caller cancels after projection completes, this call still sanitizes and width-scans every cell without consulting ctx, so renderListNavigationPage cannot observe cancellation until the entire render attempt finishes. The earlier projection fix does not cover this phase: the fresh evidence is that readable.ListTable accepts no context here. Make the renderer cancellation-aware so large supported payloads do not delay caller cancellation.
AGENTS.md reference: AGENTS.md:L105-L110
Useful? React with 👍 / 👎.
…#391) Large model lists currently fill the terminal with metadata. This shows each model's exact ID and owner, with clear navigation for large results. Slow interactive requests show loading feedback instead of an unexplained blank screen. ### What changes - Show sorted ID and OWNER columns in automatic interactive output. - Preserve both complete values in labeled output when the terminal is narrow. - Keep all accessible models, including fine-tuned IDs; unavailable owners show `(unknown)`. - Finish short results directly and show empty results clearly. - Use the existing viewer for long lists: Space advances, b goes back, and q exits. - Explain that p prints all selected complete records, including metadata. - Add Models-only `--filter` and `--sort-by` controls. - Show delayed loading feedback through slow response headers, body reads, and retries. - Stop feedback before rendering, preserve Ctrl+C status 130, and restore the terminal. - Preserve explicit formats, field extraction, pipes, and legacy limit ordering without selection controls. ### Commands `models list` remains the same command. Only `--filter` and `--sort-by` are new flags. ```sh openai models list # IDs and owners in an interactive terminal openai models list --format json # complete records openai models list --transform id --raw-output # IDs for a pipeline # Match one exact ID. openai models list --filter 'id = "demo-text-alpha"' # Filter, sort descending, then keep three results. openai models list --filter 'id~^demo-text-' --sort-by '~id' --max-items 3 ``` Filters support exact `id=VALUE` and RE2 `id~REGEX` matching. Matches are case-sensitive unless the regex changes that behavior. Boolean expressions and operand lists are unsupported. Quote the whole expression for your shell. Operand quotes and backslash escapes are decoded before matching. Selection sorts before `--max-items`; omitted selection retains response-order limiting before terminal display sorting. The limit defaults to unlimited; `-1` remains supported and `0` returns no items. Selection rejects `--format raw` before HTTP. Raw output without selection retains the full response envelope. ### Code This PR targets main `c65e03e`, after Navigation openai#389 and Tables openai#390 merged. It preserves the reviewed Navigation completion and terminal-boundary corrections. Models uses the SDK's single-response pager; navigating makes no additional API request. `pkg/custom` owns command options, loading feedback, presentation, and the Models viewer adapter. `pkg/transformers` selects complete records and projects exact ID/owner pairs. Shared readable tables and Bubble Tea/Bubbles handle layout and navigation. The existing delayed-feedback helper supplies loading feedback. Two presentation hooks stop and join its worker before results write. Generated sources, module dependencies, entrypoint wiring, and payload limits remain unchanged. The one-line `.go-version` pin selects Go 1.26.9 while the Actions version index catches up. This security patch passes the existing vulnerability scan. Future Go patches require updating the pin. Universal Output composition still needs its shared policy for the optional Details hint. The local follow-up patch remains separate; this branch does not add universal `--quiet`. Images openai#394 changes the shared loading-helper signature. Combining these PRs requires the separate verified Models caller adaptation. That integration patch remains local until the revised Image helper is available in the base. ### Tested Candidate `996def6` adds the Go 1.26.9 security pin above reviewed runtime `70282f3`. All five reported review findings are fixed, with regression coverage and resolved threads. Standard-record printing retains complete fields; Models viewer Ctrl+C returns 130; q, Escape, and p retain status 0. At `70282f3`, 46 focused race tests and 206 subcases passed without failures or skips. Independent native macOS checks reproduced both original defects and verified the fixes, terminal restoration, and cleanup. Additional probes preserve joined errors, writer failures, and existing typed exit-status precedence. The earlier `26e23a3` native checks cover narrow IDs, selection, API errors, and the corrected single-response checker. Normal and optimized Python checks verify key delivery and failed-write behavior. On Go 1.26.9, the unchanged vulnerability scan passed all nine release targets. Four focused Models race tests and seven subcases also passed, with no failures or skips. The exact native build passes. Module dependencies and counted budget inputs remain unchanged. CI passed for `996def6`: 21 checks passed, with two conditional skips. The build-artifact scan used Go 1.26.9 and found no vulnerabilities across all nine release targets. [CI run](https://github.com/openai/openai-cli/actions/runs/37860812082) and the trusted budget/isolation checks passed. Merge still uses the required normal merge queue. Earlier request-loading evidence remains tied to runtime `f739395` and its 25 public scenarios. The demos remain tied to `d4a2d744`; their table, navigation, and loading paths use q and remain unchanged. Fresh native checks cover the corrected p and Ctrl+C behavior separately. Justin's original hang remains unreproduced; controlled wait handling does not establish its historical cause. Broader generated-list activation remains separate. No live API calls ran. Native Linux/Windows Models behavior remains unverified. ### Demo The recordings compare ID-only `d16c92b` with ID/owner `d4a2d744` using 48 identical synthetic records. Both use `openai models list` on macOS arm64 with Menlo terminal replay. The wide recording includes a controlled slow response and visible loading feedback. The narrow recording preserves complete ID/owner labels. All five commands exited successfully after one identical-response request each. The recorder checks navigation, terminal restoration, capture bytes, and source/binary hashes. Author and independent reviews passed all 11 screenshots and 46 GIF frames. The media shows terminal replay rather than native graphical terminal appearance.  Before:  After:  [Narrow comparison](https://github.com/user-attachments/assets/f2095fb5-c6d5-473c-b20d-9d29a093f55f). [Recording recipe](https://github.com/openai/openai-cli/blob/cbe90a336390688c7723537cec2c2eeb8c812868/scripts/demos/models-list-viewer/README.md).
Resumed Responses streams could report success after a reasoning, audio, or tool event ended early. Empty API error objects could also discard the available HTTP status. This reports those failures while preserving partial output and meaningful API error fields. ### What changes - Known Responses progress events require a response completion event, including after `--starting-after`. - Tool completion remains separate from response completion. Unknown events and explicit event limits keep their behavior. - Empty API error objects use the existing status/message fallback in structured error formats. - Two public regression tests join the existing macOS, Linux, and Windows dispatch checks. ### Commands No new commands or flags. ```sh openai responses retrieve RESPONSE_ID --stream=true --starting-after 10 openai models retrieve MODEL_ID --format-error json ``` Formats, extraction, raw output, event limits, and selected stdout data remain available. Incomplete resumed streams now return nonzero. Empty error objects now include HTTP status and a useful message. ### Code `pkg/transformers` tracks known Responses progress events. `pkg/custom` selects the empty-error fallback without changing meaningful API fields. Public tests reuse the existing process helpers. The demo reuses the shared capture helper. Generated commands, `main.go`, dependencies, and budget policy remain unchanged. ### Tested On macOS ARM64, 17 new regression cases failed before the fixes; all 61 pass afterward. Another 280 public tests and subtests pass, including large events, cancellation, partial failures, and output formats. Focused helper checks pass, as do 20 independent executable probes. These runs have no skips. Earlier baseline checks also passed binary saves and Bash/zsh redirection at `0ca3ac7`. Independent adversarial review found no remaining blocker in these fixes. CI results are pending publication. This is a focused compatibility catch-up, not complete platform certification. Native Windows/Linux terminals, WSL, SSH/tmux, Fish, x64, and terminal appearance remain incomplete. The separate Models SIGINT correction remains with its existing owner. Files/Batches/Projects navigation helpers remain inactive through their generated commands. SDK CODEOWNER review is required before merging. ### Demo macOS Bash terminal replay against a synthetic loopback API. Before uses `0ca3ac7`; After uses `2bf0e38`; final `61503df` adds only the reviewed recorder. The CLI captures stdout and stderr separately; the replay displays those actual bytes and exit statuses. This is not native terminal appearance evidence. [View image: comparison.gif](https://flow.apps.openai.org/api/v1/gh/attachments/openai/openai-cli/439/68d7c16037ee457aa33204544dad85c1.gif) Before: [View image: before.png](https://flow.apps.openai.org/api/v1/gh/attachments/openai/openai-cli/439/70990718677b41828cce63f9525b4442.png) After: [View image: after.png](https://flow.apps.openai.org/api/v1/gh/attachments/openai/openai-cli/439/2bd629dfb7b54e428e70726abc141375.png) [Recording recipe](https://github.com/openai/openai-cli/blob/61503df9a70a8f1729978bd0f902085d99bfc6d8/scripts/demos/stream-errors/README.md). <!-- compatibility-parent: openai#265 --> <!-- compatibility-parent: openai#266 --> <!-- compatibility-parent: openai#276 --> <!-- compatibility-parent: openai#278 --> <!-- compatibility-parent: openai#279 --> <!-- compatibility-parent: openai#289 --> <!-- compatibility-parent: openai#389 --> <!-- compatibility-parent: openai#390 --> <!-- compatibility-parent: openai#391 --> <!-- compatibility-parent: openai#392 --> <!-- compatibility-parent: openai#395 --> <!-- compatibility-parent: openai#397 --> <!-- codex-thread: 01a131fd-8d19-7013-b8d9-2de3e4ab3963 -->
The CLI already had tests for resource output, pagination, and streamed text, but Windows CI did not run them. Windows x64 and ARM64 now run those tests before changes merge. For example, CI checks that pagination preserves item order and that streaming failures retain text already printed. ### What changes - Check resource summaries, pagination limits, explicit formats, unknown fields, and partial-page failures. - Check streamed text delivery, event identity, explicit formats, failure diagnostics, and large events. - Require 13 resource/navigation roots with 100 children, plus 10 streaming roots with 41 children. - Reject missing tests, unexpected passing names, skips, failures, and missing package passes. ### Commands No CLI commands or flags change. The two CI selections run: ```sh # Resource output and pagination go test -p 2 ./cmd/openai -count=1 -timeout=3m -v -json -run '^(TestMainResourceSummariesRetainActionFields|TestMainResourceSummaryListFilesInVectorBatch|TestMainResourceSummaryPaginationPreservesOrderDuplicatesAndLimits|TestMainResourceSummaryListNoticeForMixedRecords|TestMainResourceSummaryEmptyList|TestMainResourceSummaryUnknownFieldsAndShapesFallBack|TestMainResourceSummaryExplicitFormatsAndExtractionKeepFullData|TestMainResourceSummaryListFormatsAndExtractionKeepFullItems|TestMainResourceSummaryLeavesOtherOperationsUnchanged|TestMainResourceSummaryPreservesLargeActionArguments|TestMainResourceSummaryPreservesPartialPageOnFailure|TestMainResourceSummaryWritesBeforeNextPageArrives|TestMainListNavigationNoninteractive)$' # Streaming text output go test -p 2 ./cmd/openai -count=1 -timeout=3m -v -json -run '^(TestMainStreamingTextArrivesBeforeCompletion|TestMainStreamingTextKeepsPartIdentityAndSnapshots|TestMainStreamingTextRetainsNontextDetails|TestMainStreamingExplicitFormatsPreserveEveryEvent|TestMainStreamingTextInterleavedChoicesKeepDetails|TestMainStreamingFailuresPreservePartialOutput|TestMainStreamingInterruptedTransportPreservesPartialOutput|TestMainStreamingFailureDiagnostics|TestMainStreamingTextDistinguishesEarlyEOFAndEmptyCompletion|TestMainStreamingTextLargeEvent)$' ``` The selectors exclude the explicit-limit streaming test and the already-covered resumed-response dispatch test. ### Code Only `.github/workflows/help-compatibility.yml` changes. The steps reuse the existing PowerShell wrapper and result verifier. The original 18 MiB resource case and large stream fixtures remain unchanged and sequential. PR openai#452 merged into main as `28cd2647`. This now targets that shipping base with only the resource and streaming additions. ### Tested - YAML parsing and all 205 verifier controls passed again after merging main. - Native [Windows x64](https://github.com/openai/openai-cli/actions/runs/38482194076/job/115587500493) and [Windows ARM64](https://github.com/openai/openai-cli/actions/runs/38482194076/job/115587500562) passed at `767f946`. Both used SDK 3.78.0, Go 1.26.9, and `-p 2`. - Each architecture passed 13 resource/list roots with 100 children, plus 10 streaming roots with 41 children. - Every selected test ran and passed exactly once. Each suite recorded one package pass, without selected skips or failures. - Independent review verified the raw results and every prepared source file against the candidate. All six Help compatibility jobs passed. CodeQL and Castiron checks passed. Codex code and security reviews completed for `767f946` with no reported findings. [Main CI](https://github.com/openai/openai-cli/actions/runs/38482194049) passed on its first attempt at `767f946`. Earlier `b8407cd1` results used SDK 3.77 and remain historical. Parent openai#452's earlier image-test timeout and unchanged passing retry remain documented. The timeout's underlying cause remains unresolved. For openai#389 and openai#390, this covers noninteractive preservation only. Files, Batches, and Projects do not activate compact tables or interactive navigation. Shared Models behavior and helper coverage require separate evidence. These checks do not establish terminal appearance, keyboard behavior, WSL, shell parsing, or user-signal cancellation. The existing POSIX `scripts/run` test skips on Windows, outside these selections. ### Demo No visual demo is needed for this CI-only change. CLI behavior and appearance stay unchanged. <!-- compatibility-parent: openai#278 --> <!-- compatibility-parent: openai#279 --> <!-- compatibility-parent: openai#389 --> <!-- compatibility-parent: openai#390 --> <!-- codex-thread: 01a131fd-7e05-7622-8102-817940a4b4ee -->
) The CLI's list and table code already had tests, but four native CI jobs did not run them. This adds those tests to Windows x64/ARM64, Linux ARM64, and macOS x64. For example, CI checks that narrow tables keep complete IDs and cancellation stops the next page request. ### What changes - Run 34 existing library tests and their 176 named subtests on the four selected platforms. - Check page fetching, cancellation, error preservation, response fields, complete IDs, Unicode widths, and narrow-table fallback. - Require all expected results and a package pass in each of three separate logs. - Reject missing results, unexpected passing names, skipped tests, failures, and incomplete packages. - Preserve the existing 8 MiB fixture, sequential execution, two-minute package limits, and 15-minute job limit. ### Commands No CLI commands or flags change. These examples run one focused check from each package: ```sh # Check page fetching go test -p 2 ./pkg/custom -count=1 -timeout=2m -run '^TestListPageFetcherStopsEmptyAndStalledCursors$' # Check response fields go test -p 2 ./pkg/transformers -count=1 -timeout=2m -run '^TestProjectListTableKnownResources$' # Check complete IDs go test -p 2 ./internal/readable -count=1 -timeout=2m -run '^TestListTableKeepsIDsAndFitsWidth$' ``` CI runs the full selection with JSON logs. The terminal-eligibility test remains excluded because it requires terminal stdin and stdout. ### Code Only `.github/workflows/help-compatibility.yml` changes. Two platform-specific steps reuse existing tests and the result verifier. `pkg/custom` tests navigation, `pkg/transformers` tests response fields, and `internal/readable` tests table formatting. The selection fills gaps in retained native evidence. Existing Linux x64 package coverage remains separate. ### Tested - Native [Windows x64](https://github.com/openai/openai-cli/actions/runs/38486117045/job/115600463633), [Windows ARM64](https://github.com/openai/openai-cli/actions/runs/38486117045/job/115600463625), [Linux ARM64](https://github.com/openai/openai-cli/actions/runs/38486117045/job/115600463842), and [macOS x64](https://github.com/openai/openai-cli/actions/runs/38486117045/job/115600463623) passed at `dd535ed`. All used SDK 3.78.0 and Go 1.26.9. - Each platform ran and passed 34 roots and 176 named subtests exactly once. All three packages passed without selected skips or failures. - Independent review checked the raw results and all 1,093 prepared source files against the candidate. - All 252 synthetic verifier controls and seven POSIX wrapper failure controls passed. All six Help compatibility jobs passed. [Main CI](https://github.com/openai/openai-cli/actions/runs/38486117000), CodeQL, and Castiron checks passed on their first attempts. The new helper steps correctly skipped Linux x64 and macOS ARM64. Those exclusions add no helper pass credit. Named subtests include nested groups. PowerShell failure injection was not run locally. These library checks do not establish terminal appearance, keyboard behavior, WSL, or race safety. Files, Batches, and Projects still do not activate compact tables or interactive navigation. Shared Models interaction and terminal eligibility remain separate. ### Demo No visual demo is needed for this CI-only change. CLI behavior and appearance stay unchanged. <!-- compatibility-parent: openai#389 --> <!-- compatibility-parent: openai#390 --> <!-- 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>
File, batch, and project lists need a compact view of each loaded API page. This change adds shared table rendering on top of the handwritten navigation prerequisite. Public API commands remain unchanged until generated page adapters are promoted through the normal compiler workflow.
What changes
The shared one-screen and tab-aware completion follow-ups are being added to #391.
Combined activation must also apply the separate quiet policy to optional summary hints while preserving records and navigation controls.
This PR prepares a dependency; it does not complete SDK-1178 or SDK-1179.
Commands
No new commands or flags. These public commands retain current-main behavior at this staged head:
The table hook applies only when the future generated adapters select automatic terminal navigation.
Explicit formats, extraction, raw output, and redirected output retain their existing interfaces.
Code
pkg/transformers/project_list_table.goselects verified fields from one loaded page.internal/readable/list_table.gorenders aligned columns using the existing Lip Gloss dependency and terminal escaping.pkg/custom/list_table.goconnects that projection to the navigation renderer.The generic renderer adds no requests and changes no original records.
This PR targets main after the navigation prerequisite merged in #389.
It adds no package, dependency, startup change, generated command, API reference, or generation checkpoint.
The models-only adapter, dispatch, projection, and demo scenes remain outside this change.
Tested
Current candidate
ff042a3rebases the same two table commits onto merged Navigationd866707.Range-diff confirms both table changes remain identical.
The updated base retains Navigation's output-failure correction and current help behavior.
Thirty focused race tests produced 128 test/subtest passes, with no skips or failures.
Two public process tests produced 44 test/subtest passes.
Three independent cancellation race tests and ten subcases passed on this exact base.
The trusted-main budget passed at 21/1,000 lines.
The normal merge queue merged
c65e03eafter queue CI passed.The first fully passing queue entry stalled; one normal retry used the identical reviewed source tree.
Windows Help hit an unchanged PowerShell deadline during that retry.
An unchanged Windows Help job retry passed.
No code, timeout, assertion, approval, or required check was changed to obtain the merge.
Earlier evidence below retains its original revision.
Independent review reproduced cancellation failures in resource projection and nested request-count validation.
The correction passes the caller context into existing summary checks and propagates their errors before fallback.
Three resource regressions and four independent phase probes fail before the fix and pass afterward.
For
203d7aa, 29 focused race tests passed, with 107 test/subtest passes and no skips.The independent race overlay passed three top-level tests and ten subcases, including a 9 MiB synthetic value.
Thirty-one public scenarios matched exact output, status, requests, and cursors across main, prerequisite, and Tables: 93 CLI invocations.
All 32 packages compiled; eight contain no tests.
The trusted current-main budget passed at 21/1,000 lines, with no added generated customization.
Earlier native macOS checks at
69679c1passed 21 command comparisons and 26 terminal-selection checks.This correction changes no terminal selection or public activation.
Individual GJSON operations and terminal rendering remain synchronous between cancellation checks.
Native Linux and Windows cancellation behavior remains unverified.
CI passed at
203d7aa; conditional queue jobs were skipped. These checks do not claim public table activation.Demo
This staged head has no visible public-command change to demonstrate.
Earlier local activated previews remain separate integration evidence with their original source identities.
The three-resource recorder requires a separately activated candidate after normal generated promotion.
Activation recording recipe.
BEGIN_COMMIT_OVERRIDE
refactor(lists): prepare compact table rendering for resource lists (#390)
END_COMMIT_OVERRIDE