feat(runtime): add resident Wasmtime actor runtime

- define versioned service and clock WIT contracts
- enforce import allowlists, fuel, epoch, memory, I/O, and mailbox limits
- keep one Store and Component Instance resident per serial Actor
- add echo, counter, fault, spin, and capability probe components
- cover lifecycle, concurrency, sandbox, and fault recovery behavior
This commit is contained in:
Maofeng
2026-07-27 04:59:33 +08:00
parent 893895a76c
commit cfac7d85f0
41 changed files with 3240 additions and 18 deletions
+16
View File
@@ -0,0 +1,16 @@
[package]
name = "clock-probe-component"
version = "0.1.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
[package.metadata.wasmeld]
id = "clock-probe"
world = "component:clock-probe/clock-probe-component@0.1.0"
[lib]
crate-type = ["cdylib"]
[dependencies]
wit-bindgen.workspace = true
+24
View File
@@ -0,0 +1,24 @@
mod bindings {
wit_bindgen::generate!({
path: "wit",
world: "clock-probe-component",
generate_all,
});
}
struct ClockProbe;
impl bindings::Guest for ClockProbe {
fn init(_config: Vec<u8>) -> Result<(), bindings::ServiceError> {
Ok(())
}
fn invoke(input: Vec<u8>) -> Result<Vec<u8>, bindings::ServiceError> {
let now = bindings::wasmeld::clock::monotonic_clock::now();
let mut output = now.to_le_bytes().to_vec();
output.extend_from_slice(&input);
Ok(output)
}
}
bindings::export!(ClockProbe with_types_in bindings);
+11
View File
@@ -0,0 +1,11 @@
schema_version = 1
[dependencies]
"wasmeld:clock" = "0.1.0"
"wasmeld:service" = "0.1.0"
[replace."wasmeld:clock"]
path = "../../wit/clock"
[replace."wasmeld:service"]
path = "../../wit/service"
+15
View File
@@ -0,0 +1,15 @@
schema_version = 1
[[package]]
name = "wasmeld:clock"
version = "0.1.0"
source = "path+../../wit/clock"
sha256 = "93079c69d1b9cb3afc28da6fe4a7e37f724d0a09e780c847f8524d3920a90960"
replaced = true
[[package]]
name = "wasmeld:service"
version = "0.1.0"
source = "path+../../wit/service"
sha256 = "d5497307bbcd1e159f7707f385b488a6f2e26362d5256d5bc1080ac603a51305"
replaced = true
+6
View File
@@ -0,0 +1,6 @@
package component:clock-probe@0.1.0;
world clock-probe-component {
include wasmeld:service/service-component@0.1.0;
import wasmeld:clock/monotonic-clock@0.1.0;
}