projmux 0.10.0 → 0.11.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/README-ko.md +90 -72
- package/README.md +24 -16
- package/docs/agent-workflow.md +86 -23
- package/docs/ai-agent-shortcuts.md +63 -278
- package/docs/architecture.md +678 -16
- package/docs/cli-guide.md +1367 -0
- package/docs/cli.md +1239 -1091
- package/docs/configuration.md +185 -136
- package/docs/globalization.md +16 -12
- package/docs/hooks.md +90 -67
- package/docs/install.md +22 -6
- package/docs/keybindings.md +223 -60
- package/docs/legacy-cli-retirement.md +64 -0
- package/docs/legacy-diagnostics-inventory.md +23 -0
- package/docs/migration-plan.md +6 -3
- package/docs/notify-os-focus-poc.md +36 -15
- package/docs/notify-queue.md +21 -19
- package/docs/operational-diagnostics.md +190 -11
- package/docs/repo-layout.md +4 -1
- package/docs/resource-attribution.md +16 -0
- package/docs/session-restore.md +27 -9
- package/docs/settings-ia.md +232 -162
- package/docs/statusbar.md +228 -48
- package/docs/testing.md +9 -9
- package/docs/theme-palette.md +0 -3
- package/docs/tmux-surface-inventory.md +2 -2
- package/docs/upgrading.md +138 -23
- package/docs/usage-tracking.md +120 -34
- package/package.json +5 -5
package/docs/configuration.md
CHANGED
|
@@ -106,10 +106,11 @@ language.
|
|
|
106
106
|
|
|
107
107
|
Settings > Keybindings is the normal in-app editor for action keys. It lists
|
|
108
108
|
actions with the current active keys and one state: Default, Custom, Available,
|
|
109
|
-
or Unbound. Open an action to see the action label, state,
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
or Unbound. Open an action to see the action label, state, the action's
|
|
110
|
+
target/result/placement/anchor and shipped handler, a flat Keys list, and
|
|
111
|
+
Options. Create flows start from `+ Add key` or `Enter key name manually`,
|
|
112
|
+
deletion and `Test delivery` live under each key's detail, and action-level
|
|
113
|
+
state changes such as Unbind or Reset live under Options. Successful saves report the
|
|
113
114
|
keybinding as saved; failures identify the stage that failed.
|
|
114
115
|
|
|
115
116
|
Raw sequences that cannot be safely represented as a direct keybinding are not
|
|
@@ -124,16 +125,19 @@ absent, generated tmux config stays on the built-in defaults.
|
|
|
124
125
|
Supported schema:
|
|
125
126
|
|
|
126
127
|
```toml
|
|
127
|
-
|
|
128
|
+
schema_version = 2
|
|
129
|
+
|
|
130
|
+
[bindings."project-sidebar.toggle"]
|
|
128
131
|
keys = ["M-1", "M-a"]
|
|
132
|
+
sequences = ["C-k C-p"]
|
|
129
133
|
|
|
130
|
-
[bindings.
|
|
134
|
+
[bindings."window.create"]
|
|
131
135
|
keys = ["C-t"]
|
|
132
136
|
|
|
133
|
-
[bindings."
|
|
137
|
+
[bindings."project-sidebar.project.pin-toggle"]
|
|
134
138
|
keys = ["M-p", "p"]
|
|
135
139
|
|
|
136
|
-
[bindings."
|
|
140
|
+
[bindings."resource-inspector.open"]
|
|
137
141
|
keys = ["M-u"]
|
|
138
142
|
```
|
|
139
143
|
|
|
@@ -143,6 +147,21 @@ Each table is `[bindings.<action-id>]`. Supported keys are:
|
|
|
143
147
|
| --- | --- |
|
|
144
148
|
| `keys` | A list of no-prefix tmux plain chords such as `M-a`, `C-t`, or `M-S-Left`. |
|
|
145
149
|
| `plain` | Legacy single-primary replacement. Still read, but not written by Settings. |
|
|
150
|
+
| `sequences` | Additive two-to-four-stroke triggers such as `C-k C-p`; manual-file/runtime support only in Phase 0. |
|
|
151
|
+
|
|
152
|
+
The root `schema_version` marker is the file's own version. A file without one
|
|
153
|
+
is v0 and uses the runtime action ids (`ProjectSidebarToggle`, `new-window`,
|
|
154
|
+
`Sidebar:PinProject`); v1 uses canonical dotted ids, and
|
|
155
|
+
`schema_version = 2` adds `sequences`. All versions read — the v0 spelling of
|
|
156
|
+
every action is a permanent read alias — and migration to v2 runs at
|
|
157
|
+
`projmux config apply` or at the first Settings key save. A v1 migration is a
|
|
158
|
+
marker-only edit with a digest-named pre-v2 backup. [docs/keybindings.md](keybindings.md#schema-versions) has the full
|
|
159
|
+
table, the upgrade ordering and the downgrade procedure.
|
|
160
|
+
|
|
161
|
+
This marker is a separate version domain from the CLI resource registry's
|
|
162
|
+
`apiVersion: projmux.io/v1alpha1` / camelCase `schemaVersion: 1` envelope. The
|
|
163
|
+
two have separate markers, separate backups and separate rollbacks; neither one
|
|
164
|
+
failing affects the other.
|
|
146
165
|
|
|
147
166
|
Legacy `prefix = ...` entries still parse during migration so existing files
|
|
148
167
|
do not break. Settings preserves existing prefix entries when rewriting the
|
|
@@ -159,21 +178,22 @@ Use an empty `keys` list to disable direct plain keys for the action when
|
|
|
159
178
|
editing the file by hand:
|
|
160
179
|
|
|
161
180
|
```toml
|
|
162
|
-
[bindings.
|
|
181
|
+
[bindings."project-sidebar.toggle"]
|
|
163
182
|
keys = []
|
|
164
183
|
```
|
|
165
184
|
|
|
166
185
|
In Settings, reset removes the saved override and returns to the built-in
|
|
167
|
-
default.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
`Resources:Open` is a user-configurable direct
|
|
175
|
-
shortcut. Every configured alias renders the
|
|
176
|
-
|
|
186
|
+
default. Popup *mode* names such as `sessionizer-sidebar` are not action ids and
|
|
187
|
+
resolve to nothing; a migration preserves such a table and reports it rather
|
|
188
|
+
than remapping it. Internal picker commands keep surface-local conflict domains
|
|
189
|
+
under their canonical ids (`session-picker.*`, `notification-sidebar.*`,
|
|
190
|
+
`project-sidebar.*`, `settings.*`) and remain visible in Settings when
|
|
191
|
+
catalogued.
|
|
192
|
+
|
|
193
|
+
`resource-inspector.open` (v0 `Resources:Open`) is a user-configurable direct
|
|
194
|
+
popup action with no built-in shortcut. Every configured alias renders the
|
|
195
|
+
canonical client-scoped body
|
|
196
|
+
`projmux internal tmux popup-toggle --client #{client_tty} resource-inspector`; pressing
|
|
177
197
|
the same alias again closes only that client's popup. It remains available on
|
|
178
198
|
Linux/tmux even when the Labs live-resource status segment is off.
|
|
179
199
|
|
|
@@ -181,9 +201,11 @@ The Settings writer is deterministic and rewrites the supported saved subset
|
|
|
181
201
|
only. If the existing file has parse errors or unknown action IDs, Settings
|
|
182
202
|
shows the keymap error row and refuses to overwrite it until the file is fixed.
|
|
183
203
|
|
|
184
|
-
The file currently affects generated tmux config from `projmux
|
|
185
|
-
|
|
186
|
-
`projmux tmux install-app
|
|
204
|
+
The file currently affects generated tmux config from `projmux config render
|
|
205
|
+
standalone`, `projmux config render app`, `projmux config apply`, the hidden
|
|
206
|
+
`projmux internal tmux install` / `install-app` installer plumbing, and `projmux shell`.
|
|
207
|
+
The render routes never write the keymap; `projmux config apply` migrates it
|
|
208
|
+
first and only applies once that succeeds. Terminal remediation adapters such as
|
|
187
209
|
Ghostty and Windows Terminal install built-in plain-byte mappings where needed;
|
|
188
210
|
they do not read `keymap.toml` or copy saved keys into terminal configs.
|
|
189
211
|
Changing terminal-layer mappings still requires rerunning `projmux setup
|
|
@@ -210,7 +232,7 @@ field with source labels: `global` or `fallback`. Saving or resetting a theme
|
|
|
210
232
|
value live-applies it: projmux regenerates the generated tmux config and, when
|
|
211
233
|
Settings runs inside tmux, `tmux source-file`-reloads it so a running server
|
|
212
234
|
repaints immediately. Outside tmux the save still succeeds and the report
|
|
213
|
-
prints `Next: run \`projmux
|
|
235
|
+
prints `Next: run \`projmux config apply\`` to sync a running server.
|
|
214
236
|
|
|
215
237
|
The `background`, `surface`, `status_background`, `surface_active`, and
|
|
216
238
|
`pane_active_bg` tokens additionally accept the value `default` ("Terminal
|
|
@@ -251,7 +273,7 @@ rectangle is not guaranteed; focus is reinforced by the tint plus the
|
|
|
251
273
|
`pane-border-status top` topic line. This chrome preserves `pane-border-status
|
|
252
274
|
top`, pane topics, AI badges, and visible pane labels.
|
|
253
275
|
|
|
254
|
-
Native picker popups launched through `projmux tmux popup-toggle` also pass a
|
|
276
|
+
Native picker popups launched through `projmux internal tmux popup-toggle` also pass a
|
|
255
277
|
per-popup tmux 3.4 `display-popup -s` body style using the effective theme
|
|
256
278
|
`surface` / `chrome_foreground` tmux tokens (popup/native backgrounds follow
|
|
257
279
|
`surface`, while the bottom status bar follows `status_background`). This styles
|
|
@@ -360,7 +382,7 @@ user/global preference in this release.
|
|
|
360
382
|
|
|
361
383
|
## AI Resume Picker
|
|
362
384
|
|
|
363
|
-
The
|
|
385
|
+
The Agent resume picker lists the most recent
|
|
364
386
|
deduplicated Claude/Codex/Antigravity resume sessions. The number of rows it
|
|
365
387
|
shows and how far below the current directory it scans are both configurable;
|
|
366
388
|
the defaults are 30 rows and depth 0 (the current directory only).
|
|
@@ -430,11 +452,11 @@ confidence for DB-validated cache sources or low confidence for legacy history.
|
|
|
430
452
|
| `PROJMUX_AI_RESUME_SCAN_DEPTH` | Overrides the AI resume picker cwd-tree scan depth (`[ai] resume_scan_depth`). Clamped to 0-8; takes priority over project and global config. Depth 0 keeps the exact-cwd behavior. |
|
|
431
453
|
| `PROJMUX_NOTIFY_HOOK_DEPTH` | Internal recursion guard for `send-noti` hooks. Depth `>= 1` suppresses nested hook dispatch while still allowing the queue write itself. |
|
|
432
454
|
| `PROJMUX_NOTIFY_EXPIRE_MS` | AI desktop notification expiration in milliseconds. Defaults to `5000`; unset, zero, negative, and non-numeric values fall back to the default. |
|
|
433
|
-
| `PROJMUX_DESKTOP_NOTIFY_MODE` | OS desktop notification mode override. `
|
|
455
|
+
| `PROJMUX_DESKTOP_NOTIFY_MODE` | OS desktop notification mode override. `off` / `none` / `notify` (case insensitive). When set, this takes priority over every other resolution rung. The in-app notify queue is not affected. The retired `raise` / `auto-raise` / `autoraise` literals are still accepted and read as `notify`. |
|
|
434
456
|
| `PROJMUX_DESKTOP_NOTIFY` | Legacy on/off override kept for backward compatibility. `on` maps to `notify`, `off` maps to `none`. Honored only when `PROJMUX_DESKTOP_NOTIFY_MODE` is unset. |
|
|
435
457
|
| `PROJMUX_WSL_TOAST_ICON_DIR` | Directory used when copying the WSL toast icon into a Windows-readable path. |
|
|
436
458
|
| `PROJMUX_USAGE_STATE_DIR` | Override directory for AI usage snapshots. Defaults to `<state>/projmux/usage`. Point this at a synced directory to share authoritative usage across machines. |
|
|
437
|
-
| `PROJMUX_USAGE_DEBUG` | When non-empty, prints adapter errors from `projmux status usage` to stderr. |
|
|
459
|
+
| `PROJMUX_USAGE_DEBUG` | When non-empty, prints adapter errors from the `projmux internal status usage` renderer to stderr. |
|
|
438
460
|
| `PROJMUX_USAGE_LIMITS_PATH` | Deprecated. Read but ignored; limits now come from upstream APIs and local Codex rollout state. |
|
|
439
461
|
| `PROJMUX_SESSIONSTATE_AUTOSAVE` | Session snapshot autosave override for the global fallback. Values such as `off`, `false`, or `0` disable autosave for projects that inherit the global setting; explicit project auto-save `on`/`off` still takes precedence. |
|
|
440
462
|
| `PROJMUX_SESSIONSTATE_DEBUG` | When non-empty, quiet autosave surfaces suppressed session-state errors to stderr. |
|
|
@@ -534,7 +556,7 @@ host setup.
|
|
|
534
556
|
- `[hooks.send-noti]` fires after the queue write and does not replace desktop
|
|
535
557
|
notifications.
|
|
536
558
|
- `PROJMUX_NOTIFY_HOOK_DEPTH` prevents a `send-noti` hook that calls
|
|
537
|
-
`projmux
|
|
559
|
+
`projmux create notification` from recursively re-triggering itself.
|
|
538
560
|
|
|
539
561
|
The app-name argument is `com.crevisse.projmux` (reverse-domain id used as
|
|
540
562
|
the Linux `--app-name`, the macOS sender label, and the Windows
|
|
@@ -561,10 +583,10 @@ AI hook runtime actions are stored at:
|
|
|
561
583
|
${XDG_CONFIG_HOME:-$HOME/.config}/projmux/ai-hook-actions.json
|
|
562
584
|
```
|
|
563
585
|
|
|
564
|
-
Settings exposes this at `Settings > Notifications >
|
|
586
|
+
Settings exposes this at `Settings > Notifications > Agent event behavior`.
|
|
565
587
|
The file maps provider/event names to `notify`, `state`, or `quiet` and
|
|
566
588
|
overrides catalog `action` values during ingest, including known Codex and
|
|
567
|
-
Claude events. It does not change hook installation; `projmux
|
|
589
|
+
Claude events. It does not change hook installation; `projmux agent integrate`
|
|
568
590
|
continues to use the embedded/local catalog `install` fields.
|
|
569
591
|
|
|
570
592
|
Delivery depends on the event handler. Specialized notify handlers, such as
|
|
@@ -576,40 +598,42 @@ only a generic in-app queue/sidebar/statusbar row; it does not fire OS toast,
|
|
|
576
598
|
|
|
577
599
|
### Desktop notification mode
|
|
578
600
|
|
|
579
|
-
The OS-level dispatch carries
|
|
601
|
+
The OS-level dispatch carries two modes. The in-app notify queue, the
|
|
580
602
|
statusbar segment, and the attention badge stay live regardless of which
|
|
581
|
-
mode is active — only the toast / notify-send
|
|
582
|
-
gated here. The same mode also gates `projmux focus` post-switch osfocus
|
|
583
|
-
dispatch: only `raise` asks the host terminal to come forward after a
|
|
584
|
-
successful tmux focus.
|
|
603
|
+
mode is active — only the toast / notify-send fan-out is gated here.
|
|
585
604
|
|
|
586
605
|
| Mode | On push | On click |
|
|
587
606
|
| --- | --- | --- |
|
|
588
607
|
| `off` / `none` | no toast | n/a |
|
|
589
608
|
| `notify` | toast / notify-send fires | no click action |
|
|
590
|
-
| `raise` | toast / notify-send fires AND the host terminal is auto-raised via the osfocus chain | toast click invokes `projmux focus --uri` via the `projmux://` handler |
|
|
591
609
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
the focus-triggered osfocus raise after `projmux focus`.
|
|
610
|
+
Desktop notification delivery never takes your host terminal window focus.
|
|
611
|
+
The Toast carries no `launch` payload, projmux registers no `projmux://`
|
|
612
|
+
protocol handler, and there is no auto-raise on push. `projmux focus` also
|
|
613
|
+
stops at the tmux layer in every mode: it switches the client, window, and
|
|
614
|
+
pane but never asks the host terminal window to come forward.
|
|
598
615
|
|
|
599
616
|
Resolution order (highest priority first):
|
|
600
617
|
|
|
601
|
-
1. `PROJMUX_DESKTOP_NOTIFY_MODE` env (`off` / `none` / `notify`
|
|
618
|
+
1. `PROJMUX_DESKTOP_NOTIFY_MODE` env (`off` / `none` / `notify`).
|
|
602
619
|
2. `PROJMUX_DESKTOP_NOTIFY` env (legacy `on` / `off`; `on` → `notify`,
|
|
603
620
|
`off` → `none`).
|
|
604
621
|
3. Saved Settings config
|
|
605
622
|
`${XDG_CONFIG_HOME:-$HOME/.config}/projmux/desktop-notify-mode`
|
|
606
|
-
(`off` / `notify`
|
|
623
|
+
(`off` / `notify`).
|
|
607
624
|
4. Tmux global option `@projmux_desktop_notify_mode`.
|
|
608
625
|
5. Tmux global option `@projmux_desktop_notify` (legacy `1` / `0`, same
|
|
609
626
|
mapping as the env above).
|
|
610
|
-
6. Default = `
|
|
611
|
-
|
|
612
|
-
|
|
627
|
+
6. Default = `notify` on every platform, WSL + Windows Terminal included.
|
|
628
|
+
|
|
629
|
+
The retired `raise` mode was removed in 0.11.0. Wherever a mode literal is
|
|
630
|
+
read — env, saved file, or tmux option — `raise`, `auto-raise`, and
|
|
631
|
+
`autoraise` are still accepted and resolve to `notify` **in that same
|
|
632
|
+
source**, so an old value keeps pinning the resolution instead of falling
|
|
633
|
+
through to a lower-precedence rung. The alias never re-enables host-window
|
|
634
|
+
focus, a clickable Toast, or URI handler registration; it is not offered in
|
|
635
|
+
Settings and is never written back — the first Settings press or
|
|
636
|
+
`projmux config apply` replaces it with `notify`.
|
|
613
637
|
|
|
614
638
|
Migration is intentionally read-time. Users with the previous legacy
|
|
615
639
|
toggle set keep their behavior — `@projmux_desktop_notify=0` resolves to
|
|
@@ -621,97 +645,41 @@ legacy key unused. No eager rewrite of tmux state.
|
|
|
621
645
|
Toggle from Settings > Notifications > `Desktop notifications`. The
|
|
622
646
|
Settings info row labels the effective source as `env`, `env (legacy)`,
|
|
623
647
|
`setting`, `setting (legacy)`, or `default` so users see which rung of
|
|
624
|
-
the cascade pinned the value. `projmux
|
|
648
|
+
the cascade pinned the value. `projmux config apply` regenerates the live tmux
|
|
625
649
|
option from the saved Settings file; when that file is missing, apply writes
|
|
626
650
|
only the default for the current host.
|
|
627
651
|
|
|
628
652
|
Hook details for new-session lifecycle hooks and project-local
|
|
629
653
|
`.projmux/config.toml` live in [Hooks](hooks.md).
|
|
630
|
-
Settings
|
|
631
|
-
`
|
|
632
|
-
Settings
|
|
654
|
+
Settings exposes project-local executable automation under **Project >
|
|
655
|
+
Automation**. `[startup]` and generic `[env]` remain config-file compatibility
|
|
656
|
+
inputs and are not Settings authoring destinations.
|
|
633
657
|
|
|
634
|
-
### Toast click handler (WSL + Windows Terminal)
|
|
658
|
+
### Toast click handler (WSL + Windows Terminal) — retired in 0.11.0
|
|
635
659
|
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
660
|
+
projmux used to register a `projmux://` URL scheme on the Windows side and
|
|
661
|
+
emit clickable Toasts whose click routed through the hidden `projmux internal focus` ingress.
|
|
662
|
+
That path is **removed**: desktop notifications are passive, carry no
|
|
663
|
+
`launch` payload, and projmux registers no protocol handler. Clicking a
|
|
664
|
+
projmux Toast does nothing.
|
|
639
665
|
|
|
640
|
-
|
|
641
|
-
wscript.exe //B //Nologo "%LOCALAPPDATA%\projmux\projmux-uri-handler.vbs" "%1"
|
|
642
|
-
```
|
|
666
|
+
Consequences for existing installs:
|
|
643
667
|
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
668
|
+
- A `HKCU\Software\Classes\projmux` key written by an earlier version is
|
|
669
|
+
**not** removed automatically. Delete it manually if you want the scheme
|
|
670
|
+
gone; leaving it in place is harmless because nothing produces the URI.
|
|
671
|
+
- The old public `focus --uri` compatibility input is removed. Machine-owned
|
|
672
|
+
focus payloads use `projmux internal focus --uri`. No
|
|
673
|
+
projmux code path produces such a URI any more.
|
|
674
|
+
- The `@projmux_uri_protocol_registered*` tmux markers are no longer read or
|
|
675
|
+
written. Stale markers are inert.
|
|
652
676
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
notify path so users do not configure anything:
|
|
656
|
-
|
|
657
|
-
1. No COM Toast Activator is registered. The shortcut writes only
|
|
658
|
-
`PKEY_AppUserModel_ID` (pid=5) and intentionally omits
|
|
659
|
-
`PKEY_AppUserModel_ToastActivatorCLSID` (pid=26). When a COM activator
|
|
660
|
-
is registered alongside the AppID, Windows tries COM first, silently
|
|
661
|
-
fails for unpackaged exes, and does *not* fall through to the launch
|
|
662
|
-
URI. Stripping the COM side makes Windows ShellExecute the launch URI
|
|
663
|
-
on click.
|
|
664
|
-
2. The Start Menu shortcut exists with the AppID set. The shortcut is
|
|
665
|
-
never launched — it is a property bag so the toast can route under
|
|
666
|
-
the right DisplayName + icon.
|
|
667
|
-
3. The shortcut target is `cmd.exe /c exit`. Earlier code used
|
|
668
|
-
`powershell.exe -WindowStyle Hidden -Command exit`; Windows Defender
|
|
669
|
-
silently quarantines such shortcuts moments after creation, which
|
|
670
|
-
leaves no AppID-tagged shortcut and breaks both the routing and the
|
|
671
|
-
click path. `cmd.exe /c exit` is treated as benign and survives.
|
|
672
|
-
4. The WSL handler uses a WScript launcher instead of launching `wsl.exe` or
|
|
673
|
-
`powershell.exe` directly, avoiding the transient Windows console flash on
|
|
674
|
-
Toast click. Inside that launcher it still uses `--exec`, not `--`.
|
|
675
|
-
`wsl.exe -- <cmd>` routes its tail through the user's login shell, which
|
|
676
|
-
parses `&` query-string separators as background-job operators (zsh emits
|
|
677
|
-
`parse error near '&'`). `--exec` skips the shell and invokes the binary
|
|
678
|
-
directly. The `%1` URI is passed as a WScript argument and then forwarded
|
|
679
|
-
through a hidden cmd.exe command line with `&` escaped as `^&`, so query
|
|
680
|
-
separators are data instead of PowerShell, cmd, or WSL login-shell syntax.
|
|
681
|
-
The absolute WSL filesystem path to the binary is captured at registration
|
|
682
|
-
so PATH does not need to be populated under `--exec`.
|
|
683
|
-
|
|
684
|
-
The URI carries the originating pane id and tmux socket so the click
|
|
685
|
-
round-trips back to the exact pane that fired the notification, which
|
|
686
|
-
the `projmux focus` path then redirects via `tmux switch-client`.
|
|
687
|
-
|
|
688
|
-
Registration markers and the writes involved:
|
|
689
|
-
|
|
690
|
-
- Registry keys (HKCU): `SOFTWARE\Classes\projmux\(Default)`,
|
|
691
|
-
`SOFTWARE\Classes\projmux\URL Protocol`, and
|
|
692
|
-
`SOFTWARE\Classes\projmux\shell\open\command\(Default)`.
|
|
693
|
-
- Launcher file: `%LOCALAPPDATA%\projmux\projmux-uri-handler.vbs`.
|
|
694
|
-
- tmux user-option marker `@projmux_uri_protocol_registered_v6` records that
|
|
695
|
-
registration has been attempted on this server so the script runs at most
|
|
696
|
-
once per server boot. (The v5 marker
|
|
697
|
-
`@projmux_uri_protocol_registered_v5` was bumped when the WScript launcher
|
|
698
|
-
added the hidden cmd.exe parser hop; existing v5 users re-register
|
|
699
|
-
transparently on the next Notify after upgrade. After successful v6
|
|
700
|
-
registration, projmux removes legacy URI marker keys from v1 through v5 so
|
|
701
|
-
tmux state reflects only the active handler generation.)
|
|
702
|
-
|
|
703
|
-
Limitations:
|
|
704
|
-
|
|
705
|
-
- The handler captures the user's current `WSL_DISTRO_NAME` at registration
|
|
706
|
-
time. Users running multiple WSL distros get one handler bound to the
|
|
707
|
-
first distro that fired a toast — clicks from a different distro's toast
|
|
708
|
-
will route back through the first distro. Tier-2 follow-up.
|
|
709
|
-
- WSL2 cold-start latency: the first click after a long idle goes through
|
|
710
|
-
WSL boot and typically takes 2-3s to surface the focus on the pane.
|
|
677
|
+
The measurement trail for the retired design is kept for history in
|
|
678
|
+
[notify-os-focus-poc.md](notify-os-focus-poc.md).
|
|
711
679
|
|
|
712
680
|
## Usage Tracking
|
|
713
681
|
|
|
714
|
-
`projmux usage` and the status-bar usage segment store snapshots under:
|
|
682
|
+
`projmux agent usage` and the status-bar usage segment store snapshots under:
|
|
715
683
|
|
|
716
684
|
```text
|
|
717
685
|
${PROJMUX_USAGE_STATE_DIR:-${XDG_STATE_HOME:-$HOME/.local/state}/projmux/usage}/snapshots.json
|
|
@@ -776,10 +744,10 @@ The environment variables above override the global files.
|
|
|
776
744
|
Manual snapshot actions are available from the CLI:
|
|
777
745
|
|
|
778
746
|
```sh
|
|
779
|
-
projmux
|
|
780
|
-
projmux
|
|
781
|
-
projmux
|
|
782
|
-
projmux
|
|
747
|
+
projmux get snapshots
|
|
748
|
+
projmux create snapshot
|
|
749
|
+
projmux delete snapshot [--session <name>]
|
|
750
|
+
projmux restore snapshot --dry-run [--session <name>]
|
|
783
751
|
```
|
|
784
752
|
|
|
785
753
|
`status` prints the source label (`autosave`, `layout(<name>)`, or `fresh`), the
|
|
@@ -811,16 +779,98 @@ The per-surface saved values live at:
|
|
|
811
779
|
The legacy `~/.config/projmux/statusbar-decoration` value is still read as the
|
|
812
780
|
fallback default when a per-surface file is absent.
|
|
813
781
|
|
|
814
|
-
##
|
|
782
|
+
## Row 0 HUD Visibility
|
|
783
|
+
|
|
784
|
+
`Settings > Appearance > Status Bar` controls the two upper HUD components as
|
|
785
|
+
independent global presentation preferences:
|
|
786
|
+
|
|
787
|
+
- `Notifications HUD > Visible`
|
|
788
|
+
- `Agent Usage HUD > Visible`
|
|
789
|
+
- `Agent Usage HUD > Claude|Codex|Antigravity > Visible`
|
|
790
|
+
- each provider's supported HUD windows (`Claude`/`Codex`: `5h`, `Weekly`;
|
|
791
|
+
`Antigravity`: `Weekly`)
|
|
792
|
+
|
|
793
|
+
The saved values are `on` or `off` in these files:
|
|
794
|
+
|
|
795
|
+
```text
|
|
796
|
+
~/.config/projmux/statusbar-visibility-notifications-hud
|
|
797
|
+
~/.config/projmux/statusbar-visibility-agent-usage-hud
|
|
798
|
+
~/.config/projmux/statusbar-visibility-agent-usage-provider-claude
|
|
799
|
+
~/.config/projmux/statusbar-visibility-agent-usage-provider-codex
|
|
800
|
+
~/.config/projmux/statusbar-visibility-agent-usage-provider-antigravity
|
|
801
|
+
~/.config/projmux/statusbar-visibility-agent-usage-window-claude-5h
|
|
802
|
+
~/.config/projmux/statusbar-visibility-agent-usage-window-claude-weekly
|
|
803
|
+
~/.config/projmux/statusbar-visibility-agent-usage-window-codex-5h
|
|
804
|
+
~/.config/projmux/statusbar-visibility-agent-usage-window-codex-weekly
|
|
805
|
+
~/.config/projmux/statusbar-visibility-agent-usage-window-antigravity-weekly
|
|
806
|
+
```
|
|
807
|
+
|
|
808
|
+
Missing, empty, and invalid values resolve to the compatibility default `on`;
|
|
809
|
+
Settings shows whether the effective value came from `saved` or `default` and
|
|
810
|
+
marks an invalid saved value as ignored. Saving a toggle regenerates the app
|
|
811
|
+
and standalone tmux output, and Settings source-reloads the generated app config
|
|
812
|
+
when it is running inside tmux.
|
|
813
|
+
|
|
814
|
+
Parent visibility gates only the effective projection. Turning the overall HUD
|
|
815
|
+
or a provider off does not rewrite its provider/window leaf files; turning the
|
|
816
|
+
parent back on restores the saved child selection. Provider rows follow the
|
|
817
|
+
usage-supported provider catalog. Window rows come only from the explicit HUD
|
|
818
|
+
capability map, so opaque quota buckets never create settings and Antigravity
|
|
819
|
+
never gains a fabricated `5h` row.
|
|
820
|
+
|
|
821
|
+
Visibility does not enable or disable either producer. Hiding Notifications HUD
|
|
822
|
+
does not change the persistent queue, desktop delivery, or Notification
|
|
823
|
+
Sidebar. Hiding Agent Usage HUD does not change the `agent usage` command,
|
|
824
|
+
Provider snapshot cache, upstream API collection, quota, or refresh policy.
|
|
825
|
+
Provider/window leaves likewise filter only `projmux internal status usage`; explicit
|
|
826
|
+
`agent usage` table/JSON and the cached statusbar popup remain lossless.
|
|
827
|
+
|
|
828
|
+
## Row 1 Segment Visibility
|
|
829
|
+
|
|
830
|
+
`Settings > Appearance > Status Bar` controls these retained lower-row
|
|
831
|
+
components independently:
|
|
832
|
+
|
|
833
|
+
- `Project`
|
|
834
|
+
- `Working directory > Visible`
|
|
835
|
+
- `Git > Visible`
|
|
836
|
+
- `Clock`
|
|
837
|
+
- `Settings launcher`
|
|
838
|
+
|
|
839
|
+
Their global saved values are `on` or `off` in:
|
|
840
|
+
|
|
841
|
+
```text
|
|
842
|
+
~/.config/projmux/statusbar-visibility-project
|
|
843
|
+
~/.config/projmux/statusbar-visibility-working-directory
|
|
844
|
+
~/.config/projmux/statusbar-visibility-git
|
|
845
|
+
~/.config/projmux/statusbar-visibility-clock
|
|
846
|
+
~/.config/projmux/statusbar-visibility-settings-launcher
|
|
847
|
+
```
|
|
848
|
+
|
|
849
|
+
Missing, empty, and invalid values resolve to `on`; Settings reports the
|
|
850
|
+
effective value and whether it came from `saved` or `default`. Each save is an
|
|
851
|
+
atomic 0600 replacement, regenerates both app and standalone output, and
|
|
852
|
+
source-loads the generated app config when Settings is inside tmux. Off removes
|
|
853
|
+
the complete segment, including its mouse range and owned spacing. Working
|
|
854
|
+
directory/Git icon mode remains a separate setting, so icon `off` leaves the
|
|
855
|
+
text visible. Settings launcher `off` removes only its mouse chip; CLI and
|
|
856
|
+
keybinding entry remain.
|
|
857
|
+
|
|
858
|
+
Resources intentionally does not use one of these visibility files. Its
|
|
859
|
+
existing `~/.config/projmux/live-resources` value is the only enabled source
|
|
860
|
+
and controls both the segment and sampler/cache mutation.
|
|
861
|
+
|
|
862
|
+
## Live System Resources
|
|
815
863
|
|
|
816
|
-
`Settings >
|
|
864
|
+
`Settings > Appearance > Status Bar > Resources` controls the compact
|
|
817
865
|
CPU/memory segment on the lower status row. The saved global value is:
|
|
818
866
|
|
|
819
867
|
```text
|
|
820
868
|
~/.config/projmux/live-resources
|
|
821
869
|
```
|
|
822
870
|
|
|
823
|
-
Accepted values are `off` (default) and `on`.
|
|
871
|
+
Accepted values are `off` (default) and `on`. A missing, empty, or invalid
|
|
872
|
+
saved value resolves to `off` with source `default`; valid saved values report
|
|
873
|
+
source `saved`. The feature is available on
|
|
824
874
|
macOS, native Linux, and WSL. Linux reads procfs directly; macOS reads Mach host
|
|
825
875
|
statistics and `hw.memsize`. Neither path launches `top`, `vm_stat`, `free`,
|
|
826
876
|
PowerShell, or another metrics process. On macOS, available memory is free plus
|
|
@@ -830,8 +880,9 @@ Windows host utilization. These are host-scoped values and do not attribute
|
|
|
830
880
|
usage to a pane, window, project, or session.
|
|
831
881
|
|
|
832
882
|
When enabled, the compact segment is also the clickable `resources` statusbar
|
|
833
|
-
range and opens the Resource Inspector. Turning
|
|
834
|
-
|
|
883
|
+
range and opens the Resource Inspector. Turning Resources off hides the segment
|
|
884
|
+
and stops its host sampler/cache writes; it does not disable the explicit
|
|
885
|
+
`projmux resources` inspector or a custom-bound
|
|
835
886
|
`Resources:Open` action. Inspector samples are memory-only for the popup
|
|
836
887
|
lifetime and are unrelated to the status segment's host CPU reference cache.
|
|
837
888
|
|
|
@@ -858,5 +909,3 @@ These are intended for debugging or local policy, not routine setup:
|
|
|
858
909
|
| `PROJMUX_TMUX_NOTIFY_DEDUPE_SECONDS` | Override the Settings/default collapse window for duplicate AI desktop notifications keyed on the pane-local AI notification key. |
|
|
859
910
|
| `PROJMUX_CODEX_TITLE_WATCH_INTERVAL` | Title-watch loop pacing for Codex panes. |
|
|
860
911
|
| `PROJMUX_CODEX_REPLY_SETTLE_LOOPS` | Reply-detection settle-loop pacing for Codex panes. |
|
|
861
|
-
| `TMUX_KUBE_CACHE_TTL` | Kubernetes status segment cache TTL. |
|
|
862
|
-
| `TMUX_KUBE_TIMEOUT` | kubectl invocation budget for the Kubernetes status segment. |
|
package/docs/globalization.md
CHANGED
|
@@ -34,7 +34,7 @@ Classification:
|
|
|
34
34
|
|
|
35
35
|
| Family | Examples | Class | Phase 0 policy |
|
|
36
36
|
| --- | --- | --- | --- |
|
|
37
|
-
| Agent names | `Codex`, `Claude`, `AI` | `literal` | Preserve exactly. |
|
|
37
|
+
| Agent names | `Codex`, `Claude`, `Antigravity`, `AI` | `literal` | Preserve exactly. |
|
|
38
38
|
| Category labels | `Response complete`, `Approval required`, `Input required`, `Error`, `Subagent stopped`, `Teammate waiting` | `translate` | English baseline now; catalog keys later. |
|
|
39
39
|
| Review body prefix | `Review pending:` | `translate` | English baseline now; catalog key later. |
|
|
40
40
|
| Tool names | `Bash`, `Read`, `WebFetch`, `Shell` | `literal` | Preserve provider/source spelling. |
|
|
@@ -50,12 +50,13 @@ Files:
|
|
|
50
50
|
- `internal/app/status.go`
|
|
51
51
|
- `docs/statusbar.md`
|
|
52
52
|
- `docs/cli.md`
|
|
53
|
+
- `docs/cli-guide.md`
|
|
53
54
|
|
|
54
55
|
Classification:
|
|
55
56
|
|
|
56
57
|
| Family | Examples | Class | Phase 0 policy |
|
|
57
58
|
| --- | --- | --- | --- |
|
|
58
|
-
| CLI flag help and usage | `--text`, `--target`, `
|
|
59
|
+
| CLI flag help and usage | `--text`, `--target`, `create notification`, usage errors | `translate` | Inventory only; convert in catalog phases. |
|
|
59
60
|
| Queue row labels and action hints | ack, clear, focus, open, reconcile labels | `translate` | Inventory only; convert in catalog phases. |
|
|
60
61
|
| Statusbar compact text | notify count, age, stale/gone hints | `translate` | Inventory only; needs compact locale formatter later. |
|
|
61
62
|
| Source/severity enum values | `ai`, `k8s`, `git`, `external`, `critical` | `literal` | Preserve exactly. |
|
|
@@ -78,8 +79,8 @@ Classification:
|
|
|
78
79
|
| Row labels and previews | enabled/disabled state, current source, saved values | `translate` | Inventory only; catalog later. |
|
|
79
80
|
| Disabled reasons and warnings | missing project, env override, conflict text | `translate` | Inventory only; catalog later. |
|
|
80
81
|
| Config keys and env vars | `PROJMUX_PROJDIR`, `config.toml`, `ui.locale` | `literal` | Preserve exactly. |
|
|
81
|
-
| Commands shown for copying | `projmux
|
|
82
|
-
| Persisted values | `
|
|
82
|
+
| Commands shown for copying | `projmux agent integrate codex --dry-run`, `projmux agent integrate antigravity --dry-run` | `literal` | Preserve exactly. |
|
|
83
|
+
| Persisted values | `off`, `none`, `notify`, `auto` | `literal` | Preserve enum values. |
|
|
83
84
|
|
|
84
85
|
### Native Picker And Render Surfaces
|
|
85
86
|
|
|
@@ -108,6 +109,7 @@ Files:
|
|
|
108
109
|
- `internal/app/settings*.go`
|
|
109
110
|
- `internal/app/*help*`
|
|
110
111
|
- `docs/cli.md`
|
|
112
|
+
- `docs/cli-guide.md`
|
|
111
113
|
- `docs/agent-workflow.md`
|
|
112
114
|
|
|
113
115
|
Classification:
|
|
@@ -124,7 +126,7 @@ Classification:
|
|
|
124
126
|
|
|
125
127
|
Do not translate these families:
|
|
126
128
|
|
|
127
|
-
- Product and agent names: `Codex`, `Claude`, `projmux`, `tmux`,
|
|
129
|
+
- Product and agent names: `Codex`, `Claude`, `Antigravity`, `projmux`, `tmux`,
|
|
128
130
|
`GitHub`, `npm`.
|
|
129
131
|
- Terminal and app names: `Windows Terminal`, `Ghostty`, `WezTerm`, `Kitty`,
|
|
130
132
|
`iTerm2`, `Alacritty`, `Foot`.
|
|
@@ -239,7 +241,8 @@ Contribution convention:
|
|
|
239
241
|
- Add the `en-US` entry in the same change as the key.
|
|
240
242
|
- Add `ko-KR` when the translation is known; otherwise rely on fallback while
|
|
241
243
|
keeping the missing key intentional in review notes.
|
|
242
|
-
- Do not translate product names (`projmux`, `tmux`, `Codex`, `Claude
|
|
244
|
+
- Do not translate product names (`projmux`, `tmux`, `Codex`, `Claude`,
|
|
245
|
+
`Antigravity`),
|
|
243
246
|
commands, paths, config keys, environment variables, provider payloads, or
|
|
244
247
|
source enum values.
|
|
245
248
|
- Runtime migrations should be narrow by surface. Move a string family behind
|
|
@@ -296,9 +299,10 @@ Width-safe rendering:
|
|
|
296
299
|
|
|
297
300
|
Runtime surfaces migrated:
|
|
298
301
|
|
|
299
|
-
- AI desktop notification summaries for Codex and
|
|
302
|
+
- AI desktop notification summaries for Codex, Claude, and Antigravity hook
|
|
303
|
+
payloads.
|
|
300
304
|
- In-app notify queue table/sidebar/statusbar display text for AI entries.
|
|
301
|
-
- Notify live explanation text for `projmux
|
|
305
|
+
- Notify live explanation text for `projmux get notifications --live`.
|
|
302
306
|
- Sidebar/table/statusbar age formatting and sidebar stale/gone/target labels.
|
|
303
307
|
|
|
304
308
|
Storage and dispatch policy:
|
|
@@ -309,7 +313,7 @@ Storage and dispatch policy:
|
|
|
309
313
|
- OS notification click/focus routing is unchanged. Locale formatting only
|
|
310
314
|
changes the summary/body strings sent to the configured notifier.
|
|
311
315
|
- JSON queue payloads keep raw queue entries. Localized live-row explanation
|
|
312
|
-
and row display text may appear in `
|
|
316
|
+
and row display text may appear in `get notifications --live` row fields because
|
|
313
317
|
those fields are render/report output, not stored queue schema.
|
|
314
318
|
|
|
315
319
|
Literal preservation and parity rules:
|
|
@@ -317,9 +321,9 @@ Literal preservation and parity rules:
|
|
|
317
321
|
- Translate only catalog-owned category labels such as `Response complete`,
|
|
318
322
|
`Approval required`, `Input required`, `Error`, `Subagent stopped`, and
|
|
319
323
|
`Teammate waiting`.
|
|
320
|
-
- Preserve provider-owned payloads verbatim: `Codex`, `Claude`,
|
|
321
|
-
commands, paths, URLs, query strings, transcript excerpts,
|
|
322
|
-
subagent IDs.
|
|
324
|
+
- Preserve provider-owned payloads verbatim: `Codex`, `Claude`, `Antigravity`,
|
|
325
|
+
tool names, commands, paths, URLs, query strings, transcript excerpts,
|
|
326
|
+
teammate IDs, and subagent IDs.
|
|
323
327
|
- Desktop notification summaries and in-app queue display text must use the
|
|
324
328
|
same rendered category labels for the same locale while preserving the same
|
|
325
329
|
literal payload body.
|