@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.
- package/CHANGELOG.md +27 -0
- package/README.md +6 -9
- package/dist/defaults/models.json +79 -29
- package/dist/defaults/settings.json +3 -7
- package/dist/extensions/package.json +3 -4
- package/dist/extensions/pi-zentui/.editorconfig +12 -0
- package/dist/extensions/pi-zentui/.github/CODEOWNERS +1 -0
- package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/bug_report.yml +110 -0
- package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/config.yml +8 -0
- package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/config_question.yml +56 -0
- package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/feature_request.yml +63 -0
- package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/rendering_issue.yml +106 -0
- package/dist/extensions/pi-zentui/.github/ISSUE_TEMPLATE/runtime_detection.yml +103 -0
- package/dist/extensions/pi-zentui/.github/dependabot.yml +47 -0
- package/dist/extensions/pi-zentui/.github/pull_request_template.md +34 -0
- package/dist/extensions/pi-zentui/.github/release.yml +18 -0
- package/dist/extensions/pi-zentui/.github/workflows/ci.yml +79 -0
- package/dist/extensions/pi-zentui/.github/workflows/publish.yml +63 -0
- package/dist/extensions/pi-zentui/AGENTS.md +107 -0
- package/dist/extensions/pi-zentui/CONTRIBUTING.md +68 -0
- package/dist/extensions/pi-zentui/LICENSE +21 -0
- package/dist/extensions/pi-zentui/README.md +188 -0
- package/dist/extensions/pi-zentui/SECURITY.md +18 -0
- package/dist/extensions/pi-zentui/assets/main-cover.png +0 -0
- package/dist/extensions/pi-zentui/assets/screenshots/editor-accent-rail.png +0 -0
- package/dist/extensions/pi-zentui/assets/screenshots/editor-minimalist.png +0 -0
- package/dist/extensions/pi-zentui/assets/screenshots/editor-opencode-copy-friendly.png +0 -0
- package/dist/extensions/pi-zentui/assets/screenshots/editor-opencode.png +0 -0
- package/dist/extensions/pi-zentui/assets/screenshots/user-message-compact.png +0 -0
- package/dist/extensions/pi-zentui/assets/screenshots/user-message-framed-copy-friendly.png +0 -0
- package/dist/extensions/pi-zentui/assets/screenshots/user-message-framed.png +0 -0
- package/dist/extensions/pi-zentui/assets/screenshots/user-message-labeled.png +0 -0
- package/dist/extensions/pi-zentui/assets/zentui.png +0 -0
- package/dist/extensions/pi-zentui/biome.json +31 -0
- package/dist/extensions/pi-zentui/docs/configuration.md +509 -0
- package/dist/extensions/pi-zentui/docs/footer-format.md +162 -0
- package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-editor.ts +99 -0
- package/dist/extensions/pi-zentui/extensions/zentui/accent-rail-layout-patch.ts +457 -0
- package/dist/extensions/pi-zentui/extensions/zentui/completion-menu.ts +157 -0
- package/dist/extensions/pi-zentui/extensions/zentui/config.ts +2100 -0
- package/dist/extensions/pi-zentui/extensions/zentui/editor-metadata-format.ts +321 -0
- package/dist/extensions/pi-zentui/extensions/zentui/editor-transfer.ts +73 -0
- package/dist/extensions/pi-zentui/extensions/zentui/extension-status.ts +89 -0
- package/dist/extensions/pi-zentui/extensions/zentui/footer-format.ts +364 -0
- package/dist/extensions/pi-zentui/extensions/zentui/footer-layout.ts +122 -0
- package/dist/extensions/pi-zentui/extensions/zentui/footer.ts +812 -0
- package/dist/extensions/pi-zentui/extensions/zentui/format.ts +568 -0
- package/dist/extensions/pi-zentui/extensions/zentui/git.ts +384 -0
- package/dist/extensions/pi-zentui/extensions/zentui/icons.ts +252 -0
- package/dist/extensions/pi-zentui/extensions/zentui/index.ts +1406 -0
- package/dist/extensions/pi-zentui/extensions/zentui/interaction-summary.ts +1049 -0
- package/dist/extensions/pi-zentui/extensions/zentui/live-context.ts +75 -0
- package/dist/extensions/pi-zentui/extensions/zentui/minimalist-editor.ts +463 -0
- package/dist/extensions/pi-zentui/extensions/zentui/package-version.ts +651 -0
- package/dist/extensions/pi-zentui/extensions/zentui/project-refresh.ts +120 -0
- package/dist/extensions/pi-zentui/extensions/zentui/project-state.ts +59 -0
- package/dist/extensions/pi-zentui/extensions/zentui/prototype-patch-registry.ts +166 -0
- package/dist/extensions/pi-zentui/extensions/zentui/repository-root.ts +98 -0
- package/dist/extensions/pi-zentui/extensions/zentui/runtime.ts +841 -0
- package/dist/extensions/pi-zentui/extensions/zentui/selector-border.ts +93 -0
- package/dist/extensions/pi-zentui/extensions/zentui/session-lifecycle.ts +60 -0
- package/dist/extensions/pi-zentui/extensions/zentui/settings-command.ts +1796 -0
- package/dist/extensions/pi-zentui/extensions/zentui/settings-previews.ts +128 -0
- package/dist/extensions/pi-zentui/extensions/zentui/state.ts +94 -0
- package/dist/extensions/pi-zentui/extensions/zentui/style.ts +424 -0
- package/dist/extensions/pi-zentui/extensions/zentui/telemetry.ts +82 -0
- package/dist/extensions/pi-zentui/extensions/zentui/ui.ts +1290 -0
- package/dist/extensions/pi-zentui/extensions/zentui/user-message-osc.ts +248 -0
- package/dist/extensions/pi-zentui/extensions/zentui/user-message-styles.ts +215 -0
- package/dist/extensions/pi-zentui/extensions/zentui/user-message.ts +206 -0
- package/dist/extensions/pi-zentui/extensions/zentui/working-line-messages.ts +24 -0
- package/dist/extensions/pi-zentui/extensions/zentui/working-line-spinners.ts +54 -0
- package/dist/extensions/pi-zentui/extensions/zentui/working-line.ts +1433 -0
- package/dist/extensions/pi-zentui/package-lock.json +5311 -0
- package/dist/extensions/pi-zentui/package.json +60 -0
- package/dist/extensions/pi-zentui/test/accent-rail-editor.test.ts +232 -0
- package/dist/extensions/pi-zentui/test/accent-rail-layout-patch.test.ts +669 -0
- package/dist/extensions/pi-zentui/test/completion-menu.test.ts +265 -0
- package/dist/extensions/pi-zentui/test/config.test.ts +3119 -0
- package/dist/extensions/pi-zentui/test/editor-metadata-format.test.ts +405 -0
- package/dist/extensions/pi-zentui/test/editor-transfer.test.ts +260 -0
- package/dist/extensions/pi-zentui/test/editor-viewport-indicators.test.ts +1286 -0
- package/dist/extensions/pi-zentui/test/extension-compliance.test.ts +7196 -0
- package/dist/extensions/pi-zentui/test/extension-status.test.ts +182 -0
- package/dist/extensions/pi-zentui/test/fixtures/starship-nerd-font-symbols.toml +172 -0
- package/dist/extensions/pi-zentui/test/footer-format.test.ts +431 -0
- package/dist/extensions/pi-zentui/test/footer-layout.test.ts +113 -0
- package/dist/extensions/pi-zentui/test/footer-repository-path.test.ts +123 -0
- package/dist/extensions/pi-zentui/test/format.test.ts +865 -0
- package/dist/extensions/pi-zentui/test/git.test.ts +212 -0
- package/dist/extensions/pi-zentui/test/icons.test.ts +69 -0
- package/dist/extensions/pi-zentui/test/interaction-summary.test.ts +1402 -0
- package/dist/extensions/pi-zentui/test/live-context-integration.test.ts +378 -0
- package/dist/extensions/pi-zentui/test/live-context.test.ts +139 -0
- package/dist/extensions/pi-zentui/test/minimalist-editor.test.ts +811 -0
- package/dist/extensions/pi-zentui/test/package-version.test.ts +321 -0
- package/dist/extensions/pi-zentui/test/project-refresh.test.ts +250 -0
- package/dist/extensions/pi-zentui/test/project-state.test.ts +159 -0
- package/dist/extensions/pi-zentui/test/repository-root.test.ts +108 -0
- package/dist/extensions/pi-zentui/test/responsive-dependencies.test.ts +825 -0
- package/dist/extensions/pi-zentui/test/runtime.test.ts +183 -0
- package/dist/extensions/pi-zentui/test/session-lifecycle.test.ts +40 -0
- package/dist/extensions/pi-zentui/test/settings-command.test.ts +1381 -0
- package/dist/extensions/pi-zentui/test/settings-previews.test.ts +347 -0
- package/dist/extensions/pi-zentui/test/state.test.ts +84 -0
- package/dist/extensions/pi-zentui/test/telemetry-lifecycle-integration.test.ts +276 -0
- package/dist/extensions/pi-zentui/test/telemetry.test.ts +105 -0
- package/dist/extensions/pi-zentui/test/turn-summary-lifecycle.integration.test.ts +327 -0
- package/dist/extensions/pi-zentui/test/user-message-osc.test.ts +164 -0
- package/dist/extensions/pi-zentui/test/user-message-styles.test.ts +292 -0
- package/dist/extensions/pi-zentui/test/working-line-lifecycle.integration.test.ts +730 -0
- package/dist/extensions/pi-zentui/test/working-line-messages.test.ts +34 -0
- package/dist/extensions/pi-zentui/test/working-line.test.ts +1990 -0
- package/dist/extensions/pi-zentui/tsconfig.json +16 -0
- package/dist/extensions/tps.test.ts +38 -0
- package/dist/extensions/{pi-powerline-footer/tps.ts → tps.ts} +4 -0
- package/dist/skills/design-references/SKILL.md +31 -0
- package/dist/skills/design-references/references/clickhouse/DESIGN.md +544 -0
- package/dist/themes/adventure.json +84 -0
- package/dist/themes/adwaita-dark.json +84 -0
- package/dist/themes/arcoiris.json +84 -0
- package/dist/themes/arthur.json +84 -0
- package/dist/themes/atom.json +84 -0
- package/dist/themes/aura.json +84 -0
- package/dist/themes/black-metal-bathory.json +84 -0
- package/dist/themes/black-metal-burzum.json +84 -0
- package/dist/themes/black-metal-khold.json +84 -0
- package/dist/themes/box.json +84 -0
- package/dist/themes/brogrammer.json +84 -0
- package/dist/themes/carbonfox.json +84 -0
- package/dist/themes/catppuccin-mocha.json +84 -0
- package/dist/themes/citruszest.json +84 -0
- package/dist/themes/cursor-dark.json +84 -0
- package/dist/themes/cutie-pro.json +84 -0
- package/dist/themes/dark-modern.json +84 -0
- package/dist/themes/dark-pastel.json +84 -0
- package/dist/themes/dimmed-monokai.json +84 -0
- package/dist/themes/doom-peacock.json +84 -0
- package/dist/themes/dracula-plus.json +84 -0
- package/dist/themes/dracula.json +80 -0
- package/dist/themes/earthsong.json +84 -0
- package/dist/themes/everforest-dark-hard.json +84 -0
- package/dist/themes/everforest-dark.json +80 -0
- package/dist/themes/fahrenheit.json +84 -0
- package/dist/themes/flatland.json +84 -0
- package/dist/themes/flexoki-dark.json +84 -0
- package/dist/themes/front-end-delight.json +84 -0
- package/dist/themes/fun-forrest.json +84 -0
- package/dist/themes/galizur.json +84 -0
- package/dist/themes/github-dark-colorblind.json +84 -0
- package/dist/themes/github-dark-high-contrast.json +84 -0
- package/dist/themes/glacier.json +84 -0
- package/dist/themes/gruber-darker.json +84 -0
- package/dist/themes/gruvbox-dark-hard.json +84 -0
- package/dist/themes/gruvbox-dark.json +84 -0
- package/dist/themes/gruvbox-material.json +84 -0
- package/dist/themes/guezwhoz.json +84 -0
- package/dist/themes/hacktober.json +84 -0
- package/dist/themes/hardcore.json +84 -0
- package/dist/themes/havn-skumring.json +84 -0
- package/dist/themes/ic-orange-ppl.json +84 -0
- package/dist/themes/iterm2-smoooooth.json +84 -0
- package/dist/themes/iterm2-tango-dark.json +84 -0
- package/dist/themes/japanesque.json +84 -0
- package/dist/themes/jellybeans.json +84 -0
- package/dist/themes/kanagawa-wave.json +84 -0
- package/dist/themes/kurokula.json +84 -0
- package/dist/themes/later-this-evening.json +84 -0
- package/dist/themes/lovelace.json +84 -0
- package/dist/themes/material-darker.json +84 -0
- package/dist/themes/matte-black.json +84 -0
- package/dist/themes/mellow.json +84 -0
- package/dist/themes/miasma.json +84 -0
- package/dist/themes/nord.json +80 -0
- package/dist/themes/nvim-dark.json +84 -0
- package/dist/themes/one-dark.json +80 -0
- package/dist/themes/popping-and-locking.json +84 -0
- package/dist/themes/rose-pine.json +80 -0
- package/dist/themes/sea-shells.json +84 -0
- package/dist/themes/sleepy-hollow.json +84 -0
- package/dist/themes/smyck.json +84 -0
- package/dist/themes/solarized-dark.json +80 -0
- package/dist/themes/tokyo-night.json +80 -0
- package/dist/themes/tomorrow-night-bright.json +84 -0
- package/dist/themes/tomorrow-night-burns.json +84 -0
- package/dist/themes/tomorrow-night.json +84 -0
- package/dist/themes/twilight.json +84 -0
- package/dist/themes/vague.json +84 -0
- package/dist/themes/vesper.json +84 -0
- package/dist/themes/xcode-dark-hc.json +84 -0
- package/docs/custom-provider.md +0 -1
- package/docs/plans/auto-model-routing-extension.md +490 -0
- package/package.json +3 -3
- package/dist/extensions/pi-powerline-footer/.github/workflows/test.yml +0 -27
- package/dist/extensions/pi-powerline-footer/CHANGELOG.md +0 -687
- package/dist/extensions/pi-powerline-footer/CONTRIBUTING.md +0 -16
- package/dist/extensions/pi-powerline-footer/README.md +0 -513
- package/dist/extensions/pi-powerline-footer/banner.png +0 -0
- package/dist/extensions/pi-powerline-footer/bash-mode/completion.ts +0 -586
- package/dist/extensions/pi-powerline-footer/bash-mode/editor.ts +0 -583
- package/dist/extensions/pi-powerline-footer/bash-mode/history.ts +0 -204
- package/dist/extensions/pi-powerline-footer/bash-mode/shell-session.ts +0 -286
- package/dist/extensions/pi-powerline-footer/bash-mode/transcript.ts +0 -108
- package/dist/extensions/pi-powerline-footer/bash-mode/types.ts +0 -60
- package/dist/extensions/pi-powerline-footer/cd-command.ts +0 -190
- package/dist/extensions/pi-powerline-footer/colors.ts +0 -70
- package/dist/extensions/pi-powerline-footer/context-usage.ts +0 -156
- package/dist/extensions/pi-powerline-footer/currency-rates.ts +0 -142
- package/dist/extensions/pi-powerline-footer/editor-composition.ts +0 -32
- package/dist/extensions/pi-powerline-footer/editor-performance.ts +0 -99
- package/dist/extensions/pi-powerline-footer/git-status.ts +0 -329
- package/dist/extensions/pi-powerline-footer/guide.ts +0 -220
- package/dist/extensions/pi-powerline-footer/icons.ts +0 -190
- package/dist/extensions/pi-powerline-footer/index.ts +0 -3428
- package/dist/extensions/pi-powerline-footer/lifecycle.ts +0 -10
- package/dist/extensions/pi-powerline-footer/package.json +0 -49
- package/dist/extensions/pi-powerline-footer/paths.ts +0 -22
- package/dist/extensions/pi-powerline-footer/powerline-config.ts +0 -446
- package/dist/extensions/pi-powerline-footer/presets.ts +0 -102
- package/dist/extensions/pi-powerline-footer/queue/store.ts +0 -313
- package/dist/extensions/pi-powerline-footer/queue/types.ts +0 -53
- package/dist/extensions/pi-powerline-footer/render-scheduler.ts +0 -29
- package/dist/extensions/pi-powerline-footer/segments.ts +0 -570
- package/dist/extensions/pi-powerline-footer/separators.ts +0 -57
- package/dist/extensions/pi-powerline-footer/session-usage.ts +0 -44
- package/dist/extensions/pi-powerline-footer/shortcuts.ts +0 -61
- package/dist/extensions/pi-powerline-footer/tests/bash-mode.test.ts +0 -1905
- package/dist/extensions/pi-powerline-footer/tests/cd-command.test.ts +0 -144
- package/dist/extensions/pi-powerline-footer/tests/context-usage.test.ts +0 -156
- package/dist/extensions/pi-powerline-footer/tests/custom-items.test.ts +0 -344
- package/dist/extensions/pi-powerline-footer/tests/editor-composition.test.ts +0 -48
- package/dist/extensions/pi-powerline-footer/tests/editor-performance.test.ts +0 -43
- package/dist/extensions/pi-powerline-footer/tests/editor-responsiveness.test.ts +0 -136
- package/dist/extensions/pi-powerline-footer/tests/fixed-editor-border.test.ts +0 -39
- package/dist/extensions/pi-powerline-footer/tests/git-optional-locks.test.ts +0 -64
- package/dist/extensions/pi-powerline-footer/tests/git-status.test.ts +0 -92
- package/dist/extensions/pi-powerline-footer/tests/guide.test.ts +0 -129
- package/dist/extensions/pi-powerline-footer/tests/jump-shortcuts.test.ts +0 -116
- package/dist/extensions/pi-powerline-footer/tests/mode-aware-trigger.test.ts +0 -79
- package/dist/extensions/pi-powerline-footer/tests/paths.test.ts +0 -63
- package/dist/extensions/pi-powerline-footer/tests/queue-store.test.ts +0 -65
- package/dist/extensions/pi-powerline-footer/tests/quit-cursor.test.ts +0 -14
- package/dist/extensions/pi-powerline-footer/tests/remaining-regressions.test.ts +0 -173
- package/dist/extensions/pi-powerline-footer/tests/session-usage.test.ts +0 -47
- package/dist/extensions/pi-powerline-footer/tests/stash-shortcut.test.ts +0 -37
- package/dist/extensions/pi-powerline-footer/tests/thinking-segment.test.ts +0 -76
- package/dist/extensions/pi-powerline-footer/tests/token-stats.test.ts +0 -249
- package/dist/extensions/pi-powerline-footer/tests/tps.test.ts +0 -39
- package/dist/extensions/pi-powerline-footer/tests/usage-display.test.ts +0 -237
- package/dist/extensions/pi-powerline-footer/tests/welcome.test.ts +0 -199
- package/dist/extensions/pi-powerline-footer/tests/working-vibes.test.ts +0 -317
- package/dist/extensions/pi-powerline-footer/theme.example.json +0 -24
- package/dist/extensions/pi-powerline-footer/theme.json +0 -12
- package/dist/extensions/pi-powerline-footer/theme.ts +0 -241
- package/dist/extensions/pi-powerline-footer/token-stats.ts +0 -304
- package/dist/extensions/pi-powerline-footer/tsconfig.json +0 -13
- package/dist/extensions/pi-powerline-footer/types.ts +0 -235
- package/dist/extensions/pi-powerline-footer/welcome-dismiss.ts +0 -34
- package/dist/extensions/pi-powerline-footer/welcome.ts +0 -709
- package/dist/extensions/pi-powerline-footer/working-vibes.ts +0 -721
- package/dist/extensions/preview-tools-disabled.test.ts +0 -37
- package/dist/extensions/preview-tools-disabled.ts +0 -11
- package/dist/themes/powerline-footer/theme.json +0 -33
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Footer format template
|
|
2
|
+
|
|
3
|
+
[Back to README](../README.md) · [Configuration reference](./configuration.md)
|
|
4
|
+
|
|
5
|
+
Set `components.footer.styles.starship.format` for complete control over the Starship Footer. The template supports:
|
|
6
|
+
|
|
7
|
+
- `$variable` and `${variable}` tokens
|
|
8
|
+
- literal text and spaces
|
|
9
|
+
- conditional groups `( ... )` that disappear when every nested variable is empty
|
|
10
|
+
- `$fill` layout boundaries
|
|
11
|
+
|
|
12
|
+
A custom format overrides `components.footer.styles.starship.segments`. Empty or omitted format uses the segment layout.
|
|
13
|
+
|
|
14
|
+
## Examples
|
|
15
|
+
|
|
16
|
+
A complete left/right layout:
|
|
17
|
+
|
|
18
|
+
```json
|
|
19
|
+
{
|
|
20
|
+
"components": {
|
|
21
|
+
"footer": {
|
|
22
|
+
"styles": {
|
|
23
|
+
"starship": {
|
|
24
|
+
"format": "$os $username $cwd($sep$session_name)( on $git_branch)( $git_status)( via $runtime)$fill($context)($sep$tokens)($sep$cost)($sep$time)"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Center the branch between directory and cost:
|
|
33
|
+
|
|
34
|
+
```json
|
|
35
|
+
{
|
|
36
|
+
"components": {
|
|
37
|
+
"footer": {
|
|
38
|
+
"styles": {
|
|
39
|
+
"starship": {
|
|
40
|
+
"format": "$cwd $fill $git_branch $fill $cost"
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Set or clear the template at runtime:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
/zentui format "$cwd( on $git_branch)($git_status)$fill($context)($sep$tokens)"
|
|
52
|
+
/zentui format clear
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
The released flat `footerFormat` and `footerSegments` keys remain accepted only as migration input.
|
|
56
|
+
|
|
57
|
+
## Variables
|
|
58
|
+
|
|
59
|
+
| Token | Aliases | Renders |
|
|
60
|
+
| --- | --- | --- |
|
|
61
|
+
| `$cwd` | `$directory` | current directory |
|
|
62
|
+
| `$session_name` | | current Pi session name |
|
|
63
|
+
| `$git_branch` | `$branch` | Git branch with icon |
|
|
64
|
+
| `$git_status` | `$status` | `[!?↑]` status block |
|
|
65
|
+
| `$git_state` | `$state` | `REBASING`, `MERGING`, and similar state, with optional `n/m` |
|
|
66
|
+
| `$git_commit` | `$commit` | short commit hash and exact-match tag when present |
|
|
67
|
+
| `$git_tag` | `$tag` | exact-match tag at HEAD |
|
|
68
|
+
| `$git_metrics` | | aggregate line changes `+added −deleted` |
|
|
69
|
+
| `$git_added` | | added line count (`+N`) |
|
|
70
|
+
| `$git_deleted` | | deleted line count (`−N`) |
|
|
71
|
+
| `$runtime` | | runtime icon and version |
|
|
72
|
+
| `$model` | | selected Footer model label |
|
|
73
|
+
| `$provider` | | formatted provider label |
|
|
74
|
+
| `$package` | | project package version as `is <glyph> <version>` |
|
|
75
|
+
| `$package_version` | | raw project package version |
|
|
76
|
+
| `$session_duration` | `$duration` | session running time |
|
|
77
|
+
| `$username` | | `user@host` |
|
|
78
|
+
| `$os` | | operating-system icon |
|
|
79
|
+
| `$time` | | current time `HH:MM` |
|
|
80
|
+
| `$context` | | context usage; finite percentages use one decimal |
|
|
81
|
+
| `$tokens` | | input/output totals and existing cache-hit percentage |
|
|
82
|
+
| `$cache_read` | | cache-read total (`R1.2k`); empty at zero or when unavailable |
|
|
83
|
+
| `$cache_write` | | cache-write total (`W300`); empty at zero or when unavailable |
|
|
84
|
+
| `$cost` | | session cost |
|
|
85
|
+
| `$subscription` | | `(sub)` in subscription mode; otherwise empty |
|
|
86
|
+
| `$auto_compaction` | | `(auto)` when automatic compaction is enabled |
|
|
87
|
+
| `$sep` | `$separator` | themed `|` using `colors.separator` |
|
|
88
|
+
| `$fill` | — | wide-format layout boundary |
|
|
89
|
+
|
|
90
|
+
Each variable renders its core value without prose prefixes such as `on` or `via`; add those words as literals.
|
|
91
|
+
|
|
92
|
+
### `$cwd` path modes
|
|
93
|
+
|
|
94
|
+
`$cwd`, the built-in wide directory segment, and responsive compact/final fallback all use `components.footer.styles.starship.pathDisplay`. Its unchanged default is `{ "mode": "basename", "depth": 0 }`.
|
|
95
|
+
|
|
96
|
+
- `basename` renders only the current directory name.
|
|
97
|
+
- `full` renders the full path with `~` home abbreviation.
|
|
98
|
+
- Opt-in `repository` excludes the repository directory name: repository root renders `.`, while `/repo/extensions/zentui` renders `extensions/zentui`.
|
|
99
|
+
|
|
100
|
+
For `full` and `repository`, `depth` keeps the final N components and `0` is unlimited. Repository mode forms the repository-relative path first and then applies depth; for example, `/repo/packages/core/src` at depth `2` renders `…/core/src`. Root always remains `.`. Separator normalization matches the existing cwd formatter.
|
|
101
|
+
|
|
102
|
+
Repository mode recognizes normal repositories and `.git` file worktrees. If the root is missing, stale, unsafe for the current cwd, or unavailable during a cwd/repository transition or failed lookup, `$cwd` silently uses the unlimited `full` path until current root state is safe. This fallback retains `~` abbreviation and never emits a relative path from a stale root.
|
|
103
|
+
|
|
104
|
+
### Compact-only structural tokens
|
|
105
|
+
|
|
106
|
+
`components.footer.styles.starship.compactFormat` also supports:
|
|
107
|
+
|
|
108
|
+
| Token | Behavior |
|
|
109
|
+
| --- | --- |
|
|
110
|
+
| `$wrap` | starts a new compact chunk with a space boundary; the packer keeps it on the current line when it fits or wraps it to the next line |
|
|
111
|
+
| `$wrap_sep` | starts a new compact chunk with the configured `$sep` boundary instead of a plain space |
|
|
112
|
+
| `$extensions` | expands active third-party statuses into independently packable compact chunks, preserving their rendered text and configured color modes |
|
|
113
|
+
|
|
114
|
+
Example:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"components": {
|
|
119
|
+
"footer": {
|
|
120
|
+
"styles": {
|
|
121
|
+
"starship": {
|
|
122
|
+
"compactFormat": "$cwd$wrap(in $session_name)$wrap(on $git_branch) $git_status$wrap$context$wrap_sep$tokens$wrap_sep$extensions"
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
These tokens are structural in compact mode: `$wrap` and `$wrap_sep` render no text themselves, and `$extensions` is empty when no third-party status is active.
|
|
131
|
+
|
|
132
|
+
## `$fill` behavior
|
|
133
|
+
|
|
134
|
+
| Count | Layout |
|
|
135
|
+
| ---: | --- |
|
|
136
|
+
| 0 | everything left-aligned |
|
|
137
|
+
| 1 | tokens before are left-aligned; tokens after are right-aligned |
|
|
138
|
+
| 2 | before first is left, between is truly centered, after second is right |
|
|
139
|
+
| 3+ | first two count; extras are ignored |
|
|
140
|
+
|
|
141
|
+
The centered middle zone uses `floor((gap - middle) / 2)`, matching third-party statuses placed in the middle.
|
|
142
|
+
|
|
143
|
+
## Conditional groups
|
|
144
|
+
|
|
145
|
+
Wrap optional content in parentheses:
|
|
146
|
+
|
|
147
|
+
```text
|
|
148
|
+
$cwd( on $git_branch)($git_status)$fill($context)
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
If every variable inside a group is empty, the group and its literal text are dropped. `$session_name` is available whenever a custom format is set, independently of segment visibility; use a group such as `($sep$session_name)` so unnamed sessions leave no separator.
|
|
152
|
+
|
|
153
|
+
## Formatting rules
|
|
154
|
+
|
|
155
|
+
- Literal text, pipes, and spaces render verbatim; the template owns spacing.
|
|
156
|
+
- `$session_name` is independent of `components.footer.styles.starship.segments.sessionName` in custom formats.
|
|
157
|
+
- Built-in wide layout appends cache totals to Tokens, `(sub)` to Cost, and `(auto)` to Context when available.
|
|
158
|
+
- Custom formats keep `$tokens`, `$cost`, and `$context` backward-compatible. Add `$cache_read`, `$cache_write`, `$subscription`, and `$auto_compaction` explicitly for atomic telemetry.
|
|
159
|
+
- `DEFAULT_COMPACT_FOOTER_FORMAT` omits model/provider and atomic telemetry. Add variables to `components.footer.styles.starship.compactFormat` to opt in at narrow widths. The flat `compactFooterFormat` key remains migration-only input.
|
|
160
|
+
- Auto-compaction settings refresh at the next normal Footer synchronization. Unsupported Pi capabilities or read errors omit optional markers.
|
|
161
|
+
- Unknown variables render empty.
|
|
162
|
+
- `$fill`, `$wrap`, and `$wrap_sep` are structural and never render visible text.
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import type { Theme } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
|
3
|
+
import {
|
|
4
|
+
applyOwnedSurfaceBackground,
|
|
5
|
+
fillTerminalLine,
|
|
6
|
+
renderCompletionRows,
|
|
7
|
+
} from "./completion-menu";
|
|
8
|
+
import type { ZentuiConfig } from "./config";
|
|
9
|
+
import { sanitizeEditorMetadataText } from "./editor-metadata-format";
|
|
10
|
+
import { renderStyleForSourceOrFallback, type SourceStyleFallback } from "./style";
|
|
11
|
+
|
|
12
|
+
export const ACCENT_RAIL_CHROME_WIDTH = 2;
|
|
13
|
+
|
|
14
|
+
const ACCENT_RAIL_FALLBACK: SourceStyleFallback = {
|
|
15
|
+
theme: "syntaxNumber",
|
|
16
|
+
terminal: "fg:215",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type AccentRailViewport = {
|
|
20
|
+
above?: string;
|
|
21
|
+
below?: string;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export type AccentRailEditorFrameOptions = {
|
|
25
|
+
width: number;
|
|
26
|
+
editorLines: string[];
|
|
27
|
+
autocompleteLines?: string[];
|
|
28
|
+
viewport?: AccentRailViewport;
|
|
29
|
+
uiTheme: Theme;
|
|
30
|
+
config: ZentuiConfig;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
function clampLines(lines: string[], width: number): string[] {
|
|
34
|
+
const maxWidth = Math.max(0, width);
|
|
35
|
+
return lines.map((line) => truncateToWidth(line, maxWidth, ""));
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function selectedRail(config: ZentuiConfig): string {
|
|
39
|
+
const style = config.components.editor.styles["accent-rail"];
|
|
40
|
+
const fallback = config.icons.mode === "ascii" ? "|" : "▎";
|
|
41
|
+
const configured = config.icons.mode === "ascii" ? style.asciiRail : style.rail;
|
|
42
|
+
const sanitized = sanitizeEditorMetadataText(configured);
|
|
43
|
+
const glyph = truncateToWidth(sanitized, 1, "");
|
|
44
|
+
return visibleWidth(glyph) === 1 ? glyph : fallback;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
function viewportLabel(
|
|
48
|
+
direction: "above" | "below",
|
|
49
|
+
count: string | undefined,
|
|
50
|
+
): string | undefined {
|
|
51
|
+
if (!count || !/^[1-9]\d*$/.test(count)) return undefined;
|
|
52
|
+
return `${direction === "above" ? "↑" : "↓"} ${count} more`;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Pure compact accent-rail composition shared by live rendering and settings previews. */
|
|
56
|
+
export function renderAccentRailEditorFrame({
|
|
57
|
+
width,
|
|
58
|
+
editorLines,
|
|
59
|
+
autocompleteLines = [],
|
|
60
|
+
viewport = {},
|
|
61
|
+
uiTheme,
|
|
62
|
+
config,
|
|
63
|
+
}: AccentRailEditorFrameOptions): string[] {
|
|
64
|
+
if (width < ACCENT_RAIL_CHROME_WIDTH + 1) {
|
|
65
|
+
return clampLines([...editorLines, ...autocompleteLines], width);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const contentWidth = width - ACCENT_RAIL_CHROME_WIDTH;
|
|
69
|
+
const rail = renderStyleForSourceOrFallback(
|
|
70
|
+
uiTheme,
|
|
71
|
+
config.components.editor.colorSource,
|
|
72
|
+
config.colors.editorRail,
|
|
73
|
+
ACCENT_RAIL_FALLBACK,
|
|
74
|
+
selectedRail(config),
|
|
75
|
+
);
|
|
76
|
+
const above = config.components.editor.viewportIndicators
|
|
77
|
+
? viewportLabel("above", viewport.above)
|
|
78
|
+
: undefined;
|
|
79
|
+
const below = config.components.editor.viewportIndicators
|
|
80
|
+
? viewportLabel("below", viewport.below)
|
|
81
|
+
: undefined;
|
|
82
|
+
const rows = [...(above ? [above] : []), ...editorLines, ...(below ? [below] : [])];
|
|
83
|
+
const transparent = config.components.editor.styles["accent-rail"].transparent;
|
|
84
|
+
const surface = rows.map((line) => {
|
|
85
|
+
const railCell = transparent ? rail : applyOwnedSurfaceBackground(uiTheme, rail);
|
|
86
|
+
const bodyText = ` ${fillTerminalLine(line, contentWidth)}`;
|
|
87
|
+
const body = transparent ? bodyText : applyOwnedSurfaceBackground(uiTheme, bodyText);
|
|
88
|
+
return `${railCell}${body}`;
|
|
89
|
+
});
|
|
90
|
+
const autocompleteSurface = renderCompletionRows({
|
|
91
|
+
lines: autocompleteLines,
|
|
92
|
+
width,
|
|
93
|
+
theme: uiTheme,
|
|
94
|
+
selectedPrefix: `${rail} `,
|
|
95
|
+
ownedBackground: !transparent,
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
return clampLines([...surface, ...autocompleteSurface], width);
|
|
99
|
+
}
|