fix(cmd): include backslash in path detection for @ file references - #38
Conversation
jbeckwith-oai
left a comment
There was a problem hiding this comment.
Reviewed the backslash path heuristic and both embedding modes; no blocking issues found. Focused TestEmbedFiles tests, go vet ./pkg/..., gofmt, and git diff --check passed. Full package tests require the repository mock server on localhost:4010, which was not running.
|
@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. |
|
Codex Review: Didn't find any major issues. Can't wait for the next one! 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". |
|
Security 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. |
saioai
left a comment
There was a problem hiding this comment.
i checked the updated branch. on macOS, \ is valid in a filename, but this change makes a missing @subfolder\missingfile error in both embedding modes. please make the backslash check Windows-only, test the macOS literal fallback and Windows error in both modes, then run CI on the fix.
Backslash is a valid filename character on macOS and Linux, so a missing @subfolder\missingfile should keep falling back to the literal value there. Thread the target OS through embedFiles so both embedding modes are tested for the darwin literal fallback and the Windows error.
Castiron custom code✅ No new custom-code files detected. 5 mixed files remain; 0 existing customizations changed. Compared 5 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 35250673610 --repo openai/openai-cli \
--name castiron-custom-code-35250673610-1 --dir /tmp/castiron-custom-code-35250673610-1
git apply --stat /tmp/castiron-custom-code-35250673610-1/custom-code.patch
cat /tmp/castiron-custom-code-35250673610-1/custom-code.patchOr reproduce it from an SDK checkout containing the vendored reporter: git fetch --no-tags origin 25664bffc86ac956e69b4f4fd9f96ec28baf93ca b6ce984dfdaa11f2ed9ade2ec5f3aa71ec509835
python3 scripts/castiron/custom_code_report.py report \
--base 25664bffc86ac956e69b4f4fd9f96ec28baf93ca \
--head b6ce984dfdaa11f2ed9ade2ec5f3aa71ec509835 --fetch --require-head-hash --public \
--out /tmp/castiron-custom-code-b6ce984dfdaa
cat /tmp/castiron-custom-code-b6ce984dfdaa/custom-code.patchThis is the current full custom patch for mixed files, not an attribution of only the handwritten lines changed by this PR. |
saioai
left a comment
There was a problem hiding this comment.
approving. the backslash check is now windows-only, with tests for both embedding modes. this addresses my earlier concern about macOS literals.
Automated Release PR --- ## [1.16.0](openai/openai-cli@v1.15.0...v1.16.0) (2026-09-22) ### Features * **api:** add external storage and safety case commands ([openai#229](openai#229)) ([c30c961](openai@c30c961)) * **api:** add prompt-cache prewarming ([openai#196](openai#196)) ([9032f58](openai@9032f58)) * **api:** add response transformation hooks ([openai#223](openai#223)) ([8de34a7](openai@8de34a7)) * **api:** add webhook endpoint management ([openai#201](openai#201)) ([dea465a](openai@dea465a)) * **cli:** support custom request headers ([openai#190](openai#190)) ([07e3ed9](openai@07e3ed9)) ### Bug Fixes * **apiform:** preserve float32 precision in comma arrays ([openai#78](openai#78)) ([774612f](openai@774612f)) * **apiform:** strip path components from upload filenames ([openai#120](openai#120)) ([a92e143](openai@a92e143)) * **apiform:** support primitive pointers in comma arrays ([openai#119](openai#119)) ([9d146cd](openai@9d146cd)) * **apiquery:** preserve narrow numeric parameters ([openai#76](openai#76)) ([b152780](openai@b152780)) * **apiquery:** reject complex elements in comma arrays ([openai#118](openai#118)) ([46faf2c](openai@46faf2c)) * **apiquery:** reject non-string map keys ([openai#88](openai#88)) ([687a097](openai@687a097)) * **autocomplete:** omit hidden flags from suggestions ([openai#122](openai#122)) ([137d59b](openai@137d59b)) * **cmd:** include backslash in path detection for @ file references ([openai#38](openai#38)) ([f984eb1](openai@f984eb1)) * **debug:** redact sensitive response headers ([openai#32](openai#32)) ([ee62f85](openai@ee62f85)) * **explore:** avoid panic when printing an empty result set ([openai#68](openai#68)) ([f74838c](openai@f74838c)) * install Linux package binaries under /usr/bin ([openai#34](openai#34)) ([ac4e7cb](openai@ac4e7cb)) * **jsonview:** avoid width underflow in static string rendering ([openai#117](openai#117)) ([cbdf265](openai@cbdf265)) * **jsonview:** preserve literal object keys in pretty output and explorer ([openai#143](openai#143)) ([25664bf](openai@25664bf)) * omit redirect destinations from multipart upload errors ([openai#189](openai#189)) ([642d511](openai@642d511)) * **output:** stop pagination at max items ([openai#43](openai#43)) ([552840e](openai@552840e)) * **requestflag:** preserve JSON numbers written in exponent form ([openai#195](openai#195)) ([20db45e](openai@20db45e)) ### Chores * **api:** clarify Live SIP call help ([openai#193](openai#193)) ([79435c4](openai@79435c4)) * **api:** document MCP connector deprecation ([openai#202](openai#202)) ([1d4e76c](openai@1d4e76c)) * **api:** update image request examples ([openai#197](openai#197)) ([4b75e9b](openai@4b75e9b)) * **deps:** bump the codeql group across 1 directory with 2 updates ([openai#161](openai#161)) ([97734f3](openai@97734f3)) * **deps:** bump the codeql group across 1 directory with 2 updates ([openai#224](openai#224)) ([0713595](openai@0713595)) * **deps:** bump the go-minor-and-patch group across 1 directory with 2 updates ([openai#144](openai#144)) ([aa1158d](openai@aa1158d)) * **deps:** update openai-go to v3.61.0 ([openai#184](openai#184)) ([de52b2e](openai@de52b2e)) * **deps:** update openai-go to v3.63.0 ([openai#198](openai#198)) ([3f2c883](openai@3f2c883)) * **deps:** update openai-go to v3.63.1 ([openai#204](openai#204)) ([eb415e5](openai@eb415e5)) * **deps:** update openai-go to v3.64.0 ([openai#206](openai#206)) ([0169bff](openai@0169bff)) * **deps:** update openai-go to v3.64.2 ([openai#225](openai#225)) ([a7859e5](openai@a7859e5)) ### Documentation * correct bootstrap dependency check description ([openai#181](openai#181)) ([4aa657c](openai@4aa657c)) --- 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> Co-authored-by: saioai <vguvvala@openai.com>
Observed Behavior
When passing an
@file reference containing backslash path separators (such as@subfolder\\unreadablefileor Windows paths without a file extension) that fails to open,embedFilesValueinpkg/cmd/flagoptions.godid not recognize\\as a path separator. As a result,probablyFile/expectsFileevaluated tofalse, silently falling back to treating the unreadable file path as a raw string literal ("@subfolder\\\\unreadablefile") instead of surfacing a file read error.Root Cause
probablyFileandexpectsFilechecks inpkg/cmd/flagoptions.go(lines 237 and 265) checked for.and/(strings.Contains(filename, ".") || strings.Contains(filename, "/")), but omitted\\(strings.Contains(filename, "\\\\")).Implementation
Updated path detection in
embedFilesValue(pkg/cmd/flagoptions.go) to also check for\\(strings.Contains(filename, "\\\\")), ensuring paths using backslashes are recognized as file references when handling unreadable file errors.Regression Coverage
Added unit test case
"non-existent file with backslash path @ prefix (error)"inpkg/cmd/flagoptions_test.goto assert that unreadable backslash path references properly return a file reading error instead of falling back to a raw string literal.Exact Validation Commands & Results
go test ./pkg/cmd -run TestEmbedFiles-> Passedgo test ./internal/...-> Passedgo vet ./internal/... ./pkg/...-> Passed (clean)git diff --check-> Passed (clean)Limitations or Untested Platforms
None.
Unrelated Changes
No unrelated changes were included.