Repository navigation
feat: stage principal environment, harness state and data-defined toolchains - #73
Merged
Merged
Conversation
- Hub:/api/node-env 读写自己的(工作区所有者可写 svc),只能用于本机 Node 或自己配对的 Node;拒绝 Steve 自己的键 - 绑定时把运行主体在这台 Node 上的变量随 open_session 下发;Node 侧再校验一遍,PATH_PREPEND 加到 PATH 前 - 测试:store/Node/Hub 单元、node_runtime、端到端(API 保存后事项的 harness 拿到变量) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 只在运行主体就是这台 Node 的主人、且是工作区唯一成员时注入(共享会话里其他成员可借会话读出;运行仍用 Node 主人的登录) - 拒绝会注入代码或控制 harness 的键(NODE_*、BASH_ENV、ENV、CLAUDE_*、CODEX_*、ANTHROPIC_*、OPENAI_* 等) - 在绑定事务内、记录主体之后读取;会话重新打开时按当时的值重算 - OpenSession / AdapterProperties 增加每主体 harness 目录的字段(下一提交启用) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- adapter 声明 state(变量、默认位置、主人可导入的文件):claude-code 用 CLAUDE_CONFIG_DIR,codex 用 CODEX_HOME - Hub 绑定时按(工作区、主体、Bot、harness)给出目录并记到 runtime_sessions.state_dir;主体是 Node 主人时导入主人自己的设置与登录 - Node 在 state/ 下建 0700 目录,只拒收不规整的路径;测试覆盖导入/不导入/越界 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 沙箱:Node 的 state/ 整体拒读写,每个会话只放回自己的目录 - 建目录逐级检查不跟随链接,导入用 create_new;Codex 不再复制登录(副本刷新会挤掉主人的登录) - 从旧运行器迁来的会话不换目录(保住续接) - node_env:本机 Node 只在 Hub 只有一个用户时注入(同一系统用户的进程能互相读环境变量);延后发送的打开命令按当时的值重算 - 发布说明写明 setuid 程序(ps 等)在沙箱里不能运行 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 内置 builtin.toml:detect/key/lockfiles/dirs(item/seed/person、env+value 或 in_tree、disposable)/env/options(cargo light 默认开) - steve-core:ST-45 的缓存名单与 lane 的锁文件名单改读数据(行为不变,有测试锁定);守卫测试保证磁盘/lane/Node 工作区代码里不出现具体工具名 - Node:STEVE_TOOLCHAINS=on 时按会话目录检测,输出进 .steve/build/<id>(gitignore),共享缓存进 cache/<工作区>/<主体>/<id> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- builtin.toml 移到 src/(原 data/ 被 .gitignore 忽略,未进提交) - 只移真正的缓存:不再移 CARGO_HOME、GRADLE_USER_HOME、GOPATH、MIX/HEX、PUB_CACHE、CP_HOME_DIR、CCACHE_DIR、yarn/pnpm 存储、uv 环境、BUNDLE_PATH、NuGet 包目录;去掉覆盖用户设置的固定变量(GOFLAGS、MAVEN_ARGS、CODE_SIGNING_ALLOWED 等) - 个人缓存在 Node 的 cache/ 下,沙箱里整体拒读写,每个运行只放回自己的;没有运行主体时不设置;目录逐级检查不跟随链接 - 工具链变量排在 Steve 自己的变量之前,且不能设置 Steve 保留的键 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
LPX-E5BD8
marked this pull request as ready for review
November 7, 2026 15:29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
现有 Node 运行无法单独保存用户在节点上的环境变量,harness 状态和工具缓存也仍沿用节点主人的目录。本阶段增加受限的 node_env API,以及默认关闭的主体 harness 目录和工具链目录开关;工具链定义改为数据,并增加 Rust/Web 的 harness 名称分支守卫。
并发首次启动时,主体目录和缓存目录现在会安全复用并发创建的真实目录;配置先完整写入私有临时文件,再原子、不覆盖地发布,避免启动失败、读到半文件或丢失缓存重定向。新增回归覆盖 12 线程并发、完整内容、权限、已有文件与链接保留。
范围与限制:这是 ST-59 的阶段集成,并非整项或 P1 隔离的最终交付。node_env 仅注入节点所有者独占工作空间/节点的运行,值目前明文保存于数据库和运行记录,vault 引用及编辑 UI 尚未实现。主体 state 和工具链开关默认关闭;不复制 OAuth/Codex 登录。当前 Codex 保留自身沙箱和审批,主体目录与缓存重定向不适用于它;真实 HOME 和同用户进程隔离尚未实现。工具链启用后,其重定向/构建变量会覆盖同名环境变量,其余配置保留。
最初基于主线 986c268 集成,现已普通 merge 更新到主线 5185376(本次验证 head f0fb4ee)。接入固定源提交 019a1e62、fe9fa6e8、ba656419、045980e9、c1761e41、7e50f239、58c805f5;保留已发布 migration 053,无新迁移。已消费的旧发布片段保留删除,新增限制单列片段。另补发布说明准确性修正和并发初始化修复。
验证已完成:
本次主线集成 head f0fb4ee 的 Linux CI 通过:全 workspace nextest 3150/3150 首次通过、25 skipped,无 retry/flaky;3 项既有 release_outcome 夹具仍报告进程 LEAK(健康检查回滚、重启后脚本丢失、30 分钟超时),已明确记录,未当作无泄漏。doctests 2 passed、11 ignored、0 failed。CI:https://github.com/Infranite/steve/actions/runs/42385383234。
ACP / Node API / Node / toolchains / vault 受影响 crate 测试:314 passed,1 项既有 ignored;并发修复后 Node lib 重跑 63/63。
Core lib:641 passed,3 项既有 ignored;Hub wire:121/121。
Hub node_env_api、node_runtime、harness_parity、node_boundary:136/136,修复后重跑通过。
Web:103/103;Hub/Web TypeScript 检查、Web 生产构建通过。
workspace 全 targets Clippy(-D warnings)、fmt、diff、strict public boundary、release lint 通过;public-boundary 与 cut-release 脚本测试通过。
独立静态安全复核发现的首次并发初始化 P2 已修复,复核无新阻塞。
默认 ignored 的真实模型/磁盘回收用例未执行,未做生产部署和开关启用验收。主体 state 与工具链开关仍默认关闭;本阶段不改变执行权限,不据此关闭 ST-59 或解除 ST-60 的完整主体隔离前置。