jasonjiang9527/dsh-plugins ↗★ 0

dsh-btw

会话 btw:划选历史对话内容 → 引用到当前输入框,或 fork 一次性临时会话针对性提问(离开时自动归档,不污染侧边栏);另提供「新上下文」逻辑分割(按钮 / /newcontext,历史保留但不进模型上下文)与 Provider 高级配置面板 适合需基于历史提问又不污染主上下文的会话,需在使用中选择引用或 btw 会话

Package
dsh-btw
Compatibility
Unverified
Cordis peer range
^4.0.1
Version
0.3.0
License
MIT
Last updated
Sep 14, 2026

Other repositories with this package name

Install

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:jasonjiang9527/dsh-plugins

使用

  1. 在会话历史里划选一段内容 → 选区旁浮出操作条;
  2. 引用提问:输入框出现引用块(保留原草稿),编辑补充你的问题后发送;
  3. btw:切到一次性临时会话「🔍 btw · 」——历史完整、上下文锚定在选中消息处,输入框已预填 btw 引用块,直接提问;
  4. 离开 btw 会话时 → toast「已归档」,侧边栏无残留。
  5. 新上下文:在输入框工具行点「⧉ 新上下文」(或打 /newcontext)→ toast 确认, 此后该会话不再把之前的历史发给模型;继续正常提问即可。
flowchart TD
    A[划选消息区文本] --> B[mouseup 取样]
    B -->|命中| C[浮层:引用提问 / btw]
    C -->|引用提问| D[setDraft 预填引用块]
    C -->|btw| E["sessions.fork(atSeq = 节点 anchorSeq)"]
    E --> F[临时会话改名 🔍 btw · …]
    F --> G[自动切换 + 预填 btw 引用块]
    G --> H[离开且非 running → archiveSession]

Provider 高级配置面板

设置 → Models 页,每个 provider 卡片下方有「高级配置(dsh-btw)」折叠面板。dsh 官方 Models 页只暴露 API key / 显示名 / Base URL / 模型列表等基础字段,其余高级参数只能手改 settings.yaml——本面板把它们全部可视化,读写走官方 RPC(settings.describe / settings.mutate 乐观锁),保存时服务端 schema + serviceable 校验兜底。

可视化字段(llm-pi-ai 命名空间,providers. 下):

分组字段说明
端点与协议displayName / baseURL / apiapi ∈ openai-completions | openai-responses | anthropic-messages
超时timeoutMs / streamIdleTimeoutMs / websocketConnectTimeoutMs毫秒
传输与缓存transport / cacheRetention / reasoningtransport ∈ auto|sse|websocket|websocket-cached;cacheRetention ∈ none|short|long;reasoning ∈ off…max
thinkingBudgetsminimal / low / medium / high推理 provider 的 token 预算
容量与模态兜底defaultContextWindow / defaultMaxTokens / defaultInput未声明模型的兜底值(默认 262144 / 32768 / ["text"]);defaultInput 是模型自己没声明 input 时的兜底输入类型
headers自定义请求头每行 Name: Value;凭据请走 apiKeyEnv,勿写入此处
模型配置modelOverrides. 全字段见下节:name / contextWindow / maxTokens / input(支持的输入类型) / reasoningEfforts / compat
retryPolicymode / maxRetries / retryableCodes / backoff.*normal(可配重试次数与错误码)或 always

模型配置项(modelOverrides.)

「模型配置」分组按模型 id 逐行覆盖目录里的模型,一行一个模型的全部模型级字段 (= dsh-llm-pi-ai schema 的 modelFields 全集):

字段控件说明
name文本框显示名
contextWindow数字框该模型的上下文窗口
maxTokens数字框该模型的最大输出
input多选:text / image该模型支持的输入类型(请求模态)。都不勾 = 不声明 = 继承目录;声明 image 是让自建视觉模型可用的关键,只声明 text 可修正网关并不提供图片的目录模型
reasoningEfforts三态选择继承目录 / false(声明非推理模型,用于剥掉网关服务不了的推理)/ 自定义:文本框每行 等级: wire 拼写(等级 ∈ off/minimal/low/medium/high/xhigh/max,wire 留空 = null)
compat勾选组supportsTemperature / forceAdaptiveThinking / allowEmptySignature / supportsStrictTools / requiresThinkingAsText / supportsCacheControlOnTools

input 是对端点的声明而非探测:pi-ai 不会去问网关接受什么,声明了图但端点拒绝,会在回合中途由 provider 报错。

行为细节:

  • 字段留空 = 继承目录/协议默认(保存时 unset,不写死值);
  • 只对改过的字段生成写入(打开面板时快照做 diff,不把 base 层值钉进 user 层);
  • modelOverrides 是整字段重写,但面板读写的正是 modelFields 全集,因此不会丢掉手写在 settings.yaml 里的其它模型级配置(回归用例见 scripts/check-form.mjs 的 round-trip 断言);
  • route 上若已声明 models 列表,modelOverrides 与之互斥(服务端拒绝),面板会就地提示;
  • 配置冲突(别处同时改动)会明确提示,收起重新展开即可;
  • 凭据仍走官方 API key 表单(credentials seam),本面板不碰密钥。

模型配置项(modelOverrides.)

「模型配置」分组按模型 id 逐行覆盖目录里的模型,一行一个模型的全部模型级字段 (= dsh-llm-pi-ai schema 的 modelFields 全集):

字段控件说明
name文本框显示名
contextWindow数字框该模型的上下文窗口
maxTokens数字框该模型的最大输出
input多选:text / image该模型支持的输入类型(请求模态)。都不勾 = 不声明 = 继承目录;声明 image 是让自建视觉模型可用的关键,只声明 text 可修正网关并不提供图片的目录模型
reasoningEfforts三态选择继承目录 / false(声明非推理模型,用于剥掉网关服务不了的推理)/ 自定义:文本框每行 等级: wire 拼写(等级 ∈ off/minimal/low/medium/high/xhigh/max,wire 留空 = null)
compat勾选组supportsTemperature / forceAdaptiveThinking / allowEmptySignature / supportsStrictTools / requiresThinkingAsText / supportsCacheControlOnTools

input 是对端点的声明而非探测:pi-ai 不会去问网关接受什么,声明了图但端点拒绝,会在回合中途由 provider 报错。

行为细节:

  • 字段留空 = 继承目录/协议默认(保存时 unset,不写死值);
  • 只对改过的字段生成写入(打开面板时快照做 diff,不把 base 层值钉进 user 层);
  • modelOverrides 是整字段重写,但面板读写的正是 modelFields 全集,因此不会丢掉手写在 settings.yaml 里的其它模型级配置(回归用例见 scripts/check-form.mjs 的 round-trip 断言);
  • route 上若已声明 models 列表,modelOverrides 与之互斥(服务端拒绝),面板会就地提示;
  • 配置冲突(别处同时改动)会明确提示,收起重新展开即可;
  • 凭据仍走官方 API key 表单(credentials seam),本面板不碰密钥。