Commit Graph
16 Commits
Author SHA1 Message Date
zm-oai d2d5b70241 Preserve precedence across feature requirement aliases (#42863)
## Why

Requirements layers may use either `features` or its `feature_requirements`
alias. Treating those names as separate tables prevents feature settings from
merging consistently across layers.

## What changed

Normalize `feature_requirements` to `features` after validating each layer so
mixed aliases share one merge path and retain layer precedence.

## Testing

Add coverage for both alias orderings across low- and high-priority layers.

GitOrigin-RevId: e23ad3e0853b8b49ca10447875f33706de39bcfe
2026-09-04 21:53:08 +00:00
zm-oai a482e65b86 Preserve Windows managed deny reads in the sandbox CLI (#42835)
## Why

Windows sandbox setup reconciles persistent deny ACLs against the paths supplied for a session. The `codex sandbox --permission-profile` path supplied an empty list, which could discard the profile's deny-read restrictions.

## What changed

Resolve deny-read paths from the selected permission profile and workspace roots before starting a Windows sandbox session, and pass them through to setup.

## Testing

Add a Windows CLI integration test that launches the same managed-deny profile twice and verifies that denied file reads and DLL loads remain blocked while allowed access still works.

GitOrigin-RevId: 6ec8b6a13a33b862d7b152eadbbdde3146de4b7d
2026-09-04 19:40:01 +00:00
zm-oai f1aac1e885 Preserve SystemRoot for Windows sandbox wrapper setup (#42833)
## Why

`ShellExecuteExW` needs `SystemRoot` to elevate the Windows sandbox setup helper.

## What changed

Add `SYSTEMROOT` to the environment variables copied from the host for wrapper
setup. Keep the serialized inner command environment unchanged so the host value
is available only to the wrapper.

## Testing

Extend Windows sandbox manager tests to cover case-insensitive replacement of
`SystemRoot` and verify that it is excluded from the inner command environment.

GitOrigin-RevId: c69f9f92665e97a178e2de488fbb9fd6b7ff7ac6
2026-09-04 19:22:34 +00:00
zm-oai 387bc6ba59 Report managed filesystem policy in codex doctor (#42821)
## What changed

- Load doctor configuration through the cloud-aware CLI configuration path while preserving invocation overrides such as `--cd`.
- Report configuration load time and clarify that diagnostics cover invocation configuration, including cloud-managed policy, but not active thread overrides.
- Add redacted filesystem sandbox diagnostics for denied-read rule counts, glob rule counts, glob scan depth, and the managed policy source.

## Testing

Add an integration test that verifies valid cloud-managed filesystem requirements are reported without exposing denied paths, and invalid requirements fail the configuration check.

GitOrigin-RevId: 65c3c9ad3fd42c1579ca0c9d8e209066f98e5407
2026-09-04 18:23:10 +00:00
zm-oai dc031d4bc7 Expose the PowerShell version in environment context (#41232)
## What changed

- Add the under-development `powershell_shell_version` feature flag.
- When enabled for a single local PowerShell environment, query the selected
  shell executable and include its major/minor version in
  `<environment_context>`.
- Cache version lookups, bound command execution and output, and report when a
  previously visible version becomes unavailable.

## Testing

- Cover environment-context diffs when the shell version appears or disappears.
- Verify on Windows that the version is model-visible only when the feature is
  enabled.

GitOrigin-RevId: 3ec8e80425ec3c193134dc1b69f61ef09ede375e
2026-08-28 00:22:05 +00:00
zm-oai 426fa8cdab Use compatible PowerShell for elevated Windows sandbox commands (#41227)
## Why

Microsoft Store PowerShell executables under `WindowsApps` can be inaccessible to the dedicated elevated sandbox account.

## What changed

- For local elevated sandbox commands that target Store PowerShell, select the first compatible `pwsh.exe` or `powershell.exe` from `PATH` or the standard fallback locations.
- Continue adding `-NoProfile`, and preserve the selected shell for remote execution and other sandbox modes.

## Testing

Added unit coverage for Store-path filtering, fallback ordering, local replacement, and remote-path preservation.

GitOrigin-RevId: 8ab3d0db925e886879701445040f13902fb1ad24
2026-08-27 23:58:09 +00:00
zm-oai 21c58c90f2 Harden Windows sandbox helper cleanup (#40808)
## Why

Windows filesystem operations can complete while their helper process remains
alive, and elevated sandbox processes must not survive a disconnected control
pipe.

## What changed

- Read newline-delimited filesystem helper responses without imposing an
  operation deadline, then bound the time spent reaping the helper.
- Drain helper stderr concurrently, retain a bounded diagnostic on failure, and
  kill helpers that do not exit after responding.
- Terminate the elevated runner's job or process when its input pipe closes or
  fails.

## Testing

Added coverage for delayed responses, noisy stderr, stuck helpers, duplicated
file handles, and termination of elevated descendants after a control-pipe
disconnect.

GitOrigin-RevId: c0d3d5d76e13318de17638df4db71fcfb9a7397f
2026-08-26 06:02:56 +00:00
zm-oai d52478c52e Preserve Unicode paths in Windows batch aliases (#40570)
## Why

Windows batch aliases can fail to invoke Codex when the executable path contains
characters that are not representable in the active console code page.

## What changed

- Generate same-volume executable paths relative to the batch file using `%~dp0`.
- Keep absolute paths as a fallback when the executable and alias are on different
  volumes.

## Testing

Added Windows tests covering a Unicode profile path under code page 437 and an
executable on a different volume.

GitOrigin-RevId: 10093bbc9f19e4fbe2e22d9397e211a113302f45
2026-08-25 07:37:42 +00:00
zm-oai a12c4f4c01 Preserve Windows root reads with deny-read rules (#40441)
## What changed

- Detect readable symbolic `:root` entries separately from effective full-disk access so narrower deny-read rules do not disable the Windows sandbox's broad-read setup.
- Add explicit readable roots to that setup while omitting the filesystem root itself, and prevent read roots at or below denied paths from being granted access.

## Testing

- Extend the elevated Windows sandbox integration test to verify that an allowed bundled skill under the user profile remains readable while exact and glob-based secrets stay denied.

GitOrigin-RevId: 8f6f267b78718b9e8609a9205c489f253f478491
2026-08-24 17:29:21 +00:00
zm-oai 0d9bb6c34c Harden Windows file URI conversion (#40423)
## What changed

- Recognize percent-encoded drive colons when inferring Windows paths, rendering
  native path strings, and resolving same-drive relative joins.
- Reject Windows file URIs with percent-encoded `/` or `\` separators before
  converting them to native absolute paths, so decoding cannot reinterpret URI
  segment boundaries.

## Testing

- Cover uppercase and lowercase encodings for drive colons and path separators,
  including local-drive and UNC file URIs.

GitOrigin-RevId: ecb6c92f4ef1af73f85e57a135abf6bc5bb968dc
2026-08-24 15:54:16 +00:00
zm-oai 41ab01a2ea Fix elevated Windows sandbox setup activation (#39971)
## Why

Sandbox setup runs on a Tokio worker thread without a Windows message loop, so
`ShellExecuteExW` requires synchronous activation when launching the elevated
setup helper.

## What changed

Add `SEE_MASK_NOASYNC` to the shell execution flags while retaining
`SEE_MASK_NOCLOSEPROCESS` for helper process tracking.

GitOrigin-RevId: 875cc1d49bb19f92f940633b6315711143beeae7
2026-08-21 16:56:42 +00:00
zm-oai 3cde5d4ccd Preserve WINDIR in core Windows shell environments (#39809)
## What changed

- Add `WINDIR` to the Windows core environment variable allowlist.
- Extend the Windows core-inheritance test to verify that a case-variant
  `WinDir` entry is retained.

GitOrigin-RevId: 0305d8fa882ba2705a7ce7661098cedac1339c43
2026-08-20 23:14:32 +00:00
zm-oai ab82cddd04 Resolve bundled Windows helpers through bin junctions (#39649)
## Why

Installer `bin` directories can be junctions, so looking for bundled helpers
relative to the apparent executable path can miss the package's
`codex-resources` directory.

## What changed

Retry bundled executable lookup from the canonical executable path when lookup
from the original path fails.

## Testing

Add a Windows regression test that creates a `bin` junction and verifies that
the sandbox setup helper is resolved from the package resources directory.

GitOrigin-RevId: f2f20ce1ccfa95ae65171a03a986d10e2560e696
2026-08-20 07:42:18 +00:00
zm-oai 104e25ac5a Grant Windows sandbox access to the Codex app root (#38064)
## What changed

- Apply the sandbox read/execute ACL to the local Codex application root so it
  inherits across its contents, while continuing to handle the managed runtime
  cache separately.
- Skip missing paths, non-directories, and directory reparse points before
  inspecting or updating ACLs.
- Update the runtime path test to expect the application root.

GitOrigin-RevId: 34f2946d2140f8ea2b76c449b0e5542b99cb6f70
2026-08-11 19:48:38 +00:00
zm-oai 95637f7056 Add managed policy for in-app updates (#35537)
## What changed

- Add the stable, default-enabled `in_app_updates` requirements-only feature.
- Allow administrators to disable in-app updates through `[features]` in `requirements.toml`.
- Expose the policy through `configRequirements/read` and include it in the config schema.

## Testing

- Verify that in-app updates are enabled by default and disabled by the managed requirement.
- Verify that `configRequirements/read` returns the configured policy.

GitOrigin-RevId: e9c7074b516fe58385fdf7dc8420c0109c0c3df6
2026-07-27 02:16:11 +00:00
zm-oai 87f3e39fdf Hide Windows filesystem helper console windows (#32849)
## What changed

- Add a console mode to the Windows sandbox process launcher.
- Launch `--codex-run-as-fs-helper` subprocesses with `CREATE_NO_WINDOW`.
- Preserve inherited-console behavior for regular sandboxed commands.

GitOrigin-RevId: 927be36b82903b6a5fb1a243ba7f406f9ed85f3f
2026-07-13 18:25:55 +00:00