2026-08-02 14:17:46 +08:00
# @deepseek-ai/dsh-bash-env
[English ](README.md ) | 中文
工具无关的 shell 环境插件:拥有 `ctx.bashEnv` 注册表,管理受信任的、每次执行收集的 `DSH_*` 变量,供模型可见的 shell 工具(`dsh-tool-bash` 、`dsh-tool-pwsh` )收集进每次 shell 调用的环境。内置 shell 事实(`DSH_HOME` 、`DSH_SHELL=1` 、`DSH_SESSION_ID` )归注册表自身所有;其他插件可以注册额外的可枚举事实,注册随插件纤维(fiber)释放,重复所有权或未声明的运行时键会响亮失败。
包根导出 Cordis 插件契约(`name` 、`inject` 、`Config` 、`apply` )以及 `BashEnvRegistry` 服务类及其 contributor 类型;消费者在加载本插件后使用 `ctx.bashEnv` 。
## Config
``` yaml
- id : bash-env
name : '@deepseek-ai/dsh-bash-env'
config :
dshHome: C:\Users\me\.dsh # default : $DSH_HOME, then ~/.dsh
```
## Managed environment
2026-08-05 12:46:38 +08:00
每次前台与后台模型 shell 调用都会收到一份新收集的受信任 `DSH_*` 环境。`DSH_HOME` 是由 [`@deepseek-ai/dsh-paths` ](../../util/paths/README.md ) 解析的 Harness 主目录绝对路径(`dshHome` 配置,然后环境变量 `$DSH_HOME` ,然后 `~/.dsh` ),`DSH_SHELL=1` 标识受管理的子进程。带 agent(智能体)的调用额外收到 `DSH_SESSION_ID=agent.session.header.id` ;当活动的持久化 seam 定位到 JSONL 工件时,它们还会收到 `DSH_SESSION_JSONL=<绝对目标路径>` 。JSONL 路径只是位置提示:首次 flush 之前它可能不存在,也不一定包含当前缓冲中的轮次,并且它不是授权凭据。
2026-08-02 14:17:46 +08:00
`ctx.bashEnv` 负责收集。其他插件可以注册一个受 effect 作用域约束的 contributor,带有稳定名称、已声明的键/描述以及 `resolve(execution: ToolExecution)` ;重复所有权与未声明的运行时键会响亮失败,而 `list()` 只枚举声明、不执行 provider。Harness 内置键保留 `DSH_HOME` 、`DSH_SHELL` 与 `DSH_SESSION_ID` ;本插件的持久化翻译器通过读取与后端无关的 `sessionPersistence.locate()` seam 拥有 `DSH_SESSION_JSONL` 。
``` ts
import type { Context } from 'cordis'
import type { } from '@deepseek-ai/dsh-bash-env'
export const inject = [ 'bashEnv' ]
export function apply ( ctx : Context ) : void {
ctx . bashEnv . register ( {
name : 'deployment-region' ,
variables : { DSH_DEPLOYMENT_REGION : { description : 'Current deployment region.' } } ,
resolve : execution = > execution . agent === undefined ? { } : { DSH_DEPLOYMENT_REGION : 'cn-north' } ,
} )
}
```
覆盖层根据当前 `ToolExecution` 计算,并通过专用的 `BashExecRequest.dshEnv` 通道传递。本地执行器在合并该快照前移除所有继承的 `DSH_*` ,因此嵌套 harness 与并发的父子 agent 无法泄漏过期的身份。`process.env` 永不被修改。shell 工具的描述只教授通用的 `$DSH_*` 约定,而不是点名持久化相关的变量或添加常驻的 system-prompt 段落。
## Model Experience
Indirectly, through the shell tools (`dsh-tool-bash` , `dsh-tool-pwsh` ), which collect this registry's managed `DSH_*` snapshot into every shell-tool call.
#### KV Cache effect
No direct invalidation; the named consumers own any request-prefix changes.
## Known Limitations and Deferred Work
- **`list()` 只枚举 contributor 声明的变量** — 注册表自有的内置键(`DSH_HOME` 、`DSH_SHELL` 、`DSH_SESSION_ID` )不包含在内,因此诊断、prompt 或 UI 代码不得把 `list()` 当作完整的环境目录。