@liziy/session-queue 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +149 -0
  2. package/index.ts +1873 -0
  3. package/package.json +29 -0
package/README.md ADDED
@@ -0,0 +1,149 @@
1
+ # @liziy/session-queue
2
+
3
+ > **Switch UI language:** `/rollback zh` · `/rollback en` (zh = 中文, en = English)
4
+
5
+ ---
6
+
7
+ ## English
8
+
9
+ Convert pi's session tree into a linear rollback queue. Every turn auto-records modified files; rollback restores them in one click.
10
+
11
+ ### Features
12
+
13
+ - **JIT capture** — snapshots before/after `edit`/`write`/`bash` tool calls (zero startup overhead)
14
+ - **Content-addressed storage** — dedup by sha256
15
+ - **Dirty check** — refuses to overwrite externally modified files
16
+ - **Workspace whitelist** — opt-in per directory; nothing recorded by default
17
+ - **Snapshot GC** — mark-sweep keeps disk usage bounded
18
+ - **bash tracking** — `rm`/`del`/`mv`/`>`/`>>` (multi-file, simple globs)
19
+ - **Session Tree sync** — navigating to an older point auto-rolls back the queue
20
+ - **Zero dependencies** · **i18n: zh / en**
21
+
22
+ ### Install
23
+
24
+ ```bash
25
+ pi install npm:@liziy/session-queue
26
+ ```
27
+
28
+ ### Commands
29
+
30
+ | Command | Action |
31
+ |---|---|
32
+ | `/rollback` | Open main menu (rollback / workspace / GC / settings) |
33
+ | `/rollback enable` | Start tracking current directory |
34
+ | `/rollback disable` | Pause tracking |
35
+ | `/rollback list` | List enabled workspaces |
36
+ | `/rollback gc` | Manually run snapshot GC |
37
+ | `/rollback zh` | Switch UI to Chinese |
38
+ | `/rollback en` | Switch UI to English |
39
+
40
+ ### Quick Start
41
+
42
+ 1. `/rollback enable` — start tracking
43
+ 2. Work normally; each `turn_end` writes a checkpoint
44
+ 3. `/rollback` → select a checkpoint → confirm → files restored
45
+ 4. Optional: open Session Tree, click an older message, type a new question — queue auto-syncs
46
+
47
+ ### Status Bar
48
+
49
+ | Indicator | Meaning |
50
+ |---|---|
51
+ | (hidden) | No workspace active |
52
+ | `● 记录` (cyan) | Workspace tracking only |
53
+ | `● 同步` (green) | Tracking + Session Tree auto-sync |
54
+
55
+ ### Rollback Semantics
56
+
57
+ - **Files**: each file's `beforeHash` from the **earliest** discarded turn is restored — reverts to the state right before the first modification, not an intermediate snapshot
58
+ - **Queue**: `entries.slice(0, targetIdx)` — drops target and all later entries
59
+ - **Conflicts**: skipped files are kept as a `residual` entry (re-tryable)
60
+ - **Safety**: missing snapshot = skip + warn, never delete blindly
61
+
62
+ ### Storage
63
+
64
+ ```
65
+ ~/.pi/agent/extensions/session-queue/
66
+ ├── config.json # workspaces, followSessionTree, lang
67
+ ├── queue-{sessionId}.json # last 10 entries + changes
68
+ └── snapshots/{hash}.content # content-addressed
69
+ ```
70
+
71
+ ### Limits
72
+
73
+ - Tracks `edit` / `write` / partial `bash` only (no `sed -i`, `npm install`, subshells)
74
+ - 10-entry rolling window; older turns are not recorded or restorable
75
+ - Doesn't undo pi's tree; use `/tree` for that
76
+ - Directory create/remove are not reverted
77
+
78
+ ---
79
+
80
+ ## 中文
81
+
82
+ 把 pi 的会话从「树」改为「队列」:每个 turn 自动记录修改的文件,回滚时一键还原。
83
+
84
+ ### 特性
85
+
86
+ - **JIT 拦截**:工具执行前后拍照存证(0 启动开销)
87
+ - **内容寻址**:相同内容只存一次(sha256)
88
+ - **脏检查**:拒绝覆盖外部已修改的文件
89
+ - **工作区白名单**:按目录启用,默认不记录
90
+ - **snapshot GC**:标记-扫描回收,控制磁盘占用
91
+ - **bash 追踪**:`rm`/`del`/`mv`/`>`/`>>`(多文件、简单 glob)
92
+ - **Session Tree 同步**:导航到旧对话点时队列自动回滚
93
+ - **零依赖** · **i18n: zh / en**
94
+
95
+ ### 安装
96
+
97
+ ```bash
98
+ pi install npm:@liziy/session-queue
99
+ ```
100
+
101
+ ### 命令
102
+
103
+ | 命令 | 作用 |
104
+ |---|---|
105
+ | `/rollback` | 唤起主菜单(回滚 / 工作区 / GC / 设置) |
106
+ | `/rollback enable` | 启用当前目录的记录 |
107
+ | `/rollback disable` | 暂停记录 |
108
+ | `/rollback list` | 列出已启用工作区 |
109
+ | `/rollback gc` | 手动执行 GC |
110
+ | `/rollback zh` | 切换界面为中文 |
111
+ | `/rollback en` | 切换界面为英文 |
112
+
113
+ ### 快速上手
114
+
115
+ 1. `/rollback enable` — 开始记录
116
+ 2. 正常使用;每个 `turn_end` 写入一个检查点
117
+ 3. `/rollback` → 选检查点 → 确认 → 文件还原
118
+ 4. 可选:Session Tree 选旧消息 + 输入新问题 → 队列自动同步
119
+
120
+ ### 状态栏
121
+
122
+ | 指示 | 含义 |
123
+ |---|---|
124
+ | (隐藏) | 未启用工作区 |
125
+ | `● 记录`(青色) | 仅记录 |
126
+ | `● 同步`(绿色) | 记录 + 跟随 Session Tree |
127
+
128
+ ### 回滚语义
129
+
130
+ - **文件**:取被丢弃 turn 中**最早**那条修改的 `beforeHash` 还原(不是中间快照)
131
+ - **队列**:`entries.slice(0, targetIdx)` — 丢弃目标及之后
132
+ - **冲突**:被跳过的文件保留为 `residual` entry(可重试)
133
+ - **安全**:快照丢失 = 跳过 + 告警,绝不盲目删除
134
+
135
+ ### 存储
136
+
137
+ ```
138
+ ~/.pi/agent/extensions/session-queue/
139
+ ├── config.json # 工作区、followSessionTree、lang
140
+ ├── queue-{sessionId}.json # 最近 10 条 entry + changes
141
+ └── snapshots/{hash}.content # 内容寻址
142
+ ```
143
+
144
+ ### 限制
145
+
146
+ - 仅追踪 `edit` / `write` / 部分 `bash`(`sed -i`、`npm install`、子 shell 不可)
147
+ - 10 轮滚动窗口;超出的 turn 不被记录也不可回滚
148
+ - 不撤销 pi 的会话树,用 `/tree` 查看完整历史
149
+ - 目录的创建/删除无法还原