Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
49b4f0e
feat(mxc): add UI policy, credentials, relay lifecycle, and proxy auth
drew Sep 17, 2026
fb2980e
fix(windows): restore MXC qualification and cold-start readiness (#3468)
prekshivyas Sep 18, 2026
4f06e23
fix(mxc): harden governed proxy lifecycle (NVBug 6783325) (#3472)
prekshivyas Sep 20, 2026
d78430c
test(mxc): verify ProcessContainer token isolation (#3430)
prekshivyas Sep 21, 2026
b2d6280
fix(windows): repair OpenClaw ProcessContainer startup (NVBug 6782898…
prekshivyas Sep 21, 2026
80b35db
fix(mxc): repair Windows inference demos (NVBug 6782874) (#3473)
prekshivyas Sep 22, 2026
3a4d4f9
test(mxc): parse OpenClaw config schema portably (#3536)
prekshivyas Sep 22, 2026
207eb56
fix(mxc): stage egress-proxy CA files regardless of env tier (#3496)
pkhodade-NV Sep 22, 2026
a69d031
test(windows): define GB300 MXC qualification contract (NVBug 6643699…
prekshivyas Sep 22, 2026
69d73a7
fix(ocsf): attribute MXC proxy events to sandboxes (#3434)
prekshivyas Sep 22, 2026
651ed7e
NVBug 6783374: make MXC HTTPS L7 qualification authoritative (#3479)
prekshivyas Sep 22, 2026
27a36b4
fix(mxc): reject a non-absolute wxc_exec_path at gateway startup (#3497)
pkhodade-NV Sep 22, 2026
37c2bae
feat(mxc): warn when the ETW consumer receives zero provider events (…
pkhodade-NV Sep 22, 2026
e084e1b
fix(server): keep Error-phase sandbox records through the prune sweep…
pkhodade-NV Sep 22, 2026
0b8f382
fix(network): normalize Windows binary paths (NVBug 6782969) (#3482)
prekshivyas Sep 22, 2026
7305209
fix(mxc): honor the generic sandbox create -- <COMMAND> syntax (#3553)
pkhodade-NV Sep 22, 2026
b031dc0
fix(mxc): reject unsupported live policy updates (#3480)
prekshivyas Sep 22, 2026
2d5c9bf
fix(network): scope Windows egress by socket owner (#3491)
prekshivyas Sep 23, 2026
ab64e84
fix(core): enforce owner-only Windows ACLs on sensitive files and dir…
pkhodade-NV Sep 23, 2026
9e397e8
fix(mxc): reject cpu/memory limits instead of silently discarding the…
pkhodade-NV Sep 23, 2026
a749bc8
docs(windows): add runtime architecture overview (#3575)
shailendra-nv Sep 23, 2026
3451e72
docs(mxc): correct isolation filesystem support (#3760)
prekshivyas Sep 28, 2026
7ba7a39
ci(windows): exercise MXC inference demos with mock API (#3780)
prekshivyas Sep 29, 2026
d6fea62
fix(mxc): add schema version to test configs (#3891)
prekshivyas Sep 29, 2026
20b0ebd
docs(mxc): clarify mapper schema versions (#3894)
prekshivyas Sep 29, 2026
4cb6054
fix(mxc): preserve JSON arguments in PowerShell 5.1 (#3893)
prekshivyas Sep 29, 2026
bd49d45
docs(mxc): document Windows host preparation (NVBug 6842834) (#3892)
prekshivyas Sep 29, 2026
d46a814
ci(windows): exercise MXC credential, audit, and aggregate E2E flows …
prekshivyas Sep 30, 2026
8f22fe8
ci(windows): run MXC host probe, WebSocket agent, and OpenClaw forwar…
araza008 Sep 30, 2026
9ceec26
fix(mxc): redact injected secrets from gateway diagnostics (#3853)
pkhodade-NV Oct 1, 2026
d1ae20a
docs(mxc): add missing demo examples for runbook and mTLS scenario (#…
pkhodade-NV Oct 1, 2026
f6ecca2
fix(mxc): authorize curl in inference policy (NVBug 6863783) (#4199)
nv-vankit Oct 6, 2026
ed35eb9
fix(mxc): refresh stale demo gateway aliases (#4192)
nv-vankit Oct 7, 2026
d89e435
feat(mxc): migrate Windows driver to schema 1.0.0 (#4252)
shailendra-nv Oct 8, 2026
fa98409
feat(mxc): relay ingress and egress through an AppContainer proxy peer
pkhodade-NV Oct 8, 2026
e726ec4
Merge origin/windows into feat/mxc-proxy-peer-relay
pkhodade-NV Oct 8, 2026
c44279a
fix(mxc): make proxy-peer mode egress-only
shailendra-nv Oct 9, 2026
701efe9
fix(mxc): authorize and release proxy peers
shailendra-nv Oct 9, 2026
572de53
test(mxc): qualify BaseContainer proxy without elevation
shailendra-nv Oct 9, 2026
aed110e
fix(mxc): tolerate post-create exec failure in openclaw forward test
pkhodade-NV Oct 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
162 changes: 140 additions & 22 deletions .agents/skills/build-openshell-mxc-windows/SKILL.md

Large diffs are not rendered by default.

21 changes: 14 additions & 7 deletions .agents/skills/build-openshell-mxc-windows/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,18 @@ maintaining the existing build-only Windows MSVC lane.
|---|---|
| `tasks/windows.toml` | Mise task definitions for `windows:*`. |
| `tasks/scripts/windows-msvc.ps1` | Visual Studio environment discovery, rustup target setup, Cargo invocation, logs, artifact report. |
| `.github/workflows/windows-msvc.yml` | PR/merge-queue lint and test plus main/manual cache seeding and dependent binary builds on native x64 and ARM64 runners. |
| `architecture/windows-msvc-build.md` | Human-readable design contract. |
| `.github/workflows/windows-msvc.yml` | Opt-in PR lint and test plus advisory main/manual cache seeding and dependent binary builds on native x64 and ARM64 runners. |
| `CONTRIBUTING.md` | Human-readable Windows build prerequisites and commands. |
| `architecture/windows.md` | Stable Windows/MXC runtime and cross-architecture boundaries. |

## Commands

Install the pinned test runner once before using test-bearing tasks:

```powershell
mise install --locked github:nextest-rs/nextest
```

Use `--skip-tools` for all Windows mise tasks:

```powershell
Expand Down Expand Up @@ -68,11 +75,11 @@ file.
For ARM64, verify the Visual Studio instance contains the ARM64 MSVC tools,
ARM64 Spectre-mitigated libraries, Clang tools, CMake tools, and a Windows SDK.
Clang supplies host-native `libclang.dll` for `bindgen` and `clang-cl.exe` for
ARM64 crypto dependencies such as `aws-lc-sys`. Native builds use the normal
bundled-Z3 CMake path. An x64-to-ARM64 check/build discovers and adds
host-native Ninja to `PATH`, builds bundled Z3 with native MSVC `cl.exe` and
the Visual Studio generator, and lets the crypto crates select `clang-cl`. Use
a short `CARGO_TARGET_DIR` if Windows path-length limits are reached.
ARM64 crypto dependencies such as `aws-lc-sys`. Native and x64-to-ARM64 builds
use the official prebuilt Z3 4.16.0 static library for the target architecture.
An x64-to-ARM64 check/build discovers and adds host-native Ninja to `PATH`,
while the crypto crates select `clang-cl`. Use a short `CARGO_TARGET_DIR` if
Windows path-length limits are reached.

## Unsupported Driver Rules

Expand Down
39 changes: 39 additions & 0 deletions .github/workflows/windows-msvc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ jobs:
rust_target: aarch64-pc-windows-msvc
runs-on: ${{ matrix.runner }}
env:
READ_ONLY_GITHUB_TOKEN: ${{ github.token }}
SCCACHE_GHA_ENABLED: "true"
SCCACHE_GHA_VERSION: windows-msvc-${{ matrix.arch }}
SCCACHE_CLIENT_SIDE: "1"
Expand Down Expand Up @@ -97,6 +98,25 @@ jobs:
run: mise run --skip-tools windows:lint:${{ matrix.arch }}
- name: Test
run: mise run --skip-tools windows:test:${{ matrix.arch }}
- name: Probe MXC host capabilities
run: mise run --skip-tools windows:e2e:mxc:host-probe
- name: Build MXC example E2E binaries
id: mxc_build
run: mise run --skip-tools windows:build:${{ matrix.arch }}
- name: Run shipped MXC provider-credential example in mock mode
run: mise run --skip-tools windows:e2e:mxc:provider-mock
- name: Run shipped MXC OCSF audit example in mock mode
run: mise run --skip-tools windows:e2e:mxc:ocsf-mock
- name: Run shipped aggregate MXC scenarios in mock mode
run: mise run --skip-tools windows:e2e:mxc:aggregate-mock
- name: Run shipped MXC inference examples with mock API
run: mise run --skip-tools windows:e2e:mxc:inference-mock:${{ matrix.arch }}
- name: Run MXC WebSocket agent example in mock mode
if: ${{ !cancelled() && steps.mxc_build.outcome == 'success' }}
run: mise run --skip-tools windows:e2e:mxc:ws-agent-mock
- name: Run MXC OpenClaw forward example in mock mode
if: ${{ !cancelled() && steps.mxc_build.outcome == 'success' }}
run: mise run --skip-tools windows:e2e:mxc:openclaw-forward-mock
- name: sccache stats
if: always()
run: sccache --show-stats
Expand All @@ -121,6 +141,7 @@ jobs:
rust_target: aarch64-pc-windows-msvc
runs-on: ${{ matrix.runner }}
env:
READ_ONLY_GITHUB_TOKEN: ${{ github.token }}
SCCACHE_GHA_ENABLED: "true"
SCCACHE_GHA_VERSION: windows-msvc-${{ matrix.arch }}
SCCACHE_CLIENT_SIDE: "1"
Expand Down Expand Up @@ -178,6 +199,7 @@ jobs:
rust_target: aarch64-pc-windows-msvc
runs-on: ${{ matrix.runner }}
env:
READ_ONLY_GITHUB_TOKEN: ${{ github.token }}
SCCACHE_GHA_ENABLED: "true"
SCCACHE_GHA_VERSION: windows-msvc-${{ matrix.arch }}
SCCACHE_CLIENT_SIDE: "1"
Expand Down Expand Up @@ -206,8 +228,25 @@ jobs:
cache-targets: "true"
cache-on-failure: "true"
cache-bin: "false"
- name: Probe MXC host capabilities
run: mise run --skip-tools windows:e2e:mxc:host-probe
- name: Build release binaries
id: mxc_build
run: mise run --skip-tools windows:build:${{ matrix.arch }}
- name: Run shipped MXC provider-credential example in mock mode
run: mise run --skip-tools windows:e2e:mxc:provider-mock
- name: Run shipped MXC OCSF audit example in mock mode
run: mise run --skip-tools windows:e2e:mxc:ocsf-mock
- name: Run shipped aggregate MXC scenarios in mock mode
run: mise run --skip-tools windows:e2e:mxc:aggregate-mock
- name: Run shipped MXC inference examples with mock API
run: mise run --skip-tools windows:e2e:mxc:inference-mock:${{ matrix.arch }}
- name: Run MXC WebSocket agent example in mock mode
if: ${{ !cancelled() && steps.mxc_build.outcome == 'success' }}
run: mise run --skip-tools windows:e2e:mxc:ws-agent-mock
- name: Run MXC OpenClaw forward example in mock mode
if: ${{ !cancelled() && steps.mxc_build.outcome == 'success' }}
run: mise run --skip-tools windows:e2e:mxc:openclaw-forward-mock
- name: sccache stats
if: always()
run: sccache --show-stats
1 change: 1 addition & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ These pipelines connect skills into end-to-end workflows. Individual skill files
| `crates/openshell-driver-podman/` | Podman compute driver | In-process `ComputeDriver` backend for local Podman sandbox containers |
| `crates/openshell-driver-vm/` | VM compute driver | Standalone libkrun-backed `ComputeDriver` subprocess (embeds its own rootfs + runtime) |
| `crates/openshell-driver-mxc/` | Microsoft MXC compute driver | In-process Windows AppContainer and isolation-session compute backend |
| `crates/openshell-supervisor-relay/` | MXC supervisor relay | **Windows-only** standalone binary the MXC driver spawns inside a ProcessContainer/isolation session in place of `agent_command`; launches the real target process, exposes a JSON control channel (launch/shutdown/forward) over its own inherited stdin/stdout, and bridges dynamic TCP forwards (`openshell forward service`) to it |
| `crates/openshell-prover/` | Policy prover | Policy verification and proof generation |
| `crates/openshell-server-macros/` | Server macros | Compile-time helpers for gateway RPC authorization |
| `crates/openshell-supervisor-middleware/` | Middleware runtime | Generic middleware registry, remote service integration, and chain execution |
Expand Down
71 changes: 56 additions & 15 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -340,14 +340,19 @@ cargo build -p openshell-prover --features bundled-z3

For x86-64 and ARM64 Windows MSVC builds, use one of these Z3 paths:

- Bundled Z3 (the default for `windows:*` tasks): `z3-sys` builds Z3 from
source and links it into the OpenShell binaries. This keeps the release
executables independent of `libz3.dll` when they are copied to another host.
- Prebuilt Z3 (the default for `windows:*` tasks): `z3-sys` downloads the
pinned Z3 4.16.0 GitHub release for the target architecture on the first
build. Cargo reuses the extracted archive from its target directory. Windows
CI authenticates the GitHub API request with `READ_ONLY_GITHUB_TOKEN` and
preserves the archive in the architecture-specific Cargo target cache. For
cold local builds, you may set `READ_ONLY_GITHUB_TOKEN` to avoid anonymous
GitHub API rate limits.
- System Z3: point `Z3_LIBRARY_PATH_OVERRIDE` at the directory containing the
target-compatible MSVC Z3 library and `Z3_SYS_Z3_HEADER` at the full path to
`z3.h`. The `windows:*` tasks use this path automatically when
`Z3_LIBRARY_PATH_OVERRIDE` is set. Deploy the matching `libz3.dll` with any
binaries built against a dynamic system Z3.
target-compatible MSVC Z3 library and `Z3_SYS_Z3_HEADER` at the full path to `z3.h`.
The `windows:*` tasks use this path automatically when `Z3_LIBRARY_PATH_OVERRIDE`
is set.
- Bundled Z3: for direct Cargo builds, pass `--features bundled-z3` so `z3-sys`
builds Z3 from source.

`openshell-prover` itself has no `bindgen`/`libclang` dependency, so building
just this crate does not require `LIBCLANG_PATH`:
Expand All @@ -356,21 +361,57 @@ just this crate does not require `LIBCLANG_PATH`:
cargo build -p openshell-prover --target x86_64-pc-windows-msvc --features bundled-z3
```

### Windows full build
### Windows build and validation

To build the full set of Windows binaries, including `openshell-gateway.exe`
and `openshell.exe`, use the `windows:build:x64` mise task instead of a
single-crate `cargo build`. It builds Z3 from source (bundled) by default. A full
build also compiles crates that use `bindgen` (e.g. the MXC driver on Windows),
so it requires `libclang.dll`; if LLVM is not on the default search path, set
`LIBCLANG_PATH` to the directory containing `libclang.dll`:
Use the platform-native `windows:*` mise tasks for Windows MSVC development.
The lane supports x64 and ARM64 and builds `openshell-gateway.exe`,
`openshell.exe`, `openshell-supervisor-relay.exe`, and
`openshell-mxc-peer.exe`. It does not enable Docker, Kubernetes, Podman, or
VM-backed execution on Windows.

Install Visual Studio C++ Build Tools, a compatible Windows SDK, Rust through
rustup, mise, and the Visual Studio LLVM tools used by `bindgen`. Test-bearing
tasks also require the pinned `cargo-nextest` tool. Install it once through
mise:

```powershell
mise install --locked github:nextest-rs/nextest
```

Run every task with `--skip-tools`; mise orchestrates the commands but does not
install the Windows compiler toolchain.

| Task | Purpose |
|---|---|
| `windows:lint:<x64\|arm64>` | Run Clippy for the Windows-supported workspace on the selected target architecture. |
| `windows:build:<x64\|arm64>` | Build the four Windows release executables. |
| `windows:test:<x64\|arm64>` | Run the workspace suite natively; the target must match the host architecture. |
| `windows:test:unsupported:<x64\|arm64>` | Run the focused unsupported-driver contracts. |
| `windows:test:mxc-real:<x64\|arm64>` | Run the probe-gated real-`wxc-exec` integration suite on the matching host. |
| `windows:artifacts` | Report sizes and SHA256 hashes for release artifacts. |
| `windows:ci` | Run the aggregate x64-host check, build, test, contract, and artifact workflow. |

The task definitions in [`tasks/windows.toml`](tasks/windows.toml), the
PowerShell implementation in
[`tasks/scripts/windows-msvc.ps1`](tasks/scripts/windows-msvc.ps1), and the
hosted workflow in
[`.github/workflows/windows-msvc.yml`](.github/workflows/windows-msvc.yml) are
the executable sources of truth. See
[`architecture/windows.md`](architecture/windows.md) for the stable Windows/MXC
runtime and enforcement boundaries.

To build x64 locally, use `windows:build:x64` instead of a single-crate Cargo
build. It downloads the pinned prebuilt Z3 release by default. A full build also
compiles crates that use `bindgen`, including the MXC driver, so it requires
`libclang.dll`. If LLVM is not on the default search path, set `LIBCLANG_PATH`
to the directory containing `libclang.dll`:

```powershell
$env:LIBCLANG_PATH='C:\Program Files\Microsoft Visual Studio\2022\<Edition>\VC\Tools\Llvm\x64\bin'
mise run --skip-tools windows:build:x64
```

To use a local x64 Z3 release instead of the bundled build, set
To use a local x64 Z3 release instead of the prebuilt download, set
`Z3_LIBRARY_PATH_OVERRIDE` and `Z3_SYS_Z3_HEADER` before running the task:

```powershell
Expand Down
19 changes: 19 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ terminal-colorsaurus = "1.0"
miette = { version = "7", features = ["fancy"] }
thiserror = "2"

# Windows platform APIs (ETW/TDH audit consumer in openshell-driver-mxc; Windows-only)
windows = { version = "0.62", features = ["Wdk_System_Threading", "Win32_Foundation", "Win32_System_Diagnostics_Etw", "Win32_System_Time"] }
# Windows platform APIs (MXC audit, host-proxy process identity, ACL enforcement; Windows-only)
windows = { version = "0.62", features = ["Wdk_System_Threading", "Win32_Foundation", "Win32_NetworkManagement_IpHelper", "Win32_Networking_WinSock", "Win32_Security", "Win32_Security_Authorization", "Win32_Security_Isolation", "Win32_Storage_FileSystem", "Win32_System_Diagnostics_Etw", "Win32_System_Memory", "Win32_System_SystemServices", "Win32_System_Threading", "Win32_System_Time"] }
anyhow = "1"

# Logging/Tracing
Expand Down
Loading
Loading