Skip to content

Releases

v1.4.2

Choose a tag to compare

@cry-flu cry-flu released this 08 Nov 07:32

延迟归档到点撞上还在跑的活,不再可能把它掐断:顺延,最多 60 秒 × 10 次,之后放弃归档、会话原样留在侧边栏。

修复

  • 到点归档不再传 stopActivity。 先问宿主这个会话还有没有活(workspace/session-activity 瀑布),有活就顺延 60 秒重查,最多 10 次;顺延用尽就放弃归档,日志记一行「旧会话一直有活,放弃到点归档」。以前这条路径会直接掐掉正在进行的那一轮。
  • 归档调用改成 archiveSession(fromId) 不带第二参:宿主在这几毫秒里又判活跃会抛 WorkspaceActiveSessionError,插件接住继续顺延,整条路径没有强杀。换新即归档那条(archiveOnRotate)仍是 stopActivity: true —— 那时这一轮已经结束了。
  • 待办条目新增 retries 并随 state.json 持久化;只有归档成功或放弃才删条目,顺延途中不丢。被挡过的那一轮结束后 3 秒补做一次,其余照旧顺延整段保留期。
  • 定时器与 turn/end 补做可能同时到,加 deferredBusy 占位,同一条待办不会归档两次。

测试

新增 test/deferred.test.mjs:3 条 deferredStep 纯函数用例(归档 / 顺延 / 顺延用尽)+ 4 条集成用例(临时 DSH_HOME + 假 ctx 跑真 apply())。npm test 53 pass / 0 fail(原 46 + 新 7)。

文档

  • README / README.en.md / docs/index.md 的延迟归档说明与「已知限制」改成顺延语义。
  • docs/usage-data.md:实测参考表三行显式标成「可复算」,写明口径与复算命令 tools/usage-summary.ps1 -Path <zip>。
  • PROMO.md 里的本机路径换成占位符。
  • .gitignore 修好被注释吞掉的一行,.tmp-release/ 现在真的被忽略。

安装

dsh plugin add github:cry-flu/dsh-session-rotate#v1.4.2

附件

dsh-session-rotate-1.4.2.tgz(47307 B)
sha256 6b5a2e04935adb8bf84f741abdd396cbfefdc9a6f83656d71af2c6f600cfe39c

v1.4.1

Choose a tag to compare

@cry-flu cry-flu released this 08 Nov 02:22

修复 1.4.0 里设置页一个开关的显示条件。

  • 「归档到点时自动跳到新会话」原先只判 autoSwitch:把「归档前先留」填 0 时,这一行照样出现,勾上也照旧无效(此时 archivePlan 返回 'none',根本不会建延迟归档)。
  • 现在改为 autoSwitch || !(deferArchive > 0) 才不渲染(lib/client.js:470、lib/client.js:482),界面、文案、服务端判定三者一致。

1.4.0 没有单独发过版(没打过 tag),这是第一个带此修复的发布。

本次重打包补入(运行时代码无改动):重录的 6 镜头演示 GIF,以及 README 一条使用提醒 —— 延迟归档的保留期内不要在旧会话里继续发消息:顺延只在轮与轮之间重算,跑得比剩余保留期长的那一轮会被 stopActivity 的归档中途掐掉并归档,任务做一半就断。

完整变更见 CHANGELOG.md。

安装

dsh plugin add github:cry-flu/dsh-session-rotate

它只做登记(写 profile 的 package.json 依赖与 bundle 名单)。这个包的 bundle patch 是刻意留空的(挂载条目要带 workspaces 配置,只能写在 profile 里),所以还得在 profile 的 cordis.patch.yml 末尾 insert 一条 dsh-session-rotate,否则设置页里不会出现「会话换新」。四步完整步骤见 README 的安装一节:关键是第 3 步的 workspaces 填你在用的工作区名,第 4 步整个 DSH 换进程重启(重开窗口不算)。

v1.1.0

Choose a tag to compare

@cry-flu cry-flu released this 07 Nov 17:04

换新后不必回旧会话翻最后一条回复。

变更

  • 交接摘要附上上一轮回复全文:以前只取最后 200 字压成一行,常常是半句开头;现在整段照贴(≤4000 字,超出头尾各留一段),换新后在新会话第一条消息里就能读完。
  • 新增 archiveOnRotate(默认 true):设 false 后换新不再归档旧会话,旧会话留在列表里方便回看;设置页对应勾选「换新时归档旧会话」。
  • 交接摘要的「步数」行写明旧会话是否已归档,不再一律写「已归档」。
  • summaryText 提到模块作用域并补测试(27 个用例)。

安装

dsh plugin add github:cry-flu/dsh-session-rotate

完整差异:v1.0.0...v1.1.0

v1.0.0

Choose a tag to compare

@cry-flu cry-flu released this 07 Nov 07:21

长会话越滚越贵。步数到上限时,这个插件在这一轮答完之后(绝不中途打断)自动开新会话、把一份本地拼出来的交接摘要投过去、归档旧会话,再把界面切到新会话。摘要不调用模型,是纯本地模板拼装——省下的是「手动总结 + 复制 + 新建会话 + 记住进度」这四步。

它解决什么

  • 省钱但不额外花钱:交接摘要由本地模板生成(取最近用户消息 + 最后一条回复,最多 16 行),零模型调用。真正计费的只有新会话的第一轮请求。
  • 不打断:只在轮与轮之间判定,正在跑的轮一定跑完。上限是软上限,换新点会在 maxSteps 附近浮动。
  • 可先空跑验证:dryRun 只写日志、不建会话、不归档、不跳转。
  • 不会连环换:minSteps 硬下限 + cooldownMinutes 冷却 + maxRotations 连续触发后自动暂停该工作区(状态持久化在 state.json,重启不清零)。

安装(四步)

  1. profile 的 package.json 里登记依赖和 bundle:
    {
      "dependencies": { "dsh-session-rotate": "github:cry-flu/dsh-session-rotate" },
      "dsh": { "profile": { "bundles": ["...", "dsh-session-rotate"] } }
    }
  2. 让 node_modules 里有这个名字(跑包管理器 install,或 cmd /c mklink /J "<profile>\node_modules\dsh-session-rotate" "<插件目录绝对路径>")。
  3. 在 profile 的 cordis.patch.yml 末尾挂载:
    - insert:
        - id: dsh-session-rotate
          name: dsh-session-rotate
          config:
            defaultMaxSteps: 40
            workspaces:
              - name: my-workspace      # 与侧边栏显示名完全一致
                maxSteps: null          # null / 省略 / 0 / "" = 跟随 defaultMaxSteps
    workspaces 为空数组 = 所有工作区都不生效,用哪个就加哪一行。
  4. 整个 DSH 换进程重启一次。「重开窗口」不会重载插件;重启后 Web GUI 端口会变。

先空跑确认再真用

把要测的工作区加进 workspaces(maxSteps 填你真实在用的值),打开 dryRun,正常干活跨过那个步数,然后看 ~/.dsh/session-rotate/debug.log:命中会记一条 [dry-run] 只记日志不换(同一会话同一档步数只记一次)。

别把 maxSteps 调成 2、3 去真测——换新是真的换,一晚上能刷出一屏空会话。

已知限制(先说清楚)

  • 热重载无效:改插件代码(尤其 lib/client.js)后必须整个 DSH 换进程重启。
  • 上限是软上限:判定只在轮间发生,开预判通常略早,关预判可能明显偏高(一轮能跑掉二十几步)。
  • 新会话第一轮照常计费:摘要本身零成本,但那一轮请求是真的。
  • 只对顶层会话生效,子会话跳过;每个会话只触发一次。

兼容性

只在我本人环境验证过:DSH 桌面版 0.2.1-rc.3(Windows)+ Node v24.18.0,npm test → 23 pass / 0 fail。CI 在 ubuntu + windows × node 20/22/24 跑单测,但不覆盖宿主行为,其他环境请先小范围试用。

注意

不在 npm 上。 包名 dsh-session-rotate 在 npm 上属于另一位作者的同名插件,不是本项目。

大部分代码由 AI 辅助生成,经人工审查与本地测试,但不保证所有环境行为如预期。有问题请开 issue,最想要的是「你的环境里到底能不能正常触发」。


v1.0.0 相对 0.2.1 的变更

版本变更清单

  • 版本号 0.2.1 → 1.0.0;engines.node 声明 >=20。
  • npm test 改为 node --test:自动发现测试文件,不依赖 shell 展开 glob,Node 20 / 22 / 24 都能跑。
  • package.json 补齐 repository / bugs / homepage / author。
  • README:删除全部本机绝对路径,安装步骤改为 github:OWNER/REPO;补充「改完代码怎么让它真正加载」。
  • 新增 .github/workflows/test.yml:Ubuntu / Windows × Node 20 / 22 / 24 跑单测。

已知限制

上限是软上限,真实换新点会在 maxSteps 附近浮动。