Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
26 changes: 13 additions & 13 deletions .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1026,7 +1026,7 @@ jobs:
E2E_ARTIFACT_DIR: ${{ github.workspace }}/e2e-artifacts/live/openshell-gateway-auth-contract
NEMOCLAW_RUN_LIVE_E2E: "1"
NEMOCLAW_NON_INTERACTIVE: "1"
NEMOCLAW_OPENSHELL_PIN_VERSION: "0.0.99"
NEMOCLAW_OPENSHELL_PIN_VERSION: "0.0.101"
DOCKER_GRPC_PROBE_IMAGE: "node:22-trixie-slim@sha256:e6d9a389d34ff9678438af985c9913fbd1eb6ed36e80fea56644f4b4f6dd70ba"
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
Expand Down Expand Up @@ -1111,7 +1111,7 @@ jobs:
NEMOCLAW_OPENSHELL_CHANNEL: stable
NEMOCLAW_OPENSHELL_EXACT_MAIN_PROOF: "1"
NEMOCLAW_RUN_LIVE_E2E: "1"
OPENSHELL_DOCKER_SUPERVISOR_IMAGE: ghcr.io/nvidia/openshell/supervisor@sha256:ea3632b6e9528e2309103af5b6949606fcdc83ca1f69e8db81482a25bea84bb6
OPENSHELL_DOCKER_SUPERVISOR_IMAGE: ghcr.io/nvidia/openshell/supervisor@sha256:b58be5e40c788977ffa0e8305a8cad9c656efdf1a3fe182582a00ca870bb0edb
steps:
- id: trusted_hermes_swap
name: Provision trusted Hermes E2E swap
Expand Down Expand Up @@ -1364,12 +1364,12 @@ jobs:
jq -n '{
schemaVersion: 1,
sourceRepository: "NVIDIA/OpenShell",
releaseTag: "v0.0.99",
sourceSha: "8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032",
releaseTag: "v0.0.101",
sourceSha: "8ddd98c3dff62619a3963f99ba1e055b67650e72",
artifacts: {
cli: {binarySha256: "5c0dabb90152a3cfae9005731771da99f00a22403080c81952c7be8ba4b5728f"},
gateway: {binarySha256: "05bd6c982dd72b73364b91ab694487c026bc56d0cd869f4289b44cc392a5c2ba"},
standaloneSandbox: {binarySha256: "a4b0c38ed90a6dd4b4f312ad3727824a25ec478d88d4e65d22a82377b18e6214"}
cli: {binarySha256: "1ad48efd5e1de8f3f017a81b3a7177872f350343a1a8d8074c7e844bca4801e9"},
gateway: {binarySha256: "a6a5d754605a2144b148637b85a09291d2eeb77e08a4ee34b83685c6920448f5"},
standaloneSandbox: {binarySha256: "a2704babbb468fd0a359bfdd9844de71095b730758541b4ca8cbab77d4018920"}
}
}' > "$E2E_ARTIFACT_DIR/mcp-bridge-deepagents/openshell-exact-main-provenance.json"
fi
Expand Down Expand Up @@ -1433,7 +1433,7 @@ jobs:
NEMOCLAW_OPENSHELL_CHANNEL: stable
NEMOCLAW_OPENSHELL_EXACT_MAIN_PROOF: "1"
NEMOCLAW_RUN_LIVE_E2E: "1"
OPENSHELL_DOCKER_SUPERVISOR_IMAGE: ghcr.io/nvidia/openshell/supervisor@sha256:ea3632b6e9528e2309103af5b6949606fcdc83ca1f69e8db81482a25bea84bb6
OPENSHELL_DOCKER_SUPERVISOR_IMAGE: ghcr.io/nvidia/openshell/supervisor@sha256:b58be5e40c788977ffa0e8305a8cad9c656efdf1a3fe182582a00ca870bb0edb
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
Expand Down Expand Up @@ -1485,12 +1485,12 @@ jobs:
jq -n '{
schemaVersion: 1,
sourceRepository: "NVIDIA/OpenShell",
releaseTag: "v0.0.99",
sourceSha: "8c7dd148a9e6360c9d5b2830e339a0dc4b3f3032",
releaseTag: "v0.0.101",
sourceSha: "8ddd98c3dff62619a3963f99ba1e055b67650e72",
artifacts: {
cli: {binarySha256: "5c0dabb90152a3cfae9005731771da99f00a22403080c81952c7be8ba4b5728f"},
gateway: {binarySha256: "05bd6c982dd72b73364b91ab694487c026bc56d0cd869f4289b44cc392a5c2ba"},
standaloneSandbox: {binarySha256: "a4b0c38ed90a6dd4b4f312ad3727824a25ec478d88d4e65d22a82377b18e6214"}
cli: {binarySha256: "1ad48efd5e1de8f3f017a81b3a7177872f350343a1a8d8074c7e844bca4801e9"},
gateway: {binarySha256: "a6a5d754605a2144b148637b85a09291d2eeb77e08a4ee34b83685c6920448f5"},
standaloneSandbox: {binarySha256: "a2704babbb468fd0a359bfdd9844de71095b730758541b4ca8cbab77d4018920"}
}
}' > "$E2E_ARTIFACT_DIR/openshell-credential-generation-window/openshell-exact-main-provenance.json"

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/podman-cpu-proof.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
E2E_JOB: "1"
E2E_TARGET_ID: podman-cpu-lifecycle
NEMOCLAW_RUN_LIVE_E2E: "1"
NEMOCLAW_OPENSHELL_PIN_VERSION: "0.0.99"
NEMOCLAW_OPENSHELL_PIN_VERSION: "0.0.101"
PODMAN_APT_VERSION: "5.7.0+ds2-3build1"
steps:
- name: Checkout
Expand Down
6 changes: 3 additions & 3 deletions agents/hermes/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ COPY agents/hermes/finalize-tirith-marker.py /usr/local/lib/nemoclaw/finalize-ti
COPY agents/hermes/build-mcp-digest.py /usr/local/lib/nemoclaw/build-hermes-mcp-digest.py
COPY agents/hermes/mcp-config-transaction.py /usr/local/lib/nemoclaw/hermes-mcp-config-transaction.py
COPY agents/hermes/cron-restore-control.py /usr/local/lib/nemoclaw/hermes-cron-restore-control.py
COPY src/lib/actions/sandbox/openshell-child-visible-credentials.v0.0.99.json /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.99.json
COPY src/lib/actions/sandbox/openshell-child-visible-credentials.v0.0.101.json /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.101.json
COPY scripts/state-dir-guard.py /usr/local/lib/nemoclaw/state-dir-guard.py
COPY agents/hermes/state-lock-plan.json /usr/local/share/nemoclaw/state-lock-plan.json
COPY nemoclaw-blueprint/scripts/*.js /usr/local/lib/nemoclaw/preloads/
Expand Down Expand Up @@ -378,12 +378,12 @@ RUN chmod -R a+rX /opt/nemoclaw-blueprint/
# minimum supported Hermes sandbox base tag guarantees those artifacts and
# test/sandbox-rlimit-hooks.test.ts covers that base.
RUN chmod 755 /usr/local/bin/nemoclaw-start /usr/local/bin/nemoclaw-managed-startup-hold /usr/local/bin/nemoclaw-managed-bootstrap /usr/local/lib/nemoclaw/sandbox-init.sh /usr/local/lib/nemoclaw/validate-hermes-env-secret-boundary.py /usr/local/lib/nemoclaw/patch-hermes-session-list-preview.py /usr/local/lib/nemoclaw/patch-hermes-sqlite-temp-store.py /usr/local/lib/nemoclaw/patch-hermes-discord-recovery-permissions.py /usr/local/lib/nemoclaw/patch-hermes-profile-policy-defaults.py /usr/local/lib/nemoclaw/seed-hermes-dashboard-config.py /usr/local/lib/nemoclaw/hermes-runtime-config-guard.py /usr/local/lib/nemoclaw/finalize-tirith-marker.py /usr/local/lib/nemoclaw/hermes-mcp-config-transaction.py \
&& chown root:root /usr/local/bin/nemoclaw-gateway-control /usr/local/lib/nemoclaw/gateway-supervisor.sh /usr/local/lib/nemoclaw/state-dir-guard.py /usr/local/share/nemoclaw/state-lock-plan.json /usr/local/lib/nemoclaw/managed-gateway-control.py /usr/local/lib/nemoclaw/build-hermes-mcp-digest.py /usr/local/lib/nemoclaw/hermes-cron-restore-control.py /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.99.json \
&& chown root:root /usr/local/bin/nemoclaw-gateway-control /usr/local/lib/nemoclaw/gateway-supervisor.sh /usr/local/lib/nemoclaw/state-dir-guard.py /usr/local/share/nemoclaw/state-lock-plan.json /usr/local/lib/nemoclaw/managed-gateway-control.py /usr/local/lib/nemoclaw/build-hermes-mcp-digest.py /usr/local/lib/nemoclaw/hermes-cron-restore-control.py /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.101.json \
&& chmod 700 /usr/local/bin/nemoclaw-gateway-control /usr/local/lib/nemoclaw/hermes-cron-restore-control.py \
&& chmod 500 /usr/local/lib/nemoclaw/state-dir-guard.py /usr/local/lib/nemoclaw/managed-gateway-control.py \
&& chmod 444 /usr/local/lib/nemoclaw/entrypoint-env-wrapper.sh /usr/local/share/nemoclaw/state-lock-plan.json /usr/local/lib/nemoclaw/gateway-supervisor.sh /usr/local/lib/nemoclaw/build-hermes-mcp-digest.py /usr/local/lib/nemoclaw/managed_policy.py \
&& chmod 444 /usr/local/lib/nemoclaw/patch-hermes-langfuse-credentials.mts \
&& chmod 444 /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.99.json \
&& chmod 444 /usr/local/lib/nemoclaw/openshell-child-visible-credentials.v0.0.101.json \
&& if [ -d /usr/local/lib/nemoclaw/preloads ]; then \
chown -R 0:0 /usr/local/lib/nemoclaw/preloads \
&& find /usr/local/lib/nemoclaw/preloads -type f -exec chmod 444 {} + \
Expand Down
10 changes: 5 additions & 5 deletions agents/hermes/mcp-config-transaction.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
r"^Bearer openshell:resolve:env:([A-Za-z_][A-Za-z0-9_]{0,127})$"
)
OPENSHELL_REVISIONED_CREDENTIAL_NAME_RE = re.compile(r"^v[0-9]+_[A-Za-z0-9_]+$")
BOUNDARY_MANIFEST_NAME = "openshell-child-visible-credentials.v0.0.99.json"
BOUNDARY_MANIFEST_NAME = "openshell-child-visible-credentials.v0.0.101.json"
ANSI_ESCAPE_RE = re.compile(
r"\x1b(?:\[[0-?]*[ -/]*[@-~]|\][^\x07]*(?:\x07|\x1b\\)|[@-_])"
)
Expand Down Expand Up @@ -107,7 +107,7 @@ def _load_credential_boundary_manifest() -> dict[str, object]:
# corrupt, or wrong-version OpenShell boundary manifest.
# sourceBoundary: NemoClaw owns one reviewed manifest installed beside this
# helper in images; the second path is the deterministic source-checkout layout.
# whyNotSourceFix: OpenShell v0.0.99 has no machine-readable child-env contract.
# whyNotSourceFix: OpenShell v0.0.101 has no machine-readable child-env contract.
# It also deliberately hides the supervisor identity mount from workload
# children and the Hermes image contains no OpenShell CLI. Executing
# ``openshell --version`` here would therefore either fail every real
Expand Down Expand Up @@ -135,7 +135,7 @@ def _load_credential_boundary_manifest() -> dict[str, object]:
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
if (
not isinstance(manifest, dict)
or manifest.get("openshellVersion") != "0.0.99"
or manifest.get("openshellVersion") != "0.0.101"
):
raise RuntimeError("Hermes MCP credential boundary manifest is invalid")
return manifest
Expand Down Expand Up @@ -319,7 +319,7 @@ def _validate_payload(action: str, payload: dict[str, object]) -> None:
}
if action == "add" and hostname in host_aliases:
raise ValueError(
"Authenticated MCP OpenShell host aliases are unavailable with OpenShell v0.0.99"
"Authenticated MCP OpenShell host aliases are unavailable with OpenShell v0.0.101"
)
# Host preflight owns destination trust and binds every accepted endpoint to
# exact OpenShell address pins. This in-sandbox check revalidates canonical
Expand Down Expand Up @@ -1091,7 +1091,7 @@ def _assert_non_root_lifecycle_identity() -> None:
# topology.
# sourceBoundary: OpenShell owns workload topology; NemoClaw owns the
# immutable root-lifecycle marker and validates it before mutation.
# whyNotSourceFix: OpenShell 0.0.99 supports both topologies but exposes no
# whyNotSourceFix: OpenShell 0.0.101 supports both topologies but exposes no
# attested same-UID capability that this packaged helper can query.
# regressionTest: hermes-mcp-config-transaction.test.ts rejects both probe
# and add when the root-lifecycle marker identifies the legacy topology.
Expand Down
2 changes: 1 addition & 1 deletion agents/hermes/runtime-config-guard.py
Original file line number Diff line number Diff line change
Expand Up @@ -590,7 +590,7 @@ def _pinned_process_matches_supervised_nonroot_start(
supervisor_identity: tuple[str, int | None],
expected_effective_uid: int,
) -> bool:
# OpenShell 0.0.99 keeps its supervisor at PID 1 and launches the non-root
# OpenShell 0.0.101 keeps its supervisor at PID 1 and launches the non-root
# NemoClaw entrypoint as a child, so startup authority must be proved from
# pinned procfs identity rather than a PID-1 equality check. Remove this
# compatibility proof when #6256 provides authenticated supervisor/runtime
Expand Down
2 changes: 1 addition & 1 deletion agents/hermes/start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3279,7 +3279,7 @@ fi
# while Hermes actually runs in the legacy root-separated topology.
# sourceBoundary: OpenShell owns workload topology; NemoClaw owns the immutable
# root-lifecycle marker and stamps it before starting the root-separated gateway.
# whyNotSourceFix: OpenShell 0.0.99 supports both topologies but exposes no
# whyNotSourceFix: OpenShell 0.0.101 supports both topologies but exposes no
# attested same-UID capability that this packaged entrypoint can query.
# regressionTest: hermes-mcp-config-transaction.test.ts rejects both probe and
# add when the root-lifecycle marker identifies the legacy topology.
Expand Down
2 changes: 1 addition & 1 deletion ci/platform-matrix.json
Original file line number Diff line number Diff line change
Expand Up @@ -258,7 +258,7 @@
{
"name": "Intel Mac (macOS x86_64)",
"status": "unsupported",
"notes": "The supported OpenShell Homebrew gateway service path is Apple Silicon only, and OpenShell does not publish macOS x86_64 standalone gateway assets. The top-level installer rejects Intel Mac hosts before release-ref resolution or downloads (`install.sh:108`), and the OpenShell installer retains a downstream asset guard (`scripts/install-openshell.sh:689`). See issue #954 (closed)."
"notes": "The supported OpenShell Homebrew gateway service path is Apple Silicon only, and OpenShell does not publish macOS x86_64 standalone gateway assets. The top-level installer rejects Intel Mac hosts before release-ref resolution or downloads (`install.sh:108`), and the OpenShell installer retains a downstream asset guard (`scripts/install-openshell.sh:687`). See issue #954 (closed)."
},
{
"name": "Non-Ubuntu/Debian Linux distros",
Expand Down
Loading
Loading