🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

会话裁切 Kyzzsa/dsh-klip

DeepSeek Harness
Kyzzsa71 天前有提交已提供中文文档扫描:未发现敏感能力

按 turn 区间裁剪会话并重排为一条新会话

25.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/12 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Kyzzsa/dsh-klip
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · skill
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 71 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/10/12) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/1(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-commands@deepseek-ai/dsh-session@deepseek-ai/dsh-session-title@deepseek-ai/dsh-agent@deepseek-ai/dsh-agent-presets@deepseek-ai/dsh-workspace@deepseek-ai/cordis
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 按轮次区间裁剪会话
  • 重组为新会话
  • 重建会话索引

DeepSeek Harness 插件,用于会话裁剪、修剪、切片和重建索引。自动切割、重组并重建任意会话的索引。用 /klip 从选中的对话轮次生成更小的会话,同时保留有效的事件引用。

README

由 DeepSeek 最新模型翻译生成
dsh-klip 一个把会话中选中的任意 turn 区间裁切、合并成一条新会话的插件。 /klip 1..3,7 # 剪出 turn 1..3 和 turn 7,合并成一条新会话 /klip -5.., not -3 # 最近 5 个 turn,去掉 turn 3 klip 把选中的事件重排成一条新会话,并挂载到当前 workspace。 KInterval 语法 KInterval 是逗号分隔的子句,每段按 turn 编号(从 1 开始)选择;负数从末尾数起(-1 是最后一个 turn)。所有区间都是闭区间。 | 写法 | 含义 | | x | 只选 turn x | | a..b | 选 turn a 到 b | | a.. | 选 turn a 到末尾 | | ..b | 选开头到 turn b | | .. | 全选 | | not I | 排除区间 I | 示例: /klip 3 # 只选 turn 3 /klip 2..5 # 选 turn 2、3、4、5 /klip 4.. # 选 turn 4 到末尾 /klip ..3 # 选 turn 1、2、3 /klip .. # 全选 /klip .., not 2 # 全选,但排除 turn 2 /klip -3.. # 最后 3 个 turn 空白会被忽略,1..2 与 1 .. 2 等价。
展开完整文档(README 剩余 1 节)
dsh-klip

一个把会话中选中的任意 turn 区间裁切、合并成一条新会话的插件。

/klip 1..3,7 # 剪出 turn 1..3 和 turn 7,合并成一条新会话 /klip -5.., not -3 # 最近 5 个 turn,去掉 turn 3

klip 把选中的事件重排成一条新会话,并挂载到当前 workspace。

KInterval 语法

KInterval 是逗号分隔的子句,每段按 turn 编号(从 1 开始)选择;负数从末尾数起(-1 是最后一个 turn)。所有区间都是闭区间。

| 写法 | 含义 |
| x | 只选 turn x |
| a..b | 选 turn a 到 b |
| a.. | 选 turn a 到末尾 |
| ..b | 选开头到 turn b |
| .. | 全选 |
| not I | 排除区间 I |

示例:

/klip 3 # 只选 turn 3 /klip 2..5 # 选 turn 2、3、4、5 /klip 4.. # 选 turn 4 到末尾 /klip ..3 # 选 turn 1、2、3 /klip .. # 全选 /klip .., not 2 # 全选,但排除 turn 2 /klip -3.. # 最后 3 个 turn

空白会被忽略,1..2 与 1 .. 2 等价。

功能

- 自动重排。 选中的 turn 重编号为连续的 1..N,SessionEvent.seq 从 0 重新开始。
- 失效引用清理。 引用了被裁掉事件的该事件也会被删除,并级联直到没有事件引用已删除事件。
- 规则可自定义。 重排由 src/rules.ts 的规则表驱动;支持第三方事件类型只需加规则,无需改引擎。
- 自动命名。 新会话命名为 KLIP <原标题>。

自定义规则

重排由 src/rules.ts 的两张表驱动:turnRules 重映射 turn,seqRules 重映射 seq 并翻译事件间的引用。每种事件类型映射到一个单元格 — 一个 rules 数组,外加一个可选的 presence 标志:

- override: true — 该类型的规则完全取代通配符 (缺省表示在其基础上扩展)。

两张表使用各自独立的规则类型。turnRules 重编号 turn 引用(value / array / interval);seqRules 负责 seq 引用以及结构性的跳过规则。seqRules 的规则:

- value — 单个数值引用(如 seq)。目标不在结果中则删除该事件。
- array — 数值数组引用(如 sourceEventSeqs)。过滤失效成员,仅当全部成员失效才删除。
- interval — 闭区间引用(如 surfaceOp.start / surfaceOp.end)。与幸存的 seq 集合求交集,为空才删除。
- skip-n — 删除该事件及其后 n 个事件(固定长度),用于删除一对 prune。
- skip-till — 一直删除直到出现类型为 till 的事件(含该事件);用括号匹配栈实现,因此跳过块可以嵌套。

规则上还可以带两个可选的 presence 标志:

- keep: true —(仅 array)引用全部失效时不再删除事件,而是保留事件并把数组清空为 []。value / interval 没有 keep(硬引用目标丢失时仍会删除该事件)。
- surface: true —(仅 interval、仅 seq 表)把区间投影到 surface-only seq map 而不是全部幸存者。surfaceOp.start / surfaceOp.end 用的就是它。

单元格也可以没有引用规则({ rules: [] } 或留空),这样事件无条件保留 — 如 command/done,它的 sourceEventSeq 只是展示用软引用:若给它配 value 规则,事件会被误删,导致存活的 command/run 一直渲染成"执行中"(永远调用中)。

surface 不再作为单元格或规则的标志,而是独立成一张表 seqSurface,列出加入模型可见 surface 的事件类型(即产出消息、会被 surface fold 保留的节点)。列在该表里的类型会被加入 surface-only seq map;带 surface: true 的 interval 规则使用这张 map,而其它所有引用(value / array / interval)都投影到全部幸存者。普通引用如 sourceEventSeqs(指向 tool/call 等普通记录)不带 surface,恰恰是为了不被限制到 surface。

支持第三方事件类型就加一个单元格(如果它产出消息,同时把它列进 seqSurface):

// src/rules.ts
export const seqSurface = ['user/message', 'assistant/message', 'tool/result']

export const seqRules: SeqReIndexRules = {
'': { rules: [{ kind: 'value', path: 'seq' }] },
// ...已有的 user/message、tool/result 等条目...
'my/plugin/event': {
rules: [{ kind: 'value', path: 'data.parentSeq' }], // 新增
},
}

改完执行 npm run build 并重启 profile。

原理

KInterval(src/k-interval.ts)把范围文本解析为 include/exclude 区间;reIndexEvents(src/re-index.ts)取出选中的事件、重编号(seq 连续、turn 稠密)并重映射所有引用,生成合法的会话种子。

注意事项:

- 只剪切已完成的 turn;头部事件(第一个 turn 之前、无 turn 字段)始终保留。
- 新会话通过 agent 工厂创建,先写入磁盘,再挂载到源 workspace。

项目结构

dsh-klip/
├── package.json # 包契约:exports、peer deps ├── scripts/build.mjs # esbuild 构建 ├── src/ │ ├── index.ts # 插件入口:/klip 命令、会话创建、workspace 挂载 │ ├── k-interval.ts # KInterval 语法(纯函数) │ ├── rules.ts # 规则表(默认 turnRules / seqRules,可自行编辑) │ └── re-index.ts # 纯重排:把事件重写为会话种子 └── test/ # KInterval 与重排测试

验证

npm run typecheck # tsc --noEmit
npm run build # 产出 lib/index.js、lib/types/
npm test # 运行测试

License

MIT
预览分享卡片长什么样 ↓Kyzzsa/dsh-klip
分享 · DeepSeek Harness Hub
Kyzzsa/dsh-klip

按 turn 区间裁剪会话并重排为一条新会话

回到顶部