@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,126 +0,0 @@
1
- import type { ColorName } from "../colors.js";
2
- import {
3
- ansi256Digits,
4
- appendAnsi256Digit,
5
- colorDisplayName,
6
- deleteAnsi256Digit,
7
- STANDARD_COLORS,
8
- } from "../colors.js";
9
- import { cloneConfig, configWithPreset, DEFAULT_CONFIG } from "../config.js";
10
- import { PRESET_DEFINITIONS, type Preset } from "../presets.js";
11
- import { SEPARATOR_VALUES } from "../separators.js";
12
- import type { StatuslineConfig, StatuslineSettings } from "../types.js";
13
- import { ICON_MODE_VALUES } from "../types.js";
14
- import { adjustAnsi, cycle } from "./helpers.js";
15
- import { ICON_MODE_LABELS } from "./model.js";
16
-
17
- export const GLOBAL_MENU_ACTIONS = [
18
- "toggle-enabled",
19
- "preset",
20
- "separator",
21
- "separator-fg",
22
- "separator-bg",
23
- "separator-fg-ansi",
24
- "separator-bg-ansi",
25
- "icon-mode",
26
- "minimalist",
27
- "reset",
28
- ] as const;
29
-
30
- type GlobalMenuAction = (typeof GLOBAL_MENU_ACTIONS)[number];
31
-
32
- export const GLOBAL_MENU_HINT =
33
- "↑/↓ option • ←/→ or enter change • type digits for ANSI256 • backspace delete • esc back";
34
-
35
- export function globalMenuFields(config: StatuslineSettings): string[] {
36
- return [
37
- `Enabled: ${config.enabled ? "on" : "off"}`,
38
- `Preset: ${config.preset}`,
39
- `Separator: ${config.separator}`,
40
- `Separator foreground: ${colorDisplayName(config.separatorFg)}`,
41
- `Separator background: ${colorDisplayName(config.separatorBg)}`,
42
- `Custom ANSI256 separator foreground: ${ansi256Digits(config.separatorFg)}`,
43
- `Custom ANSI256 separator background: ${ansi256Digits(config.separatorBg)}`,
44
- `Icons: ${ICON_MODE_LABELS[config.iconMode]}`,
45
- `Minimalist mode: ${config.minimalist ? "on" : "off"}`,
46
- "Reset to defaults",
47
- ];
48
- }
49
-
50
- export function globalMenuAction(index: number): GlobalMenuAction {
51
- return GLOBAL_MENU_ACTIONS[index] ?? "reset";
52
- }
53
-
54
- export function applyGlobalMenuAction(
55
- config: StatuslineConfig,
56
- action: GlobalMenuAction,
57
- delta: number,
58
- ): StatuslineConfig {
59
- if (action === "preset")
60
- return configWithPreset(
61
- config,
62
- cycle(Object.keys(PRESET_DEFINITIONS) as Preset[], config.preset, delta),
63
- );
64
- if (action === "reset") return cloneConfig(DEFAULT_CONFIG);
65
-
66
- const next = { ...config };
67
- applyGlobalSettingsAction(next, action, delta);
68
- return next;
69
- }
70
-
71
- export function applyGlobalSettingsAction(
72
- settings: StatuslineSettings,
73
- action: GlobalMenuAction,
74
- delta: number,
75
- ): boolean {
76
- if (action === "toggle-enabled") settings.enabled = !settings.enabled;
77
- else if (action === "separator")
78
- settings.separator = cycle(SEPARATOR_VALUES, settings.separator, delta);
79
- else if (action === "separator-fg")
80
- settings.separatorFg = cycleStandardColor(settings.separatorFg, delta);
81
- else if (action === "separator-bg")
82
- settings.separatorBg = cycleStandardColor(settings.separatorBg, delta);
83
- else if (action === "separator-fg-ansi")
84
- settings.separatorFg = adjustAnsi(settings.separatorFg, delta);
85
- else if (action === "separator-bg-ansi")
86
- settings.separatorBg = adjustAnsi(settings.separatorBg, delta);
87
- else if (action === "icon-mode")
88
- settings.iconMode = cycle(ICON_MODE_VALUES, settings.iconMode, delta);
89
- else if (action === "minimalist") settings.minimalist = !settings.minimalist;
90
- else return false;
91
- return true;
92
- }
93
-
94
- export function applyGlobalSettingsTextInput(
95
- settings: StatuslineSettings,
96
- action: GlobalMenuAction,
97
- data: string,
98
- ): boolean {
99
- if (!/^\d$/.test(data)) return false;
100
- if (action === "separator-fg-ansi")
101
- settings.separatorFg = appendAnsi256Digit(settings.separatorFg, data);
102
- else if (action === "separator-bg-ansi")
103
- settings.separatorBg = appendAnsi256Digit(settings.separatorBg, data);
104
- else return false;
105
- return true;
106
- }
107
-
108
- export function applyGlobalSettingsBackspace(
109
- settings: StatuslineSettings,
110
- action: GlobalMenuAction,
111
- ): boolean {
112
- if (action === "separator-fg-ansi")
113
- settings.separatorFg = deleteAnsi256Digit(settings.separatorFg);
114
- else if (action === "separator-bg-ansi")
115
- settings.separatorBg = deleteAnsi256Digit(settings.separatorBg);
116
- else return false;
117
- return true;
118
- }
119
-
120
- function cycleStandardColor(current: ColorName, delta: number): ColorName {
121
- return cycle(
122
- STANDARD_COLORS.map((color) => color.value),
123
- current,
124
- delta,
125
- );
126
- }
@@ -1,44 +0,0 @@
1
- import type { ColorName } from "../colors.js";
2
- import type { ScreenView } from "./model.js";
3
-
4
- export function escapeTarget(view: ScreenView): ScreenView | "close" {
5
- if (view === "main") return "close";
6
- if (
7
- view === "line-list" ||
8
- view === "color-line-list" ||
9
- view === "terminal" ||
10
- view === "global" ||
11
- view === "extension-status-row"
12
- )
13
- return "main";
14
- if (view === "widget-list") return "line-list";
15
- if (view === "color-widget-list") return "color-line-list";
16
- if (view === "edit-colors") return "color-widget-list";
17
- if (view === "add-widget" || view === "edit-widget") return "widget-list";
18
- if (view === "confirm-color-level") return "terminal";
19
- if (view === "confirm-exit") return "main";
20
- return "main";
21
- }
22
-
23
- export function cycle<T>(values: readonly T[], current: T, delta: number): T {
24
- const index = values.indexOf(current);
25
- return values[(index + delta + values.length) % values.length] ?? current;
26
- }
27
-
28
- export function adjustAnsi(current: ColorName | undefined, delta: number): ColorName {
29
- const currentCode = current?.startsWith("ansi256:") ? Number(current.slice(8)) : 0;
30
- return `ansi256:${wrap(currentCode + delta, 256)}` as ColorName;
31
- }
32
-
33
- export function wrap(value: number, length: number): number {
34
- if (length <= 0) return 0;
35
- return (value + length) % length;
36
- }
37
-
38
- export function clamp(value: number, min: number, max: number): number {
39
- return Math.min(max, Math.max(min, value));
40
- }
41
-
42
- export function isPrintable(data: string): boolean {
43
- return data.length === 1 && data.charCodeAt(0) >= 32 && data.charCodeAt(0) !== 127;
44
- }
@@ -1,17 +0,0 @@
1
- export const CONFIG_UI_RESERVED_ROWS = 8;
2
- export const MIN_VISIBLE_ROW_COUNT = 4;
3
-
4
- export function activeLineCount(lines: readonly (readonly unknown[])[]): number {
5
- return lines.filter((line) => line.length > 0).length;
6
- }
7
-
8
- export function visibleRowCount(
9
- terminalRows: number,
10
- heightRatio: number,
11
- activeLines: number,
12
- ): number {
13
- return Math.max(
14
- MIN_VISIBLE_ROW_COUNT,
15
- Math.floor(terminalRows * heightRatio) - CONFIG_UI_RESERVED_ROWS - activeLines,
16
- );
17
- }
@@ -1,19 +0,0 @@
1
- export const LINE_LIST_HINT =
2
- "↑/↓ select • pgup/pgdn jump • enter edit • a add • c clone • w/s move • d delete • esc back";
3
-
4
- export function lineListCountLabel(total: number, start: number, end: number): string {
5
- return `${total} line(s), showing ${rangeLabel(start, end, total)}`;
6
- }
7
-
8
- export function lineListItemLabel(
9
- index: number,
10
- widgetCount: number,
11
- dim: (text: string) => string,
12
- ): string {
13
- return `☰ Line ${index + 1} ${dim(`(${widgetCount} widget${widgetCount === 1 ? "" : "s"})`)}`;
14
- }
15
-
16
- function rangeLabel(start: number, end: number, total: number): string {
17
- if (total === 0) return "0-0";
18
- return `${start + 1}-${end}`;
19
- }
@@ -1,64 +0,0 @@
1
- import type { ColorLevel } from "../colors.js";
2
- import type { IconMode, TerminalWidthMode } from "../types.js";
3
- import type { WidgetProperty } from "../widgets/types.js";
4
-
5
- export const CONFIG_UI_HEIGHT_RATIO = 1;
6
-
7
- export const WIDTH_MODE_LABELS: Record<TerminalWidthMode, string> = {
8
- full: "Full width always",
9
- "full-minus-40": "Full width minus 40",
10
- };
11
-
12
- export const COLOR_LEVEL_LABELS: Record<ColorLevel, string> = {
13
- truecolor: "Truecolor",
14
- ansi256: "256 Color",
15
- ansi16: "Basic (Standard 16-color)",
16
- none: "No Color",
17
- };
18
-
19
- export const ICON_MODE_LABELS: Record<IconMode, string> = {
20
- emoji: "Emoji",
21
- nerd: "Nerd Font icons",
22
- text: "Text labels",
23
- };
24
-
25
- export type ScreenView =
26
- | "main"
27
- | "line-list"
28
- | "widget-list"
29
- | "add-widget"
30
- | "edit-widget"
31
- | "color-line-list"
32
- | "color-widget-list"
33
- | "edit-colors"
34
- | "terminal"
35
- | "confirm-color-level"
36
- | "confirm-exit"
37
- | "global"
38
- | "extension-status-row";
39
-
40
- type ColorField =
41
- | "fg"
42
- | "bg"
43
- | "bold"
44
- | "fgAnsi"
45
- | "bgAnsi"
46
- | "warningFg"
47
- | "warningBg"
48
- | "warningFgAnsi"
49
- | "warningBgAnsi"
50
- | "dangerFg"
51
- | "dangerBg"
52
- | "dangerFgAnsi"
53
- | "dangerBgAnsi";
54
-
55
- // Flattened, UI-facing projection of WidgetProperty: id/label/kind plus the editable bits
56
- // hoisted out of WidgetProperty.options. Derived structurally so it can't drift from the source.
57
- export type OptionField = Pick<WidgetProperty, "id" | "label" | "kind"> &
58
- Pick<NonNullable<WidgetProperty["options"]>, "min" | "max" | "choices" | "editAction">;
59
-
60
- export interface ColorOptionField {
61
- id: ColorField;
62
- label: string;
63
- kind: "color" | "boolean" | "ansi";
64
- }
@@ -1,29 +0,0 @@
1
- import { clamp } from "./helpers.js";
2
-
3
- export function pageSelection(
4
- selected: number,
5
- total: number,
6
- visibleCount: number,
7
- direction: -1 | 1,
8
- ): number {
9
- if (total <= 0) return 0;
10
- return clamp(selected + direction * visibleCount, 0, total - 1);
11
- }
12
-
13
- export function scrollWindow(
14
- total: number,
15
- selected: number,
16
- visibleCount: number,
17
- ): { start: number; end: number } {
18
- const start = clamp(
19
- selected - Math.floor(visibleCount / 2),
20
- 0,
21
- Math.max(0, total - visibleCount),
22
- );
23
- return { start, end: Math.min(total, start + visibleCount) };
24
- }
25
-
26
- export function rangeLabel(start: number, end: number, total: number): string {
27
- if (total === 0) return "0-0";
28
- return `${start + 1}-${end}`;
29
- }
@@ -1,93 +0,0 @@
1
- import { registry } from "../widgets/registry.js";
2
- import type { Widget, WidgetEditAction, WidgetProperty } from "../widgets/types.js";
3
- import { getBooleanField, getNumberField, getTextField } from "./fields.js";
4
- import { cycle } from "./helpers.js";
5
- import type { OptionField } from "./model.js";
6
-
7
- type OptionFieldApplyResult = "changed" | "unchanged" | WidgetEditAction;
8
-
9
- type OptionFieldEdit = { kind: "appendText"; text: string } | { kind: "deleteText" };
10
-
11
- export function applyOptionFieldEdit(
12
- widget: Widget,
13
- field: OptionField,
14
- edit: OptionFieldEdit,
15
- ): OptionFieldApplyResult {
16
- if (field.kind !== "text") return "unchanged";
17
- if (edit.kind === "appendText") {
18
- widget.update({ [field.id]: getTextField(widget, field.id) + edit.text });
19
- return "changed";
20
- }
21
- widget.update({ [field.id]: getTextField(widget, field.id).slice(0, -1) });
22
- return "changed";
23
- }
24
-
25
- export function applyOptionField(
26
- widget: Widget,
27
- field: OptionField,
28
- delta: number,
29
- ): OptionFieldApplyResult {
30
- if (field.id === "enabled") {
31
- widget.toggle();
32
- return "changed";
33
- }
34
- if (field.editAction) return field.editAction;
35
-
36
- const properties: readonly WidgetProperty[] = registry.spec(widget.type).properties;
37
- const property = properties.find((item) => item.id === field.id);
38
- if (property?.options?.editAction) return property.options.editAction;
39
-
40
- if (field.kind === "boolean" && isMetadataBooleanField(widget, field.id)) {
41
- metadataSetBooleanField(widget, field.id, !getBooleanField(widget, field.id));
42
- return "changed";
43
- }
44
- if (field.kind === "number") {
45
- if (property?.kind !== "number") return "unchanged";
46
- const min = field.min ?? property.options?.min ?? 1;
47
- const max = field.max ?? property.options?.max ?? 99;
48
- const current = getNumberField(widget, field.id) ?? min;
49
- metadataSetNumberField(widget, field.id, Math.min(max, Math.max(min, current + delta)));
50
- return "changed";
51
- }
52
- if (field.kind === "choice") {
53
- if (property?.kind !== "choice") return "unchanged";
54
- const choices = field.choices ?? property.options?.choices;
55
- const choiceIds = choices?.map((choice) => choice.id) ?? [];
56
- if (choiceIds.length === 0) return "unchanged";
57
- const current = getTextField(widget, field.id) || (choiceIds[0] ?? "");
58
- widget.update({ [field.id]: cycle(choiceIds, current, delta) });
59
- return "changed";
60
- }
61
- return "unchanged";
62
- }
63
-
64
- function metadataSetBooleanField(widget: Widget, id: string, value: boolean): void {
65
- const spec = registry.spec(widget.type);
66
- const properties: readonly WidgetProperty[] = spec.properties;
67
- const property = properties.find((item) => item.id === id);
68
- if (property?.kind === "boolean") {
69
- widget.update({ [id]: value });
70
- return;
71
- }
72
- if (!spec.baseOptions.some((option) => option === id)) return;
73
- if (id === "raw") widget.update({ raw: value });
74
- if (id === "hideWhenEmpty") widget.update({ hideWhenEmpty: value });
75
- if (id === "hideWhenZero") widget.update({ hideWhenZero: value });
76
- }
77
-
78
- function metadataSetNumberField(widget: Widget, id: string, value: number): void {
79
- const properties: readonly WidgetProperty[] = registry.spec(widget.type).properties;
80
- const property = properties.find((item) => item.id === id);
81
- if (property?.kind === "number") widget.update({ [id]: value });
82
- }
83
-
84
- function isMetadataBooleanField(widget: Widget, id: string): boolean {
85
- const spec = registry.spec(widget.type);
86
- const properties: readonly WidgetProperty[] = spec.properties;
87
- const property = properties.find((item) => item.id === id);
88
- if (property?.kind === "boolean") return true;
89
- return (
90
- spec.baseOptions.some((option) => option === id) &&
91
- (id === "raw" || id === "hideWhenEmpty" || id === "hideWhenZero")
92
- );
93
- }
@@ -1,103 +0,0 @@
1
- import type { Theme } from "@earendil-works/pi-coding-agent";
2
-
3
- import type { GetExtensionStatuses } from "../extension-statuses.js";
4
- import { renderStatuslines } from "../render.js";
5
- import type { StatuslineData } from "../types.js";
6
- import type { WidgetStore } from "../widgets/store.js";
7
- import type { ScreenRender } from "./screen-render.js";
8
- import type { UiTheme } from "./theme.js";
9
- import { configTitleBarParts, previewTitleParts } from "./title-bar.js";
10
-
11
- interface OverlayRenderOptions {
12
- width: number;
13
- terminalRows: number;
14
- activeLineCount: number;
15
- visibleRowCount: number;
16
- store: WidgetStore;
17
- previewData: StatuslineData;
18
- getExtensionStatuses: GetExtensionStatuses;
19
- theme: Theme;
20
- requestRender?: () => void;
21
- configStateText: string;
22
- body: string[];
23
- }
24
-
25
- interface OverlayLayout {
26
- innerWidth: number;
27
- }
28
-
29
- export class OverlayRender {
30
- constructor(
31
- private readonly theme: UiTheme,
32
- private readonly screenRender: ScreenRender,
33
- ) {}
34
-
35
- render(options: OverlayRenderOptions): string[] {
36
- const layout = this.layout(options);
37
- const lines = [
38
- this.previewTitleLine(layout),
39
- ...this.previewLines(options),
40
- this.previewBottomLine(layout),
41
- this.blankSeparator(options.width),
42
- this.configTitleLine(options, layout),
43
- ...options.body,
44
- ];
45
-
46
- this.fillToTerminal(lines, options);
47
- lines.push(this.bottomBorder(layout));
48
- return lines;
49
- }
50
-
51
- private layout(options: OverlayRenderOptions): OverlayLayout {
52
- return { innerWidth: Math.max(1, options.width - 2) };
53
- }
54
-
55
- private previewTitleLine(layout: OverlayLayout): string {
56
- const previewTitle = previewTitleParts(layout.innerWidth);
57
- return (
58
- this.theme.border("─") +
59
- this.theme.previewTitle(previewTitle.title) +
60
- this.theme.border(`${"─".repeat(previewTitle.rightPad)}─`)
61
- );
62
- }
63
-
64
- private previewLines(options: OverlayRenderOptions): string[] {
65
- return renderStatuslines(options.store, options.previewData, Math.max(20, options.width), {
66
- getExtensionStatuses: options.getExtensionStatuses,
67
- theme: options.theme,
68
- ...(options.requestRender ? { requestRender: options.requestRender } : {}),
69
- }).map((line) => this.screenRender.lineW(line, options.width));
70
- }
71
-
72
- private previewBottomLine(layout: OverlayLayout): string {
73
- return this.theme.border(`─${"─".repeat(layout.innerWidth)}─`);
74
- }
75
-
76
- private blankSeparator(width: number): string {
77
- return " " + this.screenRender.padLine(width, "", "") + " ";
78
- }
79
-
80
- private configTitleLine(options: OverlayRenderOptions, layout: OverlayLayout): string {
81
- const title = configTitleBarParts(
82
- layout.innerWidth,
83
- (text) => this.theme.dim(text),
84
- Date.now(),
85
- options.configStateText,
86
- (text) => this.theme.border(text),
87
- );
88
- return (
89
- this.theme.border("╭─") + title.title + this.theme.border(`${"─".repeat(title.rightPad)}╮`)
90
- );
91
- }
92
-
93
- private fillToTerminal(lines: string[], options: OverlayRenderOptions): void {
94
- const neededToFillScreen = options.terminalRows - lines.length - 1;
95
- if (neededToFillScreen > 0) {
96
- lines.push(...Array(neededToFillScreen).fill(this.screenRender.line("", options.width)));
97
- }
98
- }
99
-
100
- private bottomBorder(layout: OverlayLayout): string {
101
- return this.theme.border(`╰${"─".repeat(layout.innerWidth)}╯`);
102
- }
103
- }
@@ -1,18 +0,0 @@
1
- import type { GetExtensionStatuses } from "../extension-statuses.js";
2
- import type { Widget } from "../widgets/types.js";
3
- import type { ScreenView } from "./model.js";
4
- import type { ScreenState } from "./screen-state.js";
5
- import type { UiTheme } from "./theme.js";
6
-
7
- export interface ScreenContext {
8
- state: ScreenState;
9
- theme: UiTheme;
10
- getExtensionStatuses: GetExtensionStatuses;
11
- currentLine(): Widget[];
12
- currentWidget(): Widget | undefined;
13
- visibleRowCount(): number;
14
- show(view: ScreenView): void;
15
- emitChange(): void;
16
- save(exitAfterSave: boolean): void;
17
- exitWithoutSaving(): void;
18
- }
@@ -1,27 +0,0 @@
1
- import type { ScreenContext } from "./screen-context.js";
2
- import type { ScreenView } from "./model.js";
3
- import type { Controller } from "./screens/controller.js";
4
-
5
- export class ScreenController {
6
- private readonly screens = new Map<ScreenView, Controller>();
7
-
8
- constructor(private readonly ctx: ScreenContext) {}
9
-
10
- register(view: ScreenView, screen: Controller): void {
11
- this.screens.set(view, screen);
12
- }
13
-
14
- renderScreen(width: number): string[] {
15
- return this.currentScreen().renderScreen(width);
16
- }
17
-
18
- handleInput(data: string): void {
19
- this.currentScreen().handleInput(data);
20
- }
21
-
22
- private currentScreen(): Controller {
23
- const screen = this.screens.get(this.ctx.state.view);
24
- if (!screen) throw new Error(`No screen registered for view: ${this.ctx.state.view}`);
25
- return screen;
26
- }
27
- }
@@ -1,32 +0,0 @@
1
- import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
2
-
3
- import type { UiTheme } from "./theme.js";
4
-
5
- export class ScreenRender {
6
- constructor(private readonly theme: UiTheme) {}
7
-
8
- menuTitle(title: string, description = ""): string {
9
- if (description.length === 0) return this.theme.accent(title);
10
- return this.theme.success(`•${title}`) + " " + this.theme.dim(description);
11
- }
12
-
13
- padLine(width: number, content: string, ellipsis = "…"): string {
14
- return truncateToWidth(content, Math.max(1, width - 2), ellipsis, true);
15
- }
16
-
17
- lineW(content: string, width: number): string {
18
- // NOTE: uncoment below for demo-look preview.
19
- // const clipped = truncateToWidth(content, Math.max(0, width - 2), "…");
20
- const clipped = truncateToWidth(content, Math.max(0, width), "…");
21
- return `${clipped}${" ".repeat(Math.max(0, width - visibleWidth(clipped)))}`;
22
- }
23
-
24
- line(content: string, width: number): string {
25
- return this.theme.border("│") + this.padLine(width, content) + this.theme.border("│");
26
- }
27
-
28
- menuLine(selected: boolean, content: string, width: number): string {
29
- const text = `${selected ? "›" : " "} ${content}`;
30
- return this.line(selected ? this.theme.selected(text) : text, width);
31
- }
32
- }
@@ -1,20 +0,0 @@
1
- import type { WidgetStore } from "../widgets/store.js";
2
- import type { ScreenView } from "./model.js";
3
-
4
- export interface ScreenState {
5
- store: WidgetStore;
6
- view: ScreenView;
7
- viewBeforeConfirmExit: ScreenView;
8
- selectedLine: number;
9
- selectedWidget: number;
10
- }
11
-
12
- export function createScreenState(store: WidgetStore): ScreenState {
13
- return {
14
- store,
15
- view: "main",
16
- viewBeforeConfirmExit: "main",
17
- selectedLine: 0,
18
- selectedWidget: 0,
19
- };
20
- }