projmux 0.7.6 → 0.8.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/docs/agent-workflow.md +15 -1
- package/docs/architecture.md +8 -3
- package/docs/cli.md +17 -5
- package/docs/configuration.md +11 -5
- package/docs/hooks.md +16 -7
- package/docs/keybindings.md +27 -8
- package/docs/notify-queue.md +6 -2
- package/docs/session-restore.md +12 -4
- package/docs/statusbar.md +5 -0
- package/docs/theme-palette.md +33 -0
- package/docs/upgrading.md +2 -1
- package/package.json +5 -5
package/docs/agent-workflow.md
CHANGED
|
@@ -29,7 +29,12 @@
|
|
|
29
29
|
- `make fmt`: repository formatting for Go, shell snippets, and generated docs where applicable.
|
|
30
30
|
- `make fix`: safe automatic fixes such as `go fix` and repository-approved cleanup steps.
|
|
31
31
|
- `make npm-pack`: local npm binary package staging and `npm pack --dry-run` for the root package plus platform packages.
|
|
32
|
+
- `make security`: pinned govulncheck, gosec, staticcheck, gitleaks history/current-tree, actionlint, and shellcheck gates. Reviewed gosec/staticcheck findings use checked-in fingerprint/count baselines so only new findings fail.
|
|
33
|
+
- `make test`: fast unit coverage for app-layer AI split native agent launch/selective popup-toggle/settings/status/notification parity including AI pane option metadata, watcher metadata bootstrap for existing panes, capture-backed reply detection, missing-pane watcher shutdown, armed focus-only reply badge clearing, busy attention preservation on focus clear, manual AI topic preservation while watcher status still updates, agent-labeled desktop notification message context with pane-title-first body text, global/project-local lifecycle hook dispatch for post-create/pre-create/post-attach/send-noti with project hook and `.projmux/config.toml` trust-store hashing plus env/settings kill-switch gating, declarative startup command and hook run coverage, `send-noti` stdin JSON delivery plus `PROJMUX_NOTIFY_*` env payload, notify queue write success/failure/depth-guard dispatch rules, notify/statusbar/sidebar origin-client focus routing, project config env/kube session environment application, Settings project config env/kube/startup form writes with trust-store refresh and preserved hook commands, startup command send-keys orchestration plus startup pane replay markers, pre-create abort behavior, and shared projmux notification icon paths, and scoped even row/column resizing after shell and agent splits, status-bar git/kube segment parity including muted git branch block styling, compact dirty/staged/ahead/behind state colors, and bounded git/kube child execution, statusbar pwd display-only native-framed path popup with shared popup-wait-key/no-extra-payload-line command coverage, no clipboard or tmux buffer copy, and popup-wait-key cursor/raw-mode restore coverage, statusbar usage native HUD popup alignment/height-budget/threshold palette/muted sync-staleness/fallback coverage without raw CLI popup or popup-toggle stacking, statusbar settings click popup fallback and settings chip right-edge rendering without default trailing space, popup-toggle stale marker recovery, isolated `projmux shell` tmux app launch/config generation including home fallback plus project-context default session targeting from `PROJMUX_CWD` or nearest project marker, app-owned project-name statusbar layout, distinct project badge color, and quiet debounced session-state autosave command/app-config trigger, shell-entry welcome release prompt and inline update handling, shell update skip-by-latest-tag behavior plus best-effort stale-cache refresh, pane/window keybindings, keymap.toml tmux override rendering/stale unbinds including retired direct/UserKey cleanup, Settings Keybindings root/list/detail capture flows including parse-error rows, unsafe raw capture and timeout guards, disable/reset writes, app config regeneration, live tmux source-file reload, no-live-tmux save behavior, and stage-by-stage apply recovery copy, window rename bindings, pane rename helper/binding, pane-exit rebalance command/hooks, hook-pane and after-select-pane based attention focus hooks, attention badge toggle/clear/list/window rendering, attach/current/kill/pin/preview/prune/sessions/session-popup/settings commands, switch, tag, tmux helper commands, update status/check/apply cache and installer detection including GitHub Release binary asset selection/extraction/replacement, doctor install-missing command selection, AI notify integration diagnostics, and Session State resume metadata diagnostics, Settings AI notify integration diagnostics read-only status/conflict/CLI guidance, and Settings About update status/check action wiring, untitled standalone popup-toggle marker close/config install, direct popup minimum sizing, AI picker minimum width and height, sidebar minimum width and compact badge spacing, preview select writes, popup render output after cycling, switch picker pin action behavior without inline settings rows, nested settings hub sections for AI defaults, project picker filesystem scan/pin actions, Project Root settings source/shadowing/set/current/clear flows, app/keybinding info including Ctrl-M rename forwarding, and About version/source rendering, switch picker focused-session kill, switch picker launcher-key abort bindings, switch explicit project-root, unconfigured-root, and weak managed-root heuristic parity, switch popup hiding new-session candidates while sidebar keeps create-capable rows, switch row project-name display with `~` pinned to the top and live-session-first sorting, pretty-path, preview-context including kube context/namespace, switch settings subcommand flows including add-current-pin, interactive add-pin picker, and settings label/preview polish including Phase 2 Settings/hookmaker/project-startup/trust/quit destructive row color regression strings, native preview wiring, baseline picker surface parity including prompt/footer/header fallback without app-name filler and search-key scoped card matching, sidebar compact action-only key footer, sidebar preview-window/start-position behavior without focus-time session switching, sidebar row/window ANSI styling with pane-aggregated attention badge state and AI topic labels, Alt+2/Alt+3 legacy popup row, preview-window, pane metadata, and pane-snapshot parity, switch read0 card rows with active/inactive title styling, right-side status badges, combined directory/git metadata with muted inactive branch styling and bounded slow-repository branch enrichment, statusbar-matched block window tabs with window attention badges, read0 expect-key action parsing, restored pin/tag card badges, and restrained selected-row marker styling, switch preview metadata without duplicated directory/git rows, preview metadata rendering, popup pane display names for AI agents, AI topics, and shell commands, switch preview cycle bindings, sessions picker preview/cycle/open/kill wiring including attached-session fallback behavior, sessions picker launcher-key abort bindings, popup/switch preview summary formatting, popup sessions tmux entry helpers, switch/popup/session rendering, session identity, session-state Claude/Codex/Antigravity resume and declarative startup replay, session snapshot capture/autosave recipe classification including save/autosave pre-capture resume metadata refresh from live AI session ids including Antigravity conversation ids, Claude transcript paths, and Codex rollout log cwd matching/ambiguity skips, candidate discovery, config path derivation, popup preview read-models, and pure state rules including preview, tag, and lifecycle stores.
|
|
32
34
|
- `make test`: fast unit coverage for app-layer AI split native agent launch/selective popup-toggle/settings/status/notification parity including AI pane option metadata, watcher metadata bootstrap for existing panes, capture-backed reply detection, missing-pane watcher shutdown, armed focus-only reply badge clearing, busy attention preservation on focus clear, manual AI topic preservation while watcher status still updates, agent-labeled desktop notification message context with pane-title-first body text, global/project-local lifecycle hook dispatch for post-create/pre-create/post-attach/send-noti with project hook and `.projmux/config.toml` trust-store hashing plus env/settings kill-switch gating, declarative startup command and hook run coverage, `send-noti` stdin JSON delivery plus `PROJMUX_NOTIFY_*` env payload, notify queue write success/failure/depth-guard dispatch rules, notify/statusbar/sidebar origin-client focus routing, project config env/kube session environment application, Settings project config env/kube/startup form writes with trust-store refresh and preserved hook commands, startup command send-keys orchestration plus startup pane replay markers, pre-create abort behavior, and shared projmux notification icon paths, and scoped even row/column resizing after shell and agent splits, status-bar git/kube segment parity including muted git branch block styling and compact dirty/staged/ahead/behind state colors, statusbar pwd display-only native-framed path popup with shared popup-wait-key/no-extra-payload-line command coverage, no clipboard or tmux buffer copy, and popup-wait-key cursor/raw-mode restore coverage, statusbar usage native HUD popup alignment/height-budget/threshold palette/muted sync-staleness/fallback coverage without raw CLI popup or popup-toggle stacking, statusbar settings click popup fallback and settings chip right-edge rendering without default trailing space, popup-toggle stale marker recovery, isolated `projmux shell` tmux app launch/config generation including home fallback plus project-context default session targeting from `PROJMUX_CWD` or nearest project marker, app-owned project-name statusbar layout, distinct project badge color, and quiet debounced session-state autosave command/app-config trigger, shell-entry welcome release prompt and inline update handling, shell update skip-by-latest-tag behavior plus best-effort stale-cache refresh, pane/window keybindings, keymap.toml tmux override rendering/stale unbinds including retired direct/UserKey cleanup, Settings Keybindings root/list/detail capture flows including parse-error rows, unsafe raw capture and timeout guards, disable/reset writes, app config regeneration, live tmux source-file reload, no-live-tmux save behavior, and stage-by-stage apply recovery copy, window rename bindings, pane rename helper/binding, pane-exit rebalance command/hooks, hook-pane and after-select-pane based attention focus hooks, attention badge toggle/clear/list/window rendering, attach/current/kill/pin/preview/prune/sessions/session-popup/settings commands, switch, tag, tmux helper commands, update status/check/apply cache and installer detection including GitHub Release binary asset selection/extraction/replacement, doctor install-missing command selection, AI notify integration diagnostics, and Session State resume metadata diagnostics, Settings AI notify integration diagnostics read-only status/conflict/CLI guidance, and Settings About update status/check action wiring, untitled standalone popup-toggle marker close/config install, direct popup minimum sizing, AI picker minimum width and height, sidebar minimum width and compact badge spacing, preview select writes, popup render output after cycling, switch picker pin action behavior without inline settings rows, nested settings hub sections for AI defaults, project picker filesystem scan/pin actions, Project Root settings source/shadowing/set/current/clear flows, app/keybinding info including Ctrl-M rename forwarding, and About version/source rendering, switch picker focused-session kill, switch picker launcher-key abort bindings, switch explicit project-root, unconfigured-root, and weak managed-root heuristic parity, switch popup hiding new-session candidates while sidebar keeps create-capable rows, switch row project-name display with `~` pinned to the top and live-session-first sorting, pretty-path, preview-context including kube context/namespace, switch settings subcommand flows including add-current-pin, interactive add-pin picker, and settings label/preview polish including Phase 2 Settings/hookmaker/project-startup/trust/quit destructive row color regression strings, native preview wiring, baseline picker surface parity including prompt/footer/header fallback without app-name filler and search-key scoped card matching, sidebar compact action-only key footer, sidebar preview-window/start-position behavior without focus-time session switching, sidebar row/window ANSI styling with pane-aggregated attention badge state and AI topic labels, Alt+2/Alt+3 legacy popup row, preview-window, pane metadata, and pane-snapshot parity, switch read0 card rows with active/inactive title styling, right-side status badges, combined directory/git metadata with muted inactive branch styling, statusbar-matched block window tabs with window attention badges, read0 expect-key action parsing, restored pin/tag card badges, and restrained selected-row marker styling, switch preview metadata without duplicated directory/git rows, preview metadata rendering, popup pane display names for AI agents, AI topics, and shell commands, switch preview cycle bindings, sessions picker preview/cycle/open/kill wiring including attached-session fallback behavior, sessions picker launcher-key abort bindings, popup/switch preview summary formatting, popup sessions tmux entry helpers, switch/popup/session rendering, session identity, session-state Claude/Codex/Antigravity resume and declarative startup replay, session snapshot capture/autosave recipe classification including save/autosave pre-capture resume metadata refresh from live AI session ids including Antigravity conversation ids, Claude transcript paths, and Codex rollout log cwd matching/ambiguity skips, candidate discovery, config path derivation, popup preview read-models, and pure state rules including preview, tag, and lifecycle stores.
|
|
35
|
+
- `make test` also covers GitHub Release updater resource and integrity boundaries: bounded compressed responses, decompressed tar streams, total and per-file regular bytes, entry counts, required SHA-256 asset digests, release-host/redirect allowlisting, scratch cleanup, and no atomic replacement after rejection.
|
|
36
|
+
- `make test` also covers resume-title cleaning at the shared Claude/Codex/Antigravity choke point: known Claude command, local-command, task-notification, and system-reminder scaffolding is discarded so discovery falls through to the first real prompt, while inline `<`, leading HTML, and custom-element prompts remain intact.
|
|
37
|
+
- `make test` also covers the hardcoded usage HUD manual refresh key, full enabled-adapter collection through the existing throttle/backoff policy, cooldown no-op, cached popup rerender, and unchanged click/`u` cache-only behavior.
|
|
33
38
|
- `make test` also covers Settings > AI Settings > Enabled agents Phase 0 config behavior: missing config enables Claude, Codex, and Antigravity, unknown saved provider names are ignored without disabling known providers, Settings toggles persist Claude/Codex/Antigravity only, shell/selective are absent from enabled-agent rows, and a saved default split mode warns when its provider is disabled.
|
|
34
39
|
- `make test` also covers native Alt-1 sidebar `Sidebar:KillSession` mutable refresh: the action kills through the focused-session safety path, keeps the native picker session open, refreshes rows and preview with `picker.Action.Mutate`/`DeferredUpdate`, and preserves the previous-live-session guard.
|
|
35
40
|
- `make test` also covers Notify sidebar pane-grouped read-model rows and interactions: collapsed pane inbox group construction, fixed three-line group cards with stable project/provider, topic/context, aggregate metadata, and latest-preview slots including topic-with-project cases, child-count badges that match expandable child rows without rendering `+0`, childless group headers without strong fold affordance, selected/expanded marker-only row shape changes, duplicate label/preview reduction, worst-severity aggregation, inactive/gone group display and child-count rendering, pane-less fallback grouping, compact newest-first child event rows with warn/critical severity preservation, Right/Left fold mutation plus childless Right no-op refresh, folded and expanded live group Enter focus+ack with mixed-severity critical rows, inactive-but-routable group Enter focus+ack, gone group Enter cleanup without focus including critical rows, target-gone race cleanup, transient focus-failure no-ack refresh, child Enter focus/ack preservation, explicit group acknowledgement including mixed-severity critical rows, and grouped deferred refresh output with expanded-state pruning.
|
|
@@ -39,7 +44,7 @@
|
|
|
39
44
|
- `make test` also covers AI semantic badge renderer aggregation for window-list, sidebar rows, switch window tabs, popup pane summaries, and pane-border topic badges using prompt-required > response-complete > in-progress priority while preserving blank no-state lanes, response-complete live badge consume on attention clear without idling action-required/progress badges, plus Settings > Appearance AI badge style selection for dot/emoji/off pane-border, Alt-1 sidebar window/preview tabs, and tmux window-status compatibility with dot as the persisted/config fallback.
|
|
40
45
|
- `make test` also covers AI semantic badge Phase 3 theme-role hardening: `@projmux_ai_badge_kind` storage values and aggregate priority stay unchanged, `minimal` remains a read-time alias for the `off` badge style, progress/success/action-required badge roles stay distinct, permission/input status badges do not use critical red, and critical notify queue severity does not drive live AI status badge colors or desktop notification urgency.
|
|
41
46
|
- `make test` also covers keybinding surface tier catalog rules, action-centered `keymap.toml` `keys = [...]` multi-alias parsing/writing, quoted internal `Surface:Action` tables, legacy popup action ID aliases, canonical popup toggle names, AI split popup-vs-direct action labels, generated tmux config multi-alias rendering, global/direct conflict detection, surface-scoped native picker command conflict detection, Settings Keybindings list/search/detail surface-aware picker-local labels, compact action-list state copy, flat Keys list/action detail rows, key detail remove/test rows, Add key default press-key flow with Advanced typed entry, collapsed Troubleshooting entry copy, Settings delivery diagnostics that split logical key/raw bytes/tmux received key while distinguishing missing, ambiguous, adapter-needed, and delivered states, safe direct key pool and risky/reserved diagnostic-only copy, Projmux-owned Ghostty/Windows Terminal advanced delivery copy, raw escape/CSI-u/xterm modified/UserKey/UserSequence rejection from primary keymap storage, Labs compatibility redirect to the Keybindings root, capture/add-key flows, unsafe raw capture, reset behavior, stale guide docs guards, and welcome/runtime footer copy that avoids hardcoded launch-key guides.
|
|
42
|
-
- Darwin native-key focused coverage includes portable physical chord parsing for Alt/Option, Control, Control-Option, Shift, letters/digits/navigation/function keys, shared `keymap.toml` custom-action loading (including `M-a`), focused tmux client discovery, canonical `send-keys -K -c` dispatch through the existing root key table, native Settings Add key capture winning over terminal text encoding, and an explicit Linux/Windows/no-CGO shell startup no-op boundary.
|
|
47
|
+
- Darwin native-key focused coverage includes portable physical chord parsing for Alt/Option, Control, Control-Option, Shift, letters/digits/navigation/function keys, `darwin && cgo` synthetic event-to-canonical-chord mapping for Option, Control, shifted letters, function keys, and arrows with unmatched/plain event pass-through, shared `keymap.toml` custom-action loading (including `M-a`), focused tmux client discovery, canonical `send-keys -K -c` dispatch through the existing root key table, native Settings Add key capture winning over terminal text encoding, default-on shell startup, `PROJMUX_NATIVE_KEYS=0`/`false` and Settings `[ui].native_keys = false` broker opt-out gates, broker direct no-op behavior, one-time pre-permission consent guidance, and an explicit Linux/Windows/no-CGO shell startup no-op boundary.
|
|
43
48
|
- `make test` covers the default picker key ownership across catalog, generated tmux config, terminal adapters, setup probes, and native popup close hints: `Alt-4` opens AI Resume as a guaranteed launch default, while `Alt-7` opens the AI split picker as its editable default.
|
|
44
49
|
- `make test` also covers welcome revisit policy: legacy welcome state remains readable without suppressing shell entry, Enter continues without storing release skip, `s` stores an update skip for the current latest tag when an update is available, source installs show disabled Upgrade guidance, stale update cache refresh is best-effort, Settings > About > Welcome opens a Settings-native viewer without pending state, and shell prompt display does not schedule a redundant attach popup.
|
|
45
50
|
- `make test` also covers transport-dependent app tmux defaults for pane/window navigation (`M-Left`/`M-Right`/`M-Up`/`M-Down` and `M-S-Left`/`M-S-Right`) while keeping visible default chords, allowing additive safe plain aliases that do not store or remove the transport defaults, and no UserKey/CSI-u generated fallback.
|
|
@@ -52,6 +57,7 @@
|
|
|
52
57
|
- `make test` also covers app tmux naming metadata policy: pane border and automatic window rename share the visible pane label expression, AI topic panes feed window tab labels through `@projmux_ai_topic`, shell panes prefer the visible shell command label such as `zsh`, and `projmux shell` disables program-driven window renames while keeping automatic rename enabled.
|
|
53
58
|
- `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.
|
|
54
59
|
- `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.
|
|
60
|
+
- `make test` also covers the project-local executable artifact trust boundary for named snapshots: one-read exact-byte parse/hash reuse, SHA-256 allow-once/allow-always decisions, changed-byte and rename/replacement reauthorization, final-file and parent-component symlink rejection, config-absent and `PROJMUX_PROJECT_HOOKS=off` independence, non-interactive fail-closed behavior, commandless-layout compatibility, terminal-control escaping for layout names/descriptions/window names/agent topics/command previews, and deny/error paths that stop before restore, session/pane creation, or startup `send-keys`.
|
|
55
61
|
- `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.
|
|
56
62
|
- `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, pane-level semantic badge kind writes that keep permission, response complete, and in-progress states distinct, 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.
|
|
57
63
|
- `make test` also covers `projmux ai integrate claude` user-level Claude Code hook settings install/idempotence, dry-run preview, unmanaged projmux ingest command conflict refusal across all settings events, managed-command removal by marker even for stale events outside the current catalog, preservation of unrelated settings/hooks, catalog-driven Claude hook event installation with local override merging, and managed wiring for the 29 Claude Code 2.1.140 events in the embedded default catalog.
|
|
@@ -71,6 +77,8 @@
|
|
|
71
77
|
- `make test` also covers the built-in semantic palette foundation: non-empty fallback truecolor/tmux tokens, distinct action/attention/AI/progress/danger roles, native picker chip/current/titlebar render strings including titlebar frame `surface` / `chrome_foreground` inheritance without separate overlay ANSI, statusbar git/notify/usage/settings palette regressions, attention/pane-border/popup/switch progress color guards, renderer-only lead-mode topic prefix styling, settings/trust/destructive row color guards, global-only theme resolver behavior for `global`/`fallback` source labels (project `[theme]` is not a source), preset fill, explicit token override, unknown-preset/invalid-color warnings that ignore only the global layer, and truecolor-to-tmux mapping with generated `xterm*:RGB` terminal feature support, semantic role map (`RenderRoles`/`ANSIRoles`) fallback byte-identity for non-background historical palette literals plus explicit-theme repaint of Tier A/B chrome/state roles while Tier C renderer-only literals stay fixed, split foreground behavior where legacy `foreground` fills `text_primary` and `chrome_foreground` but `text_primary` does not repaint frame/title/search/border/status chrome, Phase 6 public token (`progress`/`success`/`action_required`/`pane_active_bg`/`focus`) repaint of the tmux and ANSI roles with `action_required` kept independent of `critical`, default `projmux` background tokens pinned to terminal default without separate terminal preset variants, Phase 6b pane-body-vs-popup/status background separation where an explicit `background` repaints the inactive pane body, an explicit `surface` repaints popups/native frames, and an explicit `status_background` repaints only the bottom status bar, native popup-toggle `display-popup -s` body style propagation from the effective theme without touching global popup/shell/status styles, and Settings global theme editing with the merged Global/Effective view, directly selectable prefixed theme token rows, no legacy `foreground` row, no project theme editor, and no font keys.
|
|
72
78
|
- `make test` also covers Recent Windows Phase 0 state/model behavior: server-scoped file paths, missing/corrupt state policy with corrupt-file backup, MRU newest-first recording, same-window dedupe and promotion, default queue limiting, current-window exclusion, cross-session candidate retention, gone-window pruning against live window inventory, and label fallback rules that keep win/pane ids as debug fallback instead of the primary row label.
|
|
73
79
|
- `make test` also covers Recent Windows Phase 1 native picker behavior: `projmux window recent` empty-state messaging, cross-session candidate picker rows with descriptive project/session/window/pane command age metadata, pane summaries mirroring visible pane labels with AI topic and known-shell command precedence, four visible pane cells before compact `+N` overflow, window-only switching without pane restoration, switch-failure refresh/prune handling, and gone-window pruning before picker selection.
|
|
80
|
+
- `make test` also covers notify reconcile eviction policy: expired rows are removed only when their real tmux pane/session target is gone, expired live and unexpired gone rows remain pending, inventory failures skip target-based eviction, hard-cap overflow keeps the newest 256 rows, and ephemeral prune triggers cleanup through the reconcile hook after session kills.
|
|
81
|
+
- `make test` also covers stale state cleanup policy: successful prune, tagged-kill, sessions-picker, and switch/sidebar session kills trigger best-effort preview-row cleanup; notify refresh publishing sweeps dead-PID sockets while preserving live-PID sockets; Session State prune listing distinguishes dead sessions from old live persistent sessions without deleting either, explicit named deletion removes only selected snapshots, malformed snapshots remain preserved with a warning, and doctor documents the manual-only retention policy.
|
|
74
82
|
- `make test` also covers Recent Windows Phase 2/3/4 keybinding, popup, and runtime recorder integration: `RecentWindows:Open` owns the guaranteed `M-3` launch default, generated tmux config uses client-scoped `tmux popup-toggle recent-windows`, the popup body runs `projmux window recent`, generated tmux config installs background `window record` hooks for window and client-session changes plus first-use population without `session-window-changed`, `window record` snapshots current tmux socket/session/window/active-pane metadata into the socket-scoped store with escaped field parsing, repeated same-window record fires dedupe instead of growing entries, the queue remains bounded by `recentwindows.DefaultLimit`, Settings > Keybindings shows Recent Windows with the `M-3` default, setup probe text names Recent Windows, `SessionPopupToggle` no longer owns the guaranteed `M-3` default, and escaped tmux field separators are parsed for current/list window metadata.
|
|
75
83
|
- Current focused unit coverage also includes strict notify SOT behavior
|
|
76
84
|
(TTL does not remove rows, focus success and target-gone clicks ack,
|
|
@@ -83,7 +91,13 @@
|
|
|
83
91
|
that update an open native sidebar best-effort without failing queue pushes, and `focus` dispatch diagnostics for session fallback, unresolved
|
|
84
92
|
targets, window fallback, pane fallback, explicit id failures as unresolved exits, and
|
|
85
93
|
notify-only fallback.
|
|
94
|
+
- Security hardening coverage includes private `0700` directory and `0600`
|
|
95
|
+
file creation for sensitive local config/state, idempotent repair of legacy
|
|
96
|
+
permissions on load/save, best-effort behavior when chmod is unsupported,
|
|
97
|
+
symlink-safe repair that does not chmod an external target, and race-safe
|
|
98
|
+
notify/recent-windows lock retry jitter under concurrent store operations.
|
|
86
99
|
- Picker focused unit coverage includes backend-neutral picker item/action mapping, native title-focused filtering, numeric selection, shared close actions including raw native custom actions, deprecated picker backend value normalization, AI picker title chrome and stable search-key ordering, Settings title chrome and root section order, Settings Labs shell without backend choices plus keybindings compatibility redirect, environment override normalization, compact multi-line metadata gutters with one-column-indented metadata, proportional native scrollbar thumb rendering, native row width clamps that preserve ANSI resets and Korean/wide-cell frame geometry with matched scrollbar/no-scrollbar row budgets including Settings > Appearance AI badge preview rows and parent long emoji preview rows, native app-background and semantic selected/muted/accent/warning/critical role coverage for fallback/effective themes across content padding, empty no-footer rows, footer rows, scrollbars, split-preview gaps, reset-to-padding continuation, and Korean Settings > Appearance AI badge style chips/prompt/emoji rows, multiline partial next/previous item row rendering with rendered-row scrollbar units, fixed split-preview and sidebar list viewports with scrollbar tracks, native up/down-family navigation wrap with empty-list safety and PageUp/PageDown/Home/End clamp regression coverage, native mouse down/follow-drag/release behavior, deferred native row updates that preserve filter/selection state and can repeat from event triggers, preview tab/control normalization before width clipping, optional native frame titlebars without same-line rule fill and with title/chip gap inheritance guards, titled native Alt-1 sidebar chrome, statusbar-preserving sidebar popup height, native-only compact project sidebar popup sizing, cheap Alt-1 first-paint rows with deferred git/window/attention/preview enrichment, fixed three-line Alt-1 sidebar row geometry across cheap/enriched paints, bulk switch existing-session classification with per-candidate fallback, and notify sidebar title/popup sizing.
|
|
100
|
+
- Picker/setup lifecycle coverage includes deferred native key-reader stop and repeated reopen cleanup, plus per-probe controlling-TTY cleanup and timeout-then-next-key reads without stale goroutines stealing input.
|
|
87
101
|
- Doctor focused unit coverage includes native Windows psmux dependency policy, Windows `stty` skip behavior, Linux tmux required/stale behavior, and native Windows tmux bell fallback skip diagnostics.
|
|
88
102
|
- psmux focused unit coverage includes Windows native command rendering policy: PowerShell-generated config callbacks quote `projmux.exe` and argv without POSIX shell quoting, direct CreateProcess/C-runtime command-line rendering remains separate from PowerShell and `cmd.exe /c`, and paths/args containing spaces, quotes, backtick, dollar, ampersand, pipe, redirect characters, semicolon, parentheses, braces, caret, percent, and exclamation are pinned as data.
|
|
89
103
|
- psmux app/session foundation focused unit coverage includes `PROJMUX_MUX_BACKEND` and platform-default backend selection, psmux `-L projmux` session create/attach/switch/ephemeral marker command args, list-sessions/list-windows/list-panes minimal inventory parsing, selected-backend app command wiring, and the explicit absence of pane-scoped metadata in psmux inventory rows.
|
package/docs/architecture.md
CHANGED
|
@@ -135,8 +135,8 @@ does not own the truth of every live badge.
|
|
|
135
135
|
source (`ai|k8s|git|external`), TTL freshness metadata (default 600s), and a
|
|
136
136
|
`Target{Socket, Session, Window, Pane}`. Re-pushing an existing id
|
|
137
137
|
refreshes the entry's text and timestamp.
|
|
138
|
-
- **List** — `projmux notify list` returns newest-first
|
|
139
|
-
TTL is not a removal condition. `projmux notify list --live` adds a
|
|
138
|
+
- **List** — `projmux notify list` returns newest-first without mutating the
|
|
139
|
+
queue. TTL alone is not a removal condition. `projmux notify list --live` adds a
|
|
140
140
|
read-only comparison against live pane state, explaining manual reply
|
|
141
141
|
badges without queue entries, live AI replies with/missing queue entries,
|
|
142
142
|
and inactive (`queue-stale`) `ai:` entries.
|
|
@@ -147,7 +147,9 @@ does not own the truth of every live badge.
|
|
|
147
147
|
`tmux list-panes -a` and back-fills entries for panes whose
|
|
148
148
|
attention state is `reply` AND whose AI agent option is set,
|
|
149
149
|
reporting inactive `ai:` entries that no longer match a live reply+agent pane without
|
|
150
|
-
acking them.
|
|
150
|
+
acking them. It then removes rows only when they are both TTL-expired and
|
|
151
|
+
gone from the real pane/session inventory, and enforces a 256-row hard cap
|
|
152
|
+
by evicting oldest overflow. Live rows otherwise remain explicit-ack-only.
|
|
151
153
|
`make install` and `projmux upgrade` invoke it so the queue
|
|
152
154
|
recovers from any drift introduced by a lost daemon.
|
|
153
155
|
|
|
@@ -214,6 +216,9 @@ The keyboard chord uses `bind-key s switch-client -T projmux-status` so the
|
|
|
214
216
|
prefix-then-`s`-then-letter shortcut routes through the same dispatcher as
|
|
215
217
|
the mouse click. Empty `#{mouse_status_range}` (clicks on whitespace) is a
|
|
216
218
|
no-op so the binding never flashes a spurious error.
|
|
219
|
+
The hardcoded `prefix s r` sibling is usage-specific: it runs the existing
|
|
220
|
+
throttled collector and then reopens the same display-only usage popup from
|
|
221
|
+
cache.
|
|
217
222
|
|
|
218
223
|
## Non-goals
|
|
219
224
|
|
package/docs/cli.md
CHANGED
|
@@ -30,7 +30,7 @@ projmux <command> [args...]
|
|
|
30
30
|
| `notify` | Manage the pending AI notify queue (push/list/ack/reconcile). |
|
|
31
31
|
| `pin` | Manage pinned project directories. |
|
|
32
32
|
| `preview` | Manage persisted tmux preview selection. |
|
|
33
|
-
| `prune` | Trim stale tmux lifecycle state. |
|
|
33
|
+
| `prune` | Trim stale tmux lifecycle state and inspect preserved session snapshots. |
|
|
34
34
|
| `quit` | Quit the app-owned projmux tmux runtime. |
|
|
35
35
|
| `sessions` | Pick and open an existing tmux session. |
|
|
36
36
|
| `session-popup` | Read tmux popup preview state. |
|
|
@@ -204,8 +204,9 @@ projmux notify reconcile [--json]
|
|
|
204
204
|
```
|
|
205
205
|
|
|
206
206
|
- `push` — append (or refresh, with `--id`) one entry. `--ttl` defaults to
|
|
207
|
-
`600` seconds as freshness metadata;
|
|
208
|
-
`notify list
|
|
207
|
+
`600` seconds as freshness metadata; expiration does not remove rows from
|
|
208
|
+
`notify list` and is considered only by reconcile together with a gone
|
|
209
|
+
target. Reconcile also retains only the newest 256 rows. `--text` is hard-capped to 80 runes (longer text is
|
|
209
210
|
truncated server-side). After a successful queue write, projmux sends a
|
|
210
211
|
best-effort refresh event to open native notify sidebars and fires
|
|
211
212
|
declarative `[hooks.send-noti]` asynchronously if configured. Event delivery
|
|
@@ -301,6 +302,7 @@ projmux status notify [--max-width N]
|
|
|
301
302
|
```
|
|
302
303
|
projmux statusbar click <range-id> [--socket <s>] [--mouse-window <id>]
|
|
303
304
|
[--client <tty>] [--mouse-x N] [--mouse-y N]
|
|
305
|
+
projmux statusbar usage-refresh
|
|
304
306
|
```
|
|
305
307
|
|
|
306
308
|
Click/keyboard dispatcher for the two-line status bar. Implemented range ids:
|
|
@@ -313,7 +315,9 @@ popup; `pwd` shows the current pane path in a native-framed display-only
|
|
|
313
315
|
popup; `kube` and `git` open the project switcher popup;
|
|
314
316
|
`settings` toggles the settings popup for the tmux client; `usage` opens the
|
|
315
317
|
detailed `projmux usage` table popup; `notify` focuses and acks the newest
|
|
316
|
-
actionable queue target.
|
|
318
|
+
actionable queue target. The internal `usage-refresh` shortcut entry point
|
|
319
|
+
runs the same throttled, per-adapter collection policy as `status usage` and
|
|
320
|
+
then reopens the display-only usage popup from cache.
|
|
317
321
|
`MouseDown1Status` errors are
|
|
318
322
|
swallowed and surfaced as `display-message` toasts so a transient
|
|
319
323
|
failure does not raise a tmux error popup. See [statusbar.md](statusbar.md).
|
|
@@ -767,7 +771,15 @@ flags with the top-level `switch` UX:
|
|
|
767
771
|
- `kill <session>` / `kill tagged` — terminate sessions; `tagged`
|
|
768
772
|
consumes the active tagged-selection set.
|
|
769
773
|
- `prune ephemeral` — drop ephemeral sessions older than the configured
|
|
770
|
-
retention window.
|
|
774
|
+
retention window. Successful session kills also remove the session's
|
|
775
|
+
persisted preview cursor; saved Session State snapshots are preserved.
|
|
776
|
+
- `prune session-state [--older-than=720h]` — list snapshots whose tmux
|
|
777
|
+
session is no longer live or whose save time is older than the threshold.
|
|
778
|
+
Listing is read-only and never deletes snapshots.
|
|
779
|
+
- `prune session-state delete <session>...` — explicitly delete only the
|
|
780
|
+
named snapshots. Session State snapshots are never automatically pruned,
|
|
781
|
+
because closed-session restore depends on them. `projmux doctor` repeats
|
|
782
|
+
this retention policy and points to the read-only listing command.
|
|
771
783
|
- `tag` — manage the tagged-selection set.
|
|
772
784
|
|
|
773
785
|
## current / shell / attach / settings / quit
|
package/docs/configuration.md
CHANGED
|
@@ -273,7 +273,10 @@ of these is a public token: leave it unset to keep the historical built-in
|
|
|
273
273
|
color, or set it to repaint the matching chrome.
|
|
274
274
|
|
|
275
275
|
Supported presets are `projmux`, `high-contrast`, `blue-hour`, `carbon-violet`,
|
|
276
|
-
`ember`, `forest`, and `rose`.
|
|
276
|
+
`daylight`, `ember`, `forest`, and `rose`. `daylight` is the fully-light
|
|
277
|
+
preset; the others are dark. Preset colors paint projmux chrome only (status
|
|
278
|
+
bar, popups, pane borders/tint) — pane contents follow the terminal theme, so
|
|
279
|
+
`daylight` pairs best with a light terminal theme. A preset fills
|
|
277
280
|
missing color tokens, and explicit color tokens override preset values. Tokens
|
|
278
281
|
the global theme leaves unset fall through to the built-in fallback preset.
|
|
279
282
|
Terminal-default backgrounds are configured per token with the `default`
|
|
@@ -694,10 +697,13 @@ snapshot`, named snapshot rows, `Empty session`, and `Back`. `Latest snapshot`
|
|
|
694
697
|
is the snapshot auto-save that changes as auto-save runs; named snapshots are
|
|
695
698
|
fixed snapshots. Rows include saved-at date/time metadata when projmux can
|
|
696
699
|
determine it. `Back` returns to the project list without creating, replaying, or
|
|
697
|
-
opening a session. After the startup mode is selected, project
|
|
698
|
-
is evaluated if needed
|
|
699
|
-
|
|
700
|
-
|
|
700
|
+
opening a session. After the startup mode is selected, project automation trust
|
|
701
|
+
is evaluated if needed. A named snapshot containing a startup `command` must
|
|
702
|
+
authorize the SHA-256 of the exact layout bytes used for parse/restore, even
|
|
703
|
+
when project hooks are disabled or `.projmux/config.toml` is absent. Approval
|
|
704
|
+
continues the selected path and deny/cancel aborts without session create,
|
|
705
|
+
snapshot replay, or startup command. The Alt-1 sidebar opens trust as the shared
|
|
706
|
+
client-scoped `Trust project automation` popup
|
|
701
707
|
instead of inline sidebar rows. The selected open continuation runs in a
|
|
702
708
|
detached tmux job that can close the sidebar before trust without depending on
|
|
703
709
|
the self-closing sidebar process to keep running. Deny/cancel refreshes the
|
package/docs/hooks.md
CHANGED
|
@@ -109,8 +109,11 @@ values.
|
|
|
109
109
|
|
|
110
110
|
Global hooks under `$XDG_CONFIG_HOME` are prompt-free.
|
|
111
111
|
|
|
112
|
-
Project-local
|
|
113
|
-
before projmux runs hooks or applies
|
|
112
|
+
Project-local executable automation is gated by trust-on-first-use. This
|
|
113
|
+
includes `.projmux/config.toml` before projmux runs hooks or applies
|
|
114
|
+
startup/session environment settings, and a selected
|
|
115
|
+
`.projmux/layouts/*.toml` named snapshot before projmux replays any declared
|
|
116
|
+
`command`.
|
|
114
117
|
Approving "always"
|
|
115
118
|
records the file content hash in:
|
|
116
119
|
|
|
@@ -118,16 +121,22 @@ records the file content hash in:
|
|
|
118
121
|
${XDG_STATE_HOME:-$HOME/.local/state}/projmux/trusted-projects.json
|
|
119
122
|
```
|
|
120
123
|
|
|
121
|
-
The trust key is the absolute repository path and
|
|
124
|
+
The trust key is the absolute repository path and each artifact path is stored
|
|
122
125
|
relative to that repository. Each project entry has a
|
|
123
126
|
`trusted_at` timestamp and a `files` map of relative paths to SHA-256 hashes.
|
|
124
|
-
When file content changes
|
|
125
|
-
|
|
126
|
-
|
|
127
|
+
When file content changes or the layout path is replaced, projmux asks again
|
|
128
|
+
and shows the old and new SHA-256 hashes. Layout symlinks, including symlinked
|
|
129
|
+
`.projmux` or `layouts` path components, are rejected. The selected layout is
|
|
130
|
+
read once; those exact bytes are both hashed and parsed, and the resulting
|
|
131
|
+
in-memory snapshot is what restore uses. In non-interactive contexts such as
|
|
132
|
+
tmux run-shell or CI, untrusted or changed project-local executable files fail
|
|
133
|
+
closed with a warning.
|
|
127
134
|
|
|
128
135
|
Set `PROJMUX_PROJECT_HOOKS=off` to disable project-local hook discovery
|
|
129
136
|
entirely. Project-local hooks can also be disabled from `projmux settings`
|
|
130
|
-
under Labs. The global hook still runs either way.
|
|
137
|
+
under Labs. The global hook still runs either way. This setting does not trust
|
|
138
|
+
or bypass executable named-snapshot commands. A layout without a startup
|
|
139
|
+
`command` does not require executable-artifact approval.
|
|
131
140
|
|
|
132
141
|
## Startup Commands
|
|
133
142
|
|
package/docs/keybindings.md
CHANGED
|
@@ -73,11 +73,29 @@ delivery path.
|
|
|
73
73
|
This adapter is terminal-independent, so Ghostty and iTerm2 do not need
|
|
74
74
|
separate projmux mappings for the app socket. It does not rewrite terminal
|
|
75
75
|
configuration and it does not translate Option-produced symbols such as `¡`.
|
|
76
|
-
The first launch
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
The first launch shows a one-time consent hint before macOS asks for
|
|
77
|
+
Accessibility permission. The hint explains that the adapter captures only
|
|
78
|
+
modified chords from the configured keybinding catalog, never plain-text
|
|
79
|
+
typing; physical Option needs the event tap because terminals may convert it
|
|
80
|
+
before tmux can see it; and capture plus tmux injection stay on the local
|
|
81
|
+
machine. The broker then waits for approval and enables the event tap
|
|
79
82
|
automatically; the tmux session does not need to be restarted.
|
|
80
83
|
|
|
84
|
+
Native macOS delivery remains on by default. To prevent the broker from
|
|
85
|
+
starting—and therefore prevent the Accessibility prompt—turn off **Native
|
|
86
|
+
macOS keybindings** in Settings > Keybindings before the next `projmux shell`
|
|
87
|
+
start, or launch with:
|
|
88
|
+
|
|
89
|
+
```sh
|
|
90
|
+
PROJMUX_NATIVE_KEYS=0 projmux shell
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
`PROJMUX_NATIVE_KEYS=false` is equivalent. The environment opt-out takes
|
|
94
|
+
precedence over the saved Settings value. Turning native delivery off leaves
|
|
95
|
+
the ordinary terminal key path in place; Option chords then depend on what the
|
|
96
|
+
terminal sends. Linux, WSL, and Windows never start this Darwin broker and are
|
|
97
|
+
unchanged.
|
|
98
|
+
|
|
81
99
|
The portable key vocabulary stays shared across operating systems:
|
|
82
100
|
`M-` (Alt/Option), `C-`, `S-`, letters, top-row digits, arrows/navigation,
|
|
83
101
|
and function keys. Command/Super is intentionally not part of this portable
|
|
@@ -96,11 +114,12 @@ Settings > Keybindings lists the full action catalogue. In particular, sidebar
|
|
|
96
114
|
keymap actions, pane switching, window switching, and rename actions remain
|
|
97
115
|
visible.
|
|
98
116
|
|
|
99
|
-
The Settings flow is intentionally simple: the root
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
117
|
+
The Settings flow is intentionally simple: the root has one native macOS
|
|
118
|
+
transport policy toggle followed by the action list with a key summary and
|
|
119
|
+
state. The key summary uses the first key plus `+N`, or `Not bound` when no key
|
|
120
|
+
is active. State vocabulary is limited to Default, Custom, Available, and
|
|
121
|
+
Unbound. Each action detail shows the action label, state, a flat Keys list
|
|
122
|
+
with `+ Add key`, Options, and a collapsed
|
|
104
123
|
Troubleshooting row with Test key delivery and Advanced... entry points. Key
|
|
105
124
|
rows open key detail for Remove key and Test key. Add key opens Press a key by
|
|
106
125
|
default; Enter key name, the safe direct key pool, risky/reserved key copy, and
|
package/docs/notify-queue.md
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
`projmux` keeps a persistent JSON queue of pending AI notifications.
|
|
4
4
|
`attention` is live tmux pane state; `notify` is the user's pending
|
|
5
5
|
notification source of truth. The queue is derived from live state and user
|
|
6
|
-
pushes
|
|
6
|
+
pushes. Live entries remain pending until explicit ack unless they are among
|
|
7
|
+
the oldest rows beyond the 256-entry hard cap; reconcile can also collect an
|
|
8
|
+
expired entry after its tmux target disappears. Each entry can route
|
|
7
9
|
the status-bar notify segment or notify sidebar to the originating tmux pane
|
|
8
10
|
via `projmux focus`, and feeds the HUD pill rendered by
|
|
9
11
|
`projmux status notify`.
|
|
@@ -23,7 +25,9 @@ queue.
|
|
|
23
25
|
|
|
24
26
|
The queue file is a pretty-printed JSON array of `Notification`
|
|
25
27
|
objects, sorted newest-first on read. `expires_at` is freshness metadata;
|
|
26
|
-
expired entries are not filtered or deleted by `list`.
|
|
28
|
+
expired entries are not filtered or deleted by `list`. Reconcile removes an
|
|
29
|
+
expired row only when the real tmux inventory also shows its pane/session is
|
|
30
|
+
gone; if inventory is unavailable, that target-based removal is skipped.
|
|
27
31
|
|
|
28
32
|
Open native notify sidebars also create per-process Unix datagram sockets for
|
|
29
33
|
queue-write refresh events. If the state-dir socket path would exceed Unix
|
package/docs/session-restore.md
CHANGED
|
@@ -86,13 +86,21 @@ keeps changing as auto-save runs. `Named snapshot` is a fixed, user-named
|
|
|
86
86
|
snapshot and is not updated by auto-save. Rows include saved-at date/time
|
|
87
87
|
metadata when available. `Back` returns to the project list without creating,
|
|
88
88
|
replaying, or opening a session. After the startup mode is selected, project
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
automation trust is evaluated if needed. For a named snapshot with a startup
|
|
90
|
+
`command`, projmux rejects symlink artifacts, reads the selected layout once,
|
|
91
|
+
and authorizes the SHA-256 of the exact bytes used to parse the in-memory
|
|
92
|
+
restore plan. The trust prompt names the layout file and shows terminal-safe
|
|
93
|
+
command previews. Config absence and `PROJMUX_PROJECT_HOOKS=off` do not bypass
|
|
94
|
+
this layout gate; commandless layouts keep their existing prompt-free restore
|
|
95
|
+
behavior. Approval continues the selected path, while deny/cancel/error aborts
|
|
96
|
+
before session or pane creation, snapshot replay, or `send-keys`. Project-owned
|
|
97
|
+
layout names, descriptions, window names, agent topics, and command previews
|
|
98
|
+
escape terminal control characters before rendering. The Alt-1 sidebar does
|
|
99
|
+
not render trust approve/deny rows inline:
|
|
92
100
|
before trust is requested, projmux snapshots the sidebar query/selection
|
|
93
101
|
context and hands the selected open continuation to a detached tmux job. That
|
|
94
102
|
job closes the sidebar popup state for the client and opens the shared `Trust
|
|
95
|
-
project
|
|
103
|
+
project automation` popup as a client-scoped decision surface, so no code relies on
|
|
96
104
|
the self-closing sidebar popup process continuing after `display-popup -C`.
|
|
97
105
|
Deny/cancel or trust-popup errors return to the sidebar near the same
|
|
98
106
|
query/selection with a visible status message; only a missing/invalid context
|
package/docs/statusbar.md
CHANGED
|
@@ -181,6 +181,7 @@ placeholder surfaces and no-op until a handler is wired into the dispatcher.
|
|
|
181
181
|
```tmux
|
|
182
182
|
bind-key s switch-client -T projmux-status
|
|
183
183
|
bind-key -T projmux-status u run-shell '#{q:projmux} statusbar click usage'
|
|
184
|
+
bind-key -T projmux-status r run-shell '#{q:projmux} statusbar usage-refresh'
|
|
184
185
|
bind-key -T projmux-status n run-shell '#{q:projmux} statusbar click notify'
|
|
185
186
|
bind-key -T projmux-status g run-shell '#{q:projmux} statusbar click git'
|
|
186
187
|
bind-key -T projmux-status k run-shell '#{q:projmux} statusbar click kube'
|
|
@@ -190,6 +191,10 @@ bind-key -T projmux-status s run-shell '#{q:projmux} statusbar click session'
|
|
|
190
191
|
|
|
191
192
|
The chord routes through the same dispatcher as the mouse click, so
|
|
192
193
|
keyboard and mouse paths are functionally identical for keyed ranges.
|
|
194
|
+
The `r` key is the one exception: it asks the usage manager for a throttled
|
|
195
|
+
refresh and then reopens the same display-only usage popup from cache.
|
|
196
|
+
Per-adapter throttle hints and backoff remain in force, so repeated refreshes
|
|
197
|
+
inside the cooldown rerender cached data without another adapter collection.
|
|
193
198
|
There is intentionally no `prefix s s` settings fallback because that chord
|
|
194
199
|
already opens the session/sidebar range.
|
|
195
200
|
|
package/docs/theme-palette.md
CHANGED
|
@@ -159,6 +159,7 @@ Built-in preset config values are:
|
|
|
159
159
|
- `high-contrast`
|
|
160
160
|
- `blue-hour`
|
|
161
161
|
- `carbon-violet`
|
|
162
|
+
- `daylight`
|
|
162
163
|
- `ember`
|
|
163
164
|
- `forest`
|
|
164
165
|
- `rose`
|
|
@@ -167,10 +168,42 @@ Built-in preset config values are:
|
|
|
167
168
|
and a deep indigo active pane tint.
|
|
168
169
|
- `carbon-violet` — charcoal/violet dark theme with darker popup/status
|
|
169
170
|
surfaces and a black active pane tint.
|
|
171
|
+
- `daylight` — the fully-light preset: warm paper pane/popup surfaces, an
|
|
172
|
+
explicit light status bar, dark slate text, a teal accent, a strong blue
|
|
173
|
+
focus border, and darkened saturated state colors (red/amber/blue/green/
|
|
174
|
+
orange) tuned to stay distinguishable on light chrome after 256-color
|
|
175
|
+
quantization. The active pane tint sits one tone darker than the pane body
|
|
176
|
+
(the inverse of the dark presets).
|
|
170
177
|
- `high-contrast` — black surfaces, white text, a dark blue active surface,
|
|
171
178
|
near-black active pane tint, vivid cyan focus, and bright
|
|
172
179
|
cyan/yellow/red/green state colors.
|
|
173
180
|
|
|
181
|
+
Preset colors paint projmux chrome only — the tmux status bar, picker/popup
|
|
182
|
+
frames, pane borders, and the pane background tint. Pane contents (shell
|
|
183
|
+
prompt, editor, command output) follow the terminal/shell theme, so a fully
|
|
184
|
+
light experience with `daylight` also requires a light terminal theme.
|
|
185
|
+
|
|
186
|
+
`daylight` palette values:
|
|
187
|
+
|
|
188
|
+
| Token | Hex | Nearest tmux |
|
|
189
|
+
| --- | --- | --- |
|
|
190
|
+
| `background` | `#f2efe9` | `colour255` |
|
|
191
|
+
| `surface` | `#faf7f1` | `colour255` |
|
|
192
|
+
| `status_background` | `#dfdad0` | `colour188` |
|
|
193
|
+
| `surface_active` | `#cfe0f0` | `colour189` |
|
|
194
|
+
| `chrome_foreground` | `#3a4550` | `colour238` |
|
|
195
|
+
| `text_primary` | `#2c3338` | `colour236` |
|
|
196
|
+
| `foreground` | `#2c3338` | `colour236` |
|
|
197
|
+
| `muted` | `#6b7680` | `colour243` |
|
|
198
|
+
| `accent` | `#0f766e` | `colour6` |
|
|
199
|
+
| `critical` | `#c62828` | `colour160` |
|
|
200
|
+
| `warning` | `#b45309` | `colour130` |
|
|
201
|
+
| `progress` | `#1d4ed8` | `colour26` |
|
|
202
|
+
| `success` | `#15803d` | `colour29` |
|
|
203
|
+
| `action_required` | `#d97706` | `colour172` |
|
|
204
|
+
| `pane_active_bg` | `#e8e4dc` | `colour254` |
|
|
205
|
+
| `focus` | `#2563eb` | `colour26` |
|
|
206
|
+
|
|
174
207
|
## Fallback Inventory
|
|
175
208
|
|
|
176
209
|
Chrome and text:
|
package/docs/upgrading.md
CHANGED
|
@@ -88,7 +88,8 @@ should visibly sink. The active-pane border (`focus`) defaults to cyan
|
|
|
88
88
|
`colour51`. Both apply only to tmux pane chrome.
|
|
89
89
|
|
|
90
90
|
Built-in presets are intentionally small: `projmux`, `high-contrast`,
|
|
91
|
-
`blue-hour`, `carbon-violet`, `ember`, `forest`, and `rose
|
|
91
|
+
`blue-hour`, `carbon-violet`, `daylight`, `ember`, `forest`, and `rose`
|
|
92
|
+
(`daylight` is the fully-light one). Terminal-default
|
|
92
93
|
backgrounds are configured per token with the `default` sentinel rather than
|
|
93
94
|
through separate terminal preset variants.
|
|
94
95
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projmux",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "tmux project session manager",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/crevissepartners/projmux#readme",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"package:npm:pack": "scripts/package-npm.sh --pack"
|
|
29
29
|
},
|
|
30
30
|
"optionalDependencies": {
|
|
31
|
-
"@projmux/linux-x64": "0.
|
|
32
|
-
"@projmux/linux-arm64": "0.
|
|
33
|
-
"@projmux/darwin-x64": "0.
|
|
34
|
-
"@projmux/darwin-arm64": "0.
|
|
31
|
+
"@projmux/linux-x64": "0.8.0",
|
|
32
|
+
"@projmux/linux-arm64": "0.8.0",
|
|
33
|
+
"@projmux/darwin-x64": "0.8.0",
|
|
34
|
+
"@projmux/darwin-arm64": "0.8.0"
|
|
35
35
|
}
|
|
36
36
|
}
|