projmux 0.6.4 → 0.6.6
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/docs/agent-workflow.md +17 -8
- package/docs/ai-agent-shortcuts.md +15 -1
- package/docs/cli.md +38 -17
- package/docs/configuration.md +119 -19
- package/docs/globalization.md +212 -7
- package/docs/hooks.md +5 -1
- package/docs/keybindings.md +21 -15
- package/docs/native-picker-parity.md +7 -4
- package/docs/npm-distribution.md +5 -3
- package/docs/pr-guideline.md +10 -0
- package/docs/settings-ia.md +25 -6
- package/docs/statusbar.md +30 -2
- package/docs/testing.md +122 -0
- package/docs/theme-palette.md +93 -14
- package/package.json +7 -7
package/docs/theme-palette.md
CHANGED
|
@@ -6,31 +6,78 @@ truth in code is `internal/theme/palette.go`.
|
|
|
6
6
|
|
|
7
7
|
## Scope
|
|
8
8
|
|
|
9
|
-
The fallback palette is a semantic token layer
|
|
10
|
-
|
|
11
|
-
the
|
|
9
|
+
The fallback palette is a semantic token layer. Theme settings resolve project
|
|
10
|
+
and global config into the resolver-facing token inventory below, then fall
|
|
11
|
+
back to the built-in values from `internal/theme/palette.go`.
|
|
12
12
|
|
|
13
13
|
- Native picker truecolor SGR tokens.
|
|
14
14
|
- Native sidebar and chip-strip 256-color SGR tokens.
|
|
15
15
|
- Tmux statusbar and generated-config color tokens.
|
|
16
16
|
- Settings/action/state/trust/attention helper tokens.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
Renderer adapters apply resolver-backed background/foreground colors to native
|
|
19
|
+
picker frame chrome and to tmux status/window background tokens when an
|
|
20
|
+
`EffectiveTheme` is supplied by the caller. Fallback-sourced fields still
|
|
21
|
+
render through the historical constants so built-in default output remains
|
|
22
|
+
byte-identical. Settings and native project picker surfaces load `[theme]`
|
|
23
|
+
values from global and project config through the shared effective-theme source.
|
|
24
|
+
Theme marketplace/import/export and Visual palette reselection remain out of
|
|
25
|
+
scope.
|
|
26
|
+
|
|
27
|
+
## Resolver Token Inventory
|
|
28
|
+
|
|
29
|
+
The public resolver inventory is intentionally smaller than the current
|
|
30
|
+
renderer literal inventory. Surface-specific renderers map their detailed roles
|
|
31
|
+
onto these stable names:
|
|
32
|
+
|
|
33
|
+
| Token | Meaning | Shared surfaces |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `background` | base popup/sidebar/status surface background | native picker, frame titlebar, notify sidebar, settings popup, statusbar |
|
|
36
|
+
| `surface` | raised or inactive chrome surface | frame titlebar, chips, switch cards, settings popup |
|
|
37
|
+
| `surface_active` | selected/current row or active chip surface | native picker current row, frame chips, statusbar active window |
|
|
38
|
+
| `foreground` | primary readable text | native picker, titlebar, statusbar, notify sidebar, settings popup |
|
|
39
|
+
| `muted` | secondary text, divider, disabled or stale details | picker metadata, titlebar rule, notify age/stale, settings descriptions |
|
|
40
|
+
| `accent` | pointer, primary action, highlight, active affordance | native picker pointer/highlight, settings actions, chips |
|
|
41
|
+
| `critical` | destructive/error/critical state | settings remove/quit, notify critical badge, statusbar critical usage |
|
|
42
|
+
| `warning` | progress, pending, warning, busy state | AI busy/thinking indicators, notify pending title, usage warning |
|
|
43
|
+
|
|
44
|
+
AI semantic status badges use renderer-only state roles layered on top of that
|
|
45
|
+
inventory: `progress`, `success`, and `action_required`. The fallback contract
|
|
46
|
+
is progress yellow, success green, action-required amber-orange. These roles are
|
|
47
|
+
separate from notify queue severity and desktop notification urgency; an AI
|
|
48
|
+
approval row can be `critical` in the notify queue while the live status badge
|
|
49
|
+
uses `action_required`, not red. `critical` remains reserved for error, failure,
|
|
50
|
+
destructive, over-limit, or risk states.
|
|
51
|
+
|
|
52
|
+
Renderer-only role names such as `accent.ai`, `state.progress`, `git.branch`,
|
|
53
|
+
and trust colors remain in `internal/theme/palette.go` until Phase 2+ maps each
|
|
54
|
+
surface to the resolver tokens. The key product contract for this phase is that
|
|
55
|
+
native picker, frame titlebar, chips, statusbar, notify sidebar, and settings
|
|
56
|
+
popup all consume a shared effective token set instead of independently
|
|
57
|
+
choosing colors.
|
|
58
|
+
|
|
59
|
+
Font is not part of this universal token inventory. `font_family` and
|
|
60
|
+
`font_size` are resolved as terminal capability/profile hints: projmux can
|
|
61
|
+
store and display the desired value, but tmux/ANSI rendering cannot force a
|
|
62
|
+
font family or size across terminal emulators. In environments without a
|
|
63
|
+
supported terminal font adapter, projmux reports the desired font as
|
|
64
|
+
`not applied` instead of treating storage as a successful font change.
|
|
22
65
|
|
|
23
66
|
## Mapping Policy
|
|
24
67
|
|
|
25
68
|
Native picker rows can emit truecolor SGR, while tmux statusbar/config strings
|
|
26
|
-
must use tmux color specs. The
|
|
27
|
-
|
|
69
|
+
must use tmux color specs. The resolver therefore carries both forms for each
|
|
70
|
+
color token.
|
|
28
71
|
|
|
29
72
|
Rules:
|
|
30
73
|
|
|
31
|
-
- Truecolor tokens keep exact
|
|
32
|
-
|
|
74
|
+
- Truecolor tokens keep exact `#RRGGBB` values and can be converted to
|
|
75
|
+
foreground/background SGR fragments such as `38;2;R;G;B` or `48;2;R;G;B`.
|
|
33
76
|
- Tmux tokens keep `colourN` strings where tmux owns rendering.
|
|
77
|
+
- The built-in `projmux-dark` fallback uses the established ANSI and tmux
|
|
78
|
+
tokens from `internal/theme/palette.go` to preserve current output.
|
|
79
|
+
- Explicit `#RRGGBB` overrides keep exact truecolor and derive the closest
|
|
80
|
+
xterm 256-color `colourN` token for tmux surfaces.
|
|
34
81
|
- Native chip/sidebar badge tokens use 256-color SGR when they intentionally
|
|
35
82
|
mirror tmux colors.
|
|
36
83
|
- Output compatibility wins inside this baseline. For example, the kube
|
|
@@ -39,6 +86,35 @@ Rules:
|
|
|
39
86
|
- Renderers should reference semantic names instead of spelling color literals
|
|
40
87
|
directly. Test fixtures may still pin rendered escape strings.
|
|
41
88
|
|
|
89
|
+
## Resolver Contract
|
|
90
|
+
|
|
91
|
+
Theme resolution is field-by-field after validating each layer:
|
|
92
|
+
|
|
93
|
+
1. Project `.projmux/config.toml`
|
|
94
|
+
2. Global `~/.config/projmux/config.toml`
|
|
95
|
+
3. Built-in fallback preset `projmux-dark`
|
|
96
|
+
|
|
97
|
+
Rules:
|
|
98
|
+
|
|
99
|
+
- Project values override global values for the same field.
|
|
100
|
+
- Missing or `inherit` project values fall back to global values.
|
|
101
|
+
- Missing global values fall back to built-in values.
|
|
102
|
+
- A preset fills missing color tokens in its own layer.
|
|
103
|
+
- Explicit color tokens in the same layer override preset colors.
|
|
104
|
+
- An unknown preset invalidates only that layer and emits a warning.
|
|
105
|
+
- An invalid color, `font_family`, or `font_size` invalidates only that layer
|
|
106
|
+
and emits a warning.
|
|
107
|
+
- Every effective field reports `project`, `global`, or `fallback` as its
|
|
108
|
+
source label.
|
|
109
|
+
|
|
110
|
+
Built-in preset config values are:
|
|
111
|
+
|
|
112
|
+
- `projmux-dark`
|
|
113
|
+
- `midnight`
|
|
114
|
+
- `forest`
|
|
115
|
+
- `rose`
|
|
116
|
+
- `high-contrast`
|
|
117
|
+
|
|
42
118
|
## Fallback Inventory
|
|
43
119
|
|
|
44
120
|
Chrome and text:
|
|
@@ -59,10 +135,11 @@ Accents and state:
|
|
|
59
135
|
| `accent.action` | `141;205;142`, strong `122;199;173` | `colour29` bg / `colour230` fg |
|
|
60
136
|
| `accent.attention` | notify HUD background/project family | `colour53`, project `colour90` |
|
|
61
137
|
| `accent.ai` | notify agent `colour37` family | `colour37` bg / `colour121` fg |
|
|
62
|
-
| `state.progress` | `255;204;102`; switch attention/busy dot and pending notify title/bell/badge `colour220` | `colour220` |
|
|
63
|
-
| `state.
|
|
138
|
+
| `state.progress` | `255;204;102`; switch attention/busy dot, pane-border in-progress badge, and pending notify title/bell/badge `colour220` | `colour220` |
|
|
139
|
+
| `state.action_required` | AI approval/input-required status badge amber-orange; currently aliases the established warning token | `colour214` |
|
|
140
|
+
| `state.warning` | usage/status popup warning ANSI 256 wrapper; non-AI warning chrome | `colour214` |
|
|
64
141
|
| `state.danger` | `255;107;107` | `colour160` |
|
|
65
|
-
| `state.success` | settings/trust green families | `colour72`, `colour151` |
|
|
142
|
+
| `state.success` | settings/trust green families; pane-border response-complete badge | `colour72`, `colour151` |
|
|
66
143
|
| `state.ahead` | switch/git metadata and notify age ANSI 256 wrapper | `colour153` |
|
|
67
144
|
| `git.branch` | switch/sidebar branch badge uses the statusbar git branch block colors | `colour30` bg / `colour231` fg |
|
|
68
145
|
|
|
@@ -72,6 +149,7 @@ Surface-specific tokens:
|
|
|
72
149
|
| --- | --- |
|
|
73
150
|
| Native picker | current row, titlebar, rule, pointer, highlight, muted text, chip active/inactive/disabled |
|
|
74
151
|
| Statusbar row 1 | session identity, cwd secondary text, divider, git branch block, git dirty/staged/ahead/behind, settings action chip, clock |
|
|
152
|
+
| App pane borders | semantic AI badge marker style (`dot`, `emoji`, or spacing-preserving `off`) plus action-required/success/progress state color |
|
|
75
153
|
| Notify HUD/sidebar | line bg/fg, project badge, info/warn/crit/stale/gone badges, AI agent badge, count/age text |
|
|
76
154
|
| Usage HUD/popup | OK/warning/critical/over-limit bars and numbers, empty cells, muted sync age |
|
|
77
155
|
| Settings | add/type/open action, destructive remove/quit, back/cancel, info/read-only, dim description, root action/dim rows, trust trusted/stale/untrusted |
|
|
@@ -90,6 +168,7 @@ After the Phase 3 token pass, raw color values intentionally remain in:
|
|
|
90
168
|
The converted implementation paths include:
|
|
91
169
|
|
|
92
170
|
- `internal/ui/projmuxpicker/ansi.go`
|
|
171
|
+
- `internal/ui/projmuxpicker/frame.go`
|
|
93
172
|
- `internal/app/tmux.go`
|
|
94
173
|
- `internal/app/status.go`
|
|
95
174
|
- `internal/app/statusbar.go`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projmux",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
4
4
|
"description": "tmux project session manager",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/crevissepartners/projmux#readme",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"README-ko.md",
|
|
24
24
|
"LICENSE"
|
|
25
25
|
],
|
|
26
|
-
"optionalDependencies": {
|
|
27
|
-
"@projmux/darwin-arm64": "0.6.4",
|
|
28
|
-
"@projmux/darwin-x64": "0.6.4",
|
|
29
|
-
"@projmux/linux-arm64": "0.6.4",
|
|
30
|
-
"@projmux/linux-x64": "0.6.4"
|
|
31
|
-
},
|
|
32
26
|
"scripts": {
|
|
33
27
|
"package:npm": "scripts/package-npm.sh",
|
|
34
28
|
"package:npm:pack": "scripts/package-npm.sh --pack"
|
|
29
|
+
},
|
|
30
|
+
"optionalDependencies": {
|
|
31
|
+
"@projmux/linux-x64": "0.6.6",
|
|
32
|
+
"@projmux/linux-arm64": "0.6.6",
|
|
33
|
+
"@projmux/darwin-x64": "0.6.6",
|
|
34
|
+
"@projmux/darwin-arm64": "0.6.6"
|
|
35
35
|
}
|
|
36
36
|
}
|