ticket: plan plugin component model migration
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
---
|
||||
title: "Plugin Component Model migration"
|
||||
state: "active"
|
||||
created_at: "2026-06-19T13:18:58Z"
|
||||
updated_at: "2026-06-19T13:18:58Z"
|
||||
linked_tickets: ["00001KV5W3PHW", "00001KVFDX9AF", "00001KVFDX9AY", "00001KVFD3YSV", "00001KVG0HR96"]
|
||||
---
|
||||
|
||||
## Goal
|
||||
|
||||
Move Yoi Plugin Tool authoring and runtime from the current raw core-Wasm ABI toward the WebAssembly Component Model so Plugin authors can implement typed interfaces rather than hand-writing pointer/length memory plumbing.
|
||||
|
||||
The target is not to weaken sandboxing or Plugin grants. The target is to make Plugin ABI, host APIs, SDK bindings, and future multi-language authoring use typed WIT worlds while preserving Yoi's existing package discovery, explicit enablement, digest pinning, ToolRegistry, ordinary Tool history, and Plugin-layer permission enforcement.
|
||||
|
||||
## Motivation / background
|
||||
|
||||
Yoi currently has a functional minimal Plugin Tool MVP:
|
||||
|
||||
- package discovery / explicit enablement;
|
||||
- Tool surface registration;
|
||||
- minimal WASM Tool execution through a raw core-Wasm ABI;
|
||||
- Plugin permission grants.
|
||||
|
||||
The raw ABI is intentionally narrow, but it pushes too much low-level work onto Plugin authors and future SDKs:
|
||||
|
||||
- `memory` export handling;
|
||||
- `yoi_tool_call()` export convention;
|
||||
- `input_len` / `input_read` / `output_write` pointer-length plumbing;
|
||||
- JSON serialization and error encoding;
|
||||
- host API import namespace conventions;
|
||||
- ABI versioning for future `https` / `fs` / Ingress APIs.
|
||||
|
||||
Research of common Wasm extension systems points in the same direction:
|
||||
|
||||
- Extism-style systems provide a PDK so Plugin authors write normal typed functions while the PDK hides the raw ABI.
|
||||
- Spin-style systems combine manifests, templates, SDKs, explicit outbound/file capabilities, and Wasm components.
|
||||
- The WebAssembly Component Model standardizes typed imports/exports via WIT and canonical ABI instead of each host inventing its own pointer/length protocol.
|
||||
|
||||
Yoi should adopt that direction early enough that `https`, `fs`, SDK, authoring templates, and future Service/Ingress surfaces do not entrench a custom ABI that will be expensive to migrate later.
|
||||
|
||||
## Strategy / design direction
|
||||
|
||||
- Treat the Component Model as the preferred future Plugin runtime shape.
|
||||
- New typed Plugin host APIs should be designed in WIT-compatible terms.
|
||||
- `runtime.kind = "wasm-component"` should become the preferred runtime once implemented.
|
||||
- Keep the current raw core-Wasm runtime as a compatibility / migration bridge until Component Model execution is validated.
|
||||
- Current ABI name: `yoi-plugin-wasm-1`.
|
||||
- Future component world should get an explicit version, e.g. `yoi:plugin/tool@1.0.0`.
|
||||
- Preserve existing Yoi authority boundaries.
|
||||
- Component imports are capability-shaped interfaces, not grants by themselves.
|
||||
- Package discovery remains read-only.
|
||||
- Enablement and Plugin grants remain explicit and fail closed before registration/execution/host API calls.
|
||||
- Tool calls and results continue through ordinary ToolRegistry / history paths.
|
||||
- Prefer a phased migration rather than a flag day.
|
||||
1. Define WIT package/worlds for Tool Plugin and host APIs.
|
||||
2. Add runtime manifest support for `wasm-component` alongside current `wasm`/core ABI.
|
||||
3. Add host-side component execution and typed import/export binding.
|
||||
4. Port or wrap `https` / `fs` host APIs through WIT-compatible interfaces.
|
||||
5. Add authoring SDK/templates around the component world.
|
||||
6. Keep or deprecate raw core-Wasm runtime based on migration evidence.
|
||||
- Evaluate runtime cost explicitly.
|
||||
- Current implementation uses `wasmi` for core Wasm.
|
||||
- Component Model support likely points to `wasmtime::component` or a separate component backend, with packaging/build-size/runtime implications.
|
||||
- Nix build validation is required for this migration.
|
||||
|
||||
## Success criteria / exit conditions
|
||||
|
||||
- Yoi has a documented WIT world for Tool Plugins and initial host APIs.
|
||||
- A sample Rust Component Model Tool Plugin can be built and run by Yoi without raw pointer/length code in Plugin author source.
|
||||
- Component runtime is selected explicitly by package manifest metadata and never by package presence alone.
|
||||
- Component host API calls are still denied without matching Plugin grants.
|
||||
- Tool outputs still use ordinary Tool result/history paths; no hidden context injection is introduced.
|
||||
- Current core-Wasm Plugin tests either remain passing or are explicitly migrated with a compatibility decision.
|
||||
- Packaging impact is measured and `nix build .#yoi` passes.
|
||||
- Documentation explains the migration path for existing raw-ABI Plugin packages and future SDK authors.
|
||||
|
||||
## Decision context
|
||||
|
||||
- This Objective is medium-term context, not Ticket authority. Implementation still requires reading concrete Ticket bodies, threads, artifacts, and relations.
|
||||
- The Component Model direction supersedes making Yoi's custom raw ABI the long-term authoring interface.
|
||||
- Short-term `https` / `fs` work should avoid encoding choices that conflict with later WIT typing.
|
||||
- Guest SDK work should either target Component Model directly or keep the raw ABI wrapper clearly transitional.
|
||||
- MCP remains separate from Plugin. Component Model adoption for Plugin does not imply MCP server execution, MCP prompt/resource injection, or MCP trust policy changes.
|
||||
Reference in New Issue
Block a user