projmux 0.8.4 → 0.9.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.
@@ -11,6 +11,10 @@ view-first layout:
11
11
  current state, source, and expected rendered result before offering mutation
12
12
  rows. If a detail opens a dedicated `Change` page, that page is mutation-only
13
13
  and does not repeat the same read-only view rows.
14
+ - Every rendered non-empty row value is classified as navigation, actionable,
15
+ or passive information/disabled state and is mapped to a closed owner-loop
16
+ contract before rendering. An unowned value is a Settings error; Enter on a
17
+ passive row is consumed as a no-op.
14
18
  - `Settings > Project Picker > Workdirs` is the list/overview entry. Add/remove
15
19
  actions live inside that view.
16
20
  - `Settings > Project Picker > Project Root` shows effective and saved values
@@ -35,7 +39,7 @@ view-first layout:
35
39
  rows as always-visible sections.
36
40
  - Terminal delivery remediation lives outside Settings primary flow. The
37
41
  supported order is `projmux shell` first, then `projmux setup`, then
38
- `projmux init` for supported terminal adapters.
42
+ `projmux setup terminal` for supported terminal adapters.
39
43
  - Rows that cannot safely be edited still stay visible. Mark diagnostic-only
40
44
  rows with the delivery path and reason instead of hiding them or turning them
41
45
  into unsupported editable keys. Transport-dependent rows stay visible with
@@ -57,9 +61,10 @@ view-first layout:
57
61
  `[theme]` is never resolved or shown here.
58
62
  - `Settings > Notifications` owns notification delivery IA. Desktop notification
59
63
  mode, AI desktop notification dedupe duration, delivery source diagnostics,
60
- AI hook quiet policy, in-app queue status, and
61
- `PROJMUX_NOTIFY_HOOK` visibility live together without mixing mutation
62
- boundaries.
64
+ and AI hook quiet policy live together without mixing mutation boundaries.
65
+ The in-app queue is consumed from the statusbar/sidebar, not from a standalone
66
+ Settings row. `PROJMUX_NOTIFY_HOOK` override presence is folded into Delivery
67
+ sources summary/detail instead of appearing as a separate root row.
63
68
  - `Settings > Notifications > Desktop notifications` owns the desktop
64
69
  notification mode. The detail choices are `none`, `notify`, and `raise`.
65
70
  - `Settings > Notifications > AI notification dedupe` owns the duplicate
@@ -67,10 +72,10 @@ view-first layout:
67
72
  the effective source; `PROJMUX_TMUX_NOTIFY_DEDUPE_SECONDS` remains the top
68
73
  override. The tmux bell fallback keeps its fixed 5 second window.
69
74
  - `Settings > Notifications > Delivery sources` shows Codex hooks, Claude, and
70
- tmux producer diagnostics plus copyable install/remove/dry-run commands.
71
- Settings copies command text only; it does not install or remove external
72
- notify wiring. The legacy Codex notify source is intentionally omitted from
73
- Settings.
75
+ tmux producer diagnostics, the effective desktop sender override state, and
76
+ copyable install/remove/dry-run commands. Settings copies command text only;
77
+ it does not install or remove external notify wiring. The legacy Codex notify
78
+ source is intentionally omitted from Settings.
74
79
  - `Settings > Notifications > Hook quiet policy` shows Codex/Claude hook
75
80
  runtime action values and writes only
76
81
  `${XDG_CONFIG_HOME:-$HOME/.config}/projmux/ai-hook-actions.json`. It does not
@@ -78,13 +83,17 @@ view-first layout:
78
83
  - `Settings > Session State > Sidebar startup picker` controls the Alt-1
79
84
  project-open startup selector. The saved file remains
80
85
  `${XDG_CONFIG_HOME:-$HOME/.config}/projmux/sidebar-startup-picker`.
81
- - `Settings > Labs` keeps experimental toggles, but keybindings no longer have a
82
- visible Labs row. The hidden compatibility action redirects to the
83
- `Settings > Keybindings` action list, not to a diagnostic default.
86
+ - `Settings > Labs` contains only Live system resources and Project Hooks.
87
+ Keybindings live at `Settings > Keybindings`; Labs has no visible or hidden
88
+ keybindings redirect. Native is the only picker backend, so Labs does not
89
+ render picker source/backend information.
84
90
  - `Settings > Labs > Live system resources` is a direct global on/off toggle
85
91
  for the macOS/Linux/WSL lower-status-row `CPU N% MEM N%` segment. It defaults
86
92
  off, updates live tmux state when toggled, and renders unavailable on
87
- unsupported platforms. WSL values describe the Linux guest/VM view.
93
+ unsupported platforms. CPU and memory use fixed independent semantic
94
+ thresholds (CPU warning/critical at 70/90; memory at 75/90); the toggle does
95
+ not expose threshold customization. WSL values describe the Linux guest/VM
96
+ view.
88
97
  - `Settings > Labs > Project Hooks` is overview-first. The Labs root opens the
89
98
  overview, and the on/off mutation rows live one level deeper.
90
99
  - `Settings > AI Settings` is view-first. The root contains `Default split
@@ -106,6 +115,37 @@ view-first layout:
106
115
  `ko-KR`. When `auto` is active it must show the detected source (`LC_ALL`,
107
116
  `LC_MESSAGES`, `LANG`, or fallback). Unsupported locale tags must remain
108
117
  visible as warnings and fall back to `en-US`.
118
+ - Global root descriptions keep ownership explicit: Appearance owns language,
119
+ AI badge style, and status/notification icon decoration; Theme owns presets,
120
+ color tokens, and font hints. About describes only the surface it retains.
121
+ - `Settings > About` is intentionally compact: Version, Source, update
122
+ status/actions (including Latest, Update state, Installer, and Release notes
123
+ when available), Welcome, and Quit. It does not reproduce static key,
124
+ terminal, dependency, terminal-emulator, or documentation guides. Key
125
+ delivery discovery lives in `projmux setup`, supported terminal remediation
126
+ in `projmux setup terminal`, read-only dependency/runtime diagnostics in
127
+ `projmux doctor`, and broader orientation in Welcome and maintained docs.
128
+ - Without an actionable project context, the Project surface renders one
129
+ passive context-guidance row instead of repeating the same disabled reason
130
+ for Trust, Hooks, Project recipe, and Effective merge view. With project
131
+ context, those four rows and Session State retain their existing actions.
132
+
133
+ Settings mutation feedback follows one transient contract. The next picker
134
+ frame inserts one passive `Feedback` row after Back; the row uses the catalogued
135
+ `settingsNoopValue`, so Enter cannot create an unknown action. Selecting another
136
+ navigation/action clears the old row before that operation runs, and a handled
137
+ result replaces it. The inventory includes AI defaults/enabled agents/resume
138
+ limits, notification modes/dedupe/hook policy, Appearance and locale choices,
139
+ Labs toggles, project roots/workdirs/pins, project hooks/recipe/trust, Theme,
140
+ Session State, direct keybinding reset/remove/toggle operations, and About
141
+ update apply/check. Typed validation and staged apply failures stay in the
142
+ popup instead of being visible only on stdout/stderr.
143
+
144
+ The generic feedback inventory deliberately excludes Welcome, Quit,
145
+ read-only hook/effective/notification diagnostics, Session State preview, and
146
+ key capture/probe/diagnostic bodies. Those flows own a viewer, confirmation, or
147
+ multi-step output surface; only an actual Settings write at their boundary is
148
+ eligible for transient mutation feedback.
109
149
 
110
150
  Hooks remain the reference pattern for this IA:
111
151
 
package/docs/statusbar.md CHANGED
@@ -71,6 +71,13 @@ row 1 [#S] #{pane_current_path} ⎈ <ctx>/<ns> <git> CPU 12% MEM 41% 
71
71
  - `Settings > Labs > Live system resources` adds the compact `CPU N% MEM N%`
72
72
  segment between git and the clock on macOS, Linux, and WSL. It is global,
73
73
  default off, and updates with tmux's existing five-second status interval.
74
+ CPU and memory are host-scoped telemetry, not pane, window, project, or
75
+ session attribution. Each value has an independent semantic style: CPU is
76
+ normal below 70%, warning at 70–89%, and critical at 90% or above; memory is
77
+ normal below 75%, warning at 75–89%, and critical at 90% or above. Normal and
78
+ unavailable (`--`) values use the secondary status-text role, warnings use
79
+ the warning role, and critical values use the bold critical role. Styling one
80
+ value never promotes the other value.
74
81
  Linux CPU is the aggregate delta from `/proc/stat`; memory is
75
82
  `(MemTotal - MemAvailable) / MemTotal` from `/proc/meminfo`. macOS CPU uses
76
83
  the aggregate Mach host tick delta; memory is total physical memory minus
@@ -82,6 +89,10 @@ row 1 [#S] #{pane_current_path} ⎈ <ctx>/<ns> <git> CPU 12% MEM 41% 
82
89
  re-enabling after a pause starts at `CPU --%` instead of showing a long-term
83
90
  average. Missing or malformed procfs data degrades to `--` or an empty segment
84
91
  without producing a tmux error popup.
92
+ The complete live segment is wrapped in `#[range=user|resources]...#[norange]`.
93
+ Clicking it opens the same canonical client-scoped `resource-inspector`
94
+ popup as the `Resources:Open` keybinding action. Disabling the Lab hides only
95
+ the segment; it does not disable a custom action or `projmux resources`.
85
96
  - The settings chip keeps its label padding inside the `settings` range
86
97
  and inside the chip background. The compact app chip renders `` with
87
98
  the extra right-side icon padding painted by the same background, while
@@ -112,6 +123,7 @@ bind-key -n MouseDown1Status if-shell -F "#{==:#{mouse_status_range},window}" \
112
123
  | `kube` | 0 | `projmux tmux popup-toggle sessionizer` | `prefix s k` |
113
124
  | `git` | 0 | `projmux tmux popup-toggle sessionizer` | `prefix s g` |
114
125
  | `settings` | 0 | `projmux tmux popup-toggle --client <tty> ai-split-settings` | mouse only; `prefix s s` remains `session` |
126
+ | `resources` | 0 | `projmux tmux popup-toggle --client <tty> resource-inspector` | mouse or custom `Resources:Open`; no default key |
115
127
  | `usage` | 1 | show a native-framed usage HUD popup from cached usage state | `prefix s u` |
116
128
  | `notify` | 1 | `projmux focus --target <newest> --source status-bar --kind segment-click [--client <tty>]`, then ack on focus success | `prefix s n` |
117
129
 
@@ -136,10 +148,14 @@ hard-truncate path still closes with `#[default]` so later status segments do
136
148
  not inherit notification styling. That dotless narrow fallback applies only to
137
149
  the queued notify segment, not to the separate window-list live attention badge.
138
150
  `usage` opens a native-framed detail HUD for the compact usage bar. It reads
139
- the cached usage state in-process, keeps the existing `projmux usage` CLI
140
- output shape unchanged for external consumers, aligns model/window rows with
151
+ the cached usage state in-process and aligns model/window rows with
141
152
  right-aligned numeric values, dims unavailable values, keeps stale sync/age
142
153
  metadata muted, and colors only threshold values: amber at 80% and red at 95%.
154
+ Antigravity rows keep conversation-local `context` separate from account
155
+ `quota/<exact upstream bucket ID>` rows; the popup displays an absolute reset
156
+ when provided and otherwise the exact optional relative reset seconds. Opaque
157
+ bucket IDs are escaped for terminal/tmux safety and are never assigned a
158
+ `5h`/`weekly` cadence.
143
159
  Session State inspection lives under `Projects > Sessions > State`; global
144
160
  Settings > Session State is settings-only and the statusbar no longer exposes a
145
161
  duplicate State button.
package/docs/testing.md CHANGED
@@ -77,7 +77,7 @@ Observe:
77
77
  - `Alt-1` through `Alt-5` report `OK plain`. These are the guaranteed
78
78
  zero-config launch defaults.
79
79
  - If a guaranteed key reports `MISS timeout`, preview a supported terminal
80
- mapping with `projmux init ghostty` or `projmux init windows-terminal`,
80
+ mapping with `projmux setup terminal ghostty` or `projmux setup terminal windows-terminal`,
81
81
  apply it with the same command plus `--apply`, restart that terminal if
82
82
  required, and rerun `projmux setup --timeout 10s`.
83
83
  - Optional direct aliases and transport-dependent chords may be reported by