feat: publish Dever core with project scaffolding and versioned AI skills
This commit is contained in:
1 parent
70fa73cdc2
commit
ac458ffa7f
960 files changed
+221319
-1163
No files matched your search
@@ -0,0 +1,4 @@
|
||||
{"file":".trellis/spec/backend/quality-guidelines.md","reason":"定向测试、真实 CLI 和资源生命周期验证要求"}
|
||||
{"file":".trellis/spec/backend/error-handling.md","reason":"业务 error、runtime fault 和协议错误边界"}
|
||||
{"file":".trellis/spec/backend/directory-structure.md","reason":"新增实现必须归属现有 compiler/runtime/CLI owners"}
|
||||
{"file":".trellis/tasks/09-29-external-libs/prd.md","reason":"父任务跨子任务验收标准"}
|
||||
@@ -0,0 +1,62 @@
|
||||
# Design
|
||||
|
||||
## Architecture
|
||||
|
||||
```text
|
||||
App -> typed Port -> selected Adapter -> Worker supervisor -> Component Protocol -> Lib
|
||||
```
|
||||
|
||||
Port 保持现有 compiler-owned Function ID 和闭合实现集合。外部 Adapter 是新的实现种类,不是新业务调用层;checker 从 Port 合同合成 Worker operation schema,并把显式 capability 纳入既有 effect/dependency 分析。
|
||||
|
||||
## Source Contract
|
||||
|
||||
建议外部 Adapter 保持现有 topic identity:
|
||||
|
||||
```text
|
||||
module/ai/embedding/port.dever
|
||||
module/ai/embedding/adapter/python.dever
|
||||
module/ai/embedding/adapter/python/main.py
|
||||
```
|
||||
|
||||
```dever
|
||||
setting {
|
||||
model: Text
|
||||
}
|
||||
|
||||
external pip "python/main.py" {
|
||||
lib "sentence-transformers@3.3.1"
|
||||
allow gpu
|
||||
}
|
||||
```
|
||||
|
||||
一个外部 Adapter 文件恰好有一个 `external` 声明,可选现有 typed `setting`,没有 Dever operation body/helper。它由编译器合成该 Port 的全部实现,Worker handshake 必须提供全部 operation。入口必须是所属 Adapter 目录内的规范化相对路径。
|
||||
|
||||
## Component Protocol
|
||||
|
||||
传输使用专用双向管道和四字节大端长度分帧 JSON,复用现有 wire codec 的 16 MiB、64 层、65536 值预算。stderr 只承载日志,不能进入协议。
|
||||
|
||||
消息固定为:`hello/ready/call/result/error/cancel/health/shutdown`。每次握手包含协议版本、Port identity、schema hash、Adapter identity 和 capability 集;不匹配立即结束 Worker。请求 ID 在单 Worker 生命周期内唯一,输出必须属于当前未完成请求。
|
||||
|
||||
## Worker Ownership
|
||||
|
||||
每个选中外部 Adapter 启动一个长驻 Worker 和有界请求队列。supervisor 属于现有应用 Scope;入口启动完成后才允许用户代码,关闭时停止 admission、取消未完成请求、发送 shutdown 并在期限内 join/kill。崩溃使当前请求 fault;后续调用可以受限重启,但绝不重放已发送请求。
|
||||
|
||||
## Lib Resolution
|
||||
|
||||
生态 resolver 共用请求/锁模型:requested spec -> exact artifacts -> content hashes -> runtime pack -> target set。resolver 只能在显式 `lib add/update` 联网,结果写 canonical `dever.lock` 并原子替换。项目命令只验证 lock 与缓存,不重新解析版本。
|
||||
|
||||
机器级 cache 和 runtime pack 消费 `09-28-shared-toolchain` 的全局工具链合同;在该合同完成前,生态子任务只使用测试自有 fixture store,不新增临时用户缓存协议。
|
||||
|
||||
## Build Packaging
|
||||
|
||||
每个 Adapter 生成目标专用 Worker artifact。`build` 将所有运行时可选 Adapter、runtime pack、lock manifest 和摘要作为只读资源嵌入应用。首次使用时写入 `data/cache/lib/<digest>` 的私有 staging,校验后原子发布;主程序只执行匹配 manifest 的文件。
|
||||
|
||||
## Extension Boundary
|
||||
|
||||
新增生态只实现四个固定面:spec parser、resolver、runtime/build packager、SDK。它不能扩展语法、Port 协议、业务类型系统、setting 来源或进程生命周期。
|
||||
|
||||
## Dependencies
|
||||
|
||||
- 通用协议子任务可以先实现和验证。
|
||||
- 生态解析依赖机器级共享工具链目录/缓存合同。
|
||||
- 生产自包含打包依赖父发行任务提供可分发 runtime/target pack;本地 fixture 可以先验证封装格式。
|
||||
@@ -0,0 +1,5 @@
|
||||
{"file":".trellis/spec/backend/compiler-contracts.md","reason":"Port/Adapter、role visibility、failure/effect 和 application testing 合同"}
|
||||
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"wire、settings、native build、CLI、runtime 生命周期和离线工具链合同"}
|
||||
{"file":".trellis/tasks/09-20-port-adapter/design.md","reason":"复用现有闭合 Port dispatch、typed setting 与 test fake 设计"}
|
||||
{"file":".trellis/tasks/09-28-shared-toolchain/design.md","reason":"复用机器级全局命令、版本和安全共享缓存边界"}
|
||||
{"file":".trellis/tasks/09-06-private-compiler-distribution/prd.md","reason":"约束最终 runtime/target pack 与公开发行依赖"}
|
||||
@@ -0,0 +1,33 @@
|
||||
# Implementation Plan
|
||||
|
||||
- [x] 完成并验收 `external-lib-protocol`,冻结语法、wire 和生命周期合同。
|
||||
- [x] 完成全局工具链共享缓存的依赖接口,不在 Lib 任务复制机器安装/版本管理。
|
||||
- [x] 完成并验收 `external-lib-ecosystems` 的离线确定性边界,以本地 fixture registry 覆盖 lock/doctor/artifact 校验。
|
||||
- [x] 完成并验收 `external-lib-packaging` 的 fixture 资源打包、摘要复核和私有 extraction 边界。
|
||||
- [x] 跨子任务复核 Port effects/failures、setting/Secret、测试 fake、缓存身份和 `run/build` 行为。
|
||||
- [x] 更新 LANGUAGE、README、IMPLEMENTATION 和 backend specs,删除已被正式合同替代的占位说明。
|
||||
- [ ] 只运行各子任务列出的定向检查;不默认运行全量、真实外部 registry、服务或性能测试。
|
||||
|
||||
## 当前收口补充(2026-09-29)
|
||||
|
||||
- [x] 已增加 `ProviderManifest`/`LibResolver` 边界,fixture provider 与真实 pip/npm/Go provider 明确分离。
|
||||
- [x] `dever.lock` doctor 现在校验传递依赖闭包、环依赖和缺失依赖;ArtifactStore 在 Worker 使用前可验证目标、摘要和尺寸。
|
||||
- [x] 真实三生态 registry resolver、checked manifest 三 SDK、Python/JS 自动 Worker、Linux 不同 UID 的共享 artifact IPC 已接线并定向验收;当前证据见下方和生产化收口任务。
|
||||
- [x] Go managed compile/link 和 Dever Package 安装/传递 Lib 已实现并有定向 fixture 证据;具体完整链路与当前计数见生产化收口任务。
|
||||
- [x] 高级生态安装/Go sumdb已在2026-10-02完成Linux实现及真实第三方包定向验收。
|
||||
- [ ] 正式公开签名语言packs与其他平台发行尚未交付。缺少时明确失败,不回退到PATH、环境变量或宿主包管理器。当前Linux增强签名程序复验见生产化任务,历史fixture不替代新证据。
|
||||
|
||||
## 2026-09-29 收口复验
|
||||
|
||||
- `cargo check --offline --locked --workspace`、`external_libs` 6/6、CLI Lib 单测 4/4、Port Adapter Lib 请求定向 1/1 通过。
|
||||
- 本阶段已完成仓库内可安全验证的协议、lock、fixture resolver、artifact 校验、embedded resource 和 run/build preparation;真实 pip/npm/Go registry、受管 CPython/Node/Go runtime、正式三语言 SDK、Package 发布元数据和无宿主运行仍为发行资产阻塞。
|
||||
|
||||
## Integration Gate
|
||||
|
||||
2026-09-30 当前边界:Port/Adapter 16/16、协议 lifecycle 1/1、typed 三 SDK 宿主协议、Python/JS 默认 Worker 6/6、资源 9/9、Linux cache 14/14 与实际不同 UID 1/1 已通过。managed Node 已由 checked App CMD 编进独立 Native 程序;受管 Go Worker 已按锁编译并完成源码移除、清空环境的独立执行;Package 已实际完成安装→check/test/run/build→停止 daemon→独立运行。自有工具包不等于正式签名或无宿主发行;高级生态安装、daemon 编译和正式后端仍有未实现代码,不仅是“发行资产阻塞”。
|
||||
|
||||
三个子任务完成后,使用同一 Port 的 Dever/exec/Python/Node/Go 实现进行定向端到端验证,并证明目标环境没有系统 Python、Node、Go 时构建产物仍可运行。
|
||||
|
||||
## Rollback
|
||||
|
||||
外部 Adapter 是新语法且没有旧兼容面。若某子任务未通过,不启用对应生态或打包入口;现有纯 Dever Port/Adapter、run/build 与配置合同保持可用。
|
||||
@@ -0,0 +1,77 @@
|
||||
# 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
|
||||
|
||||
1. `09-29-external-lib-protocol`:语言合同、统一协议、通用 `exec` Worker 和生命周期。
|
||||
2. `09-29-external-lib-ecosystems`:`dever lib`、`dever.lock`、共享缓存及 pip/npm/go resolver 和 SDK。
|
||||
3. `09-29-external-lib-packaging`:`run/build` 自包含打包与 Dever Package 传递依赖。
|
||||
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"id": "external-libs",
|
||||
"name": "external-libs",
|
||||
"title": "Dever 外部 Lib 生态",
|
||||
"description": "让 Dever Package 通过 Port/Adapter 安全复用 PyPI、npm、Go Modules 及其它语言生态,并由统一 Lib 命令、协议和构建链管理",
|
||||
"status": "in_progress",
|
||||
"dev_type": null,
|
||||
"scope": null,
|
||||
"package": null,
|
||||
"priority": "P1",
|
||||
"creator": "Antigravity",
|
||||
"assignee": "Antigravity",
|
||||
"createdAt": "2026-09-29",
|
||||
"completedAt": null,
|
||||
"branch": null,
|
||||
"base_branch": "main",
|
||||
"worktree_path": null,
|
||||
"commit": null,
|
||||
"pr_url": null,
|
||||
"subtasks": [],
|
||||
"children": [
|
||||
"09-29-external-lib-protocol",
|
||||
"09-29-external-lib-ecosystems",
|
||||
"09-29-external-lib-packaging"
|
||||
],
|
||||
"parent": "09-20-production-application-language",
|
||||
"relatedFiles": [],
|
||||
"notes": "2026-10-02:协议/Worker、三生态高级解析构建、v5锁与收据、Package传递Lib、LLVM独立打包及Linux OS隔离已实施;原planning状态过时。官方simplejson/bufferutil/UUID构建及离线Worker通过。最终三生态签名安装、受管check/run/build及移除源码/机器目录后的无系统语言独立执行1/1通过755.81秒,Linux首装双项目双UID共享1/1通过231.51秒。正式公开和其他平台发行仍未完成。准确状态及日志统一见09-29-language-production-closure/implement.md。",
|
||||
"meta": {}
|
||||
}
|
||||
Reference in new issue
Block a user