5.5 KiB
5.5 KiB
Dever 外部 Lib 生态
Goal
让 Dever Package 通过现有 Port/Adapter 边界安全复用 PyPI、npm、Go Modules 及后续其它语言生态。用户统一使用 dever lib 管理依赖,dever run/build 自动管理 Worker;业务源码不直接调用外语函数,也不接触语言工具链、环境变量或进程协议。
Definitions
- Package:Dever 组件的发行单位,包含
.dever业务源码并接受完整静态检查。 - Lib:PyPI、npm、Go Modules 等外部生态依赖。
- Adapter:Port 与 Lib 之间唯一合法的桥接层。
- Worker:运行外部 Adapter 的隔离进程,不是用户可调用的业务层。
Requirements
Language Boundary
- 外部 Adapter 继续属于
module/<component>/<domain>/adapter,完整实现同领域一个 Port。 - App 只调用 Port;Domain、Model、API、Job 不直接调用 Lib、Worker 或外部 SDK。
port.dever仍是输入、输出、failure、effect 和 schema 的唯一来源;不得从 Python annotation、TypeScript 类型或 Go 接口反向定义业务合同。- 外部 Adapter 使用严格的
external <ecosystem> <entry>声明,可包含 Lib 与 capability 声明;禁止任意 shell/build 命令。 - 普通 Dever Adapter、测试 Port fake 与现有运行时选择合同保持不变。
Protocol And Lifecycle
- 所有语言共用一个版本化 Dever Component Protocol,而不是在编译器中增加
python_call、go_call、js_call特例。 - 协议支持 handshake、schema identity、typed setting、call、result/error、cancel、health 和 shutdown。
- Worker 长驻并由结构化生命周期拥有;启动失败、崩溃、超时、取消和关闭均有界,不产生 detached 进程。
- 业务错误只能返回 Port 声明的 error variant;协议破坏、进程崩溃和非法输出成为安全 runtime fault,不自动重试。
Dependency Management
- 用户命令为
dever lib add/list/update/remove/doctor;生态使用pip:、npm:、go:等明确前缀。 - 解析结果写入编译器生成的项目根
dever.lock,记录精确版本、传递依赖、内容摘要、runtime、目标平台和 Port schema identity。 dever.lock是可提交、不可手改的构建输入,不替代只负责部署配置和 Secret 的config/setting.json。- 只有显式
lib add/update可以联网;check/test/run/build默认离线且不得从用户 PATH 或环境变量选择语言 runtime。 - 首批正式生态是
exec、pip、npm和go;Maven、NuGet、Composer、Gem 通过同一扩展合同后续增加,不修改语言核心和协议。
Security And Capabilities
- 外部源码不受 Dever 内部静态检查,因此默认无网络、项目外文件、子进程、设备和 GPU 权限。
- Adapter 必须显式声明所需 capability;声明参与 Port effect 的保守分析,并由 Worker sandbox 执行。
- Worker 只接收当前 Adapter 的 typed setting,不读取完整
setting.json;Secret 不进入日志、协议诊断或缓存身份明文。 - 安装脚本、路径、符号链接、归档解包和原生产物必须经过边界、摘要和所有权校验。
Run, Build And Package
dever run从机器级 Dever 缓存准备并监督选中的 Worker,不要求用户手动启动服务。dever build把所有可运行时选择的外部 Adapter、runtime 与锁定依赖封装进自包含应用;目标机器不需要 Python、Node、Go 或包管理器。- 嵌入资源以内容摘要验证后释放到应用
data/cache/lib,不覆盖项目源码、配置或用户文件。 - Dever Package 可以携带外部 Adapter 声明;普通使用者只执行
dever package add,项目解析时把传递 Lib 统一锁定。 - 不同 Adapter 的依赖环境隔离,允许同一外部包的不同版本共存;机器缓存按内容去重。
Acceptance Criteria
- 同一个 Port 可以分别由 Dever、
exec、Python、JavaScript 和 Go Adapter 实现,App 调用代码不变。 - 协议 schema、operation、输入、输出或 error 不匹配在用户业务代码执行前失败。
- Worker 崩溃、取消、超时和主程序关闭不会遗留进程或把半条响应当成功结果。
lib add/update产生确定性 lock;断网check/run/build使用相同 lock 和机器缓存成功,缺失依赖明确失败且不隐式联网。- Python、Node 和 Go 组件在目标机器没有对应系统 runtime/toolchain 时仍可由构建产物运行。
- 未声明 capability 的网络、文件、进程和设备访问被拒绝;Secret 与其他项目路径不出现在诊断或状态输出。
- 一个 Dever Package 可以封装外部 Lib,另一个项目只安装该 Package 即可构建和运行。
- 新增第四种生态只实现 resolver/runtime pack/SDK,不修改 Port、Component Protocol 或 App 调用规则。
Out Of Scope
- FFI、动态库加载和同进程外语解释器。
- 自动把任意第三方函数、类或对象模型暴露成 Dever API;普通生态库仍需要薄 Adapter bridge。
- 云端编译、源码上传或运行时联网安装。
- 外部 Adapter 热切换、请求级实现选择和无约束自动重试。
- 修改现有 Dever Package/Component/Domain 的业务命名和调用规则。
Child Deliverables
09-29-external-lib-protocol:语言合同、统一协议、通用execWorker 和生命周期。09-29-external-lib-ecosystems:dever lib、dever.lock、共享缓存及 pip/npm/go resolver 和 SDK。09-29-external-lib-packaging:run/build自包含打包与 Dever Package 传递依赖。