@herbertgao/pi-extensions 2026.9.19 → 2026.10.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 (444) hide show
  1. package/README.md +14 -16
  2. package/THIRD_PARTY_NOTICES.md +29 -3
  3. package/node_modules/@herbertgao/pi-bark/README.md +39 -3
  4. package/node_modules/@herbertgao/pi-bark/package.json +1 -1
  5. package/node_modules/@herbertgao/pi-bark/src/index.ts +275 -15
  6. package/node_modules/@herbertgao/pi-cc-extensions/README.en.md +85 -68
  7. package/node_modules/@herbertgao/pi-cc-extensions/README.md +79 -62
  8. package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/preview.webp +0 -0
  9. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/config.ts +116 -34
  10. package/node_modules/@herbertgao/pi-cc-extensions/extensions/config/panel.ts +370 -118
  11. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/core.ts +6 -36
  12. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/agent-summary/index.ts +2 -2
  13. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/compact-thinking.ts +31 -33
  14. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/context.ts +330 -360
  15. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/reference/index.ts +56 -108
  16. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/reference/session.ts +97 -15
  17. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/reference/subagent.ts +80 -45
  18. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/flush-docked-bash.ts +36 -0
  19. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/footer-layout.ts +229 -0
  20. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/footer.ts +521 -0
  21. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/mcp-chip.ts +136 -0
  22. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/startup-header.ts +92 -61
  23. package/node_modules/@herbertgao/pi-cc-extensions/extensions/feature/shell/working-message.ts +58 -38
  24. package/node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts +19 -3
  25. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/compact-mode.ts +1127 -231
  26. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/default-mode.ts +267 -262
  27. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/index.ts +38 -48
  28. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/markdown-enhance.ts +8 -2
  29. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/hover.ts +2 -7
  30. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/interaction.ts +287 -114
  31. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/layout.ts +15 -6
  32. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/packets.ts +18 -72
  33. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/mouse/scroll.ts +61 -26
  34. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/codemode.ts +303 -0
  35. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/ansi-utils.ts +25 -57
  36. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-component.ts +125 -0
  37. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-edit-render.ts +227 -0
  38. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-header.ts +136 -0
  39. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-highlight.ts +151 -0
  40. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-inline.ts +324 -0
  41. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-layout.ts +762 -0
  42. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-limits.ts +152 -0
  43. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-palette.ts +410 -0
  44. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-parse.ts +535 -0
  45. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-presentation.ts +4 -4
  46. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-renderer.ts +21 -3219
  47. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-text.ts +44 -0
  48. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/diff-write-render.ts +568 -0
  49. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/index.ts +103 -48
  50. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/line-width-safety.ts +8 -7
  51. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/write-execution.ts +2 -1
  52. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/grouping.ts +171 -196
  53. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/mcp-title.ts +39 -0
  54. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{message-display.ts → tool/message-display.ts} +27 -93
  55. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/names.ts +429 -0
  56. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/result.ts +259 -164
  57. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/{show-more-hint.ts → tool/show-more-hint.ts} +10 -0
  58. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/transcript-refresh.ts +8 -26
  59. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/ansi-color.ts +44 -0
  60. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/ansi-text.ts +77 -0
  61. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/component-tree.ts +34 -0
  62. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/format.ts +28 -0
  63. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/fullscreen-detect.ts +51 -0
  64. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/patch-keys.ts +124 -0
  65. package/node_modules/@herbertgao/pi-cc-extensions/extensions/utils/sgr-mouse.ts +70 -0
  66. package/node_modules/@herbertgao/pi-cc-extensions/package.json +10 -8
  67. package/node_modules/@herbertgao/pi-subagents/CHANGELOG.md +6 -0
  68. package/node_modules/@herbertgao/pi-subagents/package.json +1 -1
  69. package/node_modules/@herbertgao/pi-subagents/src/mention-clone.ts +3 -2
  70. package/node_modules/@herbertgao/sol-pi/CONTRIBUTING.md +22 -0
  71. package/node_modules/@herbertgao/sol-pi/README.md +36 -17
  72. package/node_modules/@herbertgao/sol-pi/THIRD_PARTY_NOTICES.md +10 -6
  73. package/node_modules/@herbertgao/sol-pi/agents-install.md +15 -12
  74. package/node_modules/@herbertgao/sol-pi/docs/compatibility.md +24 -8
  75. package/node_modules/@herbertgao/sol-pi/docs/configuration.md +2 -2
  76. package/node_modules/@herbertgao/sol-pi/docs/star-history.md +18 -0
  77. package/node_modules/@herbertgao/sol-pi/package.json +4 -2
  78. package/node_modules/@herbertgao/sol-pi/scripts/check-sol-pi-config.mjs +1 -1
  79. package/node_modules/@herbertgao/sol-pi/src/sol-pi/config.ts +1 -1
  80. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/file-queue.ts +23 -4
  81. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/index.ts +32 -1
  82. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/action-fusion/then-run.ts +3 -2
  83. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/observation-pack/observation.ts +1 -1
  84. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/economics.ts +27 -7
  85. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/extension.ts +137 -41
  86. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/index.ts +1 -0
  87. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/plan.ts +2 -1
  88. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/projection.ts +58 -0
  89. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/state.ts +28 -6
  90. package/node_modules/@herbertgao/sol-pi/src/sol-pi/extensions/online-context-compact/tools.ts +2 -1
  91. package/node_modules/@herbertgao/sol-pi/src/sol-pi/runtime-paths.ts +15 -2
  92. package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +2 -2
  93. package/node_modules/@pi-plugins/fast-mode/README.md +7 -1
  94. package/node_modules/@pi-plugins/fast-mode/dist/index.d.mts.map +1 -1
  95. package/node_modules/@pi-plugins/fast-mode/dist/index.mjs +7 -1
  96. package/node_modules/@pi-plugins/fast-mode/dist/index.mjs.map +1 -1
  97. package/node_modules/@pi-plugins/fast-mode/package.json +5 -5
  98. package/node_modules/pi-antigravity/README.md +3 -0
  99. package/node_modules/pi-antigravity/package.json +8 -8
  100. package/node_modules/pi-antigravity/src/auth/oauth.ts +6 -3
  101. package/node_modules/pi-antigravity/src/index.ts +114 -110
  102. package/node_modules/pi-antigravity/src/stream/stream.ts +1 -1
  103. package/node_modules/pi-antigravity/src/utils/util.ts +18 -1
  104. package/node_modules/pi-multi-account/CHANGELOG.md +20 -0
  105. package/node_modules/pi-multi-account/README.md +46 -8
  106. package/node_modules/pi-multi-account/config-file-transaction.ts +42 -0
  107. package/node_modules/pi-multi-account/index.ts +255 -269
  108. package/node_modules/pi-multi-account/model-pins.ts +36 -0
  109. package/node_modules/pi-multi-account/package.json +9 -7
  110. package/node_modules/pi-multi-account/slot-proxy-auth.ts +12 -2
  111. package/node_modules/pi-multi-account/slot-proxy.ts +27 -5
  112. package/node_modules/pi-web-access/CHANGELOG.md +17 -0
  113. package/node_modules/pi-web-access/README.md +6 -3
  114. package/node_modules/pi-web-access/brave-rate-limit.ts +170 -0
  115. package/node_modules/pi-web-access/brave.ts +28 -11
  116. package/node_modules/pi-web-access/dist/index.js +202 -33
  117. package/node_modules/pi-web-access/gemini-search.ts +2 -5
  118. package/node_modules/pi-web-access/index.ts +13 -7
  119. package/node_modules/pi-web-access/openai-search.ts +24 -10
  120. package/node_modules/pi-web-access/package.json +1 -1
  121. package/node_modules/pi-web-access/summary-review.ts +8 -2
  122. package/node_modules/{@herbertgao/resume-from → resume-from}/README.md +16 -12
  123. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/adapter.d.ts +0 -5
  124. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/adapter.js +2 -3
  125. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/contract.d.ts +2 -2
  126. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/reader.d.ts +3 -0
  127. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/reader.js +27 -15
  128. package/node_modules/{@herbertgao/resume-from/dist/adapters/codex → resume-from/dist/adapters/claude-code}/redaction.js +16 -3
  129. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/writer.d.ts +2 -4
  130. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/writer.js +1 -1
  131. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/contract.d.ts +2 -4
  132. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/index.js +1 -2
  133. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/read.d.ts +16 -0
  134. package/node_modules/resume-from/dist/adapters/codex/read.js +723 -0
  135. package/node_modules/{@herbertgao/resume-from/dist/adapters/pi → resume-from/dist/adapters/codex}/redaction.js +16 -3
  136. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/rollout.d.ts +44 -4
  137. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/rollout.js +88 -4
  138. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/write.d.ts +2 -2
  139. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/write.js +2 -2
  140. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/contract.d.ts +5 -1
  141. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/adapter.js +10 -6
  142. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/contract.d.ts +2 -2
  143. package/node_modules/{@herbertgao/resume-from/dist/adapters/claude-code → resume-from/dist/adapters/pi}/redaction.js +16 -3
  144. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/serialize.d.ts +2 -4
  145. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/serialize.js +2 -2
  146. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/render.d.ts +1 -1
  147. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/render.js +4 -4
  148. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/runner.js +2 -2
  149. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/contract.d.ts +2 -2
  150. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/command.js +31 -8
  151. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/wiring.d.ts +1 -1
  152. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/wiring.js +1 -2
  153. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/confirmation.d.ts +4 -1
  154. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/confirmation.js +2 -2
  155. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/contract.d.ts +8 -6
  156. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/contract.d.ts +10 -5
  157. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/finder.d.ts +2 -1
  158. package/node_modules/resume-from/dist/import/discovery/finder.js +269 -0
  159. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/contract.d.ts +3 -3
  160. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/lander.js +3 -3
  161. package/node_modules/resume-from/dist/import/pipeline.d.ts +28 -0
  162. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/pipeline.js +31 -11
  163. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/builder.d.ts +2 -2
  164. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/builder.js +9 -5
  165. package/node_modules/resume-from/dist/import/preview/warnings.d.ts +14 -0
  166. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/warnings.js +26 -20
  167. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/wiring.js +12 -2
  168. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/contract.d.ts +9 -3
  169. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/git.d.ts +4 -4
  170. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/git.js +7 -4
  171. package/node_modules/resume-from/dist/platform/repo/reader.d.ts +3 -0
  172. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/reader.js +60 -20
  173. package/node_modules/{@herbertgao/resume-from → resume-from}/dist/session/contract.d.ts +8 -1
  174. package/node_modules/{@herbertgao/resume-from → resume-from}/package.json +19 -32
  175. package/node_modules/{@herbertgao/resume-from → resume-from}/shims/pi/extensions/resume-from.js +2 -2
  176. package/package.json +18 -22
  177. package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/hero.en.svg +0 -101
  178. package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/hero.svg +0 -101
  179. package/node_modules/@herbertgao/pi-cc-extensions/assets/readme/welcome.webp +0 -0
  180. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/render-utils.ts +0 -5
  181. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/types.ts +0 -30
  182. package/node_modules/@herbertgao/pi-cc-extensions/extensions/renderer/tool/diff/write-display-utils.ts +0 -12
  183. package/node_modules/@herbertgao/resume-from/dist/adapters/codex/read.js +0 -270
  184. package/node_modules/@herbertgao/resume-from/dist/import/discovery/finder.js +0 -129
  185. package/node_modules/@herbertgao/resume-from/dist/import/pipeline.d.ts +0 -17
  186. package/node_modules/@herbertgao/resume-from/dist/import/preview/warnings.d.ts +0 -11
  187. package/node_modules/@herbertgao/resume-from/dist/platform/repo/reader.d.ts +0 -8
  188. package/node_modules/pi-footer/CHANGELOG.md +0 -145
  189. package/node_modules/pi-footer/LICENSE +0 -21
  190. package/node_modules/pi-footer/README.md +0 -354
  191. package/node_modules/pi-footer/package.json +0 -68
  192. package/node_modules/pi-footer/src/cache.ts +0 -106
  193. package/node_modules/pi-footer/src/colors.ts +0 -237
  194. package/node_modules/pi-footer/src/config.ts +0 -202
  195. package/node_modules/pi-footer/src/event-widgets.ts +0 -41
  196. package/node_modules/pi-footer/src/extension-statuses.ts +0 -102
  197. package/node_modules/pi-footer/src/git.ts +0 -135
  198. package/node_modules/pi-footer/src/index.ts +0 -268
  199. package/node_modules/pi-footer/src/metrics.ts +0 -141
  200. package/node_modules/pi-footer/src/presets.ts +0 -383
  201. package/node_modules/pi-footer/src/render.ts +0 -114
  202. package/node_modules/pi-footer/src/separators.ts +0 -52
  203. package/node_modules/pi-footer/src/types.ts +0 -122
  204. package/node_modules/pi-footer/src/ui/color-level-confirm.ts +0 -22
  205. package/node_modules/pi-footer/src/ui/color-options.ts +0 -195
  206. package/node_modules/pi-footer/src/ui/config-lifecycle.ts +0 -61
  207. package/node_modules/pi-footer/src/ui/edit-colors.ts +0 -13
  208. package/node_modules/pi-footer/src/ui/events.ts +0 -35
  209. package/node_modules/pi-footer/src/ui/extension-status-picker.ts +0 -60
  210. package/node_modules/pi-footer/src/ui/extension-statuses.ts +0 -73
  211. package/node_modules/pi-footer/src/ui/fields.ts +0 -252
  212. package/node_modules/pi-footer/src/ui/global-menu.ts +0 -126
  213. package/node_modules/pi-footer/src/ui/helpers.ts +0 -44
  214. package/node_modules/pi-footer/src/ui/layout.ts +0 -17
  215. package/node_modules/pi-footer/src/ui/line-list.ts +0 -19
  216. package/node_modules/pi-footer/src/ui/model.ts +0 -64
  217. package/node_modules/pi-footer/src/ui/navigation.ts +0 -29
  218. package/node_modules/pi-footer/src/ui/option-edit.ts +0 -93
  219. package/node_modules/pi-footer/src/ui/overlay-render.ts +0 -103
  220. package/node_modules/pi-footer/src/ui/screen-context.ts +0 -18
  221. package/node_modules/pi-footer/src/ui/screen-controller.ts +0 -27
  222. package/node_modules/pi-footer/src/ui/screen-render.ts +0 -32
  223. package/node_modules/pi-footer/src/ui/screen-state.ts +0 -20
  224. package/node_modules/pi-footer/src/ui/screen.ts +0 -243
  225. package/node_modules/pi-footer/src/ui/screens/add-widget.ts +0 -92
  226. package/node_modules/pi-footer/src/ui/screens/confirm-exit.ts +0 -52
  227. package/node_modules/pi-footer/src/ui/screens/controller.ts +0 -12
  228. package/node_modules/pi-footer/src/ui/screens/edit-colors.ts +0 -68
  229. package/node_modules/pi-footer/src/ui/screens/edit-widget.ts +0 -115
  230. package/node_modules/pi-footer/src/ui/screens/extension-status-row.ts +0 -61
  231. package/node_modules/pi-footer/src/ui/screens/global.ts +0 -75
  232. package/node_modules/pi-footer/src/ui/screens/line-list.ts +0 -108
  233. package/node_modules/pi-footer/src/ui/screens/main.ts +0 -99
  234. package/node_modules/pi-footer/src/ui/screens/terminal.ts +0 -121
  235. package/node_modules/pi-footer/src/ui/screens/widget-list.ts +0 -154
  236. package/node_modules/pi-footer/src/ui/terminal-menu.ts +0 -32
  237. package/node_modules/pi-footer/src/ui/theme.ts +0 -48
  238. package/node_modules/pi-footer/src/ui/title-bar.ts +0 -100
  239. package/node_modules/pi-footer/src/ui/widget-actions.ts +0 -76
  240. package/node_modules/pi-footer/src/ui.ts +0 -66
  241. package/node_modules/pi-footer/src/widgets/context.ts +0 -28
  242. package/node_modules/pi-footer/src/widgets/core/active-tools.ts +0 -17
  243. package/node_modules/pi-footer/src/widgets/core/context-window.ts +0 -24
  244. package/node_modules/pi-footer/src/widgets/core/cwd-basename.ts +0 -19
  245. package/node_modules/pi-footer/src/widgets/core/cwd.ts +0 -108
  246. package/node_modules/pi-footer/src/widgets/core/event.ts +0 -34
  247. package/node_modules/pi-footer/src/widgets/core/external-status.ts +0 -102
  248. package/node_modules/pi-footer/src/widgets/core/model-provider.ts +0 -20
  249. package/node_modules/pi-footer/src/widgets/core/model.ts +0 -35
  250. package/node_modules/pi-footer/src/widgets/core/provider.ts +0 -17
  251. package/node_modules/pi-footer/src/widgets/core/session-name.ts +0 -17
  252. package/node_modules/pi-footer/src/widgets/core/text-verbosity.ts +0 -17
  253. package/node_modules/pi-footer/src/widgets/core/thinking-level.ts +0 -17
  254. package/node_modules/pi-footer/src/widgets/git/ahead-behind.ts +0 -17
  255. package/node_modules/pi-footer/src/widgets/git/branch.ts +0 -81
  256. package/node_modules/pi-footer/src/widgets/git/clean.ts +0 -19
  257. package/node_modules/pi-footer/src/widgets/git/deletions.ts +0 -17
  258. package/node_modules/pi-footer/src/widgets/git/diff.ts +0 -38
  259. package/node_modules/pi-footer/src/widgets/git/insertions.ts +0 -17
  260. package/node_modules/pi-footer/src/widgets/git/remote.ts +0 -17
  261. package/node_modules/pi-footer/src/widgets/git/root.ts +0 -17
  262. package/node_modules/pi-footer/src/widgets/git/sha.ts +0 -17
  263. package/node_modules/pi-footer/src/widgets/git/staged.ts +0 -17
  264. package/node_modules/pi-footer/src/widgets/git/status.ts +0 -19
  265. package/node_modules/pi-footer/src/widgets/git/unstaged.ts +0 -17
  266. package/node_modules/pi-footer/src/widgets/git/untracked.ts +0 -17
  267. package/node_modules/pi-footer/src/widgets/instance.ts +0 -118
  268. package/node_modules/pi-footer/src/widgets/layout/custom-text.ts +0 -18
  269. package/node_modules/pi-footer/src/widgets/layout/flex-separator.ts +0 -32
  270. package/node_modules/pi-footer/src/widgets/layout/separator.ts +0 -57
  271. package/node_modules/pi-footer/src/widgets/layout/spacer.ts +0 -31
  272. package/node_modules/pi-footer/src/widgets/options.ts +0 -122
  273. package/node_modules/pi-footer/src/widgets/project/runtime.ts +0 -361
  274. package/node_modules/pi-footer/src/widgets/registry.ts +0 -223
  275. package/node_modules/pi-footer/src/widgets/session/assistant-messages.ts +0 -17
  276. package/node_modules/pi-footer/src/widgets/session/compactions.ts +0 -17
  277. package/node_modules/pi-footer/src/widgets/session/elapsed.ts +0 -18
  278. package/node_modules/pi-footer/src/widgets/session/last-activity.ts +0 -18
  279. package/node_modules/pi-footer/src/widgets/session/messages.ts +0 -19
  280. package/node_modules/pi-footer/src/widgets/session/session-id.ts +0 -17
  281. package/node_modules/pi-footer/src/widgets/session/session-start.ts +0 -18
  282. package/node_modules/pi-footer/src/widgets/session/tool-results.ts +0 -17
  283. package/node_modules/pi-footer/src/widgets/session/total-messages.ts +0 -19
  284. package/node_modules/pi-footer/src/widgets/session/total-time.ts +0 -18
  285. package/node_modules/pi-footer/src/widgets/session/user-messages.ts +0 -17
  286. package/node_modules/pi-footer/src/widgets/store.ts +0 -26
  287. package/node_modules/pi-footer/src/widgets/tokens/cache-hit-rate.ts +0 -55
  288. package/node_modules/pi-footer/src/widgets/tokens/cache-read.ts +0 -18
  289. package/node_modules/pi-footer/src/widgets/tokens/cache-write.ts +0 -18
  290. package/node_modules/pi-footer/src/widgets/tokens/context-bar.ts +0 -108
  291. package/node_modules/pi-footer/src/widgets/tokens/context-length.ts +0 -26
  292. package/node_modules/pi-footer/src/widgets/tokens/context-remaining.ts +0 -29
  293. package/node_modules/pi-footer/src/widgets/tokens/context.ts +0 -29
  294. package/node_modules/pi-footer/src/widgets/tokens/cost.ts +0 -51
  295. package/node_modules/pi-footer/src/widgets/tokens/input-speed.ts +0 -25
  296. package/node_modules/pi-footer/src/widgets/tokens/input-tokens.ts +0 -18
  297. package/node_modules/pi-footer/src/widgets/tokens/output-speed.ts +0 -25
  298. package/node_modules/pi-footer/src/widgets/tokens/output-tokens.ts +0 -18
  299. package/node_modules/pi-footer/src/widgets/tokens/tokens.ts +0 -20
  300. package/node_modules/pi-footer/src/widgets/tokens/total-speed.ts +0 -25
  301. package/node_modules/pi-footer/src/widgets/tokens/total-tokens.ts +0 -18
  302. package/node_modules/pi-footer/src/widgets/types.ts +0 -181
  303. package/node_modules/pi-footer/src/widgets/utils/colors.ts +0 -11
  304. package/node_modules/pi-footer/src/widgets/utils/context.ts +0 -112
  305. package/node_modules/pi-footer/src/widgets/utils/session.ts +0 -19
  306. package/node_modules/pi-footer/src/widgets/utils/token-format.ts +0 -78
  307. /package/node_modules/{@herbertgao/resume-from → resume-from}/LICENSE +0 -0
  308. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/contract.js +0 -0
  309. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/entries.d.ts +0 -0
  310. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/entries.js +0 -0
  311. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/index.d.ts +0 -0
  312. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/index.js +0 -0
  313. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/layout.d.ts +0 -0
  314. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/layout.js +0 -0
  315. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/readback.d.ts +0 -0
  316. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/readback.js +0 -0
  317. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/redaction.d.ts +0 -0
  318. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/validation.d.ts +0 -0
  319. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/claude-code/validation.js +0 -0
  320. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/contract.js +0 -0
  321. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/index.d.ts +0 -0
  322. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/readback.d.ts +0 -0
  323. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/readback.js +0 -0
  324. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/redaction.d.ts +0 -0
  325. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/validation.d.ts +0 -0
  326. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/codex/validation.js +0 -0
  327. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/contract.js +0 -0
  328. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/adapter.d.ts +0 -0
  329. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/contract.js +0 -0
  330. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/format.d.ts +0 -0
  331. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/format.js +0 -0
  332. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/index.d.ts +0 -0
  333. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/index.js +0 -0
  334. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/parse.d.ts +0 -0
  335. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/parse.js +0 -0
  336. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/redaction.d.ts +0 -0
  337. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/validate.d.ts +0 -0
  338. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/adapters/pi/validate.js +0 -0
  339. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/bin.d.ts +0 -0
  340. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/bin.js +0 -0
  341. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/contract.d.ts +0 -0
  342. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/contract.js +0 -0
  343. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/agents.d.ts +0 -0
  344. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/agents.js +0 -0
  345. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/args.d.ts +0 -0
  346. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/args.js +0 -0
  347. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/contract.d.ts +0 -0
  348. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/contract.js +0 -0
  349. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/index.d.ts +0 -0
  350. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/index.js +0 -0
  351. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/presentation.d.ts +0 -0
  352. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/presentation.js +0 -0
  353. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/cli/runner.d.ts +0 -0
  354. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/contract.js +0 -0
  355. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/entry.d.ts +0 -0
  356. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/entry.js +0 -0
  357. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/index.d.ts +0 -0
  358. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/index.js +0 -0
  359. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/command.d.ts +0 -0
  360. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/contract.d.ts +0 -0
  361. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/contract.js +0 -0
  362. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/index.d.ts +0 -0
  363. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/index.js +0 -0
  364. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/picker.d.ts +0 -0
  365. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/picker.js +0 -0
  366. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/presentation.d.ts +0 -0
  367. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/presentation.js +0 -0
  368. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/register.d.ts +0 -0
  369. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/register.js +0 -0
  370. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/ui.d.ts +0 -0
  371. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/pi-extension/ui.js +0 -0
  372. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/profile.d.ts +0 -0
  373. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/profile.js +0 -0
  374. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/registry.d.ts +0 -0
  375. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/host/registry.js +0 -0
  376. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/contract.js +0 -0
  377. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/contract.js +0 -0
  378. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/errors.d.ts +0 -0
  379. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/errors.js +0 -0
  380. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/homes.d.ts +0 -0
  381. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/homes.js +0 -0
  382. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/index.d.ts +0 -0
  383. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/index.js +0 -0
  384. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/ordering.d.ts +0 -0
  385. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/discovery/ordering.js +0 -0
  386. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/errors.d.ts +0 -0
  387. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/errors.js +0 -0
  388. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/index.d.ts +0 -0
  389. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/index.js +0 -0
  390. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/contract.js +0 -0
  391. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/errors.d.ts +0 -0
  392. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/errors.js +0 -0
  393. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/handover.d.ts +0 -0
  394. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/handover.js +0 -0
  395. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/index.d.ts +0 -0
  396. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/index.js +0 -0
  397. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/lander.d.ts +0 -0
  398. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/marker.d.ts +0 -0
  399. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/landing/marker.js +0 -0
  400. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/contract.d.ts +0 -0
  401. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/contract.js +0 -0
  402. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/format.d.ts +0 -0
  403. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/format.js +0 -0
  404. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/index.d.ts +0 -0
  405. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/preview/index.js +0 -0
  406. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/contract.d.ts +0 -0
  407. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/contract.js +0 -0
  408. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/index.d.ts +0 -0
  409. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/index.js +0 -0
  410. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/rules.d.ts +0 -0
  411. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/transfer/rules.js +0 -0
  412. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/import/wiring.d.ts +0 -0
  413. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/index.d.ts +0 -0
  414. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/index.js +0 -0
  415. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/contract.d.ts +0 -0
  416. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/contract.js +0 -0
  417. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/defaults.d.ts +0 -0
  418. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/defaults.js +0 -0
  419. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/errors.d.ts +0 -0
  420. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/errors.js +0 -0
  421. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/index.d.ts +0 -0
  422. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/index.js +0 -0
  423. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/loader.d.ts +0 -0
  424. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/loader.js +0 -0
  425. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/paths.d.ts +0 -0
  426. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/paths.js +0 -0
  427. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/validate.d.ts +0 -0
  428. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/config/validate.js +0 -0
  429. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/contract.js +0 -0
  430. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/index.d.ts +0 -0
  431. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/repo/index.js +0 -0
  432. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/contract.d.ts +0 -0
  433. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/contract.js +0 -0
  434. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/file-committer.d.ts +0 -0
  435. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/file-committer.js +0 -0
  436. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/index.d.ts +0 -0
  437. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/store/index.js +0 -0
  438. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/contract.d.ts +0 -0
  439. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/contract.js +0 -0
  440. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/estimator.d.ts +0 -0
  441. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/estimator.js +0 -0
  442. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/index.d.ts +0 -0
  443. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/platform/tokens/index.js +0 -0
  444. /package/node_modules/{@herbertgao/resume-from → resume-from}/dist/session/contract.js +0 -0
@@ -1,6 +1,8 @@
1
1
  // The Internal Design, as code: this module builds its four stages and nothing else builds
2
2
  // them. Everything the stages need arrives from src/host/ — this module constructs no adapter,
3
3
  // no committer, no estimator and no configuration.
4
+ import { realpath } from "node:fs/promises";
5
+ import { isAbsolute } from "node:path";
4
6
  import { createSessionFinder } from "./discovery/index.js";
5
7
  import { createSessionLander } from "./landing/index.js";
6
8
  import { createPipelineFromStages } from "./pipeline.js";
@@ -9,10 +11,18 @@ import { createTransferRules } from "./transfer/index.js";
9
11
  /** The four stages, wired. Internal: a host builds a pipeline, never a stage. */
10
12
  export function buildStages(deps) {
11
13
  return {
12
- finder: createSessionFinder({ adapters: deps.adapters, config: deps.config }),
14
+ checkCancellation: () => deps.repo.checkCancellation(),
15
+ finder: createSessionFinder({ adapters: deps.adapters, config: deps.config, repo: deps.repo }),
13
16
  rules: createTransferRules(),
14
17
  // Per request: the preview reads the repository the request names (FR-13, FR-37).
15
- previewFor: (repoRoot) => createPreviewBuilder(deps.repo, repoRoot),
18
+ async destinationFor(cwd) {
19
+ if (!isAbsolute(cwd))
20
+ throw new Error("The destination cwd must be absolute.");
21
+ const canonicalCwd = await realpath(cwd);
22
+ const identity = await deps.repo.identify(canonicalCwd);
23
+ return { cwd, canonicalCwd, identity };
24
+ },
25
+ previewFor: ({ cwd, canonicalCwd, identity }, descriptor) => createPreviewBuilder(deps.repo, cwd, canonicalCwd, identity, descriptor.repoPaths),
16
26
  lander: createSessionLander(deps.handoverCommand === undefined ? {} : { handoverCommand: deps.handoverCommand }),
17
27
  adapters: deps.adapters,
18
28
  config: deps.config,
@@ -1,8 +1,12 @@
1
1
  /** The repository the command runs in (FR-13). */
2
2
  export interface RepoIdentity {
3
- /** Absolute path of the repository root, or null when the directory is not in a repository. */
3
+ /** Canonical checkout root, or null when unresolved or bare (not an import destination). */
4
4
  root: string | null;
5
- /** Current HEAD commit, or null when the repository has no commit yet. */
5
+ /** Canonical Git common directory shared by linked worktrees, or null when unresolved. */
6
+ commonDir: string | null;
7
+ /** True only for a resolved bare repository; its linked working trees report false. */
8
+ isBare: boolean;
9
+ /** Current HEAD commit, or null when unresolved or the repository has no commit yet. */
6
10
  head: string | null;
7
11
  branch: string | null;
8
12
  }
@@ -24,7 +28,9 @@ export interface RepoReaderOptions {
24
28
  }
25
29
  /** Reads git state. It never writes to the repository. */
26
30
  export interface RepoReader {
31
+ /** Throws AbortError with the signal reason as cause when cancelled; performs no I/O. */
32
+ checkCancellation(): void;
27
33
  identify(cwd: string): Promise<RepoIdentity>;
28
34
  /** Compares HEAD with a commit of a source session (FR-37). */
29
- distanceFrom(sourceCommit: string): Promise<CommitDistance>;
35
+ distanceFrom(cwd: string, sourceCommit: string): Promise<CommitDistance>;
30
36
  }
@@ -1,6 +1,6 @@
1
1
  import type { RepoReaderOptions } from "./contract.js";
2
2
  export interface GitResult {
3
- /** True when git exited 0. A non-zero exit is an answer ("no such revision"), not a failure. */
3
+ /** True when git exited 0. A completed nonzero exit leaves the requested fact unresolved. */
4
4
  ok: boolean;
5
5
  stdout: string;
6
6
  stderr: string;
@@ -8,9 +8,9 @@ export interface GitResult {
8
8
  /**
9
9
  * Runs a read-only git command in `cwd`.
10
10
  *
11
- * Rejects only when git could not be run at all — a missing binary, a signal. An exit code is
12
- * reported in `ok`, because the callers of this module treat "not a repository", "no commits yet"
13
- * and "unknown revision" as facts to report rather than errors to raise.
11
+ * Rejects operational failures, including spawn failures, timeout and cancellation. A completed
12
+ * nonzero exit is reported in `ok`: callers leave the requested fact unresolved without trying
13
+ * to classify localized stderr (which need not mean the directory is outside Git).
14
14
  */
15
15
  export declare function runGit(cwd: string, args: readonly string[], options?: RepoReaderOptions): Promise<GitResult>;
16
16
  interface NormalizedOptions {
@@ -8,9 +8,9 @@ const DEFAULT_GIT_TIMEOUT_MS = 10_000;
8
8
  /**
9
9
  * Runs a read-only git command in `cwd`.
10
10
  *
11
- * Rejects only when git could not be run at all — a missing binary, a signal. An exit code is
12
- * reported in `ok`, because the callers of this module treat "not a repository", "no commits yet"
13
- * and "unknown revision" as facts to report rather than errors to raise.
11
+ * Rejects operational failures, including spawn failures, timeout and cancellation. A completed
12
+ * nonzero exit is reported in `ok`: callers leave the requested fact unresolved without trying
13
+ * to classify localized stderr (which need not mean the directory is outside Git).
14
14
  */
15
15
  export function runGit(cwd, args, options = {}) {
16
16
  const processOptions = normalizeGitOptions(options);
@@ -49,7 +49,9 @@ export function normalizeGitOptions(options) {
49
49
  }
50
50
  function processError(cwd, options, cause) {
51
51
  if (options.signal?.aborted === true || cause.name === "AbortError") {
52
- return new Error(`git command aborted while reading ${cwd}`, { cause });
52
+ const error = new Error(`git command aborted while reading ${cwd}`, { cause });
53
+ error.name = "AbortError";
54
+ return error;
53
55
  }
54
56
  if (cause.killed === true && cause.signal !== undefined) {
55
57
  return new Error(`git command timed out after ${options.timeoutMs} ms while reading ${cwd}`, {
@@ -68,6 +70,7 @@ function gitEnv() {
68
70
  // These would override `-C` and point git at a repository other than the one being asked about,
69
71
  // for example when the tool runs inside a git hook.
70
72
  delete env.GIT_DIR;
73
+ delete env.GIT_COMMON_DIR;
71
74
  delete env.GIT_WORK_TREE;
72
75
  delete env.GIT_INDEX_FILE;
73
76
  return env;
@@ -0,0 +1,3 @@
1
+ import type { RepoReader, RepoReaderOptions } from "./contract.js";
2
+ /** A reader with process controls only; every lookup names its directory explicitly. */
3
+ export declare function createRepoReader(options?: RepoReaderOptions): RepoReader;
@@ -5,38 +5,76 @@ import { normalizeGitOptions, runGit } from "./git.js";
5
5
  function unknownDistance() {
6
6
  return { known: false, ahead: 0, behind: 0 };
7
7
  }
8
- function noRepository() {
9
- return { root: null, head: null, branch: null };
8
+ function unresolvedIdentity() {
9
+ return { root: null, commonDir: null, isBare: false, head: null, branch: null };
10
10
  }
11
11
  /**
12
12
  * Longer than any revision git can resolve: a full commit is 40 characters, a tag or a ref
13
13
  * expression a few more. A longer string is a mistake or an attack, and is not sent to git.
14
14
  */
15
15
  const MAX_REVISION_LENGTH = 256;
16
- /**
17
- * A reader bound to one working directory.
18
- *
19
- * `identify` takes the directory to look at; `distanceFrom` compares against the HEAD of `cwd`,
20
- * which is the repository the command is running in.
21
- */
22
- export function createRepoReader(cwd = process.cwd(), options = {}) {
16
+ /** A reader with process controls only; every lookup names its directory explicitly. */
17
+ export function createRepoReader(options = {}) {
23
18
  const processOptions = normalizeGitOptions(options);
24
19
  const git = (directory, args) => runGit(directory, args, processOptions);
20
+ const checkCancellation = () => {
21
+ if (processOptions.signal?.aborted) {
22
+ const error = new Error("Repository read aborted", { cause: processOptions.signal.reason });
23
+ error.name = "AbortError";
24
+ throw error;
25
+ }
26
+ };
25
27
  return {
26
- identify: (directory) => identify(directory, git),
27
- distanceFrom: (sourceCommit) => distanceFrom(cwd, sourceCommit, git),
28
+ checkCancellation,
29
+ identify: async (directory) => {
30
+ checkCancellation();
31
+ const identity = await identify(directory, git);
32
+ checkCancellation();
33
+ return identity;
34
+ },
35
+ distanceFrom: async (cwd, sourceCommit) => {
36
+ checkCancellation();
37
+ const distance = await distanceFrom(cwd, sourceCommit, git);
38
+ checkCancellation();
39
+ return distance;
40
+ },
28
41
  };
29
42
  }
43
+ /** Git terminates path records with LF; all preceding whitespace belongs to the path. */
44
+ function pathOutput(stdout) {
45
+ return stdout.endsWith("\n") ? stdout.slice(0, -1) : stdout;
46
+ }
30
47
  async function identify(directory, git) {
31
- const dir = resolve(directory);
32
- const toplevel = await git(dir, ["rev-parse", "--show-toplevel"]);
33
- if (!toplevel.ok)
34
- return noRepository();
35
- const root = await resolveFully(toplevel.stdout.trim());
36
- if (root === null)
37
- return noRepository();
48
+ // Resolve the input itself: a missing worktree must never inherit its parent's identity.
49
+ const dir = await resolveFully(resolve(directory));
50
+ if (dir === null)
51
+ return unresolvedIdentity();
52
+ const common = await git(dir, ["rev-parse", "--git-common-dir"]);
53
+ const commonPath = pathOutput(common.stdout);
54
+ if (!common.ok || commonPath === "")
55
+ return unresolvedIdentity();
56
+ const commonDir = await resolveFully(resolve(dir, commonPath));
57
+ if (commonDir === null)
58
+ return unresolvedIdentity();
59
+ const bare = await git(dir, ["rev-parse", "--is-bare-repository"]);
60
+ if (!bare.ok)
61
+ return unresolvedIdentity();
62
+ const isBare = bare.stdout.trim() === "true";
63
+ // Bare repositories have a shared identity but no checkout usable as an import destination.
64
+ let root = null;
65
+ if (!isBare) {
66
+ const toplevel = await git(dir, ["rev-parse", "--show-toplevel"]);
67
+ const checkoutPath = pathOutput(toplevel.stdout);
68
+ if (!toplevel.ok || checkoutPath === "")
69
+ return unresolvedIdentity();
70
+ root = await resolveFully(resolve(dir, checkoutPath));
71
+ if (root === null)
72
+ return unresolvedIdentity();
73
+ }
38
74
  return {
39
75
  root,
76
+ commonDir,
77
+ isBare,
40
78
  head: await commitOf(dir, "HEAD", git),
41
79
  branch: await branch(dir, git),
42
80
  };
@@ -124,7 +162,9 @@ async function resolveFully(directory) {
124
162
  try {
125
163
  return await realpath(directory);
126
164
  }
127
- catch {
128
- return null;
165
+ catch (error) {
166
+ if (error.code === "ENOENT")
167
+ return null;
168
+ throw error;
129
169
  }
130
170
  }
@@ -21,8 +21,15 @@ export interface SessionDescriptor {
21
21
  updatedAt: string;
22
22
  /** Turns the source holds, before any rule of section D or E runs. */
23
23
  turnCount: number;
24
- /** Absolute path of the repository the session ran in, or null when unknown (FR-13). */
24
+ /** First recorded candidate: repoPaths[0] ?? null, even when that path no longer exists (FR-13). */
25
25
  repoPath: string | null;
26
+ /** Distinct absolute recorded directories, ordered by first appearance in the active conversation. */
27
+ repoPaths: string[];
28
+ /**
29
+ * Absolute directory of the session’s earliest non-sidechain record, when the format records one.
30
+ * Discovery matches it as a last resort, so a session that started here is still listed here.
31
+ */
32
+ startDirectory: string | null;
26
33
  /** Absolute path of the source file. Lets the user select by path (FR-12). */
27
34
  filePath: string;
28
35
  }
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "@herbertgao/resume-from",
3
- "version": "0.2.4",
2
+ "name": "resume-from",
3
+ "version": "0.4.1",
4
4
  "description": "Continue a coding session in a different agent, or a different profile.",
5
5
  "keywords": [
6
6
  "pi-package",
@@ -10,11 +10,8 @@
10
10
  "codex"
11
11
  ],
12
12
  "type": "module",
13
+ "packageManager": "pnpm@11.20.0",
13
14
  "license": "MIT",
14
- "author": "Herbert Gao",
15
- "contributors": [
16
- "Alexei Led"
17
- ],
18
15
  "engines": {
19
16
  "node": ">=24"
20
17
  },
@@ -34,36 +31,34 @@
34
31
  },
35
32
  "files": [
36
33
  "dist",
37
- "shims/pi",
38
- "README.md",
39
- "LICENSE"
34
+ "shims/pi"
40
35
  ],
41
36
  "scripts": {
42
37
  "build": "node scripts/clean-dist.mjs && tsc -p tsconfig.build.json",
43
38
  "typecheck": "tsc --noEmit",
44
39
  "test": "vitest run",
45
40
  "test:watch": "vitest",
46
- "format": "biome format --write .",
47
- "format:check": "biome format .",
48
41
  "lint": "biome check . && eslint . --cache --cache-strategy content",
49
42
  "lint:fix": "biome check --write .",
43
+ "packages:stage": "npm run build && node scripts/release/stage-npm-packages.mjs",
44
+ "packages:check": "npm run packages:stage && node scripts/release/check-npm-packages.mjs",
50
45
  "pack:dry": "npm pack --dry-run",
51
- "prepack": "npm run build",
52
- "postpack": "node scripts/clean-dist.mjs"
46
+ "prepack": "npm run build"
53
47
  },
54
48
  "devDependencies": {
55
- "@biomejs/biome": "2.5.7",
49
+ "@biomejs/biome": "2.5.14",
50
+ "@earendil-works/pi-tui": "^1.0.2",
56
51
  "@eslint/js": "^10.0.1",
57
- "@types/node": "^24.13.3",
58
- "esbuild": "0.28.1",
59
- "eslint": "^10.8.0",
60
- "globals": "^17.9.0",
52
+ "@types/node": "^24.19.0",
53
+ "esbuild": "0.28.2",
54
+ "eslint": "^10.11.0",
55
+ "globals": "^17.12.0",
61
56
  "typescript": "^7.0.2",
62
57
  "typescript-compiler-api": "npm:typescript@6.0.3",
63
- "vitest": "^4.1.10"
58
+ "vitest": "^5.0.3"
64
59
  },
65
60
  "dependencies": {
66
- "gpt-tokenizer": "^3.4.0"
61
+ "gpt-tokenizer": "^4.0.0"
67
62
  },
68
63
  "peerDependencies": {
69
64
  "@earendil-works/pi-tui": "*"
@@ -76,21 +71,13 @@
76
71
  },
77
72
  "repository": {
78
73
  "type": "git",
79
- "url": "git+https://github.com/HerbertGao/pi-extensions.git",
80
- "directory": "packages/resume-from"
74
+ "url": "git+https://github.com/alexei-led/resume-from.git"
81
75
  },
82
- "homepage": "https://github.com/HerbertGao/pi-extensions/tree/master/packages/resume-from#readme",
76
+ "homepage": "https://github.com/alexei-led/resume-from#readme",
83
77
  "bugs": {
84
- "url": "https://github.com/HerbertGao/pi-extensions/issues"
78
+ "url": "https://github.com/alexei-led/resume-from/issues"
85
79
  },
86
80
  "publishConfig": {
87
- "access": "public",
88
- "provenance": true
89
- },
90
- "x-upstream": {
91
- "package": "resume-from",
92
- "version": "0.2.0",
93
- "repository": "https://github.com/alexei-led/resume-from",
94
- "commit": "e1dad0dd4ae5fb6a5a50b905dd4359a29fd0910e"
81
+ "access": "public"
95
82
  }
96
83
  }
@@ -1,8 +1,8 @@
1
1
  import { homedir } from "node:os";
2
2
  import { isAbsolute, join, resolve } from "node:path";
3
3
  import { truncateToWidth } from "@earendil-works/pi-tui";
4
- import { activatePiExtension } from "@herbertgao/resume-from";
5
- import { formatRow, safeLines, safeText } from "@herbertgao/resume-from/pi-extension";
4
+ import { activatePiExtension } from "resume-from";
5
+ import { formatRow, safeLines, safeText } from "resume-from/pi-extension";
6
6
 
7
7
  const COMMAND_NAME = "resume-from";
8
8
  const DESCRIPTION =
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@herbertgao/pi-extensions",
3
- "version": "2026.9.19",
3
+ "version": "2026.10.0",
4
4
  "description": "Aggregate installer for HerbertGao-maintained Pi extensions.",
5
5
  "keywords": [
6
6
  "extensions",
@@ -36,15 +36,14 @@
36
36
  "dependencies": {
37
37
  "@ast-grep/cli": "^0.45.0",
38
38
  "@ast-grep/napi": "^0.45.0",
39
- "@bufbuild/protobuf": "^2.14.0",
39
+ "@bufbuild/protobuf": "^2.15.0",
40
40
  "@dietrichgebert/ponytail": "4.10.0",
41
- "@herbertgao/pi-bark": "0.1.4",
42
- "@herbertgao/pi-cc-extensions": "0.9.7",
43
- "@herbertgao/pi-subagents": "0.18.4",
44
- "@herbertgao/resume-from": "0.2.4",
45
- "@herbertgao/sol-pi": "0.3.4",
46
- "@juicesharp/rpiv-ask-user-question": "2.11.0",
47
- "@juicesharp/rpiv-config": "^2.11.0",
41
+ "@herbertgao/pi-bark": "0.2.0",
42
+ "@herbertgao/pi-cc-extensions": "0.11.0",
43
+ "@herbertgao/pi-subagents": "0.18.5",
44
+ "@herbertgao/sol-pi": "0.4.0",
45
+ "@juicesharp/rpiv-ask-user-question": "2.12.0",
46
+ "@juicesharp/rpiv-config": "^2.12.0",
48
47
  "@modelcontextprotocol/sdk": "^1.29.0",
49
48
  "@mozilla/readability": "^0.6.0",
50
49
  "@napi-rs/keyring": "^2.1.0",
@@ -52,7 +51,7 @@
52
51
  "@narumitw/pi-caffeinate": "0.49.8",
53
52
  "@narumitw/pi-tui-kit": "^0.64.0",
54
53
  "@noble/ed25519": "^3.1.0",
55
- "@pi-plugins/fast-mode": "0.1.12",
54
+ "@pi-plugins/fast-mode": "0.1.13",
56
55
  "@shikijs/cli": "^4.0.2",
57
56
  "@tifan/pi-copy-response": "0.2.7",
58
57
  "@tifan/pi-handoff": "2.2.2",
@@ -62,11 +61,10 @@
62
61
  "@tifan/pi-recap": "0.4.7",
63
62
  "@tifan/pi-rename": "0.6.0",
64
63
  "@typesafe-ai/sdk": "0.6.0",
65
- "chalk": "^6.0.0",
66
64
  "croner": "^10.0.1",
67
65
  "dbus-native": "^0.15.2",
68
66
  "defuddle": "0.19.3",
69
- "gpt-tokenizer": "^3.4.0",
67
+ "gpt-tokenizer": "^4.0.0",
70
68
  "grok-mermaid": "0.2.3",
71
69
  "jiti": "^2.7.0",
72
70
  "js-yaml": "^5.2.2",
@@ -74,19 +72,19 @@
74
72
  "minimatch": "^10.2.6",
75
73
  "nanoid": "^5.0.0",
76
74
  "p-limit": "^6.1.0",
77
- "pi-antigravity": "0.8.1",
78
- "pi-footer": "0.5.1",
75
+ "pi-antigravity": "0.9.0",
79
76
  "pi-jev-auto-mode": "0.5.0",
80
77
  "pi-lens": "4.3.0",
81
- "pi-multi-account": "1.23.2",
78
+ "pi-multi-account": "1.24.0",
82
79
  "pi-next-cue": "1.0.7",
83
80
  "pi-typesafe": "0.8.1",
84
- "pi-web-access": "0.34.0",
81
+ "pi-web-access": "0.35.0",
85
82
  "pidusage": "^4.0.1",
86
83
  "promise.try": "^2.0.1",
87
84
  "proper-lockfile": "4.1.2",
88
85
  "qrcode-terminal": "^0.12.0",
89
86
  "remote-pi": "0.7.0",
87
+ "resume-from": "0.4.1",
90
88
  "turndown": "^7.2.0",
91
89
  "unbash": "4.0.10",
92
90
  "undici": "^8.11.2",
@@ -111,7 +109,6 @@
111
109
  "@herbertgao/pi-bark",
112
110
  "@herbertgao/pi-cc-extensions",
113
111
  "@herbertgao/pi-subagents",
114
- "@herbertgao/resume-from",
115
112
  "@herbertgao/sol-pi",
116
113
  "@juicesharp/rpiv-ask-user-question",
117
114
  "@narumitw/pi-btw",
@@ -126,14 +123,14 @@
126
123
  "@tifan/pi-rename",
127
124
  "grok-mermaid",
128
125
  "pi-antigravity",
129
- "pi-footer",
130
126
  "pi-jev-auto-mode",
131
127
  "pi-lens",
132
128
  "pi-multi-account",
133
129
  "pi-next-cue",
134
130
  "pi-typesafe",
135
131
  "pi-web-access",
136
- "remote-pi"
132
+ "remote-pi",
133
+ "resume-from"
137
134
  ],
138
135
  "engines": {
139
136
  "node": ">=24"
@@ -144,7 +141,7 @@
144
141
  "./node_modules/@herbertgao/pi-cc-extensions/extensions/index.ts",
145
142
  "./node_modules/@herbertgao/sol-pi/src/sol-pi/index.ts",
146
143
  "./node_modules/@tifan/pi-copy-response/src/index.ts",
147
- "./node_modules/@herbertgao/resume-from/shims/pi/extensions/resume-from.js",
144
+ "./node_modules/resume-from/shims/pi/extensions/resume-from.js",
148
145
  "./node_modules/@tifan/pi-handoff/src/index.ts",
149
146
  "./node_modules/@tifan/pi-handoff/src/session-query.ts",
150
147
  "./node_modules/@tifan/pi-inline-skills/src/index.ts",
@@ -165,8 +162,7 @@
165
162
  "./node_modules/pi-web-access/dist",
166
163
  "./node_modules/pi-antigravity/src/index.ts",
167
164
  "./node_modules/pi-typesafe/extensions/index.js",
168
- "./node_modules/remote-pi/dist/index.js",
169
- "./node_modules/pi-footer/src/index.ts"
165
+ "./node_modules/remote-pi/dist/index.js"
170
166
  ],
171
167
  "themes": [
172
168
  "./node_modules/@herbertgao/pi-cc-extensions/themes/cc-dark.json",
@@ -1,101 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="1200" height="400" viewBox="0 0 1200 400" role="img" aria-labelledby="title desc">
2
- <title id="title">pi-cc-extensions
3
- </title>
4
- <desc id="desc">The Claude and Pi brand marks together connect three extension capabilities: Claude Code-style output, context inspection, and historical Session references.
5
- </desc>
6
- <defs>
7
- <linearGradient id="panel" x1="0" y1="0" x2="1" y2="1">
8
- <stop offset="0" stop-color="#0D131B"/>
9
- <stop offset="1" stop-color="#090D12"/>
10
- </linearGradient>
11
- </defs>
12
- <rect width="1200" height="400" rx="28" fill="url(#panel)"/>
13
- <rect x="1" y="1" width="1198" height="398" rx="27" fill="none" stroke="#263241" stroke-width="2"/>
14
- <g id="title-block" transform="translate(64 58)" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', sans-serif">
15
- <g font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="16" font-weight="600" letter-spacing="1.4">
16
- <text x="0" y="0" fill="#66E3C4">PI EXTENSION
17
- </text>
18
- </g>
19
- <text x="0" y="82" fill="#F4F7FA" font-size="54" font-weight="750" letter-spacing="-1.5">pi-cc-extensions
20
- </text>
21
- <text x="0" y="130" fill="#B8C3CF" font-size="23">Make Pi work like Claude Code 🙃
22
- </text>
23
- <g transform="translate(0 180)" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="17">
24
- <rect width="488" height="58" rx="12" fill="#111923" stroke="#2B3948"/>
25
- <text x="20" y="36" fill="#66E3C4">›
26
- </text>
27
- <text x="44" y="36" fill="#F4F7FA">/ccstyle
28
- </text>
29
- <text x="155" y="36" fill="#536172">·
30
- </text>
31
- <text x="178" y="36" fill="#7CC7FF">/context
32
- </text>
33
- <text x="292" y="36" fill="#536172">·
34
- </text>
35
- <text x="315" y="36" fill="#F2C879">@session:
36
- </text>
37
- <rect x="411" y="22" width="9" height="20" rx="2" fill="#66E3C4"/>
38
- </g>
39
- <g transform="translate(0 282)" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="15">
40
- <circle cx="6" cy="-5" r="6" fill="#66E3C4"/>
41
- <text x="22" y="0" fill="#8B9AAD">3 EXTENSIONS
42
- </text>
43
- <text x="160" y="0" fill="#3B4857">•
44
- </text>
45
- <text x="183" y="0" fill="#8B9AAD">TYPESCRIPT
46
- </text>
47
- <text x="303" y="0" fill="#3B4857">•
48
- </text>
49
- <text x="326" y="0" fill="#8B9AAD">NODE ≥ 22.19
50
- </text>
51
- </g>
52
- </g>
53
- <g id="extension-map" transform="translate(662 48)" font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', sans-serif">
54
- <g id="claude-pi-mark" transform="translate(0 0)">
55
- <!-- Official Claude starburst vector; source: Anthropic Claude brand mark. -->
56
- <path transform="translate(2 2) scale(.34)" fill="#D97757" d="m19.6 66.5 19.7-11 .3-1-.3-.5h-1l-3.3-.2-11.2-.3L14 53l-9.5-.5-2.4-.5L0 49l.2-1.5 2-1.3 2.9.2 6.3.5 9.5.6 6.9.4L38 49.1h1.6l.2-.7-.5-.4-.4-.4L29 41l-10.6-7-5.6-4.1-3-2-1.5-2-.6-4.2 2.7-3 3.7.3.9.2 3.7 2.9 8 6.1L37 36l1.5 1.2.6-.4.1-.3-.7-1.1L33 25l-6-10.4-2.7-4.3-.7-2.6c-.3-1-.4-2-.4-3l3-4.2L28 0l4.2.6L33.8 2l2.6 6 4.1 9.3L47 29.9l2 3.8 1 3.4.3 1h.7v-.5l.5-7.2 1-8.7 1-11.2.3-3.2 1.6-3.8 3-2L61 2.6l2 2.9-.3 1.8-1.1 7.7L59 27.1l-1.5 8.2h.9l1-1.1 4.1-5.4 6.9-8.6 3-3.5L77 13l2.3-1.8h4.3l3.1 4.7-1.4 4.9-4.4 5.6-3.7 4.7-5.3 7.1-3.2 5.7.3.4h.7l12-2.6 6.4-1.1 7.6-1.3 3.5 1.6.4 1.6-1.4 3.4-8.2 2-9.6 2-14.3 3.3-.2.1.2.3 6.4.6 2.8.2h6.8l12.6 1 3.3 2 1.9 2.7-.3 2-5.1 2.6-6.8-1.6-16-3.8-5.4-1.3h-.8v.4l4.6 4.5 8.3 7.5L89 80.1l.5 2.4-1.3 2-1.4-.2-9.2-7-3.6-3-8-6.8h-.5v.7l1.8 2.7 9.8 14.7.5 4.5-.7 1.4-2.6 1-2.7-.6-5.8-8-6-9-4.7-8.2-.5.4-2.9 30.2-1.3 1.5-3 1.2-2.5-2-1.4-3 1.4-6.2 1.6-8 1.3-6.4 1.2-7.9.7-2.6v-.2H49L43 72l-9 12.3-7.2 7.6-1.7.7-3-1.5.3-2.8L24 86l10-12.8 6-7.9 4-4.6-.1-.5h-.3L17.2 77.4l-4.7.6-2-2 .2-3 1-1 8-5.5Z"/>
57
- <path d="M50 3V35" stroke="#3A4857" stroke-width="2"/>
58
- <!-- Official Pi logo vectors; source: https://pi.dev/logo-auto.svg -->
59
- <g transform="translate(52 -5) scale(.06)" fill="#F4F7FA">
60
- <path fill-rule="evenodd" d="M165.29 165.29H517.36V400H400V517.36H282.65V634.72H165.29ZM282.65 282.65V400H400V282.65Z"/>
61
- <path d="M517.36 400H634.72V634.72H517.36Z"/>
62
- </g>
63
- <text x="104" y="15" fill="#F4F7FA" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="15" font-weight="700" letter-spacing=".8">CLAUDE CODE UX
64
- </text>
65
- <text x="104" y="34" fill="#7F8D9C" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="13" letter-spacing="1.2">FOR PI
66
- </text>
67
- </g>
68
- <g transform="translate(0 52)">
69
- <rect width="474" height="82" rx="14" fill="#101821" stroke="#2C3A48"/>
70
- <rect width="5" height="82" rx="2.5" fill="#66E3C4"/>
71
- <text x="26" y="32" fill="#F4F7FA" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="18" font-weight="700">/ccstyle
72
- </text>
73
- <text x="26" y="59" fill="#8B9AAD" font-size="16">Tool summaries · Diffs · Status bar
74
- </text>
75
- <circle cx="438" cy="29" r="9" fill="#66E3C4" opacity=".18"/>
76
- <path d="M434 29l3 3 6-7" fill="none" stroke="#66E3C4" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
77
- </g>
78
- <g transform="translate(0 144)">
79
- <rect width="474" height="82" rx="14" fill="#101821" stroke="#2C3A48"/>
80
- <rect width="5" height="82" rx="2.5" fill="#7CC7FF"/>
81
- <text x="26" y="32" fill="#F4F7FA" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="18" font-weight="700">/context
82
- </text>
83
- <text x="26" y="59" fill="#8B9AAD" font-size="16">Usage breakdown · Injected content preview
84
- </text>
85
- <g transform="translate(416 23)">
86
- <rect width="42" height="14" rx="7" fill="#1C2B38"/>
87
- <rect width="27" height="14" rx="7" fill="#7CC7FF"/>
88
- </g>
89
- </g>
90
- <g transform="translate(0 236)">
91
- <rect width="474" height="82" rx="14" fill="#101821" stroke="#2C3A48"/>
92
- <rect width="5" height="82" rx="2.5" fill="#F2C879"/>
93
- <text x="26" y="32" fill="#F4F7FA" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="18" font-weight="700">@session:
94
- </text>
95
- <text x="26" y="59" fill="#8B9AAD" font-size="16">History completion · Cross-session references
96
- </text>
97
- <text x="431" y="40" fill="#F2C879" font-family="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace" font-size="26">@
98
- </text>
99
- </g>
100
- </g>
101
- </svg>