🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

便携终端编程助手 LouisYang841/dsh-mini

DeepSeek Harnessv0.1.11
LouisYang84179 天前有提交已提供中文文档扫描:含敏感能力

在手机上运行终端编程 Agent,单文件即装即用

35.6/100
综合分
8
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add LouisYang841/dsh-mini
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 79 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-mini @ 0.1.11
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/31 14:18:08

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 35 处,展示前 35 条)
  • 执行外部命令固定命令
    cli/bash-tool.js:28
    const child = spawn("bash", ["-c", command], {
  • 读取本地文件
    cli/cli.js:63
    if (!existsSync(envFile)) continue;
  • 读取本地文件
    cli/cli.js:64
    for (const line of readFileSync(envFile, "utf8").split(/ ? /)) {
  • 读取密钥环境变量
    cli/cli.js:83
    const GEMINI_KEY = process.env.GEMINI_API_KEY;
  • 读取密钥环境变量
    cli/cli.js:145
    const PROVIDER = PROVIDER_OVERRIDE ?? CONFIG.defaultProvider ?? (process.env.DEEPSEEK_API_KEY || !process.env.GEMINI_API_KEY ? "deepseek-official" : "
  • 写入本地文件
    cli/cli.js:186
    mkdirSync(dirname(target), { recursive: true, mode: 0o700 });
  • 写入本地文件
    cli/cli.js:187
    if (target === join(homedir(), ".dsh-mini", "env")) chmodSync(dirname(target), 0o700);
  • 读取本地文件
    cli/cli.js:188
    const previous = existsSync(target) ? readFileSync(target, "utf8").replace(new RegExp(`^${env}=.*$`, "m"), "").trimEnd() : "";
  • 读取本地文件
    cli/cli.js:188
    const previous = existsSync(target) ? readFileSync(target, "utf8").replace(new RegExp(`^${env}=.*$`, "m"), "").trimEnd() : "";
  • 写入本地文件
    cli/cli.js:189
    writeFileSync(target, `${previous}${previous ? "\n" : ""}${env}=${key}\n`, { mode: 0o600 });
  • 写入本地文件
    cli/cli.js:190
    chmodSync(target, 0o600);
  • 执行外部命令来自配置/变量
    cli/cli.js:303
    const child = spawn(process.execPath, [process.argv[1], ...args], {
  • 读取本地文件
    cli/cli.js:758
    if (existsSync(agentsPath)) {
  • 读取本地文件
    cli/cli.js:759
    const instructions = readFileSync(agentsPath, "utf8").slice(0, AGENTS_MD_CAP).replaceAll("</workspace_instructions>", "<\\/workspace_instructions>");
  • 读取密钥环境变量
    cli/cli.js:959
    ...(process.env.OPENAI_API_KEY ? { openai: { apiKeyEnv: "OPENAI_API_KEY" } } : {}),
  • 读取密钥环境变量
    cli/cli.js:960
    ...(process.env.ANTHROPIC_API_KEY ? { anthropic: { apiKeyEnv: "ANTHROPIC_API_KEY" } } : {}),
  • 读取密钥环境变量
    cli/cli.js:961
    ...(process.env.OPENROUTER_API_KEY ? { openrouter: { apiKeyEnv: "OPENROUTER_API_KEY" } } : {}),
  • 读取本地文件
    cli/config.js:70
    if (!existsSync(path)) return undefined
  • 读取本地文件
    cli/config.js:73
    text = readFileSync(path, 'utf8')
  • 写入本地文件
    cli/config.js:132
    mkdirSync(dirname(path), { recursive: true, mode: 0o700 })
  • 写入本地文件
    cli/config.js:136
    writeFileSync(tmp, JSON.stringify(next, null, 2) + '\n', { mode: 0o600 })
  • 写入本地文件
    cli/config.js:137
    chmodSync(tmp, 0o600)
  • 写入本地文件
    cli/config.js:138
    renameSync(tmp, path)
  • 发起网络请求
    cli/gemini-adapter.js:126
    response = await fetch(url, {
  • 读取本地文件
    cli/skill-scanner.js:33
    if (!existsSync(root)) continue;
  • 读取本地文件
    cli/skill-scanner.js:34
    entries = readdirSync(root, { withFileTypes: true });
  • 读取本地文件
    cli/skill-scanner.js:45
    if (existsSync(candidate)) {
  • 读取本地文件
    cli/skill-scanner.js:72
    meta = parseFrontmatter(readFileSync(entry.path, "utf8")).meta;
  • 读取本地文件
    cli/skill-scanner.js:98
    const { meta, body } = parseFrontmatter(readFileSync(candidate.locator, "utf8"));
  • 读取本地文件
    cli/tool-scanner.js:66
    if (!existsSync(root)) continue
  • 读取本地文件
    cli/tool-scanner.js:67
    entries = readdirSync(root, { withFileTypes: true })
  • 读取本地文件
    cli/tool-scanner.js:76
    const raw = JSON.parse(readFileSync(file, 'utf8'))
  • 执行外部命令固定命令
    cli/tool-scanner.js:125
    spawnSync('taskkill', ['/pid', String(child.pid), '/T', '/F'], { windowsHide: true, stdio: 'ignore' })
  • 执行外部命令来自配置/变量
    cli/tool-scanner.js:150
    const child = spawn(definition.command[0], definition.command.slice(1), {
  • 写入本地文件
    vendor-pi/bash-executor.ts:94
    const stream = createWriteStream(tempFilePath);
扫描于 2026/11/3(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 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
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 单文件即装即用
  • 零运行时依赖

DeepSeek Harness 核心的便携引擎 + Termux 友好的终端编程 Agent CLI(pi 壳 + DSH 引擎,零运行时依赖,359MB→7.6MB 单文件)

README

由 DeepSeek 最新模型翻译生成
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 个(产物自包含) |
展开完整文档(README 剩余 1 节)
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。
预览分享卡片长什么样 ↓LouisYang841/dsh-mini
分享 · DeepSeek Harness Hub
LouisYang841/dsh-mini

在手机上运行终端编程 Agent,单文件即装即用

这是你的仓库?认领条目

回到顶部