本地 App 开发与 Engine
从本地 Plugin 源码开发 App,按需选择 convention,也可以脱离 App 使用 Engine。
Engine 已作为独立项目交付;lenso-engine 0.1.1 和可选 App、Runtime、Authoring、
Markdown、Worker、Host 包的 0.1.0 已发布到 crates.io。通用 Engine 可以直接作为库使用。
CLI 和 Console 开发包有各自的发布流程;使用下面的 App 命令前,先对实际安装的二进制
执行 lenso app --help 和 lenso engine --help,不要仅凭 Engine 库版本判断 CLI 功能。
无配置创建 App
lenso app create my-app --runtime bun
cd my-app
lenso app dev
# 停止开发进程后:
lenso app build
lenso app start --from dist
app/ 放 App 自有 Plugin 源码,plugins/ 保留 Instance 配置和禁用标记。
基础源码 App 无需 lenso.toml、Host 声明、preset 或激活开关。
默认 scaffold runtime 为 process,也可显式选择 bun、wasm、multi、empty。
Rust 源码需要相应工具链;纯 Bun App 使用预编译 runtime。
只有需要额外本地发现目录时才添加配置:
# 可选的 lenso.toml
plugin_sources = ["../shared-plugins", "../packages/*"]
这些是本地发现源,不是 marketplace 地址。共享候选需要
plugins/example.audit/default.toml 等 Root 文件显式选择后才构建和准入;
App 自有 Plugin 获得可禁用的 default Instance。重复身份或未满足的依赖明确报错。
lenso app discover --json
lenso app build --out dist-review
lenso app check --root dist-review
lenso app show --root dist-review --json
lenso app start --from dist-review --check
构建写入新目录,拒绝覆盖已存在的输出。产物包含选中的 Host、resolver、插件产物、 需要时的 Bun、Root 意图和完整性元数据;运行不依赖源码、Cargo 或 PATH 上的 Bun。 运行时完整包和源码可复现归档是不同产物。
开发循环重建并重启 generation。构建失败保留上一个运行版本;构建成功后的启动失败 会明确报告,并不保证零停机切换或自动回滚。
选择开发体验
- 文件 convention:CLI 命令、Rust 宏、Agent Tool 和可选依赖边界。
- App Console:页面、owner service 和无需 Rust 工具链的开发包。
- Capability:
lenso app contract new example.text在contracts/创建 Descriptor/JSON Schema 包及 TypeScript 投影。--source rust创建 Rust contract 包,需要 Cargo。app build/app dev在编译消费者前同步选中合约,生产启动不运行生成器。 角色和版本规则见 Capability 编写。
现有自定义 Host、Plugin SDK、plugin dev 和底层 API 继续可用,convention 最终仍使用
这些合约和运行边界。
不开发 App,也能使用 Engine
Engine 是独立 lenso-engine 仓库中的 authoring 层,Rust 包放在 crates/,CLI 消费其库。
核心处理不可变输入、处理计划、依赖顺序、session 和结果发布;App 组合是可选 processor。
lenso engine inspect --source ./content --markdown
lenso engine run --source ./content --markdown
lenso engine dev --source ./content --markdown --output ./dist
Markdown 路径无需 App、Cargo 或 Bun。未选择对应支持时,plugin.rs 等文件没有特殊含义。
Processor 可以读取、解析、编译、转换或索引,不局限于 compile。
Rust、Bun、Python 等可执行程序可实现版本化 JSON processor 协议;这不等于新增了
业务 Plugin 的运行时 Adapter。
自定义 engine.json 分开声明输入、本地 processor 源及显式选择:
{
"schema": "lenso.engine-workflow.v1",
"sources": ["content"],
"plugin_sources": ["tools"],
"plugins": ["example.reader.v1"],
"presets": []
}
tools 必须提供对应身份的有效 engine-plugin.json 以及已有可执行文件和 artifacts。
先参考 Engine README 和示例实现协议,再执行:
lenso engine lock --workflow engine.json
lenso engine run --workflow engine.json --output dist
Lock 仅计算现有选中工具、产物和配置的哈希,不安装或编译;执行时校验本机 lock。 工具或配置变化需要重新 lock,内容文件可以继续编辑。Bootstrap 使用已可执行的 processor,因此发现自身不依赖先编译自身所定义的源码 convention。