← 返回列表
需源码安装
DeepSeek Harness 核心的便携引擎 + Termux 友好的终端编程 Agent CLIpi 壳 +…
暂不能直接安装(需源码编译或环境不满足):缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。 · 最近上游提交 2026/8/16 · 已提供中文文档
DeepSeek Harness 核心的便携引擎 + Termux 友好的终端编程 Agent CLI(pi 壳 + DSH 引擎,零运行时依赖,359MB→7.6MB 单文件)
综合分
35.6
GitHub 分
35.6
用户评分
—
★ Stars
8
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add LouisYang841/dsh-mini缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装,改用 GitHub 源安装
数据截至 2026/9/17(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查需源码安装
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-mini(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明
缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/18 02:57:14
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-loop@deepseek-ai/dsh-fs@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence-jsonl@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-tool-fs@deepseek-ai/dsh-tool-todo@deepseek-ai/dsh-tools用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
dsh-mini CI version stars license node runtime deps Termux DeepSeek Harness 核心的便携引擎 + 一个能在手机上干活的终端编程 Agent CLI。 我们不是 fork:以 npm 消费者身份把 pi(壳)和 DSH(引擎)拼在一起,本仓库真正自研的是五条缝、兼容层和文档——拼装与解耦。 这是什么 - 引擎原样来自 DSH 官方包:事件溯源会话、turn/step 状态机、工具调度、压缩、skills——@deepseek-ai/dsh- 锁版直用,一行不改 - 壳来自 pi 生态:真 @earendil-works/pi-tui 框架 + 社区 @openguardrails/dsh-tui 全屏界面(默认) - 我们能替换的只有缝:provider 换、文件系统换、持久化换、UI 换,引擎不动 依赖砍了多少 | | 官方 DSH | dsh-mini | |---|---|---| | 构建期直接依赖 | — | 39 个(npm 闭包 168 包/161MB,见 REFLECTION.md) | | 默认 profile 插件 | ~90 个 | 31 个(全纯 JS,零原生模块) | | 运行时 npm 依赖 | 全家桶 | 0 个(产物自包含) | | 安装体积 | 359MB node_modules | 7.7MB 单文件(约 47 倍缩减) | | 便携引擎 | — | 419KB,零 Node 内置依赖 | 数字来源:官方安装的 node_modules 实测 359MB;我们只保留直接 import 的 39 个构建期包(全部 devDependencies,npm install --omit=dev 装 0 个);完整砍依赖账本见 REFLECTION.md。 为什么对 Termux 友好 - 推荐 Node ≥ 22.15——zstd 内置于 node:zlib,无原生模块、无编译;更旧 Node 可运行但 session 会退化为未压缩 JSONL - 一条命令安装:curl | sh,下载单个 7.7MB 自包含文件 + 26 行 launcher,npm 都不需要 - bash 工具直接打手机真实文件系统(OnePlus 15 / Termux 实测:ls、建文件、跑脚本) - 为 Android 修过的真坑(skill 里有记录):SELinux 禁硬链接 → 持久化降级为 rename 原子发布;exit 与 200ms 写批的时序 → 退出前强制 flush - 数据和密钥都在手机本地:会话 JSONL 在 ~/.dsh-mini/sessions;密钥只从环境变量读取(可选持久化到 0600 权限的 ~/.dsh-mini/env 或 ./.env),不出设备 - 三套界面按环境自适应:默认全屏 TUI / DSH_TUI=basic 简易壳 / DSH_PLAIN=1 纯文本(管道与脚本友好) pi 和 DSH 是怎么低耦合焊在一起的 五条缝(完整契约见 ARCHITECTURE.md): 1. LLM 适配器——DSH 官方 DeepSeek 直连 + 官方 pi-ai 多 provider(OpenAI/Anthropic/OpenRouter,环境变量存在即启用)+ 自写 Gemini 作为缝的参考实现 2. 文件系统服务——官方 dsh-fs-local(koffi 仅 Windows 惰性加载,Linux/Termux 等效纯包);node-fs.js 是非 Node 宿主的契约参考 3. 持久化后端——官方 JSONL 后端 + 我们的 shims/fs-promises.js 兼容层(Android 专属修复) 4. Node API 面 shims——纯 JS 重实现 + "大声失败"桩:核心一旦越界立刻报错 5. 引擎面 polyfills——QuickJS/V8 等引擎差异归一化(同 bundle 在 Node 与 QuickJS 上产生字节级一致的事件序列) 这个 repo 如何支持再拼装与扩展 - ARCHITECTURE.md:五缝 + 六步改装配方——把引擎装进任何 harness/agent app - DECISIONS.md:ADR-0001(为什么组装而不是 fork 官方)+ ADR-0002(砍大头留小头判据) - skills/:近 50 条实踩坑(cordis 语义、引擎差异、Android、配额、发布),agent 可通过内置 skill 工具现场加载 - conformance 门:假 provider 回放 + 字节级基线(run.sh)——上游升版、引擎改动全有客观验收,且零 API 配额 - AGENTS.md:给任何 coding agent(包括 dsh-mini 自己)的工程规矩 快速开始 任意 Node ≥ 22.15 机器(Termux 先 pkg install nodejs) curl -fsSL https://github.com/LouisYang841/dsh-mini/raw/main/scripts/install.sh | sh dsh-mini 首次运行无密钥会交互询问 provider 并持久化(~/.dsh-mini/env)。DeepSeek 默认;/provider 切换,/model 换型号,--resume/--sessions 回访会话。 新会话默认 minimal 模式:system prompt 固定为官方 Minimal 的完整 persona,模型只看到 bash + str_replace_editor。用 --mode standard、DSH_MODE=standard 或会话内 /mode standard 切到完整工具目录;模式作为 durable session event 保存,resume 时自动恢复。/mode standard --global 会把新默认值写进 ~/.dsh-mini/settings.json,之后每次启动都生效。 持久化配置 两层 JSON 设置(仿 pi 的 settings 契约,去掉 watcher/lockfile 依赖): 1. ~/.dsh-mini/settings.json — 用户默认值(首次 /mode --global 或 /config key value 时以 0600 创建) 2. /.dsh-mini/settings.json — 当前项目覆盖值 优先级:CLI flag > 环境变量 > 项目设置 > 用户设置 > 内置默认值。支持的字段: | 字段 | 默认 | 说明 | | --- | --- | --- | | defaultMode | minimal | 新会话模式(minimal / standard) | | defaultProvider | 自动 | 启动默认 provider(如 deepseek-official、google、openai) | | defaultModel | provider 默认 | 启动默认模型 | | reasoningEffort | provider 默认 | 推理强度(以 /reasoning 列出当前模型支持的 id,如 off/high/max;env:DSH_REASONING_EFFORT) | | sessionsDir | ~/.dsh-mini/sessions | 会话存储目录,支持 ~/... | | compactionRatio | 0.8 | 自动压缩触发比例(>0 且 ≤1) | | titles | false | 是否给会话生成标题(静默消耗一次 LLM 调用) | | workspaceInstructions | true | 是否注入工作目录的 AGENTS.md | | showBanner | true | 是否显示启动 banner | | renderer | auto | auto(默认 cc-tui)/ cc / basic / plain | 会话内 /config 查看当前有效值及来源;/config 写入用户设置。会话内 /reasoning [id] 查看/切换推理强度,/reasoning --global 把新默认值写进用户设置(/reasoning default --global 清除并回到 provider 默认)。凭据不进 settings —— API key 只从环境变量或 ~/.dsh-mini/env 读取。 自定义工具(toolpackages) Agent 或用户可以给 dsh-mini 写自己的工具。扫描目录是 /tools/ 和 ~/.dsh-mini/tools/:每个工具由 .tool.json manifest 加一个可执行文件组成。manifest 声明 name / description / parameters / output / command;执行时 dsh-mini spawn 该命令,JSON 参数走 stdin,结果从 stdout 读回 JSON。写完后 /tools reload 热加载,完整工具在 standard 模式可见。完整契约见 docs/toolpackages.md,agent 开发时可加载 skills/toolpkg-authoring/SKILL.md。 许可证 自身代码 MIT;全部拼装组件的归属声明见 THIRD_PARTY_LICENSES.md(随 release 分发)。 相关项目 / Related - DeepSeek Harness — 本项目的引擎来源(官方 255 包全家桶 → 我们砍到 39 个构建期包、0 运行时依赖) - pi — 壳与 provider 生态来源(pi-tui / pi-ai) - @openguardrails/dsh-tui — 默认全屏 TUI(同为 pi-tui 系,MIT) - dsh-cc-tui — 另一社区 TUI(BSD-3,仅作参考未打包) 以下为英文文档(架构细节、开发指南)。 This directory is the spike that answers one question: can the DeepSeek Harness core be pulled from npm, run as a self-contained engine behind a compatibility layer, and be embedded in other hosts? Two deliverables: 1. 引擎探针(bundle.mjs、run.sh) 真正的 DSH 核心——cordis + AgentRegistry + SessionStore + SystemPrompt + ToolRuntime + AgentLoop(事件溯源的轮次/步骤状态机)—— 被打包成一个与引擎无关的单一文件(约 419 KB,零 Node 内置依赖),包含: - shims/——用纯 JS 重新实现的 Node 内置接口表面(path、 util、crypto、async_hooks/AsyncLocalStorage 通过打补丁的 promise 链实现,……)。fs/sqlite/child_process 是显式失败的桩:如果核心一旦 触碰它们,就会大声报错而不是行为异常。 - polyfills.js——引擎 polyfill(AbortController、structuredClone、 Promise.withResolvers、Symbol.dispose,……)外加一处引擎差异 归一化:QuickJS 将原生函数的 Function.prototype.toString 渲染为多行, 而 dsh-tools 会按 V8 的单行形式做字符串比较。 关键设计选择:esbuild --target=es2016 将 async/await 降级为生成器, 使每个 promise 续体都经过 JS 可见的 Promise.prototype.then ——这是 AsyncLocalStorage 前奏在 QuickJS 上工作所必需的,因为 QuickJS 的 await 是 C 内部实现。 验证:5 个脚本化场景(纯文本 / 工具往返 / 并行+独占工具调度 / 最大 token 截断 / 轮次中途引导)通过一个假 provider 回放。Node 和 QuickJS 产生逐字节相同的事件轨迹(114 个事件), 在 baseline.node.json + baseline.sha256 中做哈希锚定。未来每一次 @deepseek-ai/ 升级都必须通过 ./run.sh。 2. dsh-mini CLI(cli/) 同一个 DSH 核心,在 Node 上作为真正的交互式编码代理: node cli/cli.mjs [model] - Provider:通过 AI Studio SSE 端点接入 Google Gemini,实现为 一个 dsh-llm 的 LlmAdapter(cli/gemini-adapter.js)——证明第三方 provider 可以通过适配器接缝接入核心。包含 Gemini-3 的 thoughtSignature 回显怪癖(签名在两个方向上都是 functionCall 的 部件级同级项)。 - 工具:真正的 dsh-tool-fs 工具(read/write/edit/list)+ dsh-tool-todo, 由官方 dsh-fs-local 服务支撑(cli/node-fs.js 仍是非 Node 的 契约参考)。 - 持久化:真正的 DSH JSONL 后端(dsh-session-persistence-jsonl, zstd,按 cwd 布局);会话在重启后存活,--resume 恢复, --sessions 列出。已验证跨进程记忆(密语测试)。 - 模式:minimal 是新会话的默认模式(精确的 Minimal 人格 + 仅 bash/str_replace_editor);standard 保留完整的 dsh-mini 目录。通过 --mode 、DSH_MODE、/mode 或 defaultMode 设置选择; 当前活动模式被记录为持久会话事件,并在恢复时还原。/mode --global 将新的默认值持久化到 ~/.dsh-mini/settings.json。 - 设置:~/.dsh-mini/settings.json(用户)合并到 ./.dsh-mini/settings.json(项目)之下,然后是环境变量,然后是 CLI 标志。 字段:defaultMode、defaultProvider、defaultModel, reasoningEffort、sessionsDir、compactionRatio、titles、 workspaceInstructions、showBanner、renderer。/config 显示 有效值,/config 保存到用户文件。 推理强度按模型通过 /reasoning [id] 选择 (/reasoning --global 持久化默认值);CLI/环境变量默认值为 --reasoning-effort / DSH_REASONING_EFFORT。API 密钥不放在 设置中——它们存在于环境变量或 ~/.dsh-mini/env 中。 - 工具包:扫描 /tools 和 ~/.dsh-mini/tools 中的 .tool.json 清单。每个工具以进程外方式运行,通过 stdin/stdout 传递 JSON; /tools reload 无需重启即可重新扫描。 - REPL:/clear、/model 、/mode [id [--global]]、/reasoning [id [--global]]、 /config [key [value]]、/sessions、/tools [reload]、/exit;来自 会话 firehose 的实时事件渲染;带实时 token 使用量的 ANSI 状态栏。 命令: cli/cli-build.sh # build cli/cli.mjs (Node profile) ./run.sh # engine conformance (Node + QuickJS, diff vs baseline) ./build.sh # portable engine bundle only node cli/cli.mjs [model] [--mode ] [--reasoning-effort ] [--resume ] [--sessions] # settings files + env configure the rest 提供商。 DeepSeek 是默认项(通过 DSH 自有的 dsh-llm-deepseek 适配器走 deepseek-official 路由;DEEPSEEK_API_KEY),Google Gemini 通过 GEMINI_API_KEY。pi 提供商生态共用一个适配器 (dsh-llm-pi-ai):设置 OPENAI_API_KEY / ANTHROPIC_API_KEY / OPENROUTER_API_KEY,openai / anthropic / openrouter 路由 会自动启用(外加 pi-ai 的 deepseek 路由)。使用 /provider 切换提供商,使用 /model 切换模型。 首次运行且任何地方都没有密钥时会启动交互式设置:选择一个 提供商,粘贴密钥——它会被持久化到 ~/.dsh-mini/env(回退到 ./.env,两者都被 gitignore)并在下次启动时自动加载。 工作区指令:如果工作目录包含 AGENTS.md, 它会被注入到系统提示中(DSH_NO_AGENTS=1 或 workspaceInstructions: false 可禁用)。 架构(引擎/宿主接缝、改造配方、升级策略): ARCHITECTURE.md。陷阱与宿主集成清单: skills/dsh-core-embedding/SKILL.md。 安装(一行命令) curl -fsSL https://github.com/LouisYang841/dsh-mini/raw/main/scripts/install.sh | sh 将 dsh-mini 安装为命令(包安装到 ~/.dsh-mini/,启动器放入 PATH)。zstd 会话需要 Node >= 22.15;较旧的 Node 可使用 未压缩的 JSONL。在 Termux 上:先执行 pkg install nodejs。 Termux(Android) 发布产物完全自包含——无需 npm install(也已在 OnePlus 15 上实机验证:设置 → bash 工具驱动手机的真实 文件系统 → 会话持久化,全部在设备上完成): 渲染器模式:在真实终端上,全屏 pi-tui shell (@openguardrails/dsh-tui,Claude-Code 风格)是默认模式; DSH_TUI=basic 获得最小化的聊天流式外壳,DSH_PLAIN=1(或管道) 获得用于脚本/CI 的纯行模式。 pkg install nodejs # Node >= 22.15 (zstd is bundled in node:zlib) curl -LO https://github.com/LouisYang841/dsh-mini/releases/latest/download/dsh-mini.mjs export GEMINI_API_KEY="" node dsh-mini.mjs # pi-tui shell; the bash tool hits Termux's real bash 会话持久化在 ~/.dsh-mini/sessions 下(zstd JSONL;在 Node = 22.15 运行它。无需 npm install,无需 DSH 包树。 2. 仅引擎:将 dsh-engine.mjs + shims/ + polyfills.js(全部为 普通文件)放入你自己的框架中;main.js 是启动参考, baseline.node.json 是一致性门禁。同样无需 npm install。 3. 源码构建:git clone + npm install(仅构建时 devDependencies) + bash cli/cli-build.sh。加上 --omit=dev 则完全不安装任何东西; 在 Termux 上加上 --ignore-scripts。 CI .github/workflows/conformance.yml 在每次推送时运行:npm install → 单元 测试 → 可移植包构建 → 一致性门禁(与 baseline.node.json 逐字节一致) → CLI 构建。 路线图 带有来源决策(pi-native → DSH minimal → 自写胶水代码)的功能审计、 优先级,以及一份有意跳过清单:ROADMAP.md。
扫码进群