@selesai/code 0.9.14 → 0.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 (263) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +6 -9
  3. package/dist/defaults/models.json +79 -29
  4. package/dist/defaults/settings.json +3 -7
  5. package/dist/extensions/package.json +3 -4
  6. package/dist/extensions/pi-zentui/.editorconfig +12 -0
  7. package/dist/extensions/pi-zentui/.github/CODEOWNERS +1 -0
  8. package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/bug_report.yml +110 -0
  9. package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/config.yml +8 -0
  10. package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/config_question.yml +56 -0
  11. package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/feature_request.yml +63 -0
  12. package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/rendering_issue.yml +106 -0
  13. package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/runtime_detection.yml +103 -0
  14. package/dist/extensions/pi-zentui/.github/dependabot.yml +47 -0
  15. package/dist/extensions/pi-zentui/.github/pull_request_template.md +34 -0
  16. package/dist/extensions/pi-zentui/.github/release.yml +18 -0
  17. package/dist/extensions/pi-zentui/.github/workflows/ci.yml +79 -0
  18. package/dist/extensions/pi-zentui/.github/workflows/publish.yml +63 -0
  19. package/dist/extensions/pi-zentui/AGENTS.md +107 -0
  20. package/dist/extensions/pi-zentui/CONTRIBUTING.md +68 -0
  21. package/dist/extensions/pi-zentui/LICENSE +21 -0
  22. package/dist/extensions/pi-zentui/README.md +188 -0
  23. package/dist/extensions/pi-zentui/SECURITY.md +18 -0
  24. package/dist/extensions/pi-zentui/assets/main-cover.png +0 -0
  25. package/dist/extensions/pi-zentui/assets/screenshots/editor-accent-rail.png +0 -0
  26. package/dist/extensions/pi-zentui/assets/screenshots/editor-minimalist.png +0 -0
  27. package/dist/extensions/pi-zentui/assets/screenshots/editor-opencode-copy-friendly.png +0 -0
  28. package/dist/extensions/pi-zentui/assets/screenshots/editor-opencode.png +0 -0
  29. package/dist/extensions/pi-zentui/assets/screenshots/user-message-compact.png +0 -0
  30. package/dist/extensions/pi-zentui/assets/screenshots/user-message-framed-copy-friendly.png +0 -0
  31. package/dist/extensions/pi-zentui/assets/screenshots/user-message-framed.png +0 -0
  32. package/dist/extensions/pi-zentui/assets/screenshots/user-message-labeled.png +0 -0
  33. package/dist/extensions/pi-zentui/assets/zentui.png +0 -0
  34. package/dist/extensions/pi-zentui/biome.json +31 -0
  35. package/dist/extensions/pi-zentui/docs/configuration.md +509 -0
  36. package/dist/extensions/pi-zentui/docs/footer-format.md +162 -0
  37. package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-editor.ts +99 -0
  38. package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-layout-patch.ts +457 -0
  39. package/dist/extensions/pi-zentui/extensions/zentui/completion-menu.ts +157 -0
  40. package/dist/extensions/pi-zentui/extensions/zentui/config.ts +2100 -0
  41. package/dist/extensions/pi-zentui/extensions/zentui/editor-metadata-format.ts +321 -0
  42. package/dist/extensions/pi-zentui/extensions/zentui/editor-transfer.ts +73 -0
  43. package/dist/extensions/pi-zentui/extensions/zentui/extension-status.ts +89 -0
  44. package/dist/extensions/pi-zentui/extensions/zentui/footer-format.ts +364 -0
  45. package/dist/extensions/pi-zentui/extensions/zentui/footer-layout.ts +122 -0
  46. package/dist/extensions/pi-zentui/extensions/zentui/footer.ts +812 -0
  47. package/dist/extensions/pi-zentui/extensions/zentui/format.ts +568 -0
  48. package/dist/extensions/pi-zentui/extensions/zentui/git.ts +384 -0
  49. package/dist/extensions/pi-zentui/extensions/zentui/icons.ts +252 -0
  50. package/dist/extensions/pi-zentui/extensions/zentui/index.ts +1406 -0
  51. package/dist/extensions/pi-zentui/extensions/zentui/interaction-summary.ts +1049 -0
  52. package/dist/extensions/pi-zentui/extensions/zentui/live-context.ts +75 -0
  53. package/dist/extensions/pi-zentui/extensions/zentui/minimalist-editor.ts +463 -0
  54. package/dist/extensions/pi-zentui/extensions/zentui/package-version.ts +651 -0
  55. package/dist/extensions/pi-zentui/extensions/zentui/project-refresh.ts +120 -0
  56. package/dist/extensions/pi-zentui/extensions/zentui/project-state.ts +59 -0
  57. package/dist/extensions/pi-zentui/extensions/zentui/prototype-patch-registry.ts +166 -0
  58. package/dist/extensions/pi-zentui/extensions/zentui/repository-root.ts +98 -0
  59. package/dist/extensions/pi-zentui/extensions/zentui/runtime.ts +841 -0
  60. package/dist/extensions/pi-zentui/extensions/zentui/selector-border.ts +93 -0
  61. package/dist/extensions/pi-zentui/extensions/zentui/session-lifecycle.ts +60 -0
  62. package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +1796 -0
  63. package/dist/extensions/pi-zentui/extensions/zentui/settings-previews.ts +128 -0
  64. package/dist/extensions/pi-zentui/extensions/zentui/state.ts +94 -0
  65. package/dist/extensions/pi-zentui/extensions/zentui/style.ts +424 -0
  66. package/dist/extensions/pi-zentui/extensions/zentui/telemetry.ts +82 -0
  67. package/dist/extensions/pi-zentui/extensions/zentui/ui.ts +1290 -0
  68. package/dist/extensions/pi-zentui/extensions/zentui/user-message-osc.ts +248 -0
  69. package/dist/extensions/pi-zentui/extensions/zentui/user-message-styles.ts +215 -0
  70. package/dist/extensions/pi-zentui/extensions/zentui/user-message.ts +206 -0
  71. package/dist/extensions/pi-zentui/extensions/zentui/working-line-messages.ts +24 -0
  72. package/dist/extensions/pi-zentui/extensions/zentui/working-line-spinners.ts +54 -0
  73. package/dist/extensions/pi-zentui/extensions/zentui/working-line.ts +1433 -0
  74. package/dist/extensions/pi-zentui/package-lock.json +5311 -0
  75. package/dist/extensions/pi-zentui/package.json +60 -0
  76. package/dist/extensions/pi-zentui/test/accent-rail-editor.test.ts +232 -0
  77. package/dist/extensions/pi-zentui/test/accent-rail-layout-patch.test.ts +669 -0
  78. package/dist/extensions/pi-zentui/test/completion-menu.test.ts +265 -0
  79. package/dist/extensions/pi-zentui/test/config.test.ts +3119 -0
  80. package/dist/extensions/pi-zentui/test/editor-metadata-format.test.ts +405 -0
  81. package/dist/extensions/pi-zentui/test/editor-transfer.test.ts +260 -0
  82. package/dist/extensions/pi-zentui/test/editor-viewport-indicators.test.ts +1286 -0
  83. package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +7196 -0
  84. package/dist/extensions/pi-zentui/test/extension-status.test.ts +182 -0
  85. package/dist/extensions/pi-zentui/test/fixtures/starship-nerd-font-symbols.toml +172 -0
  86. package/dist/extensions/pi-zentui/test/footer-format.test.ts +431 -0
  87. package/dist/extensions/pi-zentui/test/footer-layout.test.ts +113 -0
  88. package/dist/extensions/pi-zentui/test/footer-repository-path.test.ts +123 -0
  89. package/dist/extensions/pi-zentui/test/format.test.ts +865 -0
  90. package/dist/extensions/pi-zentui/test/git.test.ts +212 -0
  91. package/dist/extensions/pi-zentui/test/icons.test.ts +69 -0
  92. package/dist/extensions/pi-zentui/test/interaction-summary.test.ts +1402 -0
  93. package/dist/extensions/pi-zentui/test/live-context-integration.test.ts +378 -0
  94. package/dist/extensions/pi-zentui/test/live-context.test.ts +139 -0
  95. package/dist/extensions/pi-zentui/test/minimalist-editor.test.ts +811 -0
  96. package/dist/extensions/pi-zentui/test/package-version.test.ts +321 -0
  97. package/dist/extensions/pi-zentui/test/project-refresh.test.ts +250 -0
  98. package/dist/extensions/pi-zentui/test/project-state.test.ts +159 -0
  99. package/dist/extensions/pi-zentui/test/repository-root.test.ts +108 -0
  100. package/dist/extensions/pi-zentui/test/responsive-dependencies.test.ts +825 -0
  101. package/dist/extensions/pi-zentui/test/runtime.test.ts +183 -0
  102. package/dist/extensions/pi-zentui/test/session-lifecycle.test.ts +40 -0
  103. package/dist/extensions/pi-zentui/test/settings-command.test.ts +1381 -0
  104. package/dist/extensions/pi-zentui/test/settings-previews.test.ts +347 -0
  105. package/dist/extensions/pi-zentui/test/state.test.ts +84 -0
  106. package/dist/extensions/pi-zentui/test/telemetry-lifecycle-integration.test.ts +276 -0
  107. package/dist/extensions/pi-zentui/test/telemetry.test.ts +105 -0
  108. package/dist/extensions/pi-zentui/test/turn-summary-lifecycle.integration.test.ts +327 -0
  109. package/dist/extensions/pi-zentui/test/user-message-osc.test.ts +164 -0
  110. package/dist/extensions/pi-zentui/test/user-message-styles.test.ts +292 -0
  111. package/dist/extensions/pi-zentui/test/working-line-lifecycle.integration.test.ts +730 -0
  112. package/dist/extensions/pi-zentui/test/working-line-messages.test.ts +34 -0
  113. package/dist/extensions/pi-zentui/test/working-line.test.ts +1990 -0
  114. package/dist/extensions/pi-zentui/tsconfig.json +16 -0
  115. package/dist/extensions/tps.test.ts +38 -0
  116. package/dist/extensions/{pi-powerline-footer/tps.ts → tps.ts} +4 -0
  117. package/dist/skills/design-references/SKILL.md +31 -0
  118. package/dist/skills/design-references/references/clickhouse/DESIGN.md +544 -0
  119. package/dist/themes/adventure.json +84 -0
  120. package/dist/themes/adwaita-dark.json +84 -0
  121. package/dist/themes/arcoiris.json +84 -0
  122. package/dist/themes/arthur.json +84 -0
  123. package/dist/themes/atom.json +84 -0
  124. package/dist/themes/aura.json +84 -0
  125. package/dist/themes/black-metal-bathory.json +84 -0
  126. package/dist/themes/black-metal-burzum.json +84 -0
  127. package/dist/themes/black-metal-khold.json +84 -0
  128. package/dist/themes/box.json +84 -0
  129. package/dist/themes/brogrammer.json +84 -0
  130. package/dist/themes/carbonfox.json +84 -0
  131. package/dist/themes/catppuccin-mocha.json +84 -0
  132. package/dist/themes/citruszest.json +84 -0
  133. package/dist/themes/cursor-dark.json +84 -0
  134. package/dist/themes/cutie-pro.json +84 -0
  135. package/dist/themes/dark-modern.json +84 -0
  136. package/dist/themes/dark-pastel.json +84 -0
  137. package/dist/themes/dimmed-monokai.json +84 -0
  138. package/dist/themes/doom-peacock.json +84 -0
  139. package/dist/themes/dracula-plus.json +84 -0
  140. package/dist/themes/dracula.json +80 -0
  141. package/dist/themes/earthsong.json +84 -0
  142. package/dist/themes/everforest-dark-hard.json +84 -0
  143. package/dist/themes/everforest-dark.json +80 -0
  144. package/dist/themes/fahrenheit.json +84 -0
  145. package/dist/themes/flatland.json +84 -0
  146. package/dist/themes/flexoki-dark.json +84 -0
  147. package/dist/themes/front-end-delight.json +84 -0
  148. package/dist/themes/fun-forrest.json +84 -0
  149. package/dist/themes/galizur.json +84 -0
  150. package/dist/themes/github-dark-colorblind.json +84 -0
  151. package/dist/themes/github-dark-high-contrast.json +84 -0
  152. package/dist/themes/glacier.json +84 -0
  153. package/dist/themes/gruber-darker.json +84 -0
  154. package/dist/themes/gruvbox-dark-hard.json +84 -0
  155. package/dist/themes/gruvbox-dark.json +84 -0
  156. package/dist/themes/gruvbox-material.json +84 -0
  157. package/dist/themes/guezwhoz.json +84 -0
  158. package/dist/themes/hacktober.json +84 -0
  159. package/dist/themes/hardcore.json +84 -0
  160. package/dist/themes/havn-skumring.json +84 -0
  161. package/dist/themes/ic-orange-ppl.json +84 -0
  162. package/dist/themes/iterm2-smoooooth.json +84 -0
  163. package/dist/themes/iterm2-tango-dark.json +84 -0
  164. package/dist/themes/japanesque.json +84 -0
  165. package/dist/themes/jellybeans.json +84 -0
  166. package/dist/themes/kanagawa-wave.json +84 -0
  167. package/dist/themes/kurokula.json +84 -0
  168. package/dist/themes/later-this-evening.json +84 -0
  169. package/dist/themes/lovelace.json +84 -0
  170. package/dist/themes/material-darker.json +84 -0
  171. package/dist/themes/matte-black.json +84 -0
  172. package/dist/themes/mellow.json +84 -0
  173. package/dist/themes/miasma.json +84 -0
  174. package/dist/themes/nord.json +80 -0
  175. package/dist/themes/nvim-dark.json +84 -0
  176. package/dist/themes/one-dark.json +80 -0
  177. package/dist/themes/popping-and-locking.json +84 -0
  178. package/dist/themes/rose-pine.json +80 -0
  179. package/dist/themes/sea-shells.json +84 -0
  180. package/dist/themes/sleepy-hollow.json +84 -0
  181. package/dist/themes/smyck.json +84 -0
  182. package/dist/themes/solarized-dark.json +80 -0
  183. package/dist/themes/tokyo-night.json +80 -0
  184. package/dist/themes/tomorrow-night-bright.json +84 -0
  185. package/dist/themes/tomorrow-night-burns.json +84 -0
  186. package/dist/themes/tomorrow-night.json +84 -0
  187. package/dist/themes/twilight.json +84 -0
  188. package/dist/themes/vague.json +84 -0
  189. package/dist/themes/vesper.json +84 -0
  190. package/dist/themes/xcode-dark-hc.json +84 -0
  191. package/docs/custom-provider.md +0 -1
  192. package/docs/plans/auto-model-routing-extension.md +490 -0
  193. package/package.json +3 -3
  194. package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +0 -27
  195. package/dist/extensions/pi-powerline-footer/CHANGELOG.md +0 -687
  196. package/dist/extensions/pi-powerline-footer/CONTRIBUTING.md +0 -16
  197. package/dist/extensions/pi-powerline-footer/README.md +0 -513
  198. package/dist/extensions/pi-powerline-footer/banner.png +0 -0
  199. package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +0 -586
  200. package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +0 -583
  201. package/dist/extensions/pi-powerline-footer/bash-mode/history.ts +0 -204
  202. package/dist/extensions/pi-powerline-footer/bash-mode/shell-session.ts +0 -286
  203. package/dist/extensions/pi-powerline-footer/bash-mode/transcript.ts +0 -108
  204. package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +0 -60
  205. package/dist/extensions/pi-powerline-footer/cd-command.ts +0 -190
  206. package/dist/extensions/pi-powerline-footer/colors.ts +0 -70
  207. package/dist/extensions/pi-powerline-footer/context-usage.ts +0 -156
  208. package/dist/extensions/pi-powerline-footer/currency-rates.ts +0 -142
  209. package/dist/extensions/pi-powerline-footer/editor-composition.ts +0 -32
  210. package/dist/extensions/pi-powerline-footer/editor-performance.ts +0 -99
  211. package/dist/extensions/pi-powerline-footer/git-status.ts +0 -329
  212. package/dist/extensions/pi-powerline-footer/guide.ts +0 -220
  213. package/dist/extensions/pi-powerline-footer/icons.ts +0 -190
  214. package/dist/extensions/pi-powerline-footer/index.ts +0 -3428
  215. package/dist/extensions/pi-powerline-footer/lifecycle.ts +0 -10
  216. package/dist/extensions/pi-powerline-footer/package.json +0 -49
  217. package/dist/extensions/pi-powerline-footer/paths.ts +0 -22
  218. package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -446
  219. package/dist/extensions/pi-powerline-footer/presets.ts +0 -102
  220. package/dist/extensions/pi-powerline-footer/queue/store.ts +0 -313
  221. package/dist/extensions/pi-powerline-footer/queue/types.ts +0 -53
  222. package/dist/extensions/pi-powerline-footer/render-scheduler.ts +0 -29
  223. package/dist/extensions/pi-powerline-footer/segments.ts +0 -570
  224. package/dist/extensions/pi-powerline-footer/separators.ts +0 -57
  225. package/dist/extensions/pi-powerline-footer/session-usage.ts +0 -44
  226. package/dist/extensions/pi-powerline-footer/shortcuts.ts +0 -61
  227. package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +0 -1905
  228. package/dist/extensions/pi-powerline-footer/tests/cd-command.test.ts +0 -144
  229. package/dist/extensions/pi-powerline-footer/tests/context-usage.test.ts +0 -156
  230. package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +0 -344
  231. package/dist/extensions/pi-powerline-footer/tests/editor-composition.test.ts +0 -48
  232. package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +0 -43
  233. package/dist/extensions/pi-powerline-footer/tests/editor-responsiveness.test.ts +0 -136
  234. package/dist/extensions/pi-powerline-footer/tests/fixed-editor-border.test.ts +0 -39
  235. package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +0 -64
  236. package/dist/extensions/pi-powerline-footer/tests/git-status.test.ts +0 -92
  237. package/dist/extensions/pi-powerline-footer/tests/guide.test.ts +0 -129
  238. package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +0 -116
  239. package/dist/extensions/pi-powerline-footer/tests/mode-aware-trigger.test.ts +0 -79
  240. package/dist/extensions/pi-powerline-footer/tests/paths.test.ts +0 -63
  241. package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +0 -65
  242. package/dist/extensions/pi-powerline-footer/tests/quit-cursor.test.ts +0 -14
  243. package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +0 -173
  244. package/dist/extensions/pi-powerline-footer/tests/session-usage.test.ts +0 -47
  245. package/dist/extensions/pi-powerline-footer/tests/stash-shortcut.test.ts +0 -37
  246. package/dist/extensions/pi-powerline-footer/tests/thinking-segment.test.ts +0 -76
  247. package/dist/extensions/pi-powerline-footer/tests/token-stats.test.ts +0 -249
  248. package/dist/extensions/pi-powerline-footer/tests/tps.test.ts +0 -39
  249. package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +0 -237
  250. package/dist/extensions/pi-powerline-footer/tests/welcome.test.ts +0 -199
  251. package/dist/extensions/pi-powerline-footer/tests/working-vibes.test.ts +0 -317
  252. package/dist/extensions/pi-powerline-footer/theme.example.json +0 -24
  253. package/dist/extensions/pi-powerline-footer/theme.json +0 -12
  254. package/dist/extensions/pi-powerline-footer/theme.ts +0 -241
  255. package/dist/extensions/pi-powerline-footer/token-stats.ts +0 -304
  256. package/dist/extensions/pi-powerline-footer/tsconfig.json +0 -13
  257. package/dist/extensions/pi-powerline-footer/types.ts +0 -235
  258. package/dist/extensions/pi-powerline-footer/welcome-dismiss.ts +0 -34
  259. package/dist/extensions/pi-powerline-footer/welcome.ts +0 -709
  260. package/dist/extensions/pi-powerline-footer/working-vibes.ts +0 -721
  261. package/dist/extensions/preview-tools-disabled.test.ts +0 -37
  262. package/dist/extensions/preview-tools-disabled.ts +0 -11
  263. package/dist/themes/powerline-footer/theme.json +0 -33
@@ -0,0 +1,103 @@
1
+ name: Runtime/language detection
2
+ description: Request or report runtime/language detection behavior
3
+ title: "runtime: "
4
+ labels: ["runtime", "needs-triage"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Use this for Zentui footer runtime/language segments: missing runtimes, incorrect detection, version display, or new runtime support.
10
+
11
+ - type: checkboxes
12
+ id: preflight
13
+ attributes:
14
+ label: Pre-flight checks
15
+ options:
16
+ - label: I searched existing issues before opening this one.
17
+ required: true
18
+ - label: I checked whether the relevant runtime/version command is available in the same shell where Pi runs.
19
+ required: true
20
+
21
+ - type: dropdown
22
+ id: kind
23
+ attributes:
24
+ label: Request type
25
+ options:
26
+ - Existing runtime not detected
27
+ - Existing runtime detected incorrectly
28
+ - Add a new runtime/language
29
+ - Version command/display issue
30
+ validations:
31
+ required: true
32
+
33
+ - type: input
34
+ id: runtime
35
+ attributes:
36
+ label: Runtime or language
37
+ placeholder: "Node.js, Python, Rust, Zig, etc."
38
+ validations:
39
+ required: true
40
+
41
+ - type: textarea
42
+ id: project-files
43
+ attributes:
44
+ label: Project files and detection signals
45
+ description: List relevant files in the project root and subdirectories that should influence detection.
46
+ placeholder: |
47
+ package.json
48
+ .node-version
49
+ pyproject.toml
50
+ src/...
51
+ validations:
52
+ required: true
53
+
54
+ - type: textarea
55
+ id: version-output
56
+ attributes:
57
+ label: Version command output
58
+ description: Include the command and output, if applicable.
59
+ placeholder: |
60
+ $ node --version
61
+ v20.11.1
62
+ render: shell
63
+
64
+ - type: textarea
65
+ id: expected
66
+ attributes:
67
+ label: Expected Zentui segment
68
+ placeholder: "via v20.11.1"
69
+ validations:
70
+ required: true
71
+
72
+ - type: textarea
73
+ id: actual
74
+ attributes:
75
+ label: Actual Zentui segment
76
+ validations:
77
+ required: true
78
+
79
+ - type: input
80
+ id: zentui-version
81
+ attributes:
82
+ label: Zentui version
83
+ placeholder: "0.2.7 / main@abc123 / local checkout"
84
+ validations:
85
+ required: true
86
+
87
+ - type: input
88
+ id: pi-version
89
+ attributes:
90
+ label: Pi version
91
+ placeholder: "0.74.x"
92
+ validations:
93
+ required: true
94
+
95
+ - type: textarea
96
+ id: environment
97
+ attributes:
98
+ label: Environment
99
+ placeholder: |
100
+ OS:
101
+ Shell:
102
+ Terminal app:
103
+ Install source:
@@ -0,0 +1,47 @@
1
+ version: 2
2
+
3
+ updates:
4
+ # npm dependencies in this package
5
+ - package-ecosystem: "npm"
6
+ directory: "/"
7
+ schedule:
8
+ interval: "weekly"
9
+ target-branch: "main"
10
+ open-pull-requests-limit: 5
11
+ groups:
12
+ # Low-noise grouped PRs for minor and patch updates.
13
+ minor-and-patch:
14
+ patterns:
15
+ - "*"
16
+ update-types:
17
+ - "minor"
18
+ - "patch"
19
+ # Major npm updates are intentionally not auto-merged; keep them visible
20
+ # as a separate stream so reviewers can evaluate breaking changes.
21
+ major:
22
+ patterns:
23
+ - "*"
24
+ update-types:
25
+ - "major"
26
+
27
+ # GitHub Actions workflow versions
28
+ - package-ecosystem: "github-actions"
29
+ directory: "/"
30
+ schedule:
31
+ interval: "weekly"
32
+ target-branch: "main"
33
+ open-pull-requests-limit: 5
34
+ groups:
35
+ first-party-and-known:
36
+ patterns:
37
+ - "actions/*"
38
+ - "github/*"
39
+ update-types:
40
+ - "minor"
41
+ - "patch"
42
+ third-party-actions:
43
+ patterns:
44
+ - "*"
45
+ update-types:
46
+ - "minor"
47
+ - "patch"
@@ -0,0 +1,34 @@
1
+ ## Summary
2
+
3
+ <!--
4
+ Briefly describe what this PR changes and why.
5
+ Focus on user-facing behavior: footer, editor, user-message styling, runtime/git detection, `/zentui` settings, config, or packaging.
6
+ Link related issues with "Closes #123" or "Refs #123" where applicable.
7
+ -->
8
+
9
+ ## Screenshots / recordings
10
+
11
+ <!--
12
+ Required for footer, editor, user-message, or rendering changes whenever practical.
13
+ A short terminal recording (asciinema, GIF, or video) is preferred over a still image.
14
+ If the change is purely internal (build, types, tests, docs), say "N/A" and explain.
15
+ -->
16
+
17
+ ## Testing
18
+
19
+ <!--
20
+ Run these locally before requesting review. Tick everything that applies.
21
+ -->
22
+
23
+ - [ ] `npm run verify`
24
+ - [ ] `npm run pack:check`
25
+ - [ ] Manual Pi test via `npm run pi:dev` (required for UI behavior changes)
26
+ - [ ] Added or updated tests where practical
27
+
28
+ ## Checklist
29
+
30
+ - [ ] Preserved Nerd Font / private-use icon glyphs (no empty strings or replaced characters).
31
+ - [ ] Updated `README.md` or config docs if user-facing behavior changed.
32
+ - [ ] Kept the diff surgical: no unrelated refactors, formatting, or dependency churn.
33
+ - [ ] `extensions/zentui/index.ts` stays mostly orchestration; new logic lives in a focused module.
34
+ - [ ] Used a conventional commit-style PR title (e.g. `feat: add ...`, `fix: handle ...`).
@@ -0,0 +1,18 @@
1
+ changelog:
2
+ categories:
3
+ - title: Features
4
+ labels:
5
+ - feat
6
+
7
+ - title: Bug fixes
8
+ labels:
9
+ - fix
10
+
11
+ - title: Other changes
12
+ labels:
13
+ - "*"
14
+
15
+ exclude:
16
+ labels:
17
+ - chore
18
+ - skip-changelog
@@ -0,0 +1,79 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - main
8
+
9
+ concurrency:
10
+ group: ci-${{ github.ref }}
11
+ cancel-in-progress: true
12
+
13
+ jobs:
14
+ verify:
15
+ runs-on: ubuntu-latest
16
+
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v7
20
+
21
+ - name: Setup Node
22
+ uses: actions/setup-node@v7
23
+ with:
24
+ node-version: 24
25
+ cache: npm
26
+
27
+ - name: Install dependencies
28
+ run: npm ci
29
+
30
+ - name: Verify
31
+ run: npm run verify
32
+
33
+ - name: Dry-run pack
34
+ run: npm run pack:check
35
+
36
+ supported-pi-compatibility:
37
+ runs-on: ubuntu-latest
38
+ timeout-minutes: 20
39
+ strategy:
40
+ fail-fast: false
41
+ matrix:
42
+ pi-version: ["0.80.5", "0.82.1", "0.83.0"]
43
+
44
+ steps:
45
+ - name: Checkout
46
+ uses: actions/checkout@v7
47
+
48
+ - name: Setup Node
49
+ uses: actions/setup-node@v7
50
+ with:
51
+ node-version: 24
52
+ cache: npm
53
+
54
+ - name: Pin matching Pi package versions
55
+ env:
56
+ PI_VERSION: ${{ matrix.pi-version }}
57
+ run: |
58
+ npm pkg set "devDependencies.@earendil-works/pi-ai=$PI_VERSION"
59
+ npm pkg set "devDependencies.@earendil-works/pi-coding-agent=$PI_VERSION"
60
+ npm pkg set "devDependencies.@earendil-works/pi-tui=$PI_VERSION"
61
+
62
+ - name: Install dependencies
63
+ run: npm install --no-audit --no-fund
64
+
65
+ - name: Attest Pi package versions
66
+ env:
67
+ PI_VERSION: ${{ matrix.pi-version }}
68
+ run: |
69
+ npm ls --depth=0 @earendil-works/pi-ai @earendil-works/pi-coding-agent @earendil-works/pi-tui
70
+ node - <<'NODE'
71
+ for (const name of ["pi-ai", "pi-coding-agent", "pi-tui"]) {
72
+ const pkg = require(`./node_modules/@earendil-works/${name}/package.json`)
73
+ if (pkg.version !== process.env.PI_VERSION) throw new Error(`${pkg.name}: ${pkg.version}`)
74
+ console.log(pkg.name, pkg.version)
75
+ }
76
+ NODE
77
+
78
+ - name: Test supported Pi version
79
+ run: timeout --signal=TERM --kill-after=30s 15m npm test
@@ -0,0 +1,63 @@
1
+ name: Publish
2
+ run-name: Publish ${{ github.ref_name }}
3
+
4
+ on:
5
+ push:
6
+ tags:
7
+ - "v*.*.*"
8
+
9
+ permissions:
10
+ contents: read
11
+ id-token: write
12
+
13
+ jobs:
14
+ publish:
15
+ runs-on: ubuntu-latest
16
+ environment: npm-publish
17
+
18
+ steps:
19
+ - name: Checkout
20
+ uses: actions/checkout@v7
21
+
22
+ - name: Setup Node
23
+ uses: actions/setup-node@v7
24
+ with:
25
+ node-version: 24
26
+ registry-url: https://registry.npmjs.org
27
+ cache: npm
28
+
29
+ - name: Install dependencies
30
+ run: npm ci
31
+
32
+ - name: Verify
33
+ run: npm run verify
34
+
35
+ - name: Dry-run pack
36
+ run: npm run pack:check
37
+
38
+ - name: Check tag matches package version
39
+ run: |
40
+ VERSION=$(node -p "require('./package.json').version")
41
+ TAG="${GITHUB_REF_NAME#v}"
42
+ test "$VERSION" = "$TAG"
43
+
44
+ - name: Publish to npm
45
+ run: npm publish
46
+
47
+ release:
48
+ needs: publish
49
+ runs-on: ubuntu-latest
50
+ permissions:
51
+ contents: write
52
+
53
+ steps:
54
+ - name: Create GitHub release
55
+ env:
56
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
57
+ run: |
58
+ REPO="${{ github.repository }}"
59
+ if gh release view "${GITHUB_REF_NAME}" --repo "$REPO" >/dev/null 2>&1; then
60
+ echo "Release ${GITHUB_REF_NAME} already exists; skipping."
61
+ else
62
+ gh release create "${GITHUB_REF_NAME}" --repo "$REPO" --generate-notes --title "${GITHUB_REF_NAME}"
63
+ fi
@@ -0,0 +1,107 @@
1
+ ## What this app is
2
+
3
+ Zentui is a Pi extension package that gives Pi a Starship-inspired footer and an Opencode-style input UI.
4
+
5
+ It shows useful session/project state at a glance:
6
+
7
+ - current directory
8
+ - git branch and git status
9
+ - detected runtime/language and version
10
+ - context usage
11
+ - input/output token counts
12
+ - running session cost
13
+ - model/provider in the editor frame
14
+
15
+ ## How it works
16
+
17
+ Pi loads the package from `package.json` via:
18
+
19
+ ```json
20
+ "pi": {
21
+ "extensions": ["./extensions"]
22
+ }
23
+ ```
24
+
25
+ The extension entry point is:
26
+
27
+ ```text
28
+ extensions/zentui/index.ts
29
+ ```
30
+
31
+ On `session_start`, Zentui installs:
32
+
33
+ - a custom footer (`footer.ts`)
34
+ - a custom editor (`ui.ts`)
35
+ - custom user-message styling (`user-message.ts`)
36
+ - a project refresh timer for git/runtime status
37
+
38
+ Most updates happen by syncing shared footer state and asking the TUI to re-render after Pi events like model changes, message completion, tool completion, and compaction.
39
+
40
+ ## Product decision: TUI composability
41
+
42
+ Zentui is a set of independently selectable TUI components, not a bundled UI mode. Users can adopt User messages, Editor, Working line, selector borders, Footer, or future surfaces individually while leaving every other surface native or controlled by another extension.
43
+
44
+ - Enabling or configuring one component must never require, toggle, restyle, or silently rewrite another. Each feature needs its own canonical config choice (`enabled` and/or `style` as appropriate), settings control, install/reconcile/dispose lifecycle, and ownership boundary.
45
+ - Disabled or native must leave that surface alone. Shared infrastructure must remain behavior-neutral.
46
+ - Prefer public Pi APIs. Safely decorate, aggregate, or delegate where possible; clean up only owned state; and fail open to native or predecessor UI.
47
+ - Treat the unkeyed Working line as controlled exclusivity with best-effort release, not true aggregation.
48
+ - Keep `index.ts` orchestration-only.
49
+
50
+ ## Important files
51
+
52
+ - `extensions/zentui/index.ts` — extension orchestration and Pi event wiring.
53
+ - `extensions/zentui/config.ts` — config file path, defaults, and config merging.
54
+ - `extensions/zentui/footer.ts` — footer/statusline rendering.
55
+ - `extensions/zentui/style.ts` — Starship-style terminal style rendering (`bold purple`, `fg:202`, `bg:blue`, etc.).
56
+ - `extensions/zentui/format.ts` — small formatting helpers for counts, labels, context, cwd, and runtime segments.
57
+ - `extensions/zentui/state.ts` — footer state shape and sync logic.
58
+ - `extensions/zentui/git.ts` — git porcelain parsing and status summary.
59
+ - `extensions/zentui/runtime.ts` — runtime/language detection and version lookup.
60
+ - `extensions/zentui/settings-command.ts` — `/zentui` settings UI for color-source preferences.
61
+ - `extensions/zentui/ui.ts` — custom editor frame.
62
+ - `extensions/zentui/user-message.ts` — prompt-box-style user message rendering.
63
+
64
+ ## Config
65
+
66
+ User config is created at:
67
+
68
+ ```text
69
+ ~/.pi/agent/zentui.json
70
+ ```
71
+
72
+ Use `colors` for Starship-style color strings, hex/256-color values, or Pi theme tokens. Canonical color-source ownership is independent through `components.editor.colorSource`, `components.userMessages.colorSource`, `components.selectorBorders.colorSource`, and `components.footer.colorSource`. `/zentui` exposes separate controls for Editor, previous User messages, selector borders, and—while Starship is selected—the Footer; changing one does not change the others.
73
+
74
+ ## Things to preserve
75
+
76
+ - Keep `index.ts` mostly orchestration; put rendering/formatting logic in focused modules.
77
+ - Preserve Nerd Font icons. Many are private-use Unicode characters and can be easy to accidentally replace with empty strings.
78
+ - Runtime color values should follow Starship's terminal style strings.
79
+ - `user-message.ts` intentionally patches `UserMessageComponent`; treat it as fragile and avoid changing it unless necessary.
80
+ - Silent fallbacks are intentional for git/runtime/config failures so the UI does not break the session.
81
+
82
+ ## Development
83
+
84
+ Use these commands before shipping changes:
85
+
86
+ ```bash
87
+ npm run fmt
88
+ npm run verify
89
+ npm run pack:check
90
+ ```
91
+
92
+ For local Pi testing:
93
+
94
+ ```bash
95
+ npm run pi:dev
96
+ npm run pi:install-local
97
+ ```
98
+
99
+ ## Commit style
100
+
101
+ Use conventional commit messages that match the existing history:
102
+
103
+ ```text
104
+ feat: add user-facing capability
105
+ ```
106
+
107
+ Keep the subject lowercase after the type, imperative, and concise. Do not use a trailing period.
@@ -0,0 +1,68 @@
1
+ # Contributing to pi-zentui
2
+
3
+ Thanks for your interest in pi-zentui. This document covers the workflow and conventions used in this repository.
4
+
5
+ ## Development setup
6
+
7
+ Requirements: Node.js and npm. pi-zentui is a Pi extension package, so you'll also want a working `pi` binary for local testing.
8
+
9
+ ```bash
10
+ npm install
11
+ npm run verify # biome check + tsc --noEmit + vitest run
12
+ npm run pack:check # npm pack --dry-run, sanity-checks published contents
13
+ ```
14
+
15
+ Before opening a pull request, please run `npm run fmt` and then `npm run verify` again.
16
+
17
+ ## Local Pi testing
18
+
19
+ The package is loaded by Pi from `package.json` via the `pi.extensions` field. Use the dev scripts to iterate without publishing:
20
+
21
+ ```bash
22
+ npm run pi:dev # runs pi with only this extension loaded
23
+ npm run pi:install-local # installs the local checkout into your pi extensions
24
+ ```
25
+
26
+ If your `pi` binary is not at the default path, override it:
27
+
28
+ ```bash
29
+ PI_BIN=/absolute/path/to/pi npm run pi:dev
30
+ ```
31
+
32
+ Manual testing is required for any change that affects the footer, editor, user-message styling, runtime/git detection, colors, or `/zentui` settings.
33
+
34
+ ## Coding expectations
35
+
36
+ Please follow the conventions already in this repo. The most important ones:
37
+
38
+ - **Preserve Nerd Font / private-use icon glyphs.** Many of the icons are private-use Unicode characters; it is easy to replace them with empty strings by accident.
39
+ - **Keep `extensions/zentui/index.ts` orchestration-focused.** Rendering, formatting, and parsing logic belong in focused modules such as `footer.ts`, `format.ts`, `style.ts`, `git.ts`, `runtime.ts`, `ui.ts`, or `user-message.ts`.
40
+ - **Use focused modules.** New rendering or formatting code should generally go into the matching module rather than being inlined.
41
+ - **Silent fallbacks are intentional.** Git, runtime detection, and config lookups fail silently so that a broken environment does not break the session. Do not add throws or noisy errors for these paths without a strong reason.
42
+ - **`user-message.ts` patches `UserMessageComponent`.** Treat it as fragile and avoid changes unless they are necessary.
43
+ - **Runtime color values follow Starship's terminal style strings** (e.g. `bold purple`, `fg:202`, `bg:blue`).
44
+
45
+ ## Pull request expectations
46
+
47
+ - Describe the user-facing behavior change in the PR summary.
48
+ - Include screenshots or a short recording for footer, editor, user-message, or rendering changes.
49
+ - Run `npm run verify` and `npm run pack:check` locally.
50
+ - Keep the diff surgical. Don't refactor adjacent code, reformat unrelated files, or upgrade dependencies that aren't part of the fix.
51
+ - Use a conventional commit-style subject (e.g. `feat: add ...`, `fix: handle ...`), lowercase after the type, imperative, and concise. No trailing period.
52
+ - Reviews are assigned to `@lmilojevicc` via `CODEOWNERS`.
53
+
54
+ ## Reporting issues
55
+
56
+ Please use the GitHub issue forms in [`.github/ISSUE_TEMPLATE/`](.github/ISSUE_TEMPLATE/) so reports include the environment, config, and Pi/Zentui version context needed to triage them:
57
+
58
+ - Bug report
59
+ - Rendering, icon, or color issue
60
+ - Feature request
61
+ - Runtime/language detection
62
+ - Config or usage question
63
+
64
+ For core Pi issues outside Zentui's footer, editor, and message styling, please open the issue upstream in the Pi project instead.
65
+
66
+ ## License
67
+
68
+ By contributing, you agree that your contributions will be licensed under the MIT license that covers this project. See [`LICENSE`](LICENSE) for the full text.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025-2026 Luka
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.