把 dsh 全套基础能力打包成 profile 组合包,作为每个 profile 的第一层 patch,承载模型、工具、沙箱、权限、会话持久化等 60+ 基础行。
$ dsh plugin --profile web add github:whitelonng/dshcode/packages/bundle/baseRun the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial
入口包名:
@deepseek-ai/dsh-base,落地页 ID:whitelonng/dshcode/packages/bundle/base。下文统称"基础组合包"。
它是 dsh 出厂 profile 的"第一层 patch"——把模型、Agent、工具、沙箱、权限、会话持久化、遥测、subagent 等 60 多个基础插件一并注入到空 profile 的根上,相当于浏览器的出厂默认扩展集合;其他模式组合包和用户配置都在它之上叠加或按行覆盖。
$DSH_HOME/sessions)、SQLite 会话索引(默认内存模式、关闭内容搜索)、内存型 attachment 字节仓库、checkpoint 策略与 projection$DSH_HOME/.credentials.yaml + $DSH_HOME/settings.yaml,hot-reload)以及 OTLP 遥测挂载(默认关闭)src/index.ts 仅导出 {},没有运行时 API,所有行为由 cordis.patch.yml 描述@deepseek-ai/dsh-llm、@deepseek-ai/dsh-agent、@deepseek-ai/dsh-tools、@deepseek-ai/dsh-session-persistence-jsonl(任列 4 即可,详见 package.json:41-119)package.json#dsh.bundle.patch manifest 字段声明 patch 路径,profile 组合器解析加载,没有任何 Cordis 钩子或事件注册src/index.ts(仅声明 @module)、cordis.patch.yml(实质内容)、src/invariant.ts(一条空 invariant companion)每个出厂的 dsh profile(包括 headless、ACP、CLI、Web)都需要这一层作为开箱可用的能力底座;它不是给普通用户"按需启用"的扩展,而是所有上层 profile 拼装的前置条件。当用户想了解自己 profile 里那些默认能用、不能关的工具和默认值由谁决定时,看这一层的 patch 文件即可。
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 未单独声明(仓库未发布 < dsh-base 的下限) | 作为 dsh 同源 profile 组合包安装使用 |
| Node | ^22.19.0 || >=24.0.0 | 源自仓库根 package.json:8-10 的 engines 字段 |
| 平台 | macOS / Linux / Windows | 同一份 patch,bash 与 pwsh 工具栈按平台互斥挂载 |
| 原生模块 | 无 | 本包自身不引入原生模块,依赖闭包内某些 row 可能依赖 |
安装此包会自动引入 70+ 个 workspace 依赖(详见
package.json:41-119),包括 LLM、agent、工具、持久化、subagent、shell 等多个核心包。
dsh plugin --profile web add github:whitelonng/dshcode/packages/bundle/base
本包没有"用户态"配置项;它定义的 50+ 行 row config 是给后续 profile 覆盖使用的默认值。常见的可被外部环境变量覆盖的行:
| 行 / 环境变量 | 默认值 | 说明 |
|---|---|---|
sandbox-policy.mode(环境变量 DSH_PERMISSION_MODE) | workspace-write | 三档:read-only / workspace-write / danger-full-access |
approval.policy(环境变量同上) | ask(在 danger-full-access 下为 never) | 受 sandbox-policy 行同源取值驱动 |
session-telemetry-otel.mode(环境变量 DSH_TELEMETRY_MODE) | DISABLED | 设为 FULL / FEEDBACK_ONLY 开启 OTLP 上报 |
session-telemetry-otel.exporter.url(环境变量 DSH_TELEMETRY_OTLP_URL) | https://harness-telemetry.deepseeksvc.com/v1/logs | OTLP/HTTP 上报端点,可指向自建收集器 |
agent-default-model.provider / .model | deepseek-official / deepseek-v4-flash | 默认模型选择,可被 user profile 覆盖 |
session-query-sqlite.openAt | never | 全文搜索默认关闭,开启需覆盖为 first-search 或 startup,通常附带 path |
DSH_TELEMETRY_DISABLED只要非空(含'0'/'false')就完全关闭遥测;launcher 在启动时直接 disable 该 row。
Q: 这个组合包包含哪些能力?
A: 它汇集了 dsh 的全部"出厂自带"能力——LLM 适配器、Agent 主循环、bash 与 pwsh 工具、文件系统工具、subagent 派发与 fork、会话 JSONL 持久化、SQLite 会话索引、权限与沙箱策略、本地设置/凭据、OTLP 遥测、token 用量、压缩、计划模式、目标(goal)循环、Web 搜索等。
Q: 我可以编辑这个组合包吗?
A: 不需要也不建议。它的"配置"集中在同一份 cordis.patch.yml,由 profile 组合器在加载时挂入;你的覆盖应该写在自己 profile 的 cordis.patch.yml 里,按 row 的 id 整行覆盖即可。patch 的语义是"替换整行 config",没有深度合并。
Q: macOS / Linux 和 Windows 下行为有什么不同?
A: bash 与 pwsh 两套 shell 栈在同一份 patch 文件里互斥挂载。POSIX 上启用 bash-sandbox 与 tool-bash、禁用 pwsh 系列;Windows 上启用 pwsh 系列、禁用 bash 系列。沙箱、权限和 fs-sandbox 两边都生效,Windows 走 ACL 受限令牌 runner。
Q: 怎么开启遥测?
A: 出厂默认关闭。要开启需要把环境变量 DSH_TELEMETRY_MODE 设为 FULL 或 FEEDBACK_ONLY,并把 DSH_TELEMETRY_OTLP_URL 指向你的 OTLP/HTTP 收集器;导出记录会带上 $DSH_HOME/.anonymous-user-id 里的 UUID 作为 user.id。
Q: 默认是哪种权限模型?
A: 沙箱默认 workspace-write(写入限于工作区与本会话临时子目录),审批默认 ask。将环境变量 DSH_PERMISSION_MODE 设为 danger-full-access 可切到全权访问与免审批;设为 read-only 则只读。
Q: 默认能全文搜索会话历史吗?
A: 不能。session-query-sqlite 行默认 path: ':memory:' 且 openAt: 'never',全文搜索调用会返回 SESSION_QUERY_SEARCH_DISABLED;精确读取、标题与 lineage 仍可用。要启用需在 profile 覆盖里改成 first-search 或 startup 并提供持久化 path。
Q: 卸载它会发生什么?
A: 它是所有出厂 profile 的第一层 patch——把它从 dsh.profile.bundles 列表移除,整个 profile 会回到"仅剩用户自定义 row"的空状态,常用工具、模型、持久化都会消失。它不是面向普通用户的可选扩展,建议保留。
Q: 会话里的图片存在哪里?
A: 字节放在 attachment-local 行配置的本地目录(与 JSONL 会话日志分离)。会话日志里只保留内容寻址引用,由该 row 在每次请求时即时解析。
入门 — 因为它没有暴露给用户的可写配置面,普通用户不需要懂它;想自定义的话只需要往自己的 cordis.patch.yml 里追加整行覆盖即可。
README.md:21)workspace-write 把写入限制在工作区与本会话自己的 temp 子目录(<temp>\dsh-<hash>,受限子进程的 TMP/TEMP 被改写),read-only 不授予任何临时目录写入(README.md:22)pwsh-sandbox/tool-pwsh 并重新启用 bash-sandbox/tool-bash,两边都注册同一个 bash 服务,单独开一边会让加载失败session-query-sqlite 行 openAt: never,未在 profile 覆盖中开启前 SQL 不会打开(cordis.patch.yml:117-122)session-telemetry-otel.mode 默认 DISABLED,未设 DSH_TELEMETRY_MODE 不会上报(cordis.patch.yml:148-161)