Files
core/skills/references/external-lib.md
T
2026-11-03 03:32:07 +00:00

2.4 KiB
Raw Blame History

外部库接入

external-lib 项目 使用现成 Markdown 库,App 调用 Port,外部程序实现 render。示例可运行 fake 测试,真实依赖与运行资源另行准备。生成 HTML 未清洗,展示不可信输入前需处理。

生态 external 声明 lib 声明 setting.json 的 lib 项
Python external pip "python/render.py" markdown@3.8.2 pip:markdown@3.8.2
JavaScript external npm "javascript/render.mjs" marked@15.0.12 npm:marked@15.0.12
Go external go "go/render.go" github.com/yuin/goldmark@v1.7.8 go:github.com/yuin/goldmark@v1.7.8

源码:Adapter

external pip "python/render.py" {
  lib "markdown@3.8.2"
}

切换生态时同步 Adapter 和配置,Port、App 和测试的接口不变。版本是示例固定输入,各库的 Markdown 方言和换行可能不同。

处理函数

生态 导出签名
Python async def render(payload, setting)
JavaScript async function render(payload, setting, signal)
Go func Render(context.Context, any, any) (any, error)

Go 声明 package main,入口由工具生成。操作名按单词转 UpperCamelCase。Worker 接口定义和运行器由编译器按 Port 生成,不手写协议、hash 或操作注册表。

输入为 {"source":"# Report"},成功输出为 {"html":"..."}。单输出也须保留命名字段;没有 setting 时传 null/nil。

业务拒绝使用 SDK BusinessError,identity 为 document.markup.RenderResult.Rejected,payload 为 {"message":"..."}。其他异常为运行失败。stdout 专用于协议,日志写 stderr;处理函数须响应各生态的取消信号。

配置通过 Adapter setting 传入。文件、网络、进程或 GPU 用 allow 声明,实际权限由运行环境管理;Worker 不是不可信代码沙箱。

验证与运行

dever check <root>
dever test <root> --filter document.markup --timeout-ms 5000

rendered/rejected 分别验证成功和拒绝,每例独立 fake。真实运行需可信的 dever.lock、目标运行时及 Worker 资源;当前 CLI 只提供 lib install 恢复已有锁,不提供 add/update 解析新锁。

准备好资源后运行 dever run <root> -- document.markup.render '{"source":"# Report"}'。fake 不验证第三方库的实际输出或跨架构运行。