中文EN

dsh-baize-session

session装不上npmMIT

把选中的消息从一个对话迁移到另一个对话,并管理工作区的对话——支持归档、还原、删除和跨工作区迁移。

下载量 / Downloads
797
测试时间 / Tested
2026-11-07
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-baize-session

沙箱测试结果

阶段结果
1 安装✗
2 列装—
3 挂载—
4 启动—
第一条错误
dsh: initialized profile web at /home/node/.dsh/profiles/web

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-baize-session

[English](README.md) | 简体中文

English: dsh-baize-session (Baize) is a dsh plugin that moves context between conversations, and manages the conversations of a workspace (archive / restore / delete / relocate).

dsh 插件,围绕对话做两件事:

  • 在对话之间搬运上下文——在你正待着的会话里挑出若干条消息,带到另一个会话:已存在的,或另一个工作区里全新开的。
  • 管理工作区里的对话——在一个标签页里列出全部(含已归档),归档、还原、真正删除,以及迁移到其他工作区。

名字取自白泽——传说中通晓万物的神兽。dsh-baize-rules 注入的是要求,这个插件搬运的是上下文。

  • 挑中的消息会被改写成文本,合成一条 user/message,来源标记为 source.kind='plugin'、plugin='baize-session'——而不是重放事件。任意挑选的历史无法重放:会话存储要求 seed 必须从 seq 0 连续,一段不完整的历史不是合法前缀。
  • 注入块的结尾是 当前工作区是 <路径>。请在此基础上继续。——明确告诉模型这段引用的历史来自别的目录,全程不做任何路径改写。
  • 没有选中内容就不写入:篮子为空时直接拒绝,绝不会注入一个空壳。
  • 所有破坏性操作都有闸门:会话必须先归档才能删除,而归档的会话根本不能迁移。

功能

功能 · 说明

就在当前会话里挑 · 「整理」面板把本会话的消息列成勾选表格。点行看完整正文,点复选框才选中

随处收集 · 每条助手回复旁有 + 按钮,不离开聊天流就能收进来。篮子按会话独立存放

两种落点 · 在选定工作区里新建对话(内容作为该会话的 seed),或追加到当前已打开的会话

天然跨工作区 · 新建会话时以目标工作区为 cwd,因此它落在那个工作区的会话目录下——跨工作区搬运不需要任何路径改写

用名字而不是 id · 选择器显示会话自己的标题(日志里的 session/title),没有标题时退回首行正文;原始 id 放在该行的详情里

按来源标注角色 · user / assistant / context / tool,配色取自官方「轨迹」视图的 kind tag。context 这一档很关键:人类输入和系统注入在 dsh 里是同一个 user/message 事件类型

Token 预算 · 写入前先估算;超过 maxInjectTokens 会带着实测数字拒绝,而不是悄悄截断

工作区管理 · 「工作区」面板列出当前工作区的全部对话(含已归档),每行可归档 / 还原 / 迁移 / 删除,另有多选批量操作

打开中的对话也能迁移 · 还在内存里的会话可以迁移:先 flush,再在协调器的每-id 锁内改写工件,并让后续写入指向新位置

只把真实对话作为目标 · 「整理」面板的目标选择器会过滤掉空会话与已归档会话——与官方侧边栏的 sessionVisible 规则一致

一套运行时,两个入口 · 面板与 /baize-session 命令驱动同一套运行时,两者不可能出现分歧

自己不留任何数据文件 · 插件不在磁盘上保存自己的状态;它改动的东西(会话工件、工作区注册表)都属于 dsh


安装

dsh 插件通过 npm 分发,用 dsh plugin 装进某个 profile。
# 从 npm 装进 web profile(请使用实际已发布的版本号)
dsh plugin --profile web add dsh-baize-session@0.1.2
pm2 restart dsh          # 用 pm2 托管 dsh 时执行
dsh --profile web

peer 依赖(@deepseek-ai/*)由 dsh profile 提供;若有缺失,pnpm 会依照 profile 目录下的 peerDependencies 解析。插件同时声明了 dsh.bundle(通过 cordis.patch.yml 把自己挂进插件树)与 dsh.client(浏览器端),两半都靠它才会加载。

卸载

dsh plugin --profile web remove dsh-baize-session
pm2 restart dsh          # 用 pm2 托管 dsh 时执行

如果 profile 的 dsh.profile.bundles 里还残留这一行,从

$DSH_HOME/profiles/web/package.json 里删掉它再重启一次。除此之外不会留下任何东西:本插件不写自己的数据(见[数据位置](#数据位置))。

不打扰正在运行的 dsh 试装

装进一个单独的 profile,当前运行的 dsh 完全不受影响:

dsh plugin --profile smoke add dsh-baize-session@0.1.2
dsh --profile smoke --dump-config   # 只组装并打印配置,不启动 dsh

本地开发(link)

// $DSH_HOME/profiles/web/package.json
"dependencies": {
  "dsh-baize-session": "link:/home/abc/work/plugin/dsh-baize-session"
}

然后在 profile 目录里 pnpm install,并把 dsh-baize-session 加进 dsh.profile.bundles。


快速上手

打开任意会话,点聊天视图旁边的 整理 标签页。这一个标签页里有两个面板,用标题行上的子标签切换:

[对话] [轨迹] [规则] [整理]          ← 顶层标签栏(本插件只占「整理」)
──────────────────────────────────
 整理 | 工作区                       ← 两个面板

整理 —— 把消息搬进另一个对话

① 目标工作区  [ /home/abc/work/plugin        ▾ ]
② 目标对话    [ 新建对话                     ▾ ]
─────────────────────────────────────────────────────────────
   已选 0 段                              [ 清空 ] [ 迁移 ]
─────────────────────────────────────────────────────────────
   12  USER         消息正文的第一行……                         ← 点行看全文
   13  CONTEXT      Current runtime context. This snapshot…
   14  ASSISTANT    回复正文的第一行……

1. 选工作区(当前工作区默认选中并排在最前;末项可以手填绝对路径)。

2. 选目标对话——新建对话,或该工作区下的任意真实对话。

3. 勾选要带走的条目。点行只是看全文,不会选中它。

4. 点迁移。

工作区 —— 管理这个工作区里的对话

工作区:/home/abc/current/test        [ 全部 7 ] [ 未归档 6 ] [ 已归档 1 ]
─────────────────────────────────────────────────────────────────────────────
已选 0 个                              [ 归档 ] [ 还原 ] [ 迁移 ] [ 删除 ]
─────────────────────────────────────────────────────────────────────────────
☑ 问候与自我介绍     已对话  未打开   09-15 17:58 · 24 条消息   [ 归档 ] [ 迁移 ]
☑ 测试              已对话  进行中   09-20 12:42 · 31 条消息   [ 归档 ] [ 迁移 ]
☐ 已归档的对话       已对话  已归档   09-20 12:42 · 6 条消息    [ 还原 ] [ 删除 ]

操作 · 位置 · 规则

归档 · 行内按钮,或批量条 · 任意对话,打开或关闭的都可以

还原 · 行内按钮,或批量条 · 仅限已归档的对话

迁移到其他工作区 · 行内按钮,或批量条 · 不能是已归档的;打开中的对话也可以迁移

删除(连同磁盘日志一起删) · 行内按钮,或批量条 · 仅限已归档,且需要二次点击确认

点击某一行(按钮与复选框以外的任意位置)会展开它的详情行:完整 session id、创建时间、消息数、工作区路径,以及当前是否打开。

同样的操作也可以纯键盘完成:

/baize-session                     # 等同 info:本会话 id、工作区、消息与篮子计数
/baize-session take 12 14          # 按 seq 收集(从当前会话)
/baize-session list                # 按工作区分组列出所有真实对话
/baize-session to /home/abc/work/led   # 在那里新建一个会话并写入篮子
/baize-session add session-1a2b…   # 或追加到一个已打开的会话
/baize-session drop                # 清空篮子

命令

子命令 · 语法 · 用途

info · /baize-session [info\ · status] · 显示本会话 id、工作区、消息/篮子计数,以及最近 listLimit 条消息及其 seq

take · /baize-session take <seq…> · 按 seq 从当前会话收集消息

list · /baize-session list · 按工作区分组列出真实对话(空会话与已归档只在末尾以计数提示,不列出),带名称与 id

drop · /baize-session [drop\ · clear] · 清空篮子

to · /baize-session [to\ · move] <绝对路径> · 在该工作区新建会话,并把篮子写入作为开场上下文

add · /baize-session [add\ · append] <会话id> · 把篮子追加进一个已存在的会话——该会话必须处于打开(在内存中)状态


对话的类型与状态

「工作区」面板每一行都带两个彼此独立的徽章,因为它们回答的是不同问题:

列 · 取值 · 回答的问题 · 判据

类型

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:3,最后更新 2026-09-23

链接

GitHub · Homepage · npm

同类插件