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

Paseo 原生接入 liuxing7954/paseo-dsh

DeepSeek Harness
liuxing79541 天前有提交已提供中文文档扫描:含敏感能力

Paseo 原生 provider 插件 + DSH 桥接,把 DeepSeek Harness…

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add liuxing7954/paseo-dsh
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · model
装得上吗
实装验证未通过(unknown),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(unknown · 2026/10/22) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 dsh-bridge/package.json

展开查看检查明细 ↓

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

✗npm 包dsh-paseo-bridge(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 27 条)
  • 发起网络请求
    dsh-bridge/lib/index.js:105
    .request(
  • 执行外部命令固定命令
    harness/catalog.mjs:12
    const child = spawn('dsh', ['--profile', PROFILE], { cwd: process.cwd(), stdio: ['pipe', 'pipe', 'pipe'] });
  • 写入本地文件
    harness/probe.mjs:18
    const rawOut = createWriteStream(RAW);
  • 执行外部命令固定命令
    harness/probe.mjs:27
    const child = spawn('dsh', ['--profile', PROFILE], {
  • 执行外部命令固定命令
    harness/route-test.mjs:24
    const child = spawn('dsh', ['--profile', PROFILE], { cwd: process.cwd(), stdio: ['pipe', 'pipe', 'pipe'] });
  • 写入本地文件
    harness/tools.mjs:12
    const out = createWriteStream(OUT);
  • 执行外部命令固定命令
    harness/tools.mjs:14
    const child = spawn('dsh', ['--profile', process.env.DSH_PASEO_PROFILE ?? 'paseo'], {
  • 执行外部命令来自配置/变量
    paseo-plugin/lib/doctor.mjs:36
    return execFileSync(cmd, args, { encoding: "utf8", stdio: ["ignore", "pipe", "ignore"] }).trim();
  • 读取本地文件
    paseo-plugin/lib/doctor.mjs:45
    if (existsSync(bundled)) {
  • 读取本地文件
    paseo-plugin/lib/doctor.mjs:67
    const pluginVersion = JSON.parse(readFileSync(join(HERE, "..", "package.json"), "utf8")).version;
  • 读取本地文件
    paseo-plugin/lib/doctor.mjs:99
    if (!existsSync(profileDir)) {
  • 读取本地文件
    paseo-plugin/lib/doctor.mjs:112
    if (existsSync(bridgeEntry)) {
  • 读取本地文件
    paseo-plugin/lib/doctor.mjs:120
    if (!existsSync(patchPath)) {
  • 读取本地文件
    paseo-plugin/lib/doctor.mjs:125
    const patch = readFileSync(patchPath, "utf8");
  • 发起网络请求
    paseo-plugin/lib/probe-provider.mjs:61
    response = await fetch(endpoint, {
  • 读取本地文件
    paseo-plugin/server/bootstrap.ts:57
    if (existsSync(path)) return false;
  • 写入本地文件
    paseo-plugin/server/bootstrap.ts:58
    writeFileSync(path, content);
  • 写入本地文件
    paseo-plugin/server/bootstrap.ts:78
    mkdirSync(join(dir, "node_modules"), { recursive: true });
  • 读取本地文件
    paseo-plugin/server/bootstrap.ts:90
    if (existsSync(bridgeDir)) rmSync(bridgeDir, { recursive: true, force: true });
  • 删除本地文件递归
    paseo-plugin/server/bootstrap.ts:90
    if (existsSync(bridgeDir)) rmSync(bridgeDir, { recursive: true, force: true });
  • 写入本地文件
    paseo-plugin/server/bootstrap.ts:91
    mkdirSync(bridgeDir, { recursive: true });
  • 写入本地文件
    paseo-plugin/server/bootstrap.ts:94
    mkdirSync(dirname(target), { recursive: true });
  • 写入本地文件
    paseo-plugin/server/bootstrap.ts:95
    writeFileSync(target, Buffer.from(encoded, "base64"));
  • 读取本地文件
    paseo-plugin/server/bootstrap.ts:100
    const patchCreated = !existsSync(patch);
  • 写入本地文件
    paseo-plugin/server/bootstrap.ts:102
    writeFileSync(patch, Buffer.from(PROFILE_PATCH_TEMPLATE_BASE64, "base64"));
  • 读取本地文件
    paseo-plugin/server/dsh-process.ts:146
    if (candidate.includes("/") && existsSync(candidate)) return candidate;
  • 执行外部命令来自配置/变量
    paseo-plugin/server/dsh-process.ts:185
    const child = spawn(resolveBinary(), ["--profile", process.env.DSH_PASEO_PROFILE ?? "paseo"], {
扫描于 2026/10/31(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 提问卡片
  • 计划模式与思考档位
展开完整介绍(100 字)↓

Paseo 原生 provider 插件 + DSH 桥接,把 DeepSeek Harness 接成一等公民:提问卡片、计划模式、思考档位、插话、用量。不改 Paseo 源码,不 fork DSH。

README

由 DeepSeek 最新模型翻译生成
DeepSeek Harness × Paseo(原生接入) · English 把 DSH 作为 Paseo 的一等公民 provider 接进来。不 fork Paseo、不 fork DSH,全部走公开扩展点:Paseo 侧是 direct provider 插件,DSH 侧是一个 profile bundle。 这不是 ACP 接入。ACP 缺三样东西,而 Paseo 的原生 provider 协议恰好都有。 一行安装: paseo plugin add npm:paseo-dsh · npm 包 npmjs.com/package/paseo-dsh · 装完只差填模型路由,详见下方。
展开完整文档(README 剩余 1 节)
DeepSeek Harness × Paseo(原生接入)

· English

把 DSH 作为 Paseo 的一等公民 provider 接进来。不 fork Paseo、不 fork DSH,全部走公开扩展点:Paseo 侧是 direct provider 插件,DSH 侧是一个 profile bundle。

这不是 ACP 接入。ACP 缺三样东西,而 Paseo 的原生 provider 协议恰好都有。

一行安装: paseo plugin add npm:paseo-dsh · npm 包 npmjs.com/package/paseo-dsh · 装完只差填模型路由,详见下方。

| 能力 | ACP 接入 | 本项目 |
| ask_user_question 提问卡片 | ❌ 模型看不到该工具,也没有应答方 | ✅ Paseo 原生卡片,步进式选项,一次提交 |
| 计划模式 | ❌ ACP 不承载 modes/plans | ✅ 编辑器里的 Build / Plan 开关,计划先展示再审批 |
| 思考强度 | ⚠️ 取决于模型 | ✅ 按每个模型真实声明的档位渲染 |
| 插话(steer) | — | ✅ 注入当前回合,而不是排到下一个 |
| 图片(多模态) | ⚠️ 多数不承载 | ✅ 附件入库后按路由模态投递(需在 profile 声明图片模态) |
| 斜杠命令 / 技能 | ⚠️ 多为命令子集 | ✅ / 菜单列出 DSH 命令与 user-invocable 技能;命令在运行时执行,技能按 /name 注入 |
| 权限模式(沙箱) | ❌ 无统一开关 | ✅ composer 里的 Permissions 下拉,切换 DSH 的沙箱 + 审批预设 |
| 人设预设(Preset) | ❌ | ✅ profile 挂了 agent-preset registry 时,composer 出现 Preset 下拉(建会话时选、首回合后锁定) |
| 会话恢复 / 导入 | ❌ 无历史、无法导入 | ✅ 重开按 Paseo 的 history: replay 回放历史;导入 DSH 原生会话(session.list,从 ~/.dsh/sessions 列举) |
| 终止后续聊 | — | ✅ 只取消当前回合,会话保留 |

🤖 复制这段给你的 AI Agent(推荐)

把下面整段复制进 Claude Code / Codex / Cursor / 任何能执行命令的 Agent。它会读文档、探测你的模型、装好一切,你只需要最后重启一次 Paseo。

它需要读写 ~/.dsh/ 和 ~/.paseo/、执行 shell 命令。给它这些权限,但先自己扫一眼下面的内容——它做的事和你想让它做的事应该是一致的。

你是一个部署助手,帮我把这台机器上的 Paseo 接上 DeepSeek Harness(DSH)。

仓库:https://github.com/liuxing7954/paseo-dsh 先完整读一遍 docs/ADOPTION.md 再动手。不要凭猜测改任何文件。

■ 第一步:检查前提确认 dsh、paseo、node 都在 PATH 上,且 paseo 版本 >= 0.9.2。
缺任何一样就停下来告诉我,不要替我安装它们。

■ 第二步:确定用哪个模型先看我已经有没有 DSH profile:ls ~/.dsh/profiles/ 如果已有,读它的 cordis.patch.yml,【复用我已经配好的 provider】(baseURL、apiKeyEnv、模型 id),不要让我重新输一遍。
如果确实没有,再问我这三件事:
1. LLM 端点 baseURL 是什么
2. API key 放在哪个环境变量里(或者我直接给你 key)
3. 要用哪些模型 id 拿到 key 后写进 ~/.dsh/.credentials.yaml 的 refs 段。
不要把 key 写进任何会被提交的文件,也不要在终端回显它。

■ 第三步:探测模型能力(关键,不许跳过)
npx paseo-dsh probe --base-url <端点> --api-key-env <变量名> --model <模型id>
它输出的 YAML 片段【原样采用】。它会顺便告诉你两个必须处理的坑:
- 如果 developer 角色被拒 -> 配置里必须有 compat.supportsDeveloperRole: false
- reasoningEfforts 里的 off 必须留空(不写值)
- 如果探测出 max,必须显式写进配置如果探测工具报错,把完整错误贴给我,不要自己编一个配置。

■ 第四步:安装把 Paseo 会打印的那段「Plugins are trusted, unsandboxed code...」安全提示【原文转述给我】,并明确问我是否继续。得到我同意之后再装: paseo plugin add npm:paseo-dsh (插件首次加载会自己准备好 DSH profile,不需要跑任何脚本。)
装完重启 Paseo daemon。

■ 第五步:写配置把第三步探测出的片段填进 ~/.dsh/profiles/paseo/cordis.patch.yml,并补一段 agent-default-model 指向我选的主模型。
如果那个文件里已经有内容,只做补充,不要覆盖。

■ 第六步:验证(不许跳)
npx paseo-dsh doctor
确认全绿(dsh/paseo 版本、profile、bridge、路由、key)。有问题就修,修完再跑一次。
然后重启 Paseo daemon。

■ 第七步:汇报告诉我:
- 需要重启什么(Paseo daemon)
- 重启后我在 Paseo 里该选哪个 provider
- 任何你没做到、或者不确定的地方

全程卡住就停下来问我。不要猜,不要跳过验证,不要为了让流程走完而伪造成功。

安装(推荐,一行)

用 Paseo 自己的插件安装器:

paseo plugin add npm:paseo-dsh
paseo plugin ls # 确认 dsh-paseo 已装

插件首次加载会自己准备好 DSH profile(~/.dsh/profiles/paseo)和内嵌的 stdio bridge——不用 clone、不用跑脚本。更新同样只走 Paseo 这一条链路:npm 源用 paseo plugin update,Git 源用 git pull,然后重启 daemon,profile 会随插件一起更新。

装完之后还差一步:填模型路由(这一步因人而异,没法自动)。分两小步:

a) 告诉 DSH 去哪个端点、用哪些模型

编辑 ~/.dsh/profiles/paseo/cordis.patch.yml。插件已生成一份带注释的模板, 文件已存在时绝不覆盖。一个完整例子(把 my-gateway / 端点 / 模型 id 换成你自己的):

- id: llm-pi-ai
name: "@deepseek-ai/dsh-llm-pi-ai"
config:
providers:
my-gateway: # 路由名,随便取,下面要一致 displayName: My Gateway apiKeyEnv: MY_GATEWAY_API_KEY # 指向 .credentials.yaml 里的键名(见 b) api: openai-completions baseURL: https://your-gateway/v1 网关只认 system 角色、拒绝 developer 角色时必须加,否则每个回合 422 compat: supportsDeveloperRole: false
网关支持视觉才写;不写默认 [text],图片会被换成占位文本
defaultInput: [text, image]
models:
- id: your-model-id # 端点上的模型 id name: your-model-id reasoningEfforts: # 支持推理才写;不支持写 false off: # 留空 = 不发参数(多数网关拒绝字面量 "off") low: low medium: medium high: high max: max # max/xhigh 必须显式列出,缺键=不支持
- id: agent-default-model
name: "@deepseek-ai/dsh-agent-default-model"
config:
provider: my-gateway
model: your-model-id

b) 放 API key

写进 ~/.dsh/.credentials.yaml(不要写进任何会被提交的文件):

version: 1
refs:
MY_GATEWAY_API_KEY: sk-xxxxxxxx

c) 自检 + 重启

npx paseo-dsh doctor

它会检查 dsh/paseo 版本、profile 是否就绪、bridge 是否落地、路由是否填好、 apiKeyEnv 对应的 key 是否存在——缺什么直接告诉你(只读,不改任何东西)。全绿后 重启 Paseo daemon(paseo daemon restart),在 Paseo 里新建会话时选 DeepSeek Harness (native) 这个服务商。

不确定端点支不支持推理 / thinking 档位 / vision? 用同一个命令行探测你的端点,它会直接打过去、把上面 a) 那段填好吐给你(同样不需要 clone):

npx paseo-dsh probe \
--base-url https://your-gateway/v1 \
--api-key-env MY_GATEWAY_API_KEY \
--model your-model-id

两个最容易卡住的点它会替你确认:网关拒绝 developer 角色 → 要加 compat.supportsDeveloperRole: false;off 档位必须留空。

完整走查与踩坑清单见 docs/ADOPTION.md。

相关地址:npm 包 <https://www.npmjs.com/package/paseo-dsh> · Paseo 社区目录 <https://paseo.cafe/plugins/dsh-paseo> · 讨论帖 <https://github.com/getpaseo/paseo/discussions/6375>

本地开发 / 离线安装

改本仓库代码时,用 install.sh 把 checkout 作为目录源接入:它会建好 profile、把 dsh-bridge 链进 profile,并替你注册插件。之后 git pull + 重启 daemon 即生效。

git clone https://github.com/liuxing7954/paseo-dsh && cd paseo-dsh
./install.sh --check # 先看前提条件,不做改动 ./install.sh # 创建 profile + 链接 bridge + 注册插件

开发时改了 dsh-bridge/,记得跑 node paseo-plugin/scripts/generate-bridge-assets.mjs 重新内嵌 bridge(npm publish 也会自动跑),否则插件自举用的还是旧桥。

安装脚本不会覆盖你已有的模型配置,动到的每个文件都会先备份。

组成

paseo-dsh/
├── dsh-bridge/ # DSH 侧:stdio 桥接 bundle │ ├── lib/index.js # 插件入口:命令行、stdin 生命周期、提问桥接 │ ├── lib/transport.js # 自带 JSON-RPC 行传输(支持 server→client 请求) │ ├── lib/server.js # 会话/计划/思考档位/catalog 的实现 │ └── cordis.patch.yml # bundle 补丁:往 dsh-base 上挂桥接与提问工具 ├── paseo-plugin/ # Paseo 侧:provider 插件(direct provider 实现;npm 包 paseo-dsh) │ ├── index.server.ts # registerProvider() + 首次加载时自举 DSH profile │ ├── server/ │ │ ├── provider.ts # 连接、catalog、会话生命周期、权限卡片 │ │ ├── session.ts # 单会话:提问→卡片、计划、思考档位、用量 │ │ ├── dsh-process.ts # 一个会话一个 dsh 子进程 │ │ ├── timeline.ts # DSH 会话事件 → Paseo 时间线 │ │ ├── bootstrap.ts # 自举:写 profile 文件 + 把内嵌 bridge 落盘 │ │ └── bridge-assets.ts # 生成物:bridge 的 base64 内嵌副本 │ ├── lib/ # doctor(自检)/ probe(能力探测) │ └── bin/paseo-dsh.mjs# npx paseo-dsh {doctor|probe} ├── tools/ # 探测工具的瘦启动器(实现在 paseo-plugin/lib 里) ├── templates/ # profile 配置模板(含必踩的坑的注释) ├── harness/ # 独立探针,不依赖 Paseo 即可验证桥接与插件 └── docs/ # 改造指南 + 实战缺陷记录

工作原理

模型调用 ask_user_question └─ dsh-tool-ask-user → ctx.userQuestions.ask() └─ dsh-bridge: ctx.on('user-questions/request') └─ transport.request('paseo/question') ← server→client 请求 └─ paseo-plugin: session.permission (kind: 'question', input.questions[]) └─ Paseo 渲染一张卡片,步进式选完所有问题,一次提交 ← 返回 { behavior:'allow', updatedInput:{ answers: { : "B" } } } ← 返回 { answers:[{id, selected:['canary']}] } ← 工具返回,模型继续

关键点:DSH 官方两个自动化协议都没有「服务端主动问客户端」这条通道——ACP 明确不承载 elicitation,SDK 协议里传输层支持但服务端从不发送。所以桥接自带了传输层,把这个能力补上。

每个 Paseo 会话对应一个独立的 dsh --profile <name> 子进程,通过 stdio 上的换行分隔 JSON-RPC 通信。会话之间进程隔离,一个崩了不会拖垮 daemon。

自测 / 本地验证(不需要 Paseo)

先跑随包 CLI 自检(只读,不改任何东西):

npx paseo-dsh doctor # 安装完整性:CLI/版本/profile/bridge/路由/key
npx paseo-dsh probe --base-url <端点> --api-key-env <变量名> --model <模型id> # 端点能力

再对协议层做断言(界面不可信,事件流才可信):

node harness/catalog.mjs # 列出 provider / 模型 / 每个模型真实支持的思考档位
node harness/probe.mjs # 端到端跑一轮提问往返
node harness/route-test.mjs # 逐个路由测试可用性

插件层检查(断言事件形状,不看界面)
cd paseo-plugin
npx tsc --noEmit false --outDir .dbg --declaration false \
--module commonjs --moduleResolution node
echo '{"type":"commonjs"}' > .dbg/package.json
cp ../harness/plugin-check.cjs .dbg/ && cd .dbg && node plugin-check.cjs
rm -rf ../.dbg

plugin-check.cjs 覆盖三件曾经静默出错的事:用量事件有没有真数字、非文本内容块有没有被悄悄丢掉、未知输入是报失败还是谎报成功。这三类 bug 在界面上看不出来——不报错,只是悄悄不对。

验证方法本身也值得一读——界面会乐观显示、会缓存、会骗你,所以断言要打在协议层。
ADOPTION.md 第 5 节 讲了具体做法,包括一些反直觉的坑(比如 waitFor 会匹配到陈旧事件,导致误判)。

环境要求

- Paseo ≥ 0.9.2(需要 direct provider 插件 API)
- DSH 已安装且 dsh 在 PATH 上
- Node ≥ 18(探测工具用了内建 fetch)

权限模式(放开沙箱)

DSH 默认是 workspace-write:只能改会话工作目录内的文件,越界操作要审批。会话建好后, Paseo composer 里有一个 Permissions 下拉,可随时切换预设(等价于 /permission <preset>):

- read-only —— 只读,任何改动都问
- workspace-write —— 可改工作区(默认)
- danger-full-access —— 不限目录、不审批(完全放权,谨慎)想让所有新会话默认就完全访问,在你的 profile ~/.dsh/profiles/paseo/cordis.patch.yml 里加这两段(与模型路由并存):

- id: sandbox-policy
config:
mode: danger-full-access
workspaceRoot: !!js process.cwd()
- id: approval
config:
policy: never

改回默认就把 mode 设回 workspace-write、policy 设回 ask。改完重启 daemon。

人设预设(Preset,可选)

DSH 的 agent preset 能把「人设 + 一套能力」打包成一个选项。插件不强制它——只有你的 profile 挂了 @deepseek-ai/dsh-agent-preset-registry 并声明了 preset,composer 里才会出现 Preset 下拉。

语义和 DSH 一致:建会话时选,首个回合后锁定(之后再改会被拒绝并弹回)。

启用示例(profile 的 cordis.patch.yml):

- insert:
- id: agent-preset-registry
name: '@deepseek-ai/dsh-agent-preset-registry'
config:
default: standard
selectedDefault: standard
- id: preset-standard
name: '@deepseek-ai/dsh-agent-preset'
config:
id: standard
order: 1
plugins:
- id: persona
name: '@deepseek-ai/dsh-persona'
config:
prefix: You are a helpful assistant.
注意:DSH 0.2.1 起只注册 provider/model 变量,{{cwd}} 会导致每回合失败

想让某个人设自带额外工具(例如挂一个领域工具插件),把它加进对应 preset 的 plugins: 即可——插件对 preset 是「加法」:host 层的工具照常可用,preset 只负责人设与增量能力。
建议把 host system-prompt 的人设清空(personaPrefix: ''),改由各 preset 自带,避免重复。

版本策略

插件的 major.minor 跟随它所适配的 DSH 线:0.2.x 的插件对应 DSH 0.2.x, patch 位是插件自己的发布计数。装的时候挑与 daemon 上 dsh 同一条线的版本即可。

更新日志

按 npm 发布顺序记录每个 patch 的用户可见变化。0.2.x 的 minor 跟随它所适配的 DSH 线, patch 是本插件自己的发布计数;完整提交记录见 commits。

| 版本 | 日期 | 更新内容 |
| 0.2.17 | 2026-10-30 | 统计行重新贴合页脚:按页脚实际绘制的位置测量并贴齐,原生皮肤下「最新回合」和「被新回合顶下去」两种状态都稳定在约 4.5px 间距;字号统一为页脚同款 13px。量不到、找不到页脚或间距超出合理范围时退回宿主间距,native 不补偿;第三方主题的位置仍由主题自己控制。 |
| 0.2.16 | 2026-10-28 | 统计行回到默认位置:移除 0.2.15 里的自动贴靠、DOM 测量与设置页,只保留内容显示(轮/步、首字、tok/s、上下文、缓存命中,点开展开明细)。位置交还给 Paseo 和主题,不再随展开/收起或换主题移动。0.2.15 已标记 deprecated。 |
| 0.2.15 | 2026-10-28 | 统计行贴合回合页脚:统计行与「复制 / 模型 / 时间 / 耗时」页脚的间距在默认主题和主题插件下保持一致;回合完成时给最后一行打 final,web 端实测页脚的实际位置再贴齐,native 用常量回退。可配置:Settings → Plugins →「回答统计行」可调间距(0–24px,默认 6)与字号(10–16px,默认 13);未保存设置时行为与之前完全一致。字号与数字:默认对齐页脚的 13px,数字等宽不跳动。 |
| 0.2.14 | 2026-10-28 | 统计行更直观:收起行里的会话总 tokens 换成上下文占用百分比(如 上下文 77%),精确的 已用 / 上限 仍在展开详情里;其余计数与缓存命中口径不变。 |
| 0.2.13 | 2026-10-28 | 统计行信息升级:收起时常驻 N 轮 N 步 · 首字 · tok/s · 总 tokens · 缓存命中,口径与 DSH Web 一致(总量 = 未缓存输入 + 缓存读取 + 缓存写入 + 输出;命中 = 缓存读取 ÷ 输入侧总量);恢复会话时会从历史日志重新累计轮/步/tokens。点开仍是上下文、Tokens、路由、工具详情。 |
| 0.2.12 | 2026-10-28 | 回答真流式:改为订阅 DSH 的 agent/assistant-stream 瞬时帧(文本 + 推理),边生成边显示,不再等整段生成完再回放;首字出现的时刻就是模型吐出第一个字的时刻。回答统计行:回答下方显示 首字 xxx · xx tok/s,点开可看上下文占用、输入/缓存/输出 tokens、路由与思考档位、工具次数与耗时;速度用 DSH 自己的 chunk 时间戳计算,整段突发的异常值直接丢弃。 |
| 0.2.11 | 2026-10-28 | 上下文用量:输入框旁显示 已用 / 上限。bridge 新增 paseo/usage,占用取 DSH 的 contextPressure(无采样时用 tokenMeter.measure()),容量取当前路由的 resolveModelInfo();会话打开/恢复、回合结束、切模型、压缩后刷新,恢复旧会话不用新回合就有数。回答逐字出现:按 DSH 的 data.stream 分片重放文本,不再整段蹦出;turn/end 等到重放结束,打断/新消息/进程退出立即落地。安装兼容 Paseo 0.9–0.11:去掉 @getpaseo/protocol 的 type-only 导入(改成插件内 JsonValue),旧版安装器不再因解析不到类型而失败。 |
| 0.2.10 | 2026-10-27 | 附件不再拖垮会话:uploaded_file、review、GitHub/forge 附件降级成文本引用(文件名 / 类型 / 大小 / 路径,或 title / url / body),模型仍能读到;内容块转换移进 try,单条消息失败不再升级成 session.runtime_failed。目录概览:补 OVERVIEW.md 与包描述,paseo.sh 的插件页能正确介绍能力与限制。 |
| 0.2.9 | 2026-10-17 | 模型选择器不再为空:DSH 0.2.1 的 catalog 异步物化,而 Paseo 的 catalog 探测不走 initialize;现在先预热默认路由,再短暂轮询(约 3s),等模型注册完再返回。 |
| 0.2.8 | 2026-10-17 | 修复 DSH 0.2.1 每回合失败:0.2.1-rc 只注册 provider / model 两个提示词变量,persona 里的 {{cwd}} 会让整个回合报 unknown prompt variable;移除它,cwd 改由运行时上下文提供。 |
| 0.2.7 | 2026-10-14 | 导入列表可区分了:每行显示会话标题和首条真实用户消息预览;并发读取日志前缀,40 个会话也能在 1 秒内列完。 |
| 0.2.6 | 2026-10-14 | 中文说明:npm 包页与 paseo.cafe 插件页同时展示中英文描述。 |
| 0.2.5 | 2026-10-14 | 重开会话回放历史:bridge 新增 paseo/sessions / paseo/history,按 DSH session id 读取日志并回放真实用户回合与工具项。导入 DSH 原生会话:声明 session.list,从 ~/.dsh/sessions 列举并导入。 |
| 0.2.4 | 2026-10-09 | 插件重载 / daemon 重启后可恢复会话:补上 session.persistence handle(plugin: 前缀),并用 ctx.get() 访问未注入的 sessions 服务,修掉重开时的两个连续报错。 |
| 0.2.3 | 2026-10-09 | Preset 下拉:profile 挂了 agent-preset-registry 时,composer 里可选人设 + 能力包;建会话时选、首回合后锁定。profile 更耐升级:package.json / cordis.yml / pnpm-workspace.yaml 已存在时不再覆盖。 |
| 0.2.2 | 2026-10-09 | Permissions 下拉:在 composer 里直接切 DSH 的沙箱预设(read-only / workspace-write / danger-full-access),等价于 /permission <preset>;bridge 新增 paseo/permission。 |
| 0.2.1 | 2026-10-09 | 自带 CLI:npx paseo-dsh doctor 只读检查 CLI / profile / bridge / 路由 / key;npx paseo-dsh probe 探测端点真实能力。装完不用 clone 就能自检和探模型。安装走查补上完整的模型路由示例。 |
| 0.2.0 | 2026-10-09 | 首个公开版本:DSH 作为 Paseo 原生 provider(不是 ACP);ask_user_question 原生提问卡片、Build / Plan 模式、按模型真实声明的思考档位、插话、图片端到端、/ 命令与技能菜单;插件首载自举 DSH profile,paseo plugin add npm:paseo-dsh 一行安装。 |

0.1.x 只在本地开发,未发布 npm;0.0.0-stage 是首次发布前的占位版本。

相关文档

- docs/ADOPTION.md — 改造指南:改动点、配置方法、踩坑清单
- docs/FIELD-NOTES.md — 25 个真实缺陷的症状 → 根因 → 修法
- AGENTS.md — 给 AI 智能体的说明(Codex 等会自动读取)。不管你是被叫来装它、还是被叫来改它,先看这个

联系

用的时候卡住了、发现文档写错了、或者你用它接上了别的运行时——都欢迎直接发邮件:

jixy · 467677527@qq.com

提 issue 也行,但邮件我回得更快。

许可

MIT,见 LICENSE。
预览分享卡片长什么样 ↓liuxing7954/paseo-dsh
分享 · DeepSeek Harness Hub
liuxing7954/paseo-dsh

Paseo 原生 provider 插件 + DSH 桥接,把 DeepSeek Harness…

回到顶部