Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
258 commits
Select commit Hold shift + click to select a range
1d8c3bf
fix(openshell): scrub stale gateway auth disable env
ericksoa Jun 22, 2026
5dc5178
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 23, 2026
c05366d
Update OpenShell gateway upgrade scenario pins
ericksoa Jun 23, 2026
21a85d9
test(e2e): accept sandbox gateway host in 4462 scenario
ericksoa Jun 23, 2026
98925bd
test(openshell): cover gateway JWT contract
ericksoa Jun 23, 2026
e443f8b
test(openshell): satisfy gateway JWT guardrail
ericksoa Jun 23, 2026
6204963
test(openshell): make gateway watchdog swap deterministic
ericksoa Jun 23, 2026
ceb0a9a
ci(e2e): use valid scenario inference credential
ericksoa Jun 23, 2026
c6d2c7d
ci(e2e): restore dedicated inference secret source
ericksoa Jun 23, 2026
59145b7
test(openshell): split gateway config contract coverage
ericksoa Jun 23, 2026
d54d657
fix(openshell): tighten compat gateway bind default
ericksoa Jun 23, 2026
c4b8b13
test(openshell): keep auth fixture linear
ericksoa Jun 23, 2026
39e6552
fix(openshell): keep compat gateway loopback-only
ericksoa Jun 23, 2026
341ae14
fix(openshell): guard wildcard gateway binds
ericksoa Jun 23, 2026
ed0da2f
fix(openshell): narrow wildcard guard to package service
ericksoa Jun 23, 2026
faada18
test(openshell): add gateway source contract
ericksoa Jun 23, 2026
790525d
test(openshell): keep source contract linear
ericksoa Jun 23, 2026
4b9c114
ci(e2e): fall back to NVIDIA_API_KEY for vitest scenarios
ericksoa Jun 23, 2026
9673eca
ci(e2e): prefer NVIDIA_API_KEY for vitest scenarios
ericksoa Jun 23, 2026
ef56901
test(openshell): remove e2e scenario churn
ericksoa Jun 23, 2026
d8cf193
test(openshell): align version-pin e2e expectations
ericksoa Jun 23, 2026
49a69bc
fix(openshell): harden docker gateway auth boundary
ericksoa Jun 23, 2026
4e287d9
style(openshell): apply static check formatting
ericksoa Jun 23, 2026
aae3823
test(openshell): align gateway upgrade fixture version
ericksoa Jun 23, 2026
fcf5176
Merge remote-tracking branch 'origin/main' into openshell-pr-5596
ericksoa Jun 23, 2026
9133090
fix(openshell): preserve host CLI gateway auth compatibility
ericksoa Jun 23, 2026
f1edb11
Merge remote-tracking branch 'origin/main' into openshell-pr-5596
ericksoa Jun 23, 2026
e4c137f
Merge remote-tracking branch 'origin/main' into openshell-pr-5596
ericksoa Jun 24, 2026
3e48cfc
Merge remote-tracking branch 'origin/main' into openshell-pr-5596
ericksoa Jun 25, 2026
0eb2574
fix(onboard): keep gateway TLS setup in helpers
ericksoa Jun 25, 2026
d6957e9
test(openshell): keep auth contract test linear
ericksoa Jun 25, 2026
91cb4a5
test(gateway): expect docker driver tls endpoint
ericksoa Jun 25, 2026
153a550
fix(openshell): stabilize nightly gateway recovery checks
ericksoa Jun 25, 2026
40135e9
test(cli): split markerless recovery coverage
ericksoa Jun 25, 2026
23054b4
Merge branch 'main' into dep/openshell-v0.0.67
ericksoa Jun 25, 2026
3c971a7
test(e2e): accept sandbox gateway URL in 4462 guard
ericksoa Jun 25, 2026
412b3d5
test(e2e): approve initial 4462 pairing via gateway
ericksoa Jun 25, 2026
e9948f0
test(e2e): pass gateway token for initial 4462 approval
ericksoa Jun 25, 2026
9e3ddef
test(e2e): seed low-scope 4462 bootstrap pairing
ericksoa Jun 25, 2026
9521e64
test(e2e): accept sandbox URL in 4462 legacy check
ericksoa Jun 25, 2026
0176918
test(e2e): stabilize OpenShell 0.0.67 matrix
ericksoa Jun 25, 2026
b9dcd54
test(e2e): tolerate wrapped TUI reply tokens
ericksoa Jun 25, 2026
b3e651d
test(e2e): keep sessions admin RPCs local
ericksoa Jun 25, 2026
f8effe9
test(e2e): use OpenClaw SDK for sessions admin RPCs
ericksoa Jun 25, 2026
5ac13fd
test(e2e): source gateway env for sessions RPCs
ericksoa Jun 25, 2026
5a61f17
test(e2e): avoid multiline sessions RPC args
ericksoa Jun 25, 2026
5c042a3
test(e2e): stabilize OpenShell nightly expectations
ericksoa Jun 25, 2026
c3a65ec
test(e2e): tolerate OpenClaw pairing request churn
ericksoa Jun 25, 2026
3f16a91
test(e2e): recover consumed legacy scope requests
ericksoa Jun 25, 2026
a7df6bd
test(e2e): relax live Kimi trajectory shape
ericksoa Jun 25, 2026
2d5b4f8
Merge branch 'main' of https://github.com/NVIDIA/NemoClaw into dep/op…
ericksoa Jun 25, 2026
5d6d615
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 25, 2026
f1bbde0
fix(openshell): reject wildcard direct gateway binds
ericksoa Jun 25, 2026
c5de72f
test(openshell): cover gateway auth source boundaries
ericksoa Jun 25, 2026
4cfe88b
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 25, 2026
4aa9daa
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 26, 2026
b91a48f
fix(onboard): format invalid messaging config values
ericksoa Jun 26, 2026
e861c25
fix(onboard): avoid invalid config value overload ambiguity
ericksoa Jun 26, 2026
148caed
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 26, 2026
e99d9c5
fix(onboard): pass manifests to channel availability
ericksoa Jun 26, 2026
24ddda0
fix(onboard): preserve complete gateway TLS bundle
ericksoa Jun 26, 2026
3070a32
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 26, 2026
35204de
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 26, 2026
7709917
fix(onboard): validate reused gateway TLS bundle
ericksoa Jun 26, 2026
8e21802
style(onboard): sort TLS helper imports
ericksoa Jun 26, 2026
8e91f72
test(onboard): avoid literal TLS private key fixture
ericksoa Jun 26, 2026
3e01372
fix(onboard): reject stale gateway TLS bundles
ericksoa Jun 26, 2026
ccb7e5d
test(e2e): narrow auth probe TLS mounts
ericksoa Jun 26, 2026
7ae9153
test(e2e): keep auth probe mount test linear
ericksoa Jun 26, 2026
5ccd976
fix(onboard): validate gateway TLS auth reuse
ericksoa Jun 26, 2026
8e1ceff
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 26, 2026
64de908
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 26, 2026
e3dbd65
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 26, 2026
d387c8c
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 26, 2026
73748a5
fix(install): pin OpenShell release digests
ericksoa Jun 26, 2026
fa40688
test(openshell): register auth contract scenario
ericksoa Jun 26, 2026
aaf2a86
test(e2e): keep workflow support under budget
ericksoa Jun 26, 2026
7ccb069
test(openshell): keep jwt binding test linear
ericksoa Jun 26, 2026
04e730e
fix(openshell): harden gateway auth checks
ericksoa Jun 27, 2026
0972198
test(openshell): avoid private key fixture marker
ericksoa Jun 27, 2026
913cc7b
fix(openshell): reduce gateway recovery and compat risk
ericksoa Jun 27, 2026
6499ac8
fix(openshell): tighten compat gateway review gaps
ericksoa Jun 27, 2026
d7da0c9
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
043c199
test(openshell): keep jwt guardrail test linear
ericksoa Jun 27, 2026
38869b5
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
2bf0f8d
test(openshell): cover advisor boundary followups
ericksoa Jun 27, 2026
3f6c047
test(openshell): avoid env executable overrides in auth contract
ericksoa Jun 27, 2026
1c3f261
test(openshell): address advisor security followups
ericksoa Jun 27, 2026
a3beb47
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
daaccd1
fix(openshell): reject tcp docker host in compat gateway
ericksoa Jun 27, 2026
c22f37d
test(openshell): split compat gateway launch coverage
ericksoa Jun 27, 2026
4c01501
test(openshell): keep compat coverage linear
ericksoa Jun 27, 2026
a0fc68f
refactor(openshell): extract compat gateway launch
ericksoa Jun 27, 2026
5c918ae
fix(openshell): require dev install no-verify opt-in
ericksoa Jun 27, 2026
389b4fc
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
03587ba
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
37b2fc8
fix(openshell): require compat container opt-in
ericksoa Jun 27, 2026
51d0341
fix(docs): keep security MDX comments preview-safe
ericksoa Jun 27, 2026
89e52f8
fix(security): fail closed on recovery boundary gaps
ericksoa Jun 27, 2026
8fef7bc
test(security): expect fail-closed Hermes recovery
ericksoa Jun 27, 2026
7f87b15
fix(ci): gate OpenShell auth contract dispatch
ericksoa Jun 27, 2026
11c6459
test(ci): split auth contract workflow boundary
ericksoa Jun 27, 2026
2001575
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
62cc891
chore(openshell): advance stable pin to 0.0.71
ericksoa Jun 27, 2026
0748bdb
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
744bffd
fix(openshell): recover stale gateway JWT locks
ericksoa Jun 27, 2026
e137b82
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
1327197
fix(openshell): surface compatibility trust warning
ericksoa Jun 27, 2026
2b551e5
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
1ae2d47
test(openshell): harden 0.0.71 live contracts
ericksoa Jun 27, 2026
62c573a
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
8183505
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
67bed91
test(e2e): accept pre-spawn gateway failures
ericksoa Jun 27, 2026
37aa3a5
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 27, 2026
93d9aea
test(e2e): bootstrap OpenClaw scope upgrade
ericksoa Jun 27, 2026
598918c
test(openshell): close 0.0.71 advisor gaps
ericksoa Jun 27, 2026
bcaf23d
test(openshell): satisfy conditional guardrail
ericksoa Jun 27, 2026
5aa1b6a
fix(openshell): enforce 0.0.71 auth boundaries
ericksoa Jun 27, 2026
f470348
test(recovery): model post-health boundary probe
ericksoa Jun 27, 2026
2bf3a39
fix(openshell): close 0.0.71 review gaps
ericksoa Jun 27, 2026
394ef0f
test(openshell): keep recovery cases linear
ericksoa Jun 27, 2026
ac687ff
fix(openshell): resolve final review findings
ericksoa Jun 27, 2026
39cc1fb
test(openshell): align recovery reason assertions
ericksoa Jun 27, 2026
145ebf4
test(openshell): preserve Vitest fixture signature
ericksoa Jun 27, 2026
4313da1
fix(ci): report explicit OpenShell auth proof
ericksoa Jun 27, 2026
7ee82ec
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 28, 2026
fa2bf63
fix(install): fail closed without checksum tools
ericksoa Jun 28, 2026
cbd67d1
fix(hermes): align local base image guard
ericksoa Jun 28, 2026
cbb7f76
test(install): keep checksum fixture linear
ericksoa Jun 28, 2026
6325f34
test(e2e): repair scope upgrade bootstrap
ericksoa Jun 28, 2026
5f30537
Merge remote-tracking branch 'origin/main' into dep/openshell-v0.0.67
ericksoa Jun 28, 2026
e273848
test(e2e): converge scope approval state
ericksoa Jun 28, 2026
719e962
test(e2e): accept scoped initial CLI pairing
ericksoa Jun 28, 2026
b721615
test(e2e): seed scoped CLI pairing
ericksoa Jun 28, 2026
76be505
test(e2e): chunk scope approval probe
ericksoa Jun 28, 2026
5af4dee
test(e2e): keep probe guard declarative
ericksoa Jun 28, 2026
8fe6373
test(e2e): verify redacted token rotation
ericksoa Jun 28, 2026
19ee2f2
Merge origin/main into dep/openshell-v0.0.67
ericksoa Jun 29, 2026
918f32f
fix(hermes): add build-time validator assertion and glibc compat test
prekshivyas Jun 29, 2026
d575a5b
Merge origin/main into dep/openshell-v0.0.67
ericksoa Jun 29, 2026
5137b42
fix(rebuild): restore all channel presets on start+rebuild after stop…
prekshivyas Jun 29, 2026
e8c6187
Merge branch 'dep/openshell-v0.0.67' of https://github.com/NVIDIA/Nem…
prekshivyas Jun 29, 2026
d753808
Merge branch 'main' into dep/openshell-v0.0.67
prekshivyas Jun 29, 2026
823e3ca
test(rebuild): remove if statement from channel preset recovery test …
prekshivyas Jun 29, 2026
027f4e9
chore(openshell): upgrade supported version to 0.0.72
ericksoa Jun 30, 2026
83e1ec0
test(openshell): isolate 0.0.72 policy coverage
ericksoa Jun 30, 2026
68354ad
docs(openshell): publish 0.0.72 compatibility review
ericksoa Jun 30, 2026
88cd0c1
fix(openshell): align compatibility review references
ericksoa Jun 30, 2026
4eeedee
merge(main): port OpenShell coverage to unified E2E
ericksoa Jun 30, 2026
be74fad
test(e2e): align unified workflow contracts
ericksoa Jun 30, 2026
b2eac87
test(e2e): keep policy regressions linear
ericksoa Jun 30, 2026
93a1a3c
Merge remote-tracking branch 'origin/dep/openshell-v0.0.67' into dep/…
ericksoa Jun 30, 2026
bbe4b4e
merge(main): retarget OpenShell 0.0.72
ericksoa Jun 30, 2026
1c80fa4
fix(openshell): pin 0.0.72 release assets
ericksoa Jun 30, 2026
cc52dfc
test(blueprint): keep policy edge test linear
ericksoa Jun 30, 2026
96268d8
fix(openshell): verify release pins in CI
ericksoa Jun 30, 2026
463e6a8
fix(openshell): harden release and smoke checks
ericksoa Jun 30, 2026
78e85e6
fix(ci): keep PR hash checks credential-free
ericksoa Jun 30, 2026
97f24e1
test(openshell): tighten review contracts
ericksoa Jun 30, 2026
3e1a75f
fix(ci): verify OpenShell pins without API token
ericksoa Jun 30, 2026
de07342
fix(policy): strip provider entries from mutations
ericksoa Jun 30, 2026
8c377d3
refactor(policy): extract provider entry filtering
ericksoa Jun 30, 2026
ef96ab3
fix(policy): enforce reserved entry boundary
ericksoa Jun 30, 2026
c692d09
fix(policy): close reserved entry boundary
ericksoa Jun 30, 2026
e2fbfe2
fix(policy): stage shared boundary in sandbox builds
ericksoa Jun 30, 2026
6570142
fix(policy): support source-only plugin tests
ericksoa Jun 30, 2026
e424563
fix(policy): harden OpenShell boundary contracts
ericksoa Jun 30, 2026
bc2e9ab
test(openshell): close final compatibility gaps
ericksoa Jun 30, 2026
3969d35
test(policy): preserve arbitrary top-level fields
ericksoa Jun 30, 2026
9e515f2
fix(ci): cover OpenShell version sources
ericksoa Jun 30, 2026
bc23dda
merge(main): refresh OpenShell 0.0.72 base
ericksoa Jun 30, 2026
f5ede51
fix(policy): preserve effective diagnostic reads
ericksoa Jun 30, 2026
a7e645b
test(policy): split diagnostic read regression
ericksoa Jun 30, 2026
d478247
refactor(policy): isolate diagnostic query commands
ericksoa Jun 30, 2026
935cf56
test(openshell): cover published release resolution
ericksoa Jun 30, 2026
82c25cc
fix(policy): fail closed on mutation read errors
ericksoa Jun 30, 2026
801eb5b
test(e2e): accept opaque hosted inference credentials
ericksoa Jun 30, 2026
7da5c2f
fix(security): close OpenShell verification gaps
ericksoa Jun 30, 2026
3343563
test(workflow): execute installer change detector
ericksoa Jun 30, 2026
0d5006d
chore(openshell): merge current main into 0.0.72
ericksoa Jun 30, 2026
a9e9150
ci(security): add trusted installer hash action
ericksoa Jun 30, 2026
abaccac
fix(security): fail closed on missing installer pins
ericksoa Jun 30, 2026
69107f0
ci(security): run PR hash checks from trusted code
ericksoa Jun 30, 2026
6571063
fix(security): verify only owned installer pins
ericksoa Jun 30, 2026
a54aac7
ci(security): pin strict installer hash bootstrap
ericksoa Jun 30, 2026
638048d
fix(policy): fail closed on malformed preset YAML
ericksoa Jul 1, 2026
d1ab96b
test(policy): isolate fail-closed transition coverage
ericksoa Jul 1, 2026
8500461
refactor(policy): unify OpenShell policy boundary
ericksoa Jul 1, 2026
a6aeb08
ci(installer): expire immutable hash bootstrap
ericksoa Jul 1, 2026
b0ac984
fix(ci): compile policy boundary from TypeScript
ericksoa Jul 1, 2026
6b70658
fix(policy): reject empty base-policy reads
ericksoa Jul 1, 2026
c6885d7
docs(policy): clarify boundary dependency gate
ericksoa Jul 1, 2026
1705536
fix(policy): anchor document separator parsing
ericksoa Jul 1, 2026
621b334
fix(ci): harden trusted policy audits
ericksoa Jul 1, 2026
ea9dc63
fix(ci): parse installer pins without executing shell
ericksoa Jul 1, 2026
51441d2
chore(openshell): merge current main
ericksoa Jul 1, 2026
e2731c8
fix(ci): reconcile main E2E security contracts
ericksoa Jul 1, 2026
781a052
fix(ci): close compatibility review findings
ericksoa Jul 1, 2026
059a15d
fix(policy): reject unknown top-level policy shapes
ericksoa Jul 1, 2026
cad2e8f
fix(policy): close fail-closed review gaps
ericksoa Jul 1, 2026
8674dc5
test(policy): align legacy shape expectations
ericksoa Jul 1, 2026
12f7376
chore(openshell): merge current main
ericksoa Jul 1, 2026
eedb095
fix(ci): harden policy boundary checks
ericksoa Jul 1, 2026
a5bc9d2
fix(ci): satisfy Docker boundary lint
ericksoa Jul 1, 2026
f88a5e6
test(e2e): accept reasoning-only inference proof
ericksoa Jul 1, 2026
c378ad6
test(installer): prove missing assets fail closed
ericksoa Jul 1, 2026
6d487bd
Merge origin/main into dep/openshell-v0.0.72
ericksoa Jul 1, 2026
8f7b40e
Merge origin/main into dep/openshell-v0.0.72
ericksoa Jul 1, 2026
cce350a
Merge origin/main into dep/openshell-v0.0.72
ericksoa Jul 1, 2026
0cd7604
merge: sync main into OpenShell v0.0.72
ericksoa Jul 1, 2026
4d57978
fix(policy): reject unmarked diagnostic mappings
ericksoa Jul 1, 2026
8c548f4
fix(ci): include parser in installer hash bootstrap
ericksoa Jul 1, 2026
7f3ea39
docs(ci): clarify installer verifier trust boundary
ericksoa Jul 1, 2026
bef8663
Merge branch 'main' into dep/openshell-v0.0.72
ericksoa Jul 1, 2026
5d94e1f
merge: sync current main into OpenShell 0.0.72
ericksoa Jul 1, 2026
490a1b9
merge: sync current main into OpenShell 0.0.72
ericksoa Jul 1, 2026
cafcd2a
merge: sync current main into OpenShell 0.0.72
ericksoa Jul 1, 2026
7ee13d2
merge: sync current main into OpenShell dependency
ericksoa Jul 1, 2026
6b918a6
test(e2e): parse Hermes semver before release date
ericksoa Jul 1, 2026
18f67ef
merge: sync current main into OpenShell dependency
ericksoa Jul 1, 2026
0ed3f40
fix(sandbox): wait for stopped forwards to release
ericksoa Jul 1, 2026
7c701a9
merge: sync current main into OpenShell dependency
ericksoa Jul 1, 2026
dde2c62
merge: sync current main into OpenShell dependency
ericksoa Jul 1, 2026
7ed7f40
merge: sync current main into OpenShell dependency
ericksoa Jul 1, 2026
4d4420a
test(sandbox): model stopped forward release
ericksoa Jul 1, 2026
982de7c
docs(sandbox): define forward wait removal condition
ericksoa Jul 1, 2026
8996b9d
test(sandbox): keep forward fixture linear
ericksoa Jul 1, 2026
3571f93
merge: sync current main into OpenShell dependency
ericksoa Jul 1, 2026
6ac008d
test(docs): follow current sandbox hardening route
ericksoa Jul 1, 2026
8264c19
test(e2e): chunk crash-loop proxy restore
ericksoa Jul 1, 2026
97b8a5e
merge: sync current main into OpenShell dependency
ericksoa Jul 1, 2026
dec15c7
merge: sync current main into OpenShell dependency
ericksoa Jul 2, 2026
b434b41
merge: sync current main into OpenShell dependency
ericksoa Jul 2, 2026
b4a0203
merge: sync current main into OpenShell dependency
ericksoa Jul 2, 2026
d429495
merge: sync current main into OpenShell dependency
ericksoa Jul 2, 2026
466443e
docs(release): retarget OpenShell update to v0.0.74
ericksoa Jul 2, 2026
ff74343
test(blueprint): preserve SSRF exports in policy mock
ericksoa Jul 2, 2026
cb5e9ae
fix(ci): harden trusted installer hash inputs
ericksoa Jul 2, 2026
203f2bc
ci(security): repin hardened installer hash bootstrap
ericksoa Jul 2, 2026
0d1bdd1
test(ci): keep installer fixtures branch-free
ericksoa Jul 2, 2026
cb9b463
merge: sync current main into OpenShell dependency
ericksoa Jul 2, 2026
6e2839d
fix(policy): normalize source and compiled boundary imports
ericksoa Jul 2, 2026
62d52b9
merge: sync current main into OpenShell dependency
ericksoa Jul 2, 2026
ab2b0c4
merge: sync current main into OpenShell dependency
ericksoa Jul 2, 2026
92512c2
merge: sync current main into OpenShell dependency
ericksoa Jul 3, 2026
ec69761
merge: sync current main into OpenShell dependency
ericksoa Jul 3, 2026
2d06fa0
merge: sync current main into OpenShell dependency
ericksoa Jul 3, 2026
cfee6e7
merge: sync current main into OpenShell dependency
ericksoa Jul 3, 2026
7a272f6
merge: sync current main into OpenShell dependency
ericksoa Jul 3, 2026
9ab85e7
merge: sync current main into OpenShell dependency
ericksoa Jul 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions .github/actions/ci-installer-hash-check/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0

name: Trusted installer hash check
description: Run the trusted installer hash verifier against an explicit repository tree.

inputs:
repo-root:
description: Absolute path to the repository tree whose installer pins are being verified.
required: true

runs:
using: composite
steps:
- name: Verify installer hashes are current
shell: bash
env:
NEMOCLAW_INSTALLER_HASH_REPO_ROOT: ${{ inputs.repo-root }}
run: bash "${{ github.action_path }}/../../../scripts/check-installer-hash.sh"
1 change: 1 addition & 0 deletions .github/actions/ci-plugin-coverage/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ runs:
--coverage.reporter=cobertura \
--coverage.reportsDirectory=coverage/plugin \
--coverage.include="nemoclaw/src/**/*.ts" \
--coverage.include="nemoclaw/src/**/*.cts" \
--coverage.exclude="**/*.test.ts"
npx tsx scripts/check-coverage-ratchet.ts coverage/plugin/coverage-summary.json ci/coverage-threshold-plugin.json "Plugin coverage"

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/e2e.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,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.71"
NEMOCLAW_OPENSHELL_PIN_VERSION: "0.0.72"
DOCKER_GRPC_PROBE_IMAGE: "node:22-trixie-slim@sha256:2d9f5c76c8f4dd36e8f253bee5d828a83a6c09f36188f0b0414325232e0b175d"
steps:
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
Expand Down
168 changes: 163 additions & 5 deletions .github/workflows/installer-hash-check.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@
# SPDX-License-Identifier: Apache-2.0
#
# Verifies pinned installer SHA-256 hashes still match upstream scripts.
# Checked: Ollama installer.
# Runs on every PR and push to main, plus a weekly scheduled check.
# Checked: OpenShell v0.0.72 installer and Brev release assets.
# Reports the required network-backed drift check on every PR, every push to
# main, and weekly. Pull requests execute checker code from their base commit;
# the immutable bootstrap is used only for the PR that first adds that action.

name: Security / Installer Hash Check

Expand All @@ -26,8 +28,164 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
- name: Set up trusted installer hash parser runtime
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.0.0
with:
node-version: 22.16.0

# The full PR-head checkout below supplies data only. Its checker and pin
# parser are never executed: later steps run exclusively from either
# .trusted-installer-hash or .bootstrap-installer-hash.
- name: Checkout pull request head
if: github.event_name == 'pull_request'
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
repository: ${{ github.event.pull_request.head.repo.full_name }}
ref: ${{ github.event.pull_request.head.sha }}
persist-credentials: false

- name: Checkout trusted event
if: github.event_name != 'pull_request'
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
persist-credentials: false

- name: Checkout base-trusted installer hash action
if: github.event_name == 'pull_request'
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: ${{ github.event.pull_request.base.sha }}
path: .trusted-installer-hash
persist-credentials: false
sparse-checkout: |
.github/actions/ci-installer-hash-check
scripts/check-installer-hash.sh
scripts/checks/extract-installer-pins.mts
sparse-checkout-cone-mode: false

- name: Detect base-trusted installer hash action
id: trusted-installer-hash
if: github.event_name == 'pull_request'
shell: bash
run: |
if [[ -f .trusted-installer-hash/.github/actions/ci-installer-hash-check/action.yaml ]]; then
echo "available=true" >> "$GITHUB_OUTPUT"
else
echo "available=false" >> "$GITHUB_OUTPUT"
fi

# invalidState: the first PR that introduces this action has no copy in
# its base commit. Running the mutable PR-side checker would let that PR
# authorize its own installer pins.
# sourceBoundary: this exact commit and reviewed Git tree contain the
# trusted action and checker; the PR head supplies only inspected files.
# whyNotSourceFix: a base commit cannot contain a new action before the
# introducing PR merges, so the bootstrap must name immutable code once.
# regressionTest: test/pr-workflow-contract.test.ts rejects mutable
# checker execution, non-immutable refs, and a mismatched reviewed tree.
# manualReviewEvidence: on 2026-07-02, independent Git object inspection
# confirmed commit cb5e9aefab2b16fedc0995149fc3520da0d5e0c7 has
# tree 1fdf59efe40b78c407e222fd42043b23a61e199a. The reviewed bootstrap
# script SHA-256 is 179e1572932eedc1a8ed974d534e9f2a5c34db7ebe971000dc20b77ed9d9feb3;
# its parser SHA-256 is
# e1d6b63a7b0378a3d28ee71d347ade2da75b3fcf2ff55aa55a9b54d2bc2fc13a;
# and its composite-action SHA-256 is
# 9c48c64cc934032c99a0aa9aa08b1164757988dc2842e1df88d1b7252ce1183f.
# removalCondition: remove the bootstrap checkout after this workflow has
# landed on every supported PR base. The fallback is refused after the
# explicit 180-day review window ending 2026-12-29T19:35:41Z.
- name: Enforce immutable installer hash bootstrap expiry
if: >-
github.event_name == 'pull_request' &&
steps.trusted-installer-hash.outputs.available != 'true'
shell: bash
run: |
set -euo pipefail
node <<'NODE'
const commit = "cb5e9aefab2b16fedc0995149fc3520da0d5e0c7";
const expiresAt = "2026-12-29T19:35:41Z";
const expiresAtMs = Date.parse(expiresAt);
const canonicalExpiresAt =
Number.isFinite(expiresAtMs) && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$/u.test(expiresAt)
? new Date(expiresAtMs).toISOString().replace(".000Z", "Z")
: "";

if (!/^[a-f0-9]{40}$/u.test(commit) || canonicalExpiresAt !== expiresAt) {
console.error(
"::error::Immutable installer hash bootstrap expiry configuration is invalid; " +
"refusing the fallback. Expected a 40-character commit SHA and canonical UTC expiry.",
);
process.exit(1);
}

if (Date.now() >= expiresAtMs) {
console.error(
`::error::Immutable installer hash bootstrap ${commit} expired at ${expiresAt}. ` +
"Remove the bootstrap fallback or replace it with newly reviewed immutable checker code.",
);
process.exit(1);
}

const daysRemaining = Math.ceil((expiresAtMs - Date.now()) / 86_400_000);
console.log(
`Immutable installer hash bootstrap ${commit} remains valid for ${daysRemaining} day(s), ` +
`until ${expiresAt}.`,
);
NODE

- name: Checkout immutable installer hash bootstrap
if: >-
github.event_name == 'pull_request' &&
steps.trusted-installer-hash.outputs.available != 'true'
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:
ref: cb5e9aefab2b16fedc0995149fc3520da0d5e0c7
path: .bootstrap-installer-hash
persist-credentials: false
sparse-checkout: |
.github/actions/ci-installer-hash-check
scripts/check-installer-hash.sh
scripts/checks/extract-installer-pins.mts
sparse-checkout-cone-mode: false

- name: Verify immutable installer hash bootstrap tree
if: >-
github.event_name == 'pull_request' &&
steps.trusted-installer-hash.outputs.available != 'true'
shell: bash
run: |
set -euo pipefail
readonly expected_commit="cb5e9aefab2b16fedc0995149fc3520da0d5e0c7"
readonly expected_tree="1fdf59efe40b78c407e222fd42043b23a61e199a"
actual_commit="$(git -C .bootstrap-installer-hash rev-parse HEAD)"
actual_tree="$(git -C .bootstrap-installer-hash rev-parse 'HEAD^{tree}')"
if [[ "${actual_commit}" != "${expected_commit}" ]]; then
echo "::error::Immutable installer hash bootstrap checkout does not match the reviewed commit." >&2
exit 1
fi
if [[ "${actual_tree}" != "${expected_tree}" ]]; then
echo "::error::Immutable installer hash bootstrap checkout does not match the reviewed tree." >&2
exit 1
fi

- name: Verify pull request installer hashes from base-trusted code
if: >-
github.event_name == 'pull_request' &&
steps.trusted-installer-hash.outputs.available == 'true'
uses: ./.trusted-installer-hash/.github/actions/ci-installer-hash-check
with:
repo-root: ${{ github.workspace }}

- name: Verify pull request installer hashes from immutable bootstrap
if: >-
github.event_name == 'pull_request' &&
steps.trusted-installer-hash.outputs.available != 'true'
uses: ./.bootstrap-installer-hash/.github/actions/ci-installer-hash-check
with:
repo-root: ${{ github.workspace }}

- name: Verify installer hashes are current
run: bash scripts/check-installer-hash.sh
- name: Verify trusted event installer hashes
if: github.event_name != 'pull_request'
uses: ./.github/actions/ci-installer-hash-check
with:
repo-root: ${{ github.workspace }}
13 changes: 12 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,13 @@ ENV NPM_CONFIG_AUDIT=false \
NPM_CONFIG_FETCH_TIMEOUT=300000
COPY nemoclaw/package.json nemoclaw/package-lock.json nemoclaw/tsconfig.json /opt/nemoclaw/
COPY nemoclaw/src/ /opt/nemoclaw/src/
COPY scripts/checks/verify-openshell-policy-boundary-dependencies.mts /opt/nemoclaw-build-checks/
WORKDIR /opt/nemoclaw
RUN npm ci && npm run build
RUN npm ci \
&& npm run build \
&& node --experimental-strip-types \
/opt/nemoclaw-build-checks/verify-openshell-policy-boundary-dependencies.mts \
/opt/nemoclaw/dist/shared/openshell-policy-boundary.cjs

# Stage 2: Build TypeScript messaging runtime preloads.
FROM builder AS runtime-preload-builder
Expand Down Expand Up @@ -101,9 +106,15 @@ ENV NPM_CONFIG_AUDIT=false \
NPM_CONFIG_FETCH_RETRY_MINTIMEOUT=20000 \
NPM_CONFIG_FETCH_RETRY_MAXTIMEOUT=120000 \
NPM_CONFIG_FETCH_TIMEOUT=300000
# The builder-stage verify-openshell-policy-boundary-dependencies.mts check is
# the primary security gate: it enforces the generated boundary's strict module
# dependency allowlist before this stage copies it. The node check below is
# defense in depth only and proves the copied runtime still exports the complete
# audited interface; function availability does not replace dependency lockdown.
RUN npm ci --omit=dev \
&& test -f /usr/local/bin/node \
&& test -d /opt/nemoclaw/node_modules/json5 \
&& node -e 'const boundary = require("/opt/nemoclaw/dist/shared/openshell-policy-boundary.cjs"); for (const name of ["parseOpenShellPolicy", "stripProviderComposedPolicies", "withoutProviderComposedPolicies"]) { if (typeof boundary[name] !== "function") throw new Error("OpenShell policy boundary export is unavailable: " + name); }' \
&& node_unsafe="$(find -L /usr/local/bin/node -maxdepth 0 \( ! -user root -o -perm /022 \) -print -quit)" \
&& test -z "$node_unsafe" \
&& json5_unsafe="$(find -L /opt/nemoclaw/node_modules/json5 \( ! -user root -o -perm /022 \) -print -quit)" \
Expand Down
2 changes: 1 addition & 1 deletion ci/test-file-size-budget.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@
"test/onboard-messaging.test.ts": 2062,
"test/onboard-selection.test.ts": 6867,
"test/onboard.test.ts": 4774,
"test/policies.test.ts": 2489
"test/policies.test.ts": 2475
}
}
8 changes: 8 additions & 0 deletions docs/about/release-notes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@ NVIDIA NemoClaw is available in early preview starting March 16, 2026.
Use this page to track the highlights of the latest release.
For more detailed release notes, refer to the [NemoClaw GitHub announcements](https://github.com/NVIDIA/NemoClaw/discussions/categories/announcements?discussions_q=is%3Aopen+category%3AAnnouncements).

## v0.0.74

NemoClaw v0.0.74 advances to OpenShell `0.0.72` and adopts its safe policy round-trip boundary:

- Stable installs pin OpenShell `0.0.72` release artifacts and supervisor image, adding MCP Streamable HTTP and JSON-RPC request-policy enforcement.
- Policy mutations now read the round-trippable base policy instead of the effective policy, preventing provider-composed `_provider_*` entries from being sent back through `policy set` while preserving existing MCP rules.
For more information, refer to [OpenShell 0.0.72 Compatibility Review](../security/openshell-0.0.72-compatibility-review) and [Customize the Network Policy](../network-policy/customize-network-policy).

## v0.0.73

NemoClaw v0.0.73 improves custom endpoint safety, Linux GPU onboarding, agent-aware policy validation, upgrade recovery, LangChain Deep Agents Code inference, and operator documentation.
Expand Down
6 changes: 6 additions & 0 deletions docs/index.yml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,9 @@ navigation:
- page: "Credential Storage"
path: _build/agent-variants/security/credential-storage.openclaw.generated.mdx
slug: credential-storage
- page: "OpenShell 0.0.72 Compatibility Review"
path: _build/agent-variants/security/openshell-0.0.72-compatibility-review.openclaw.generated.mdx
slug: openshell-0.0.72-compatibility-review
- page: "Trusted Computing Base"
path: _build/agent-variants/security/tcb-boundary.openclaw.generated.mdx
slug: trusted-computing-base
Expand Down Expand Up @@ -298,6 +301,9 @@ navigation:
- page: "Credential Storage"
path: _build/agent-variants/security/credential-storage.hermes.generated.mdx
slug: credential-storage
- page: "OpenShell 0.0.72 Compatibility Review"
path: _build/agent-variants/security/openshell-0.0.72-compatibility-review.hermes.generated.mdx
slug: openshell-0.0.72-compatibility-review
- page: "Trusted Computing Base"
path: _build/agent-variants/security/tcb-boundary.hermes.generated.mdx
slug: trusted-computing-base
Expand Down
9 changes: 5 additions & 4 deletions docs/network-policy/customize-network-policy.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -142,28 +142,29 @@ This path preserves existing policy entries and is the only NemoClaw-supported f
$$nemoclaw my-assistant policy-add
```

NemoClaw reads the live policy with `openshell policy get --full`, structurally merges your preset's `network_policies` into it, and writes the merged result back.
NemoClaw reads the round-trippable base policy with `openshell policy get --base`, structurally merges your preset's `network_policies` into it, and writes the merged result back.
Provider-composed `_provider_*` entries are excluded because OpenShell reserves that namespace and rejects it in `policy set`.
Existing presets and the baseline remain in place.
The preset file under `presets/` also persists across sandbox recreations.

### Option 2: Snapshot, Edit, and Set with OpenShell

Use this path only when you cannot add a file under the NemoClaw source tree.
Start from the current live policy so the presets layered on at onboarding stay in the file you apply.
Requires OpenShell 0.0.44+ for `policy get --full` and `policy set --wait` syntax.
Requires OpenShell 0.0.72+ for the round-trippable `policy get --base` and `policy set --wait` syntax.
Strip the OpenShell metadata header before editing the file, then validate the raw policy shape before replacing your editable copy.
The command order below matches the commands NemoClaw emits internally.

```bash
# shellcheck shell=bash
# Source-of-truth review:
# invalidState: OpenShell 0.0.44 policy get --full emits metadata before the --- YAML header.
# invalidState: OpenShell 0.0.72 policy get --base emits metadata before the --- YAML header.
# sourceBoundary: OpenShell CLI output is owned by the separate OpenShell project.
# whyNotSourceFix: NemoClaw pins OpenShell but cannot change that upstream formatter here.
# regressionTest: test/policy-roundtrip-docs.test.ts validates this shared docs pattern.
# removalCondition: remove this pipeline after pinned OpenShell emits clean raw YAML.
tmp_policy=$(mktemp)
openshell policy get --full my-assistant \
openshell policy get --base my-assistant \
| awk 'found { print } /^---$/ { found = 1 } END { if (!found) exit 1 }' \
> "$tmp_policy" \
&& grep -q '^version:' "$tmp_policy" \
Expand Down
6 changes: 3 additions & 3 deletions docs/network-policy/integration-policy-examples.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -368,18 +368,18 @@ $$nemoclaw my-assistant policy-list
```

Use OpenShell when you need an editable copy of the live policy.
Requires OpenShell 0.0.44+ for `policy get --full` and `policy set --wait` syntax.
Requires OpenShell 0.0.72+ for the round-trippable `policy get --base` and `policy set --wait` syntax.

```bash
# shellcheck shell=bash
# Source-of-truth review:
# invalidState: OpenShell 0.0.44 policy get --full emits metadata before the --- YAML header.
# invalidState: OpenShell 0.0.72 policy get --base emits metadata before the --- YAML header.
# sourceBoundary: OpenShell CLI output is owned by the separate OpenShell project.
# whyNotSourceFix: NemoClaw pins OpenShell but cannot change that upstream formatter here.
# regressionTest: test/policy-roundtrip-docs.test.ts validates this shared docs pattern.
# removalCondition: remove this pipeline after pinned OpenShell emits clean raw YAML.
tmp_policy=$(mktemp)
openshell policy get --full my-assistant \
openshell policy get --base my-assistant \
| awk 'found { print } /^---$/ { found = 1 } END { if (!found) exit 1 }' \
> "$tmp_policy" \
&& grep -q '^version:' "$tmp_policy" \
Expand Down
9 changes: 5 additions & 4 deletions docs/reference/cli-selection-guide.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -118,18 +118,18 @@ Use `openshell` when the docs explicitly call for a live OpenShell gateway opera

- Inspect or replace raw OpenShell policy:

Requires OpenShell 0.0.44+ for `policy get --full` and `policy set --wait` syntax.
Requires OpenShell 0.0.72+ for the round-trippable `policy get --base` and `policy set --wait` syntax.

```bash
# shellcheck shell=bash
# Source-of-truth review:
# invalidState: OpenShell 0.0.44 policy get --full emits metadata before the --- YAML header.
# invalidState: OpenShell 0.0.72 policy get --base emits metadata before the --- YAML header.
# sourceBoundary: OpenShell CLI output is owned by the separate OpenShell project.
# whyNotSourceFix: NemoClaw pins OpenShell but cannot change that upstream formatter here.
# regressionTest: test/policy-roundtrip-docs.test.ts validates this shared docs pattern.
# removalCondition: remove this pipeline after pinned OpenShell emits clean raw YAML.
tmp_policy=$(mktemp)
openshell policy get --full <sandbox-name> \
openshell policy get --base <sandbox-name> \
| awk 'found { print } /^---$/ { found = 1 } END { if (!found) exit 1 }' \
> "$tmp_policy" \
&& grep -q '^version:' "$tmp_policy" \
Expand Down Expand Up @@ -229,7 +229,8 @@ Use `$$nemoclaw <name> policy-add` or `policy-remove` for NemoClaw presets and c
NemoClaw merges the new policy with the live policy and reapplies presets during rebuilds.

Use `openshell policy update` for precise live endpoint or REST rule changes.
Use `openshell policy get --full <name>` and `openshell policy set --policy <file> --wait <name>` only when you need to edit and replace the raw policy file.
Use `openshell policy get --base <name>` and `openshell policy set --policy <file> --wait <name>` only when you need to edit and replace the round-trippable base policy.
Use `--full` only to inspect the effective policy, including provider-composed rules.

### Move Workspace Files

Expand Down
Loading
Loading