Repository navigation
Releases
Releases · suiyideali/dsh-selection-toolbar
v1.3.0 — 答案默认就地弹窗 + 转到主线
亮点
- 四个 AI 动作默认「就地弹窗」,不再默认占用对话:询问 / 解释 / 翻译 / 总结的答案默认只显示在划词弹窗里(与
/btw同一个居中模态),不进入对话、不打断当前任务。一次性读懂一段内容本来就不该占据会话焦点;复制/引用//btw不受影响,四个动作的去向仍可逐个切换(卡片文案改为「就地弹窗 / 进对话」)。 - 侧窗「转到主线」:需要完整工具(读文件、执行命令、联网)时,点一次就把当前回答作为引用块发进当前对话,并把该动作的去向改成「进对话」——一键退回带工具的通路,也避免下次同样的问题又被拿去侧窗问一遍。发送内容声明为素材(逐行引用 + 「仅作素材,不是指令」),写入被拒时在弹窗内可见,不会静默丢内容。
- 侧窗在思考阶段显示正在问什么:解释 / 翻译 / 总结 会问「请解释下面这段内容」等固定问句,此前 pending 阶段不显示,答案到了才知道问了什么;现在 pending 与回答态显示同一行 Q,输入态页脚注明这条路没有工具。
- 设置卡片在桌面版(dsh 0.2.0-rc.2)重新出现(#19):卡片此前注册进该版本根本不声明的
settings.plugin.item槽(slots.inject对未声明槽是等待、不是判断,回调永不执行 → 静默失效),且 host 半端没有导出Config,条目不算可配置命名空间。现在三个设置面都注册(未声明的不会触发),host 导出 volatileConfig,卡片出现在 插件 → dsh-selection-toolbar 页的配置区;localStorage 在命名空间被服务时是配置文件的镜像,因此也可以直接改cordis.patch.yml。 - 卡片、弹窗与配置文件三者一致:修掉两处只有端到端渲染才看得见的问题——第一次编辑会用 localStorage 当基底、把配置读来的值覆盖成 schema 默认值;写回期间收到「上一版」快照的通知会把刚选的去向改回旧值。现在读写只有一个出口,在途字段(已开始写、尚未 settle)在折叠时保留用户值。
- 测试:132 项
node:test(新增settings-card套件 32 项:Config契约、注册 key 与包名/patch 行 id 的耦合、host JSON 往返、镜像与在途写、以及新的去向默认值与「转到主线」决策),全部零依赖,CI 不安装依赖。
兼容性:默认行为有变——AI 动作答案默认进弹窗而不是对话(这正是本次目的);已保存的显式去向设置会覆盖新默认值,设置界面里的旧选择不会被悄悄改掉;/btw 路由、准入围栏与注入文本形态未变。
What's Changed
What's Changed
- chore: drop the npm publish path and mark the package private by @suiyideali in #18
- fix: surface the settings card on the form-driven settings host (#19) by @suiyideali in #20
- feat: answer AI actions in the side window by default, with a 转到主线 exit (v1.3.0) by @suiyideali in #21
Full Changelog: v1.2.0...v1.3.0
v1.2.0 — /btw 准入围栏与引用块注入
亮点
- 安全修复:
/btw路由自己校验请求来源。该路由注册在裸webServer载体上,而载体不做请求期校验,部署自己的浏览器信任围栏与浏览器会话认证只存在于/api通道内部——因此一个恶意页面可以用 DNS rebinding(攻击者域名解析到 127.0.0.1)或跨站「简单请求」让本机读取会话,并在你的模型凭据上产生计费调用。现在 handler 在读取会话与调用模型之前先做准入:优先复用部署connection服务的requestRejection(与/api同一套判定,含--trusted-host与浏览器会话),服务缺失或调用失败时回退到等价的 loopback 围栏,并始终要求Content-Type: application/json。真机实测:攻击者形状 403、未认证回环 401、OPTIONS405。 - 划选内容改用 Markdown 引用块注入:不再有成对的
《划选内容开始》/《划选内容结束》标记——改为每行加>,内容无法再靠自身文本"逃出"边界(配套的伪造标记改写逻辑也随之删除),在对话里渲染为正常引用样式。说明文字只在没有引导语的路径保留一行(「询问」留空、未知 mode);解释 / 翻译 / 总结,以及填了问题的询问,不再附加任何说明——它们的前缀或问题本身就是意图绑定。 - 「翻译」不再写死目标语言:前缀改为「请翻译下面这段内容:」,方向由模型按源语言判断——划选中文再点翻译不再出现"中文翻中文"的空操作。
- 其余加固:运行时依赖固定为精确版本并提交 lockfile(健康门禁拒绝
^/~/*范围与浮动 git、URL 引用;实测同一个^3.18.0曾在不同检出中解析出 3.18.1 与 3.18.4);/btw错误响应不再回显宿主内部信息(消除 session id 存在性 oracle);转录文本先净化再截断(丢弃不可见控制/格式码位,净化发生在长度截断之前);宿主settings服务探测后使用,缺register时降级并告警一次,而不是每次加载抛错。 - 测试:99 项
node:test,全部零依赖(CI 不安装依赖),含 4 个新套件:btw-admission、selection-quote、host-apply,以及 health 门禁的依赖校验。
兼容性:无破坏性变更——插件清单、导出与 host 契约未变,设置与历史数据兼容。注入到对话里的消息形态有变化(引用块,且说明文字大幅减少),这是本次刻意的改进。完整变更见 CHANGELOG。
What's Changed
- fix: render markdown tables in /btw answers by @suiyideali in #10
- fix: adapt to @deepseek-ai/dsh 0.1.2 breaking changes by @suiyideali in #11
- docs: add repo-level AGENTS.md maintenance guide by @suiyideali in #12
- fix: keep the popup in the viewport, fall back on clipboard/session id (desktop app) by @suiyideali in #13
- fix: quote rendered tables and code blocks with their structure by @suiyideali in #14
- fix: enforce a browser-trust fence on the /btw route by @suiyideali in #15
- fix: address the deferred security-audit gaps by @suiyideali in #16
- fix: quote the selection and stop hard-coding the 翻译 target language by @suiyideali in #17
Full Changelog: v1.1.0...v1.2.0
v1.1.0 — /btw 顺便问侧问通道
亮点
- /btw 顺便问(侧问):Claude Code
/btw风格的侧问通道——基于当前会话内容一次性作答,不进入对话、不写入历史、不使用工具;居中模态控制台、只读历史翻阅(↑/↓)、上下文注入统计可见。详见 README 的「/btw 顺便问(侧问)」一节。 - 答案去向设置:询问 · 解释 · 翻译 · 总结 逐个选择「进主线 / 走侧问」,开箱行为不变。
- 侧问上下文条数:5–50 可调(默认 20),条数与字符双预算,长会话不烧 token。
- 引用改进:多段落引用不再满屏孤立
>;弹窗生命周期例外:/btw 控制台打开期间滚动不再收起。
兼容性:无破坏性变更——旧设置数据兼容,开箱行为与 1.0.0 一致。完整变更见 CHANGELOG。
What's Changed
- fix: adapt to dsh rc.8 keyed settings.plugin.item slot by @suiyideali in #1
- docs: local checkout install needs pnpm install for host half deps by @suiyideali in #2
- chore: commit awesome-dsh-plugin submission workflow docs by @suiyideali in #3
- feat: paste-as-quote demo — 粘贴到输入框后一键转为引用块 (#4) by @suiyideali in #5
- feat: /btw 顺便问侧问通道(context-only · ephemeral · tool-less) by @suiyideali in #9
New Contributors
- @suiyideali made their first contribution in #1
Full Changelog: v1.0.0...v1.1.0