Thanks to visit codestin.com
Credit goes to github.com

Skip to content

chore!: remove astrid-openclaw and the OpenClaw plugin build path - #833

Merged
joshuajbouw merged 3 commits into
mainfrom
chore/remove-openclaw
Jun 5, 2026
Merged

chore!: remove astrid-openclaw and the OpenClaw plugin build path#833
joshuajbouw merged 3 commits into
mainfrom
chore/remove-openclaw

Conversation

@joshuajbouw

@joshuajbouw joshuajbouw commented Jun 5, 2026

Copy link
Copy Markdown
Member

Linked Issue

Closes #829

Summary

Removes astrid-openclaw (the TypeScript→WASM compiler that absorbed the OpenClaw plugin ecosystem) and every trace of it from core. It was broken three ways — a dead extism-js fork pin (nicholasgasior/extism-js, now HTTP 404), an unreproducible uncommitted QuickJS kernel, and extism-PDK core-module output that no longer loads on the wasmtime Component Model host — and was the last extism vestige in the workspace as well as the CI Test-job SIGBUS source.

Changes

  • Remove the compiler + wiring: the astrid-openclaw crate; astrid-build's openclaw builder, --wizer-internal subcommand, openclaw project type and openclaw.plugin.json autodetect; the CLI openclaw: install source; the kernel-router openclaw: rejection; the capsule watcher's openclaw.plugin.json detection; packages/openclaw-mcp-bridge; scripts/build-quickjs-kernel.sh and compile-test-plugin.sh; the orphaned oxc/oxc_allocator/wizer workspace deps; the CI QuickJS-kernel cache, auto-build, and wasm32-wasip1 target; and doc/README references.
  • Eradicate residual naming + build cruft: rename the live UplinkSource::OpenClawBridge (variant, new_openclawnew_bridge, serde tag open_clawbridge, Display, all call sites + tests); delete .cargo/config.toml (its only directive was the --allow-multiple-definition linker hack for the duplicate wasmtime_continuation_start symbol across wasmtime v36/v37, both of which arrived only via openclaw); drop three stale wasmtime-37-via-extism RUSTSEC ignores from .cargo/audit.toml; scrub openclaw-branded example/test strings and dangling references to the deleted files.

Breaking: astrid build --type openclaw, astrid capsule install openclaw:…, and bare openclaw.plugin.json installs are removed. The UplinkSource serde tag rename open_clawbridge is format-safe today — the enum is in-memory-only (no disk/wire serialization path), so it ships with no back-compat alias.

Test Plan

Automated

  • cargo check --workspace links cleanly against current main (after rebase; regenerated lock carries only wasmtime 45, no .cargo/config.toml needed) and cargo test passes on every touched crate (astrid-core, astrid-mcp, astrid-config, astrid-workspace, astrid-capsule, astrid-build) — 0 failures
  • No new clippy warnings (touched crates clippy-clean; pre-existing Rust 1.95 denials in untouched test code are unrelated)

Manual

Workspace-wide grep confirms zero residual openclaw / open_claw / quickjs / wizer / oxc in source, docs, config, or CI.

Checklist


Rebased onto current main: the CI-only stopgap #831 has merged, and this branch's full ci.yml cleanup supersedes it (--exclude astrid-openclaw is dropped — the crate no longer exists, so a plain cargo test --workspace is correct). The full openclaw source is preserved on the archive/openclaw branch.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request removes the legacy OpenClaw plugin ecosystem, which was identified as a source of technical debt and CI instability. The changes include deleting the compiler crate, cleaning up build configuration, and renaming internal infrastructure to align with the new bridge-based architecture. The removal simplifies the workspace and eliminates dependencies that were no longer maintainable or reproducible.

Highlights

  • Removal of OpenClaw: Removed the astrid-openclaw crate and all associated build infrastructure, including the TypeScript-to-WASM compiler and the QuickJS kernel build path.
  • Refactoring and Cleanup: Renamed UplinkSource::OpenClaw to UplinkSource::Bridge and removed redundant CI build scripts, linker hacks, and orphaned dependencies like oxc and wizer.
  • Breaking Changes: Removed support for astrid build --type openclaw and related installation paths. The UplinkSource serde tag was renamed from open_claw to bridge.
Ignored Files
  • Ignored by pattern: .github/workflows/** (1)
    • .github/workflows/ci.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.


The claw is gone, the code is clean, No more the QuickJS machine. The bridge remains to hold the light, And keep the build paths shining bright.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request completely removes the astrid-openclaw crate, the openclaw-mcp-bridge package, and all associated build paths, scripts, and tests. The TypeScript/JavaScript-to-WASM compilation pipeline has been deprecated and removed. References to OpenClaw have been cleaned up across the codebase, including renaming UplinkSource::OpenClaw to UplinkSource::Bridge and updating configuration files, tests, and documentation accordingly. There are no review comments to address, and we have no additional feedback to provide.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

joshuajbouw added a commit that referenced this pull request Jun 5, 2026
## Linked Issue

Closes #830

## Summary

Stops the CI Test-job SIGBUS by no longer building `astrid-openclaw`'s
Tier 1 QuickJS kernel from source. The Test job ran `cargo test
--workspace` with `ASTRID_AUTO_BUILD_KERNEL=1`; that auto-build pulls
wasi-sdk and exhausts the runner disk, SIGBUSing the linker. Minimal
stopgap — `astrid-openclaw` stays on `main` (the full removal is #833).

## Changes

- Drop `ASTRID_AUTO_BUILD_KERNEL=1` from the Test job.
- Remove the `Cache QuickJS kernel` step and the now-orphaned
`QUICKJS_KERNEL_VERSION` env.
- Run `cargo test --workspace --exclude astrid-openclaw` — only that
crate's Tier 1 e2e tests need the kernel; it still compiles via
`build.rs`'s placeholder kernel under `check`/`clippy`.

`ci.yml` only; no source changes.

## Test Plan

### Automated

- [x] `cargo test -p astrid-build` passes 20/0 with the placeholder
kernel (astrid-build is the crate that builds the openclaw lib) —
confirms the workspace test run stays green without the auto-build
- [x] No new clippy warnings (YAML-only change; no Rust touched)

### Manual

N/A — CI configuration change.

## Checklist

- [x] Linked to an issue (#830)
- [ ] CHANGELOG.md updated under `[Unreleased]` — N/A (CI-only change,
no user-facing behaviour)
The TypeScript/JavaScript-to-WASM compiler (astrid-openclaw) is broken
three ways and was the last extism vestige in core:

- The Tier 1 QuickJS kernel was built from github.com/nicholasgasior/extism-js
  (a personal js-pdk fork that carried a fix), now HTTP 404; build.rs
  separately pointed at upstream extism/js-pdk, so the two build paths
  already disagreed.
- kernel/engine.wasm was never committed (only its BLAKE3 hash), and the
  committed hash can't be reproduced from upstream — a clean checkout had
  no path back to a working kernel.
- It emitted extism-PDK core-module exports while the capsule host migrated
  to the wasmtime Component Model, so its output could no longer load.

It was also a CI breaker (the QuickJS auto-build + wasi-sdk exhausted the
runner disk, SIGBUS).

Removes: the astrid-openclaw crate; astrid-build's openclaw builder,
--wizer-internal subcommand, openclaw project type + openclaw.plugin.json
autodetection; the CLI openclaw: install source; the kernel-router openclaw:
rejection; the capsule watcher's openclaw.plugin.json detection;
packages/openclaw-mcp-bridge; scripts/build-quickjs-kernel.sh and
compile-test-plugin.sh; the orphaned oxc/oxc_allocator/wizer workspace deps;
the CI QuickJS-kernel cache + auto-build steps and the wasm32-wasip1 target;
and doc/README references advertising the compiler.

UplinkSource::OpenClaw is left intact: it is live channel-registration
infrastructure that merely carries the legacy name, slated for a separate
rename.

BREAKING CHANGE: astrid build --type openclaw, astrid capsule install
openclaw:..., and installing a bare openclaw.plugin.json directory are no
longer supported.

Closes #829
Follow-up to the openclaw removal — scrubs every remaining trace so the
branch carries nothing of the deleted compiler (#829).

- Rename the live UplinkSource::OpenClaw -> UplinkSource::Bridge (it is
  bridge-registered-uplink infrastructure that merely carried the name):
  variant, new_openclaw -> new_bridge, serde tag open_claw -> bridge,
  Display openclaw(...) -> bridge(...), all call sites (astrid-mcp
  uplinkRegistered handler + tests, astrid-core tests) and docs. Verified
  in-memory-only (sole holder is an in-process Vec in the MCP client
  handler; no disk/wire serialization path), so the serde-tag change is
  format-safe today and ships with no back-compat alias.
- Delete .cargo/config.toml: its only directive was the
  --allow-multiple-definition linker hack for the duplicate
  wasmtime_continuation_start symbol across wasmtime v36 (wizer) and v37
  (extism); both arrived solely via openclaw and are gone (only wasmtime
  45 remains). cargo check --workspace links cleanly without it.
- .cargo/audit.toml: drop the three RUSTSEC wasmtime-37-via-extism
  advisory ignores (unreachable on wasmtime 45) and the extism wording.
- Scrub openclaw-branded strings: config uplink examples
  (openclaw-telegram/discord -> telegram-uplink/discord-uplink) in
  astrid-config + docs/config.md, sandbox test fixtures
  (openclaw-unicity -> bridge-unicity), apparmor comment.
- Remove dangling refs to deleted files: .gitattributes engine.wasm
  attr, .gitignore QuickJS-kernel + packages/ blocks, the
  astrid_bridge.mjs filter in the capsule watcher, and the
  compile-test-plugin.sh references (script + its already-absent
  test-plugin-guest crate) in .gitignore / integration-tests README /
  lifecycle_e2e docs.
- Update the CHANGELOG Removed entry to record the rename.

Refs #829

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR removes the astrid-openclaw compiler and all remaining OpenClaw-related build/install/watch paths from the Astrid workspace (Closes #829), and it also renames the lingering “OpenClaw” uplink source naming to “Bridge” to reflect current architecture.

Changes:

  • Delete the OpenClaw/QuickJS kernel build scripts and remove the Node-based openclaw-mcp-bridge package.
  • Scrub OpenClaw references from top-level documentation.
  • Rename UplinkSource::OpenClawUplinkSource::Bridge (including its serde tag).

Reviewed changes

Copilot reviewed 75 out of 77 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
scripts/compile-test-plugin.sh Deleted legacy WASM fixture compilation script tied to removed OpenClaw/testing flow.
scripts/build-quickjs-kernel.sh Deleted QuickJS kernel build script (previously depended on a dead extism-js fork).
packages/openclaw-mcp-bridge/tsconfig.json Removed the OpenClaw MCP bridge package configuration.
packages/openclaw-mcp-bridge/src/types.ts Removed OpenClaw plugin type surface for the bridge.
packages/openclaw-mcp-bridge/src/tool-adapter.ts Removed OpenClaw tool→MCP adapter layer.
packages/openclaw-mcp-bridge/src/loader.ts Removed dynamic plugin loader (jiti) for OpenClaw plugins.
packages/openclaw-mcp-bridge/src/index.ts Removed the OpenClaw MCP bridge CLI entry point.
README.md Removed OpenClaw compiler references from project documentation.
crates/astrid-build/README.md Documentation update needed: still references wasm32-wasip1 target incorrectly.
crates/astrid-core/src/uplink/types.rs Uplink source rename to Bridge; needs back-compat consideration for serde tag rename.
CHANGELOG.md Records OpenClaw removal; includes a claim about serialization safety that should be tightened/updated.
Files not reviewed (1)
  • packages/openclaw-mcp-bridge/package-lock.json: Language not supported
Comments suppressed due to low confidence (1)

CHANGELOG.md:31

  • This changelog entry asserts the UplinkSource serde tag rename (open_clawbridge) is "format-safe" because the type is in-memory only and "nothing persists or transmits it". In code, UplinkSource and UplinkDescriptor derive Serialize/Deserialize, and UplinkDescriptor is documented as deserializable for trusted persistence (e.g. SurrealDB), so it’s safer to either (a) mention the potential breaking change for persisted data, or (b) add a serde alias for open_claw and update this sentence accordingly.
- **`astrid build` injects the getrandom custom-backend cfg for `wasm32-unknown-unknown` capsules.** Every capsule on that target must compile with `--cfg=getrandom_backend="custom"` so `uuid` v4 / `HashMap` seeding link against `astrid-sys`'s host-routed RNG (`astrid:sys/host.random-bytes`); getrandom 0.4 requires the cfg on the final binary crate, so a capsule whose `.cargo/config.toml` omitted it failed to build with a cryptic getrandom `compile_error!`. `astrid-build` now injects the cfg itself via a merged `CARGO_ENCODED_RUSTFLAGS` — because host ≠ wasm this is a cross-compile, so the flag reaches only the wasm artifacts, never host build scripts / proc-macros. The injection merges rather than clobbers — it concatenates inherited `RUSTFLAGS`/`CARGO_ENCODED_RUSTFLAGS`, the capsule's own config `rustflags` (array or string form), and the getrandom cfg, de-duplicating only the getrandom cfg so multi-token flags like `-C opt-level=3` stay intact — so a capsule already carrying the flag is unaffected. This is a safety net for the canonical build tool; capsules still keep the flag in config because a plain `cargo build` / `cargo test` never runs through `astrid-build`. Closes #800.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread crates/astrid-build/README.md Outdated
Comment thread crates/astrid-core/src/uplink/types.rs
Three correct review comments on #833:

1. UplinkSource::Bridge now carries #[serde(alias = "open_claw")] so a
   persisted/transmitted UplinkDescriptor row written under the legacy
   open_claw tag still deserializes. UplinkDescriptor derives
   Serialize/Deserialize and is documented as deserializable for
   trusted persistence, so the prior 'in-memory-only, format-safe'
   assumption was wrong. New writes still serialize as 'bridge'. Adds a
   back-compat deser test.

2. astrid-build/README.md no longer claims 'cargo build --target
   wasm32-wasip1 --release'. The builder runs 'cargo build --release'
   and lets the capsule's .cargo/config.toml select the target
   (canonical wasm32-unknown-unknown, wasm32-wasip2 accepted); wasip1
   was the removed openclaw target.

3. CHANGELOG entry corrected to describe the alias + back-compat
   instead of the inaccurate 'nothing persists or transmits it' claim.
@joshuajbouw

Copy link
Copy Markdown
Member Author

Addressed the three review comments in 1c7b177:

  1. UplinkSource::Bridge serde back-compat — added #[serde(alias = "open_claw")] so any UplinkDescriptor persisted/transmitted under the legacy open_claw tag still deserializes (new writes still serialize as bridge). The earlier 'in-memory-only, nothing persists' rationale was wrong — UplinkDescriptor derives Serialize/Deserialize and is documented as deserializable for trusted persistence. Added a back-compat deserialization test.
  2. astrid-build/README.md — the Rust row no longer claims cargo build --target wasm32-wasip1 --release. It now reflects the actual builder: cargo build --release with the target chosen by the capsule's .cargo/config.toml (canonical wasm32-unknown-unknown, wasm32-wasip2 accepted as a migration fallback; no --target passed). wasip1 was the removed OpenClaw target.
  3. CHANGELOG — the OpenClaw-removal entry now describes the alias + backward compatibility instead of the inaccurate 'format-safe because nothing persists' claim.

cargo test -p astrid-core green (incl. the new source_deserializes_legacy_open_claw_tag_as_bridge); clippy -D warnings + fmt clean.

@joshuajbouw
joshuajbouw merged commit 6b3b0be into main Jun 5, 2026
13 checks passed
@joshuajbouw
joshuajbouw deleted the chore/remove-openclaw branch June 5, 2026 14:49
@joshuajbouw joshuajbouw mentioned this pull request Jun 10, 2026
joshuajbouw added a commit that referenced this pull request Jun 10, 2026
## Linked Issue

Closes #853

## Summary

`chore: release` — bumps all workspace crates **0.7.0 → 0.8.0** and
rolls `CHANGELOG [Unreleased]` into `[0.8.0] - 2026-06-10`. Consolidates
the ~50 PRs landed since v0.7.0:

- **HTTP admin gateway** (#756 + follow-ups) — `astrid-gateway`:
principals/caps/quotas/groups/invites/env over HTTP, audit SSE +
historical queries, agent-prompt SSE, OpenAPI emission, bus-direct admin
path (285× throughput), rustls TLS, CORS, metrics, invite + keypair CLI
verbs.
- **Runtime concurrency overhaul** (#813/#816/#819/#820) — routed
per-(capsule, topic, principal) IPC with DRR fairness, async Wasmtime,
dynamic instance pools, split blocking/IO semaphores, per-principal fuel
+ memory ledgers with enforcement and usage reporting.
- **Host process + introspection surface** — `astrid:process` persistent
tier (#866/#867/#871/#873), capability introspection (#868/#869),
`astrid mcp serve` (#879/#880), `astrid-emit` (#814/#842).
- **Security** — macOS 15+ sandbox no longer silently disabled
(#855/#857), audit-feed principal scoping (#850/#851), failed-redeem
audit rows (#846), `self:agent:list` roster leak (#848), pair-device
redeem rate-limit (#844), bearer revocation + wire format v2 (#772).

Breaking: `Capsule.toml` `[publish]`/`[subscribe]`-only IPC surface
(#858/#864/#865, `[[interceptor]]` / `ipc_*` arrays / `[[topic]]`
removed), bearer v2, MSRV 1.95, `astrid-openclaw` removed (#833).

## Changes

- `[workspace.package].version` `0.7.0` → `0.8.0` + the 23 in-workspace
path-dependency pins (now including `astrid-emit`; `axum`/`axum-server`
stay on their external 0.7).
- CHANGELOG: `[Unreleased]` → `[0.8.0] - 2026-06-10` with a release
**synopsis** (extracted into the GitHub release body by release.yml on
tag). Keeps the earlier roll's curation (canonical section order,
bullets verbatim) and merges the 13 entries added to `[Unreleased]` by
the 12 PRs that landed after the branch was first cut (#851#885) —
verified both directions that no bullet was lost.

Branch history note: rebuilt on current `main` (was `CONFLICTING` and 12
commits behind); previous tip was `54c7294`.

## Release steps (maintainer)

1. Merge this PR.
2. Tag `v0.8.0` on the merge commit → release.yml creates the GitHub
release from the CHANGELOG block.
3. Publish/distribute the new `astrid` binaries as usual.

## Test Plan

Release PR — no code changes. `cargo check --workspace` passes on the
rebuilt branch; full test/clippy/MSRV matrix runs in CI. The changelog
merge was verified bullet-by-bullet in both directions: every
`[Unreleased]` bullet on `main` appears in the rolled `[0.8.0]` section,
and every bullet from the earlier curated roll is preserved verbatim.
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.

Remove astrid-openclaw: dead extism-js fork dependency, ABI-obsolete output

2 participants