Skip to content

Commit 6ff1507

Browse files
authored
chore: finish slimclaw runtime convergence (#1087)
* docs: add slimclaw runtime unification plan * docs: clarify slimclaw optimization payoff * docs: tighten slimclaw plan wording * docs: harden slimclaw artifact and patch boundaries * docs: refine slimclaw prepare contract * docs: refine slimclaw desktop runtime constraints * chore: introduce slimclaw runtime path contract * chore: route runtime consumers through slimclaw prepare contracts * chore: consolidate slimclaw runtime producer ownership * chore: centralize slimclaw runtime orchestration * chore: move slimclaw runtime assets behind package ownership * chore: finish slimclaw runtime convergence * chore: retarget runtime workflows to slimclaw * docs: update runtime patch guidance for slimclaw * fix: tighten dev runtime health boundaries * chore: simplify scripts dev cli * chore: tighten scripts dev logger usage * chore: move dev tooling into tools * chore: finish tools/dev migration and harden readiness checks * chore: surface openclaw dev startup progress * chore: inline slimclaw tsconfig base options * fix: require injected openclaw runtime in controller * fix: harden tools dev service boundaries * fix: split desktop readiness contract * fix: start openclaw in launchd lifecycle e2e * fix: allow unconfigured openclaw in launchd e2e * fix: harden packaged desktop startup sequencing * fix: respect external desktop runtime mode * fix: relax controller dev readiness timeout * fix: update scripts dev test import path * fix: relax controller startup timeouts for macos CI * fix: align desktop dev health checks with external runtime mode
1 parent f3d1579 commit 6ff1507

File tree

133 files changed

+5007
-4052
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

133 files changed

+5007
-4052
lines changed

β€Ž.github/workflows/ci.ymlβ€Ž

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,8 @@ jobs:
121121
fail_ci_if_error: false
122122
verbose: true
123123

124-
# ── openclaw-runtime lockfile sync ─────────────────────────────────────────
125-
openclaw-runtime-lockfile:
124+
# ── slimclaw runtime-seed lockfile sync ────────────────────────────────────
125+
slimclaw-runtime-seed-lockfile:
126126
runs-on: ubuntu-latest
127127

128128
steps:
@@ -134,9 +134,9 @@ jobs:
134134
with:
135135
node-version: 24
136136

137-
- name: Verify openclaw-runtime lockfile is in sync
137+
- name: Verify slimclaw runtime-seed lockfile is in sync
138138
run: corepack npm ci --ignore-scripts --no-audit --no-fund
139-
working-directory: openclaw-runtime
139+
working-directory: packages/slimclaw/runtime-seed
140140

141141
# ── Build + ESM check ─────────────────────────────────────────────────────
142142
build:

β€Ž.github/workflows/desktop-build.ymlβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ jobs:
105105
uses: actions/cache@v4
106106
with:
107107
path: ~/.npm
108-
key: desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('openclaw-runtime/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
108+
key: desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('packages/slimclaw/runtime-seed/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
109109
restore-keys: |
110110
desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-
111111
desktop-npm-cache-${{ runner.os }}-

β€Ž.github/workflows/desktop-ci-dev.ymlβ€Ž

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ on:
77
- 'apps/controller/**'
88
- 'apps/web/**'
99
- 'packages/shared/**'
10-
- 'openclaw-runtime/**'
10+
- 'packages/slimclaw/**'
1111
- 'tests/desktop/**'
1212
- 'scripts/dev-launchd.sh'
13-
- 'scripts/dev/**'
13+
- 'tools/dev/**'
1414
- 'scripts/desktop-check-dev.sh'
1515
- 'scripts/desktop-stop-smoke.sh'
1616
- 'scripts/desktop-ci-check.mjs'
@@ -33,10 +33,10 @@ on:
3333
- 'apps/controller/**'
3434
- 'apps/web/**'
3535
- 'packages/shared/**'
36-
- 'openclaw-runtime/**'
36+
- 'packages/slimclaw/**'
3737
- 'tests/desktop/**'
3838
- 'scripts/dev-launchd.sh'
39-
- 'scripts/dev/**'
39+
- 'tools/dev/**'
4040
- 'scripts/desktop-check-dev.sh'
4141
- 'scripts/desktop-stop-smoke.sh'
4242
- 'scripts/desktop-ci-check.mjs'
@@ -96,7 +96,7 @@ jobs:
9696
uses: actions/cache@v4
9797
with:
9898
path: ~/.npm
99-
key: desktop-npm-cache-${{ runner.os }}-arm64-${{ hashFiles('openclaw-runtime/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
99+
key: desktop-npm-cache-${{ runner.os }}-arm64-${{ hashFiles('packages/slimclaw/runtime-seed/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
100100
restore-keys: |
101101
desktop-npm-cache-${{ runner.os }}-arm64-
102102
desktop-npm-cache-${{ runner.os }}-

β€Ž.github/workflows/desktop-ci-dist-full.ymlβ€Ž

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@ on:
44
pull_request:
55
paths:
66
- "apps/desktop/**"
7-
- "openclaw-runtime/**"
8-
- "openclaw-runtime-patches/**"
7+
- "packages/slimclaw/**"
98
- "pnpm-lock.yaml"
109
- "scripts/desktop-check-dist.sh"
1110
- "scripts/desktop-verify-extracted-runner.sh"
@@ -17,8 +16,7 @@ on:
1716
- main
1817
paths:
1918
- "apps/desktop/**"
20-
- "openclaw-runtime/**"
21-
- "openclaw-runtime-patches/**"
19+
- "packages/slimclaw/**"
2220
- "pnpm-lock.yaml"
2321
- "scripts/desktop-check-dist.sh"
2422
- "scripts/desktop-verify-extracted-runner.sh"
@@ -72,7 +70,7 @@ jobs:
7270
uses: actions/cache@v4
7371
with:
7472
path: ~/.npm
75-
key: desktop-npm-cache-${{ runner.os }}-arm64-${{ hashFiles('openclaw-runtime/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
73+
key: desktop-npm-cache-${{ runner.os }}-arm64-${{ hashFiles('packages/slimclaw/runtime-seed/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
7674
restore-keys: |
7775
desktop-npm-cache-${{ runner.os }}-arm64-
7876
desktop-npm-cache-${{ runner.os }}-
@@ -153,7 +151,7 @@ jobs:
153151
uses: actions/cache@v4
154152
with:
155153
path: ~/.npm
156-
key: desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('openclaw-runtime/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
154+
key: desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('packages/slimclaw/runtime-seed/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
157155
restore-keys: |
158156
desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-
159157
desktop-npm-cache-${{ runner.os }}-
@@ -330,7 +328,7 @@ jobs:
330328
uses: actions/cache@v4
331329
with:
332330
path: ~\AppData\Local\npm-cache
333-
key: desktop-npm-cache-${{ runner.os }}-x64-${{ hashFiles('openclaw-runtime/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
331+
key: desktop-npm-cache-${{ runner.os }}-x64-${{ hashFiles('packages/slimclaw/runtime-seed/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
334332
restore-keys: |
335333
desktop-npm-cache-${{ runner.os }}-x64-
336334
desktop-npm-cache-${{ runner.os }}-

β€Ž.github/workflows/desktop-ci-dist-lite.ymlβ€Ž

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ on:
77
- "apps/controller/**"
88
- "apps/web/**"
99
- "packages/shared/**"
10-
- "openclaw-runtime/**"
11-
- "openclaw-runtime-patches/**"
10+
- "packages/slimclaw/**"
1211
- "scripts/desktop-check-dist.sh"
1312
- "scripts/desktop-verify-extracted-runner.sh"
1413
- "scripts/desktop-ci-check.mjs"
@@ -28,8 +27,7 @@ on:
2827
- "apps/controller/**"
2928
- "apps/web/**"
3029
- "packages/shared/**"
31-
- "openclaw-runtime/**"
32-
- "openclaw-runtime-patches/**"
30+
- "packages/slimclaw/**"
3331
- "scripts/desktop-check-dist.sh"
3432
- "scripts/desktop-verify-extracted-runner.sh"
3533
- "scripts/desktop-ci-check.mjs"
@@ -80,7 +78,7 @@ jobs:
8078
uses: actions/cache@v4
8179
with:
8280
path: ~/.npm
83-
key: desktop-npm-cache-${{ runner.os }}-arm64-${{ hashFiles('openclaw-runtime/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
81+
key: desktop-npm-cache-${{ runner.os }}-arm64-${{ hashFiles('packages/slimclaw/runtime-seed/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
8482
restore-keys: |
8583
desktop-npm-cache-${{ runner.os }}-arm64-
8684
desktop-npm-cache-${{ runner.os }}-

β€Ž.github/workflows/desktop-release.ymlβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ jobs:
5858
uses: actions/cache@v4
5959
with:
6060
path: ~/.npm
61-
key: desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('openclaw-runtime/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
61+
key: desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-${{ hashFiles('packages/slimclaw/runtime-seed/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }}
6262
restore-keys: |
6363
desktop-npm-cache-${{ runner.os }}-${{ matrix.arch }}-
6464
desktop-npm-cache-${{ runner.os }}-

β€Ž.gitignoreβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ playwright-report/
2828
.worktrees/
2929
.ralph/
3030
*.p8
31-
openclaw-runtime/.postinstall-cache.json
3231
apps/desktop/release/
3332
apps/desktop/.dist-runtime/
3433
apps/controller/.dist-runtime/
34+
packages/slimclaw/.dist-runtime/
3535
apps/desktop/.cache/
3636
apps/desktop/build-config.json
3737
.claude/settings.local.json

β€ŽAGENTS.mdβ€Ž

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Nexu is a desktop-first OpenClaw platform. Users create AI bots, connect them to
1010
- `apps/controller` β€” Single-user local control plane for Nexu config, OpenClaw sync, and runtime orchestration
1111
- `apps/desktop` β€” Electron desktop runtime shell and sidecar orchestrator
1212
- `apps/web` β€” React + Ant Design + Vite
13-
- `openclaw-runtime` β€” Repo-local packaged OpenClaw runtime for local dev and desktop packaging; replaces global `openclaw` CLI
13+
- `packages/slimclaw` β€” Repo-local Nexu-owned OpenClaw runtime contract, prepared runtime root, and staging/patch ownership for local dev and desktop packaging
1414
- `packages/shared` β€” Shared Zod schemas
1515
- `packages/dev-utils` β€” TS-first reusable utilities for local script tooling
1616

@@ -78,19 +78,19 @@ This repo is desktop-first. Prefer the controller-first path and remove or ignor
7878

7979
## Desktop local development
8080

81-
- Minimal cold-start setup on a fresh machine is: `pnpm install` -> `pnpm --filter @nexu/shared build` -> copy `scripts/dev/.env.example` to `scripts/dev/.env` only if you need dev-only overrides.
81+
- Minimal cold-start setup on a fresh machine is: `pnpm install` -> `pnpm --filter @nexu/shared build` -> copy `tools/dev/.env.example` to `tools/dev/.env` only if you need dev-only overrides.
8282
- Default daily flow is: `pnpm dev start` -> `pnpm dev status <service>` / `pnpm dev logs <service>` as needed -> `pnpm dev stop`.
8383
- Use `pnpm dev restart` for a clean full-stack recycle; use `pnpm dev restart <service>` only when you are intentionally touching one service.
8484
- Explicit single-service control remains available through `pnpm dev start <desktop|openclaw|controller|web>`, `pnpm dev stop <service>`, `pnpm dev restart <service>`, `pnpm dev status <service>`, and `pnpm dev logs <service>`.
8585
- Desktop dev inspect is available through `pnpm dev inspect screenshot`, `pnpm dev inspect eval "<expr>"`, `pnpm dev inspect dom`, and `pnpm dev inspect logs` for agent-friendly renderer inspection without exposing a public production API.
8686
- `pnpm dev` intentionally does not support `all`; the full local stack order remains `openclaw` -> `controller` -> `web` -> `desktop`.
8787
- `pnpm dev logs <service>` is session-scoped, prints a fixed header, and tails at most the last 200 lines from the active service session.
88-
- `scripts/dev/.env.example` is the source-of-truth template for dev-only overrides. Copy it to `scripts/dev/.env` only when you need to override ports, URLs, state paths, or the shared OpenClaw gateway token for local development.
88+
- `tools/dev/.env.example` is the source-of-truth template for dev-only overrides. Copy it to `tools/dev/.env` only when you need to override ports, URLs, state paths, or the shared OpenClaw gateway token for local development.
8989
- Keep the detailed startup optimization rules, cache invalidation behavior, and troubleshooting notes in `specs/guides/desktop-runtime-guide.md`; keep only the core workflow expectations here.
9090
- The repo also includes a local Slack reply smoke probe at `scripts/probe/slack-reply-probe.mjs` (`pnpm probe:slack prepare` / `pnpm probe:slack run`) for verifying the end-to-end Slack DM reply path after local runtime or OpenClaw changes.
9191
- The Slack smoke probe is not zero-setup: install Chrome Canary first, then manually log into Slack in the opened Canary window before running `pnpm probe:slack run`.
92-
- The desktop dev launcher is `scripts/dev/`; it is the unified source of truth for local dev orchestration, including platform-specific desktop launch preparation and runtime cleanup.
93-
- `pnpm dev` desktop launch is owned by `scripts/dev`, which starts the desktop Vite worker and Electron main process explicitly while routing platform-specific setup through `scripts/dev/src/shared/platform/desktop-dev-platform.*`. On macOS, the darwin helper patches the dev Electron binary's `LSUIElement` and refreshes Launch Services metadata before launch.
92+
- The desktop dev launcher is `tools/dev/`; it is the unified source of truth for local dev orchestration, including platform-specific desktop launch preparation and runtime cleanup.
93+
- `pnpm dev` desktop launch is owned by `tools/dev`, which starts the desktop Vite worker and Electron main process explicitly while routing platform-specific setup through `tools/dev/src/shared/platform/desktop-dev-platform.*`. On macOS, the darwin helper patches the dev Electron binary's `LSUIElement` and refreshes Launch Services metadata before launch.
9494
- `pnpm stop` behavior: sends SIGTERM first (triggers `gracefulShutdown` inside Electron β†’ teardown launchd services β†’ dispose orchestrator β†’ kill orphans), waits up to 10 seconds for graceful exit, then SIGKILL as fallback. Also kills tsc watcher and web watcher background processes.
9595
- Treat `pnpm start` as the canonical cold-start entrypoint for the full local desktop runtime.
9696
- The active desktop runtime path is controller-first: desktop launches `controller + web + openclaw` and no longer starts local `api`, `gateway`, or `pglite` sidecars.
@@ -173,7 +173,7 @@ The desktop test suite includes real launchd integration tests that run on macOS
173173
- `scripts/launchd-lifecycle-e2e.sh` β€” shell-based e2e: bootstrap β†’ verify β†’ teardown β†’ orphan cleanup β†’ re-bootstrap
174174
- `scripts/desktop-stop-smoke.sh` β€” post-stop verification: no residual processes, free ports, no stale state
175175
- `tests/desktop/data-directory-runtime.test.ts` β€” verifies every plist env var value by calling real `generatePlist()`
176-
- `tests/desktop/dev-toolchain-invariants.test.ts` β€” guards against desktop dev-launch regressions (scripts/dev platform helpers remain the single desktop launch decision point, launchd manifests keep `ELECTRON_RUN_AS_NODE`, etc.)
176+
- `tests/desktop/dev-toolchain-invariants.test.ts` β€” guards against desktop dev-launch regressions (tools/dev platform helpers remain the single desktop launch decision point, launchd manifests keep `ELECTRON_RUN_AS_NODE`, etc.)
177177

178178
## Hard rules
179179

@@ -217,7 +217,7 @@ See `ARCHITECTURE.md` for the full bird's-eye view. Key points:
217217
- Monorepo: `apps/controller` (Hono), `apps/web` (React), `apps/desktop` (Electron), `packages/shared` (Zod schemas), `nexu-skills/` (skill repo)
218218
- Type safety: Zod -> OpenAPI -> generated frontend SDK. Never duplicate types.
219219
- Config generator: `apps/controller/src/lib/openclaw-config-compiler.ts` builds OpenClaw config from local controller state
220-
- Local runtime flow: `apps/controller` owns Nexu config/state, writes OpenClaw config/skills/templates, and manages `openclaw-runtime` directly; desktop wraps that controller-first stack with Electron + web sidecars
220+
- Local runtime flow: `apps/controller` owns Nexu config/state, writes OpenClaw config/skills/templates, and manages the slimclaw-backed OpenClaw runtime contract directly; desktop wraps that controller-first stack with Electron + web sidecars
221221
- Key data flows: local config compilation, desktop runtime boot, channel sync, file-based skill catalog
222222

223223
## Code style (quick reference)
@@ -244,7 +244,7 @@ See `ARCHITECTURE.md` for the full bird's-eye view. Key points:
244244
| API coding patterns | `specs/references/api-patterns.md` |
245245
| Workspace templates | `specs/guides/workspace-templates.md` |
246246
| Local Slack smoke probe | `scripts/probe/README.md`, `scripts/probe/slack-reply-probe.mjs` |
247-
| Local dev CLI guidance | `scripts/dev/AGENTS.md` |
247+
| Local dev CLI guidance | `tools/dev/AGENTS.md` |
248248
| Frontend conventions | `specs/FRONTEND.md` |
249249
| Desktop runtime guide | `specs/guides/desktop-runtime-guide.md` |
250250
| Desktop update testing guide | `specs/guides/desktop-update-testing.md` |
@@ -264,7 +264,7 @@ See `ARCHITECTURE.md` for the full bird's-eye view. Key points:
264264
| External runner extraction | `apps/desktop/main/services/launchd-bootstrap.ts` (`ensureExternalNodeRunner`, `resolveLaunchdPaths`) |
265265
| Desktop auto-updater | `apps/desktop/main/updater/update-manager.ts` (`checkCriticalPathsLocked`, `ensureNexuProcessesDead`) |
266266
| Entitlements (V8 JIT) | `apps/desktop/build/entitlements.mac.plist`, `apps/desktop/build/entitlements.mac.inherit.plist` |
267-
| Dev launch scripts | `scripts/dev-launchd.sh`, `scripts/dev/src/services/desktop.ts`, `scripts/dev/src/shared/platform/desktop-dev-platform.*` |
267+
| Dev launch scripts | `scripts/dev-launchd.sh`, `tools/dev/src/services/desktop.ts`, `tools/dev/src/shared/platform/desktop-dev-platform.*` |
268268
| Launchd stability tests | `tests/desktop/launchd-integration.test.ts`, `scripts/launchd-lifecycle-e2e.sh` |
269269
| Entitlements regression tests | `tests/desktop/entitlements-plist.test.ts` |
270270
| Stop smoke test | `scripts/desktop-stop-smoke.sh` |
@@ -345,14 +345,14 @@ This note should track:
345345
## Local quick reference
346346

347347
- Controller env path: `apps/controller/.env`
348-
- Fresh local-dev cold start: `pnpm install` -> `pnpm --filter @nexu/shared build` -> optional `copy scripts/dev/.env.example scripts/dev/.env` (Windows) or `cp scripts/dev/.env.example scripts/dev/.env` (POSIX) -> `pnpm dev start`
348+
- Fresh local-dev cold start: `pnpm install` -> `pnpm --filter @nexu/shared build` -> optional `copy tools/dev/.env.example tools/dev/.env` (Windows) or `cp tools/dev/.env.example tools/dev/.env` (POSIX) -> `pnpm dev start`
349349
- Daily local-dev flow: `pnpm dev start` -> `pnpm dev logs <service>` / `pnpm dev status <service>` when needed -> `pnpm dev restart` for a clean recycle -> `pnpm dev stop`
350350
- Desktop inspect quick checks: `pnpm dev inspect screenshot`, `pnpm dev inspect eval "document.title"`, `pnpm dev inspect dom --max-html-length 1200`, `pnpm dev inspect logs --limit 20`
351351
- Desktop proxy env vars: `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY`, `NO_PROXY` (desktop normalizes mixed-case inputs, always merges `localhost,127.0.0.1,::1` into `NO_PROXY`, and propagates uppercase values to child processes)
352352
- OpenClaw managed skills dir (expected default): `~/.openclaw/skills/`
353353
- Slack smoke probe setup: install Chrome Canary, set `PROBE_SLACK_URL`, run `pnpm probe:slack prepare`, then manually log into Slack in Canary before `pnpm probe:slack run`
354-
- `openclaw-runtime` is installed implicitly by `pnpm install`; local development should normally not use a global `openclaw` CLI
354+
- the slimclaw-managed prepared OpenClaw runtime is installed implicitly by `pnpm install`; local development should normally not use a global `openclaw` CLI
355355
- Full-stack startup order is `openclaw` -> `controller` -> `web` -> `desktop`; shutdown order is the reverse
356-
- Prefer `./openclaw-wrapper` over global `openclaw` in local development; it executes `openclaw-runtime/node_modules/openclaw/openclaw.mjs`
356+
- Prefer `./openclaw-wrapper` over global `openclaw` in local development; it resolves the prepared runtime entry through slimclaw and executes that local OpenClaw CLI entry
357357
- When OpenClaw is started manually, set `RUNTIME_MANAGE_OPENCLAW_PROCESS=false` for `@nexu/controller` to avoid launching a second OpenClaw process
358358
- If behavior differs, verify effective `OPENCLAW_STATE_DIR` / `OPENCLAW_CONFIG_PATH` used by the running controller process.

β€ŽCONTRIBUTING.mdβ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ If you want a lower-friction entry point, we are actively looking for **Good Fir
3131
- **Git**
3232
- **Node.js** 24+ (LTS recommended; enforced via `package.json` `engines`)
3333
- **pnpm** 10.26+ (repo pins `pnpm@10.26.0` via `packageManager`)
34-
- **npm** 11+ (required for `openclaw-runtime` maintenance flows)
34+
- **npm** 11+ (required for repo-local OpenClaw runtime maintenance flows)
3535

3636
### Clone and install
3737

@@ -54,7 +54,7 @@ nexu/
5454
β”‚ β”œβ”€β”€ desktop/ # Electron desktop shell
5555
β”‚ └── controller/ # Hono backend + OpenClaw orchestration
5656
β”œβ”€β”€ packages/shared/ # Shared Zod schemas
57-
β”œβ”€β”€ openclaw-runtime/ # Repo-local packaged OpenClaw runtime
57+
β”œβ”€β”€ packages/slimclaw/ # Repo-local OpenClaw runtime contract + prepared runtime ownership
5858
β”œβ”€β”€ scripts/ # Dev/CI scripts (launchd, probes, e2e)
5959
β”œβ”€β”€ tests/ # Vitest test suites
6060
β”œβ”€β”€ docs/ # VitePress documentation site

0 commit comments

Comments
Β (0)