n7n-plugin-host 0.1.0

wasmtime-бекенд для crate::registry::PluginRegistry (n7n-harness) — друга (wasm-компонентна) реалізація слотів detector/verify/ast_facts/t0, поруч з in-process-бекендом §3.12 пункту 16а
//! `Store<T>`-стан, спільний для всіх чотирьох поверхонь — WASI-контекст,
//! таблиця ресурсів і корінь репозиторію (для власного, вужчого `host-fs`
//! імпорту, доккоментар `wit/host.wit`).
//!
//! Один тип на весь крейт — і `wasmtime_wasi::p2::add_to_linker_sync`, і
//! кожен згенерований `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` читає файли —
    /// той САМИЙ корінь, який [`crate::wasi_ctx::read_only_repo_ctx`]
    /// preopen-ить для `wasi:filesystem` (доккоментар `host_fs.rs`: чому
    /// обидва шляхи читання ведуть до одного кореня, а не до різних).
    pub(crate) repo_root: PathBuf,
}

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