feat: publish Dever core with project scaffolding and versioned AI skills

This commit is contained in:
Antigravity committed 2026-10-04 13:37:30 +00:00
1 parent 70fa73cdc2
commit ac458ffa7f
960 files changed
+221319 -1163

No files matched your search

@@ -0,0 +1,3 @@
{"file":".trellis/spec/backend/quality-guidelines.md","reason":"定向验证、真实执行和资源所有权"}
{"file":".trellis/spec/backend/compiler-contracts.md","reason":"命令合同不得扩散到API和Worker"}
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"打包闭包与沙箱完整性"}
@@ -0,0 +1,36 @@
# 普通二进制调用设计
## 源码合同
Adapter:`external command "bin/tool" { allow file }`,路径沿用领域相对资源路径,allow 沿用现有能力名。不接受 setting/lib;部署配置和授权沿用已有 adapter 节点。
每个 command Adapter 对应一个只有一个操作的 Port,操作名按业务自定:`execute(args: List<Text>, stdin: Bytes?) (output: dever.process.Output) fails dever.process.Error`。第二个 stdin 参数允许整项省略(仅 args),传 null 表示立即关闭 stdin。固定字段名防止增加映射 DSL。标准 Output 是 `{code: Int, stdout: Bytes, stderr: Bytes}`;标准 Error 是 `error Failed(message: Text)`,满足现有 Port failure 合同。命令非零退出按沙箱传播的退出码返回,不猜测 signal;启动/超时/超限继续作为源位置 runtime fault。
## 编译器与进程边界
新增 ExternalEcosystem::Command,保留现有 external 合成函数、Port fake、effect 和 suspends 链路。共享 wire 增加仅 Command policy 可用的 Bytes/base64;API/Job/真实 Worker 原有 wire policy 不变。两个后端仍用同一 external start/call/reply ABI,只给 Bytes wire 增加最小桥接函数。
HIR 共用合同构造实现,但 external_worker_contracts 只返回 exec/pip/npm/go,external_command_contracts 返回 command,避免 Lib lock/resolver 散落 command 特判。command 不需要 dever.lock;有真实生态依赖的同项目仍保持原 lock 行为。
## 运行时
复用 invocation Session、Managed、registry、bounded requests 和 structured Scope。command supervisor 启动不执行二进制或协议握手;收到每个请求才启动一个独立沙箱进程,并发写 stdin、读 stdout/stderr 和等待退出。不追加 --dever-component,不重放命令。超时、调用取消和关闭均 kill/wait,再返回结果;空闲 supervisor 可继续服务后续请求,不为正常多次调用套用 Worker crash restart 次数。
复用 verified extraction、launch manifest owner 和 sandbox Launch。内部资源 argv 继续映射,动态调用 argv 作为普通数据追加,不当宿主路径重写。保留只读程序树、grant、namespace/seccomp 与空环境。沙箱 PID namespace 负责后代收束,测试必须观察真实后代清理。
限额来自 config/setting.json 的 `adapter.<port>.command`:timeout_ms(默认30000,最大3600000)、output_limit(默认1048576,最大8388608,两路输出合计)。argv 总量最多65536字节,stdin最多8388608字节;拒绝NUL。base64膨胀及JSON包装不得超过已有16MiB wire上限。Worker Adapter 不使用这组命令限额。
## 离线打包
CLI 专门 command packager 接受一个 ELF 文件及同目录 lib/ 中的普通库文件;只采集所属项目/Package 的显式资源,不扫描宿主或调用 ldd。静态 ELF 可直接运行。动态 ELF 复用签名 sandbox GNU loader/OS库,递归解析 DT_NEEDED、验证目标、SONAME和版本需求,私有库按随附 lib/ 查找,缺少依赖构建期报错。共享已有 Python native ELF 闭包校验算法,不复制第三套解析器。使用固定私有 loader 参数关闭系统 cache,库搜索受打包树与sandbox库限制。
资源沿用SHA、私有原子提取、缓存/签名和Package归属验证;每次启动重新校验。具体 launch manifest 字段按既有owner扩展,不能从运行配置接受任意可执行路径。
## 改动边界
- core syntax/parser/check/ports/hir/wire/native/llvm,library/dever/process.dever,以及 wire runtime/bridge:一条类型与调用合同。
- runtime component/command/external/config 与 sandbox:一次调用的进程和资源生命周期。
- CLI workers command/ELF依赖、libs资源准备:离线可执行资源闭包。
- 根test、LANGUAGE/README和已有规范:真实证据和可用示例。
不增加通用执行注册中心、新依赖、第二套SDK/JSON引擎,不改CMS业务。回滚按上述拥有者整体撤销本任务差异,保留开始前源码备份与用户已有改动。
@@ -0,0 +1,4 @@
{"file":".trellis/spec/backend/index.md","reason":"Rust语言仓库开发边界"}
{"file":".trellis/spec/backend/compiler-contracts.md","reason":"Port/Adapter和两后端的类型与失败合同"}
{"file":".trellis/spec/backend/toolchain-and-library.md","reason":"外部资源、沙箱、目标与生命周期"}
{"file":".trellis/spec/backend/error-handling.md","reason":"源位置错误和资源清理"}
@@ -0,0 +1,56 @@
# 实施与验证
## 执行顺序
1. [x] 读取规范、调查编译/运行/沙箱/打包,固定用户已确认范围和合同。
2. [x] 备份当前源码;并行实施编译器合同及runtime进程执行,主线程实现CLI资源打包。
3. [x] 串行运行必要offline Cargo检查和定向测试;修复真实失败。
4. [x] 用独立ELF与真实Dever源码验证check/run/build、移除源码运行、动态库、取消和完整性;验证ARM目标。
5. [x] 独立Trellis复核、清理本任务冗余、更新语言规范及验证证据,归档;不提交Git。
## 所有权
- 编译代理:core、library/dever/process.dever、runtime/wire.rs、bridge ffi/runtime.h、对应编译/codec测试。
- runtime代理:runtime component/command/external/config、sandbox及进程测试,不改wire.rs和CLI。
- 主代理:CLI workers/libs/ELF闭包/Package必要集成及测试、任务/文档、全部Cargo和重资源验证。
代理不并行运行Cargo,不覆盖其他代理或用户改动。涉及共同合同先沟通。
## 验证原则
仅本任务所需定向检查,无全量测试/业务服务/长测;提前说明自有沙箱进程测试。先check与轻量测试,后更新实际runtime ABI再运行真实源码,不能用旧archive验证新codec。开始可用磁盘约3.3GiB,复用现有目标目录,串行构建。
预期目标:port_adapter、command专用runtime/CLI测试、external_workers/resources、llvm_external_source中command案例;原Worker回归按实际共享代码影响选择。fmt/clippy只覆盖改动所属目标。错误、跳过和未运行独立记录。
## 最终证据
- 改动前备份:`target/external-command-before.lBL9wU/source.tar.gz`。
- CLI/core/runtime 初次 offline check 已通过;command 编译/codec/format/fake 5项通过。
- external_workers 当前13项通过,10项需特定资产的旧真实生态测试未运行。command 打包4项通过,后续新增越界 RPATH 回归需复验。
- runtime 首轮3过5失败为未优化debug哈希耗时超过fixture启动等待;作者构建为sha2/miniz_oxide/flate2指定opt-level=3,测试等待与命令deadline分离。随后即时文件锁断言揭示真实namespace清理竞态:管道EOF早于内核后代回收。最终改为info-fd + block-fd门禁,在放行guard前pin namespace pidfd并核验PPid,取消等待pidfd readiness后回收wrapper。9/9定向测试通过(17.86s),包括启动错误、无FD泄露、非零1/127、输入输出、限额、取消/超时/root close/queued/explicit shutdown。
- 独立复核发现启动失败与非零退出混淆、RPATH越出程序树两项问题;已修复,复核确认无剩余阻塞。新增RPATH回归4/4及共用Python ELF闭包2/2通过。
- 旧 Port 原生测试先因测试作者 rustc 路径缺失中断;指定作者工具路径后相关测试运行,期间新增sandbox直接依赖导致 --locked 拒绝。Cargo offline check已增量更新锁,不升级第三方包;最终21/21复验已关闭这些失败。
- 新runtime ABI archive已离线重建(runtime-api/external/sqlite/postgres,3m25s),真实LLVM/CLI验收使用该新档案;未连接任何数据库。改动Rust格式检查及C fixture语法检查通过。
- LLVM command对象+真实调用2/2通过(102.33s);六目标对象生成,预热+64轮每轮3次普通程序调用,二进制/EOF/退出7和allocation ledger全通过。初次60s fixture预算仅完成42轮,给command probe单独180s预算后保留全部65轮与相同断言;原Worker预算不变。
- native_runtime_link 的Bytes wire C ABI验收1/1通过(7.18s)。
- signed_cli_runs_and_packages_ordinary_command_with_private_library 1/1通过(172.02s):当前核心和新ABI、真实C动态工具+私有.so、check/run/build、无Lib锁、Package锁定资源、删除项目/作者/机器目录后两种产物独立运行、篡改.so拒绝。所有daemon/程序均为自有临时fixture,未安装全局命令。
- 最终旧Worker生命周期1/1、external_resources 8/8通过;1项旧Rust bootstrap打包用例维持ignored,本次已有新的真实LLVM/签名CLI独立打包证据。
- 最终Port/Adapter(包含普通/fake实际原生执行)21/21通过(103.41s),此前作者路径/锁文件导致的失败已全部关闭。
- Linux ARM64 runtime-api/runtime-external桥接库、runtime、sandbox/guard 交叉cargo check通过(65s);结合六目标LLVM对象生成与CLI跨目标打包/拒绝错架构验证。未重发四个ARM发行profile、未运行ARM实机/虚拟机验收,不能将这些检查表述为ARM执行通过。
- 所有改动所属库、guard及6个相关测试target的clippy `-D warnings`通过(45.21s);Rust定向fmt和C语法检查通过。git diff --check通过但本仓库核心文件为untracked,实际差异还通过改动前tar对比、逐文件检查与独立复核覆盖。
## 最终检查入口
Cargo均为offline、单并发,不使用全量测试。作者工具路径仅影响构建/验证进程,未加入应用环境配置。作者测试使用`profile.dev.package.{sha2,miniz_oxide,flate2}.opt-level=3`减少大量重复资源校验耗时。
- `dever-tests --features external --test port_adapter`:21通过。
- `dever-tests --features external --test external_command`:9通过。
- `dever-tests --features external --test external_component --test external_resources`:1+8通过,1旧bootstrap用例ignored。
- `dever-cli --test external_workers`:13通过、10个旧真实生态fixture ignored;最终command过滤4通过。
- `dever-cli --test external_libs wheel_tests::native_`:2通过。
- `dever-backend-bridge --features embedded,runtime-external --test llvm_external_source command_ -- --include-ignored`:2通过。
- `dever-backend-bridge --features embedded,runtime-external --test native_runtime_link wire_codecs_validate_slots_before_callback_and_release_partial_values -- --ignored --exact`:1通过。
- `dever-cli --test native_release signed_cli_runs_and_packages_ordinary_command_with_private_library -- --ignored`:1通过。
- ARM交叉check使用现有`target/arm64-cross`作者sysroot/工具,profile runtime-pack,target aarch64-unknown-linux-gnu;检查sandbox和bridge runtime-api/runtime-external。
未运行:全量测试、长压测、真实数据库、ARM目标执行及Windows;未替换全局安装或修改主机策略。当前无已知本任务阻塞。原有两篇tracked文档删除及其他既存任务保持原状。
@@ -0,0 +1,33 @@
# Linux 普通二进制调用
## Goal
在 Port/Adapter 下直接执行现成 Linux 二进制,支持参数、标准输入输出、退出状态、超时取消及独立打包
## 已确认范围
用户已在上一轮审阅普通命令调用、Port/Adapter、参数数组、可选标准输入、两路输出、退出码、超时取消、二进制与动态库打包、Linux x86_64/ARM64、无 shell/env 的方案,并批准创建任务、规划和实施。本任务不再次请求相同授权。
## 需求
- R1:直接调用现成 Linux ELF,无需程序实现 Dever 协议或用户编写其他语言包装;Port/Adapter 保留唯一外部调用边界。
- R2:参数按数组原样传递,标准输入可省略;输出不丢失非 UTF-8 字节,正常非零退出码属于结果。
- R3:启动失败、超时、取消、输出超限明确处理;每次调用均回收自有进程及沙箱后代,不自动重试命令。
- R4:run/build 离线准备并嵌入程序和显式随附的必要动态库;检查目标架构、依赖闭包和完整性,部署不依赖源码/机器缓存/宿主语言工具。
- R5:继续使用 config/setting.json 管理部署文件授权和调用限额,不添加环境变量或 PATH/shell 查找。复用现有沙箱,不修改宿主策略。
- R6:保持现有 exec/pip/npm/go Worker 合同;普通 Dever 测试继续 Port fake,不执行真实命令。兼容 Package 资源与 Markdown 源码。
## 验收
- [x] 编译检查并格式化合法 command Adapter;拒绝错误 Port 签名、额外操作、setting/lib 和非法路径;其他 wire 边界仍拒绝 Bytes。
- [x] 真实无协议 ELF 收到空格、引号、shell 元字符和绝对沙箱路径原文;stdin EOF、二进制输入输出、两路并发大输出、正常非零退出正确。
- [x] 超时/调用取消/根关闭/输出超限均有界完成并回收沙箱进程树;后续调用仍可执行,无自动重放。
- [x] 打包拒绝错架构、缺库、错误 SONAME/ABI、越界路径和篡改;完整动态程序在移除原始源码后运行。
- [x] 真实 Dever check/run/build 和独立产物覆盖完整路径;Package 资源与现有 Worker 定向回归通过。
- [x] Linux ARM64 构建与目标校验覆盖;目标运行证据单独报告,不能由 ELF 标签推导运行通过。
ARM64本次证据为Rust交叉检查、LLVM目标对象生成及打包目标校验;实际普通命令与独立产物运行证据来自Linux x86_64。完整验证命令、失败修复及未运行项见implement.md。
## 非目标
Windows/macOS、FFI、shell/管道语法、后台守护进程/交互式终端、隐式下载或宿主库扫描、全量测试和长压测。
@@ -0,0 +1,26 @@
{
"id": "external-command",
"name": "external-command",
"title": "Linux 普通二进制调用",
"description": "在 Port/Adapter 下直接执行现成 Linux 二进制,支持参数、标准输入输出、退出状态、超时取消及独立打包",
"status": "completed",
"dev_type": null,
"scope": "external-command",
"package": null,
"priority": "P2",
"creator": "Antigravity",
"assignee": "Antigravity",
"createdAt": "2026-10-04",
"completedAt": "2026-10-04",
"branch": "main",
"base_branch": "main",
"worktree_path": null,
"commit": null,
"pr_url": null,
"subtasks": [],
"children": [],
"parent": null,
"relatedFiles": [],
"notes": "Linux普通二进制调用已实现并完成定向及真实打包验收;ARM证据为交叉检查/对象生成/目标校验,不含目标执行。备份与完整证据见implement.md。不提交Git、不替换全局安装。",
"meta": {}
}