@dyyz1993/pi-coding-agent 0.70.6 → 0.74.4

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 (275) hide show
  1. package/CHANGELOG.md +266 -80
  2. package/README.md +48 -20
  3. package/dist/bun/cli.d.ts.map +1 -1
  4. package/dist/bun/cli.js +4 -2
  5. package/dist/bun/cli.js.map +1 -1
  6. package/dist/bun/restore-sandbox-env.d.ts +13 -0
  7. package/dist/bun/restore-sandbox-env.d.ts.map +1 -0
  8. package/dist/bun/restore-sandbox-env.js +32 -0
  9. package/dist/bun/restore-sandbox-env.js.map +1 -0
  10. package/dist/cli/args.d.ts +2 -1
  11. package/dist/cli/args.d.ts.map +1 -1
  12. package/dist/cli/args.js +34 -22
  13. package/dist/cli/args.js.map +1 -1
  14. package/dist/cli/list-models.d.ts.map +1 -1
  15. package/dist/cli/list-models.js +2 -1
  16. package/dist/cli/list-models.js.map +1 -1
  17. package/dist/cli.d.ts.map +1 -1
  18. package/dist/cli.js +9 -4
  19. package/dist/cli.js.map +1 -1
  20. package/dist/config.d.ts +16 -8
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +238 -66
  23. package/dist/config.js.map +1 -1
  24. package/dist/core/agent-session-runtime.d.ts +10 -0
  25. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  26. package/dist/core/agent-session-runtime.js +14 -0
  27. package/dist/core/agent-session-runtime.js.map +1 -1
  28. package/dist/core/agent-session-services.d.ts +2 -1
  29. package/dist/core/agent-session-services.d.ts.map +1 -1
  30. package/dist/core/agent-session-services.js +1 -0
  31. package/dist/core/agent-session-services.js.map +1 -1
  32. package/dist/core/agent-session.d.ts +25 -26
  33. package/dist/core/agent-session.d.ts.map +1 -1
  34. package/dist/core/agent-session.js +1042 -1116
  35. package/dist/core/agent-session.js.map +1 -1
  36. package/dist/core/auth-guidance.d.ts +5 -0
  37. package/dist/core/auth-guidance.d.ts.map +1 -0
  38. package/dist/core/auth-guidance.js +21 -0
  39. package/dist/core/auth-guidance.js.map +1 -0
  40. package/dist/core/auth-storage.d.ts +9 -0
  41. package/dist/core/auth-storage.d.ts.map +1 -1
  42. package/dist/core/auth-storage.js +20 -1
  43. package/dist/core/auth-storage.js.map +1 -1
  44. package/dist/core/bash-executor.d.ts.map +1 -1
  45. package/dist/core/bash-executor.js +9 -6
  46. package/dist/core/bash-executor.js.map +1 -1
  47. package/dist/core/compaction/compaction.d.ts +0 -1
  48. package/dist/core/compaction/compaction.d.ts.map +1 -1
  49. package/dist/core/compaction/compaction.js.map +1 -1
  50. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  51. package/dist/core/export-html/ansi-to-html.js +1 -1
  52. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  53. package/dist/core/export-html/template.css +53 -4
  54. package/dist/core/export-html/template.js +84 -20
  55. package/dist/core/export-html/tool-renderer.d.ts +0 -6
  56. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  57. package/dist/core/export-html/tool-renderer.js +15 -2
  58. package/dist/core/export-html/tool-renderer.js.map +1 -1
  59. package/dist/core/extensions/index.d.ts +1 -1
  60. package/dist/core/extensions/index.d.ts.map +1 -1
  61. package/dist/core/extensions/index.js.map +1 -1
  62. package/dist/core/extensions/loader.d.ts +0 -1
  63. package/dist/core/extensions/loader.d.ts.map +1 -1
  64. package/dist/core/extensions/loader.js +49 -137
  65. package/dist/core/extensions/loader.js.map +1 -1
  66. package/dist/core/extensions/runner.d.ts +24 -20
  67. package/dist/core/extensions/runner.d.ts.map +1 -1
  68. package/dist/core/extensions/runner.js +128 -253
  69. package/dist/core/extensions/runner.js.map +1 -1
  70. package/dist/core/extensions/types.d.ts +88 -60
  71. package/dist/core/extensions/types.d.ts.map +1 -1
  72. package/dist/core/extensions/types.js +10 -0
  73. package/dist/core/extensions/types.js.map +1 -1
  74. package/dist/core/file-store/file-snapshot-manager.d.ts +95 -0
  75. package/dist/core/file-store/file-snapshot-manager.d.ts.map +1 -0
  76. package/dist/core/file-store/file-snapshot-manager.js +508 -0
  77. package/dist/core/file-store/file-snapshot-manager.js.map +1 -0
  78. package/dist/core/file-store/index.d.ts +5 -0
  79. package/dist/core/file-store/index.d.ts.map +1 -0
  80. package/dist/core/file-store/index.js +3 -0
  81. package/dist/core/file-store/index.js.map +1 -0
  82. package/dist/core/messages.d.ts +10 -2
  83. package/dist/core/messages.d.ts.map +1 -1
  84. package/dist/core/messages.js +23 -6
  85. package/dist/core/messages.js.map +1 -1
  86. package/dist/core/model-registry.d.ts +19 -1
  87. package/dist/core/model-registry.d.ts.map +1 -1
  88. package/dist/core/model-registry.js +97 -16
  89. package/dist/core/model-registry.js.map +1 -1
  90. package/dist/core/model-resolver.d.ts.map +1 -1
  91. package/dist/core/model-resolver.js +24 -15
  92. package/dist/core/model-resolver.js.map +1 -1
  93. package/dist/core/package-manager.d.ts +1 -0
  94. package/dist/core/package-manager.d.ts.map +1 -1
  95. package/dist/core/package-manager.js +61 -35
  96. package/dist/core/package-manager.js.map +1 -1
  97. package/dist/core/provider-display-names.d.ts +2 -0
  98. package/dist/core/provider-display-names.d.ts.map +1 -0
  99. package/dist/core/provider-display-names.js +32 -0
  100. package/dist/core/provider-display-names.js.map +1 -0
  101. package/dist/core/resource-loader.d.ts.map +1 -1
  102. package/dist/core/resource-loader.js +9 -21
  103. package/dist/core/resource-loader.js.map +1 -1
  104. package/dist/core/sdk.d.ts +9 -1
  105. package/dist/core/sdk.d.ts.map +1 -1
  106. package/dist/core/sdk.js +39 -18
  107. package/dist/core/sdk.js.map +1 -1
  108. package/dist/core/session-manager.d.ts +27 -17
  109. package/dist/core/session-manager.d.ts.map +1 -1
  110. package/dist/core/session-manager.js +133 -47
  111. package/dist/core/session-manager.js.map +1 -1
  112. package/dist/core/settings-manager.d.ts +21 -3
  113. package/dist/core/settings-manager.d.ts.map +1 -1
  114. package/dist/core/settings-manager.js +51 -6
  115. package/dist/core/settings-manager.js.map +1 -1
  116. package/dist/core/skills.d.ts.map +1 -1
  117. package/dist/core/skills.js +3 -8
  118. package/dist/core/skills.js.map +1 -1
  119. package/dist/core/slash-commands.d.ts.map +1 -1
  120. package/dist/core/slash-commands.js +4 -3
  121. package/dist/core/slash-commands.js.map +1 -1
  122. package/dist/core/tools/bash.d.ts +0 -2
  123. package/dist/core/tools/bash.d.ts.map +1 -1
  124. package/dist/core/tools/bash.js +155 -110
  125. package/dist/core/tools/bash.js.map +1 -1
  126. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  127. package/dist/core/tools/edit-diff.js +3 -2
  128. package/dist/core/tools/edit-diff.js.map +1 -1
  129. package/dist/core/tools/edit.d.ts.map +1 -1
  130. package/dist/core/tools/edit.js +4 -3
  131. package/dist/core/tools/edit.js.map +1 -1
  132. package/dist/core/tools/find.d.ts.map +1 -1
  133. package/dist/core/tools/find.js +1 -1
  134. package/dist/core/tools/find.js.map +1 -1
  135. package/dist/core/tools/grep.d.ts.map +1 -1
  136. package/dist/core/tools/grep.js +1 -1
  137. package/dist/core/tools/grep.js.map +1 -1
  138. package/dist/core/tools/output-accumulator.d.ts +50 -0
  139. package/dist/core/tools/output-accumulator.d.ts.map +1 -0
  140. package/dist/core/tools/output-accumulator.js +178 -0
  141. package/dist/core/tools/output-accumulator.js.map +1 -0
  142. package/dist/core/tools/read.d.ts.map +1 -1
  143. package/dist/core/tools/read.js +70 -13
  144. package/dist/core/tools/read.js.map +1 -1
  145. package/dist/index.d.ts +1 -1
  146. package/dist/index.d.ts.map +1 -1
  147. package/dist/index.js.map +1 -1
  148. package/dist/main.d.ts.map +1 -1
  149. package/dist/main.js +17 -39
  150. package/dist/main.js.map +1 -1
  151. package/dist/migrations.d.ts +1 -1
  152. package/dist/migrations.d.ts.map +1 -1
  153. package/dist/migrations.js +3 -3
  154. package/dist/migrations.js.map +1 -1
  155. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  156. package/dist/modes/interactive/components/config-selector.js +3 -1
  157. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  158. package/dist/modes/interactive/components/extension-selector.d.ts +1 -4
  159. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  160. package/dist/modes/interactive/components/extension-selector.js +14 -56
  161. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  162. package/dist/modes/interactive/components/login-dialog.d.ts +5 -1
  163. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  164. package/dist/modes/interactive/components/login-dialog.js +19 -4
  165. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  166. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  167. package/dist/modes/interactive/components/model-selector.js +1 -1
  168. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  169. package/dist/modes/interactive/components/oauth-selector.d.ts +18 -6
  170. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  171. package/dist/modes/interactive/components/oauth-selector.js +93 -25
  172. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  173. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  174. package/dist/modes/interactive/components/scoped-models-selector.js +1 -1
  175. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  176. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  177. package/dist/modes/interactive/components/session-selector.js +3 -7
  178. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  179. package/dist/modes/interactive/components/settings-selector.d.ts +5 -0
  180. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  181. package/dist/modes/interactive/components/settings-selector.js +53 -1
  182. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  183. package/dist/modes/interactive/interactive-mode.d.ts +20 -4
  184. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  185. package/dist/modes/interactive/interactive-mode.js +423 -186
  186. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  187. package/dist/modes/interactive/theme/dark.json +1 -1
  188. package/dist/modes/interactive/theme/light.json +1 -1
  189. package/dist/modes/print-mode.d.ts +3 -0
  190. package/dist/modes/print-mode.d.ts.map +1 -1
  191. package/dist/modes/print-mode.js +62 -19
  192. package/dist/modes/print-mode.js.map +1 -1
  193. package/dist/modes/rpc/rpc-client.d.ts +80 -60
  194. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  195. package/dist/modes/rpc/rpc-client.js +108 -93
  196. package/dist/modes/rpc/rpc-client.js.map +1 -1
  197. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  198. package/dist/modes/rpc/rpc-mode.js +106 -0
  199. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  200. package/dist/modes/rpc/rpc-types.d.ts +115 -0
  201. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  202. package/dist/modes/rpc/rpc-types.js.map +1 -1
  203. package/dist/package-manager-cli.d.ts.map +1 -1
  204. package/dist/package-manager-cli.js +238 -12
  205. package/dist/package-manager-cli.js.map +1 -1
  206. package/dist/utils/child-process.d.ts +1 -0
  207. package/dist/utils/child-process.d.ts.map +1 -1
  208. package/dist/utils/child-process.js +8 -0
  209. package/dist/utils/child-process.js.map +1 -1
  210. package/dist/utils/clipboard-image.d.ts.map +1 -1
  211. package/dist/utils/clipboard-image.js +2 -2
  212. package/dist/utils/clipboard-image.js.map +1 -1
  213. package/dist/utils/clipboard.d.ts.map +1 -1
  214. package/dist/utils/clipboard.js +84 -45
  215. package/dist/utils/clipboard.js.map +1 -1
  216. package/dist/utils/paths.d.ts +9 -0
  217. package/dist/utils/paths.d.ts.map +1 -1
  218. package/dist/utils/paths.js +31 -0
  219. package/dist/utils/paths.js.map +1 -1
  220. package/dist/utils/pi-user-agent.d.ts +2 -0
  221. package/dist/utils/pi-user-agent.d.ts.map +1 -0
  222. package/dist/utils/pi-user-agent.js +5 -0
  223. package/dist/utils/pi-user-agent.js.map +1 -0
  224. package/dist/utils/structured-output.d.ts +10 -0
  225. package/dist/utils/structured-output.d.ts.map +1 -0
  226. package/dist/utils/structured-output.js +57 -0
  227. package/dist/utils/structured-output.js.map +1 -0
  228. package/dist/utils/tools-manager.d.ts.map +1 -1
  229. package/dist/utils/tools-manager.js +6 -2
  230. package/dist/utils/tools-manager.js.map +1 -1
  231. package/dist/utils/version-check.d.ts +14 -0
  232. package/dist/utils/version-check.d.ts.map +1 -0
  233. package/dist/utils/version-check.js +77 -0
  234. package/dist/utils/version-check.js.map +1 -0
  235. package/docs/compaction.md +14 -14
  236. package/docs/custom-provider.md +40 -31
  237. package/docs/development.md +1 -1
  238. package/docs/docs.json +148 -0
  239. package/docs/extensions.md +116 -56
  240. package/docs/index.md +70 -0
  241. package/docs/json.md +4 -4
  242. package/docs/models.md +150 -3
  243. package/docs/packages.md +10 -5
  244. package/docs/providers.md +62 -17
  245. package/docs/quickstart.md +142 -0
  246. package/docs/rollback-architecture.md +693 -0
  247. package/docs/rollback-test-cases.md +412 -0
  248. package/docs/rpc.md +1 -1
  249. package/docs/sdk.md +26 -26
  250. package/docs/{session.md → session-format.md} +6 -6
  251. package/docs/sessions.md +137 -0
  252. package/docs/settings.md +52 -9
  253. package/docs/termux.md +1 -1
  254. package/docs/themes.md +2 -2
  255. package/docs/tui.md +20 -20
  256. package/docs/usage.md +277 -0
  257. package/examples/extensions/README.md +2 -4
  258. package/examples/extensions/border-status-editor.ts +150 -0
  259. package/examples/extensions/commands.ts +2 -2
  260. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  261. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  262. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  263. package/examples/extensions/dynamic-resources/dynamic.json +1 -1
  264. package/examples/extensions/git-checkpoint.ts +1 -1
  265. package/examples/extensions/handoff.ts +49 -11
  266. package/examples/extensions/plan-mode/index.ts +1 -1
  267. package/examples/extensions/sandbox/package-lock.json +5 -5
  268. package/examples/extensions/sandbox/package.json +1 -1
  269. package/examples/extensions/subagent/agents.ts +126 -0
  270. package/examples/extensions/with-deps/package-lock.json +2 -2
  271. package/examples/extensions/with-deps/package.json +1 -1
  272. package/examples/sdk/README.md +2 -2
  273. package/package.json +7 -16
  274. package/docs/tree.md +0 -233
  275. package/examples/extensions/antigravity-image-gen.ts +0 -418
@@ -0,0 +1,412 @@
1
+ # Rollback Test Cases
2
+
3
+ ## Conventions
4
+
5
+ - **Entry types**: user message (U), assistant message (A), tool result (T), step-snapshot (S), compaction (C), deletion (D), segment_summary (SS), branch_summary (BS)
6
+ - **File state**: tracked by snapshot hash. Each step-snapshot records baselineTreeHash → snapshotTreeHash
7
+ - **Event log**: records every event in order with data
8
+
9
+ ---
10
+
11
+ ## Case 1: Basic Rollback (Message + Files)
12
+
13
+ ### Scenario
14
+ Create file A → Modify file B → Rollback to "Create file A" message → Both message and files restored
15
+
16
+ ### Steps
17
+
18
+ | Step | Action | Entries Created | File State | Snapshot |
19
+ |------|--------|-----------------|------------|----------|
20
+ | 1 | User: "create file A" | U1 | — | — |
21
+ | 2 | Assistant creates file A (write tool) | A1, T1 | A exists | S1: baseline=null→hash1 |
22
+ | 3 | User: "modify file B" | U2 | — | — |
23
+ | 4 | Assistant modifies file B (edit tool) | A2, T2 | A, B(modified) | S2: hash1→hash2 |
24
+ | 5 | Rollback to U1 (skipFiles=false) | BS1(skipFiles=false) | A, B(original) | Files restored to S1 state |
25
+
26
+ ### Expected Results
27
+ - leafId points to BS1 (or U1 depending on navigation)
28
+ - File A: exists (was created in step 2)
29
+ - File B: restored to pre-modification state (or deleted if didn't exist before step 4)
30
+ - Messages: only U1 and earlier visible in context
31
+ - Event log: session_tree event fires, file-snapshot restores files
32
+
33
+ ### Event Log
34
+
35
+ | Order | Event | Data |
36
+ |-------|-------|------|
37
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1, treeHash: hash1 } |
38
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2, treeHash: hash2 } |
39
+ | 3 | `session_tree` (step 5) | { type: "branch_summary", entryId: BS1, rollbackTo: U1, skipFiles: false } |
40
+ | 4 | `file-snapshot` (step 5) | { action: "restore", targetHash: hash1, filesRestored: ["B"] } |
41
+
42
+ ---
43
+
44
+ ## Case 2: Message-Only Rollback (skipFiles=true)
45
+
46
+ ### Scenario
47
+ Modify file A → Modify file B → Modify file A again → Rollback to "Modify file B" message without restoring files
48
+
49
+ ### Steps
50
+
51
+ | Step | Action | Entries Created | File State | Snapshot |
52
+ |------|--------|-----------------|------------|----------|
53
+ | 1 | User: "modify file A" | U1 | — | — |
54
+ | 2 | Assistant modifies file A (v1) | A1, T1 | A(v1) | S1: null→hash1 |
55
+ | 3 | User: "modify file B" | U2 | — | — |
56
+ | 4 | Assistant modifies file B (v1) | A2, T2 | A(v1), B(v1) | S2: hash1→hash2 |
57
+ | 5 | User: "modify file A again" | U3 | — | — |
58
+ | 6 | Assistant modifies file A (v2) | A3, T3 | A(v2), B(v1) | S3: hash2→hash3 |
59
+ | 7 | Rollback to A2 (skipFiles=true) | BS1(skipFiles=true) | A(v2), B(v1) | No file restoration |
60
+
61
+ ### Expected Results
62
+ - leafId points to position at A2
63
+ - File A: still v2 (not restored)
64
+ - File B: still v1 (not restored)
65
+ - Messages: only U1, A1, T1, U2, A2, T2 visible in context
66
+ - BS1 has skipFiles=true field
67
+
68
+ ### Event Log
69
+
70
+ | Order | Event | Data |
71
+ |-------|-------|------|
72
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1, treeHash: hash1 } |
73
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2, treeHash: hash2 } |
74
+ | 3 | `session_tree` (step 6) | { type: "step-snapshot", snapshotId: S3, treeHash: hash3 } |
75
+ | 4 | `session_tree` (step 7) | { type: "branch_summary", entryId: BS1, rollbackTo: A2, skipFiles: true } |
76
+
77
+ ---
78
+
79
+ ## Case 3: Rollback After Compaction (Message Only)
80
+
81
+ ### Scenario
82
+ Multiple turns → Compaction triggers → Rollback to pre-compaction message with skipFiles=true
83
+
84
+ ### Steps
85
+
86
+ | Step | Action | Entries Created | File State | Snapshot |
87
+ |------|--------|-----------------|------------|----------|
88
+ | 1 | User: "create file A" | U1 | — | — |
89
+ | 2 | Assistant creates file A | A1, T1 | A exists | S1 |
90
+ | 3 | User: "create file B" | U2 | — | — |
91
+ | 4 | Assistant creates file B | A2, T2 | A, B | S2 |
92
+ | 5 | User: "create file C" | U3 | — | — |
93
+ | 6 | Assistant creates file C | A3, T3 | A, B, C | S3 |
94
+ | 7 | User: "summarize previous work" | U4 | — | — |
95
+ | 8 | Assistant responds | A4 | A, B, C | S4 (or no change) |
96
+ | 9 | Manual compaction (summarize U1-A3) | C1(summary) | A, B, C | — |
97
+ | 10 | Rollback to U2 (skipFiles=true) | BS1(skipFiles=true) | A, B, C | No file restoration |
98
+
99
+ ### Expected Results
100
+ - leafId before U2 (to re-edit)
101
+ - Messages: compaction summary is gone, U1, A1, T1, U2, A2, T2 visible
102
+ - Files: unchanged (skipFiles=true)
103
+
104
+ ### Event Log
105
+
106
+ | Order | Event | Data |
107
+ |-------|-------|------|
108
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1 } |
109
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2 } |
110
+ | 3 | `session_tree` (step 6) | { type: "step-snapshot", snapshotId: S3 } |
111
+ | 4 | `session_tree` (step 8) | { type: "step-snapshot", snapshotId: S4 } |
112
+ | 5 | `session_tree` (step 9) | { type: "compaction", entryId: C1, summarized: [U1,A1,T1,U2,A2,T2,U3,A3,T3] } |
113
+ | 6 | `session_tree` (step 10) | { type: "branch_summary", entryId: BS1, rollbackTo: U2, skipFiles: true } |
114
+ | 7 | `session_tree` (step 10, side effect) | { type: "compaction_undone", entryId: C1 } |
115
+
116
+ ---
117
+
118
+ ## Case 4: Rollback After Compaction (Message + Files)
119
+
120
+ ### Scenario
121
+ Same as Case 3 but skipFiles=false
122
+
123
+ ### Steps
124
+ Same as Case 3 through step 9.
125
+
126
+ | Step | Action | Entries Created | File State | Snapshot |
127
+ |------|--------|-----------------|------------|----------|
128
+ | 10 | Rollback to U2 (skipFiles=false) | BS1(skipFiles=false) | A, B (C removed) | Files restored to S2 state |
129
+
130
+ ### Expected Results
131
+ - leafId before U2
132
+ - Messages: U1, A1, T1, U2, A2, T2 visible (compaction gone)
133
+ - Files: A exists, B exists, C removed (wasn't created yet at step 4)
134
+
135
+ ### Event Log
136
+
137
+ | Order | Event | Data |
138
+ |-------|-------|------|
139
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1 } |
140
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2 } |
141
+ | 3 | `session_tree` (step 6) | { type: "step-snapshot", snapshotId: S3 } |
142
+ | 4 | `session_tree` (step 8) | { type: "step-snapshot", snapshotId: S4 } |
143
+ | 5 | `session_tree` (step 9) | { type: "compaction", entryId: C1, summarized: [U1..A3,T3] } |
144
+ | 6 | `session_tree` (step 10) | { type: "branch_summary", entryId: BS1, rollbackTo: U2, skipFiles: false } |
145
+ | 7 | `file-snapshot` (step 10) | { action: "restore", targetSnapshot: S2, filesRestored: ["C"], filesDeleted: ["C"] } |
146
+ | 8 | `session_tree` (step 10, side effect) | { type: "compaction_undone", entryId: C1 } |
147
+
148
+ ---
149
+
150
+ ## Case 5: Segment Summary + Deletion + Rollback
151
+
152
+ ### Scenario
153
+ Create A, B, C → Summarize middle messages → Delete a message → Rollback to various positions
154
+
155
+ ### Steps
156
+
157
+ | Step | Action | Entries Created | File State |
158
+ |------|--------|-----------------|------------|
159
+ | 1 | User: "create file A" | U1 | — |
160
+ | 2 | Assistant creates file A | A1, T1 | A |
161
+ | 3 | User: "create file B" | U2 | — |
162
+ | 4 | Assistant creates file B | A2, T2 | A, B |
163
+ | 5 | User: "create file C" | U3 | — |
164
+ | 6 | Assistant creates file C | A3, T3 | A, B, C |
165
+ | 7 | User: "do some work" | U4 | — |
166
+ | 8 | Assistant responds with tools | A4, T4 | A, B, C (possibly modified) |
167
+ | 9 | Summarize A2-T2 into segment summary | SS1(targets=[A2,T2], summary="Created file B") | A, B, C |
168
+ | 10 | Delete message A4 | D1(targets=[A4]) | A, B, C (files unchanged) |
169
+ | 11 | Rollback to U3 (skipFiles=false) | BS1 | A, B, C restored to step 6 state |
170
+
171
+ ### Expected Results
172
+ - At step 9: A2,T2 replaced by segmentSummary message in LLM context
173
+ - At step 10: A4 excluded from LLM context, files unchanged
174
+ - At step 11: SS1 and D1 are after U3, so rollback goes past them → all messages restored (including A2,T2,A4)
175
+
176
+ ### Event Log
177
+
178
+ | Order | Event | Data |
179
+ |-------|-------|------|
180
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1 } |
181
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2 } |
182
+ | 3 | `session_tree` (step 6) | { type: "step-snapshot", snapshotId: S3 } |
183
+ | 4 | `session_tree` (step 8) | { type: "step-snapshot", snapshotId: S4 } |
184
+ | 5 | `session_tree` (step 9) | { type: "segment_summary", entryId: SS1, targets: [A2,T2] } |
185
+ | 6 | `session_tree` (step 10) | { type: "deletion", entryId: D1, targets: [A4] } |
186
+ | 7 | `session_tree` (step 11) | { type: "branch_summary", entryId: BS1, rollbackTo: U3, skipFiles: false } |
187
+ | 8 | `file-snapshot` (step 11) | { action: "restore", targetSnapshot: S3, filesRestored: [] } |
188
+ | 9 | `session_tree` (step 11, side effect) | { type: "segment_summary_undone", entryId: SS1 } |
189
+ | 10 | `session_tree` (step 11, side effect) | { type: "deletion_undone", entryId: D1 } |
190
+
191
+ ---
192
+
193
+ ## Case 6: Delete Message + Rollback Restores It
194
+
195
+ ### Scenario
196
+ Delete a specific message → Rollback to before the deletion → Deleted message should reappear
197
+
198
+ ### Steps
199
+
200
+ | Step | Action | Entries Created | Context Visible |
201
+ |------|--------|-----------------|-----------------|
202
+ | 1 | User: "create file A" | U1 | U1 |
203
+ | 2 | Assistant creates file A | A1, T1 | U1, A1, T1 |
204
+ | 3 | User: "create file B" | U2 | U1, A1, T1, U2 |
205
+ | 4 | Assistant creates file B | A2, T2 | U1, A1, T1, U2, A2, T2 |
206
+ | 5 | Delete A1 (message only) | D1(targets=[A1]) | U1, T1, U2, A2, T2 (A1 excluded, T1 kept) |
207
+ | 6 | Rollback to U2 (skipFiles=true) | BS1(skipFiles=true) | U1, A1, T1, U2 (A1 restored, D1 after rollback point) |
208
+
209
+ ### Expected Results
210
+ - After step 5: A1 excluded from context, but files unchanged
211
+ - After step 6: A1 reappears in context (D1 is after the rollback point)
212
+ - Files: unchanged throughout (skipFiles=true)
213
+
214
+ ### Event Log
215
+
216
+ | Order | Event | Data |
217
+ |-------|-------|------|
218
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1 } |
219
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2 } |
220
+ | 3 | `session_tree` (step 5) | { type: "deletion", entryId: D1, targets: [A1] } |
221
+ | 4 | `session_tree` (step 6) | { type: "branch_summary", entryId: BS1, rollbackTo: U2, skipFiles: true } |
222
+ | 5 | `session_tree` (step 6, side effect) | { type: "deletion_undone", entryId: D1, restoredEntry: A1 } |
223
+
224
+ ---
225
+
226
+ ## Case 7: Fork Scenario
227
+
228
+ ### Design Decision
229
+ Fork does NOT carry file snapshots. The forked session starts fresh:
230
+ - Object store is shared (content-addressable, files deduplicated)
231
+ - Snapshot index is empty in the forked session
232
+ - First turn_end in the fork creates a new initial snapshot
233
+ - Fork rollback is independent of original session
234
+ - Original session is not affected by fork operations
235
+
236
+ ### Sub-case 7a: Basic Fork
237
+
238
+ | Step | Action | Entries | File State |
239
+ |------|--------|---------|------------|
240
+ | 1 | User: "create file A" | U1 | — |
241
+ | 2 | Assistant creates file A | A1, T1 | A |
242
+ | 3 | User: "modify file A" | U2 | — |
243
+ | 4 | Assistant modifies file A | A2, T2 | A(modified) |
244
+ | 5 | Fork from U2 | New session with U1, A1, T1, U2 | A(modified) — files not changed by fork |
245
+ | 6 | In fork: "create file B" | U1' | — |
246
+ | 7 | In fork: assistant creates B | A1', T1' | A(modified), B |
247
+ | 8 | In original: file state unchanged | — | A(modified) — no B |
248
+
249
+ #### Expected Results (7a)
250
+ - Fork session has independent entry tree
251
+ - Original session unaffected by fork operations
252
+ - File state in fork includes working directory state at fork time
253
+
254
+ #### Event Log (7a)
255
+
256
+ | Order | Event | Session | Data |
257
+ |-------|-------|---------|------|
258
+ | 1 | `session_tree` | original | { type: "step-snapshot", snapshotId: S1 } |
259
+ | 2 | `session_tree` | original | { type: "step-snapshot", snapshotId: S2 } |
260
+ | 3 | `session_tree` | original | { type: "fork", forkSessionId: "fork-1", fromEntry: U2 } |
261
+ | 4 | `session_tree` | fork | { type: "session_created", forkedFrom: original, entries: [U1,A1,T1,U2] } |
262
+ | 5 | `session_tree` | fork | { type: "step-snapshot", snapshotId: S1' } |
263
+ | 6 | `session_tree` | fork | { type: "step-snapshot", snapshotId: S2' } |
264
+
265
+ ### Sub-case 7b: Fork + Rollback
266
+
267
+ | Step | Action | Entries | Expected |
268
+ |------|--------|---------|----------|
269
+ | 1-5 | Same as 7a | — | — |
270
+ | 6 | In fork: rollback to U1' (skipFiles=false) | BS1' | Files in fork: A(modified) restored, B removed |
271
+ | 7 | In original: no change | — | Original unaffected |
272
+
273
+ #### Expected Results (7b)
274
+ - Fork rollback only affects fork session
275
+ - Files in fork: B removed, A stays modified (fork has no pre-fork snapshots to restore to)
276
+ - Original session tree and file state unchanged
277
+
278
+ #### Event Log (7b)
279
+
280
+ | Order | Event | Session | Data |
281
+ |-------|-------|---------|------|
282
+ | 1-6 | Same as 7a | — | — |
283
+ | 7 | `session_tree` | fork | { type: "branch_summary", entryId: BS1', rollbackTo: U1', skipFiles: false } |
284
+ | 8 | `file-snapshot` | fork | { action: "restore", filesRestored: ["B"] } |
285
+
286
+ ### Sub-case 7c: Fork of Fork
287
+
288
+ | Step | Action | Expected |
289
+ |------|--------|----------|
290
+ | 1-5 | Same as 7a | — |
291
+ | 6 | Fork the fork (from fork's current position) | New-new session, fresh snapshot index |
292
+ | 7 | In fork-of-fork: rollback works independently | No cross-contamination |
293
+
294
+ #### Expected Results (7c)
295
+ - Fork-of-fork has its own independent snapshot index
296
+ - Rollback in fork-of-fork does not affect fork or original
297
+ - No cross-contamination between any session level
298
+
299
+ ---
300
+
301
+ ## Case 8: Rollback Across Multiple Compactions
302
+
303
+ ### Scenario
304
+ Multiple compactions → Rollback to before first compaction
305
+
306
+ ### Steps
307
+
308
+ | Step | Action | Entries |
309
+ |------|--------|---------|
310
+ | 1-4 | Create files A, B (turns 1-2) | U1,A1,T1,S1, U2,A2,T2,S2 |
311
+ | 5 | Compaction of turns 1-2 | C1 |
312
+ | 6-9 | Create files C, D (turns 3-4) | U3,A3,T3,S3, U4,A4,T4,S4 |
313
+ | 10 | Compaction of turn 3 (C1+U3-A3) | C2 |
314
+ | 11 | Rollback to U2 (skipFiles=false) | BS1 |
315
+ | 12 | Verify: C1, C2 both gone, original messages restored, files restored to S2 state |
316
+
317
+ ### Expected Results
318
+ - Both C1 and C2 are after U2, so rollback undoes both
319
+ - Original messages U1,A1,T1,U2,A2,T2 are restored in context
320
+ - Files: restored to S2 state (A, B exist; C, D removed)
321
+ - Entry tree: BS1 is new leaf, C1/C2 and everything after U2 is in the branch but not traversed
322
+
323
+ ### Event Log
324
+
325
+ | Order | Event | Data |
326
+ |-------|-------|------|
327
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1 } |
328
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2 } |
329
+ | 3 | `session_tree` (step 5) | { type: "compaction", entryId: C1, summarized: [U1,A1,T1,U2,A2,T2] } |
330
+ | 4 | `session_tree` (step 8) | { type: "step-snapshot", snapshotId: S3 } |
331
+ | 5 | `session_tree` (step 9) | { type: "step-snapshot", snapshotId: S4 } |
332
+ | 6 | `session_tree` (step 10) | { type: "compaction", entryId: C2, summarized: [C1,U3,A3,T3] } |
333
+ | 7 | `session_tree` (step 11) | { type: "branch_summary", entryId: BS1, rollbackTo: U2, skipFiles: false } |
334
+ | 8 | `file-snapshot` (step 11) | { action: "restore", targetSnapshot: S2, filesRestored: ["C","D"], filesDeleted: ["C","D"] } |
335
+ | 9 | `session_tree` (step 11, side effect) | { type: "compaction_undone", entryId: C1 } |
336
+ | 10 | `session_tree` (step 11, side effect) | { type: "compaction_undone", entryId: C2 } |
337
+
338
+ ---
339
+
340
+ ## Case 9: Rollback Then Continue Conversation
341
+
342
+ ### Scenario
343
+ Rollback → Continue working → Rollback again
344
+
345
+ ### Steps
346
+
347
+ | Step | Action | Entries |
348
+ |------|--------|---------|
349
+ | 1-4 | Create A, modify B | U1,A1,T1,S1, U2,A2,T2,S2 |
350
+ | 5 | Rollback to U1 (skipFiles=false) | BS1, files restored |
351
+ | 6 | User: "create file C" | U3 |
352
+ | 7 | Assistant creates file C | A3, T3, S3 |
353
+ | 8 | Rollback to BS1 (skipFiles=false) | BS2, files restored to post-step-5 state |
354
+
355
+ ### Expected Results
356
+ - Step 5: leafId moves to BS1, files restored to S1 state (A exists, B original)
357
+ - Step 7: new branch created from BS1, S3 snapshots current file state
358
+ - Step 8: leafId moves to BS2, files restored to S1 state again (A exists, B original, C removed)
359
+ - A3/T3/S3 branch still exists in tree (not deleted, just not traversed)
360
+
361
+ ### Event Log
362
+
363
+ | Order | Event | Data |
364
+ |-------|-------|------|
365
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1 } |
366
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2 } |
367
+ | 3 | `session_tree` (step 5) | { type: "branch_summary", entryId: BS1, rollbackTo: U1, skipFiles: false } |
368
+ | 4 | `file-snapshot` (step 5) | { action: "restore", targetSnapshot: S1 } |
369
+ | 5 | `session_tree` (step 7) | { type: "step-snapshot", snapshotId: S3, branchFrom: BS1 } |
370
+ | 6 | `session_tree` (step 8) | { type: "branch_summary", entryId: BS2, rollbackTo: BS1, skipFiles: false } |
371
+ | 7 | `file-snapshot` (step 8) | { action: "restore", targetSnapshot: S1, filesRestored: ["B"], filesDeleted: ["C"] } |
372
+
373
+ ---
374
+
375
+ ## Case 10: Concurrent Deletion + Summary + Compaction
376
+
377
+ ### Scenario
378
+ All three operations coexist → Rollback through all of them
379
+
380
+ ### Steps
381
+
382
+ | Step | Action | Entries |
383
+ |------|--------|---------|
384
+ | 1-6 | Create A, B, C (3 turns) | U1,A1,T1,S1, U2,A2,T2,S2, U3,A3,T3,S3 |
385
+ | 7 | Delete A2 | D1(targets=[A2]) |
386
+ | 8 | Summarize A1-T1 | SS1(targets=[A1,T1], summary="Created file A") |
387
+ | 9 | Compact turns 1-3 | C1 |
388
+ | 10 | Rollback to U2 (skipFiles=false) | BS1 |
389
+ | 11 | Verify: D1, SS1, C1 all after rollback point, original messages restored, files at S2 state |
390
+
391
+ ### Expected Results
392
+ - At step 7: A2 excluded from context
393
+ - At step 8: A1,T1 replaced by segment summary in context
394
+ - At step 9: remaining messages summarized into compaction
395
+ - At step 10: D1, SS1, C1 all undone → original messages U1,A1,T1,U2,A2,T2 visible
396
+ - Files: restored to S2 state (A, B exist; C removed)
397
+
398
+ ### Event Log
399
+
400
+ | Order | Event | Data |
401
+ |-------|-------|------|
402
+ | 1 | `session_tree` (step 2) | { type: "step-snapshot", snapshotId: S1 } |
403
+ | 2 | `session_tree` (step 4) | { type: "step-snapshot", snapshotId: S2 } |
404
+ | 3 | `session_tree` (step 6) | { type: "step-snapshot", snapshotId: S3 } |
405
+ | 4 | `session_tree` (step 7) | { type: "deletion", entryId: D1, targets: [A2] } |
406
+ | 5 | `session_tree` (step 8) | { type: "segment_summary", entryId: SS1, targets: [A1,T1] } |
407
+ | 6 | `session_tree` (step 9) | { type: "compaction", entryId: C1, summarized: [SS1,U2,D1,..] } |
408
+ | 7 | `session_tree` (step 10) | { type: "branch_summary", entryId: BS1, rollbackTo: U2, skipFiles: false } |
409
+ | 8 | `file-snapshot` (step 10) | { action: "restore", targetSnapshot: S2, filesDeleted: ["C"] } |
410
+ | 9 | `session_tree` (step 10, side effect) | { type: "deletion_undone", entryId: D1 } |
411
+ | 10 | `session_tree` (step 10, side effect) | { type: "segment_summary_undone", entryId: SS1 } |
412
+ | 11 | `session_tree` (step 10, side effect) | { type: "compaction_undone", entryId: C1 } |
package/docs/rpc.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  RPC mode enables headless operation of the coding agent via a JSON protocol over stdin/stdout. This is useful for embedding the agent in other applications, IDEs, or custom UIs.
4
4
 
5
- **Note for Node.js/TypeScript users**: If you're building a Node.js application, consider using `AgentSession` directly from `@mariozechner/pi-coding-agent` instead of spawning a subprocess. See [`src/core/agent-session.ts`](../src/core/agent-session.ts) for the API. For a subprocess-based TypeScript client, see [`src/modes/rpc/rpc-client.ts`](../src/modes/rpc/rpc-client.ts).
5
+ **Note for Node.js/TypeScript users**: If you're building a Node.js application, consider using `AgentSession` directly from `@dyyz1993/pi-coding-agent` instead of spawning a subprocess. See [`src/core/agent-session.ts`](../src/core/agent-session.ts) for the API. For a subprocess-based TypeScript client, see [`src/modes/rpc/rpc-client.ts`](../src/modes/rpc/rpc-client.ts).
6
6
 
7
7
  ## Starting RPC Mode
8
8
 
package/docs/sdk.md CHANGED
@@ -16,7 +16,7 @@ See [examples/sdk/](../examples/sdk/) for working examples from minimal to full
16
16
  ## Quick Start
17
17
 
18
18
  ```typescript
19
- import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from "@mariozechner/pi-coding-agent";
19
+ import { AuthStorage, createAgentSession, ModelRegistry, SessionManager } from "@dyyz1993/pi-coding-agent";
20
20
 
21
21
  // Set up credential storage and model registry
22
22
  const authStorage = AuthStorage.create();
@@ -40,7 +40,7 @@ await session.prompt("What files are in the current directory?");
40
40
  ## Installation
41
41
 
42
42
  ```bash
43
- npm install @mariozechner/pi-coding-agent
43
+ npm install @dyyz1993/pi-coding-agent
44
44
  ```
45
45
 
46
46
  The SDK is included in the main package. No separate installation needed.
@@ -54,7 +54,7 @@ The main factory function for a single `AgentSession`.
54
54
  `createAgentSession()` uses a `ResourceLoader` to supply extensions, skills, prompt templates, themes, and context files. If you do not provide one, it uses `DefaultResourceLoader` with standard discovery.
55
55
 
56
56
  ```typescript
57
- import { createAgentSession } from "@mariozechner/pi-coding-agent";
57
+ import { createAgentSession } from "@dyyz1993/pi-coding-agent";
58
58
 
59
59
  // Minimal: defaults with DefaultResourceLoader
60
60
  const { session } = await createAgentSession();
@@ -132,7 +132,7 @@ import {
132
132
  createAgentSessionServices,
133
133
  getAgentDir,
134
134
  SessionManager,
135
- } from "@mariozechner/pi-coding-agent";
135
+ } from "@dyyz1993/pi-coding-agent";
136
136
 
137
137
  const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
138
138
  const services = await createAgentSessionServices({ cwd });
@@ -239,7 +239,7 @@ Both `steer()` and `followUp()` expand file-based prompt templates but error on
239
239
 
240
240
  ### Agent and AgentState
241
241
 
242
- The `Agent` class (from `@mariozechner/pi-agent-core`) handles the core LLM interaction. Access it via `session.agent`.
242
+ The `Agent` class (from `@dyyz1993/pi-agent-core`) handles the core LLM interaction. Access it via `session.agent`.
243
243
 
244
244
  ```typescript
245
245
  // Access current state
@@ -368,8 +368,8 @@ When you pass a custom `ResourceLoader`, `cwd` and `agentDir` no longer control
368
368
  ### Model
369
369
 
370
370
  ```typescript
371
- import { getModel } from "@mariozechner/pi-ai";
372
- import { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent";
371
+ import { getModel } from "@dyyz1993/pi-ai";
372
+ import { AuthStorage, ModelRegistry } from "@dyyz1993/pi-coding-agent";
373
373
 
374
374
  const authStorage = AuthStorage.create();
375
375
  const modelRegistry = ModelRegistry.create(authStorage);
@@ -416,7 +416,7 @@ API key resolution priority (handled by AuthStorage):
416
416
  4. Fallback resolver (for custom provider keys from `models.json`)
417
417
 
418
418
  ```typescript
419
- import { AuthStorage, ModelRegistry } from "@mariozechner/pi-coding-agent";
419
+ import { AuthStorage, ModelRegistry } from "@dyyz1993/pi-coding-agent";
420
420
 
421
421
  // Default: uses ~/.pi/agent/auth.json and ~/.pi/agent/models.json
422
422
  const authStorage = AuthStorage.create();
@@ -452,7 +452,7 @@ const simpleRegistry = ModelRegistry.inMemory(authStorage);
452
452
  Use a `ResourceLoader` to override the system prompt:
453
453
 
454
454
  ```typescript
455
- import { createAgentSession, DefaultResourceLoader } from "@mariozechner/pi-coding-agent";
455
+ import { createAgentSession, DefaultResourceLoader } from "@dyyz1993/pi-coding-agent";
456
456
 
457
457
  const loader = new DefaultResourceLoader({
458
458
  systemPromptOverride: () => "You are a helpful assistant.",
@@ -472,7 +472,7 @@ import {
472
472
  readOnlyTools, // read, grep, find, ls
473
473
  readTool, bashTool, editTool, writeTool,
474
474
  grepTool, findTool, lsTool,
475
- } from "@mariozechner/pi-coding-agent";
475
+ } from "@dyyz1993/pi-coding-agent";
476
476
 
477
477
  // Use built-in tool set
478
478
  const { session } = await createAgentSession({
@@ -500,7 +500,7 @@ import {
500
500
  createGrepTool,
501
501
  createFindTool,
502
502
  createLsTool,
503
- } from "@mariozechner/pi-coding-agent";
503
+ } from "@dyyz1993/pi-coding-agent";
504
504
 
505
505
  const cwd = "/path/to/project";
506
506
 
@@ -530,7 +530,7 @@ const { session } = await createAgentSession({
530
530
 
531
531
  ```typescript
532
532
  import { Type } from "typebox";
533
- import { createAgentSession, defineTool } from "@mariozechner/pi-coding-agent";
533
+ import { createAgentSession, defineTool } from "@dyyz1993/pi-coding-agent";
534
534
 
535
535
  // Inline custom tool
536
536
  const myTool = defineTool({
@@ -563,7 +563,7 @@ Custom tools passed via `customTools` are combined with extension-registered too
563
563
  Extensions are loaded by the `ResourceLoader`. `DefaultResourceLoader` discovers extensions from `~/.pi/agent/extensions/`, `.pi/extensions/`, and settings.json extension sources.
564
564
 
565
565
  ```typescript
566
- import { createAgentSession, DefaultResourceLoader } from "@mariozechner/pi-coding-agent";
566
+ import { createAgentSession, DefaultResourceLoader } from "@dyyz1993/pi-coding-agent";
567
567
 
568
568
  const loader = new DefaultResourceLoader({
569
569
  additionalExtensionPaths: ["/path/to/my-extension.ts"],
@@ -585,7 +585,7 @@ Extensions can register tools, subscribe to events, add commands, and more. See
585
585
  **Event Bus:** Extensions can communicate via `pi.events`. Pass a shared `eventBus` to `DefaultResourceLoader` if you need to emit or listen from outside:
586
586
 
587
587
  ```typescript
588
- import { createEventBus, DefaultResourceLoader } from "@mariozechner/pi-coding-agent";
588
+ import { createEventBus, DefaultResourceLoader } from "@dyyz1993/pi-coding-agent";
589
589
 
590
590
  const eventBus = createEventBus();
591
591
  const loader = new DefaultResourceLoader({
@@ -605,7 +605,7 @@ import {
605
605
  createAgentSession,
606
606
  DefaultResourceLoader,
607
607
  type Skill,
608
- } from "@mariozechner/pi-coding-agent";
608
+ } from "@dyyz1993/pi-coding-agent";
609
609
 
610
610
  const customSkill: Skill = {
611
611
  name: "my-skill",
@@ -631,7 +631,7 @@ const { session } = await createAgentSession({ resourceLoader: loader });
631
631
  ### Context Files
632
632
 
633
633
  ```typescript
634
- import { createAgentSession, DefaultResourceLoader } from "@mariozechner/pi-coding-agent";
634
+ import { createAgentSession, DefaultResourceLoader } from "@dyyz1993/pi-coding-agent";
635
635
 
636
636
  const loader = new DefaultResourceLoader({
637
637
  agentsFilesOverride: (current) => ({
@@ -655,7 +655,7 @@ import {
655
655
  createAgentSession,
656
656
  DefaultResourceLoader,
657
657
  type PromptTemplate,
658
- } from "@mariozechner/pi-coding-agent";
658
+ } from "@dyyz1993/pi-coding-agent";
659
659
 
660
660
  const customCommand: PromptTemplate = {
661
661
  name: "deploy",
@@ -690,7 +690,7 @@ import {
690
690
  createAgentSessionServices,
691
691
  getAgentDir,
692
692
  SessionManager,
693
- } from "@mariozechner/pi-coding-agent";
693
+ } from "@dyyz1993/pi-coding-agent";
694
694
 
695
695
  // In-memory (no persistence)
696
696
  const { session } = await createAgentSession({
@@ -779,12 +779,12 @@ sm.branchWithSummary(id, "Summary..."); // Branch with context summary
779
779
  sm.createBranchedSession(leafId); // Extract path to new file
780
780
  ```
781
781
 
782
- > See [examples/sdk/11-sessions.ts](../examples/sdk/11-sessions.ts) and [docs/session.md](session.md)
782
+ > See [examples/sdk/11-sessions.ts](../examples/sdk/11-sessions.ts) and [Session Format](session-format.md)
783
783
 
784
784
  ### Settings Management
785
785
 
786
786
  ```typescript
787
- import { createAgentSession, SettingsManager, SessionManager } from "@mariozechner/pi-coding-agent";
787
+ import { createAgentSession, SettingsManager, SessionManager } from "@dyyz1993/pi-coding-agent";
788
788
 
789
789
  // Default: loads from files (global + project merged)
790
790
  const { session } = await createAgentSession({
@@ -840,7 +840,7 @@ Use `DefaultResourceLoader` to discover extensions, skills, prompts, themes, and
840
840
  import {
841
841
  DefaultResourceLoader,
842
842
  getAgentDir,
843
- } from "@mariozechner/pi-coding-agent";
843
+ } from "@dyyz1993/pi-coding-agent";
844
844
 
845
845
  const loader = new DefaultResourceLoader({
846
846
  cwd,
@@ -881,7 +881,7 @@ interface LoadExtensionsResult {
881
881
  ## Complete Example
882
882
 
883
883
  ```typescript
884
- import { getModel } from "@mariozechner/pi-ai";
884
+ import { getModel } from "@dyyz1993/pi-ai";
885
885
  import { Type } from "typebox";
886
886
  import {
887
887
  AuthStorage,
@@ -893,7 +893,7 @@ import {
893
893
  readTool,
894
894
  SessionManager,
895
895
  SettingsManager,
896
- } from "@mariozechner/pi-coding-agent";
896
+ } from "@dyyz1993/pi-coding-agent";
897
897
 
898
898
  // Set up auth storage (custom location)
899
899
  const authStorage = AuthStorage.create("/custom/agent/auth.json");
@@ -978,7 +978,7 @@ import {
978
978
  getAgentDir,
979
979
  InteractiveMode,
980
980
  SessionManager,
981
- } from "@mariozechner/pi-coding-agent";
981
+ } from "@dyyz1993/pi-coding-agent";
982
982
 
983
983
  const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
984
984
  const services = await createAgentSessionServices({ cwd });
@@ -1018,7 +1018,7 @@ import {
1018
1018
  getAgentDir,
1019
1019
  runPrintMode,
1020
1020
  SessionManager,
1021
- } from "@mariozechner/pi-coding-agent";
1021
+ } from "@dyyz1993/pi-coding-agent";
1022
1022
 
1023
1023
  const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
1024
1024
  const services = await createAgentSessionServices({ cwd });
@@ -1055,7 +1055,7 @@ import {
1055
1055
  getAgentDir,
1056
1056
  runRpcMode,
1057
1057
  SessionManager,
1058
- } from "@mariozechner/pi-coding-agent";
1058
+ } from "@dyyz1993/pi-coding-agent";
1059
1059
 
1060
1060
  const createRuntime: CreateAgentSessionRuntimeFactory = async ({ cwd, sessionManager, sessionStartEvent }) => {
1061
1061
  const services = await createAgentSessionServices({ cwd });
@@ -28,13 +28,13 @@ Existing sessions are automatically migrated to the current version (v3) when lo
28
28
 
29
29
  ## Source Files
30
30
 
31
- Source on GitHub ([pi-mono](https://github.com/badlogic/pi-mono)):
32
- - [`packages/coding-agent/src/core/session-manager.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/session-manager.ts) - Session entry types and SessionManager
33
- - [`packages/coding-agent/src/core/messages.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/coding-agent/src/core/messages.ts) - Extended message types (BashExecutionMessage, CustomMessage, etc.)
34
- - [`packages/ai/src/types.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/ai/src/types.ts) - Base message types (UserMessage, AssistantMessage, ToolResultMessage)
35
- - [`packages/agent/src/types.ts`](https://github.com/badlogic/pi-mono/blob/main/packages/agent/src/types.ts) - AgentMessage union type
31
+ Source on GitHub ([pi-mono](https://github.com/dyyz1993/pi-mono)):
32
+ - [`packages/coding-agent/src/core/session-manager.ts`](https://github.com/dyyz1993/pi-mono/blob/main/packages/coding-agent/src/core/session-manager.ts) - Session entry types and SessionManager
33
+ - [`packages/coding-agent/src/core/messages.ts`](https://github.com/dyyz1993/pi-mono/blob/main/packages/coding-agent/src/core/messages.ts) - Extended message types (BashExecutionMessage, CustomMessage, etc.)
34
+ - [`packages/ai/src/types.ts`](https://github.com/dyyz1993/pi-mono/blob/main/packages/ai/src/types.ts) - Base message types (UserMessage, AssistantMessage, ToolResultMessage)
35
+ - [`packages/agent/src/types.ts`](https://github.com/dyyz1993/pi-mono/blob/main/packages/agent/src/types.ts) - AgentMessage union type
36
36
 
37
- For TypeScript definitions in your project, inspect `node_modules/@mariozechner/pi-coding-agent/dist/` and `node_modules/@mariozechner/pi-ai/dist/`.
37
+ For TypeScript definitions in your project, inspect `node_modules/@dyyz1993/pi-coding-agent/dist/` and `node_modules/@dyyz1993/pi-ai/dist/`.
38
38
 
39
39
  ## Message Types
40
40