projmux 0.6.0 → 0.6.1

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.
@@ -33,7 +33,7 @@
33
33
  - `make test` also covers Settings IA regression guards for `send-noti` visibility in Hooks, no nested Project recipe inside Hooks, Project recipe/AI/Labs view-first detail rows, Notifications root/Desktop notifications/Delivery sources relocation, Delivery sources command-row clipboard copy, and Labs Project Hooks overview-first rows.
34
34
  - `make test` also covers Settings > Session State as global settings-only UI with default-off auto-save and no window/pane tree, Settings > Project > Session State project-derived identity plus project auto-save override/effective source rows and distinct Save latest snapshot / Save named snapshot labels, closed-project save disabled reasons, named snapshot portable path conversion, project/global auto-save precedence, Projects > Sessions > State read-only latest/named snapshot overview with window/pane cwd/recipe/agent-resume health, user-facing `projmux session-state` status/save/delete/restore dry-run actions including explicit manual save bypass of disabled autosave and agent resume status/confidence preview, and Project open sidebar startup coverage for Labs opt-in `Start project`, default-off empty creation, Latest snapshot, Named snapshot, Empty session, Back, saved-at row metadata, existing-session skip, startup-before-trust ordering, trust approve continuation, and trust deny/cancel no-session behavior.
35
35
  - `make test` also covers `projmux shell` usage without startup selector flags, project-context default target lookup from `PROJMUX_CWD` or nearest project marker, explicit `--session` separation from project-derived defaults, and direct empty attach behavior without shell startup picker/replay.
36
- - `make test` also covers the statusbar Session State popup entrypoint, manual Save snapshot and restore dry-run preview actions, title-first pane preview labels with legacy snapshot fallback, missing-snapshot messaging, and `projmux tmux sessionstate-status` helper wiring.
36
+ - `make test` also covers manual Session State Save snapshot and restore dry-run preview actions, title-first pane preview labels with legacy snapshot fallback, missing-snapshot messaging, and the absence of the removed statusbar State shortcut.
37
37
  - `make test` also covers legacy named-snapshot storage compatibility for `.projmux/layouts/*.toml`, supported interpolation validation, malformed-file list warnings, portable conversion helpers, dry-run conversion to the session-state restore preview with source labels, missing current-session failure, destructive live replay helper behavior with fresh/internal source marking and fresh saved-snapshot cleanup, and the session-state live replay helper that stages windows, moves them by tmux ID, and removes extra live windows.
38
38
  - `make test` also covers `projmux ai integrate codex` default hooks install/idempotence/dry-run/removal, compatibility legacy Codex notify mode install/idempotence, dry-run preview, unmanaged `notify = ...` conflict refusal, managed-block removal, catalog-driven Codex hook event installation with local override merging, nested inline Codex hook schema, `[features]` merge/preservation, preservation of unrelated Codex/Claude config and unmanaged hook entries, Settings Codex `/hooks` review notice and tested-version rows, and remove-all behavior for projmux-managed Codex blocks.
39
39
  - `make test` also covers `projmux ai ingest codex-hook` event parsing, PermissionRequest critical queue rows with tool/action metadata, Stop info queue rows, UserPromptSubmit busy/no-queue behavior, quiet/no-notify diagnostics for non-firing Codex hook events including override-added catalog events, cataloged hook notification body formatting, hook-active pane marking, topic preservation without hook candidate writes, and mutable resume metadata writes for `@projmux_ai_resume_id`, source, and updated-at.
package/docs/cli.md CHANGED
@@ -680,9 +680,9 @@ flags with the top-level `switch` UX:
680
680
  no configured source. When no source is configured, the direct-set prompt
681
681
  starts with `$HOME` as an editable fallback, but `$HOME` is not used as the
682
682
  effective root unless saved. `Workdirs` remains separate: those entries are
683
- additional search roots, not the primary root. Appearance stores
684
- `~/.config/projmux/statusbar-decoration` as `off` (default), `symbol`, or
685
- `emoji` and updates the live tmux option when available. Labs remains
683
+ additional search roots, not the primary root. Appearance stores per-surface
684
+ path/git/notify icon decoration as `off` (default), `symbol`, or `emoji` and
685
+ updates the matching live tmux option when available. Labs remains
686
686
  available for experimental settings. The About section reads the cached
687
687
  update status without network access;
688
688
  selecting Check Updates runs `projmux update check`, and Update Now runs
@@ -432,18 +432,24 @@ create sessions or send tmux commands.
432
432
 
433
433
  ## Decoration Mode
434
434
 
435
- Settings > Appearance controls optional status and picker decoration:
435
+ Settings > Appearance controls optional icon decoration per surface:
436
436
 
437
437
  - `off` is the default and avoids icon-font assumptions.
438
- - `symbol` restores the Nerd Font-style folder, GitHub, and bell icons.
439
- - `emoji` uses emoji decorators, including the notify sidebar header bell.
438
+ - `symbol` restores Nerd Font-style folder, git-provider, and bell icons.
439
+ - `emoji` uses emoji decorators. GitHub remotes use a cat-style mark, GitLab
440
+ remotes use a fox-style mark, and other remotes use a generic git branch mark.
440
441
 
441
- The saved value lives at:
442
+ The per-surface saved values live at:
442
443
 
443
444
  ```text
444
- ~/.config/projmux/statusbar-decoration
445
+ ~/.config/projmux/statusbar-decoration-cwd
446
+ ~/.config/projmux/statusbar-decoration-git
447
+ ~/.config/projmux/statusbar-decoration-notify
445
448
  ```
446
449
 
450
+ The legacy `~/.config/projmux/statusbar-decoration` value is still read as the
451
+ fallback default when a per-surface file is absent.
452
+
447
453
  ## Rare Tunables
448
454
 
449
455
  These are intended for debugging or local policy, not routine setup:
@@ -27,22 +27,16 @@ restore` prints the read-only dry-run restore plan for the project snapshot, and
27
27
  `Delete snapshot` requires a confirmation picker before removing the project
28
28
  snapshot. Destructive restore execution remains outside Settings in this slice.
29
29
 
30
- Agent panes in Settings, the statusbar popup, and restore dry-run previews show
31
- resume metadata health next to the pane recipe. `available` means a resume id is
32
- present and recent enough for replay, `stale` means the stored id exists but the
33
- metadata is missing or older than the snapshot policy, and `unavailable`
34
- means projmux cannot safely resume that agent pane from the snapshot. Confidence
35
- is derived from the metadata source: direct session ids and hook ingest are high
30
+ Agent panes in Settings and restore dry-run previews show resume metadata
31
+ health next to the pane recipe. `available` means a resume id is present and
32
+ recent enough for replay, `stale` means the stored id exists but the metadata is
33
+ missing or older than the snapshot policy, and `unavailable` means projmux
34
+ cannot safely resume that agent pane from the snapshot. Confidence is derived
35
+ from the metadata source: direct session ids and hook ingest are high
36
36
  confidence, transcript/log fallbacks are medium confidence, and missing or
37
- unknown sources are low or none.
38
-
39
- The statusbar Session State popup remains a secondary shortcut backed by the
40
- same read model and CLI behavior:
41
-
42
- - `Save snapshot` captures the current tmux session, bypassing the autosave debounce
43
- just like `projmux session-state save`.
44
- - `Preview restore` prints the dry-run restore plan and does not execute tmux
45
- replay commands.
37
+ unknown sources are low or none. The old statusbar Session State shortcut has
38
+ been removed; use `Projects > Sessions > State` or the `projmux session-state`
39
+ CLI for inspection/actions.
46
40
 
47
41
  Settings > Session State is global settings only: global auto-save, auto-save
48
42
  interval, and storage/retention policy. It does not show the current
@@ -3,6 +3,14 @@
3
3
  This branch finishes the current Settings/onboarding roadmap slice with a
4
4
  view-first layout:
5
5
 
6
+ - Every Settings surface keeps the Global/Project tab strip visible so nested
7
+ pages still show their scope. Detail pages may render the strip as passive
8
+ context when changing tabs from that nested page would skip an explicit Back
9
+ boundary.
10
+ - Settings uses a view-first rule: overview rows open details; details show the
11
+ current state, source, and expected rendered result before offering mutation
12
+ rows. If a detail opens a dedicated `Change` page, that page is mutation-only
13
+ and does not repeat the same read-only view rows.
6
14
  - `Settings > Project Picker > Workdirs` is the list/overview entry. Add/remove
7
15
  actions live inside that view.
8
16
  - `Settings > Project Picker > Project Root` shows effective and saved values
@@ -33,6 +41,10 @@ view-first layout:
33
41
  rows such as `Startup command`, `Kube`, and `Environment`; mutation actions
34
42
  such as `Set startup command...`, `Clear startup command`, kube edits, and env
35
43
  add/remove rows live inside those details.
44
+ - `Settings > Appearance` is view-first. The root opens `Path icon`, `Git icon`,
45
+ and `Notify icon` details. Each detail shows the current mode and off/symbol/
46
+ emoji rendered previews first, and its `Change` page contains only the
47
+ off/symbol/emoji mutation choices.
36
48
 
37
49
  Hooks remain the reference pattern for this IA:
38
50
 
package/docs/statusbar.md CHANGED
@@ -8,13 +8,17 @@ segment only requires one wiring point.
8
8
  ## Layout
9
9
 
10
10
  ```
11
- row 0 [#S] #{pane_current_path} ⎈ <ctx>/<ns> <git>  %H:%M
11
+ row 0 #[range=user|notify] <notify HUD pill> #[norange]
12
+ #[range=user|usage] <usage HUD bar> #[norange]
13
+ row 1 [#S] #{pane_current_path} ⎈ <ctx>/<ns> <git>  %H:%M
12
14
  └────────── native tmux window list (one entry per window) ──────────┘
13
- row 1 #[range=user|notify] <notify HUD pill> #[norange] #[range=user|sessionstate]state#[norange]
14
- #[range=user|usage] <usage HUD bar> #[norange]
15
15
  ```
16
16
 
17
- - Row 0 keeps tmux's native `window-status-format` so clicking a tab
17
+ - Row 0 splits the line with `#[align=left]` (the pending AI notify
18
+ queue, capped at 80 cells) and `#[align=right]` (usage, capped at 120
19
+ cells). `notify` is the explicit-ack pending queue; live pane attention
20
+ badges are a separate state surface.
21
+ - Row 1 keeps tmux's native `window-status-format` so clicking a tab
18
22
  selects the window. The bind uses `if-shell -F
19
23
  "#{==:#{mouse_status_range},window}"` to run `select-window -t =`
20
24
  natively when the click lands on the window list, so the
@@ -29,18 +33,15 @@ row 1 #[range=user|notify] <notify HUD pill> #[norange] #[range=user|sessionsta
29
33
  in `#[range=user|<id>]` ranges and dispatched through the projmux
30
34
  handler. The standalone config also wraps the right-side `projmux`
31
35
  badge as the `settings` range; the app config renders a compact
32
- `⚙` settings chip after the clock. The git segment shows the current
36
+ `` settings chip after the clock. The git segment shows the current
33
37
  branch or detached commit,
34
38
  then compact state indicators when available: `*` for local changes,
35
39
  `+N` for staged entries, and `↑N`/`↓N` for ahead/behind counts. Each
36
40
  state token gets its own compact foreground color while preserving the
37
- existing branch block background.
38
- - Row 1 splits the line with `#[align=left]` (the pending AI notify
39
- queue, capped at 80
40
- cells, plus the compact `state` entrypoint) and `#[align=right]` (usage, capped at 120 cells). `notify` is the
41
- explicit-ack pending queue; live pane attention badges are a separate
42
- state surface. Both
43
- segments degrade gracefully when the cell budget is tight; see
41
+ existing branch block background. Window tab indexes stay left of each tab,
42
+ and tab titles are centered in a fixed-width trim so long active pane names
43
+ do not resize the status row.
44
+ - Both HUD segments degrade gracefully when the cell budget is tight; see
44
45
  [notify-queue.md](notify-queue.md) and [usage-tracking.md](usage-tracking.md)
45
46
  for the per-segment tier ladder.
46
47
 
@@ -64,7 +65,6 @@ bind-key -n MouseDown1Status if-shell -F "#{==:#{mouse_status_range},window}" \
64
65
  | `kube` | 0 | `projmux tmux popup-toggle sessionizer` | `prefix s k` |
65
66
  | `git` | 0 | `projmux tmux popup-toggle sessionizer` | `prefix s g` |
66
67
  | `settings` | 0 | `projmux tmux popup-toggle --client <tty> ai-split-settings` | mouse only; `prefix s s` remains `session` |
67
- | `sessionstate` | 1 | show a secondary Session State snapshot status and restore preview popup; primary inspection lives under Projects > Sessions > State | `prefix s r` |
68
68
  | `usage` | 1 | show a native-framed usage HUD popup from cached usage state | `prefix s u` |
69
69
  | `notify` | 1 | `projmux focus --target <newest> --source status-bar --kind segment-click [--client <tty>]`, then ack on focus success | `prefix s n` |
70
70
 
@@ -80,11 +80,9 @@ the cached usage state in-process, keeps the existing `projmux usage` CLI
80
80
  output shape unchanged for external consumers, aligns model/window rows with
81
81
  right-aligned numeric values, dims unavailable values, and colors rows at the
82
82
  same alert thresholds as the popup: amber at 80% and red at 95%.
83
- `sessionstate` opens a secondary Session State popup for the current tmux
84
- session. Its action label is `Save snapshot`, which captures the current tmux
85
- session as the latest snapshot and bypasses the autosave debounce. Primary
86
- state inspection lives under `Projects > Sessions > State`; global Settings >
87
- Session State is settings-only.
83
+ Session State inspection lives under `Projects > Sessions > State`; global
84
+ Settings > Session State is settings-only and the statusbar no longer exposes a
85
+ duplicate State button.
88
86
 
89
87
  The path popup uses the native picker frame chrome, a one-line title,
90
88
  the full wrapped current path, cheap project/git metadata when available, and
@@ -95,12 +93,10 @@ does not leave terminal key state behind. The usage popup uses the same
95
93
  single-payload print and plain Enter-close pattern. It shows the authoritative
96
94
  last collect timestamp when present, falls back to the cache file mtime when
97
95
  needed, and colors that sync line amber once it is more than 60 seconds old.
98
- The notification HUD detail surface
99
- (`Alt-2` / `User2`) opens the
100
- right-side notification popup with newest-first rows. The popup itself is
101
- untitled; when decoration mode is `symbol` or `emoji`, the bell appears before
102
- the fzf header text instead. Selecting a row still focuses and acknowledges
103
- that notification.
96
+ The notification HUD detail surface (`Alt-2` / `User2`) opens the right-side
97
+ notification popup with newest-first rows and an amber title. When notification
98
+ icon decoration is `symbol` or `emoji`, the bell appears before the title text.
99
+ Selecting a row still focuses and acknowledges that notification.
104
100
 
105
101
  Empty `#{mouse_status_range}` (a click on whitespace) falls through to
106
102
  `select-window -t @<mouse_window>` when `--mouse-window` is non-empty,
@@ -116,7 +112,6 @@ bind-key -T projmux-status n run-shell '#{q:projmux} statusbar click notify'
116
112
  bind-key -T projmux-status g run-shell '#{q:projmux} statusbar click git'
117
113
  bind-key -T projmux-status k run-shell '#{q:projmux} statusbar click kube'
118
114
  bind-key -T projmux-status p run-shell '#{q:projmux} statusbar click pwd'
119
- bind-key -T projmux-status r run-shell '#{q:projmux} statusbar click sessionstate'
120
115
  bind-key -T projmux-status s run-shell '#{q:projmux} statusbar click session'
121
116
  ```
122
117
 
@@ -141,8 +136,6 @@ them as `display-message` toasts:
141
136
  - `settings` popup launch failure: toast `statusbar settings: popup failed`.
142
137
  - `pwd` path popup failure: fall back to a short `display-message`
143
138
  containing the current path.
144
- - `sessionstate` popup failure: fall back to a compact snapshot status
145
- `display-message`.
146
139
  - `usage` popup failure: fall back to a compact usage summary
147
140
  `display-message`.
148
141
 
@@ -160,12 +153,16 @@ emits a deterministic block per segment), regenerate, and re-apply:
160
153
  projmux tmux apply
161
154
  ```
162
155
 
163
- Settings > Appearance controls the optional decoration mode used by
164
- the path, git branch, and notification sidebar header. The persisted enum lives at
165
- `~/.config/projmux/statusbar-decoration`; valid values are `off` (default,
166
- font-safe), `symbol` (Nerd Font-style folder/GitHub/bell icons), and `emoji`.
167
- Settings also updates tmux `@projmux_statusbar_decoration` for the live
168
- server when run inside tmux.
156
+ Settings > Appearance controls optional icon decoration separately for the
157
+ path/cwd marker, git branch marker, and notification sidebar header. Each row
158
+ can be `off` (default, font-safe), `symbol` (Nerd Font-style folder,
159
+ git-provider, or bell icon), or `emoji`. Git branch decoration follows
160
+ `remote.origin.url`: GitHub remotes use a cat-style mark, GitLab remotes use a
161
+ fox-style mark, and other remotes use a generic git branch mark. Settings also
162
+ updates the matching live tmux option
163
+ (`@projmux_statusbar_decoration_cwd`, `_git`, or `_notify`) when run inside
164
+ tmux. The legacy `~/.config/projmux/statusbar-decoration` and
165
+ `@projmux_statusbar_decoration` remain fallback defaults for older configs.
169
166
 
170
167
  To add a new clickable segment:
171
168
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "projmux",
3
- "version": "0.6.0",
3
+ "version": "0.6.1",
4
4
  "description": "tmux project session manager",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/crevissepartners/projmux#readme",
@@ -24,10 +24,10 @@
24
24
  "LICENSE"
25
25
  ],
26
26
  "optionalDependencies": {
27
- "@projmux/darwin-arm64": "0.6.0",
28
- "@projmux/darwin-x64": "0.6.0",
29
- "@projmux/linux-arm64": "0.6.0",
30
- "@projmux/linux-x64": "0.6.0"
27
+ "@projmux/darwin-arm64": "0.6.1",
28
+ "@projmux/darwin-x64": "0.6.1",
29
+ "@projmux/linux-arm64": "0.6.1",
30
+ "@projmux/linux-x64": "0.6.1"
31
31
  },
32
32
  "scripts": {
33
33
  "package:npm": "scripts/package-npm.sh",