n7n-plugin-host 0.2.0

wasmtime-бекенд для crate::registry::PluginRegistry (n7n-harness) — друга (wasm-компонентна) реалізація слотів detector/verify/ast_facts/t0, поруч з in-process-бекендом §3.12 пункту 16а
Documentation
//! `Store<T>`-стан, спільний для всіх чотирьох поверхонь — WASI-контекст,
//! таблиця ресурсів і корінь репозиторію (для власного, вужчого `host-fs`
//! імпорту, доккоментар `wit/host.wit`).
//!
//! Один тип на весь крейт — і `wasmtime_wasi::p3::add_to_linker`, і
//! кожен згенерований `n7n::fix_deps::host_fs::add_to_linker` (по одному на
//! bindgen!-модуль — доккоментар `detector.rs`, "чому чотири копії Host") в
//! усіх чотирьох `Wasm*::from_file` лінкуються на РІВНО цей `T`, тож
//! `HasSelf<HostState>` скрізь той самий.

use std::path::PathBuf;

use wasmtime::component::ResourceTable;
use wasmtime_wasi::{WasiCtx, WasiCtxView, WasiView};

pub(crate) struct HostState {
    pub(crate) wasi: WasiCtx,
    pub(crate) table: ResourceTable,
    /// Корінь, відносно якого власний `host-fs.read-file` читає файли.
    ///
    /// Після переходу на WASI p3 це ЄДИНИЙ шлях читання, який guest має:
    /// широкий `wasi:filesystem`-preopen більше не видається взагалі
    /// (доккоментар [`crate::wasi_ctx::no_filesystem_ctx`] — чому саме, і
    /// чому це посилення межі, а не поступка).
    pub(crate) repo_root: PathBuf,
}

impl WasiView for HostState {
    fn ctx(&mut self) -> WasiCtxView<'_> {
        WasiCtxView {
            ctx: &mut self.wasi,
            table: &mut self.table,
        }
    }
}