Repository navigation
Releases
v0.2.4 — 去掉旧截图 + 文档校验
按反馈把旧的对话框截图从 README 里去掉了(docs/dialog.png 文件一并删除,需要时可由 git 历史取回),README 现在只保留新的悬浮大纲截图。
新增 tools/verify-docs.mjs 并接入 verify-all.sh(离线验证从三个变四个),把「文档漂移」也变成可复跑的东西:
- 中英 README 里每个相对链接/图片都必须真实存在(悬空引用直接红)
- 徽章的图片与其链接目标都必须是绝对地址(页内锚点除外——npm 会改写图片地址,但不会改写链接)
- 两版互相链接;
docs/下不允许存在无人引用的孤儿资产(这次删图正是这类改动) files白名单必须包含两个 README(npm 用发布物里的 README 渲染)
顺手清掉了遗留的旧昵称「稿本」,并把 tools/README 里的「三个离线验证」更正为四个。功能代码与 0.2.2 相同,本版仍是文档层。
Documentation release: the old dialog screenshot is gone from both READMEs (and from the tree), a new tools/verify-docs.mjs keeps relative links, badges and docs/ assets honest, and stale mentions of the pre-rename nickname were cleaned up.
v0.2.3 — 新截图 + 简介改为「显示大纲悬浮栏」
README 换用作者提供的新截图(docs/outline.png:右上角悬浮按钮 + 大纲 · 15 面板、1 行提问 + 2 行回答预览、当前轮左侧高亮、面板底部停在输入框上方),中英两版都在编辑对话框截图后引用它。
简介统一为 「让 dsh 可以修改 AI 回答内容 + 显示大纲悬浮栏」(英文 Edit an AI answer's content in dsh, and show the outline in a floating panel),package.json 描述与 GitHub 仓库描述同步;原文案里的「常驻大纲侧栏」已不准确,一并去掉。
「目录」一节补上现在的实际行为:提问 1 行 + 回答 2 行预览、纯图片/纯命令的轮次回落成轮次号、面板用满对话栏高度并停在输入框上方、点面板外任意处(或 Esc / ✕ / 再点按钮)收起。
功能代码与 0.2.2 相同,本版只是文档与截图——但 npm 页面用发布物里的 README 渲染,所以要让它看到新截图与新简介,就得发这一版。
Documentation-only release: the READMEs now show the new floating-outline screenshot and the description reads "edit an AI answer + show a floating outline panel".
v0.2.2 — 悬浮大纲更紧凑(去掉轮次行 / 用满栏高 / 点外部收起)
悬浮大纲更紧凑,也更顺手
接着上一条反馈调的几处:
- 去掉「第 N 轮」整行:每行直接是预览内容,一次能多看约两倍的轮次。轮次号没有丢——它留在悬停提示和
aria-label里;只有该轮既无提问也无回答预览时(纯图片、纯命令的轮次,宿主自己的刻度条也是靠轮次号标注这些),才用轮次号占那一行,避免出现空盒子。 - 预览密度:提问 1 行、回答 2 行,行内边距略微收紧——一行约 70px。
- 用满对话栏高度:面板高度不再固定
min(70vh, 560px),而是量出来 = 对话滚动区高度 − composer 高度(读宿主在滚动区上发布的--dsh-composer-height,读不到时退回刻度条同款 152px 兜底),所以既拿到了整栏高度,也不会盖住发送按钮。 - 点其他区域自动收起:
window上捕获pointerdown——面板与其按钮之外的地方按下就收起;面板内部按下(换一轮跳转)不收起;Esc / ✕ / 再点按钮照旧。收起也会记住状态,切会话不会自己弹回来。
验证
bash tools/verify-all.sh --e2e 全绿(18 + 6 + 20 + 7 项)。Browser 半的测试替身这轮又长了一点:tools/lib/mini-react.mjs 现在会把元素挂到 ref 上并实现 contains,所以「点内部不收起 / 点外部收起」这种真实交互也能离线断言;另外新增了「空预览轮次回落成轮次号」和「面板高度按栏高算出」两条断言。
A denser floating outline: no "Turn N" line (the number only stands in for preview-less turns, and stays in the tooltip and aria-label), a one-line question and two-line answer preview per row, a panel as tall as the conversation band above the composer, and a captured pointerdown that collapses it when you press anywhere outside.
v0.2.1 — 悬浮大纲 + 修订分支保留原标题
大纲改成悬浮窗,修订分支保留原标题
两个来自使用反馈的调整。
大纲:右侧栏页签 → 对话区悬浮窗
原来把大纲做成右侧栏的常驻页签:不打开侧栏就看不到,打开了又占掉一整列。这一版改成:
- 对话区右上角一个悬浮按钮(钉在对话滚动区右上角,跟随窗口与侧栏变化),点开是贴着对话列右侧的悬浮列表;
- 列表内容不变:每个已开始的轮次一行(提问 + 回答预览)、当前轮高亮、点击跳到该轮(未载入的轮次先按
turnOutline的seq翻页再滚动); - 悬浮窗不点外部关闭(只在 ✕ / 再点按钮 / Esc 关闭),每个会话记得上次的开关状态——这样才能一边读一边挂着;
- 不再有任何
sidebar.right.*注册;宿主原本那条悬停刻度条我们一行都没改。
实现上是「会话作用域桥接 + 根作用域悬浮层」:conversation.input.dock 里的桥接项渲染 null,负责发布轮次数据与携带会话身份的跳转闭包;shell.overlay 里的悬浮项负责渲染。会话没挂载时它整体消失。
修订:新分支不改标题
- 新分支沿用原标题(连标题一起从提问处 fork 继承),你始终待在「同一条对话」里;
- 只有被取代的旧会话加上
·<修改时间>后缀并归档;反复修订时依次得到T(当前)、T·11:05、T·10:20,互不重名。
验证
bash tools/verify-all.sh --e2e 全绿。新增 tools/lib/mini-react.mjs(带状态与副作用的最小 React 运行时),因此 verify-client.mjs 现在真的跑交互:按钮出现、面板展开列轮次、当前轮高亮、点未载入轮次先 loadThrough(40) 再 scrollIntoView、关闭、会话卸载后撤回;标题规则也从「只有被取代的会话被改名」这一侧断言。
Two adjustments from use: the outline became a floating panel pinned to the conversation's top-right (no more right-sidebar page), and a revision branch now keeps the original title while only the superseded session is stamped with the edit time.
v0.2.0 — 改名 dsh-revise-chan + 发布 npm
改名 + 首次发布到 npm
dsh-manuscript 这个名字在 npm 上已被他人占用(dushaobindoudou/dsh-plugin 里的同名插件),所以从这一版起整体改名为 dsh-revise-chan,并首次发布到 npm。
升级方式(破坏性变更)
包名、profile 里的 bundle 行名、Host 侧服务键都变了,已有安装需要重装一次:
dsh plugin --profile web remove dsh-manuscript
dsh plugin --profile web add dsh-revise-chan # 或 github:shellexy/dsh-revise-chan / 本地路径GitHub 会把旧仓库地址 shellexy/dsh-manuscript 自动重定向到新名字,所以老的 github: 安装仍然能解析(但装出来的包名还是旧的,建议按上面重装)。
这一版的内容
- 包名 / GitHub 仓库名 / npm 名统一为
dsh-revise-chan;Host 侧服务键与 Remote 命名空间从manuscript改为revise-chan(顺带避免与同名 npm 包撞服务名);Browser 半的模块 id、页签名、槽位项 id、locale 命名空间与 CSS class 前缀同步改名。 - 简介前置一句更直白的说明:让 dsh 可以修改 AI 回答内容 + 固定显示大纲。
- 功能不变:回答署名(
模型 | 提供方)、铅笔 + 对话框改回答正文并新建分支(分支名·<保存时间>,原会话·<原回答时间>并归档)、右侧栏常驻大纲页(点击跳到轮次)。 - 可复跑验证仍在
tools/:bash tools/verify-all.sh --e2e(本次改名后在 dsh0.2.0-rc.2上全绿)。
Renamed to dsh-revise-chan (the npm name dsh-manuscript was already taken by another author) and published to npm for the first time. Breaking change: reinstall with dsh plugin --profile web add dsh-revise-chan. Features are unchanged — answer byline, branch-based answer revision, permanent outline sidebar.
v0.1.0 — 稿本 dsh-manuscript
dsh-manuscript(稿本)首个版本:给 DeepSeek Harness 的对话补上 署名、修订、目录。
三个功能
- 署名:每条回答下方的时间行末尾补上
模型 | 提供方,取自这一轮真正被计费的路由(turn-tail.tokenUsage.routes)。 - 修订:复制按钮右边多一支铅笔。点开应用内对话框改回答正文,保存后从这条回答的提问处新建分支——分支里这条回答就是你改写的正文;分支名加
·<保存时间>,原会话标题加·<原回答时间>并归档。 - 目录:标题栏「大纲」按钮打开右侧栏常驻大纲页:每轮一行(提问 + 回答预览),当前轮高亮,点击跳到该轮。
安装
dsh plugin --profile web add github:shellexy/dsh-manuscript
# 或本地: dsh plugin --profile web add ./dsh-manuscript装完重启 dsh web。
兼容性
目标 dsh 0.2.0-rc.2。纯 JavaScript,无构建步骤、无 npm 依赖:Host 半零 import(手工安装 Remote marker 与 typertRemote binding),Browser 半只 require('react')。未在 0.1.x 上验证。
机制一句话
dsh 的日志只追加,且 assistant/message 不能做 surface replacement(既要引用被遮蔽节点、又禁止携带 sourceEventSeqs),所以稿本不改历史:在提问处 fork,然后往还活着的分支里追加一个完整轮次(turn/start(沿用原轮次号)→ step/start → assistant/message(修订稿,沿用原消息 id / provider / model)→ step/end → turn/end)。模型可见历史随 surface 折叠读作 …, 提问, 修订后的回答;压缩摘要、token 计量、轨迹视图都不受影响。
已知边界
- 修订会丢掉原轮次的工具调用链(那些工具属于被丢弃的分支);思考块与图片保留。
- 已被压缩摘要吞掉的轮次无法修订(
message-not-found)。 - 会话标题 80 字节上限:插件先把原标题裁到 62 字节再补时间戳,保证后缀不被宿主截断。
- 大纲的跳转与当前轮高亮依赖宿主为自己的导航发布的 DOM 锚点(
[data-conversation-scroll]/[data-chat-turn]);日后改名只会让跳转与高亮失效。
验证
tools/ 里有可复跑的验证脚本:
bash tools/verify-all.sh # 三个离线验证:宿主半发现与行为、引擎折叠、Browser 半注册与保存事务
bash tools/verify-all.sh --e2e # 再启一个一次性 profile,走真实 Typert Gateway全部通过(18 + 6 + 18 项离线检查,7 项端到端检查);真实浏览器里的视觉未覆盖,需要人眼确认。
First release. Three features — answer byline, branch-based answer revision, permanent outline sidebar — for DeepSeek Harness. Targets dsh 0.2.0-rc.2; plain JavaScript, no build step, no dependencies. A revision never rewrites history: it forks at the answer's human prompt and appends one complete turn carrying the edited text. Reproducible verifications live in tools/ (bash tools/verify-all.sh --e2e).