morlay/dsh-plugin--packages-session-session-branch ↗★ 9

@morlay/session-branch

提供分支式会话编辑的契约层与高层服务 定义了会话回退与派生新分支的数据层原语,适合作为开发分支会话功能的基础依赖包。

套件
@morlay/session-branch
相容性
待驗證
Harness 依賴範圍
workspace:*
Cordis 依賴範圍
workspace:*
版本
0.0.10-alpha.4
授權
MIT
最近更新
2026年9月20日

同名套件的其他儲存庫

安裝

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:morlay/dsh-plugin#17db2e513964877a60c0d965cb6696c6539337f8&path:packages/session/session-branch

@morlay/session-branch

分支式会话编辑的契约层:定义数据层分支原语 SessionBranchProvider (rewind / forkFrom / readBranchPrefix)与高层服务 SessionBranch (ctx.sessionBranch)。

跨包术语见根 .agents/CONTEXT.md,本包的决策见 .agents/adrs/。

与上游 SessionHandle 的关系

上游持久化模型是 SessionHandle(append-only:create / open / append / flush / stat / list),没有显式回退原语;本包在其旁边定义分支面 provider,负责显式回退与闭合边界派生:

面上游 SessionHandle本包 SessionBranchProvider
覆盖持久读写(append-only)显式回退 + 闭合边界派生(分支面)
原语create / open / append / flushreadBranchPrefix / forkFrom / rewind
实现方JSONL / RDB 等RDB 等(@morlay/session-rdb 同时实现两者,形成闭环)

Provider 抽象

interface SessionBranchProvider {
  readonly name: string;
  readBranchPrefix(id, atSeq?, mode?, signal?): Promise
;
  forkFrom(sourceId, options?, signal?): Promise;
  rewind(id, toBoundary, signal?): Promise;
}
  • readBranchPrefix:定位 atSeq 锚定的闭合 turn/end 边界并返回前缀; mode: "after"(包含目标轮,fork 语义)/ "before"(排除目标轮,编辑 / 重掷 / 重试语义)。
  • forkFrom:纯 append——新会话(parentSession / seedLength),seed = 边界前缀 + seedSuffix,不触碰源会话。
  • rewind:唯一的显式回退原语,事务整体提交或回滚;支持 live 会话 (内存 log 截断 + 派生缓存复位 + handle cursor / 继承前缀对齐,详见 @morlay/session-rdb 的 分支能力)。

版本效果(历史形状)

session-branch/version 事件的类型定义仍在本包(types.ts),用于识别旧会话里 已落库的历史事件;写侧与读侧都已删除(不再产出新事件、没有读者),理由见 ADR-删除版本树投影并停止写版本效果。