@duanz/pi-d-split

会话聊偏了按切点拆成两个独立会话,原会话不动

Packages

Package details

extension

Install @duanz/pi-d-split from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:@duanz/pi-d-split
Package
@duanz/pi-d-split
Version
1.0.4
Published
Nov 12, 2026
Downloads
250/mo · 250/wk
Author
duanz
License
MIT
Types
extension
Size
25.4 KB
Dependencies
0 dependencies · 2 peers
Pi manifest JSON
{
  "image": "https://raw.githubusercontent.com/DuanZGit/D-Hub/master/docs/covers/d-split.png",
  "extensions": [
    "./index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

d-split

它解决什么

一个会话聊了很久,中途开了个新话题。继续聊下去两边互相污染上下文;从头开新会话,之前那段又带不走。

d-split 按切点把会话拆成两个独立的 .jsonl:切点及之前是 A 段,切点之后是 B 段。原会话文件保持原样,两个新会话各自可以继续。

为什么自己写文件

会话是一棵树。fork_branch 只能切出「根 → 某条路径」,切不出「切点之后」那一段。所以这里按 parentId 链自己拼两段:

  • A 段 = 根 .. 切点
  • B 段 = 切点之后 .. leaf,首条的 parentId 改指向一条注入的 custom_message(说明「本段由拆分而来,已完成的部分不要重做」)

用法

模型调用 d_split 工具:

参数 说明
不传 cutAt 只返回时间轴(序号 / entryId / 角色 / 摘要),用来挑切点
cutAt entryId,或第 N 条用户消息(1 起)
nameA / nameB 两侧会话标题
noteB 插到 B 开头的说明,省略则自动生成
wake both(默认)/ b / none,拆完要不要自动起跑

典型流程:先不带 cutAt 跑一次,拿到时间轴后挑 2–3 个候选切点给用户确认,再真拆。

配置

变量 默认 说明
D_SPLIT_OFF 空 设为 1 关闭
PI_WEB_PORT 自动探测 30142 → 30152
SPLIT_TIMELINE_MAX 200 时间轴最多返回多少条

日志:~/.pi/agent/d-split.log

限制

  • 只处理当前分支,不复制其他分支。
  • 拆分后 A/B 是两个新文件,原会话仍在列表里(不删)。

License

MIT © DuanZ