projmux 0.6.3 → 0.6.4
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/README.md +3 -3
- package/docs/agent-workflow.md +19 -6
- package/docs/architecture.md +24 -0
- package/docs/cli.md +20 -16
- package/docs/configuration.md +71 -53
- package/docs/globalization.md +244 -0
- package/docs/hooks.md +7 -5
- package/docs/install.md +14 -11
- package/docs/keybindings.md +159 -309
- package/docs/native-picker-no-fzf-poc.md +7 -3
- package/docs/native-picker-parity.md +2 -2
- package/docs/notify-queue.md +8 -9
- package/docs/session-restore.md +20 -1
- package/docs/settings-ia.md +22 -5
- package/docs/statusbar.md +25 -13
- package/docs/testing.md +3 -2
- package/docs/theme-palette.md +105 -0
- package/docs/tmux-surface-inventory.md +794 -0
- package/docs/usage-tracking.md +4 -4
- package/package.json +5 -5
package/docs/settings-ia.md
CHANGED
|
@@ -17,6 +17,23 @@ view-first layout:
|
|
|
17
17
|
first, then the edit actions, then the explanatory hints.
|
|
18
18
|
- `Settings > Keybindings` is the single entry point for keybinding work. The
|
|
19
19
|
page is split into four chips: `Bindings`, `Diagnostic`, `Probe`, and `Init`.
|
|
20
|
+
- `Settings > Keybindings > Bindings` is a keybinding discovery surface, not
|
|
21
|
+
only a launch-toggle editor. It must show `Toggle Project Sidebar` with the
|
|
22
|
+
guaranteed `Alt-1` / `M-1` default, plus sidebar-local commands, picker-local
|
|
23
|
+
commands, `Pane navigation`, `Window navigation`, and `Rename` groups or
|
|
24
|
+
equivalent searchable rows.
|
|
25
|
+
- Rows that cannot safely be edited still stay visible. Mark diagnostic-only
|
|
26
|
+
rows with the delivery path and reason instead of hiding them or turning them
|
|
27
|
+
into unsupported editable aliases. Transport-dependent rows stay visible with
|
|
28
|
+
a separate default transport key and additive plain-alias entry; replacing or
|
|
29
|
+
disabling the transport default is not exposed.
|
|
30
|
+
- `Alt-1..5` are the only guaranteed zero-config launch defaults. `UserN` and
|
|
31
|
+
`CSI-u` are legacy/removal/unsupported targets, not supported fallback
|
|
32
|
+
guidance for Settings, setup, init, or docs.
|
|
33
|
+
- The launcher checkout policy applies in Settings: the project sidebar is a
|
|
34
|
+
first-class row, action rows use human-readable labels, internal IDs appear
|
|
35
|
+
only in detail/source/keymap contexts, and runtime footers are status hints,
|
|
36
|
+
not key discovery.
|
|
20
37
|
- `Settings > Notifications` owns notification delivery IA. Desktop notification
|
|
21
38
|
mode, AI desktop notification dedupe duration, delivery source diagnostics,
|
|
22
39
|
AI hook quiet policy, in-app queue status, and
|
|
@@ -68,8 +85,8 @@ Hooks remain the reference pattern for this IA:
|
|
|
68
85
|
|
|
69
86
|
Shell bootstrap UX is phase-split:
|
|
70
87
|
|
|
71
|
-
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
88
|
+
- `projmux welcome` remains the stdout revisit command.
|
|
89
|
+
- `Settings > About > Welcome` opens a visible native viewer independent of
|
|
90
|
+
shell skip state.
|
|
91
|
+
- Shell `skip_version` state applies only to the automatic `projmux shell`
|
|
92
|
+
prompt; it does not hide manual revisit surfaces.
|
package/docs/statusbar.md
CHANGED
|
@@ -5,6 +5,10 @@ clickable status bar. The same dispatcher (`projmux statusbar click`)
|
|
|
5
5
|
handles both mouse clicks and the keyboard chord, so adding a new
|
|
6
6
|
segment only requires one wiring point.
|
|
7
7
|
|
|
8
|
+
The built-in fallback colors used by the statusbar are semantic tokens in
|
|
9
|
+
`internal/theme/palette.go`; see [theme-palette.md](theme-palette.md) for the
|
|
10
|
+
truecolor to tmux 256-color mapping policy and palette inventory.
|
|
11
|
+
|
|
8
12
|
## Layout
|
|
9
13
|
|
|
10
14
|
```
|
|
@@ -37,10 +41,17 @@ row 1 [#S] #{pane_current_path} ⎈ <ctx>/<ns> <git> %H:%M
|
|
|
37
41
|
branch or detached commit,
|
|
38
42
|
then compact state indicators when available: `*` for local changes,
|
|
39
43
|
`+N` for staged entries, and `↑N`/`↓N` for ahead/behind counts. Each
|
|
40
|
-
state token gets its own compact foreground color
|
|
41
|
-
|
|
44
|
+
state token gets its own compact foreground color on the same muted branch
|
|
45
|
+
block; the indicators drop bold styling so git state remains readable
|
|
46
|
+
without dominating the status row. Window tab indexes stay left of each tab,
|
|
42
47
|
and tab titles are centered in a fixed-width trim so long active pane names
|
|
43
48
|
do not resize the status row.
|
|
49
|
+
- The settings chip keeps its label padding inside the `settings` range
|
|
50
|
+
and inside the chip background. The compact app chip renders `` with
|
|
51
|
+
the extra right-side icon padding painted by the same background, while
|
|
52
|
+
the standalone ` projmux` label keeps symmetric one-cell label padding.
|
|
53
|
+
The chip does not append an extra default-styled trailing space after
|
|
54
|
+
`#[default]`, so the painted button reaches the status row's right edge.
|
|
44
55
|
- Both HUD segments degrade gracefully when the cell budget is tight; see
|
|
45
56
|
[notify-queue.md](notify-queue.md) and [usage-tracking.md](usage-tracking.md)
|
|
46
57
|
for the per-segment tier ladder.
|
|
@@ -85,8 +96,8 @@ not inherit notification styling.
|
|
|
85
96
|
`usage` opens a native-framed detail HUD for the compact usage bar. It reads
|
|
86
97
|
the cached usage state in-process, keeps the existing `projmux usage` CLI
|
|
87
98
|
output shape unchanged for external consumers, aligns model/window rows with
|
|
88
|
-
right-aligned numeric values, dims unavailable values,
|
|
89
|
-
|
|
99
|
+
right-aligned numeric values, dims unavailable values, keeps stale sync/age
|
|
100
|
+
metadata muted, and colors only threshold values: amber at 80% and red at 95%.
|
|
90
101
|
Session State inspection lives under `Projects > Sessions > State`; global
|
|
91
102
|
Settings > Session State is settings-only and the statusbar no longer exposes a
|
|
92
103
|
duplicate State button.
|
|
@@ -99,15 +110,16 @@ popup command prints one quoted payload and waits for a plain Enter read so it
|
|
|
99
110
|
does not leave terminal key state behind. The usage popup uses the same
|
|
100
111
|
single-payload print and plain Enter-close pattern. It shows the authoritative
|
|
101
112
|
last collect timestamp when present, falls back to the cache file mtime when
|
|
102
|
-
needed, and
|
|
103
|
-
|
|
104
|
-
notification
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
113
|
+
needed, and keeps stale sync metadata muted instead of escalating it to a
|
|
114
|
+
warning color.
|
|
115
|
+
The notification HUD detail surface opens the right-side notification popup
|
|
116
|
+
through the notify sidebar action, with newest-first rows and an
|
|
117
|
+
attention-tinted title. When notification icon decoration is `symbol` or
|
|
118
|
+
`emoji`, the bell appears before the title text.
|
|
119
|
+
Selecting a row still focuses and acknowledges that notification. Internal
|
|
120
|
+
notify commands use `NotifySidebar:*` IDs in `keymap.toml`; runtime footers
|
|
121
|
+
render key guides from the merged keymap and prefer the default alias when it
|
|
122
|
+
is still configured.
|
|
111
123
|
|
|
112
124
|
Empty `#{mouse_status_range}` (a click on whitespace) falls through to
|
|
113
125
|
`select-window -t @<mouse_window>` when `--mouse-window` is non-empty,
|
package/docs/testing.md
CHANGED
|
@@ -44,8 +44,9 @@ execution should not need network access after the image is built.
|
|
|
44
44
|
The Docker suites do not replace checks that depend on a real host terminal,
|
|
45
45
|
desktop shell, or OS integration:
|
|
46
46
|
|
|
47
|
-
- terminal emulator key delivery and swallowing for `Alt-1..5
|
|
48
|
-
|
|
47
|
+
- terminal emulator key delivery and swallowing for guaranteed `Alt-1..5`
|
|
48
|
+
launch keys, optional user-configured direct aliases, and transport-dependent
|
|
49
|
+
chords
|
|
49
50
|
- Windows Terminal and WSL interop
|
|
50
51
|
- macOS host path, shell, and GUI behavior
|
|
51
52
|
- desktop notification click callbacks
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Theme Palette
|
|
2
|
+
|
|
3
|
+
This document records the built-in fallback palette that native projmux UI
|
|
4
|
+
surfaces use before project or global theme settings exist. The source of
|
|
5
|
+
truth in code is `internal/theme/palette.go`.
|
|
6
|
+
|
|
7
|
+
## Scope
|
|
8
|
+
|
|
9
|
+
The fallback palette is a semantic token layer, not a user configuration
|
|
10
|
+
schema. It gives current renderers shared names for the colors stabilized by
|
|
11
|
+
the Visual palette baseline work:
|
|
12
|
+
|
|
13
|
+
- Native picker truecolor SGR tokens.
|
|
14
|
+
- Native sidebar and chip-strip 256-color SGR tokens.
|
|
15
|
+
- Tmux statusbar and generated-config color tokens.
|
|
16
|
+
- Settings/action/state/trust/attention helper tokens.
|
|
17
|
+
|
|
18
|
+
Future Theme settings should resolve project/global values into this token
|
|
19
|
+
shape, then keep the built-in values as the final fallback. This phase does not
|
|
20
|
+
add `config.toml` fields, a resolver, a Settings editor, presets, import, or
|
|
21
|
+
export.
|
|
22
|
+
|
|
23
|
+
## Mapping Policy
|
|
24
|
+
|
|
25
|
+
Native picker rows can emit truecolor SGR, while tmux statusbar/config strings
|
|
26
|
+
must use tmux color specs. The fallback therefore stores both forms when a
|
|
27
|
+
role crosses surfaces.
|
|
28
|
+
|
|
29
|
+
Rules:
|
|
30
|
+
|
|
31
|
+
- Truecolor tokens keep exact SGR strings for native picker chrome and
|
|
32
|
+
Settings rows.
|
|
33
|
+
- Tmux tokens keep `colourN` strings where tmux owns rendering.
|
|
34
|
+
- Native chip/sidebar badge tokens use 256-color SGR when they intentionally
|
|
35
|
+
mirror tmux colors.
|
|
36
|
+
- Output compatibility wins inside this baseline. For example, the kube
|
|
37
|
+
segment keeps tmux's named `red` and `blue` behind semantic tokens until that
|
|
38
|
+
segment gets a separate redesign.
|
|
39
|
+
- Renderers should reference semantic names instead of spelling color literals
|
|
40
|
+
directly. Test fixtures may still pin rendered escape strings.
|
|
41
|
+
|
|
42
|
+
## Fallback Inventory
|
|
43
|
+
|
|
44
|
+
Chrome and text:
|
|
45
|
+
|
|
46
|
+
| Role | Native SGR | Tmux |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| `surface.active` | `48;2;44;56;61` with selected white text | window active `colour240` / `colour231` |
|
|
49
|
+
| `surface.raised` | `48;2;24;34;38` with `216;224;228` text | window inactive `colour235` / `colour245` |
|
|
50
|
+
| `text.primary` | `216;224;228` | `colour231` or `colour254` for identity text |
|
|
51
|
+
| `text.secondary` | `164;176;182` | `colour245` |
|
|
52
|
+
| `text.muted` | `117;132;140` or ANSI dim | `colour244`, `colour238`, `colour240` for low-signal blocks |
|
|
53
|
+
|
|
54
|
+
Accents and state:
|
|
55
|
+
|
|
56
|
+
| Role | Native SGR | Tmux |
|
|
57
|
+
| --- | --- | --- |
|
|
58
|
+
| `accent.identity` | not emitted directly today | `colour60` bg / `colour254` fg |
|
|
59
|
+
| `accent.action` | `141;205;142`, strong `122;199;173` | `colour29` bg / `colour230` fg |
|
|
60
|
+
| `accent.attention` | notify HUD background/project family | `colour53`, project `colour90` |
|
|
61
|
+
| `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.warning` | usage/status popup ANSI 256 wrapper | `colour214` |
|
|
64
|
+
| `state.danger` | `255;107;107` | `colour160` |
|
|
65
|
+
| `state.success` | settings/trust green families | `colour72`, `colour151` |
|
|
66
|
+
| `state.ahead` | switch/git metadata and notify age ANSI 256 wrapper | `colour153` |
|
|
67
|
+
| `git.branch` | switch/sidebar branch badge uses the statusbar git branch block colors | `colour30` bg / `colour231` fg |
|
|
68
|
+
|
|
69
|
+
Surface-specific tokens:
|
|
70
|
+
|
|
71
|
+
| Surface | Tokens |
|
|
72
|
+
| --- | --- |
|
|
73
|
+
| Native picker | current row, titlebar, rule, pointer, highlight, muted text, chip active/inactive/disabled |
|
|
74
|
+
| Statusbar row 1 | session identity, cwd secondary text, divider, git branch block, git dirty/staged/ahead/behind, settings action chip, clock |
|
|
75
|
+
| Notify HUD/sidebar | line bg/fg, project badge, info/warn/crit/stale/gone badges, AI agent badge, count/age text |
|
|
76
|
+
| Usage HUD/popup | OK/warning/critical/over-limit bars and numbers, empty cells, muted sync age |
|
|
77
|
+
| Settings | add/type/open action, destructive remove/quit, back/cancel, info/read-only, dim description, root action/dim rows, trust trusted/stale/untrusted |
|
|
78
|
+
| Switch picker cards | path metadata, active/inactive git branch badges aligned with statusbar git branch block colors, statusbar-like window tabs, inline attention/progress dots |
|
|
79
|
+
|
|
80
|
+
## Current Literal Inventory
|
|
81
|
+
|
|
82
|
+
After the Phase 3 token pass, raw color values intentionally remain in:
|
|
83
|
+
|
|
84
|
+
- `internal/theme/palette.go`, the fallback palette source of truth.
|
|
85
|
+
- Unit and golden fixtures that assert exact rendered output.
|
|
86
|
+
- `internal/app/welcome.go`, which is outside the Visual palette baseline
|
|
87
|
+
Phase 3 scope and should move only in welcome/update policy work.
|
|
88
|
+
- Older switch picker test fixtures that pin legacy compatibility output.
|
|
89
|
+
|
|
90
|
+
The converted implementation paths include:
|
|
91
|
+
|
|
92
|
+
- `internal/ui/projmuxpicker/ansi.go`
|
|
93
|
+
- `internal/app/tmux.go`
|
|
94
|
+
- `internal/app/status.go`
|
|
95
|
+
- `internal/app/statusbar.go`
|
|
96
|
+
- `internal/app/statusbar_decoration.go`
|
|
97
|
+
- `internal/app/notify.go`
|
|
98
|
+
- `internal/app/settings.go`
|
|
99
|
+
- `internal/app/settings_render.go`
|
|
100
|
+
- `internal/app/trust.go`
|
|
101
|
+
- `internal/app/usage.go`
|
|
102
|
+
- `internal/core/usage/hud.go`
|
|
103
|
+
- `internal/ui/render/switch.go`
|
|
104
|
+
- `internal/ui/render/popup.go`
|
|
105
|
+
- `internal/ui/render/switch_preview.go`
|