Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
c73afe8
refactor: convert blueprint Python modules to TypeScript
cv Mar 24, 2026
527974d
test: add unit tests for runner.ts, snapshot.ts, and ssrf.ts
cv Mar 24, 2026
ccbe3e9
fix(test): strengthen false-positive tests and add missing mock cleanup
cv Mar 24, 2026
02bb1e6
Merge remote-tracking branch 'upstream/main'
cv Mar 24, 2026
dd94419
fix: address PR #772 review feedback
cv Mar 24, 2026
21acbd8
ci: update coverage ratchet for Python-to-TS migration
cv Mar 24, 2026
f545a69
Merge remote-tracking branch 'upstream/main' into refactor/python-to-…
cv Mar 24, 2026
0ecf07a
refactor: convert validate-blueprint.py to TypeScript
cv Mar 24, 2026
7dd76e8
refactor: convert validate-blueprint to vitest test
cv Mar 24, 2026
3cc1c30
fix: address second round of PR #772 review feedback
cv Mar 24, 2026
7e0a76b
fix(test): use module-relative paths and strict boolean check
cv Mar 24, 2026
dad14fc
chore: merge upstream/main and resolve e2e test + pre-commit conflicts
cv Mar 24, 2026
8c87515
test: add SSRF and secret-exclusion tests for blueprint runner
cv Mar 24, 2026
b0875ca
Merge branch 'main' into refactor/python-to-typescript
cv Mar 24, 2026
25a3a4f
test: add e2e backstops for blueprint validation and apply path
cv Mar 24, 2026
79e2d3c
fix: update apply e2e test to match actual behavior
cv Mar 24, 2026
06ea6b5
Merge remote-tracking branch 'origin/main' into refactor/python-to-ty…
cv Mar 24, 2026
4971fb9
Merge remote-tracking branch 'origin/main' into refactor/python-to-ty…
cv Mar 24, 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
12 changes: 10 additions & 2 deletions .agents/skills/nemoclaw-reference/references/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,20 @@ The blueprint drives all interactions with the OpenShell CLI.
```text
nemoclaw-blueprint/
├── blueprint.yaml Manifest — version, profiles, compatibility
├── orchestrator/
│ └── runner.py CLI runner — plan / apply / status
├── policies/
│ └── openclaw-sandbox.yaml Default network + filesystem policy
```

The blueprint runtime (TypeScript) lives in the plugin source tree:

```text
nemoclaw/src/blueprint/
├── runner.ts CLI runner — plan / apply / status / rollback
├── ssrf.ts SSRF endpoint validation (IP + DNS checks)
├── snapshot.ts Migration snapshot / restore lifecycle
├── state.ts Persistent run state management
Comment thread
coderabbitai[bot] marked this conversation as resolved.
```

### Blueprint Lifecycle

```mermaid
Expand Down
27 changes: 0 additions & 27 deletions .github/workflows/pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,6 @@ jobs:
node-version: "22"
cache: npm

- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: "3.11"

- name: Install uv
uses: astral-sh/setup-uv@v7

- name: Install hadolint
run: |
HADOLINT_URL="https://github.com/hadolint/hadolint/releases/latest/download/hadolint-Linux-x86_64"
Expand All @@ -49,7 +41,6 @@ jobs:
run: |
npm install --ignore-scripts
cd nemoclaw && npm install
cd ../nemoclaw-blueprint && uv sync --extra dev

- name: Build TypeScript plugin
run: cd nemoclaw && npm run build
Expand Down Expand Up @@ -155,21 +146,3 @@ jobs:

- name: Run gateway isolation E2E tests
run: NEMOCLAW_TEST_IMAGE=nemoclaw-production bash test/e2e-gateway-isolation.sh

validate-profiles:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install PyYAML
run: pip install pyyaml

- name: Validate blueprint and policy
run: python3 test/validate-blueprint.py
22 changes: 1 addition & 21 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
# Priority groups (prek runs same-priority hooks in parallel):
# 0 — General file fixers (whitespace, EOF, line endings)
# 4 — SPDX header insertion (--fix)
# 5 — Shell / Python / TS formatters (shfmt, ruff format, prettier)
# 5 — Shell / TS formatters (shfmt, prettier)
# 6 — Fixes that should follow formatters (ruff check --fix, eslint --fix)
# 10 — Linters and read-only checks
# 20 — Project-level checks (vitest)
Expand Down Expand Up @@ -81,17 +81,6 @@ repos:
- -bn
priority: 5

- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.15.7
hooks:
- id: ruff-format
files: ^(nemoclaw-blueprint/.*\.py|scripts/.*\.py)$
priority: 5
- id: ruff
args: [--fix]
files: ^(nemoclaw-blueprint/.*\.py|scripts/.*\.py)$
priority: 6

- repo: local
hooks:
- id: nemoclaw-prettier
Expand Down Expand Up @@ -198,15 +187,6 @@ repos:
stages: [pre-push]
priority: 10

- id: pyright-check
name: Pyright (nemoclaw-blueprint)
entry: bash -c 'cd nemoclaw-blueprint && uv run --with pyright pyright'
language: system
pass_filenames: false
always_run: true
stages: [pre-push]
priority: 10

default_language_version:
python: python3

Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ RUN mkdir -p /sandbox/.openclaw-data/agents/main/agent \
&& ln -s /sandbox/.openclaw-data/update-check.json /sandbox/.openclaw/update-check.json \
&& chown -R sandbox:sandbox /sandbox/.openclaw /sandbox/.openclaw-data

# Install OpenClaw CLI and PyYAML for blueprint runner (single layer)
# Install OpenClaw CLI + PyYAML for inline Python scripts in e2e tests
RUN npm install -g openclaw@2026.3.11 \
&& pip3 install --no-cache-dir --break-system-packages "pyyaml==6.0.3"

Expand Down
10 changes: 2 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: check lint format lint-ts lint-py format-ts format-py docs docs-strict docs-live docs-clean
.PHONY: check lint format lint-ts format-ts docs docs-strict docs-live docs-clean

check:
npx prek run --all-files
Expand All @@ -10,17 +10,11 @@ lint: check
lint-ts:
cd nemoclaw && npm run check

lint-py:
cd nemoclaw-blueprint && $(MAKE) check

format: format-ts format-py
format: format-ts

format-ts:
cd nemoclaw && npm run lint:fix && npm run format

format-py:
cd nemoclaw-blueprint && $(MAKE) format

# --- Documentation ---

docs:
Expand Down
6 changes: 3 additions & 3 deletions ci/coverage-threshold.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"lines": 93,
"lines": 95,
"functions": 98,
"branches": 87,
"statements": 94
"branches": 86,
"statements": 95
}
12 changes: 10 additions & 2 deletions docs/reference/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,12 +57,20 @@ The blueprint drives all interactions with the OpenShell CLI.
```text
nemoclaw-blueprint/
├── blueprint.yaml Manifest — version, profiles, compatibility
├── orchestrator/
│ └── runner.py CLI runner — plan / apply / status
├── policies/
│ └── openclaw-sandbox.yaml Default network + filesystem policy
```

The blueprint runtime (TypeScript) lives in the plugin source tree:

```text
nemoclaw/src/blueprint/
├── runner.ts CLI runner — plan / apply / status / rollback
├── ssrf.ts SSRF endpoint validation (IP + DNS checks)
├── snapshot.ts Migration snapshot / restore lifecycle
├── state.ts Persistent run state management
```

### Blueprint Lifecycle

```{mermaid}
Expand Down
13 changes: 0 additions & 13 deletions nemoclaw-blueprint/Makefile

This file was deleted.

115 changes: 0 additions & 115 deletions nemoclaw-blueprint/migrations/snapshot.py

This file was deleted.

2 changes: 0 additions & 2 deletions nemoclaw-blueprint/orchestrator/__init__.py

This file was deleted.

Loading
Loading