dsh-session-conductor

sessiontested: passnpmMIT

Session management for DSH: archive/restore, batch & conditional delete, AI auto-rename, interrupted-session auto-resume, workspace grouping, undo last message, repair damaged session logs (seq-gap/EIO/dual-format), value analysis and full-text search — plus plan/closing template injection (system p

下载量 / Downloads
4,482
依赖体积 / node_modules
1.19 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

Install

dsh plugin --profile web add dsh-session-conductor

Sandbox test results

StageResult
1 install✓
2 list✓
3 mount✓
4 boot—

Four stages run in an isolated sandbox: install (network on) → list → mount → boot (last three with no network).

README

dsh-session-conductor

DSH 会话管理增强插件:面板管理会话、批量删除与回收站、损坏修复、自动续跑、模板注入,以及成员(子代理)的模型/权限/换名管理。

功能

功能 · 做什么 · 入口

会话管理面板 · 五视图(全部/已归档/活跃/回收站/说明);归档、删除、撤回、置不活跃、释放空闲 · 侧边栏「会话管理」

回收站 · 删除只打标记,可单条/多选/按批次还原;到期或一键清空才真删盘 · 面板「回收站」

自动重命名 · 回合后分析内容,主题偏离时生成新标题 · 面板逐会话开关

自动续跑 · 识别非人为中断并继续原任务,失败 30s 重试 · 面板逐会话开关

会话分组 · 按工作区分组显示;分组下新建会话 · 设置 → 插件 → 会话分组

撤回最后一条消息 · 删除最后一条用户消息及整轮回复(预览 + 二次确认 + 备份) · 面板按钮

撤销到指定消息 · 撤销某条用户消息及其后全部内容:支持按 seq / 时间 / 文本定位,自动回退到回合边界,带备份与投影缓存清理 · POST /api/session-conductor/undo-message

损坏修复 · seq-gap / EIO 坏块 / 双格式 / zstd 帧级损坏 四类 · 面板「说明」页 + /repair 系列

价值分析 · LLM 给会话分类(已完成/未完成/久未活跃/活跃中) · 面板按钮

全文搜索 · FTS5 优先,内置 zstd 扫描兜底 · 面板搜索框

压缩模型 · 上下文自动压缩使用独立模型 · 设置 → 插件 → 压缩模型

模板注入 · 方案/收尾模板;本地文件、在线网址、目录浏览三种导入 · 设置 → 会话管理

自动重命名模型 · 指定标题分析用的模型 · 设置 → 会话管理

成员模型切换 · 切单个或全部成员的模型,可跟随主代理 · /model-switch、set_member_model

成员权限预设 · 查看/切换成员权限预设,支持批量与跟随 · /perm-switch、set_member_permission

成员换名 · 新建成员并把原会话内容搬进去 · clone_member_as

创建成员并选模型 · 创建时即指定模型,首轮就用它 · create_teammate_with_model

指定模型新建会话 · 新建会话并直接指定 provider/model · create_session

记忆取回 · 上下文用量骤降时自动回注最近几轮对话 · 自动注入 + recall_memory

上下文用量 · 查自己会话的占用与构成 · context_usage

跨会话消息 · 给另一个会话发消息,空闲时自动唤醒 · list_sessions、send_to_session

成员轨迹 · 读子代理的完整执行过程:思考、正文、工具调用与结果 · read_member_trace

环境要求

项 · 要求

DSH · 0.2.1 及以上(更早版本功能可用,但列表缓存不生效,会话多时列表构建变慢)

Node · 与宿主自带的 Node 一致

平台 · Linux(群晖 DSM / fnOS 等);纯 Node 实现,无原生依赖

用法

面板与设置页

  • 面板:侧边栏底部「会话管理」展开。五个视图分别是全部、已归档、活跃、回收站、说明。

行内可归档、删除、撤回最后一条消息、开关自动重命名/自动续跑;顶部可搜索、价值分析、释放全部空闲。

  • 设置页:左侧栏「会话管理」独立页。模板注入(方案/收尾两个槽位,可上传本地 md、填在线网址、

浏览 DSH 目录导入,导入后可再编辑)与自动重命名模型选择。

聊天框指令

/model-switch —— 查看/切换成员模型:

/model-switch                                      # 无参:列出成员与各自模型
/model-switch writer                               # 只给成员:查它实际在用的模型
/model-switch writer sa6400/deepseek-v4.1-flash    # 成员 + 模型:切换
/model-switch * auto                               # 成员写 * = 全部;模型写 auto = 跟随我
/model-switch writer sa6400/xxx override           # 加 override:额外写持久覆盖(每轮强制改写)

已删成员的清理:成员记录存在两处 —— 父会话日志里的 subagent/catalog 事件(名册数据源)与成员自己的会话目录。删掉成员会话目录后父日志那条记录仍在,名册会列出点不开的幽灵条目。插件在名册读取层过滤这类悬空条目(会话目录不存在、内存里也没有 agent),父会话日志不做任何改写;删除本身走既有会话删除能力,删完名册缓存立即失效、列表马上刷新。

/perm-switch —— 查看/切换成员权限预设:

/perm-switch                        # 无参:列出成员与各自预设
/perm-switch writer                 # 只给成员:查 preset / sandbox / approval
/perm-switch writer danger-full-access   # 成员 + 预设:切换
/perm-switch * auto                 # 成员写 * = 全部;预设写 auto = 跟随我

两条指令都支持:成员位置可填成员名、唯一子串或 sessionId;* 表示全部成员(不含自己);

auto 表示跟随主代理当前值。切换后回执会带上「实际生效」的查证结果。

AI 工具

list_models({})                                    // 列出可用 provider 与模型 id
set_member_model({ target, provider, model })      // 三者都可空:target 空=全部成员;provider/model 空=跟随我
set_member_permission({ target, preset })          // 两者都可空:target 空=全部成员;preset 空=跟随我
list_permission_presets({})                        // 列出可选权限预设
clone_member_as({ source, name, description, withHistory, provider, model, subagentProvider })
                                                   // source/name 必填;withHistory 默认 true(false=只建空成员)
create_teammate_with_model({ name, description, prompt, provider, model, subagentProvider, context })
                                                   // name/description/prompt/provider/model 必填
create_session({ cwd, workspaceId, provider, model, text, dryRun, sessionId })
                                                   // 全可空:cwd 缺省=调用方 cwd;dryRun=true 只预览
list_sessions({ query, limit, offset, fromIndex }) // 全可空:fromIndex=true 直接读索引(秒回)
send_to_session({ sessionId, text, mode, dryRun }) // sessionId/text 必填;mode=queue|steer
recall_memory({ rounds, session })                 // 都可空:rounds 默认取配置、上限 50;session 空=自己
context_usage({})                                  // 无参
read_member_trace({ session, rounds, detail, include, maxCharsPerItem })
                                                   // session 空=自己(可填成员名/id/前缀/标题);rounds 默认 1(上限 20)
                                                   // detail=summary(每条一行)|full(完整文本);include 可裁 reasoning,text,tool
                                                   // maxCharsPerItem 单条截断(默认 800)

典型调用:

// 全部子代理都换成我现在用的模型
set_member_model({})

// 只把 writer 切到指定模型
set_member_model({ target: "writer", provider: "sa6400", model: "cn:deepseek-v4.1-flash" })

// 把 probe1 克隆成 rename1(换名用)
clone_member_as({ source: "probe1", name: "rename1" })

// 给另一个会话发消息(dryRun 先预览目标状态与限流余量)
send_to_session({ sessionId: "session-xxxx", text: "继续刚才的任务", dryRun: true })

// 看子代理最近一轮的执行过程(子代理只有最后一条回复会被自动发回,中间的思考靠这里读)
read_member_trace({ session: "writer" })

// 看最近 3 轮,只要思考与工具调用
read_member_trace({ session: "writer", rounds: 3, include: "reasoning,tool" })

// 要完整文本(默认 summary 每条压成一行)
read_member_trace({ session: "writer", detail: "full" })

API

插件以 /api/session-conductor/* 前缀注册宿主路由:

端点 · 方法 · 用途

/list · GET · 会话列表;?fromIndex=true 读落盘索引秒回,?job=1 交给后台 job

/archive /restore · POST · 归档 / 恢复会话

/delete · POST · 删除会话(拒绝运行中)

/undo · POST · 撤回最后一条消息

/undo-message · POST · 撤销到指定位置:{sessionId, atSeq?\ · atTime?\ · matchText?, dryRun?};都不给 = 撤回最后一条

/auto-rename /auto-continue · POST · 两个逐会话开关

/auto-continue-gate · GET/POST · 全局续跑闸门

/release · POST · 释放空闲会话

/value-analysis · POST · 价值分析

/repair /repair-eio /repair-dual · POST · 三类损坏修复

/search · GET · 全文搜索

/compaction-model /auto-rename-model · GET/POST · 两个模型设置

/templates /templates/dir · GET/POST · 模板注入与目录浏览

/i18n · GET · 语言包(zh/en)

curl http://<host>/api/session-conductor/list
# → { "ok": true, "sessions": [ { "id": "...", "title": "...", "cwd": "...", "updatedAt": 172... } ], "total": N }
curl -X POST http://<host>/api/session-conductor/archive \
  -H "Content-Type: application/js

…(truncated)

Rendered from the README published on npm. Formatted only, not edited.

Versions

Published on npm::29,最后更新 2026-11-04

Links

GitHub · Homepage · npm

Same category