Skip to content

Releases: DDDMUC/dsh-session-relocate

v0.2.4

Choose a tag to compare

@DDDMUC DDDMUC released this 22 Oct 15:25

v0.2.4

新增

  • 会话页常驻的工作区 chip:注册进官方槽 conversation.input.dock(React 渲染,不再是 DOM 注入),外观逐项对齐官方 hero 那条 —— 同一个文件夹图标 / 箭头、同样的圆角 / 高度 / 字号 / hover。
    • 新会话(hero)页不渲染(官方那条还在),只有已开聊的会话才出现;
    • 插件设置页里可选 一直出现 / 悬浮才出现 / 不出现(改完立即生效,不用刷新)。
  • 开了一个子槽 session-relocate.dock:dsh-preset-workbench 的预设胶囊注册进来后,落在工作区 chip 右边,和官方 hero 那排 [工作区] [预设] 一致。
  • 「移动到」菜单行补上图标,并在打开菜单时量官方菜单项自动对齐图标列与文字列。

修复

  • 皮肤插件 @linxin666/dsh-client-ui-skin-center 会把 conversation.input.dock 的每个直接子元素当「小配件」刷底板,本插件的全宽容器因此被刷成一条横贯的玻璃条 —— 现在用更高特异性的复位清掉(没装皮肤时是空操作)。

变更

  • 多选底栏改注册进宿主槽 sidebar.footer.action(见 docs/shared-footer-bar.md):位置/宽度/与页脚其它按钮的关系交给宿主排版,选择期间用量胶囊、账户行、别家插件按钮自动让位;老宿主没有这个槽时回退自绘浮动卡片。

测试:node --test 89/89。

v0.2.3

Choose a tag to compare

@DDDMUC DDDMUC released this 20 Oct 13:04

0.2.3

  • 修复:already-there 只比 cwd、不看注册表归属 —— 目录已经在目标工作区下、但 workspace.json 里没登记的会话(侧栏「未分组」/孤儿),现在会补写归属(回执 applied: "attached",文件不动、不写迁移日志),不再被永久判成「已经在里面」。
  • /describe 的「当前工作区」改为只认注册表归属,另返回 memberOfWorkspaceId / cwdMatchesWorkspaceId;孤儿会话的目标列表会正常给出该工作区,菜单里不再被标成「当前工作区」。
  • 批量移动里 attached 计成功、不进 /move-commit。
  • 测试 83 → 86(孤儿补归属、describe 归属判定、批量 attached 计数)。

v0.2.2

Choose a tag to compare

@DDDMUC DDDMUC released this 19 Oct 15:28

0.2.2

  • 连同子对话一起移动(默认开):搬父对话时,自动把它的子代理会话(parentSession + origin: subagent,递归到孙)一起搬走 —— 文件、header 的 cwd、工作区归属全部跟上;每条子会话独立事务,失败按条隔离。
    • 插件配置页(Plugins → dsh-session-relocate → 配置)里可以关掉,只搬父对话。
    • 不搬子对话时父对话本身不受影响;关掉后旧工作区先别删,子会话日志还在里面。
  • 配置页加「顺手留颗 Star」:和 dsh-free-search 同款的 ⭐ 链接条,指向本仓库。
  • 目标面板「将移动 M / 跳过 K」与浅/深配色修复延续 0.2.1。
  • 测试 83/83。

  • Move together with sub-conversations (enabled by default): When moving a parent conversation, automatically move its sub-agent sessions (parentSession + origin: subagent, recursively down to grandchildren) as well — files, the header's cwd, and workspace ownership all follow along; each sub-session gets its own independent transaction, with failures isolated per item.
    • You can turn this off on the plugin configuration page (Plugins → dsh-session-relocate → Config) to move only the parent conversation.
    • When sub-conversations are not moved, the parent conversation itself is unaffected; after turning it off, don't delete the old workspace right away — the sub-session logs are still inside it.
  • Added a "Leave a Star while you're at it" item to the config page: The same ⭐ link bar as dsh-free-search, pointing to this repository.
  • The target panel's "Will move M / Skip K" and the light/dark color fixes continue from 0.2.1.
  • Tests 83/83.

v0.2.1

Choose a tag to compare

@DDDMUC DDDMUC released this 19 Oct 13:05

0.2.1

  • 多选目标面板预分类:每项标出「将移动 M 个 / 跳过 K 个」;如果全部待移动的对话都已在目标文件夹里,则该选项置灰、点了不发请求。
  • 配色修复:选择面板与多选底栏不再依赖 --dsw-* 主题 token(某些主题下 token 缺失会变成深底深字),改为按页面亮度切浅/深两套显式配色。
    • 浅色:正文 18.29:1、路径 4.97:1
    • 深色:正文 14.18:1、路径 7.2:1
  • 菜单项与副标题改为继承 DSH 菜单配色(同类问题一并修掉)。
  • 测试 80/80。

0.2.0 已在 npm 标记为 deprecated,请升级到 0.2.1。


  • Multi-select target panel pre-classification: Each item is labeled "M to move / K to skip"; if all conversations to be moved are already in the target folder, the option is greyed out and clicking it sends no request.
  • Color scheme fix: The selection panel and multi-select bottom bar no longer rely on --dsw-* theme tokens (missing tokens under some themes caused dark backgrounds with dark text); they now use two explicit color schemes, light and dark, selected based on page brightness.
    • Light: body text 18.29:1, path 4.97:1
    • Dark: body text 14.18:1, path 7.2:1
  • Menu items and subtitles now inherit DSH menu colors (the same class of issue has been fixed as well).
  • Tests 80/80.

0.2.0 has been marked as deprecated on npm; please upgrade to 0.2.1.

v0.2.0

Choose a tag to compare

@DDDMUC DDDMUC released this 18 Oct 16:17

0.2.0

多选批量搬移(与 dsh-delete-session 互操作)

  • 多选底栏里的「移动」直接调用本插件的 moveSelection(ids, { onProgress });返回值严格按合同:canceled? / moved / failed / skipped / total / results[]。
  • 两段式:逐条做文件事务(deferRegistry),最后一次 commit 写工作区归属;N 条只付 2 次注册表写。
  • 多选状态可以直接拖动:抓住任意一条选中的行拖到目标工作区,整批一起搬。

搬得稳

  • 帧级自校验:只重写 header 帧,其余帧逐字节比对;大日志可抽样(回执标注 verification: sampled),verify: full 可强制全文。
  • 冷搬移不再重建全量 header 索引,走 adoptSessions + detachSessions(目标/源各一次 mutate)。
  • 释放写租约改为前几次近乎即时(0/10/25/50/100ms)再退避,回执带 releaseAttempts。
  • 迁移日志 + 启动/桥接调用时的幂等恢复;失败自动回滚,源目录不动。

拖动修复

  • 源工作区每次从 DOM 现读,不再跨拖动缓存 —— 会话搬走后,同一页面里再拖回旧工作区不会被误判成「源分组」。
  • installDrag 改为引用计数:客户端重复 apply 时只挂一套监听,旧的 disposer 先跑也不会把仍在用的拖动监听撤掉。

验证

  • 78 项单测全绿(npm test)。
  • 真浏览器只读检查:scripts/drag-live-check.mjs(分组接管 + 高亮 + 源分组让路)。

v0.1.0 —— 跨工作区搬对话(拖动 + 就地接管)

Choose a tag to compare

@DDDMUC DDDMUC released this 17 Oct 10:39

功能

  • 跨工作区搬对话:侧边栏「…」菜单 → 移动到 → 选目标工作区;也可以直接把对话拖到目标工作区上。
  • 投放目标是整块工作区分组:文件夹行、它下面任意会话行、分组空隙都能接;组内上下拖仍是官方排序,插件完全不抢。
  • 正在回答的对话也能搬:空闲的先释放再搬,正在跑做的就地接管(handoff),不打断这一轮。
  • 关闭却仍被引用的会话、崩溃恢复、逐字节自校验,全部内置。

安装

dsh plugin --profile web add dsh-session-relocate

然后重启 dsh web。

已知限制

  • 正在跑活的那一轮的工具工作目录仍是旧目录(内存 header 冻结),下次打开才切到新目录。
  • 拖动依赖官方的 DOM 行属性与分组结构;DSH 改约定时可用 dragMove: false 一键关掉(菜单那条路不受影响)。
  • 就地接管依赖若干私有内部结构,逐处 feature-detect,探测不到就整体放弃。