DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Greet Signoff — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
G

dsh-greet-signoff

Greet Signoff

开场语与收尾语:每次回复固定开场/收尾,并在上下文接近上限时提示换新会话。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:weifa860504-droid/dsh-greet-signoff#1fdef103e229e3bcc6dac63b7d28656d48eb4a9b
README兼容性版本
开场语与收尾语在对话里的效果,以及输入框上方的会话预算导航条设置页

兼容性与来源证明

Greet Signoff 以 dsh-greet-signoff 发布,当前版本为 1.22.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
github
Registry 更新时间
2026/9/20

版本

1.22.0stable
2026/9/20
1.21.0stable
2026/9/20
1.20.0stable
2026/9/20
查看其余 6 个版本收起版本
1.19.0stable
2026/9/20
1.13.0stable
2026/9/19
1.11.0stable
2026/9/19
1.10.0stable
2026/9/18
1.6.3stable
2026/9/18
1.3.0stable
2026/9/18

相关插件

正在加载相关插件…

最新版
1.22.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
web
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/20
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 memory-context 分类下经过校验的插件。

Memory Plugin@openviking/dsh-memory-plugin适用于 DeepSeek Harness 的 OpenViking 记忆与上下文套件Contextdsh-context用于上下文洞察和管理的 DeepSeek Harness 插件,提供上下文仪表板和上下文命令,帮助了解上下文的构成及其演变过程。Weknora@wxg-prc-cpg/dsh-weknora适用于 DeepSeek Harness (dsh) 的 WeKnora 知识检索工具:通过自有知识库进行语义搜索、文档阅读以及 RAG/代理回答。Memsearch Dsh@zilliz/memsearch-dsh适用于 DeepSeek Harness 的 MemSearch 插件:在多个代理之间共享 Markdown 记忆,支持捕获、步骤前上下文注入、记忆召回技能和技能候选审核面板。

README

dsh-greet-signoff

开场语与收尾语 + 会话预算导航条:让每轮回复都带上你设定的一句开场与一句收尾,
并在输入框上方常驻显示「这条会话还能聊多久」——到线时用颜色和横幅提醒你收尾换会话。
(DeepSeek Harness 插件 · Web 端)

开场语与收尾语在对话里的效果,以及输入框上方的会话预算导航条

这是什么

一个 DeepSeek Harness 的 Web 插件:给每轮回复加上你配置的开场语与收尾语,并在输入框上方常驻一条「会话预算导航条」 —— 这条会话花了多少、还剩多少、多久之后该开新会话,一眼可见。

  1. 固定开场语与收尾语:每次回复的正文第一行是开场语、最后一行是收尾语,文字与样式都在设置里改;改完保存,下一轮回复即生效(不用重启)。
  2. 正文行样式:开场行与收尾行在对话里按各自配置渲染 —— 字号、颜色(含深色档)、字重、动效、形状、填充、边框、阴影、字距、大小写、斜体、自定义图片。
  3. 六格读数:上下文占用 / 本条会话花费 / 已聊时长 / 预算档 / 实测速率 / 到线约还有。窗口变窄自动退回 3 列、2 列,数字不会被挤成省略号。
  4. 预算口径(默认):进度条 100% = 你自己设的「必须换会话」线(默认 7.5 万提醒 / 11 万必须换),不是 100 万 tok 的模型窗口 —— 后者会让一条早该收尾的会话显示成 24%。
  5. 到线就不靠数字了:到黄线整条变黄 + 标签页标题加 ⚠️;到红线整条变红 + 呼吸 + 红底大字横幅「🚨 该开新会话了」 + 标题加 🚨;还能开浏览器系统通知(页面在后台也收得到)。
  6. 一键收尾与换会话:横幅上是「总结要点 / 开新会话 / 切大任务 / 跟随默认预算」。点「总结要点」只把要求写进输入框(不替你发送),你发出后我把摘要用 <<<HANDOFF>>> 标记回给你,界面自己把它落盘成工作区根目录的 HANDOFF.md,新会话开局会先读它 —— 上下文与结论才真的带得过去。
  7. 上下文构成明细:点开横幅里的「上下文构成」,按 token 从大到小列出系统提示词 / 工具定义 / 记忆注入 / 助手历史 / 工具结果各占多少,直接告诉你"砍哪里省钱"。
  8. 花费台账:进度条那行常驻本条会话的 ≈¥0.42;设置页里有今天 / 近 7 天 / 最贵几条会话的账。全部读本机文件(session_projcache 上下文投影、dsh-usage/usage-ledger.json),不联网、不外发。
  9. 四档预算模式:日常 7.5 万/11 万、大任务 15 万/20 万、省着聊 5 万/7.5 万、自定义。优先级:本会话临时档 > 全局默认档 > 内置默认;三个入口都能切(进度条行里的 🎯 胶囊 / 到线横幅按钮 / 设置页)。
  10. 场景与文案池:文案池每轮从一池句子里挑一句(随机或按顺序);「场景」把整份设置(文案+样式+阈值+池子)存成快照,工作/生活/深夜一键整包切换;还能按工作区目录前缀自动换文案。
  11. 动态变量与自检:固定行里可用 {date} {weekday} {daypart} {time} {model} {count} {elapsed} {tokens},由服务端每轮填真实值;设置页「诊断 → 跑一遍自检」把配置、文案、贴样式、进度条、连接自愈、两侧版本一次问到底。
  12. 连接自愈:dsh web 重启会换令牌,已打开的页面会卡在"自动重连中"。本插件带看门狗:连续 30 秒连接异常、服务端可达(/ 仍 200)、且输入框没有草稿时自动重载一次;服务真挂了不动作,本标签页每小时最多 3 次、间隔 ≥60 秒。

配置默认存在插件目录里的 config/greet-signoff.json(本机即 E:\dsh-greet-signoff\dsh-greet-signoff\config\greet-signoff.json)——插件搬到哪、配置就跟到哪。想放别处就设环境变量 DSH_GREET_SIGNOFF_HOME(支持相对路径,按插件目录解析);插件目录里还没有配置、而旧的 $DSH_HOME/greet-signoff.json 存在时,会继续用旧位置。改完保存下一轮回复即生效,不需要重启。

为什么需要它

  • 没有它:每次想让 AI 的开场/收尾保持一致,只能自己写提示词、或者每次手动粘贴同一句;样式(颜色/字号/动效)更是完全没法统一。
  • 上下文快满时:你往往是在"回答突然变差/被截断"之后才意识到该开新会话了——这个插件把"还剩多少"变成常驻可见的状态,并且用颜色和横幅说话,不要求你去心算百分比。
  • 与相邻方案的区别:
    • 与「写一段固定提示词」相比:文案与样式都是可配置项 + 页面渲染——文案进提示段、样式由浏览器半给对话里那两行贴类渲染,两边共用同一份配置。
    • 与 dsh-context(上下文仪表盘 / context 命令)相比:本插件做的是输入框上方那一条常驻导航条,不采集、不落库、不开面板;两者可以共存,导航条挂在 conversation.input.dock,dsh-context 用的是 conversation.input.overlay 与右侧栏,互不遮挡。
    • 与 dsh-gold-capsule 互斥:那个插件用 !important 把标题里的行内代码渲染成金色胶囊,会把本插件设置的字色/底色/边框/形状/动效压掉。固定行请保持纯文本一行,两个插件只留一个负责首行样式。

安装

插件以 npm 包 / git 仓库为分发单元。装完必须重启 dsh web(组合层变更不会热加载)。

# 从 GitHub 安装(仓库名固定为 dsh-greet-signoff,用户名换成你自己的)
dsh plugin --profile web add github:weifa860504-droid/dsh-greet-signoff

# 或从本地目录安装(开发调试用)
dsh plugin --profile web add <本地包目录的绝对路径>

装完重启 web:重启后打开任意会话,输入框上方应出现导航条;设置 → 开场收尾 里应出现配置页。

用起来是什么样

  • 对话里:每条回复第一行渲染成你配的开场样式(默认橙色 16px、脉冲动效、胶囊底),最后一行渲染成收尾样式(默认紫色 18px、霓虹动效、直角)。中间正文不受影响。一条回复被工具调用拆成多个块时,两行也各归各位(按文案身份分配样式)。
  • 输入框上方(导航条):从上到下是 ① 六格读数 ② 贯通进度条 + 车标 + 百分比气泡 ③ 到线横幅(未到线时不显示)④ 上下文构成明细(展开时)⑤ 时间行 ⏱ 已聊 42 分 · 实测 ~1.8k tok/分。鼠标悬停时进度条上浮出明细提示。
  • 占用格自己会解释:悬停「上下文占用」写清采样口径 —— 它是"发下一条消息时预计要喂进去多少 token"(上一次请求真正喂进去的 prompt + 那次采样之后界面新增的部分),只在每轮请求结束后刷新一次、天然滞后一轮,不是屏幕上现在有多少字;预算档下顺带写出黄线/红线与本次读数。
  • 到线时:黄条/红条 + 标题前缀 + 红底横幅(可开系统通知)。横幅上的按钮就是下一步动作:总结要点(把交接要求填进输入框,界面自动落盘 HANDOFF.md)、开新会话、切大任务、跟随默认预算。
  • 设置页:左侧菜单栏「开场收尾」一个入口;开场语 / 结束语两个标签页,改动自动保存,右侧显示「已保存 · 下一次回复即生效」。
  • 预览吸顶:标签页、保存状态与实时预览合并成一条吸顶头部 —— 预览同时显示开场与收尾两行(正在编辑的那行高亮),往下调参数时它一直停在屏幕上方。
  • 分区折叠 + 快速跳转:文本 / 字体与颜色 / 外观样式 / 上下文提醒与匹配 / 进度条外观 / 场景 / 花费与上下文 / 诊断 各自是一张可折叠卡片,默认只展开高频的几个;顶部有快速跳转条(一键展开并跳过去)。
  • 一键外观(16 套):财神金 / 极简灰 / 大字醒目 / 霓虹赛博 / 樱花 / 复古打字 / 海盐蓝 / 森林绿 / 紫罗兰 / 描边风 / 高亮笔 / 引用块 / 细下划线 / 墨绿终端 / 霓虹粉 / 纸质标签 —— 点一下即套用,只改外观,不动文案与图片。
  • 30 种动效:淡入 / 滑入 / 落下 / 缩放 / 翻转 / 光泽扫过 / 高光划过 / 呼吸 / 心跳 / 发光 / 霓虹闪 / 闪烁 / 弹跳 / 抖动 / 摇晃 / 摆动 / 倾斜 / 漂浮 / 旋转 / 波浪 / 彩虹流动 …… 外加 4 种逐字动效(逐字跳动 / 逐字波浪 / 逐字打字机 / 逐字彩虹;emoji 不会被拆散)。
  • 长尾选项不挡路:配色(33 套)、动效(30 项)、车标(31 款)默认只列常用 6 项,末尾那条「▾ 显示全部 / ▴ 只看常用」同一个用法 —— 选择成本下来了,功能一个没少。
  • 可搬走:设置页底部可「导出配置 / 导入配置」(JSON);「撤销上次保存」一键回退。
  • 出问题能自查:设置页「诊断」显示配置文件路径、贴样式器运行次数与耗时、命中行数、宿主半/浏览器半版本、规则文本与会话识别。

设置页

能力面

能力面说明
Prompt 段向系统提示注册「开场与收尾」规则,每次组装提示时实时读取配置,因此改文案立即生效
配置接口GET /api/greet-signoff 读真值、POST /api/greet-signoff 写整份配置(设置页用的就是它)
资源接口GET /api/greet-signoff/asset/<name> 回自定义图片;GET /api/greet-signoff/emoji-index 回表情中文名/关键词索引(首次展开表情框时才取)
会话接口GET /api/greet-signoff/session?sessionId=<id> 回会话创建时间与上一轮统计;GET /api/greet-signoff/rule-text 回"这一刻模型会看到的规则文本",自检用
明细接口GET /api/greet-signoff/context?sessionId=<id> 回上下文构成明细 + 速率/每轮涨量(pace);GET /api/greet-signoff/cost?sessionId=<id>&days=7 回花费台账
落盘接口POST /api/greet-signoff/handoff 写工作区根目录的 HANDOFF.md(已存在先备份 .bak;filename/cwd/text 三重校验)
数据来源只读本机 session_projcache(上下文投影)、dsh-usage/usage-ledger.json(台账)与配置目录;不联网、不外发、不建库
设置 UI只注册 settings.section(左侧菜单栏「开场收尾」一处入口)
状态 UI注册 conversation.input.dock,在输入框上方渲染导航条(六格读数 + 进度条 + 横幅 + 时间行)
深浅判定综合 body[data-ds-dark-theme]、根元素 color-scheme、系统偏好与页面底色亮度,结果写到 <html data-gs-dark>;dark-only 皮肤也能正确套用深色档颜色
通知可选的浏览器系统通知(到线时发;需在设置页打开并向浏览器授权)

本插件不注册模型工具,也不发布宿主服务(仅消费 systemPrompt、webServer 两个宿主服务与浏览器端的 slots)。

配置

行级可配项(开场、结束语各一套,共 19 项)

字段含义默认(开场 / 结束语)
text文案(写进回复正文,可含表情)👋 你好,我是 DeepSeek Harness 助手。 / ✅ 以上,随时叫我。
image / imageHeight自定义图片(≤300KB,PNG/JPEG/GIF/WebP)与高度空 / 22
fontSize字号 10–4014 / 14
fontWeight字重(400/500/600/700/800)600 / 600
color文字颜色(空=跟随主题)空 / 空
colorDark深色主题下的文字颜色(空=沿用 color)空 / 空
animation / animSpeed动效(30 种,含 4 种逐字)与倍速 1–4none / 1
shape / radius形状(10 种:pill/round/soft/rect/card/tag/underline/highlight/blockquote 等)与圆角 0–999none / 12
padY纵向内边距 0–245 / 5
fill / bgColor填充方式(none/faint/theme/solid)与背景色none / 空
bgColorDark / borderColorDark深色主题下的背景色 / 边框色(空=沿用浅色值)空 / 空
borderWidth / borderColor边框 0–6 与颜色0 / 空
shadow阴影(none/soft/medium/strong/glow)none / none
letterSpacing字距 −2…120 / 0
caps大小写(none/upper/lower)none / none
italic斜体false / false

允许值都有白名单,非法值会被自动回落到默认;未知字段会被丢弃。

全局可配项

字段含义默认
warnPercent黄色告警阈值(「占模型窗口」口径用)70
criticalPercent红色告警阈值(自动保证大于黄色)85
pricing计价口径:未命中输入 / 缓存命中输入 / 输出(元每百万)1 / 0.02 / 4
pool文案池:{ enabled, mode: "sequence" | "random", greeting: [], signOff: [] }关闭
scenes场景快照列表(每项是整份设置的快照,含文案、样式、阈值、池子)[]
bindings按工作区绑定(目录前缀 → 文案/样式覆盖)[]
matchMode固定行匹配方式:exact 逐字相同 / loose 宽松(忽略大小写、空白、全半角与首尾标点)/ fuzzy 近似容错loose
onlyAssistant只给助手的回复贴样式;false 时整段对话都贴true
legacyLines旧文案兼容表:[{ text, style: "greeting" | "signOff" }],最多 30 条,只影响页面渲染,不写进提示词[]
switches三个独立总开关:{ greeting, signOff, contextBar }(见下一节)三个都开

旧版本里的布尔字段 looseMatch 仍可读(false 等价于 matchMode: "exact")。

三个总开关(v1.22.0)

设置页最顶上是一排苹果(iOS)样式的滑动开关,三个功能各管各的:

开关关掉之后
🚦 上下文卡输入框上方那整块都不出现:进度条、六格读数、上下文构成明细、到线红底横幅、标签页标题的 🚨 前缀一起消失。纯页面显示,不影响模型,随时开回来。
👑 开场语提示段里不再要求「每次回复以开场语开头」——模型之后就不写这一行了。文案与样式都留着。
🏁 收尾语同上,改的是「结尾那一行」。
  • 两个文字开关改的是写进系统提示的那段规则,所以是下一次回复生效(不用重启 DSH:宿主半每轮组装提示时都会重读配置)。
  • 上下文卡开关是页面侧的:拨完自动保存(1.2 秒),进度条立刻整块挂上或卸下。
  • 配置里只认明确写成 false 为「关」;缺字段、写成字符串、写成 0 一律当「开」——手改坏配置也不会让整块功能凭空消失。
  • 三个都关也不会报错:提示段整段不渲染,页面只留下干净的输入框。

固定行是怎么被认出来的

设置页里写的那句开场语/收尾语会进提示段,模型照原样输出;页面上由浏览器半按文本比对给那一行贴样式类:

  • 三档匹配(设置 → 开场收尾 → 上下文提醒 → 匹配):
    • 逐字相同:只认归一化后完全相同的文本;
    • 宽松(默认):先去掉零宽字符、压缩空白,再做 Unicode NFKC(全角→半角)、把中文标点折叠成 ASCII(,→,、。→.)、去掉所有空白、削掉首尾的引号/括号/星号/井号与句读,并统一小写;
    • 近似容错:在宽松的基础上再算编辑距离,相似度 ≥ 86% 且长度差 ≤ 25% 才算命中(例如只差一个字、一个数字)。
  • 多行文案:文案里可以换行;如果宿主把换行渲染成两个段落,两段会依次比对、都贴上同一套样式。
  • 动态变量:{date} {year} {month} {day} {weekday} {daypart} {time} {model} {count} {elapsed} {tokens};宿主在写提示词时就解析成具体文字,页面渲染时按同一套规则解析(带 {daypart} 时页面会把所有时段都当作候选,正好跨过时段边界也不会掉样式)。
  • 只贴助手的回复(默认开):宿主给每个消息块打了 data-chat-flow-kind,用户消息、工具结果、思考面板一律跳过;认不出的宿主版本会退化成"整段都贴",不会整片失效。
  • 候选标签是 p / li / div / span / h1–h6 / code,因此模型偶尔把固定行写成 # 标题、**加粗** 或用反引号包起来也能命中;
  • 同一行同时命中外层与内层时只保留最外层;一条回复被工具调用拆成多个块时,按"文案身份"分配样式(命中开场文案=开场样式),只有两行文案其实是同一句时才退回按位置区分。

模型若把固定行整段改写(换词、多字少字),那就不再是"同一行",不会贴样式——这是有意的:宁可不动,也不能把正文里的普通句子误判成固定行。

进度条外观偏好(存浏览器本地,不进配置文件)

项说明
粗细进度条高度(px)
配色33 套,分 6 组:经典与自然、柔和粉彩、缤纷高饱和、冷色科技、浓郁对比、灰阶。每套由三个锚点色组成(安全色 / 黄阈值色 / 红阈值色),整条色带按两个阈值连续插值。默认只列常用 6 套,末尾「▾ 显示全部(33 套)」展开
小车31 款车型表情,或上传自定义图片(可翻转、可调大小与朝向)
时间显示默认开:⏱ 已聊 42 分 · 实测 ~1.8k tok/分,每 5 秒重算(页面在后台时不重算);拿不到读数时会标「上次读数 X 前」,不会让你以为进度条坏了
口径默认「按你的预算线」:100% = 你设的「必须换会话」线。切「占模型窗口」即回到旧口径(那个 24% 看着安全、其实早该换会话)
预算模式四档:日常 7.5 万/11 万、大任务 15 万/20 万、省着聊 5 万/7.5 万、自定义(用手填的两个数)。优先级:本会话临时档 > 全局默认档 > 内置默认
黄线 / 红线(自定义档)选「自定义」时生效的两个分界 token 数,默认 7.5 万 / 11 万。到黄线变黄 + 标题加 ⚠️;到红线整条变红 + 呼吸 + 红底大字横幅 🚨 该开新会话了 + 标题加 🚨
窗口窄时六格读数按 6 → 3 → 2 列自动回落;「紧凑 / 纯文字」形态把时间并进同一行文字

预算模式(=「大任务模式」)怎么用:小任务用「日常」,一次大改造/长调研切到「大任务」抬线,免得日常线一直报红、提醒变成噪音。三个入口:

  1. 进度条行里的 🎯 小胶囊(主入口):点一下按 日常 → 大任务 → 省着聊 → 跟随默认 轮转。 它改的是本会话临时档(存 gs.signoff.mode.<sessionId>,只存在你浏览器里),不动设置页里的默认档;开新会话即失效。
  2. 到线横幅上的按钮:红线横幅里多了「切大任务」(一键抬到 15 万/20 万)和「跟随默认预算」(清掉临时档),正好在"要不要开新会话"这个决策点上。
  3. 设置页「进度条外观 → 预算模式」:改的是全局默认档,一条命令管所有会话。

为什么默认不按"模型窗口"显示:分母用模型窗口(本机 100 万 tok)时,一条已经 24.9 万 tok、早该换会话的 会话在界面上只有 24%,看着很安全 —— 它回答的是"离塞满模型窗口还有多远",不是"离你该换会话还有多远"。 预算口径把 100% 定义成你自己的红线,超了就写"超 N 倍",并且配大横幅 + 标签页标题前缀, 不用读数字就知道该开新会话了。

「已聊多久 / 实测速率 / 到线约还有」是怎么来的(v1.20.0,都要真实数字,不做摆设):

  • 已聊多久 = 活跃时长:按会话 id 记账(存 gs.signoff.active.<id>),每 5 秒心跳累加,两次间隔超过 5 分钟算断档、不累加 —— 合上电脑/去开会的时间不会被算进"已聊"。恢复一个旧会话从 0 起算;只有刚新建(创建时间距今 <30 分钟)的会话才用"创建到现在"当种子。
  • 实测速率:由宿主半从 session_projcache 的上下文时间线算 —— 45 分钟窗口内首末两点的 prompt 差 ÷ 时间差 (跨度不足 20 秒或没有增长时为 null);窗口内点不够就退回"最后两条"并标注来源。所以刚打开页面就有数, 不用先在这个标签页里盯出一串采样;浏览器半只在拿不到时有采样兜底。
  • 每轮涨量 / 到线约还有:按 turn 分组的"轮末 prompt 差"(跳过负值;DSH 会裁剪工具结果,所以末轮净增 ≤0 时取"轮内峰值 − 上一轮末"兜底)。 token 占用只在每轮请求结束后更新,所以这两格本质是"一轮跳一次"。
  • 不做外推:不预测"还能聊多少分钟"这类会被猜偏的数字;只报确实发生过的速率与按轮次的粗口径估算。

这些偏好存在浏览器 localStorage(键 gs.signoff.ui),按浏览器生效,不进全局配置。

花费与上下文(v1.20.0,全部读本机文件,不联网)

  • 进度条那行的 ≈¥0.42:本条会话累计花了多少钱。金额按计价口径算 (默认未命中输入 ¥1/M、缓存命中输入 ¥0.02/M、输出 ¥4/M,可在配置里改),数据来自本机上下文投影与 $DSH_HOME/dsh-usage/usage-ledger.json(两个时段桶都累加,并与台账自带金额对账)。 顺带记住这条:输出价是缓存读的 200 倍 —— 少让我啰嗦,比省那点上下文更省钱。
  • 「▸ 上下文构成」:点开列出系统提示词 / 工具定义 / 记忆注入 / 助手历史 / 工具结果各占多少 token 与占比; 按 token 降序、最多 12 条,超出并成「其它」,另有"最占地方的单个片段"top 6。前几名就是能砍的地方。 每一行有自己的颜色,红底横幅里也分得清。
  • 设置页「花费与上下文」:今天 / 近 7 天 / 最贵几条会话的台账,外加几个开关(显示花费、明细默认展开、 档位建议、到线系统通知)和「显示诊断分区」。
  • 档位建议:到线时按客观计数说一句"该抬线 / 该降档",按钮就在旁边 —— 只提示,不自动改档。
  • 到线系统通知:页面在后台也能收到;需在设置页打开,并向浏览器授权(拿不到权限会如实说明)。
  • 交接包:横幅上的「总结要点」要求把摘要落盘成工作区根目录的 HANDOFF.md(已有同名文件会先备份 .bak), 宿主半的提示段会在新会话开场时提示先读它 —— 换会话时上下文才真的带得过去。
  • 宿主半是旧版时:以上整段显示成"读不到",进度条本体照常工作,不会因为缺数据出问题。

接口与权限

webServer 注册的是同源接口:浏览器端用页面自身的登录态访问,因此你不需要手填 token。

# 读配置真值(loopback 本机访问免 token;从别处访问需带页面的 Authorization)
curl http://127.0.0.1:3080/api/greet-signoff

# 写整份配置(JSON,字段同上)
curl -X POST -H "Content-Type: application/json" \
     --data @greet-signoff.json http://127.0.0.1:3080/api/greet-signoff

# 进度条的时间功能要的数据:本会话创建时间(毫秒时间戳)+ 上一轮统计
curl "http://127.0.0.1:3080/api/greet-signoff/session?sessionId=<会话 id>"

# 上下文构成明细(这些 token 是谁占的)+ 速率 / 每轮涨量
curl "http://127.0.0.1:3080/api/greet-signoff/context?sessionId=<会话 id>"

# 花费:本条会话 / 今天 / 近 7 天 / 最贵的几条
curl "http://127.0.0.1:3080/api/greet-signoff/cost?sessionId=<会话 id>&days=7"

# 把交接摘要落盘成工作区根目录的 HANDOFF.md(要带绝对路径 cwd)
curl -X POST -H "Content-Type: application/json" \
     --data '{"cwd":"E:\\work\\proj","filename":"HANDOFF.md","text":"……摘要正文……"}' \
     http://127.0.0.1:3080/api/greet-signoff/handoff

接口只在 DSH 自己监听的地址上提供,不额外开端口、不对外发包;配置与图片资产都落在本机 (<插件目录>/config/greet-signoff.json 与 <插件目录>/config/greet-signoff-assets/,详见上文「配置在哪」)。唯一的写操作是 POST /handoff(写摘要文件)。 这也意味着:能在这台机器上跑的程序(包括其它本地脚本)可以读写这份配置——这是 DSH 本机免认证的既有设计,请按"本机自用"来理解它。

已知限制

  • 读数天然滞后一轮:占用/花费/速率都来自"上一次请求结束"后的投影,所以你刚发出去的那句话要等这轮答完才计入; 轮内数字不动是设计使然,不是卡住。
  • 新开的页面一开始可能是"未知":投影要等这个页面见过一次读数(或宿主半把数据递过来)才成立;此时占用格显示 —, 到线横幅不会显示(未到线也不显示)。发一条消息后就有数。
  • 宿主半旧版时功能降级:/context、/cost、pace 这些由宿主半提供;宿主半没重启到新版时,花费/构成/速率整段显示"读不到", 进度条本体与固定行样式照常工作。
  • 依赖宿主 DOM 结构:对话里那两行是"匹配文本后贴样式类"实现的——按消息块判定并排除思考/推理面板。宿主若改动消息的 DOM 结构或分块方式,可能出现"样式没贴上"或"贴错行";升级宿主后建议扫一眼对话里的两行。
  • 模型整段改写固定行时不贴样式:匹配是"同一句话"级别,不是"意思相近"级别(见上文)。真遇到了,可把「匹配」切到「逐字相同」来确认,或把开场语写得更独特一些。
  • 两行文字相同时:如果你把开场语与结束语设成同一句话,两行样式仍会按位置各自生效(首行=开场样式、末行=收尾样式),但文字看起来一样。
  • HANDOFF.md 会被后来的交接覆盖:同一目录多次交接时,新摘要覆盖旧的(覆盖前自动备份同名 .bak)。交接完就接着开新会话,别拖着。
  • 装完要重启:本包声明了组合层(dsh.bundle.patch),安装/升级后需要重启 dsh web;页面刷新不够。 浏览器半(client.js)的改动刷新页面即可;宿主半(index.mjs,含 /session、/context、/cost、/handoff)必须重启。
  • 深浅判定是启发式:四条证据都不成立时(皮肤既不声明 color-scheme、底色又是透明或图片)会判成浅色。 设置页「诊断 → 健康自检」里能看到四条证据的实测值,配色不对时先看那一行。
  • 单份配置:所有 profile/会话共用同一份 <插件目录>/config/greet-signoff.json;进度条外观偏好与预算档(本会话临时档)按浏览器本地保存。
  • 多标签页:配置在打开页面时读一次,切回标签页/重新聚焦时补读;时长记账有互斥锁,只有一个标签页在计时。
  • 平台:浏览器半仅在 Web 端注册 UI;宿主半(提示段与配置接口)不依赖平台。
  • 它会改写输入区上方的一处布局:导航条挂在 conversation.input.dock,宿主会给该插槽的直接子元素套"附属卡片"样式(白底/圆角/阴影)。本插件已把自身容器设为透明、把对齐缩进放到内层元素,避免多余白框;若宿主再改这条样式,可能又出现视觉偏差。
  • 数据安全:配置保存是原子写(.tmp + 改名),并保留上一份 .bak;解析失败时会回落到默认值并在宿主日志里打一条 config unreadable,此时请从 .bak 手工恢复。

插件管理

已装插件的启停与安装态,用 dsh 自带的命令管理即可:

dsh plugin --profile web list        # 查看当前 profile 装了哪些插件
dsh plugin --profile web remove <包名>  # 卸载(装完同样重启 web)

若要临时停用本插件而不卸载:在 profile 的 cordis.patch.yml 里给它加一行

- id: greet-signoff
  disabled: true

(该文件是热生效的,改完不必重启。)

版本与更新

当前版本 1.20.0。版本历史见 CHANGELOG.md。开发/发版前的自检:

node --test test/                      # 93 项纯函数与数据解析单测(把 client.js / index.mjs 用最小桩加载进 Node)
node scripts/verify-manifest.mjs       # 元数据、发布物清单、占位符、体积阈值、CHANGELOG 版本一致性
npm pack --dry-run                     # 预览真正会被打包的文件

发版流程(含 CI 启用与 npm 发布步骤)见 docs/RELEASING.md。

README 里的两张预览图(docs/preview-chat.png、docs/preview-settings.png)按插件自身的类名与 CSS 规则还原渲染, 用于展示当前版本的真实布局;数值为示意值。改动 UI 后请同步重拍。

许可

MIT