跳到内容
Lenso
简体中文
Esc
导航打开⌘J预览
本页内容

可移植 Rust Plugin

创建一个可移植 Rust Plugin,并交付经过验证的 Bundle。

普通、可安装的 Agent Tool 使用这条路径。Rust 脚手架把业务行为留在同一份源码 中,由 SDK 派生 Capability Descriptor、Wasm lowering、Process entrypoint 与 package metadata。

1. 创建项目

# 同一源码生成可移植 Wasm 与可信 Native Process
lenso plugin new example.echo

# 只生成 Wasm
lenso plugin new example.echo --runtime wasm

# 只生成可信 Process
lenso plugin new example.echo --runtime process

默认 Multi-output 项目同时满足可移植性与原生进程兼容性。Process Plugin 拥有普通 本地进程权限,不是 Sandbox。

example.echo/
├── Cargo.toml
├── Cargo.lock
└── src/
    ├── lib.rs     # 业务行为
    └── main.rs    # multi/process 项目生成的 Process entrypoint

该脚手架有意保持狭窄:它只创建 Agent Tool Provider,并不是任意 Capability provider、有状态 Plugin、Web UI 或 Bun 项目的通用生成器。

2. 实现行为

初始脚手架使用公共 Macro,不要求手写 Adapter Protocol:

use lenso_agent_tool_sdk::prelude::*;
use schemars::JsonSchema;

#[derive(Debug, serde::Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
struct Arguments {
    text: String,
}

#[lenso::plugin]
#[derive(Clone, Copy, Debug, Default)]
struct Plugin;

#[lenso_agent_tool_sdk::tool_provider]
impl Plugin {
    #[tool(name = "example.echo", description = "Echo text.")]
    fn execute(arguments: Arguments) -> Result<ExecuteResponse, ExecuteError> {
        Ok(ExecuteResponse {
            content: arguments.text,
            content_type: ContentType::Text,
            metadata_json: "{}".try_into().unwrap(),
        })
    }
}

Arguments 类型会成为 Tool 的 JSON Schema。预期的非法输入返回 ExecuteError;panic 或损坏的运行时边界仍然属于 Runtime Failure。

3. 运行开发循环

lenso plugin check
lenso plugin dev --implementation auto --operation execute --request-json \
  '{"name":"example.echo","arguments_json":"{\"text\":\"hello\"}"}'
lenso plugin dev --watch --operation execute --request-json \
  '{"name":"example.echo","arguments_json":"{\"text\":\"hello\"}"}'

check 会构建所有声明的实现并检查 Descriptor 一致性。dev 会跨越真实 Adapter 边界,并不会把直接调用 Rust 函数当作测试捷径。--watch 在修改后重新构建, 并再次运行同一个请求。

需要显式比较输出时,使用 --implementation wasmprocessall

4. 打包 Release

lenso plugin pack

pack 构建 Release Artifact,要求所有实现暴露相同 Contract,在 dist/ 下写出 一个不可变 .lenso-plugin 归档,再通过安装时使用的 verifier 重新打开这些字节。

通过向 App 添加 Plugin安装生成的 Bundle。其他 Capability 角色应先定义 Contract,再使用 Linked Rust Plugin 路径或已支持的强类型 SDK。

需要两个同类 Capability 的独立 Provider,或有状态构造与清理时,继续阅读 命名依赖document-sync 完整示例

最后更新于 2026年9月6日

这个页面有帮助吗?