READMESource: main@d7269abe
dsh-session-autarchive
中文 | English
把长期没动过的会话自动归档。按会话档的最后写入时间算天数,默认 5 天;已归档、置顶(可关)、标记「不自动归档」的都跳过。侧栏会话右键菜单给单个会话加标记,通用设置里改天数。
界面上的三处
| 位置 | 样子 | 作用 |
|---|---|---|
| 会话右键菜单 | 与「置顶会话/重命名/分叉会话/归档会话」并列的一行「不自动归档」 | 点一次标记,再点一次取消 |
| 会话行首 | 被标记的会话多一个小盾牌 | 一眼看出这条不会被自动归档 |
| 悬停卡片 | 一行「不会被自动归档」 | 同上,带文字说明 |
| 通用设置 | 最底一行「自动归档天数」 | 失焦或回车即保存,写的是宿主同一个字段 |
判定与执行
- 判定:扫
$DSH_HOME/sessions/<工作区>/session-*目录,取目录内最新文件时间当「最后活动」;超过阈值(默认 5 天)、未归档、不在保护名单、非置顶(置顶豁免默认开)的就是待归档的会话。 - 执行:宿主每 10 分钟跑一轮(启动 60 秒后第一次,窗口没开也照常跑);浏览器半边每 5 分钟拉一次待归档清单,拿到官方归档通道就当场归档,侧栏立即刷新。
- 归档走官方
archiveSession,不是删数据。归档后的会话在侧栏归档列表里,可以恢复。
安装
dsh plugin --profile desktop add github:taoziliyouchong/dsh-session-autarchive
装完重启 DSH。用别的 profile 就把 desktop 换成你的 profile 名。
发布到 npm 之后也可以:
dsh plugin --profile desktop add dsh-session-autarchive
注意:默认开启,阈值 5 天。 装好就会开始按这个口径归档。不想让它动,先关掉:
# 工具 dsh-session-autarchive,action=config,enabled=false
工具
工具名 dsh-session-autarchive,五个动作:
| action | 做什么 |
|---|---|
status(默认) |
配置摘要、当前待归档会话、保护名单、最近一次执行 |
run |
立刻归档当前待归档会话;dryRun: true 只列清单不动手 |
protect |
标记单个会话「不自动归档」(要 sessionId) |
unprotect |
取消标记 |
config |
改 days(天数)、enabled(开关)、exemptPinned(置顶是否豁免) |
数据文件
都在 $DSH_HOME/session-autarchive/:
| 文件 | 写它的地方 | 说明 |
|---|---|---|
protected.json |
只有 protect/unprotect | 保护名单的唯一来源。自动归档那条定时链不碰它,怎么跑都洗不掉标记。 |
state.json |
定时归档、config | 开关、阈值、置顶豁免、最近一次执行结果;不存名单。 |
audit.log |
名单改动、每轮归档 | 一行一条,标记哪天没了可以对着时间查。 |
写入一律「临时文件 + 改名」,读盘失败会重试——不会把半截文件当成「没有名单」再把默认值写回去。
机制
- 宿主半边注册四条本机路由:
GET /dsh-session-autarchive/api/state、POST .../protect、POST .../config、POST .../run。只接受回环地址(127.*、::1、::ffff:127.*),远程访问一律 403;方法不对 405。 - 浏览器半边用
ctx.slots挂四个座位(菜单行、行首、悬停、设置行),服务探测一律ctx.get,拿不到就跳过,不影响其他入口。 - 不联网、不上传任何内容;判定只用本地文件时间。
已知限制
- 宿主侧没有
workspaceRegistry服务时,只能列出待归档会话、不能自己归档;此时由浏览器半边走官方通道执行。 - 只扫
$DSH_HOME/sessions下的会话档;不在这个目录里的会话不参与判定。 - 不要与另一个自动归档插件同时安装:同一组界面座位只能挂一份,重复安装会出现两行菜单和两行设置。
- 默认开启:装好就会按 5 天阈值归档。想先观察,把
enabled改成false,或把days调大。
开发
源码分两半:
index.js—— 宿主半边(判定、归档、四条路由、工具)src/entry.jsx—— 浏览器半边(菜单行、行首盾牌、悬停说明、设置行、5 分钟快通道)
改过 src/entry.jsx 必须重新打包。lib/client.js 是提交进仓库的构建产物,缺了它界面不会加载:
npm install
npm run build:client # 重新生成 lib/client.js
npm run check:client # 比对新产物与已提交产物是否一致
npm run smoke # 结构 / 组合声明 / 注册 / 鉴权 / 状态读写 / 产物
npm run check # 语法
冒烟全程用临时 $DSH_HOME,不读也不改你的会话数据。打包要求:react 与 react/jsx-runtime 保持 external(由 DSH 客户端模块表提供);产物外壳 window.__ModuleLoader__.load({ id, factory }) 里的 id 必须等于包名。
许可
MIT
No comments yet. Be the first to write one.