DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

v-hiker /

v-hiker/dsh-session-time-absolute

Verified

DSH 插件:把侧边栏会话行的时间从相对时间换成绝对时间(来源与格式可配,带总开关)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@581def59

dsh-session-time-absolute

把 DSH 侧边栏会话行的时间从相对时间(10分钟)换成绝对时间,来源和格式可配。

功能

  • 总开关:设置页顶部的「启用绝对时间」。关掉后侧边栏立刻还原成宿主自己的相对时间(覆盖前记下了原文,逐格还原,不用刷新),本插件不再改任何行。

  • 时间来源

    • 最后活动时间:ctx.sessions.list 的 updatedAt,就是宿主画「10分钟」用的同一字段
    • 创建时间:host 半边扫描 <DSH_HOME>/sessions/<workspace>/session-<id>/ 的目录创建时间,经 /api/session-time-absolute/created 提供给页面
  • 显示格式:占位符模板,默认 YYYY-MM-DD HH:mm

    占位符 含义 占位符 含义
    YYYY 四位年 YY 两位年
    MM 两位月 M 不补零月
    DD 两位日 D 不补零日
    HH 两位时(24) H 不补零时
    mm 两位分 m 不补零分
    ss 两位秒 s 不补零秒

    字面文字原样保留,不做转义;因此 Date 这类词里的大写 D 会被当作占位符。

  • 设置页:设置 → 会话时间,值保存在浏览器 localStorage(键 dsh-session-time-absolute.settings.v1),结构 { enabled, source, format }。旧版存下的设置没有 enabled 字段时按「开」处理,无需迁移。

开销与生命周期

  • 关掉开关后彻底退出:不挂 MutationObserver、不订阅 ctx.sessions.list、不再扫描 DOM。关的那一刻先跑一趟还原,随即 disconnect() + 退订,之后这个插件对页面零开销。
  • 变更过滤:观察器虽然挂在 document.body(subtree),但回调先判断这次变更是否落在 data-row-key="session:<id>" 的行内、或是否新插进来一条会话行;聊天流式输出、输入框、弹窗这些高频改动不会触发重绘。
  • 每帧最多一趟:requestAnimationFrame 合并,一帧内的多次变更只跑一次扫描。
  • 只遍历已渲染的行:一趟扫描是 querySelectorAll('[data-row-key^="session:"]'),即侧边栏当前真正画出来的会话行;不会遍历会话库、不读磁盘、不发请求。
  • 唯一的宿主调用:只有来源选「创建时间」时才 fetch('/api/session-time-absolute/created')——那是宿主半边对 <DSH_HOME>/sessions/** 做一次 stat 扫描,结果缓存 20 秒,并发调用共享同一次扫描;选「最后活动时间」或关掉开关时完全不请求。
  • 开关状态与格式只写浏览器 localStorage。
  • 面向几千个会话:
    • host 侧增量 stat——目录创建时间是不变量,见过的 id 永久缓存,之后扫描只对新目录做 stat,已删除的会话会被摘出字典(1800 个会话实测:首次 19ms,增量 3ms)。
    • host 侧 ETag / 304——内容没变只回空响应,几千条字典不必每 30 秒重传一次。
    • 新目录的 stat 32 路并发,避免几千个 fd 排队;响应只发裸 <id>,不再发 session-<id> 副本(体积减半)。
    • client 侧一趟扫描一次 querySelectorAll、一次 store 快照;isTimeSlot 走单条正则不 split;格式模板的正则提到模块级;写字优先改文本节点 nodeValue 而不是整段替换 textContent(每 60 行约 40µs,行数线性)。

行为边界

  • 只改带 data-row-key="session:<id>" 的行内、class 以 _time 结尾的时间格;工作区行、hover 卡、搜索页不动。
  • 该格 aria-hidden="true" 时(宿主正在显示「待审批」等状态文案)不覆盖。
  • 关开关时不靠「记下的原文」还原,而是按宿主自己的算法重算相对时间:dsh-client-ui-primitives.relativeTime(updatedAt, now) 的分桶(刚刚 / N分钟 / N小时 / N天 / N个月 / N年)+ workspace 词典的 time.* 文案,逐字与宿主一致,因此不会出现「关掉后还是绝对时间」的情况。
  • 判定「这一格是不是我们写的」:优先看标记属性 data-dsh-sta-applied;没有标记(插件升级前旧版本覆盖过的行)就看文本是否正好等于按当前格式算出的绝对时间。两种情况都会还原;宿主自己画的格子不碰。
  • 宿主 React 重渲染把文本改回相对时间时,观察器在下一帧改回。
  • 创建时间模式下若某会话还不在缓存里,会节流补拉一次,期间该行暂时显示最后活动时间。

安装

三种方式,装完重启 DSH(或等主机的 client.js 轮询推送 rebuilt)生效。

1. 从 tarball 安装(分发用,推荐)

dsh plugin --profile desktop add "<插件目录>/dist/dsh-session-time-absolute-0.0.1.tgz"

tgz 里是完整包(package.json、cordis.patch.yml、lib/、README.md),可以在任何机器上装。依赖会记成 dsh-session-time-absolute 0.2.1。

2. 从源码目录安装(本机开发)

dsh plugin --profile desktop add file:<插件目录>/dsh-session-time-absolute

3. 从 zip 安装

把 dsh-session-time-absolute-0.0.1.zip 解压到任意目录,再按方式 2 用该目录安装。

file: 与 tarball 安装都是拷贝:改完源码要重新 remove + add(并升版本号)才会同步到 profile。

重新打包

cd <插件目录>/dsh-session-time-absolute
npm pack --pack-destination ../dist

卸载:

dsh plugin --profile desktop remove dsh-session-time-absolute
—/ 5

No ratings yet

Verified DSH bundle

Commit 581def597aff

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout