Skip to content

chore: force-sync upstream (main) - #15

Merged
ashsolei merged 596 commits into
mainfrom
chore/force-sync-upstream
Jul 21, 2026
Merged

chore: force-sync upstream (main)#15
ashsolei merged 596 commits into
mainfrom
chore/force-sync-upstream

Conversation

@ashsolei

Copy link
Copy Markdown

Force-merge -X theirs + iAiFy overlay re-application (wave4-5 runbook). Pre-sync main=16ef5c5c12d527e1eb5d50338f216c210459bf64. Fleet sync 2026-07-19.

mrunalp and others added 30 commits May 27, 2026 14:14
… enforce at the router (NVIDIA#1596)

* feat(server): per-handler gRPC auth annotations

Move scope, role, and auth-mode metadata to the handler definition site
via #[rpc_authz] + #[rpc_auth] proc macros. The previously hand-maintained
SCOPED_METHODS, ADMIN_METHODS, UNAUTHENTICATED_METHODS, and
ALLOWED_SANDBOX_METHODS tables are now generated from per-method
annotations on the tonic service impls, with canonical gRPC paths
derived from the service name and method name.

Adds a new openshell-server-macros proc-macro crate, an aggregator in
auth/method_authz.rs, and an exhaustiveness test that decodes the
protobuf FileDescriptorSet (now emitted by openshell-core/build.rs) and
verifies every RPC has an annotation.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* refactor(server): rename `sandbox-secret` auth mode to `sandbox`

PR NVIDIA#1404 replaced the shared sandbox secret with per-sandbox
gateway-minted JWTs. A handler marked `sandbox` now authenticates as a
specific `Principal::Sandbox`, not as a holder of a shared credential.

Rename `auth = "sandbox-secret"` to `auth = "sandbox"` and
`AuthMode::SandboxSecret` to `AuthMode::Sandbox` so the name matches
the post-NVIDIA#1404 identity model.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* fix(server): enforce per-handler AuthMode at the router

Addresses review feedback on the per-handler auth-annotation work.

- Router-level enforcement of #[rpc_auth] auth mode (HIGH). The previous
  router only checked is_sandbox_callable() for Principal::Sandbox; user
  principals still flowed into AuthzPolicy::check() and bypassed the
  per-handler declaration. A user with `openshell:all` could therefore
  reach `sandbox`-only handlers like GetSandboxProviderEnvironment,
  ReportPolicyStatus, PushSandboxLogs, and SubmitPolicyAnalysis even
  though their annotations said sandbox-only. Adds an
  is_user_callable() predicate and rejects User principals at the
  router for `sandbox` / `unauthenticated` methods.

- Proc macro now errors on duplicate keys in #[rpc_auth(...)] (LOW). A
  second `auth`, `scope`, or `role` previously silently overwrote the
  first value; now it fails to compile.

- Regression tests: a unit test for is_user_callable() and a router
  test that proves a user with admin role + openshell:all cannot reach
  the nine sandbox-only handlers.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* docs(server): finish renaming sandbox-secret to sandbox in method_authz doc comments

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* refactor(server-macros): drop standalone `rpc_auth` stub

The stub was a safety net that fired only when a method had
`#[rpc_auth(...)]` without an enclosing `#[rpc_authz]`. Triggering it
required `rpc_auth` to be imported, which is why both call sites carried
`#[allow(unused_imports)] use openshell_server_macros::{rpc_auth, rpc_authz};`.

Drop the stub and the unused-import workaround. A missing `#[rpc_authz]`
now surfaces as rustc's standard "cannot find attribute `rpc_auth` in
this scope" — clear enough, and one fewer import + lint exception.

Addresses review comment on PR NVIDIA#1596.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* refactor(server-macros): emit fixed `AUTH_METADATA` const per service

The previous trait-derived const name turned `OpenShell` into
`OPEN_SHELL_AUTH_METADATA`, splitting the project name across an
underscore. Each impl already lives in its own module
(`crate::grpc::`, `crate::inference::`), so the module path is enough
to disambiguate between services — a fixed `AUTH_METADATA` name reads
more naturally.

Aggregator in `auth/method_authz.rs` now references
`crate::grpc::AUTH_METADATA` and `crate::inference::AUTH_METADATA`
directly.

Addresses review comment on PR NVIDIA#1596.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* docs(server-macros): fix typo in AUTH_METADATA_CONST doc comment

OpenShell is one word; reference name in the doc should be
OPENSHELL_AUTH_METADATA, not OPEN_SHELL_AUTH_METADATA.

Addresses review nit on PR NVIDIA#1596.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

---------

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
…IA#1615)

- Extract landing-page terminal demo into a reusable <CommandTerminal />
  component with inline styles (no global CSS dependency)
- Animate a second command line cycling through claude/opencode/codex
  via @Keyframes scoped inside the component
- Inline BadgeLinks layout styles so the component renders correctly
  without relying on .badge-links from main.css
- Add jsx.d.ts shim so editors do not flag the React global in component
  TSX files
- Switch fern instance to global-theme: nvidia with multi-source enabled
- Bump fern CLI to 5.40.0 and drop the basepath-aware experimental flag
- Register fern/components/ as a second mdx-components directory
- Remove the unused Adobe analytics script tag
Signed-off-by: Calum Murray <cmurray@redhat.com>
Signed-off-by: Calum Murray <cmurray@redhat.com>
* feat(helm): add optional PostgreSQL backing store with Secret-based credentials

- Add postgres.enabled and postgres.deploy values to control database
  backend (SQLite vs PostgreSQL) and subchart deployment independently.
- Introduce db-secret.yaml template for Opaque Secret with assembled
  postgresql:// connection string injected via OPENSHELL_DB_URL env var.
- Add Bitnami PostgreSQL as optional subchart dependency keyed on
  postgres.deploy to prevent subchart deployment in external mode.
- Externalize JWT signing key file mode via sandboxJwt.secretDefaultMode
  with 0400 default matching upstream.
- Add validation guard for postgres.deploy=true without postgres.enabled.
- Add helm unit tests covering internal, external, URL-override, special
  character encoding, and misconfiguration error paths.
- Update README with Kubernetes and OpenShift install examples for
  bundled and external PostgreSQL configurations.
- Add helm dependency build to lint and unittest tasks.

* fix(helm): add database backend docs to README.md.gotmpl and regenerate

The helm-docs CI check failed because the Database backend section was
added directly to README.md instead of README.md.gotmpl. Move the
content to the template and regenerate so the check passes.

* fix(helm): use Secret-based DB credentials and support existingSecret

Replace the inline db-url stringData pattern with a proper Secret
containing individual fields plus a uri key.  When postgres.deploy=true
the Bitnami service-binding secret is referenced directly; when
deploy=false users can supply postgres.external.existingSecret to
bring their own Secret, or let the chart generate one from the external
field values.

Also restructures the README database section for clarity, adds
helm-unittest coverage for the new secret resolution paths, and
fixes a markdown lint issue in the root README.

* refactor(helm): move OpenShift e2e script to e2e/rust/ and add mise task

Move test-openshift-scenarios.sh from deploy/helm/openshell/ci/ to
e2e/rust/e2e-openshift.sh, matching the existing e2e script naming
convention. Register it as `e2e:openshift` in tasks/test.toml — not
wired into the `test` or `e2e` aggregates so it only runs on explicit
invocation against a live OpenShift cluster.

* feat(e2e): add database backend scenarios to Kubernetes e2e

Extend with-kube-gateway.sh with an optional multi-scenario loop gated
by OPENSHELL_E2E_KUBE_DB_SCENARIOS=1. When enabled, the script installs
the Helm chart three times — SQLite (default), bundled PostgreSQL, and
external PostgreSQL with existingSecret — running the full test suite
against each backend. When unset, existing single-install behavior is
unchanged.

Also adds helm dependency build before helm install, fixing CI failures
caused by the missing PostgreSQL subchart dependency.

* refactor(helm): simplify PostgreSQL config to two orthogonal controls

Replace postgres.deploy and postgres.external.* with two simple controls:
- postgres.enabled: deploy the bundled Bitnami PostgreSQL subchart
- server.externalDbSecret: name of a pre-existing Secret with a uri key

Delete db-secret.yaml — the chart no longer generates Secrets from
individual credential fields. Users either get the Bitnami service-binding
secret (bundled) or bring their own via server.externalDbSecret.

Add validation that postgres.serviceBindings.enabled must stay true
when using bundled PostgreSQL, preventing a confusing runtime failure.
* feat(build): add simple nix flake with formatter for nix code

* feat(flake): setup rust toolchain, able to build and run unit tests

* feat(flake): add support for arm linux and macos

* feat(toolchain): add rust-src and rust-analyzer to the toolchain
…VIDIA#1565)

* refactor(proto): move phase and current_policy_version into SandboxStatus

Move phase and current_policy_version from SandboxSpec into
SandboxStatus to correctly model mutable runtime state. Update all
callers in the gateway server, TUI, and Python SDK to read and write
these fields through SandboxStatus accessors.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(server): preserve sandbox status on statusless driver updates

When a driver update arrives without a status payload (e.g. before
Kubernetes populates the status subresource), preserve the stored
phase, conditions, and current policy version instead of resetting
them. Adds a regression test covering the edge case.

Signed-off-by: Derek Carr <decarr@redhat.com>

---------

Signed-off-by: Derek Carr <decarr@redhat.com>
)

* feat(python-sdk): support OIDC Bearer auth on SandboxClient

PR NVIDIA#1596 hardened the gateway side of the OIDC story; the Python SDK
was the remaining gap — it only supported plaintext or mTLS, with no
Bearer metadata anywhere. Deployments with OIDC enabled (the
recommended posture since PR NVIDIA#935 / PR NVIDIA#1404) were unreachable from
the SDK.

Adds:

- `bearer_token: str | Callable[[], str] | None` kwarg on
  `SandboxClient`. Static strings or zero-arg callables (the latter
  is invoked per RPC, so callers can drop in a refresh loop or
  token-file watcher without reconstructing the client). Composes
  with `tls` for OIDC-over-mTLS deployments.
- `_BearerAuthInterceptor` implementing all four
  `grpc.{Unary,Stream}{Unary,Stream}ClientInterceptor` types.
  Appends `authorization: Bearer <token>` to outgoing metadata.
  Implemented as an interceptor (not call credentials) so it works
  on both plaintext (`disableTls=true` dev) and TLS channels without
  `grpc.composite_channel_credentials`.
- `TlsConfig` ergonomics: all three fields (`ca_path`, `cert_path`,
  `key_path`) are now optional with `cert_path` / `key_path`
  required-together-or-not-at-all (enforced in `__post_init__`). This
  unlocks three transport profiles from one dataclass:
    * full mTLS (all three)
    * CA-only trust (`ca_path` only)
    * system roots (`TlsConfig()` — for OIDC gateways behind a
      public CA)
- `from_active_cluster` mirrors `crates/openshell-tui/src/lib.rs`
  `build_oidc_channel`:
    * For any `https://` gateway, always build a secure channel.
      Pick the strongest TLS profile available in `mtls/` (full
      mTLS → CA-only → system roots). No more `insecure_channel`
      fallback for HTTPS.
    * Gate OIDC bearer attachment on
      `metadata.json["auth_mode"] == "oidc"`. Matches
      `crates/openshell-cli/src/main.rs:132` and the TUI; a stale
      `oidc_token.json` next to a non-OIDC gateway no longer causes
      the SDK to attach a bearer.
- `_OidcRefresher` — thread-safe, in-process native OAuth2 refresh
  modeled on `google.oauth2.credentials.Credentials` and
  `botocore.tokens.SSOTokenProvider`. Lazily checks expiry on every
  RPC; when stale, re-reads disk first (the CLI may have rotated
  the bundle), and only then exchanges the refresh_token against
  the IdP's token endpoint discovered via OIDC discovery
  (`/.well-known/openid-configuration`, cached after first call).
  Concurrent RPCs share a single refresh via `threading.Lock` (no
  IdP stampede). Honors refresh-token rotation. Surfaces IdP
  failures as `SandboxError` with the RFC 6749 error body included
  for diagnostics.

  Mirrors the Rust CLI's HTTP-policy posture from
  `crates/openshell-cli/src/oidc_auth.rs`:
    * `follow_redirects=False` so a 3xx during discovery can't
      steer us to an attacker-controlled token endpoint.
    * Discovery `issuer` is validated against the configured
      issuer; a discovery document claiming a different issuer is
      rejected, preventing the SDK from POSTing the refresh_token
      to a malicious endpoint.
    * `insecure: bool` flag plumbed through to httpx's
      `verify=` so self-signed-cert deployments work the same way
      they do in the Rust CLI.

  Built on `httpx` (chosen over `urllib` specifically for
  follow_redirects + verify control as kwargs). The OAuth2
  refresh-token grant itself (RFC 6749 §6) is one form-encoded
  POST — handled inline rather than via a dedicated OAuth library;
  tried `authlib`'s `OAuth2Client` first but it auto-injects an
  Authorization header on every request, which breaks the
  unauthenticated discovery GET.
- `_make_cluster_bearer_provider(..., auto_refresh=True,
  write_back=True, insecure=False)` factory. Defaults to the
  refresher path with write-back enabled; `auto_refresh=False`
  falls back to the read-only fail-closed behavior for callers that
  don't want the SDK to make outbound HTTP calls to the IdP.

  `write_back=True` is the default (changed from the first round of
  review): IdPs with refresh-token rotation (Keycloak with
  rotation, Entra in strict mode) invalidate the old refresh_token
  on each refresh, so an in-memory-only refresh would leave the
  on-disk bundle pointing at an invalidated value — any second
  process starting from disk would `invalid_grant`. With write-back
  enabled by default, the SDK keeps the shared cache consistent
  with the IdP.
- `from_active_cluster` exposes `auto_refresh`, `write_back`, and
  `insecure` kwargs (defaults: True / True / False). The
  high-level `Sandbox` context manager surfaces the same three
  kwargs and forwards them through, so callers using the wrapper
  have parity with `SandboxClient` for OIDC-protected gateways.
- `SandboxClient.close()` chains to a `_bearer_close` hook so the
  `_OidcRefresher`'s underlying `httpx.Client` is released
  deterministically instead of leaking sockets/FDs until GC runs
  `__del__`. Idempotent.
- `_OidcRefresher._write_to_disk` uses `tempfile.mkstemp` (PID +
  random suffix) instead of a fixed `.oidc_token.json.tmp` path,
  so two writers racing on the same gateway directory don't
  trample each other's tmp content. Success path atomically
  replaces; failure path unlinks the orphan.

OAuth2 refresh policy and write-back semantics deliberately mirror
what the major Python SDKs do — see
github.com/googleapis/google-auth-library-python (`Credentials`)
and github.com/boto/botocore (`SSOTokenProvider`):

| Library                       | Native refresh | Writes back |
|-------------------------------|----------------|-------------|
| google-auth Credentials       | yes            | no          |
| botocore SSOTokenProvider     | yes            | yes         |
| openshell SandboxClient (here)| yes (opt-out)  | yes (opt-out)|

OpenShell sits between the two; chose write-back-by-default because
the rotation invariant matters more for our deployments than the
"CLI is the only writer" assumption that fits google-auth.

Adds `httpx>=0.27` as a runtime dependency. No new OAuth2 library —
the refresh grant is a single POST.

Tested:

- 42 sandbox_test.py tests pass (5 pre-existing + 37 new across
  the bearer interceptor, fail-closed provider, refresher
  behavior, TlsConfig validation, from_active_cluster auth ladder,
  security-review regressions, Sandbox-wrapper kwarg forwarding,
  and lifecycle / concurrency probes).
  `mise run test:python` → 47 passed total across the python
  suite.
- `mise run python:lint` (ruff) clean.
- End-to-end against a Keycloak-protected gateway on OpenShift:
    * unauthenticated `Health` bypass works
    * admin + `openshell:all` reaches user-callable methods
    * reader (`sandbox:read`) denied on `CreateSandbox` by scope
    * admin + `openshell:all` denied on PR NVIDIA#1596 sandbox-only
      methods at the router (the new gate is honored from the SDK)
    * full provider CRUD lifecycle via the SDK
    * callable token provider rotates per RPC as expected
- Regression-probed against three pre-review security findings:
    * **Discovery issuer validation** — a discovery document
      claiming a different `issuer` than the configured one is
      rejected with a clear `SandboxError` before any refresh POST
      can reach the attacker-controlled endpoint.
    * **Redirect during discovery** — `follow_redirects=False` on
      the underlying httpx client means a 3xx during discovery
      surfaces as a SandboxError rather than silently chasing the
      redirect.
    * **Cross-process rotation** — a two-process simulation shows
      process B starting from disk and successfully refreshing
      with the rotated refresh_token, because process A's
      write-back updated the shared cache.
- Refresher unit tests cover: cached-fresh fast path, disk-rotated
  re-read before refresh, OAuth2 exchange against the discovered
  token endpoint, refresh-token rotation, atomic write-back at
  0600 mode (default), default-on write_back proven by test,
  concurrent N-thread coordination (one refresh shared across 8
  threads), IdP failure surfaced with the error body, the
  client_credentials / no-refresh_token error path, issuer-
  mismatch rejection, redirect-during-discovery rejection,
  insecure flag plumbing.
- Lifecycle / concurrency regression tests added: `close()`
  invokes the `_bearer_close` hook (idempotent), the refresher's
  `httpx.Client` is marked closed after `SandboxClient.close()`,
  and 16 concurrent writers don't leave orphan tmp files behind
  while producing a valid final bundle. The `Sandbox` wrapper has
  direct forwarding tests proving `auto_refresh`, `write_back`,
  and `insecure` reach `from_active_cluster` (both explicit
  values and defaults).
- End-to-end against a real OpenShift + Keycloak cluster from
  inside a pod: real OIDC discovery against
  `keycloak.keycloak.svc.cluster.local:8080`, refresh-token grant
  POST, atomic write-back of the rotated bundle at 0600, and a
  follow-up RPC reusing the freshly-rotated in-memory token —
  full round-trip in ~170ms.

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>

* fix(python-sdk): adopt newer on-disk OIDC bundle before refreshing

_OidcRefresher.current_access_token() only adopted the on-disk
oidc_token.json when its access token was still fresh; otherwise it
refreshed using the in-memory bundle. With refresh-token rotation
enabled (Keycloak with rotation, Entra strict mode), this let a process
keep using an invalidated refresh_token:

1. Process A holds a stale in-memory bundle with refresh_token=r1.
2. Process B refreshes first and writes a rotated (r2) but now
   near-expiry bundle to disk.
3. Process A re-reads disk, sees the access token is not fresh, ignores
   the disk bundle, and POSTs the stale r1 — which the IdP has already
   invalidated, yielding invalid_grant.

Fix: when the cached bundle is stale, adopt the on-disk bundle if it was
refreshed more recently than ours, even when its access token is also
stale. "More recently" is decided by expires_at — a refresh mints a new
access token with a forward expiry alongside the rotated refresh_token,
so the later expiry carries the newest refresh_token. Comparing by
expiry (rather than unconditionally preferring disk) preserves the
write_back=False case, where the in-memory bundle has already rotated
past the on-disk copy and must not be clobbered. When the adopted
bundle's issuer differs, the cached token endpoint is reset so the
refresh re-discovers against the new issuer.

Adds regression tests for the cross-process rotation race and the
issuer-change re-discovery path.

* fix(python-sdk): recover from invalid_grant on lost rotation race

The expiry-based disk re-read narrows but does not fully close the
cross-process refresh-token rotation race: two processes sharing a
gateway directory can both enter their refresh window, both POST their
copy of the refresh_token, and with rotation enabled the IdP invalidates
the loser's token (invalid_grant). Neither google-auth nor botocore
close this window without an OS file lock; a Python-only flock would not
coordinate with the Rust CLI/TUI that also write oidc_token.json, so
locking is not worth its cost here.

Recover instead of prevent: distinguish an OAuth2 invalid_grant (the
refresh_token was rejected) from transport/5xx failures via a private
_InvalidGrantError, and on invalid_grant re-read oidc_token.json once. If
a peer wrote a different refresh_token (it won the race), adopt and retry
with it — returning early if it is already fresh — so the loser succeeds
transparently instead of forcing a re-authenticate. If disk offers no new
token, the rejection is genuine and surfaces the re-authenticate hint as
before. The retry is single-shot; a second invalid_grant propagates.

Adds tests for the peer-rotation recovery and the genuine-rejection
(no-retry) paths.

---------

Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
…#1627)

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
…1623)

Rootless Podman sandbox containers reach the host through pasta's local
connection bypass, which translates L2 frames to L4 host sockets. The
dev gateway script binds to 127.0.0.1 by default, which is not routable
through pasta. Auto-detect rootless mode and bind to 0.0.0.0 so sandbox
containers can connect to the gateway.

- Auto-detect rootless Podman in gateway.sh and export
  OPENSHELL_BIND_ADDRESS=0.0.0.0 when not explicitly set
- Add e2e:podman:rootless mise task and CI matrix entry to validate
  rootless Podman networking end-to-end
- CI creates a non-root user inside the privileged container to trigger
  Podman's rootless code paths (pasta, user namespace isolation)

Signed-off-by: Naveen Malik <nmalik@redhat.com>
… not a subscription (NVIDIA#1542)

* docs(providers): note that ANTHROPIC_API_KEY requires an API account, not a subscription

Anthropic subscription users authenticate via OAuth, not an API key,
causing a silent failure when creating the provider. Adds a Note callout
in the provider type table and quickstart guide directing subscription
users to generate an API key from console.anthropic.com.

Closes NVIDIA#620

* docs(providers): fix Note placement and remove subscription brand names

Move the Note callout in manage-providers.mdx to after the complete
provider type table so it does not break table rendering. Remove
subscription brand names from both Note callouts.
Closes NVIDIA#1307

Default the Podman host gateway alias override to gvproxy's host-loopback IP on macOS while preserving host-gateway resolution on Linux. Wire the setting through Podman config, gateway TOML inheritance, and the standalone driver, and document the platform behavior.

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
…#1573)

* generalize crate for multi-device PCIe passthrough

Signed-off-by: Patrick Riel <priel@nvidia.com>

* add adopt apis which allow for devices already bound to vfio-pci during restart reconciliation, without rebinding or mutating sysfs.

Signed-off-by: Patrick Riel <priel@nvidia.com>

* refactor(vfio): generalize GPU passthrough sysfs handling

Signed-off-by: Patrick Riel <priel@nvidia.com>

* fix(vfio): centralize vfio ID refcounting

Signed-off-by: Evan Lezar <elezar@nvidia.com>

---------

Signed-off-by: Patrick Riel <priel@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Co-authored-by: Evan Lezar <elezar@nvidia.com>
* fix(sandbox): trust exact declared private endpoints

* fix(sandbox): preserve advisor endpoint provenance

* fix(sandbox): repair advisor provenance lint failures

---------

Co-authored-by: John Myers <9696606+johntmyers@users.noreply.github.com>
Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
* fix(gateway): align package TLS bootstrap path

Closes NVIDIA#1593

Default package-managed gateway services to a stable local TLS directory and use that same value for certificate generation and runtime startup.

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>

* test(packaging): validate package asset paths exist

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>

* ci(e2e): pin mise in kubernetes job

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>

---------

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
Add PageUp/PageDown key support to the policy, logs, and draft/rules
views. All three panes now scroll by one viewport height per keypress.

Also fix scroll_policy() clamping to stop at the last viewport of
content instead of the last line, preventing a blank-screen overshoot
on G and PageDown.

Signed-off-by: Major Hayden <major@redhat.com>
…DIA#1433)

* feat(telemetry): add anonymous opt-out usage telemetry

Signed-off-by: Kirit93 <kthadaka@nvidia.com>

* Removed enums from schema

Signed-off-by: Kirit Thadaka <kthadaka@nvidia.com>

* Updated telemetry URL

Signed-off-by: Kirit93 <kthadaka@nvidia.com>

* ci(kubernetes): pin mise installer for e2e

---------

Signed-off-by: Kirit93 <kthadaka@nvidia.com>
Signed-off-by: Kirit Thadaka <kthadaka@nvidia.com>
Co-authored-by: John Myers <9696606+johntmyers@users.noreply.github.com>
release-helm and tag-ghcr-release now depend on the release job.

This is to prevent a GHCR image or helm chart from being published when some
other aspect of the release fails.

Signed-off-by: Kris Hicks <khicks@nvidia.com>
* ci(kubernetes): pin mise in e2e workflow

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>

* ci(kubernetes): mirror postgres image for ha e2e

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>

* ci(kubernetes): reuse e2e workflow for ha

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>

---------

Signed-off-by: Taylor Mutch <taylormutch@gmail.com>
…VIDIA#1661)

The gateway.sh script appended supervisor_image after the
[openshell.gateway.gateway_jwt] table header, so TOML parsed it as a
gateway_jwt field. The Podman driver never saw the override and fell
back to the default ghcr.io/nvidia/openshell/supervisor:latest.
Move supervisor_image into [openshell.drivers.podman] where the driver
config deserializer expects it.
)

Move three duplicated definitions into openshell-core so every
consumer has a single canonical source:

- format_bytes: identical 14-line function existed in docker,
  kubernetes, and vm drivers. Moved to openshell-core::progress
  where all three already imported from.

- DEFAULT_SANDBOX_PIDS_LIMIT: i64 constant (2048) duplicated in
  docker driver and podman config. Moved to openshell-core::config
  alongside other shared defaults. Podman re-exports it for
  internal call-site compatibility.

- current_time_ms: secrets.rs in openshell-sandbox reimplemented
  the same logic as openshell-core::time::now_ms(). Remove the
  local copy and call now_ms() directly via the existing dep.
…VIDIA#1666)

* fix(config): reject unknown fields in nested gateway config tables

The gateway TOML loader silently ignored keys placed under the wrong
table header. PR NVIDIA#1661 fixed one instance of this (supervisor_image
under [openshell.gateway.gateway_jwt]) but the root cause remained: the
nested gateway config tables did not deny unknown fields, so a misplaced
key was accepted and dropped instead of erroring.

Concretely, tasks/scripts/gateway.sh emitted `sandbox_namespace` right
after the [openshell.gateway.gateway_jwt] heredoc, so it landed inside
the gateway_jwt table rather than [openshell.gateway]. The k8s driver
already receives the namespace via [openshell.drivers.kubernetes], so
the stray line was dead config that parsed without complaint.

Changes:
- Add #[serde(deny_unknown_fields)] to the nested gateway config tables
  that are part of the config-file parse tree: TlsConfig, OidcConfig,
  MtlsAuthConfig, GatewayAuthConfig, GatewayJwtConfig.
- Remove the misplaced sandbox_namespace line from gateway.sh.
- Drop the unused Serialize/Deserialize derives from Config and
  ServiceRoutingConfig (see below).
- Add a regression test asserting a key under the wrong nested table is
  rejected.
Signed-off-by: Evan Lezar <elezar@nvidia.com>
dependabot Bot and others added 27 commits July 16, 2026 10:26
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6.4.0 to 7.0.0.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](actions/setup-node@48b55a0...8207627)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…IDIA#2288)

Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](softprops/action-gh-release@718ea10...3d0d988)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 3.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…ies (NVIDIA#2287)

* feat(tui): navigate panels via Up/Down arrow overflow at list boundaries

When at the bottom of a panel's item list, pressing Down/j now moves
focus to the next panel instead of being a silent no-op. Likewise,
pressing Up/k at the top moves to the previous panel with the cursor
on its last item. Empty panels are skipped and the ring wraps around.

Closes NVIDIA#2273

Signed-off-by: Varsha Prasad Narsing <vnarsing@nvidia.com>
Signed-off-by: Varsha Prasad Narsing <varshaprasad96@gmail.com>

* fix(tui): guard Up handlers against stale cursor in empty panels

The Down handlers already check whether the list is non-empty before
incrementing the cursor, but the Up handlers only checked cursor > 0.
When a list becomes empty after a refresh with a nonzero cursor, Up
would decrement the stale cursor instead of overflowing to the
previous panel. Add the same non-empty guard to all four Up arms.

Signed-off-by: Varsha Prasad Narsing <varshaprasad96@gmail.com>

* docs(sandboxes): add dashboard keyboard navigation to manage-sandboxes

Describe Tab/Shift+Tab panel cycling, Up/Down and j/k boundary
overflow, and middle-pane tab switching in the OpenShell Terminal
section.

Signed-off-by: Varsha Prasad Narsing <varshaprasad96@gmail.com>

---------

Signed-off-by: Varsha Prasad Narsing <vnarsing@nvidia.com>
Signed-off-by: Varsha Prasad Narsing <varshaprasad96@gmail.com>
…le (NVIDIA#1782)

Add gateway-managed AWS STS credential refresh (provider-v2, NVIDIA#1576). The
gateway calls sts:AssumeRole and writes three short-lived credentials
(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) to the
provider record; the proxy re-signs requests with SigV4. Adds the aws and
aws-s3 provider profiles and a declarative multi-output refresh model
(additional_outputs) so one AssumeRole co-mints all three credentials.

Signed-off-by: Russell Bryant <rbryant@redhat.com>
Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
* test(e2e): run VM suite in CI

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(ci): configure KVM permissions directly

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* fix(e2e): flush VM overlay before restart

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* docs: simplify VM test documentation

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

* test(e2e): include gateway resume in VM run

Signed-off-by: Drew Newberry <anewberry@nvidia.com>

---------

Signed-off-by: Drew Newberry <anewberry@nvidia.com>
Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
Signed-off-by: John Myers <johntmyers@users.noreply.github.com>
Co-authored-by: John Myers <johntmyers@users.noreply.github.com>
Signed-off-by: lr90 <qiuweimin@matrixorigin.cn>
* docs: bump stated Rust MSRV from 1.88 to 1.90

Cargo.toml sets rust-version = "1.90" (rust-toolchain.toml pins
1.95.0), so building with the previously documented 1.88 fails
Cargo's MSRV check.

* docs: bump e2e/rust MSRV to 1.90

* fix: align remaining Rust version fields to 1.90

examples/governance-interceptor/Cargo.toml still had rust-version
1.88. Also bump e2e/rust's prost dependency to 0.14 to match the
workspace, since it was on 0.13 in an otherwise standalone crate.
login-action and setup-buildx-action used a mutable version tag while
every other action in the repo is pinned to a commit SHA. Pin both,
and align login-action to the same v4 SHA already used in ci-image.yml.

Use the full resolved version in the trailing comment (v3.12.0) to
match the more common convention used elsewhere in .github/.
* ci(e2e): reuse prebuilt CLI artifacts

Signed-off-by: Evan Lezar <elezar@nvidia.com>

* ci(e2e): reuse prebuilt gateway artifacts

Signed-off-by: Evan Lezar <elezar@nvidia.com>

* ci(e2e): reuse prebuilt VM driver artifact

Signed-off-by: Evan Lezar <elezar@nvidia.com>

---------

Signed-off-by: Evan Lezar <elezar@nvidia.com>
- README: fix github-sandbox tutorial link missing get-started segment
- README: replace dead community-sandboxes doc link with the actual repo
- README: match supported host list to support-matrix.mdx
- architecture/README: list the missing google-vertex-ai-provider doc
- SECURITY.md: fix a mis-indented list item
- standardize on NVIDIA/OpenShell-Community casing for repo links
* fix(gateway): honor tty flag for interactive exec

Pass the requested TTY mode through the interactive SSH relay.
Skip PTY allocation and resize forwarding when TTY is disabled,
and add regression coverage for both modes.

Signed-off-by: emonq <emonq@outlook.com>

* test(gateway): improve `test_sandbox_interactive_exec_honors_tty` to test streamed stdin and stdout/stderr

Signed-off-by: emonq <emonq@outlook.com>

---------

Signed-off-by: emonq <emonq@outlook.com>
Signed-off-by: Piotr Mlocek <pmlocek@nvidia.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
* chore(deps): bump actions/attest from 4.1.1 to 4.2.0

Bumps [actions/attest](https://github.com/actions/attest) from 4.1.1 to 4.2.0.
- [Release notes](https://github.com/actions/attest/releases)
- [Changelog](https://github.com/actions/attest/blob/main/RELEASE.md)
- [Commits](actions/attest@a1948c3...f7c74d2)

---
updated-dependencies:
- dependency-name: actions/attest
  dependency-version: 4.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): note actions attest release version

Signed-off-by: Evan Lezar <elezar@nvidia.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Evan Lezar <elezar@nvidia.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Evan Lezar <elezar@nvidia.com>
…IDIA#2317)

* fix(providers): allow git clone/fetch via default GitHub provider

The github.com:443 git-transport endpoint used the read-only access
preset, which expands to GET/HEAD/OPTIONS only. Git smart HTTP requires
a POST to */git-upload-pack for clone and fetch, so the L7 proxy denied
those operations and `gh repo clone` / `git clone https://...` failed.

Replace the preset with explicit rules that permit the read-only methods
plus POST */git-upload-pack, so clone/fetch work while push
(git-receive-pack) stays blocked. Enabling push still requires an
explicit policy proposal.

Why allowing this POST is still read-only: in git's smart HTTP protocol
POST is an RPC transport, not a write. A clone/fetch does GET
*/info/refs (ref discovery) followed by POST */git-upload-pack, whose
body is only the client's want/have negotiation; the server responds
with a packfile and nothing on the server is modified (data flows
server -> client). The service names are from the server's perspective:
git-upload-pack = the server uploads a pack to the client (a read/
download), while git-receive-pack = the server receives a pack from the
client (the actual write/push). The new rule is scoped to
*/git-upload-pack only, so push (git-receive-pack) and arbitrary POSTs
to github.com remain denied.

Add a provider-profile regression test and a rego enforcement test
covering ref discovery, upload-pack (allowed), and receive-pack (denied).

Closes NVIDIA#1769

Signed-off-by: Russell Bryant <rbryant@redhat.com>

* test(providers): strengthen git-transport regression and add clone e2e

Pin the exact allowed rule set for the built-in github git-transport
endpoint in both the provider-profile and composed-policy tests, so a
broader or additional POST rule (e.g. POST **) that could enable push
via git-receive-pack fails the test instead of passing a substring
check. Add an e2e test that attaches the built-in github provider and
clones a public repo over HTTPS, exercising provider attachment,
effective-policy composition, TLS interception, and real git behavior.

Update the Providers V2 docs so the github.com git-transport endpoint
shows explicit clone/fetch rules instead of the stale read-only preset.

Refs NVIDIA#1769

Signed-off-by: Russell Bryant <rbryant@redhat.com>

* test(providers): isolate providers_v2 mutation in clone e2e

The clone e2e enables the gateway-global providers_v2_enabled setting.
Restore its exact prior value (or absence) captured via GetGatewayConfig
instead of unconditionally deleting it, and serialize the mutation
across xdist workers with an exclusive file lock on the run's shared
base temp dir, so a shared or pre-configured gateway is left untouched
and parallel workers cannot race the read-modify-restore.

Refs NVIDIA#1769

Signed-off-by: Russell Bryant <rbryant@redhat.com>

* test(providers): serialize providers_v2 mutation with a suite-wide guard

The clone e2e's per-fixture lock only coordinated fixtures that acquired
it; other xdist workers hit the same gateway without it and could
observe the transiently-enabled providers_v2_enabled global during their
own sandbox creation (CWE-362).

Add an autouse readers-writer guard in conftest: every test holds a
shared lock on the gateway config, and a test marked
exclusive_gateway_config holds an exclusive lock. Mark the clone test
exclusive so no other worker is mid-test while it enables and restores
the gateway-global setting. Exact prior-value restoration is retained.

Refs NVIDIA#1769

Signed-off-by: Russell Bryant <rbryant@redhat.com>

---------

Signed-off-by: Russell Bryant <rbryant@redhat.com>
NVIDIA#2307)

Closes NVIDIA#2112

The host `cargo zigbuild` for `*-unknown-linux-musl` opens ~333 `.rlib`
files at once during the static link, exceeding macOS's default soft
limit of 256 and failing with `ProcessFdQuotaExceeded`. This blocked the
docker/podman `mise run gateway` paths for macOS contributors; only the
VM driver path guarded against it.

Extract the VM path's `ensure_build_nofile_limit` guard into a shared
`tasks/scripts/build-env.sh` and call it from the host-staging chokepoint
(`stage-prebuilt-binaries.sh`), fixing docker, podman, and all
docker:*/multiarch host cross-compiles at once. De-duplicate the VM
script to source the shared helper. The guard is a no-op on Linux and
when cargo-zigbuild is absent, so CI and Linux dev are unaffected. The
limit is read from `OPENSHELL_BUILD_NOFILE_LIMIT` (default 8192),
honoring the legacy `OPENSHELL_VM_BUILD_NOFILE_LIMIT` for back-compat.

Also correct the stale comment in gateway-docker.sh (the cross-compile
runs on the host, not inside Linux containers) and document the guard in
architecture/build.md. Adds tasks/scripts/test-build-env.sh, wired into
`mise run test` via `test:build-env`.

Signed-off-by: Jim Meyer <jim@meyer4hire.com>
NVIDIA#2243)

* feat(workspace): implement workspace model (Phase 1 of RFC 0011)

Implements workspace and membership model providing hard isolation
boundaries for multi-player OpenShell deployments.

Workspace CRUD with Kubernetes-style Terminating phase for graceful
deletion. All resources scoped by workspace via ObjectMeta. Membership
RPCs for workspace access control. Persistence migration shifts name
uniqueness to (object_type, workspace, name). Provider profiles support
platform and workspace scoping. Service routing uses workspace-prefixed
DNS labels. Inference routes renamed and workspace-scoped with
DeleteInferenceRoute RPC. Python SDK with WorkspaceClient, two-method
list pattern (workspace-scoped and for_all_workspaces), and workspace
parameter on all methods. CLI workspace flags, TUI workspace cycling.
K8s driver filters unmanaged CRs and uses delete preconditions. Podman
driver uses immutable container IDs. Label serialization fixed across
all put_if call sites.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(cli): delegate sandbox upload command to existing upload function

The standalone `sandbox upload` command reimplemented upload logic
inline with two bugs: it used `Path::exists()` which follows symlinks
(rejecting dangling symlinks), and it ran git-aware filtering on
symlink sources. The `run::sandbox_upload()` function already handles
both cases correctly via `sandbox_upload_plan()`. Replace the inline
logic with a call to the existing function.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(e2e): shorten sandbox names and fix test compatibility

Shorten the sandbox name in initial_sparse_policy_is_acknowledged_as_loaded
from 'e2e-2159-sparse-enrich' (22 chars) to 'e2e-sparse-enrich' (17 chars)
to comply with MAX_ROUTABLE_NAME_LEN (19 chars).

Also capture stderr in create_keep_with_args so future sandbox creation
failures include the actual CLI error instead of reporting empty output.

Signed-off-by: Derek Carr <decarr@redhat.com>

* test(workspace): add test coverage for workspace CRUD and persistence isolation

Add unit tests for workspace create happy path, get round-trip, get
not-found, get empty-name rejection, already-exists error, and
resolve_workspace not-found. Add persistence test proving cross-workspace
name uniqueness (same name in different workspaces produces separate
records). Add workspace name max-length boundary tests. Fix e2e harness
to include stderr in name-parse-failure error path. Align Python e2e
test_workspace_crud with try/finally pattern. Document provider profile
catalog workspace scoping gap in RFC 0011.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(examples): update examples for workspace model compatibility

Shorten sandbox names in demo scripts to fit the 19-character
MAX_ROUTABLE_NAME_LEN limit: policy-demo prefix to pd-, multi-agent
notepad derives a short SANDBOX_TAG from the run ID, governance
interceptor uses gs-PID-RANDOM. Update vscode-remote-sandbox.md SSH
host aliases from openshell-{name} to openshell-{name}.{workspace}
format.

Signed-off-by: Derek Carr <decarr@redhat.com>

* feat(sdk): add workspace-scoped client and workspace CRUD

Add WorkspaceScopedClient modeled after kube::Api::namespaced — captures
workspace once and injects it into every sandbox request. Add workspace
CRUD methods (create, get, list, delete) and list_sandboxes_all_workspaces
on OpenShellClient. Extend SandboxRef with workspace field and add
WorkspaceRef type. Include mock tests for all new operations.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(lint): resolve clippy warnings in workspace test assertions

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(docs): convert indented code blocks to fenced in RFC 0011

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(lint): resolve clippy warnings and apply cargo fmt across workspace

Auto-format with cargo fmt and fix clippy warnings exposed by the
reformat: unnecessary qualifications, map_unwrap_or, identical match
arms, unused variable prefix, dead code annotations, and let-unit-value
in e2e harness.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(workspace): address workspace scoping issues from review

- Add workspace field to settings JSON output (CLI)
- Skip Podman containers missing workspace label instead of defaulting
  to empty string, matching K8s driver behavior
- Add resource_version to list_by_scope SELECT in both SQLite and
  Postgres backends, with regression test
- Gate PolicyLocalContext proposal/lookup routes on workspace readiness,
  returning 503 when workspace is not yet discovered
- Block sandbox and provider creation in TUI all-workspaces mode
- Clear workspace vectors in TUI reset_sandbox_state

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(workspace): make provider profile catalog workspace-aware

Thread workspace through snapshot_catalog so the
EffectiveProviderProfileCatalog enforces workspace boundaries on both
read and write paths. UserProviderProfileSource now loads platform-scoped
profiles (workspace "") plus the target workspace's profiles, preventing
cross-workspace duplicate profile ID collisions that previously caused
global catalog failures.

Update RFC 0011 to reflect catalog scoping is implemented in Phase 1
rather than deferred to future work.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(persistence): include workspace column in atomic policy revision INSERT

put_policy_revision_atomic omitted the workspace column from the INSERT
into the objects table in both SQLite and Postgres backends, causing
atomically-written policy revisions to lose their workspace association.
Add workspace field to AtomicPolicyRevisionWrite and thread it through
both backend INSERT statements, matching the non-atomic put_policy_revision
path which already included it.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(proxy): skip ancestor walk when socket owner is the entrypoint

collect_ancestor_identities walked the entire process tree above the
entrypoint when the connecting process was the entrypoint itself,
SHA256-hashing every ancestor binary (IDE, shell, container runtime).
On dev machines with large binaries in the ancestor chain this exceeded
the 30-second test timeout. When start_pid == stop_pid there are no
intermediate ancestors to verify, so return an empty list immediately.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(workspace): make provider profile catalog scope-aware

Allow the same profile ID at platform and workspace scopes by
introducing layered catalog entries where workspace profiles shadow
platform profiles. Add source and scope fields to the ProviderProfile
proto and CLI output. Migrate List/Get handlers to the catalog,
fixing divergence with runtime profile resolution.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(e2e): align podman e2e labels with centralized driver constants

The podman driver moved its container labels to the centralized
openshell.ai/ prefix, but the e2e test harness and cleanup script
still referenced the old openshell.sandbox-* keys, causing the
local_driver_token_restart test to fail on container lookup.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(e2e): align python profile isolation test with scope-aware catalog

Platform profiles are now visible in workspace listings as fallbacks
per the layered catalog design. Update the assertion to match.

Signed-off-by: Derek Carr <decarr@redhat.com>

* fix(workspace): honor profile_workspace in runtime profile resolution

Runtime profile lookups now consult provider.profile_workspace via
get_type_profile_for_scope. Providers created with --global-profile
(profile_workspace="") resolve to the platform profile even when a
workspace profile shadows the same ID. All 6 runtime call sites
updated; type-only call sites remain scope-agnostic.

Signed-off-by: Derek Carr <decarr@redhat.com>

---------

Signed-off-by: Derek Carr <decarr@redhat.com>
Closes NVIDIA#2218

Signed-off-by: Drew Newberry <anewberry@nvidia.com>
* perf(build): share sccache across worktrees

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>

* fix(build): make sccache directory overridable

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>

* fix(build): support pinned mise version

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>

---------

Signed-off-by: Matthew Grossman <mgrossman@nvidia.com>
…stream

# Conflicts:
#	.agents/skills/build-from-issue/SKILL.md
#	.agents/skills/create-github-issue/SKILL.md
#	.agents/skills/create-github-pr/SKILL.md
#	.agents/skills/create-spike/SKILL.md
#	.agents/skills/debug-inference/SKILL.md
#	.agents/skills/fix-security-issue/SKILL.md
#	.agents/skills/generate-sandbox-policy/SKILL.md
#	.agents/skills/generate-sandbox-policy/examples.md
#	.agents/skills/openshell-cli/SKILL.md
#	.agents/skills/openshell-cli/cli-reference.md
#	.agents/skills/triage-issue/SKILL.md
#	.agents/skills/tui-development/SKILL.md
#	docs/inference/configure.mdx
@ashsolei
ashsolei merged commit 5a6db5a into main Jul 21, 2026
@ashsolei
ashsolei deleted the chore/force-sync-upstream branch July 21, 2026 10:45
@coderabbitai

coderabbitai Bot commented Jul 21, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 787 files, which is 687 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

Usage-priced reviews support at most 300 files.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 68f018d8-c108-4d2e-8820-a8a242cc2636

📥 Commits

Reviewing files that changed from the base of the PR and between 16ef5c5 and 81bf111.

⛔ Files ignored due to path filters (8)
  • Cargo.lock is excluded by !**/*.lock
  • e2e/rust/Cargo.lock is excluded by !**/*.lock
  • examples/governance-interceptor/Cargo.lock is excluded by !**/*.lock
  • flake.lock is excluded by !**/*.lock
  • mise.lock is excluded by !**/*.lock
  • scripts/lint-mermaid/package-lock.json is excluded by !**/package-lock.json
  • snap/local/icon.png is excluded by !**/*.png
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (879)
  • .agents/skills/create-rfc/SKILL.md
  • .agents/skills/create-rfc/agents/openai.yaml
  • .agents/skills/debug-openshell-cluster/SKILL.md
  • .agents/skills/helm-dev-environment/SKILL.md
  • .agents/skills/launch-openshell-gator/SKILL.md
  • .agents/skills/test-release-canary/SKILL.md
  • .agents/skills/update-docs/SKILL.md
  • .cargo/config.toml
  • .claude/agent-memory/arch-doc-writer/MEMORY.md
  • .claude/agents/principal-engineer-reviewer.md
  • .env.example
  • .github/ISSUE_TEMPLATE/bug_report.yml
  • .github/ISSUE_TEMPLATE/feature_request.yml
  • .github/actions/pr-gate/action.yml
  • .github/actions/pr-merge-base/action.yml
  • .github/actions/release-helm-oci/action.yml
  • .github/actions/setup-buildx/action.yml
  • .github/actions/setup-e2e-cli/action.yml
  • .github/actions/setup-e2e-gateway/action.yml
  • .github/actions/setup-e2e-vm-driver/action.yml
  • .github/workflows/branch-checks.yml
  • .github/workflows/branch-docs.yml
  • .github/workflows/branch-e2e.yml
  • .github/workflows/ci-image.yml
  • .github/workflows/dco.yml
  • .github/workflows/deb-package.yml
  • .github/workflows/docker-build.yml
  • .github/workflows/driver-vm-linux.yml
  • .github/workflows/driver-vm-macos.yml
  • .github/workflows/e2e-gpu-test.yaml
  • .github/workflows/e2e-kubernetes-test.yml
  • .github/workflows/e2e-label-help.yml
  • .github/workflows/e2e-test.yml
  • .github/workflows/helm-lint.yml
  • .github/workflows/issue-triage.yml
  • .github/workflows/publish-docs-website.yml
  • .github/workflows/release-auto-tag.yml
  • .github/workflows/release-canary.yml
  • .github/workflows/release-dev.yml
  • .github/workflows/release-tag.yml
  • .github/workflows/release-vm-dev.yml
  • .github/workflows/release-vm-kernel.yml
  • .github/workflows/required-ci-gates.yml
  • .github/workflows/rpm-package.yml
  • .github/workflows/rust-cache-seed.yml
  • .github/workflows/rust-native-build.yml
  • .github/workflows/snap-package.yml
  • .github/workflows/stale.yml
  • .github/workflows/sync-docs.yml
  • .github/workflows/test-gpu.yml
  • .github/workflows/test-install.yml
  • .github/workflows/vouch-check.yml
  • .github/workflows/vouch-command.yml
  • .gitignore
  • .markdownlint-cli2.jsonc
  • .packit.yaml
  • .python-version
  • CI.md
  • CONTRIBUTING.md
  • Cargo.toml
  • SECURITY.md
  • STYLEGUIDE.md
  • TESTING.md
  • architecture/README.md
  • architecture/build-containers.md
  • architecture/build.md
  • architecture/compute-runtimes.md
  • architecture/custom-vm-runtime.md
  • architecture/docs-site.md
  • architecture/gateway-deploy-connect.md
  • architecture/gateway-security.md
  • architecture/gateway-settings.md
  • architecture/gateway-single-node.md
  • architecture/gateway.md
  • architecture/google-vertex-ai-provider.md
  • architecture/inference-routing.md
  • architecture/policy-advisor.md
  • architecture/sandbox-connect.md
  • architecture/sandbox-custom-containers.md
  • architecture/sandbox-providers.md
  • architecture/sandbox.md
  • architecture/security-policy.md
  • architecture/system-architecture.md
  • architecture/tui.md
  • crates/openshell-bootstrap/Cargo.toml
  • crates/openshell-bootstrap/src/build.rs
  • crates/openshell-bootstrap/src/constants.rs
  • crates/openshell-bootstrap/src/docker.rs
  • crates/openshell-bootstrap/src/edge_token.rs
  • crates/openshell-bootstrap/src/errors.rs
  • crates/openshell-bootstrap/src/image.rs
  • crates/openshell-bootstrap/src/jwt.rs
  • crates/openshell-bootstrap/src/lib.rs
  • crates/openshell-bootstrap/src/metadata.rs
  • crates/openshell-bootstrap/src/mtls.rs
  • crates/openshell-bootstrap/src/oidc_token.rs
  • crates/openshell-bootstrap/src/paths.rs
  • crates/openshell-bootstrap/src/pki.rs
  • crates/openshell-bootstrap/src/push.rs
  • crates/openshell-bootstrap/src/runtime.rs
  • crates/openshell-cli/Cargo.toml
  • crates/openshell-cli/src/auth.rs
  • crates/openshell-cli/src/bootstrap.rs
  • crates/openshell-cli/src/completers.rs
  • crates/openshell-cli/src/doctor_llm_prompt.md
  • crates/openshell-cli/src/lib.rs
  • crates/openshell-cli/src/main.rs
  • crates/openshell-cli/src/oidc_auth.rs
  • crates/openshell-cli/src/output.rs
  • crates/openshell-cli/src/policy_update.rs
  • crates/openshell-cli/src/run.rs
  • crates/openshell-cli/src/ssh.rs
  • crates/openshell-cli/src/tls.rs
  • crates/openshell-cli/tests/ensure_providers_integration.rs
  • crates/openshell-cli/tests/helpers/mod.rs
  • crates/openshell-cli/tests/mtls_integration.rs
  • crates/openshell-cli/tests/provider_commands_integration.rs
  • crates/openshell-cli/tests/sandbox_create_lifecycle_integration.rs
  • crates/openshell-cli/tests/sandbox_name_fallback_integration.rs
  • crates/openshell-cli/tests/sandbox_upload_integration.rs
  • crates/openshell-core/Cargo.toml
  • crates/openshell-core/README.md
  • crates/openshell-core/build.rs
  • crates/openshell-core/src/activity.rs
  • crates/openshell-core/src/auth.rs
  • crates/openshell-core/src/config.rs
  • crates/openshell-core/src/denial.rs
  • crates/openshell-core/src/driver_mounts.rs
  • crates/openshell-core/src/driver_utils.rs
  • crates/openshell-core/src/error.rs
  • crates/openshell-core/src/forward.rs
  • crates/openshell-core/src/google_cloud.rs
  • crates/openshell-core/src/gpu.rs
  • crates/openshell-core/src/grpc_client.rs
  • crates/openshell-core/src/host_pattern.rs
  • crates/openshell-core/src/image.rs
  • crates/openshell-core/src/inference.rs
  • crates/openshell-core/src/jwt.rs
  • crates/openshell-core/src/lib.rs
  • crates/openshell-core/src/metadata.rs
  • crates/openshell-core/src/middleware.rs
  • crates/openshell-core/src/net.rs
  • crates/openshell-core/src/paths.rs
  • crates/openshell-core/src/policy.rs
  • crates/openshell-core/src/progress.rs
  • crates/openshell-core/src/proposals.rs
  • crates/openshell-core/src/proto/mod.rs
  • crates/openshell-core/src/proto_struct.rs
  • crates/openshell-core/src/provider_credentials.rs
  • crates/openshell-core/src/sandbox_env.rs
  • crates/openshell-core/src/secrets.rs
  • crates/openshell-core/src/settings.rs
  • crates/openshell-core/src/telemetry.rs
  • crates/openshell-core/src/time.rs
  • crates/openshell-driver-docker/Cargo.toml
  • crates/openshell-driver-docker/README.md
  • crates/openshell-driver-docker/src/lib.rs
  • crates/openshell-driver-docker/src/tests.rs
  • crates/openshell-driver-kubernetes/Cargo.toml
  • crates/openshell-driver-kubernetes/README.md
  • crates/openshell-driver-kubernetes/src/config.rs
  • crates/openshell-driver-kubernetes/src/driver.rs
  • crates/openshell-driver-kubernetes/src/grpc.rs
  • crates/openshell-driver-kubernetes/src/lib.rs
  • crates/openshell-driver-kubernetes/src/main.rs
  • crates/openshell-driver-podman/Cargo.toml
  • crates/openshell-driver-podman/NETWORKING.md
  • crates/openshell-driver-podman/README.md
  • crates/openshell-driver-podman/src/client.rs
  • crates/openshell-driver-podman/src/config.rs
  • crates/openshell-driver-podman/src/container.rs
  • crates/openshell-driver-podman/src/driver.rs
  • crates/openshell-driver-podman/src/grpc.rs
  • crates/openshell-driver-podman/src/lib.rs
  • crates/openshell-driver-podman/src/main.rs
  • crates/openshell-driver-podman/src/test_utils.rs
  • crates/openshell-driver-podman/src/watcher.rs
  • crates/openshell-driver-vm/Cargo.toml
  • crates/openshell-driver-vm/README.md
  • crates/openshell-driver-vm/build.rs
  • crates/openshell-driver-vm/entitlements.plist
  • crates/openshell-driver-vm/runtime/README.md
  • crates/openshell-driver-vm/runtime/kernel/openshell.kconfig
  • crates/openshell-driver-vm/runtime/pins.env
  • crates/openshell-driver-vm/scripts/openshell-vm-sandbox-init.sh
  • crates/openshell-driver-vm/src/driver.rs
  • crates/openshell-driver-vm/src/embedded_runtime.rs
  • crates/openshell-driver-vm/src/extensions/mod.rs
  • crates/openshell-driver-vm/src/ffi.rs
  • crates/openshell-driver-vm/src/gpu.rs
  • crates/openshell-driver-vm/src/lib.rs
  • crates/openshell-driver-vm/src/lifecycle.rs
  • crates/openshell-driver-vm/src/main.rs
  • crates/openshell-driver-vm/src/nft_ruleset.rs
  • crates/openshell-driver-vm/src/procguard.rs
  • crates/openshell-driver-vm/src/rootfs.rs
  • crates/openshell-driver-vm/src/runtime.rs
  • crates/openshell-gateway-interceptors/Cargo.toml
  • crates/openshell-gateway-interceptors/src/lib.rs
  • crates/openshell-gateway-interceptors/src/plan.rs
  • crates/openshell-gateway-interceptors/src/profile_source.rs
  • crates/openshell-gateway-interceptors/src/proto_json.rs
  • crates/openshell-gateway-interceptors/src/routes.rs
  • crates/openshell-gateway-interceptors/src/runtime.rs
  • crates/openshell-ocsf/src/builders/base.rs
  • crates/openshell-ocsf/src/builders/config.rs
  • crates/openshell-ocsf/src/builders/finding.rs
  • crates/openshell-ocsf/src/builders/http.rs
  • crates/openshell-ocsf/src/builders/lifecycle.rs
  • crates/openshell-ocsf/src/builders/mod.rs
  • crates/openshell-ocsf/src/builders/network.rs
  • crates/openshell-ocsf/src/builders/process.rs
  • crates/openshell-ocsf/src/builders/ssh.rs
  • crates/openshell-ocsf/src/ctx.rs
  • crates/openshell-ocsf/src/events/network_activity.rs
  • crates/openshell-ocsf/src/format/shorthand.rs
  • crates/openshell-ocsf/src/lib.rs
  • crates/openshell-ocsf/src/objects/firewall_rule.rs
  • crates/openshell-ocsf/src/tracing_layers/jsonl_layer.rs
  • crates/openshell-ocsf/src/tracing_layers/shorthand_layer.rs
  • crates/openshell-policy/Cargo.toml
  • crates/openshell-policy/src/compose.rs
  • crates/openshell-policy/src/lib.rs
  • crates/openshell-policy/src/merge.rs
  • crates/openshell-policy/src/middleware.rs
  • crates/openshell-prover/README.md
  • crates/openshell-prover/src/accepted_risks.rs
  • crates/openshell-prover/src/credentials.rs
  • crates/openshell-prover/src/finding.rs
  • crates/openshell-prover/src/lib.rs
  • crates/openshell-prover/src/model.rs
  • crates/openshell-prover/src/policy.rs
  • crates/openshell-prover/src/queries.rs
  • crates/openshell-prover/src/registry.rs
  • crates/openshell-prover/src/report.rs
  • crates/openshell-providers/Cargo.toml
  • crates/openshell-providers/README.md
  • crates/openshell-providers/src/discovery.rs
  • crates/openshell-providers/src/lib.rs
  • crates/openshell-providers/src/profiles.rs
  • crates/openshell-providers/src/providers/anthropic.rs
  • crates/openshell-providers/src/providers/claude.rs
  • crates/openshell-providers/src/providers/codex.rs
  • crates/openshell-providers/src/providers/copilot.rs
  • crates/openshell-providers/src/providers/deepinfra.rs
  • crates/openshell-providers/src/providers/github.rs
  • crates/openshell-providers/src/providers/gitlab.rs
  • crates/openshell-providers/src/providers/google_cloud.rs
  • crates/openshell-providers/src/providers/mod.rs
  • crates/openshell-providers/src/providers/nvidia.rs
  • crates/openshell-providers/src/providers/openai.rs
  • crates/openshell-providers/src/providers/opencode.rs
  • crates/openshell-providers/src/providers/vertex.rs
  • crates/openshell-router/Cargo.toml
  • crates/openshell-router/README.md
  • crates/openshell-router/src/backend.rs
  • crates/openshell-router/src/config.rs
  • crates/openshell-router/src/mock.rs
  • crates/openshell-router/tests/backend_integration.rs
  • crates/openshell-sandbox/Cargo.toml
  • crates/openshell-sandbox/data/sandbox-policy.rego
  • crates/openshell-sandbox/src/activity_aggregator.rs
  • crates/openshell-sandbox/src/denial_aggregator.rs
  • crates/openshell-sandbox/src/google_cloud_metadata.rs
  • crates/openshell-sandbox/src/grpc_client.rs
  • crates/openshell-sandbox/src/l7/mod.rs
  • crates/openshell-sandbox/src/l7/relay.rs
  • crates/openshell-sandbox/src/l7/rest.rs
  • crates/openshell-sandbox/src/lib.rs
  • crates/openshell-sandbox/src/main.rs
  • crates/openshell-sandbox/src/mechanistic_mapper.rs
  • crates/openshell-sandbox/src/metadata_server.rs
  • crates/openshell-sandbox/src/opa.rs
  • crates/openshell-sandbox/src/process.rs
  • crates/openshell-sandbox/src/procfs.rs
  • crates/openshell-sandbox/src/proxy.rs
  • crates/openshell-sandbox/src/sandbox/linux/mod.rs
  • crates/openshell-sandbox/src/sandbox/linux/netns.rs
  • crates/openshell-sandbox/src/sidecar_control.rs
  • crates/openshell-sandbox/tests/stdout_logging.rs
  • crates/openshell-sdk/Cargo.toml
  • crates/openshell-sdk/README.md
  • crates/openshell-sdk/src/auth.rs
  • crates/openshell-sdk/src/client.rs
  • crates/openshell-sdk/src/config.rs
  • crates/openshell-sdk/src/edge_tunnel.rs
  • crates/openshell-sdk/src/error.rs
  • crates/openshell-sdk/src/lib.rs
  • crates/openshell-sdk/src/oidc.rs
  • crates/openshell-sdk/src/raw.rs
  • crates/openshell-sdk/src/refresh.rs
  • crates/openshell-sdk/src/transport.rs
  • crates/openshell-sdk/src/types.rs
  • crates/openshell-sdk/tests/client_mock.rs
  • crates/openshell-server-macros/Cargo.toml
  • crates/openshell-server-macros/src/lib.rs
  • crates/openshell-server/Cargo.toml
  • crates/openshell-server/migrations/postgres/001_create_objects.sql
  • crates/openshell-server/migrations/postgres/002_create_sandbox_policies.sql
  • crates/openshell-server/migrations/postgres/003_create_policy_recommendations.sql
  • crates/openshell-server/migrations/postgres/004_add_object_metadata.sql
  • crates/openshell-server/migrations/postgres/005_add_resource_version.sql
  • crates/openshell-server/migrations/postgres/006_add_workspace_column.sql
  • crates/openshell-server/migrations/sqlite/001_create_objects.sql
  • crates/openshell-server/migrations/sqlite/002_create_sandbox_policies.sql
  • crates/openshell-server/migrations/sqlite/003_create_policy_recommendations.sql
  • crates/openshell-server/migrations/sqlite/004_add_object_metadata.sql
  • crates/openshell-server/migrations/sqlite/005_add_resource_version.sql
  • crates/openshell-server/migrations/sqlite/006_add_workspace_column.sql
  • crates/openshell-server/src/auth/authenticator.rs
  • crates/openshell-server/src/auth/authz.rs
  • crates/openshell-server/src/auth/guard.rs
  • crates/openshell-server/src/auth/http.rs
  • crates/openshell-server/src/auth/identity.rs
  • crates/openshell-server/src/auth/k8s_sa.rs
  • crates/openshell-server/src/auth/method_authz.rs
  • crates/openshell-server/src/auth/mod.rs
  • crates/openshell-server/src/auth/oidc.rs
  • crates/openshell-server/src/auth/principal.rs
  • crates/openshell-server/src/auth/sandbox_jwt.rs
  • crates/openshell-server/src/auth/sandbox_methods.rs
  • crates/openshell-server/src/certgen.rs
  • crates/openshell-server/src/cli.rs
  • crates/openshell-server/src/compute/driver_config.rs
  • crates/openshell-server/src/compute/lease.rs
  • crates/openshell-server/src/compute/mod.rs
  • crates/openshell-server/src/compute/vm.rs
  • crates/openshell-server/src/config_file.rs
  • crates/openshell-server/src/defaults.rs
  • crates/openshell-server/src/grpc/auth_rpc.rs
  • crates/openshell-server/src/grpc/mod.rs
  • crates/openshell-server/src/grpc/policy.rs
  • crates/openshell-server/src/grpc/provider.rs
  • crates/openshell-server/src/grpc/sandbox.rs
  • crates/openshell-server/src/grpc/service.rs
  • crates/openshell-server/src/grpc/validation.rs
  • crates/openshell-server/src/grpc/workspace.rs
  • crates/openshell-server/src/http.rs
  • crates/openshell-server/src/inference.rs
  • crates/openshell-server/src/lib.rs
  • crates/openshell-server/src/main.rs
  • crates/openshell-server/src/middleware.rs
  • crates/openshell-server/src/multiplex.rs
  • crates/openshell-server/src/persistence/mod.rs
  • crates/openshell-server/src/persistence/postgres.rs
  • crates/openshell-server/src/persistence/sqlite.rs
  • crates/openshell-server/src/persistence/tests.rs
  • crates/openshell-server/src/policy_store.rs
  • crates/openshell-server/src/provider_profile_sources.rs
  • crates/openshell-server/src/provider_refresh.rs
  • crates/openshell-server/src/readiness.rs
  • crates/openshell-server/src/sandbox_index.rs
  • crates/openshell-server/src/sandbox_watch.rs
  • crates/openshell-server/src/service_routing.rs
  • crates/openshell-server/src/ssh_sessions.rs
  • crates/openshell-server/src/ssh_tunnel.rs
  • crates/openshell-server/src/supervisor_session.rs
  • crates/openshell-server/src/telemetry.rs
  • crates/openshell-server/src/test_support.rs
  • crates/openshell-server/src/tls.rs
  • crates/openshell-server/src/tls_test_utils.rs
  • crates/openshell-server/src/tracing_bus.rs
  • crates/openshell-server/tests/auth_endpoint_integration.rs
  • crates/openshell-server/tests/common/mod.rs
  • crates/openshell-server/tests/edge_tunnel_auth.rs
  • crates/openshell-server/tests/health_endpoint_integration.rs
  • crates/openshell-server/tests/multiplex_integration.rs
  • crates/openshell-server/tests/multiplex_tls_integration.rs
  • crates/openshell-server/tests/supervisor_relay_integration.rs
  • crates/openshell-server/tests/ws_tunnel_integration.rs
  • crates/openshell-supervisor-middleware-builtins/Cargo.toml
  • crates/openshell-supervisor-middleware-builtins/src/lib.rs
  • crates/openshell-supervisor-middleware-builtins/src/regex.rs
  • crates/openshell-supervisor-middleware/Cargo.toml
  • crates/openshell-supervisor-middleware/src/headers.rs
  • crates/openshell-supervisor-middleware/src/lib.rs
  • crates/openshell-supervisor-middleware/src/remote.rs
  • crates/openshell-supervisor-network/Cargo.toml
  • crates/openshell-supervisor-network/data/sandbox-policy.rego
  • crates/openshell-supervisor-network/src/identity.rs
  • crates/openshell-supervisor-network/src/inference_routes.rs
  • crates/openshell-supervisor-network/src/l7/graphql.rs
  • crates/openshell-supervisor-network/src/l7/http.rs
  • crates/openshell-supervisor-network/src/l7/inference.rs
  • crates/openshell-supervisor-network/src/l7/jsonrpc.rs
  • crates/openshell-supervisor-network/src/l7/middleware.rs
  • crates/openshell-supervisor-network/src/l7/mod.rs
  • crates/openshell-supervisor-network/src/l7/path.rs
  • crates/openshell-supervisor-network/src/l7/provider.rs
  • crates/openshell-supervisor-network/src/l7/relay.rs
  • crates/openshell-supervisor-network/src/l7/rest.rs
  • crates/openshell-supervisor-network/src/l7/tls.rs
  • crates/openshell-supervisor-network/src/l7/token_grant_injection.rs
  • crates/openshell-supervisor-network/src/l7/websocket.rs
  • crates/openshell-supervisor-network/src/lib.rs
  • crates/openshell-supervisor-network/src/opa.rs
  • crates/openshell-supervisor-network/src/policy_local.rs
  • crates/openshell-supervisor-network/src/procfs.rs
  • crates/openshell-supervisor-network/src/proxy.rs
  • crates/openshell-supervisor-network/src/run.rs
  • crates/openshell-supervisor-network/src/sigv4.rs
  • crates/openshell-supervisor-network/src/spiffe_endpoint.rs
  • crates/openshell-supervisor-network/src/token_grant.rs
  • crates/openshell-supervisor-network/testdata/sandbox-policy.yaml
  • crates/openshell-supervisor-network/tests/sigv4_localstack.rs
  • crates/openshell-supervisor-network/tests/system_inference.rs
  • crates/openshell-supervisor-network/tests/websocket_upgrade.rs
  • crates/openshell-supervisor-process/Cargo.toml
  • crates/openshell-supervisor-process/src/bypass_monitor/mod.rs
  • crates/openshell-supervisor-process/src/bypass_monitor/procfs.rs
  • crates/openshell-supervisor-process/src/child_env.rs
  • crates/openshell-supervisor-process/src/debug_rpc.rs
  • crates/openshell-supervisor-process/src/lib.rs
  • crates/openshell-supervisor-process/src/log_push.rs
  • crates/openshell-supervisor-process/src/managed_children.rs
  • crates/openshell-supervisor-process/src/netns/mod.rs
  • crates/openshell-supervisor-process/src/netns/nft_ruleset.rs
  • crates/openshell-supervisor-process/src/process.rs
  • crates/openshell-supervisor-process/src/run.rs
  • crates/openshell-supervisor-process/src/sandbox/linux/landlock.rs
  • crates/openshell-supervisor-process/src/sandbox/linux/mod.rs
  • crates/openshell-supervisor-process/src/sandbox/linux/seccomp.rs
  • crates/openshell-supervisor-process/src/sandbox/mod.rs
  • crates/openshell-supervisor-process/src/skills.rs
  • crates/openshell-supervisor-process/src/skills/policy-advisor/SKILL.md
  • crates/openshell-supervisor-process/src/skills/policy_advisor.md
  • crates/openshell-supervisor-process/src/ssh.rs
  • crates/openshell-supervisor-process/src/supervisor_session.rs
  • crates/openshell-supervisor-process/src/unix_socket.rs
  • crates/openshell-tui/Cargo.toml
  • crates/openshell-tui/src/app.rs
  • crates/openshell-tui/src/event.rs
  • crates/openshell-tui/src/lib.rs
  • crates/openshell-tui/src/theme.rs
  • crates/openshell-tui/src/ui/create_provider.rs
  • crates/openshell-tui/src/ui/create_sandbox.rs
  • crates/openshell-tui/src/ui/dashboard.rs
  • crates/openshell-tui/src/ui/global_settings.rs
  • crates/openshell-tui/src/ui/mod.rs
  • crates/openshell-tui/src/ui/providers.rs
  • crates/openshell-tui/src/ui/sandbox_detail.rs
  • crates/openshell-tui/src/ui/sandbox_draft.rs
  • crates/openshell-tui/src/ui/sandbox_logs.rs
  • crates/openshell-tui/src/ui/sandbox_policy.rs
  • crates/openshell-tui/src/ui/sandbox_settings.rs
  • crates/openshell-tui/src/ui/sandboxes.rs
  • crates/openshell-tui/src/ui/splash.rs
  • crates/openshell-vfio/Cargo.toml
  • crates/openshell-vfio/src/bind.rs
  • crates/openshell-vfio/src/error.rs
  • crates/openshell-vfio/src/gpu.rs
  • crates/openshell-vfio/src/lib.rs
  • crates/openshell-vfio/src/pci.rs
  • crates/openshell-vfio/src/reconcile.rs
  • crates/openshell-vfio/src/sysfs.rs
  • crates/openshell-vfio/src/test_support.rs
  • crates/openshell-vm/Cargo.toml
  • crates/openshell-vm/README.md
  • crates/openshell-vm/runtime/README.md
  • crates/openshell-vm/scripts/build-rootfs.sh
  • crates/openshell-vm/scripts/check-vm-capabilities.sh
  • crates/openshell-vm/scripts/openshell-vm-exec-agent.py
  • crates/openshell-vm/scripts/openshell-vm-init.sh
  • crates/openshell-vm/src/embedded.rs
  • crates/openshell-vm/src/exec.rs
  • crates/openshell-vm/src/ffi.rs
  • crates/openshell-vm/src/health.rs
  • crates/openshell-vm/src/lib.rs
  • crates/openshell-vm/src/main.rs
  • crates/openshell-vm/tests/gateway_integration.rs
  • deploy/deb/control.in
  • deploy/deb/openshell-gateway.service
  • deploy/deb/postinst.sh
  • deploy/deb/postrm.sh
  • deploy/deb/prerm.sh
  • deploy/docker/Dockerfile.ci
  • deploy/docker/Dockerfile.cli-macos
  • deploy/docker/Dockerfile.driver-vm-macos
  • deploy/docker/Dockerfile.gateway
  • deploy/docker/Dockerfile.gateway-macos
  • deploy/docker/Dockerfile.images
  • deploy/docker/Dockerfile.python-wheels
  • deploy/docker/Dockerfile.python-wheels-macos
  • deploy/docker/Dockerfile.supervisor
  • deploy/docker/cluster-entrypoint.sh
  • deploy/docker/cluster-healthcheck.sh
  • deploy/docker/docker-compose.yml
  • deploy/docker/gateway.toml
  • deploy/helm/openshell/.helmignore
  • deploy/helm/openshell/Chart.yaml
  • deploy/helm/openshell/README.md
  • deploy/helm/openshell/README.md.gotmpl
  • deploy/helm/openshell/ci/values-cert-manager.yaml
  • deploy/helm/openshell/ci/values-gateway-tls.yaml
  • deploy/helm/openshell/ci/values-gateway.yaml
  • deploy/helm/openshell/ci/values-high-availability.yaml
  • deploy/helm/openshell/ci/values-keycloak.yaml
  • deploy/helm/openshell/ci/values-sidecar-kata.yaml
  • deploy/helm/openshell/ci/values-sidecar.yaml
  • deploy/helm/openshell/ci/values-skaffold.yaml
  • deploy/helm/openshell/ci/values-spire-stack.yaml
  • deploy/helm/openshell/ci/values-spire.yaml
  • deploy/helm/openshell/ci/values-tls-disabled.yaml
  • deploy/helm/openshell/skaffold.yaml
  • deploy/helm/openshell/templates/_gateway-workload.tpl
  • deploy/helm/openshell/templates/_helpers.tpl
  • deploy/helm/openshell/templates/cert-manager-pki.yaml
  • deploy/helm/openshell/templates/certgen.yaml
  • deploy/helm/openshell/templates/clusterrole.yaml
  • deploy/helm/openshell/templates/clusterrolebinding.yaml
  • deploy/helm/openshell/templates/deployment.yaml
  • deploy/helm/openshell/templates/gateway-config.yaml
  • deploy/helm/openshell/templates/gateway.yaml
  • deploy/helm/openshell/templates/grpcroute.yaml
  • deploy/helm/openshell/templates/networkpolicy.yaml
  • deploy/helm/openshell/templates/role.yaml
  • deploy/helm/openshell/templates/rolebinding.yaml
  • deploy/helm/openshell/templates/service.yaml
  • deploy/helm/openshell/templates/serviceaccount.yaml
  • deploy/helm/openshell/templates/statefulset.yaml
  • deploy/helm/openshell/tests/certgen_test.yaml
  • deploy/helm/openshell/tests/gateway_config_test.yaml
  • deploy/helm/openshell/tests/sandbox_namespace_test.yaml
  • deploy/helm/openshell/tests/sandbox_service_account_test.yaml
  • deploy/helm/openshell/tests/statefulset_client_ca_test.yaml
  • deploy/helm/openshell/values.yaml
  • deploy/kube/gpu-manifests/nvidia-device-plugin-helmchart.yaml
  • deploy/kube/manifests/agent-sandbox.yaml
  • deploy/kube/manifests/envoy-gateway-openshell.yaml
  • deploy/kube/manifests/openshell-helmchart.yaml
  • deploy/man/openshell-gateway.8.md
  • deploy/man/openshell.1.md
  • deploy/rpm/CONFIGURATION.md
  • deploy/rpm/QUICKSTART.md
  • deploy/rpm/TROUBLESHOOTING.md
  • deploy/rpm/gateway.toml.default
  • deploy/sbom/resolve_licenses.py
  • deploy/sbom/resolve_licenses_test.py
  • deploy/sbom/sbom_to_csv.py
  • docs/.markdownlint-cli2.jsonc
  • docs/CONTRIBUTING.mdx
  • docs/_components/BadgeLinks.tsx
  • docs/_components/CommandTerminal.tsx
  • docs/_components/jsx.d.ts
  • docs/about/architecture.mdx
  • docs/about/container-gateway.mdx
  • docs/about/how-it-works.mdx
  • docs/about/installation.mdx
  • docs/about/overview.mdx
  • docs/about/release-notes.mdx
  • docs/about/supported-agents.mdx
  • docs/extensibility/supervisor-middleware.mdx
  • docs/get-started/quickstart.mdx
  • docs/get-started/tutorials/docker-compose.mdx
  • docs/get-started/tutorials/first-network-policy.mdx
  • docs/get-started/tutorials/github-sandbox.mdx
  • docs/get-started/tutorials/index.mdx
  • docs/get-started/tutorials/inference-ollama.mdx
  • docs/get-started/tutorials/local-inference-lmstudio.mdx
  • docs/get-started/tutorials/microsoft-graph-provider-refresh.mdx
  • docs/index.mdx
  • docs/index.yml
  • docs/inference/about.mdx
  • docs/inference/configure.mdx
  • docs/kubernetes/access-control.mdx
  • docs/kubernetes/ingress.mdx
  • docs/kubernetes/managing-certificates.mdx
  • docs/kubernetes/openshift.mdx
  • docs/kubernetes/setup.mdx
  • docs/kubernetes/topology.mdx
  • docs/observability/accessing-logs.mdx
  • docs/observability/logging.mdx
  • docs/observability/ocsf-json-export.mdx
  • docs/observability/overview.mdx
  • docs/providers/aws-sigv4.mdx
  • docs/providers/google-cloud.mdx
  • docs/providers/google-vertex-ai.mdx
  • docs/reference/default-policy.mdx
  • docs/reference/gateway-auth.mdx
  • docs/reference/gateway-config.mdx
  • docs/reference/policy-schema.mdx
  • docs/reference/sandbox-compute-drivers.mdx
  • docs/reference/support-matrix.mdx
  • docs/sandboxes/about.mdx
  • docs/sandboxes/community-sandboxes.mdx
  • docs/sandboxes/inference-routing.mdx
  • docs/sandboxes/manage-gateways.mdx
  • docs/sandboxes/manage-providers.mdx
  • docs/sandboxes/manage-sandboxes.mdx
  • docs/sandboxes/policies.mdx
  • docs/sandboxes/policy-advisor.mdx
  • docs/sandboxes/providers-v2.mdx
  • docs/security/best-practices.mdx
  • e2e/gpu/README.md
  • e2e/gpu/images/cuda-basic/Dockerfile
  • e2e/gpu/images/cuda-basic/README.md
  • e2e/gpu/images/cuda-basic/workload.sh
  • e2e/gpu/images/smoke-fail/Dockerfile
  • e2e/gpu/images/smoke-fail/README.md
  • e2e/gpu/images/smoke-fail/workload.sh
  • e2e/gpu/images/smoke-pass/Dockerfile
  • e2e/gpu/images/smoke-pass/README.md
  • e2e/gpu/images/smoke-pass/workload.sh
  • e2e/install/bash_test.sh
  • e2e/install/fish_test.fish
  • e2e/install/helpers.sh
  • e2e/install/sh_test.sh
  • e2e/install/zsh_test.sh
  • e2e/kubernetes/postgres-fixture.yaml
  • e2e/mcp-conformance.sh
  • e2e/mcp-conformance/Dockerfile.client
  • e2e/mcp-conformance/Dockerfile.client.dockerignore
  • e2e/mcp-conformance/README.md
  • e2e/mcp-conformance/client-through-openshell.sh
  • e2e/mcp-conformance/expected-failures.yml
  • e2e/mcp-conformance/host-bridge.py
  • e2e/mcp-conformance/policy-template.yaml
  • e2e/mcp-conformance/render-policy.py
  • e2e/mcp-conformance/runner-shim.mjs
  • e2e/policy-advisor/README.md
  • e2e/policy-advisor/mechanistic-smoke.sh
  • e2e/policy-advisor/policy.template.yaml
  • e2e/policy-advisor/sandbox-runner.sh
  • e2e/policy-advisor/test.sh
  • e2e/policy-advisor/wait-smoke.sh
  • e2e/python/conftest.py
  • e2e/python/oidc/conftest.py
  • e2e/python/oidc/oidc_auth_test.py
  • e2e/python/test_inference_routing.py
  • e2e/python/test_sandbox_api.py
  • e2e/python/test_sandbox_gpu.py
  • e2e/python/test_sandbox_policy.py
  • e2e/python/test_sandbox_providers.py
  • e2e/python/test_security_tls.py
  • e2e/python/test_workspace_api.py
  • e2e/rust/Cargo.toml
  • e2e/rust/e2e-docker.sh
  • e2e/rust/e2e-kubernetes.sh
  • e2e/rust/e2e-openshift.sh
  • e2e/rust/e2e-podman-rootless.sh
  • e2e/rust/e2e-podman.sh
  • e2e/rust/e2e-vm.sh
  • e2e/rust/src/harness/binary.rs
  • e2e/rust/src/harness/cli.rs
  • e2e/rust/src/harness/container.rs
  • e2e/rust/src/harness/gateway.rs
  • e2e/rust/src/harness/mod.rs
  • e2e/rust/src/harness/output.rs
  • e2e/rust/src/harness/port.rs
  • e2e/rust/src/harness/sandbox.rs
  • e2e/rust/tests/bypass_detection.rs
  • e2e/rust/tests/cf_auth_smoke.rs
  • e2e/rust/tests/cli_smoke.rs
  • e2e/rust/tests/community_image.rs
  • e2e/rust/tests/core_dump_hardening.rs
  • e2e/rust/tests/custom_image.rs
  • e2e/rust/tests/docker_preflight.rs
  • e2e/rust/tests/driver_config_volume.rs
  • e2e/rust/tests/edge_tunnel_e2e.rs
  • e2e/rust/tests/forward_proxy_graphql_l7.rs
  • e2e/rust/tests/forward_proxy_jsonrpc_l7.rs
  • e2e/rust/tests/forward_proxy_l7_bypass.rs
  • e2e/rust/tests/gateway_resume.rs
  • e2e/rust/tests/gpu.rs
  • e2e/rust/tests/gpu/device_selection.rs
  • e2e/rust/tests/gpu/workloads.rs
  • e2e/rust/tests/host_gateway_alias.rs
  • e2e/rust/tests/landlock.rs
  • e2e/rust/tests/live_policy_update.rs
  • e2e/rust/tests/local_driver_token_restart.rs
  • e2e/rust/tests/no_proxy.rs
  • e2e/rust/tests/podman_gateway_resume.rs
  • e2e/rust/tests/port_forward.rs
  • e2e/rust/tests/provider_auto_create.rs
  • e2e/rust/tests/readyz_health.rs
  • e2e/rust/tests/sandbox_labels.rs
  • e2e/rust/tests/sandbox_lifecycle.rs
  • e2e/rust/tests/settings_management.rs
  • e2e/rust/tests/smoke.rs
  • e2e/rust/tests/sync.rs
  • e2e/rust/tests/upload_create.rs
  • e2e/rust/tests/user_namespaces.rs
  • e2e/rust/tests/vm_gateway_resume.rs
  • e2e/rust/tests/websocket_conformance.rs
  • e2e/rust/tests/workspace_lifecycle.rs
  • e2e/support/capbset-probe.c
  • e2e/support/gateway-common.sh
  • e2e/with-docker-gateway.sh
  • e2e/with-kube-gateway.sh
  • e2e/with-podman-gateway.sh
  • examples/agent-driven-policy-management/README.md
  • examples/agent-driven-policy-management/agent-task.md
  • examples/agent-driven-policy-management/demo.sh
  • examples/agent-driven-policy-management/policy.template.yaml
  • examples/agent-driven-policy-management/sandbox-agent.sh
  • examples/aws-s3-sts.md
  • examples/bring-your-own-container/Dockerfile
  • examples/bring-your-own-container/README.md
  • examples/gateway-deploy-connect.md
  • examples/governance-interceptor/Cargo.toml
  • examples/governance-interceptor/README.md
  • examples/governance-interceptor/policy.yaml
  • examples/governance-interceptor/profiles/github.yaml
  • examples/governance-interceptor/profiles/slack.yaml
  • examples/governance-interceptor/smoke.sh
  • examples/governance-interceptor/src/main.rs
  • examples/governance-interceptor/src/policy_hash.rs
  • examples/governance-interceptor/src/proto_json.rs
  • examples/governance-interceptor/src/smoke_client.rs
  • examples/governance-interceptor/src/tests.rs
  • examples/local-inference/README.md
  • examples/local-inference/routes.yaml
  • examples/multi-agent-notepad/.gitignore
  • examples/multi-agent-notepad/README.md
  • examples/multi-agent-notepad/demo.sh
  • examples/multi-agent-notepad/policy.template.yaml
  • examples/multi-agent-notepad/prompts/synthesis.md
  • examples/multi-agent-notepad/prompts/worker.md
  • examples/multi-agent-notepad/runner.sh
  • examples/openclaw.md
  • examples/policy-advisor/README.md
  • examples/private-ip-routing/README.md
  • examples/sandbox-policy-quickstart/README.md
  • examples/sandbox-policy-quickstart/demo.sh
  • examples/spiffe-token-grant-demo/README.md
  • examples/spiffe-token-grant-demo/demo.sh
  • examples/spiffe-token-grant-demo/k8s/kustomization.yaml
  • examples/spiffe-token-grant-demo/k8s/protected-service.js
  • examples/spiffe-token-grant-demo/k8s/token-issuer.js
  • examples/spiffe-token-grant-demo/k8s/workloads.yaml
  • examples/spiffe-token-grant-demo/provider-profile.yaml
  • examples/sync-files.md
  • examples/vscode-remote-sandbox.md
  • fern/docs.yml
  • fern/fern.config.json
  • fern/main.css
  • flake.nix
  • install-vm.sh
  • install.sh
  • mise.toml
  • openshell.spec
  • proto/compute_driver.proto
  • proto/datamodel.proto
  • proto/gateway_interceptor.proto
  • proto/inference.proto
  • proto/openshell.proto
  • proto/options.proto
  • proto/sandbox.proto
  • proto/supervisor_middleware.proto
  • providers/aws-bedrock.yaml
  • providers/aws-s3.yaml
  • providers/aws.yaml
  • providers/claude-code.yaml
  • providers/codex.yaml
  • providers/copilot.yaml
  • providers/cursor.yaml
  • providers/deepinfra.yaml
  • providers/github.yaml
  • providers/google-cloud.yaml
  • providers/google-vertex-ai.yaml
  • providers/nvidia.yaml
  • providers/pypi.yaml
  • pyproject.toml
  • python/openshell/__init__.py
  • python/openshell/py.typed
  • python/openshell/release_formula_test.py
  • python/openshell/sandbox.py
  • python/openshell/sandbox_test.py
  • python/release_tooling_test.py
  • rfc/0000-template.md
  • rfc/0000-template/README.md
  • rfc/0001-core-architecture/README.md
  • rfc/0002-agent-driven-policy-management/README.md
  • rfc/0003-gateway-configuration/README.md
  • rfc/0004-sandbox-resource-requirements/README.md
  • rfc/0006-driver-config-passthrough/README.md
  • rfc/0009-supervisor-middleware/README.md
  • rfc/0009-supervisor-middleware/appendices/deployment-options.md
  • rfc/0009-supervisor-middleware/appendices/protocol-extensions.md
  • rfc/0010-gateway-interceptors/README.md
  • rfc/0011-multi-player-design/README.md
  • rfc/README.md
  • rust-toolchain.toml
  • scripts/agents/README.md
  • scripts/agents/gator/.gitignore
  • scripts/agents/gator/Dockerfile
  • scripts/agents/gator/README.md
  • scripts/agents/gator/agent.yaml
  • scripts/agents/gator/bin/gh
  • scripts/agents/gator/bin/gh_guard_test.sh
  • scripts/agents/gator/policy.yaml
  • scripts/agents/gator/prompts/gator.md
  • scripts/agents/gator/providers/codex-gator.yaml
  • scripts/agents/gator/providers/github-gator.yaml
  • scripts/agents/gator/skills/gator-gate/SKILL.md
  • scripts/agents/run.sh
  • scripts/agents/runtime/entrypoint.sh
  • scripts/agents/runtime/harnesses/codex/exec.sh
  • scripts/agents/runtime/harnesses/codex/install-codex.sh
  • scripts/agents/runtime/harnesses/codex/subagent.sh
  • scripts/agents/runtime/subagent.sh
  • scripts/agents/runtime/supervisor.sh
  • scripts/agents/runtime/supervisor_test.sh
  • scripts/baseline_workflow_metrics.py
  • scripts/bin/k9s
  • scripts/bin/kubectl
  • scripts/bin/openshell
  • scripts/bin/openshell-vm
  • scripts/build-benchmark/README.md
  • scripts/build-benchmark/cluster-deploy-fast-test.sh
  • scripts/docker-cleanup.sh
  • scripts/keycloak-dev.sh
  • scripts/keycloak-realm.json
  • scripts/lint-mermaid/lint-mermaid.mjs
  • scripts/lint-mermaid/package.json
  • scripts/remote-deploy.sh
  • scripts/smoke-test-network-policy.sh
  • scripts/update_license_headers.py
  • snap/local/term.desktop
  • snapcraft.yaml
  • tasks/ci.toml
  • tasks/cluster.toml
  • tasks/docker.toml
  • tasks/gateway.toml
  • tasks/helm.toml
  • tasks/keycloak.toml
  • tasks/markdown.toml
  • tasks/package.toml
  • tasks/python.toml
  • tasks/rust.toml
  • tasks/sandbox.toml
  • tasks/scripts/build-env.sh
  • tasks/scripts/cluster-bootstrap.sh
  • tasks/scripts/cluster-deploy-fast.sh
  • tasks/scripts/cluster-push-component.sh
  • tasks/scripts/cluster.sh
  • tasks/scripts/container-engine.sh
  • tasks/scripts/docker-build-ci.sh
  • tasks/scripts/docker-build-image.sh
  • tasks/scripts/docker-publish-multiarch.sh
  • tasks/scripts/e2e-gpu-build-images.sh
  • tasks/scripts/gateway-docker.sh
  • tasks/scripts/gateway-vm.sh
  • tasks/scripts/gateway.sh
  • tasks/scripts/helm-k3s-local.sh
  • tasks/scripts/keycloak-k8s-setup.sh
  • tasks/scripts/package-deb-install.sh
  • tasks/scripts/package-deb.sh
  • tasks/scripts/release.py
  • tasks/scripts/sandbox.sh
  • tasks/scripts/setup-zig-cc-wrapper.sh
  • tasks/scripts/snap-gateway-wrapper.sh
  • tasks/scripts/stage-prebuilt-binaries.sh
  • tasks/scripts/sync_docs_website.py
  • tasks/scripts/sync_docs_website_test.py
  • tasks/scripts/test-build-env.sh
  • tasks/scripts/test-install-sh.sh
  • tasks/scripts/test-packaging-assets.sh
  • tasks/scripts/verify-glibc-symbols.sh
  • tasks/scripts/verify-telemetry-compiled-out.sh
  • tasks/scripts/vm/_lib.sh
  • tasks/scripts/vm/build-libkrun-macos.sh
  • tasks/scripts/vm/build-libkrun.sh
  • tasks/scripts/vm/build-rootfs-tarball.sh
  • tasks/scripts/vm/build-supervisor-bundle.sh
  • tasks/scripts/vm/bundle-vm-runtime.sh
  • tasks/scripts/vm/codesign-openshell-vm.sh
  • tasks/scripts/vm/compress-vm-runtime.sh
  • tasks/scripts/vm/download-kernel-runtime.sh
  • tasks/scripts/vm/ensure-vm-rootfs.sh
  • tasks/scripts/vm/package-vm-runtime.sh
  • tasks/scripts/vm/run-vm.sh
  • tasks/scripts/vm/smoke-orphan-cleanup.sh
  • tasks/scripts/vm/sync-vm-rootfs.sh
  • tasks/scripts/vm/vm-clean.sh
  • tasks/scripts/vm/vm-setup.sh
  • tasks/test.toml
  • tasks/vm.toml
  • telemetry/README.md

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/force-sync-upstream

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.