DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

Farewish /

Farewish/dsh-viewtune

Verified

DeepSeek Harness 的阅读页签插件:一轮对话进行时能看到思考、工具与进度,结束后自动折叠过程、只留最终回答。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@efd2948c

dsh-viewtune

English

给 DeepSeek Harness 的阅读页签:一轮对话在进行时,过程是看得见的——思考在写、工具在跑、到了第几步;一轮成功结束后过程收起来,只留最终回答。

上游原版的「对话 / 轨迹」页签、输入框、模型选择、工具与审批全部保留,本插件只增加一个阅读视图。

面向 DeepSeek Harness 0.1.5-rc.2。只改展示,不碰 Agent 执行、SDK 或模型凭据。Node.js ^22.19.0 || >=24。

特性

  • 过程可见:思考、工具调用、子代理与进度实时呈现,长轮次不会只剩一个转圈。

  • 结束后自动收起:整轮成功结束时折起过程、留下回答;运行中或未完成的轮次保持展开。

  • 短思考与长思考同框:不再因为「没有溢出」就取消边框,短思考的标题与正文内边距与长思考一致。

  • 思考区滚轮接力:思考内容滚到它正在前往的那一侧边缘后,滚轮改为滚动会话;没有溢出的短思考完全不拦截滚轮。

  • 用户消息都在最前:一轮里可能以系统提示词开头并携带多条 user/steering 消息(系统提示词、你的话、注入的上下文),它们按源顺序全部渲染在过程折叠开关之前。带与不带系统提示词的对话,顺序一致:

    用户的话 → 折叠开关(用时 X 秒,可点击)→ 流程(系统提示词 / 思考卡 / 工具 / 回答正文)
    
  • 工具栏吸顶:工具栏(「收起」+「动效」两个开关)固定在阅读列顶部,滚动时始终够得到。

  • 「收起」只作用于当前这一轮:一个「对话」在这里就是一轮(提问 + 回复)。按钮收起的是读者正在看的那一轮的过程,不是页面上所有轮次;判定方式与阅读滚动选锚点用的是同一条谓词,视口横跨两轮时取上面那一轮。

  • 步骤胶囊:回答末尾的动作行里显示该轮回答落在第几步 / 全轮共几步,点开是中文的过程记录,不是原始 JSON。

  • 交互式 mcp-app 卡片:回答里的 ````mcp-app代码块挂成交互卡片,跑在<code>内、**没有**</code>allow-same-origin<code>;卡片可通过 JSON-RPC 把下一轮 prompt 填进输入框。技能包见 [</code>skills/generative-mcpapps/`](skills/generative-mcpapps/)。</p> </li> </ul> <h2>安装</h2> <p>需要 PATH 上有官方 <code>dsh</code>(没有就用 <code>npx @deepseek-ai/dsh</code>)与 <strong>pnpm</strong> —— <code>dsh plugin add</code> 会在 <code>$DSH_HOME/profiles/web</code> 里跑 pnpm。</p> <pre><code class="language-sh"># 从 GitHub 安装 dsh plugin --profile web add github:Farewish/dsh-viewtune # 或从本地目录 / tarball 安装 dsh plugin --profile web add ./dsh-viewtune dsh plugin --profile web add ./dsh-viewtune-0.3.0-relayout.13.tgz </code></pre> <p>装完<strong>重启 Host</strong>再刷新页面:<code>dsh plugin add</code> 只写 profile,不会热挂正在运行的进程。</p> <p>卸载:</p> <pre><code class="language-sh">dsh plugin --profile web remove dsh-viewtune </code></pre> <p>几点说明:</p> <ul> <li><code>dsh.bundle</code> 是<strong>开机捕获</strong>的,不要再往 profile 的 <code>cordis.patch.yml</code> 手写同一条 insert,会重复挂载。</li> <li>本仓库<strong>已提交编译好的 <code>lib/</code></strong>,安装时不需要 <code>prepare</code>,也不需要给 profile 加 <code>allowBuilds</code>。</li> <li>本插件与上游 <code>dsh-better-display</code> <strong>不要同时安装</strong>:两者的 bundle 补丁插入同一个入口 id,同时挂着会重复挂载。用上面的 <code>remove</code> 卸掉本插件后,再装回上游才是干净的。</li> </ul> <h2>已知限制</h2> <ul> <li><strong>被历史窗口截断的轮次</strong>不显示步骤胶囊与用时/用量。Harness 按消息条数分页,最上面那一轮可能只加载了一部分,此时它的步骤数是局部和,与过程记录里的绝对步数不可比——所以宁可不显示,也不显示一个会误导的偏小数字。</li> <li><strong>用量胶囊偶尔不出现</strong>属于有意为之:宿主只在能<strong>精确证明</strong>该轮计费数据时才给出用量(例如该轮某次尝试没有可用的用量样本、或轮次尚未结束时,宿主宁可返回&quot;无法确定&quot;)。本插件跟随这一取向,不猜、不估算。</li> </ul> <h2>开发</h2> <h3>为什么仓库提交了编译产物</h3> <p>浏览器半边是预编译的 <code>lib/client.js</code>,Host 启动时直接加载它。<strong>从源码重新构建需要一份 DSH 单仓库</strong>(提供客户端构建适配器与 <code>packages/client</code> 源码),本仓库沿用上游的 <code>tsdown.config.ts</code>。正因为构建有这一层依赖,仓库才把编译结果一并提交——安装与分享都不需要构建。</p> <p>类型检查同样需要那份单仓库(客户端 UI 包并未作为独立包发布),所以在没有它的机器上 <code>npm run typecheck</code> 跑不起来。<code>lib/</code> 只含编译产物与宿主入口,本仓库<strong>不发布类型声明</strong>,<code>package.json</code> 也没有 <code>types</code> 字段。</p> <h3>改代码</h3> <p>改动显示逻辑时,<strong>源码 <code>src/</code> 与产物 <code>lib/client.js</code> 必须一起改</strong>——Host 加载的是产物。请务必留意产物里的两处身份标记,它们必须与 <code>package.json</code> 的 <code>name</code> 完全一致,否则整页会因为 <code>loaded without registering &quot;&lt;id&gt;&quot; via __ModuleLoader__.load</code> 而失败:</p> <ul> <li><code>window.__ModuleLoader__.load({ id })</code> 的行 id(宿主由安装清单的包名派生);</li> <li>每个 CSS 模块的 <code>tagId</code> 前缀与 <code>document.createElement(&quot;style&quot;)</code> 的 <code>data-plugin</code>(HMR 按 plugin id 移除本插件的样式)。</li> </ul> <p><code>tests/stock-install.test.ts</code> 就是这两条的守卫;同一测试还会检查本文档的安装命令与包名一致。</p> <blockquote> <p><strong>把克隆出来的仓库放在 <code>node_modules</code> 之外。</strong> <code>dsh plugin add</code> 会在 profile 目录里跑 pnpm,而 pnpm 会清理 <code>node_modules</code> 下未在 <code>package.json</code> 中声明的目录——仓库连同 <code>.git</code> 可能被一起删掉。</p> </blockquote> <h3>验证</h3> <p><code>npm test</code> 跑仓库自带的测试。此外,本项目开发时主要依赖<strong>产物层</strong>的验证:检查产物的结构标记、把编译后的函数从产物里抠出来在假 DOM 上跑行为用例、并起一个临时 Host 确认模块图收录的 id 与产物注册的 id 一致。</p> <p>这套做法有个前提值得说明:<strong>能解析(<code>node --check</code> 通过)不等于正确</strong>。本仓库改动的是压缩过的产物,所以出现过语法完全合法、却因为一个引用被删掉而在运行时抛错的情况——那类错误只有&quot;名字是否有声明&quot;这一层的检查能抓住。</p> <h2>许可</h2> <p>本仓库按 MIT 发布,见 <a href="LICENSE">LICENSE</a>。</p> <p>它的起点是 <a href="https://github.com/aa2246740/dsh-better-display"><code>aa2246740/dsh-better-display</code></a>(MIT):阅读页签、流式动效与 Markdown 渲染来自那里。展示与 Markdown 部分源自 DeepSeek Harness(MIT)。动效参考 <a href="https://transitions.dev/">Transitions.dev</a>。</p>

—/ 5

No ratings yet

Verified DSH bundle

Commit efd2948c7d7e

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout