Maofeng d0d2e06f68 feat(console): unregister inactive revisions
Expose a management DELETE endpoint that refuses to remove an active Deployment, delegates Actor and compiled Component cleanup to Runtime, and removes stored artifacts.

Reconcile Toasty snapshots by deleting absent service and Deployment rows so removed revisions do not reappear after restart.

Persist unregister lifecycle events and verify active-revision protection, artifact deletion, Runtime cleanup, and restart behavior.
2026-07-29 20:26:06 +08:00
2026-07-27 05:19:30 +08:00
2026-07-29 19:37:19 +08:00

Wasmeld

Wasmeld 是面向 WebAssembly Component 的服务运行与管理平台。内部服务编译为 Component,在受限 Wasmtime Sandbox 中以常驻 Actor 运行,并通过稳定 WIT 契约 暴露能力。

Runtime 内置版本化 Host Capability Registry。注册 Component 时会直接读取其 WIT imports,只链接实际请求且版本完全匹配的 Host 能力;未知能力会被拒绝。能力不需要在 .wasmpkg 中重复声明,管理面会展示每个服务版本解析出的完整接口标识。

当前 Host 能力:

  • wasmeld:clock/monotonic-clock@0.1.0Actor 内单调时钟
  • wasmeld:kv/store@0.1.0:按服务隔离、跨 Revision 共享的持久化二进制 KV

结构

crates/wasmeld-runtime   Component Runtime 与 Sandbox
crates/wasmeld-console   管理 API 与持久化
crates/wasmeld-package   wasmeld CLI、组件包与 WIT 依赖管理
components/              示例 Component
console/                 TanStack Start 管理面
wit/                     Wasmeld WIT package 源码

启动

后端:

cargo +stable run -p wasmeld-console

后端会启动本地管理 API 127.0.0.1:8080 和公开数据面 0.0.0.0:8081。注册 Component 后,通过管理 API 激活一个版本:

curl -X POST http://127.0.0.1:8080/api/v1/deployments/echo/activate \
  -H 'Content-Type: application/json' \
  -d '{"revision":"0.1.0"}'

客户端只访问 Gateway,并以原始二进制请求调用活动版本:

curl http://127.0.0.1:8081/v1/services/echo/invoke \
  -H 'Content-Type: application/octet-stream' \
  --data-binary 'hello'

管理面:

cd console
npm run dev

构建组件:

cargo run -p wasmeld-package --bin wasmeld -- \
  pack components/echo/Cargo.toml --locked

KV 示例组件:

cargo run -p wasmeld-package --bin wasmeld -- \
  pack components/kv-probe/Cargo.toml --locked

kv-probe 接受 set:<key>:<value>get:<key>delete:<key>,用于验证 Host KV 能力;它不是公开 Gateway 的业务协议。

发布 WIT Package

cargo run -p wasmeld-package --bin wasmeld -- \
  wit publish wit/service --registry http://127.0.0.1:8080

组件在 wasmeld.toml 中声明 Registry 和精确版本依赖,wasmeld wit fetch 会递归 解析依赖、生成 wit/deps,并将完整解析结果记录在 wit.lock。本地开发可使用 [replace] 临时覆盖 Registry 来源。

S
Description
No description provided
Readme 2.6 MiB
Languages
Rust 72.2%
TypeScript 18.3%
CSS 8.5%
JavaScript 1%