# Deepseek-Harness-Desktop

> dsh shared core profile bundle: inserts basic plugin rows including model adapter, tool, persistence, sandbox, and telemetry at the empty profile root, serving as the first layer for all profiles

## Metadata

- Author: [@ChisaAlter](https://github.com/ChisaAlter)
- Repo: <https://github.com/ChisaAlter/Deepseek-Harness-Desktop.git>
- GitHub: [ChisaAlter/Deepseek-Harness-Desktop](https://github.com/ChisaAlter/Deepseek-Harness-Desktop)
- Stars: 127
- Language: JavaScript
- License: [MIT](https://spdx.org/licenses/MIT.html)
- Topics: `deepseek`, `deepseek-harness`, `dsh-plugin`
- Forks: 9
- Open Issues: 0
- Last push: 2026-08-20T11:02:01.000Z
- Added: 2026-08-20T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:ChisaAlter/Deepseek-Harness-Desktop/vendor/deepseek-harness/packages/bundle/base
```

## Wiki

> 本文档对应 vendor 仓中 `vendor/deepseek-harness/packages/bundle/base` 子路径，是落地页 `/plugins/{owner}/{repo}` 中**插件百科**模块的内容来源。

## 一句话定位
`@deepseek-ai/dsh-base` 是 DSH 的共享核心 profile 组合包：在空 profile 根上一次性插入约 75 行基础插件，覆盖模型适配、工具、持久化、沙盒策略、设置/凭据、遥测等所有 profile 共享的部分，作为任何 profile 加载的第一层。

## 核心能力
- 在空 profile 根上注册模型适配、Agent 会话、Typert 类型注册与 RPC 网关、默认模型选择等核心服务
- 启用工具目录：文件读写、代码编辑、子代理调用、计划模式、Todo、目标、Web 搜索等面向模型的工具
- 挂载本地化数据平面：JSONL 会话持久化、SQLite 会话索引（默认内存、按需开启）、本地附件、凭据与设置文件
- 安装默认沙盒与权限策略：文件效果策略、bash/pwsh shell 栈（按平台自动二选一）、审批与权限预设
- 注册宿主级子代理与工作流能力：进程内 spawn/fork 子代理、worker-thread 工作流执行
- 配置基础遥测与会话检查点：默认关闭的 OTLP 日志上送、按模型请求的检查点持久化

## 技术实现
- **语言**: TypeScript（ESM，src/index.ts 仅 `export {}`，无运行时 API；包内代码只用于加载 invariant 配套）
- **关键依赖**: `@deepseek-ai/cordis`（peer，宿主运行时）、`@deepseek-ai/dsh-llm`（模型能力面）、`@deepseek-ai/dsh-session`（会话核心）、`@deepseek-ai/dsh-sandbox-local`（沙箱）；完整列表见 `dependencies`（约 81 个工作区包）
- **架构模式**: 组合包（profile bundle）—— 包内 `cordis.patch.yml` 通过 manifest 字段 `dsh.bundle.patch` 暴露给 profile 组合器，组合器读取并按行插入；不是注册一个 Service 类，而是插入一个 patch 列表
- **入口文件**: `src/index.ts`（无运行时导出）+ `src/invariant.ts`（空实现，仅注册包名以满足 invariant 配套规则）+ 实质载荷 `cordis.patch.yml`

## 适用场景
任何要在自己机器上跑 DSH agent 的用户，都会在第一步遇到这个 bundle：它是 `--profile web`、`--profile headless` 等所有 profile 的公共地基。当用户希望在 DSH 中获得开箱即用的 DeepSeek 模型调用、本地会话存档、按平台自动选择 bash/pwsh、默认文件沙箱保护等能力，而不需要再为每个 profile 重复拼装这些基础组件时，把它装进 profile 即可。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 0.1.0-rc.6+ | 同名工作区包 `@deepseek-ai/cordis` 与 `@deepseek-ai/dsh-invariants` 需在宿主中可用；与上游 `0.1.0-rc.7` 同周期发布 |
| Node | >=22.19.0 | 来自上游 monorepo 的 `engines.node`：`^22.19.0 \|\| >=24.0.0` |
| 平台 | macOS / Windows / Linux | 同一份 patch 文件跨平台工作；shell 栈按 `process.platform` 自动启用 bash（POSIX）或 pwsh（Windows），不依赖平台分支 patch |
| 原生模块 | 无 | 该包本身无原生依赖；下层 `@deepseek-ai/dsh-sandbox-local` 在 Windows 上挂载 `@deepseek-ai/dsh-sandbox-windows-acl`，是组合行为而非本包声明 |

## 安装方式
```bash
dsh plugin --profile web add github:ChisaAlter/Deepseek-Harness-Desktop/vendor/deepseek-harness/packages/bundle/base
```

## 配置项
本 bundle 本身**没有面向用户暴露的独立 config**。它在 `cordis.patch.yml` 中给下游约 75 个插件行写入了默认 `config`，这是 profile 组合器读取的静态声明，不通过 `dsh` 命令行或 settings 文件直接覆盖。若要改这些行的值，请在更上层的 profile `cordis.patch.yml` 或 bundle 层按 `id` 整体替换该行。下面列出 patch 中设置的关键默认值（仅供查阅，不是用户配置入口）：

| 默认值所属行 | 默认值 | 含义（人话） |
|---|---|---|
| `agent-default-model.provider` | `deepseek-official` | 默认模型提供方 |
| `agent-default-model.model` | `deepseek-v4-flash` | 默认模型 ID |
| `session-title.fallbackMaxWords` | `5` | 会话标题回退词数上限 |
| `session-title-llm.timeoutMs` | `60000` | LLM 生成标题超时 |
| `session-persistence-jsonl.root` | `dshHomePath('sessions')` | JSONL 会话日志根目录 |
| `session-query-sqlite.openAt` | `never` | 全文本搜索默认关闭；SQLite 不打开，键值精确读与会话谱系查询仍可用 |
| `session-telemetry-otel.mode` | `process.env.DSH_TELEMETRY_MODE \|\| 'DISABLED'` | 遥测模式（FULL / FEEDBACK_ONLY / DISABLED） |
| `sandbox-policy.mode` | `process.env.DSH_PERMISSION_MODE ?? 'workspace-write'` | 默认文件沙箱模式（仅写工作区） |
| `bash-sandbox.disabled` | `process.platform === 'win32'` | bash 沙箱在 Windows 上关闭 |
| `pwsh-sandbox.disabled` | `process.platform !== 'win32'` | pwsh 沙箱在非 Windows 上关闭 |
| `approval.policy` | 跟随 DSH_PERMISSION_MODE，danger-full-access 时设为 never，否则 ask | 用户审批默认行为 |
| `permission.presets` | read-only / workspace-write / danger-full-access | 权限预设集合 |
| `tool-web.fetch` | `false` | 关闭模型驱动的 Web 抓取（保留搜索） |
| `tool-web.searchTimeoutMs` | `60000` | DeepSeek 搜索超时 |

## 常见问题

**Q: 装上这个 bundle 之后是否会自动获得 DeepSeek 联网搜索能力？**

A: 是。patch 注册了 DeepSeek 官方搜索路由，复用 Models 页管理的同一个 API Key，超时 60 秒；但不提供 Web 抓取（`tool-web.fetch` 默认关闭）。

**Q: Windows 上跑这个 bundle 需要额外装什么吗？**

A: 不需要。bash 与 pwsh 两套 shell 栈在同一份 patch 内按平台互斥挂载，Windows 自动启用 pwsh 沙箱与 pwsh 工具。如果你更希望直接执行不受沙盒约束的本地 PowerShell，需在自己的 `cordis.patch.yml` 中完整覆盖：禁用 pwsh 行并重新启用 bash 行（两者注册同一个 `bash` 服务，配方不全会在加载时报错）。

**Q: 默认是否会上送遥测数据？**

A: 不上送。`session-telemetry-otel` 默认 `mode: 'DISABLED'`。要开启需设置环境变量 `DSH_TELEMETRY_MODE=FULL` 或 `FEEDBACK_ONLY`，端点用 `DSH_TELEMETRY_OTLP_URL` 覆盖；非空的 `DSH_TELEMETRY_DISABLED` 也会反向强制关闭。

**Q: 我想换默认模型，应该改这个 bundle 的 patch 还是改 settings？**

A: 改 settings。`llm-deepseek:` 或 `llm-pi-ai:` 段写在 `$DSH_HOME/settings.yaml` 中即可热更新，不需要重新打 bundle；Web 的 Models 页面写的就是这个文档。

**Q: 装上后会不会把 Codex / Claude Code provider 也装上？**

A: 不会。该 bundle 明确不依赖、不挂载 `@deepseek-ai/dsh-subagent-codex` 与 `@deepseek-ai/dsh-subagent-claude-code`；要使用需另装对应的 Profile 包。

**Q: 默认的"工作区内可写"沙箱到底管什么？**

A: 写入被限制在当前工作目录与该会话的临时子目录；只读模式不授予任何写入权限。Windows 上文件效果通过 ACL 受限令牌 runner 强制，权限切换器和审批服务按相同语义工作。

**Q: 我的 profile 写了 `cordis.patch.yml`，会不会和这个 bundle 冲突？**

A: 不会冲突，但会**按 id 整体替换**该行的 `config`。bundle 与你 patch 没有深度合并；如果你的覆盖里没重述某个字段，新值由 bundle 默认决定；升级 bundle 版本时，自定义覆盖仍按 id 命中整行。

## 上手难度
入门 — 这是 profile 必备的地基层，无需阅读源码即可使用；如需定制只需在更上层写一行 `cordis.patch.yml` 按 id 替换默认值。

## 已知问题与限制
- **整行 config 替换**：patch 用同一行 id 命中即整行覆盖，没有深度合并层；profile 覆盖必须重述该行希望保留的全部字段，否则会被 bundle 默认值覆盖
- **Windows 临时目录授权是按会话的私有子目录**：`workspace-write` 把可写范围限制在工作区 + 该会话自己的 temp 子目录（形如 `<temp>\dsh-<hash>`，受限子进程的 `TMP/TEMP` 被改写）；`read-only` 不授予任何临时目录写入权限

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [Deepseek-Harness-Desktop](https://deepseek-plugin.org/plugins/ChisaAlter/Deepseek-Harness-Desktop/vendor/deepseek-harness/packages/bundle/base)
Wiki generated by AI (model: `MiniMax-M3`)
