返回目录
其他 待识别

dsh-session-plus

Ycet/dsh-session-plus

DSH 会话增强插件:一键打开工作区 · 模型提供商菜单头部 · 选中文本加入对话 / DSH session enhancement plugin: open workspace · provider header · add selected text to conversation

Stars
1
Forks
0
Issues
0
更新
10 天前

PROJECT TOPICS

项目标签

PROJECT README

README

dsh-session-plus

会话增强插件:模型选择菜单顶部实时显示模型提供商 · 选中文本一键以代码块加入输入框

中文 English

License DSH Version

dsh-session-plusDeepSeek Harness(DSH)的会话增强插件,为聊天会话页提供两项轻量增强:

  • 🏷 模型选择菜单顶部实时展示当前请求使用的模型提供商
  • ✂️ 选中任意文本,一键以 Markdown 代码块形式加入输入框开头

[!NOTE] 自 v0.4.0 起,「打开工作区」已从本插件移除。 DSH 0.1.5-rc.1 已内置功能更完整的 Open In… 分体按钮(会话页头部右上角),可在已安装的目录应用中打开当前会话的 workspace;本插件不再重复提供该能力。变更细节见 CHANGELOG.md

📑 目录


✨ 功能特性

1️⃣ 模型提供商头部

特性 说明
菜单头部展示 模型选择菜单最上方注入 提供商:xxx 说明行,一眼看清当前请求走哪家
显示名优先 使用模型目录中的提供商显示名(与菜单内分组标题同源);目录缺失时回退原始 provider id
实时跟随 菜单打开期间订阅会话模型目录,切换模型 / 提供商后头部即时更新
空态占位 目录尚未加载出选中时显示「—」,加载完成后自动变为提供商名
双语文案 随界面语言自动切换(简体中文 / English)
只读无侵扰 纯展示、不可交互、不可聚焦;不触碰自带菜单的行为与样式,/model 弹出选择器保持原样

2️⃣ 选中文本 → 添加至对话

特性 说明
悬浮按钮 聊天页消息区better-sidebar 右侧边栏中选中文本,选区上方居中弹出「添加至对话」;顶部空间不足自动翻转到下方
开头插入 点击后以 Markdown 代码块(无语言标注围栏)插入输入框开头;已有草稿保留在块后(空一行分隔)
末尾空行 插入结果整体末尾保留一行空行,便于后续直接续写
固定三反引号 围栏一律为 ```(产品要求只展示 ```
标准工具栏行为 点击外部 / Escape / 选区折叠 / 消息区滚动即隐藏;滚动停止且选区重新入屏自动恢复;点击后清除选中、隐藏按钮、聚焦输入框
范围克制 仅在聊天页与 better-sidebar 右侧边栏触发;输入框、侧栏、设置页等其余区域不弹按钮
不限制长度 整段原样包裹,无长度上限
flowchart LR
    A["拖选文本(聊天页 / 右侧边栏)"] --> B{"选区位于允许区域?"}
    B -- 否 --> X["不显示按钮"]
    B -- 是 --> C["选区上方居中弹出「添加至对话」"]
    C --> D{"点击按钮?"}
    C --> F["点击外部 / Esc / 滚动"]
    F --> C
    D -- 是 --> E["代码块包裹文本,插入输入框开头"]
    E --> G["末尾保留空行 · 清除选中 · 聚焦输入框"]
    D -- 否 --> H["继续悬浮,等待操作"]
    H --> C

🚀 快速开始

1. 安装

cd <absolute-path-to-plugin> && pnpm install
dsh plugin --profile web add dsh-session-plus@link:<absolute-path-to-plugin>

2. 重启并验证

本插件为 bundle 层插件,安装后需重启 dsh web 才生效:

# 终端中 Ctrl+C 停止后重新启动
npm exec @deepseek-ai/dsh web

重启后打开任意会话:

  • 点击输入框的模型选择按钮,菜单顶部显示当前提供商
  • 在消息区拖选文本,选区上方出现「添加至对话」

[!NOTE] 会话页头部右上角若出现「Open In…」按钮,那是 DSH 自带能力,与本插件无关。

升级与回滚

点击展开

升级:client 层改动刷新页面或 HMR 即生效;bundle / host 层改动需重启 dsh web

回滚

dsh plugin --profile web remove dsh-session-plus
# 重启 dsh web 完成卸载

📖 使用说明

模型提供商头部

  • 位置:模型选择菜单最顶端(菜单开启即出现)。
  • 内容提供商:<显示名>;目录缺失该提供商时显示原始 id;未加载出选中时显示「—」。
  • 实时性:打开期间切换模型 / 提供商,头部立即刷新;关闭菜单即消失,下次开启重新注入。
  • 无副作用:模型列表滚动、推理等级、键盘导航均不受影响;/model 弹出选择器无注入。

选中文本 → 添加至对话

  • 触发:在聊天页消息区(助手回复或用户消息)或 better-sidebar 右侧边栏中按住鼠标拖选文本,松开后选区上方出现「添加至对话」。
  • 插入结果:点击后输入框开头出现 ``` 包裹的代码块;已有草稿保留在块后(空一行分隔);整体末尾保留一行空行。
  • 隐藏时机:点击外部、按下 Escape、选区折叠、滚动消息区即隐藏;滚动停止且选区重新出现在屏幕中时自动恢复;点击按钮后自动清除选中并聚焦输入框。
  • 边界:输入框 / 侧栏 / 设置页内的选中不会触发。

[!NOTE] 围栏一律为三个反引号。选中文本本身含三个反引号时,可能影响该代码块在 Markdown 中的渲染,属已知限制。

支持范围

项目 范围
DSH 0.1.5-rc.1(当前 web profile)
平台 无平台限制(宿主侧不再执行任何原生命令)
浏览器 现代 Chrome / Safari / Edge

🧪 测试

npm test

20 项单元测试,全部通过:

  • 提供商名解析:显示名优先 / 缺失回退原始 id / 空态占位符 / 空分组与空名称容错
  • 代码块插入:围栏固定为 ``` / 开头拼接 / 空草稿 / 末尾空行幂等 / 含 ``` 文本仍用 ```
  • 宿主半区挂载:导出面精确为 name + apply(空实现、不声明 inject)—— 守护「宿主行必须保留」
  • 浏览器半区注册面:仅 conversation.input.overlay 两条注册、locale 剩 3 个键、词典与样式 effect 齐全,且会话头部与 shell.overlay 注册确已消失

🗂 项目结构

dsh-session-plus/
├── lib/
│   ├── client.js   # 浏览器半区:提供商头部 + 选中添加(单 bundle,2 条 overlay 注册)
│   ├── index.js    # 宿主半区:刻意保留的空 apply(让浏览器半区被 dsh-client-modules 发现)
│   ├── insert.js   # 选中文本 → 代码块拼接纯函数(可单测)
│   └── label.js    # 提供商名解析纯函数(可单测)
├── test/           # client / index / label / insert 四组单测
├── cordis.patch.yml
├── CHANGELOG.md
├── package.json
└── LICENSE

🛠 技术栈

类别 技术
运行时 DeepSeek Harness(DSH 0.1.5-rc.1)· Cordis 插件系统
语言 原生 JavaScript(ESM,无构建步骤)
浏览器侧 DSH client runtime(@deepseek-ai/dsh-client-*),单 bundle 注入
宿主侧 无运行时依赖:空 apply 宿主行,保留它是为了让浏览器半区被 dsh-client-modules 发现
样式 DSH 主题变量(--dsw-alias-*),零自定义样式表
测试 Node 内置测试运行器(node --test

🧭 路线图

  • [x] 模型选择菜单提供商头部(实时跟随 + 双语文案)
  • [x] 选中文本 → 添加至对话(悬浮按钮 + 代码块插入)
  • [x] 触发范围限定(仅聊天页 + better-sidebar 右侧边栏)
  • [x] 插入结果末尾空行
  • [x] 移除「打开工作区」(DSH 已内置 Open In… 取代,见 CHANGELOG.md
  • [ ] 选中文本内含围栏时的转义 / 容错处理
  • [ ] 插入位置可选(开头 / 末尾 / 光标处)

📄 许可证

本项目基于 MIT 许可证发布(SPDX: MIT)。

CLASSIFICATION EVIDENCE

分类依据

项目类型待识别
功能分类其他
规则置信度

系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。