description: "本次运行环境的不可变快照,记住每个值来自哪一层;供必须以不信任压平 process.env 的方式解析面向用户值的包使用。"
English | 中文
使用 @deepseek-ai/dsh-launch-environment 解析启动时的环境值,无需信任压平的 process.env。它会冻结继承的进程值、调用目录的 .env 和 Harness 主目录的 .env,再按固定可信顺序返回胜出的值及其来源。调用方可以在敏感查找中排除某些层;无论之后顺序如何变化,被省略的层都不可达。快照不可变,但每一层仍会被复制到 process.env,因此它不隔离子进程。请把它作为库导入;不能从 cordis.yml 挂载它。
当各层并非同等可信时,通过快照而非 process.env 解析面向用户的值——例如调用方绝不能从项目目录取得的凭据覆盖值。
import { launchEnvironmentOf } from '@deepseek-ai/dsh-launch-environment'
declare const ctx: import('@deepseek-ai/cordis').Context
const endpoint = launchEnvironmentOf(ctx).get('DEEPSEEK_BASE_URL')?.value
get(name) 按可信度从高到低搜索所有层。getFrom(name, sources) 只搜索指定的层,不改变这一可信顺序——绝不能接受某一层的调用方不把它列进去,因此后续任何重新排序都无法让它回来。
launchedThroughSsh(snapshot) 仅在继承的进程层中存在非空 SSH_CONNECTION 或 SSH_TTY 时返回 true。Web 浏览器唤起、自适应目录选择器与 Open In 共用此判断;项目与用户 .env 中的值不作为 SSH 会话的依据。
| 层 | 它是什么 |
|---|---|
| 继承的进程环境 | 启动 shell、CI 任务或容器传入的内容——本次运行的明确意图 |
<invocation cwd>/.env |
harness 被启动于其中的项目;产品信任它配置自己的 agent(智能体) |
$DSH_HOME/.env |
用户自己的机器级默认值 |
变量名按平台自身的规则匹配:POSIX 上精确匹配,Windows 上不区分大小写。在 Windows 上做大小写敏感的查找会选错层——shell 里的 deepseek_api_key 与项目 .env 里的 DEEPSEEK_API_KEY 对操作系统而言是同一个变量。
当产品 CLI(命令行界面)引导了这棵树时,launchEnvironmentOf(ctx) 返回启动器的快照;否则返回只含继承环境的那一层。该回退并不削弱规则:SDK 宿主或裸 cordis.yml 从未发现过任何文件,因此它拥有的一切就是它被启动时的环境。
当你需要构建快照的启动器或通过快照解析的消费方时,阅读以下页面。
ctx.launchEnvironment 的启动器。这些限制说明快照何时不是安全边界。它们是当前包约束,不是任务积压。
process.env,因此项目里的普通变量会按 dsh-subprocess 的清洗规则抵达子进程;产品启动器的 .env 约定 会在物化之前拒绝 bootstrap 变量。