projmux 0.6.5 → 0.6.6
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 +12 -8
- package/docs/ai-agent-shortcuts.md +15 -1
- package/docs/cli.md +38 -17
- package/docs/configuration.md +31 -22
- package/docs/hooks.md +5 -1
- package/docs/keybindings.md +21 -15
- package/docs/native-picker-parity.md +7 -4
- package/docs/npm-distribution.md +5 -3
- package/docs/settings-ia.md +14 -6
- package/docs/statusbar.md +22 -2
- package/docs/testing.md +122 -0
- package/docs/theme-palette.md +13 -3
- package/package.json +7 -7
package/docs/agent-workflow.md
CHANGED
|
@@ -30,12 +30,15 @@
|
|
|
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
32
|
- `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, first-run/version-bump shell welcome state and inline update handling, shell startup update prompt actions for fresh installer-aware cached updates, 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, and no-live-tmux save behavior, 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 resume and declarative startup replay, session snapshot capture/autosave recipe classification including save/autosave pre-capture resume metadata refresh from live AI session 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.
|
|
33
|
-
- `make test` also covers
|
|
33
|
+
- `make test` also covers Settings > AI Settings > Enabled agents Phase 0 config behavior: missing config enables Claude and Codex, unknown saved provider names are ignored without disabling known providers, Settings toggles persist Claude/Codex only, shell/selective are absent from enabled-agent rows, and a saved default split mode warns when its provider is disabled.
|
|
34
|
+
- `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, plus Settings > Appearance AI badge style selection for dot/emoji/off pane-border compatibility with dot as the persisted/config fallback.
|
|
35
|
+
- `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.
|
|
36
|
+
- `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, 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, simplified action detail rows, Labs compatibility redirect to the Keybindings root, capture/add-alias flows, unsafe raw capture, reset behavior, stale guide docs guards, and welcome/runtime footer copy that avoids hardcoded launch-key guides.
|
|
34
37
|
- `make test` also covers welcome revisit policy: shell welcome is suppressed only by `skip_version` matching the current version, legacy `last_welcomed_version` state does not count as skipped, `s` stores current-version welcome skip, Enter continues without storing skip, Settings > About > Welcome opens a Settings-native viewer without pending state, and shell prompt display does not schedule a redundant attach popup.
|
|
35
38
|
- `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.
|
|
36
|
-
- `make test` also covers direct `projmux ai split --agent <claude|codex|shell|selective>` launches, config-default preservation, extra args appended to resolved agent executables, managed pane metadata, title watcher startup, layout application, plain shell split behavior, selective picker delegation, and invalid direct-agent usage errors.
|
|
37
|
-
- `make test` also covers Settings IA regression guards for `send-noti` visibility in Hooks, no nested Project recipe inside Hooks, Project recipe/AI/Labs view-first detail rows, Appearance Path/Git/Notify icon direct off/symbol/emoji preview selection with no Change page, Notifications root/Desktop notifications/Delivery sources relocation, Delivery sources command-row clipboard copy, and Labs Project Hooks overview-first rows.
|
|
38
|
-
- `make test` also covers AI desktop notification dedupe precedence (env override > Settings saved value > default), configured dedupe-window collapse/send behavior, Settings > Notifications AI dedupe preset/custom rows, explicit notify focus consume rules for selected critical rows and older same-pane non-critical AI cleanup, preservation of critical/permission/stop-failure/external/git/k8s rows during bulk cleanup, OS Toast click-to-focus queue consume, WSL Toast protocol handler hidden-launcher registration with `wsl.exe --exec` URI forwarding, and attention clear paths that do not ack the queue.
|
|
39
|
+
- `make test` also covers direct `projmux ai split --agent <claude|codex|shell|selective>` launches, enabled-agent gating for disabled direct launches and disabled saved defaults, `--force-agent` as an explicit direct CLI-only override, selective picker filtering with all-disabled shell fallback guidance, config-default preservation, extra args appended to resolved agent executables, managed pane metadata, title watcher startup, layout application, plain shell split behavior, selective picker delegation, and invalid direct-agent usage errors.
|
|
40
|
+
- `make test` also covers Settings IA regression guards for `send-noti` visibility in Hooks, no nested Project recipe inside Hooks, Project recipe/AI/Labs view-first detail rows, Appearance Path/Git/Notify icon direct off/symbol/emoji preview selection with no Change page, Notifications root/Desktop notifications/Delivery sources relocation, localized Korean Desktop notifications root/detail chrome without visible English residue, Delivery sources command-row clipboard copy, and Labs Project Hooks overview-first rows.
|
|
41
|
+
- `make test` also covers AI desktop notification dedupe precedence (env override > Settings saved value > default), Desktop notifications mode persistence through `desktop-notify-mode`, saved-config precedence over live tmux options, `projmux tmux apply` regeneration of `@projmux_desktop_notify_mode`, configured dedupe-window collapse/send behavior, Settings > Notifications AI dedupe preset/custom rows, explicit notify focus consume rules for selected critical rows and older same-pane non-critical AI cleanup, preservation of critical/permission/stop-failure/external/git/k8s rows during bulk cleanup, OS Toast click-to-focus queue consume, WSL Toast protocol handler hidden-launcher registration with `wsl.exe --exec` URI forwarding, and attention clear paths that do not ack the queue.
|
|
39
42
|
- `make test` also covers AI hook runtime action precedence over catalog defaults, runtime quiet for known Codex notify events, runtime notify for known Claude quiet events, generic in-app-only notify rows for known Codex hook events without specialized handlers, suppression of desktop notification and `send-noti` dispatch on that generic path, separation of runtime hook action from catalog install events, Settings > Notifications hook quiet policy display/write behavior without external install/remove execution, hook desktop notification payload parity with the in-app queue text across the shared OS notification payload, normal/transient OS urgency and expiration for critical AI queue rows, and dormant title/capture fallback gating once a pane is hook-active.
|
|
40
43
|
- `make test` also covers Settings > Session State as global settings-only UI with default-off auto-save and no window/pane tree, Settings > Project > Session State project-derived identity plus project auto-save override/effective source rows and distinct Save latest snapshot / Save named snapshot labels, closed-project save disabled reasons, named snapshot portable path conversion, project/global auto-save precedence, Projects > Sessions > State read-only latest/named snapshot overview with window/pane cwd/recipe/agent-resume health, user-facing `projmux session-state` status/save/delete/restore dry-run actions including explicit manual save bypass of disabled autosave and agent resume status/confidence preview, and Project open sidebar startup coverage for Labs opt-in `Start project`, default-off empty creation, Latest snapshot, Named snapshot, Empty session, Back, saved-at row metadata, existing-session skip, startup-before-trust ordering, detached sidebar open continuation before client-scoped separate trust popup handoff without sidebar inline trust UI, trust approve continuation, and trust deny/cancel no-session sidebar refresh behavior.
|
|
41
44
|
- `make test` also covers `projmux shell` usage without startup selector flags, project-context default target lookup from `PROJMUX_CWD` or nearest project marker, explicit `--session` separation from project-derived defaults, and direct empty attach behavior without shell startup picker/replay.
|
|
@@ -43,13 +46,14 @@
|
|
|
43
46
|
- `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.
|
|
44
47
|
- `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.
|
|
45
48
|
- `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.
|
|
46
|
-
- `make test` also covers `projmux ai ingest codex-hook` event parsing, PermissionRequest critical queue rows with tool/action metadata, Stop info queue rows, UserPromptSubmit busy/no-queue behavior, quiet/no-notify diagnostics for non-firing Codex hook events including override-added catalog events, cataloged hook notification body formatting, hook-active pane marking, topic preservation without hook candidate writes, and mutable resume metadata writes for `@projmux_ai_resume_id`, source, and updated-at.
|
|
49
|
+
- `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.
|
|
47
50
|
- `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.
|
|
48
|
-
- `make test` also covers `projmux ai ingest claude-hook` core and extra Claude Code hook ingest for event parsing, transcript fallback, cataloged hook notification body formatting, permission summary formatting, UserPromptSubmit busy/no-queue behavior, Notification severity/text mapping, StopFailure/TeammateIdle text/severity/metadata mapping, SubagentStop quiet/no-notify diagnostics, unknown future-event quiet fallback, hook-active pane marking, topic preservation without hook candidate writes, mutable resume metadata writes for `@projmux_ai_resume_id`, source, and updated-at, and Claude transcript path preservation.
|
|
51
|
+
- `make test` also covers `projmux ai ingest claude-hook` core and extra Claude Code hook ingest for event parsing, transcript fallback, cataloged hook notification body formatting, permission summary formatting, UserPromptSubmit busy/no-queue behavior, Notification severity/text mapping, pane-level semantic badge kind writes for permission, input, response complete, and in-progress states, StopFailure/TeammateIdle text/severity/metadata mapping, SubagentStop quiet/no-notify diagnostics, unknown future-event quiet fallback, hook-active pane marking, topic preservation without hook candidate writes, mutable resume metadata writes for `@projmux_ai_resume_id`, source, and updated-at, and Claude transcript path preservation.
|
|
49
52
|
- `make test` also covers the Globalization Phase 0 English baseline for AI desktop notification summaries/bodies and hook-ingest queue text while preserving agent names, tool names, commands, paths, and provider payload values as literals/data.
|
|
50
53
|
- `make test` also covers the Globalization Phase 1 message catalog foundation: locale resolver priority and normalization, `ko-KR` to `en-US` fallback, missing fallback-key errors, `en-US` completeness for foundation keys, and plain-text versus ANSI/tmux-styled fragment API separation.
|
|
51
54
|
- `make test` also covers the Globalization Phase 2 formatter foundation: compact/full relative age and duration formatting, locale-specific just-now text, notification count plural/count preservation, list joins that preserve payload items, status token and target label localization, terminal cell-width measurement/truncation, and ANSI/tmux style wrappers treated as zero-width.
|
|
52
55
|
- `make test` also covers the Globalization Phase 3 notify runtime migration: AI notify category rendering for `en-US`/`ko-KR`, Codex/Claude hook literal preservation for agent names, tool names, commands, paths, URLs, provider messages, subagent and teammate payloads, desktop notification and in-app queue display parity, notify sidebar/statusbar locale formatter output, and raw queue storage schema preservation.
|
|
56
|
+
- `make test` also covers statusbar notify width fallbacks that preserve normal INFO/WARN/CRIT badges at readable widths, use dotless clipped text/count at very narrow widths, and keep hard truncation closed with `#[default]`.
|
|
53
57
|
- `make test` also covers the Globalization Phase 4 Settings and popup guidance migration: `en-US`/`ko-KR` Settings root title/chips/rows/footer rendering, native picker search/empty/footer rendering without overflow, Settings row padding by terminal cell width, shell welcome guide catalog rendering, and long Korean ANSI/tmux-styled guide truncation safety while preserving key/command/path literals.
|
|
54
58
|
- `make test` also covers the Globalization Phase 5 locale settings surface: `PROJMUX_LOCALE` > global `[ui].locale` > `LC_ALL` > `LC_MESSAGES` > `LANG` > `en-US` priority, Settings > Appearance > Language / Locale row/detail visibility, `auto` current-locale/source display, unsupported locale fallback warnings, global config writes, and preserved command/config/env/path literals.
|
|
55
59
|
- `make test` also covers the Globalization Phase 6 governance guard: Go string-literal audit classification for hardcoded Korean candidates, English user-facing candidates, and ignored literal/data/debug examples; no unapproved runtime Korean literals outside catalog/formatter/test fixtures; `en-US` coverage for every embedded default catalog key; and required `ko-KR` coverage for migrated notify, Settings, picker, welcome, update, and help surfaces.
|
|
@@ -57,7 +61,7 @@
|
|
|
57
61
|
- `make test` also covers `projmux ai ingest log` tail/path rendering and bounded JSONL log trimming for ingest diagnostics.
|
|
58
62
|
- `make test` also covers welcome revisit policy: shell `skip_version` gating, `s` skip vs Enter one-run continue, Settings > About > Welcome native viewer, and attach-popup no-duplicate/no-op behavior.
|
|
59
63
|
- `make test` also covers `projmux quit` action-picker rows, cancel/close no-op behavior, explicit quit of only app-owned mux runtimes marked by `@projmux_app=1` on the selected `tmux`/`psmux -L projmux` backend, missing/default runtime no-ops, dispatcher wiring, and `Settings > About > Quit projmux` routing through the same picker before any shutdown side effect.
|
|
60
|
-
- `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, 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, Theme settings Phase 0/1 resolver behavior for project/global/fallback source labels, preset fill, explicit token override, invalid-layer warnings, and truecolor-to-tmux mapping, Phase 2 fallback render parity and project/global color isolation for native picker and tmux status/window background adapters, Phase 3 desired font config save/resolve plus unsupported `not applied` status without breaking no-adapter fallback rendering, and Phase 4 Settings theme editing boundaries for project/global resets, project inherit-vs-override labels, effective source labels, and project config theme values feeding the native project popup render path.
|
|
64
|
+
- `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 background/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, Theme settings Phase 0/1 resolver behavior for project/global/fallback source labels, preset fill, explicit token override, invalid-layer warnings, and truecolor-to-tmux mapping, Phase 2 fallback render parity and project/global color isolation for native picker and tmux status/window background adapters, Phase 3 desired font config save/resolve plus unsupported `not applied` status without breaking no-adapter fallback rendering, and Phase 4 Settings theme editing boundaries for project/global resets, project inherit-vs-override labels, effective source labels, and project config theme values feeding the native project popup render path.
|
|
61
65
|
- Current focused unit coverage also includes strict notify SOT behavior
|
|
62
66
|
(TTL does not remove rows, focus success and target-gone clicks ack,
|
|
63
67
|
reconcile reports stale rows), `notify list --live` queue/live explanations, notify sidebar
|
|
@@ -68,7 +72,7 @@
|
|
|
68
72
|
state rendering after all visible non-critical rows are cleared, and `focus` dispatch diagnostics for session fallback, unresolved
|
|
69
73
|
targets, window fallback, pane fallback, explicit id failures as unresolved exits, and
|
|
70
74
|
notify-only fallback.
|
|
71
|
-
- 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
|
|
75
|
+
- 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 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, 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.
|
|
72
76
|
- 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.
|
|
73
77
|
- 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.
|
|
74
78
|
- 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.
|
|
@@ -6,7 +6,7 @@ the same split contract.
|
|
|
6
6
|
|
|
7
7
|
```sh
|
|
8
8
|
projmux ai split --agent <agent> <right|down>
|
|
9
|
-
projmux ai split --agent <agent> <right|down> -- <extra args...>
|
|
9
|
+
projmux ai split --agent <agent> [--force-agent] <right|down> -- <extra args...>
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
Use this page for shareable registration patterns. Keep machine-local policy,
|
|
@@ -41,6 +41,20 @@ your user-level config. Avoid treating placeholder flags in this guide as
|
|
|
41
41
|
project defaults or current recommendations. If there are no private extra
|
|
42
42
|
arguments, omit the separator entirely; do not leave a trailing bare `--`.
|
|
43
43
|
|
|
44
|
+
Settings > AI Settings > Enabled agents is the source of truth for whether
|
|
45
|
+
Claude and Codex may be launched. Disabled agents do not appear in the
|
|
46
|
+
selective picker, and direct shortcut commands such as
|
|
47
|
+
`projmux ai split --agent codex right` fail clearly instead of launching. This
|
|
48
|
+
is intentional: shortcuts are thin direct CLI wrappers and must respect the
|
|
49
|
+
same disabled state as hand-written commands.
|
|
50
|
+
|
|
51
|
+
`--force-agent` is the only override, and it is explicit CLI policy for direct
|
|
52
|
+
`--agent claude|codex` launches. Do not put it in shared picker, default-mode,
|
|
53
|
+
or general shortcut registrations. Use it only in a private one-shot command
|
|
54
|
+
when you deliberately want to launch a disabled agent without changing
|
|
55
|
+
Settings. If every AI agent is disabled, `--agent selective` still offers a
|
|
56
|
+
plain `shell` split and guidance to re-enable Claude/Codex.
|
|
57
|
+
|
|
44
58
|
`shell` and `selective` are not targets for extra agent arguments. Use them
|
|
45
59
|
without a tail:
|
|
46
60
|
|
package/docs/cli.md
CHANGED
|
@@ -25,7 +25,7 @@ projmux <command> [args...]
|
|
|
25
25
|
| `current` | Resolve the active tmux pane path. |
|
|
26
26
|
| `doctor` | Diagnose runtime dependencies. |
|
|
27
27
|
| `focus` | Switch the active client to a session/window/pane target. |
|
|
28
|
-
| `init` |
|
|
28
|
+
| `init` | Preview or apply supported terminal key delivery mappings. |
|
|
29
29
|
| `kill` | Terminate tagged tmux sessions. |
|
|
30
30
|
| `notify` | Manage the pending AI notify queue (push/list/ack/reconcile). |
|
|
31
31
|
| `pin` | Manage pinned project directories. |
|
|
@@ -71,13 +71,15 @@ selection has been retired. The native picker is always used.
|
|
|
71
71
|
projmux setup [--timeout DURATION] [--non-interactive]
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
Probes the guaranteed launch defaults (`Alt-1..5`) plus
|
|
75
|
-
|
|
76
|
-
`Alt-Shift-{Left,Right}`. Reports
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
`
|
|
80
|
-
|
|
74
|
+
Probes the guaranteed launch defaults (`Alt-1..5`) plus transport candidates
|
|
75
|
+
such as `Ctrl-N`, `Ctrl-Shift-{R,L,M}`, `Ctrl-M`, and
|
|
76
|
+
`Alt-Shift-{Left,Right}`. Reports whether each key arrived as the expected
|
|
77
|
+
plain bytes, an unsupported legacy/app-specific sequence, an unknown sequence,
|
|
78
|
+
or a timeout. `--non-interactive` skips the TTY probe and prints the expected
|
|
79
|
+
key map. Default `--timeout` is `5s`. Run it outside tmux after trying
|
|
80
|
+
`projmux shell`; `Alt-1..5` are the only guaranteed zero-config defaults.
|
|
81
|
+
Settings > Keybindings edits in-app action aliases; terminal delivery
|
|
82
|
+
diagnostics stay in this CLI flow.
|
|
81
83
|
|
|
82
84
|
## init
|
|
83
85
|
|
|
@@ -86,9 +88,9 @@ projmux init [terminal] [--apply | --dry-run] [--config <path>]
|
|
|
86
88
|
[--allow-symlink]
|
|
87
89
|
```
|
|
88
90
|
|
|
89
|
-
|
|
90
|
-
reports
|
|
91
|
-
`$TERM_PROGRAM`/`$TERMINAL_EMULATOR`.
|
|
91
|
+
Previews or applies terminal-specific key delivery mappings for supported
|
|
92
|
+
terminals when `projmux setup` reports swallowed shortcuts. When `terminal` is
|
|
93
|
+
omitted, autodetects from `$TERM_PROGRAM`/`$TERMINAL_EMULATOR`.
|
|
92
94
|
Known terminals: `ghostty`, `windows-terminal`. Default is dry-run; pass
|
|
93
95
|
`--apply` to write (timestamped `.bak.<timestamp>` is created). Refuses to
|
|
94
96
|
write through a symlink unless `--allow-symlink` is passed (dotfiles repos).
|
|
@@ -319,7 +321,7 @@ supplied window.
|
|
|
319
321
|
## ai
|
|
320
322
|
|
|
321
323
|
```
|
|
322
|
-
projmux ai split [--agent <claude|codex|shell|selective>] [right|down] [-- <extra-arg>...]
|
|
324
|
+
projmux ai split [--agent <claude|codex|shell|selective>] [--force-agent] [right|down] [-- <extra-arg>...]
|
|
323
325
|
projmux ai picker --inside <right|down>
|
|
324
326
|
projmux ai settings
|
|
325
327
|
projmux ai status set <thinking|waiting|idle> [--pane <id>]
|
|
@@ -340,6 +342,13 @@ the `attention` badge, the `notify` queue producer, and the desktop
|
|
|
340
342
|
notifier. `status set waiting` is the trigger that flips a pane to the
|
|
341
343
|
reply-ready state — that transition pushes an `ai:<session>:<pane>`
|
|
342
344
|
entry into the notify queue.
|
|
345
|
+
The durable semantic status badge is stored separately in
|
|
346
|
+
`@projmux_ai_badge_kind` as `approval_required`, `input_required`,
|
|
347
|
+
`response_complete`, `in_progress`, or unset. The live status surfaces color
|
|
348
|
+
those values with action-required amber-orange, success green, and progress
|
|
349
|
+
yellow respectively. That palette is independent from notify queue
|
|
350
|
+
`--severity` and from OS desktop notification urgency; a critical approval row
|
|
351
|
+
can still render a non-red action-required status badge.
|
|
343
352
|
|
|
344
353
|
`ai split right|down` uses the configured default split mode. Add
|
|
345
354
|
`--agent claude`, `--agent codex`, `--agent shell`, or `--agent selective` for
|
|
@@ -348,6 +357,15 @@ existing picker flow; `--agent shell` opens the existing plain shell split.
|
|
|
348
357
|
Arguments after `--` are extra arguments appended to the resolved `claude` or
|
|
349
358
|
`codex` executable inside the managed wrapper; projmux still sets the context
|
|
350
359
|
directory, tmux title, AI pane metadata, title watcher, and split layout.
|
|
360
|
+
Settings > AI Settings > Enabled agents controls Claude/Codex launch
|
|
361
|
+
visibility. Disabled agents are hidden from the selective picker and from the
|
|
362
|
+
default-mode picker. A saved default that later becomes disabled fails clearly
|
|
363
|
+
instead of falling back to another agent. Direct `--agent claude|codex` launches
|
|
364
|
+
also fail when disabled, including shortcuts that call the same command. For a
|
|
365
|
+
deliberate one-shot direct CLI launch, pass `--force-agent`; picker and saved
|
|
366
|
+
default paths do not use this override. If all AI agents are disabled, the
|
|
367
|
+
selective picker still offers the plain `shell` split and shows guidance to
|
|
368
|
+
re-enable Claude/Codex.
|
|
351
369
|
For user-level skill, slash-command, editor, or launcher registrations that
|
|
352
370
|
call this contract, see [AI Agent Shortcuts](ai-agent-shortcuts.md).
|
|
353
371
|
|
|
@@ -707,9 +725,11 @@ flags with the top-level `switch` UX:
|
|
|
707
725
|
- `settings` — interactive configuration UI for the project picker, AI
|
|
708
726
|
splits, Notifications, Appearance mode, Project Root management, the
|
|
709
727
|
switcher's saved workdirs list, Labs (experimental), Settings > Keybindings,
|
|
710
|
-
and About/Update status. The keybinding flow
|
|
711
|
-
`Settings > Keybindings` with
|
|
712
|
-
|
|
728
|
+
and About/Update status. The keybinding flow is a single
|
|
729
|
+
`Settings > Keybindings` action list with simplified action details for
|
|
730
|
+
aliases and reset. Terminal diagnostics and terminal mapping application stay
|
|
731
|
+
in the `projmux shell` -> `projmux setup` -> `projmux init` remediation path.
|
|
732
|
+
The About section includes the `Welcome` entry. In Project
|
|
713
733
|
Picker, `Project Root` manages the saved
|
|
714
734
|
primary root (`~/.config/projmux/projdir`) and displays whether the effective
|
|
715
735
|
value comes from `PROJMUX_PROJDIR`, tmux `@projmux_projdir`, saved config, or
|
|
@@ -725,8 +745,9 @@ flags with the top-level `switch` UX:
|
|
|
725
745
|
`projmux update apply`, and Welcome opens a Settings-native viewer
|
|
726
746
|
independent of shell skip state. `Settings > About > Quit projmux` routes
|
|
727
747
|
through the same `projmux quit` action picker. The same About section also
|
|
728
|
-
lists the keybinding diagnostic path:
|
|
729
|
-
`init` for supported terminal mappings, and
|
|
748
|
+
lists the keybinding diagnostic path: try `projmux shell` first, use `setup`
|
|
749
|
+
for swallowed keys, use `init` for supported terminal mappings, and use
|
|
750
|
+
`doctor` for dependencies.
|
|
730
751
|
|
|
731
752
|
## See also
|
|
732
753
|
|
package/docs/configuration.md
CHANGED
|
@@ -87,16 +87,17 @@ language.
|
|
|
87
87
|
## Keymap File
|
|
88
88
|
|
|
89
89
|
Settings > Keybindings is the normal in-app editor for action keys. It lists
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
`Type key chord`. Saving writes safe tmux plain chords to
|
|
90
|
+
actions with current keybinding summaries, opens a simple detail screen, and
|
|
91
|
+
offers `Add alias` plus reset. Saving writes safe tmux plain chords to
|
|
93
92
|
`~/.config/projmux/keymap.toml`, rewrites `~/.config/projmux/tmux.conf`, and,
|
|
94
93
|
when Settings is running inside tmux, sources that app config so tmux-level
|
|
95
94
|
chords take effect immediately.
|
|
96
95
|
|
|
97
96
|
Raw sequences that cannot be safely represented as a tmux plain chord are not
|
|
98
|
-
persisted. Use Settings to save a safe direct alias
|
|
99
|
-
the
|
|
97
|
+
persisted. Use Settings to save a safe direct alias. When key delivery needs
|
|
98
|
+
terminal-layer remediation, first try the key in `projmux shell`, then run
|
|
99
|
+
`projmux setup` from the raw terminal, then use `projmux init` for supported
|
|
100
|
+
terminal adapters.
|
|
100
101
|
|
|
101
102
|
`~/.config/projmux/keymap.toml` can also be edited by hand. When the file is
|
|
102
103
|
absent, generated tmux config stays on the built-in defaults.
|
|
@@ -126,21 +127,21 @@ do not break. Settings preserves existing prefix entries when rewriting the
|
|
|
126
127
|
file, but does not create new prefix keys, and generated tmux config no longer
|
|
127
128
|
binds the old action prefix chords.
|
|
128
129
|
|
|
129
|
-
Use an empty `keys` list to disable direct plain aliases for the action
|
|
130
|
+
Use an empty `keys` list to disable direct plain aliases for the action when
|
|
131
|
+
editing the file by hand:
|
|
130
132
|
|
|
131
133
|
```toml
|
|
132
134
|
[bindings.ProjectSidebarToggle]
|
|
133
135
|
keys = []
|
|
134
136
|
```
|
|
135
137
|
|
|
136
|
-
In Settings,
|
|
137
|
-
|
|
138
|
+
In Settings, reset removes the saved override and returns to the built-in
|
|
139
|
+
default. Legacy popup IDs such as
|
|
138
140
|
`sessionizer-sidebar` still read, but new writes use canonical toggle names
|
|
139
141
|
such as `ProjectSidebarToggle`, `NotifySidebarToggle`, `SessionPopupToggle`,
|
|
140
142
|
`AISplitPickerToggle`, `SettingsToggle`, and `ProjectSwitcherToggle`. Internal
|
|
141
143
|
popup commands use `Surface:Action` IDs and have surface-local conflict
|
|
142
|
-
domains
|
|
143
|
-
targets.
|
|
144
|
+
domains and remain visible in Settings when catalogued.
|
|
144
145
|
|
|
145
146
|
The Settings writer is deterministic and rewrites the supported saved subset
|
|
146
147
|
only. If the existing file has parse errors or unknown action IDs, Settings
|
|
@@ -149,7 +150,8 @@ shows the keymap error row and refuses to overwrite it until the file is fixed.
|
|
|
149
150
|
The file currently affects generated tmux config from `projmux tmux
|
|
150
151
|
print-config`, `projmux tmux install`, `projmux tmux print-app-config`,
|
|
151
152
|
`projmux tmux install-app`, and `projmux shell`. Terminal init adapters such as
|
|
152
|
-
Ghostty and Windows Terminal install built-in plain-byte mappings where needed
|
|
153
|
+
Ghostty and Windows Terminal install built-in plain-byte mappings where needed;
|
|
154
|
+
they do not read `keymap.toml` or copy saved aliases into terminal configs.
|
|
153
155
|
Changing terminal-layer mappings still requires rerunning `projmux init` and
|
|
154
156
|
restarting the terminal where that terminal requires it.
|
|
155
157
|
|
|
@@ -176,9 +178,10 @@ field with source labels: `project`, `global`, or `fallback`.
|
|
|
176
178
|
Renderer adapters can apply an already resolved `EffectiveTheme` to native
|
|
177
179
|
picker frame background/foreground SGR and tmux status/window `colourN`
|
|
178
180
|
background tokens. Settings and native project picker surfaces load global and
|
|
179
|
-
project `[theme]` values through the shared effective-theme source.
|
|
180
|
-
|
|
181
|
-
|
|
181
|
+
project `[theme]` values through the shared effective-theme source. Native
|
|
182
|
+
picker frames also apply the built-in fallback `background`/`foreground` tokens
|
|
183
|
+
so picker-owned padding, empty rows, footer rows, and preview gaps do not
|
|
184
|
+
inherit the terminal default background.
|
|
182
185
|
|
|
183
186
|
Resolver schema shape:
|
|
184
187
|
|
|
@@ -402,7 +405,7 @@ gated here.
|
|
|
402
405
|
|
|
403
406
|
| Mode | On push | On click |
|
|
404
407
|
| --- | --- | --- |
|
|
405
|
-
| `none` | no toast | n/a |
|
|
408
|
+
| `off` / `none` | no toast | n/a |
|
|
406
409
|
| `notify` | toast / notify-send fires | no click action |
|
|
407
410
|
| `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 |
|
|
408
411
|
|
|
@@ -414,26 +417,32 @@ up with an on-push auto-raise.
|
|
|
414
417
|
|
|
415
418
|
Resolution order (highest priority first):
|
|
416
419
|
|
|
417
|
-
1. `PROJMUX_DESKTOP_NOTIFY_MODE` env (`none` / `notify` / `raise`).
|
|
420
|
+
1. `PROJMUX_DESKTOP_NOTIFY_MODE` env (`off` / `none` / `notify` / `raise`).
|
|
418
421
|
2. `PROJMUX_DESKTOP_NOTIFY` env (legacy `on` / `off`; `on` → `notify`,
|
|
419
422
|
`off` → `none`).
|
|
420
|
-
3.
|
|
421
|
-
|
|
423
|
+
3. Saved Settings config
|
|
424
|
+
`${XDG_CONFIG_HOME:-$HOME/.config}/projmux/desktop-notify-mode`
|
|
425
|
+
(`off` / `notify` / `raise`).
|
|
426
|
+
4. Tmux global option `@projmux_desktop_notify_mode`.
|
|
427
|
+
5. Tmux global option `@projmux_desktop_notify` (legacy `1` / `0`, same
|
|
422
428
|
mapping as the env above).
|
|
423
|
-
|
|
429
|
+
6. Default = `raise` when running inside WSL with `$WT_SESSION` set
|
|
424
430
|
(Windows Terminal × WSL is the measured-working cell for osfocus
|
|
425
431
|
raise today); otherwise `notify`.
|
|
426
432
|
|
|
427
433
|
Migration is intentionally read-time. Users with the previous legacy
|
|
428
434
|
toggle set keep their behavior — `@projmux_desktop_notify=0` resolves to
|
|
429
435
|
`none`, `@projmux_desktop_notify=1` resolves to `notify`. The first
|
|
430
|
-
Settings press through the new row writes
|
|
431
|
-
|
|
436
|
+
Settings press through the new row writes `desktop-notify-mode`, mirrors the
|
|
437
|
+
new value into `@projmux_desktop_notify_mode` when tmux is live, and leaves the
|
|
438
|
+
legacy key unused. No eager rewrite of tmux state.
|
|
432
439
|
|
|
433
440
|
Toggle from Settings > Notifications > `Desktop notifications`. The
|
|
434
441
|
Settings info row labels the effective source as `env`, `env (legacy)`,
|
|
435
442
|
`setting`, `setting (legacy)`, or `default` so users see which rung of
|
|
436
|
-
the cascade pinned the value.
|
|
443
|
+
the cascade pinned the value. `projmux tmux apply` regenerates the live tmux
|
|
444
|
+
option from the saved Settings file; when that file is missing, apply writes
|
|
445
|
+
only the default for the current host.
|
|
437
446
|
|
|
438
447
|
Hook details for new-session lifecycle hooks and project-local
|
|
439
448
|
`.projmux/config.toml` live in [Hooks](hooks.md).
|
package/docs/hooks.md
CHANGED
|
@@ -206,7 +206,11 @@ desktop sender and receives positional arguments
|
|
|
206
206
|
`summary body urgency app-name tag group icon-path`. That `urgency` value is
|
|
207
207
|
the OS notification urgency, not the notify-queue severity. AI approval,
|
|
208
208
|
input, selection, and confirmation rows can stay critical in the queue and UI
|
|
209
|
-
while the desktop notification hook receives `normal`.
|
|
209
|
+
while the desktop notification hook receives `normal`. Live AI status badges
|
|
210
|
+
are a third surface: permission/input-required panes use the action-required
|
|
211
|
+
amber-orange status role, response-complete panes use success green, and
|
|
212
|
+
in-progress panes use progress yellow. They do not inherit the critical queue
|
|
213
|
+
severity, and permission/input status badges do not use red.
|
|
210
214
|
|
|
211
215
|
## Codex Hooks Engine
|
|
212
216
|
|
package/docs/keybindings.md
CHANGED
|
@@ -12,8 +12,7 @@ supported fallback guidance.
|
|
|
12
12
|
The recommended path when a key does not fire:
|
|
13
13
|
|
|
14
14
|
1. Try the key inside `projmux shell`.
|
|
15
|
-
2.
|
|
16
|
-
tmux, to see which bytes reach the process.
|
|
15
|
+
2. Run `projmux setup` outside tmux to see which bytes reach the process.
|
|
17
16
|
3. For supported terminals, preview `projmux init [terminal]`; add `--apply`
|
|
18
17
|
only after reviewing the merge.
|
|
19
18
|
4. For unsupported terminals, configure plain Meta bytes or add a tmux alias in
|
|
@@ -47,6 +46,12 @@ keymap actions, pane switching, window switching, and rename actions remain
|
|
|
47
46
|
visible. Transport-dependent rows show the default transport key separately
|
|
48
47
|
from editable plain aliases.
|
|
49
48
|
|
|
49
|
+
The Settings flow is intentionally simple: the root is one action list with
|
|
50
|
+
current key summaries, and each action detail shows the action, current
|
|
51
|
+
keybinding/aliases, `Add alias`, and reset. Diagnostic/probe/init workflows are
|
|
52
|
+
not first-class Settings tabs; use `projmux setup` and `projmux init` from the
|
|
53
|
+
terminal when key delivery needs remediation.
|
|
54
|
+
|
|
50
55
|
Optional direct aliases can be added for actions such as:
|
|
51
56
|
|
|
52
57
|
| Canonical action | Meaning |
|
|
@@ -67,19 +72,20 @@ without storing or replacing the transport default. Rename actions no longer
|
|
|
67
72
|
have a built-in terminal fallback; use tmux's prefix rename flow or configure
|
|
68
73
|
an explicit safe alias where the action is editable.
|
|
69
74
|
|
|
70
|
-
##
|
|
75
|
+
## Product Requirements
|
|
71
76
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
+
Settings > Keybindings stays a discovery surface. It must continue to expose
|
|
78
|
+
launch toggles, sidebar keymap actions, picker-local actions, pane switching,
|
|
79
|
+
window switching, and rename actions. The primary Settings flow is not the
|
|
80
|
+
terminal remediation surface: replace-primary, disable-default, typed fallback,
|
|
81
|
+
terminal mapping preview/apply, and init execution rows stay out of the action
|
|
82
|
+
detail.
|
|
77
83
|
|
|
78
|
-
|
|
79
|
-
Windows Terminal and Ghostty-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
84
|
+
The product model does not support `UserN` or `CSI-u` as fallback guidance.
|
|
85
|
+
Windows Terminal and Ghostty adapters use built-in plain Meta/control bytes or
|
|
86
|
+
xterm modifier sequences where possible. If a key cannot be represented that
|
|
87
|
+
way, leave it as a non-editable unsupported or diagnostic row instead of
|
|
88
|
+
preserving a User-key or CSI-u fallback.
|
|
83
89
|
|
|
84
90
|
## Picker Actions
|
|
85
91
|
|
|
@@ -131,8 +137,8 @@ names: `ProjectSidebarToggle`, `NotifySidebarToggle`, `SessionPopupToggle`,
|
|
|
131
137
|
## Diagnose: `projmux setup`
|
|
132
138
|
|
|
133
139
|
Run `projmux setup` outside tmux to find out which projmux keys reach the raw
|
|
134
|
-
terminal.
|
|
135
|
-
|
|
140
|
+
terminal. Settings > Keybindings remains the action/alias editor; setup is the
|
|
141
|
+
terminal delivery diagnostic.
|
|
136
142
|
|
|
137
143
|
| Status | Meaning |
|
|
138
144
|
| --- | --- |
|
|
@@ -46,8 +46,9 @@ native picker engine and is not a public dependency-policy change.
|
|
|
46
46
|
| fzf navigation keys | interactive selection in searchable lists | Covered | native maps modified-key `Ctrl-J` plus `Ctrl-N` to down and `Ctrl-P`/`Ctrl-K` to up when not claimed by a custom action; up/down-family movement is safe on empty lists; raw LF remains Enter for PTY compatibility; `TestNativeInteractiveSupportsFZFNavigationKeys`; `TestNativeInteractiveNavigationKeysAreNoopForEmptyList` |
|
|
47
47
|
| alternate-screen lifecycle | fzf fullscreen picker screen restore | Covered | native frame updates and screen exit return to column 0 before terminal control sequences, screen exit resets styles plus clears the alternate buffer from the home cursor before restore, and real TTY restores get a short settle window before caller handoff; `nativeScreenEnter`; `TestNativeInteractiveUsesAlternateScreen`; `TestRenderFullFrameUpdateAlwaysHomesAndWritesFrame` |
|
|
48
48
|
| frame content width | fzf border inner width | Covered | `ContentLayout` uses the frame inner width so separators and rows reach the right border; `TestRendererContentLayoutUsesFrameInnerWidth` |
|
|
49
|
+
| picker-owned app background | native picker frame interior | Covered for renderer-owned cells | `ThemeFromEffective` applies built-in fallback and explicit effective background/foreground SGR to the native frame, and frame rows resume the app style after embedded resets so content padding, empty no-footer rows, footer rows, scrollbars, and preview gaps do not leak terminal default background; `TestThemeFromEffectiveFallbackPaintsFrameBackground`; `TestRendererFrameBackgroundResumesAfterContentResetBeforePadding`; `TestNativeInteractiveNoFooterBlankRowsUseThemeBackground`; `TestNativeInteractiveSplitPreviewGapsUseThemeBackground`; `TestNativeInteractiveSettingsAIBadgeStyleLongPreviewClampsFrameRows` |
|
|
49
50
|
| tmux popup frame interaction | native picker popups launched through `popup-toggle` | Covered for native backend popups | `popup-toggle` passes tmux `display-popup -B` when `PROJMUX_PICKER_BACKEND=native`, so the native picker owns the visible frame instead of double-drawing with the tmux popup border; native Alt-1 uses a compact native-only minimum while fzf keeps the previous project sidebar minimum; Alt-1/Alt-2 sidebar heights reserve two bottom statusbar rows; Alt-2 notify sidebar keeps the fzf-like `24%` / min `64` baseline; `TestAppRunTmuxPopupToggleUsesBorderlessPopupForNativeBackend`; `TestSessionizerSidebarWidthKeepsFZFMinimum`; `TestSidebarPopupHeightLeavesStatusbarRows`; `TestNotifySidebarWidthMatchesFZFBaseline`; `TestAppRunTmuxPopupToggleKeepsNotifySidebarFZFSizingForNative` |
|
|
50
|
-
| optional native titlebar | native picker popup frame | Covered for empty-title compatibility and opt-in titles | `picker.Options.Title`; `RenderFrameWithTitle`; `ContentLayoutWithTitle`; empty titles keep the prior frame unchanged, non-empty titles render in a picker-owned section below the top border
|
|
51
|
+
| optional native titlebar | native picker popup frame | Covered for empty-title compatibility and opt-in titles | `picker.Options.Title`; `RenderFrameWithTitle`; `ContentLayoutWithTitle`; empty titles keep the prior frame unchanged, non-empty titles render in a picker-owned section below the top border, titlebar text/divider/chip gaps inherit the frame background/foreground instead of a separate titlebar overlay ANSI layer, and the native Alt-1 project sidebar opts into `Projects`; `TestRendererRenderFrameWithTitleKeepsDefaultWhenTitleEmpty`; `TestRendererRenderFrameWithTitleUsesTitlebarRow`; `TestRendererContentLayoutWithTitleReservesTitlebarRow`; `TestNativeInteractiveRendersOptionalTitlebar`; `TestSwitchCommandNativeSidebarSetsTitle` |
|
|
51
52
|
| redraw flicker/top clipping | keyboard navigation in exact-height tmux popup | Partially covered | native redraws use synchronized updates plus coalesced row diffs after the first frame, skip unchanged frames, render frame diffs before sidebar focus commands, frame rendering avoids trailing bottom-border CRLF, and screen exit clears the alternate buffer before restore; `TestNativeInteractiveWrapsRedrawsInSynchronizedUpdates`; `TestFrameUpdateRendererSkipsUnchangedFrame`; `TestFrameUpdateRendererCoalescesEachFrameUpdate`; `TestRendererRenderFrameUsesCRLFRowsForRawTTY`; `TestNativeInteractiveUsesAlternateScreen` |
|
|
52
53
|
|
|
53
54
|
## Native Surface Architecture
|
|
@@ -72,9 +73,11 @@ native picker engine and is not a public dependency-policy change.
|
|
|
72
73
|
## Frame Chrome ANSI
|
|
73
74
|
|
|
74
75
|
Native picker frame chrome is normalized in `internal/ui/projmuxpicker`.
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
76
|
+
Titlebar text, title dividers, and chip-strip gaps inherit the frame
|
|
77
|
+
background/foreground instead of applying a second titlebar overlay ANSI layer;
|
|
78
|
+
chip bodies can still carry active/inactive/disabled tones. Search prompt and
|
|
79
|
+
footer separators fill the available frame width, and header, row, footer, and
|
|
80
|
+
preview lines close any active SGR style before padding or frame borders can
|
|
78
81
|
inherit it. This phase does not add popup modes or change the `popup-toggle`
|
|
79
82
|
contract; native popups still rely on the existing borderless tmux popup path.
|
|
80
83
|
|
package/docs/npm-distribution.md
CHANGED
|
@@ -31,13 +31,15 @@ make npm-pack
|
|
|
31
31
|
or:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
scripts/package-npm.sh --version
|
|
34
|
+
scripts/package-npm.sh --version 1.2.3 --out /tmp/projmux-npm --pack
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
The script stages package directories under `dist/npm` by default. It builds
|
|
38
38
|
the Go binary for each supported platform, copies package metadata and docs,
|
|
39
|
-
updates package versions in the staged copies,
|
|
40
|
-
|
|
39
|
+
updates package versions in the staged copies, generates root
|
|
40
|
+
`optionalDependencies` for the supported platform packages using the same
|
|
41
|
+
version, verifies the staged metadata is internally consistent, then runs
|
|
42
|
+
`npm pack --dry-run` when `--pack` is set.
|
|
41
43
|
|
|
42
44
|
## Publish Order
|
|
43
45
|
|
package/docs/settings-ia.md
CHANGED
|
@@ -15,13 +15,21 @@ view-first layout:
|
|
|
15
15
|
actions live inside that view.
|
|
16
16
|
- `Settings > Project Picker > Project Root` shows effective and saved values
|
|
17
17
|
first, then the edit actions, then the explanatory hints.
|
|
18
|
-
- `Settings > Keybindings` is
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
- `Settings > Keybindings` is a single action list plus a simple action detail.
|
|
19
|
+
It does not expose `Bindings`, `Diagnostic`, `Probe`, or `Init` as first-class
|
|
20
|
+
chips/tabs in the Settings root flow.
|
|
21
|
+
- `Settings > Keybindings` is a keybinding discovery surface, not only a
|
|
22
|
+
launch-toggle editor. It must show `Toggle Project Sidebar` with the
|
|
22
23
|
guaranteed `Alt-1` / `M-1` default, plus sidebar-local commands, picker-local
|
|
23
24
|
commands, `Pane navigation`, `Window navigation`, and `Rename` groups or
|
|
24
25
|
equivalent searchable rows.
|
|
26
|
+
- `Settings > Keybindings > Action` keeps the user-facing edit path small:
|
|
27
|
+
action, current keybinding/aliases, `Add alias`, and reset. It does not offer
|
|
28
|
+
replace-primary, disable-default, typed-fallback, terminal mapping preview, or
|
|
29
|
+
terminal mapping apply rows.
|
|
30
|
+
- Terminal delivery remediation lives outside Settings primary flow. The
|
|
31
|
+
supported order is `projmux shell` first, then `projmux setup`, then
|
|
32
|
+
`projmux init` for supported terminal adapters.
|
|
25
33
|
- Rows that cannot safely be edited still stay visible. Mark diagnostic-only
|
|
26
34
|
rows with the delivery path and reason instead of hiding them or turning them
|
|
27
35
|
into unsupported editable aliases. Transport-dependent rows stay visible with
|
|
@@ -55,8 +63,8 @@ view-first layout:
|
|
|
55
63
|
`${XDG_CONFIG_HOME:-$HOME/.config}/projmux/ai-hook-actions.json`. It does not
|
|
56
64
|
edit catalog `install` values or run agent install/remove commands.
|
|
57
65
|
- `Settings > Labs` keeps experimental toggles, but keybindings no longer have a
|
|
58
|
-
visible Labs row. The hidden compatibility action
|
|
59
|
-
|
|
66
|
+
visible Labs row. The hidden compatibility action redirects to the
|
|
67
|
+
`Settings > Keybindings` action list, not to a diagnostic default.
|
|
60
68
|
- `Settings > Labs > Project Hooks` is overview-first. The Labs root opens the
|
|
61
69
|
overview, and the on/off mutation rows live one level deeper.
|
|
62
70
|
- `Settings > AI Settings` is view-first. The root contains `Default split
|
package/docs/statusbar.md
CHANGED
|
@@ -33,6 +33,25 @@ row 1 [#S] #{pane_current_path} ⎈ <ctx>/<ns> <git> %H:%M
|
|
|
33
33
|
clicks on tmux 3.4+, so a `run-shell` handler can't recover the
|
|
34
34
|
target after the fact — the Go dispatcher's
|
|
35
35
|
`isWindowListRangeToken` fallback is now defense-in-depth only.
|
|
36
|
+
Each window tab reserves a one-cell live pane attention prefix from
|
|
37
|
+
`projmux attention window #{window_id}` before the index. AI panes use the
|
|
38
|
+
semantic `@projmux_ai_badge_kind` first: approval/input-required panes use
|
|
39
|
+
the action-required amber-orange role, response-complete panes use the
|
|
40
|
+
non-critical success green role, and in-progress panes use the progress
|
|
41
|
+
yellow role. Red/critical is reserved for error, failure, and risk chrome;
|
|
42
|
+
permission or input-required status badges do not use it.
|
|
43
|
+
Legacy busy/reply title and attention-state markers remain the fallback, and
|
|
44
|
+
no-state windows render a blank placeholder so title alignment and click range
|
|
45
|
+
width stay stable. This live window-list badge is independent from the row-0
|
|
46
|
+
notify queue segment and from notify queue severity or desktop notification
|
|
47
|
+
urgency. For example, an approval request may remain a critical queued
|
|
48
|
+
notification while its live status badge renders action-required amber-orange.
|
|
49
|
+
Window-list badges and app pane-border badges use the same semantic priority,
|
|
50
|
+
with display style controlled by Settings > Appearance > AI badge style and persisted in
|
|
51
|
+
`~/.config/projmux/ai-badge-style`. The default is `dot`; `emoji` renders
|
|
52
|
+
`⏳` for approval/input-required, `✅` for response-complete, and `🔄` for
|
|
53
|
+
in-progress. `off` (also accepted as `minimal` when read from disk) preserves
|
|
54
|
+
the same spacing without drawing a marker.
|
|
36
55
|
The session, pwd, kube, and git segments on this row are wrapped
|
|
37
56
|
in `#[range=user|<id>]` ranges and dispatched through the projmux
|
|
38
57
|
handler. The standalone config also wraps the right-side `projmux`
|
|
@@ -95,9 +114,10 @@ When the notify block is wider than its cell budget, clipping shrinks the body
|
|
|
95
114
|
text first and appends an ellipsis while preserving project, state, agent, age,
|
|
96
115
|
and count metadata. If the segment is still too wide, the age is dropped next
|
|
97
116
|
while badges and the `+N` count stay visible when possible. Very narrow widths
|
|
98
|
-
fall back to
|
|
117
|
+
fall back to dotless clipped text plus the `+N` count when it fits; the final
|
|
99
118
|
hard-truncate path still closes with `#[default]` so later status segments do
|
|
100
|
-
not inherit notification styling.
|
|
119
|
+
not inherit notification styling. That dotless narrow fallback applies only to
|
|
120
|
+
the queued notify segment, not to the separate window-list live attention badge.
|
|
101
121
|
`usage` opens a native-framed detail HUD for the compact usage bar. It reads
|
|
102
122
|
the cached usage state in-process, keeps the existing `projmux usage` CLI
|
|
103
123
|
output shape unchanged for external consumers, aligns model/window rows with
|
package/docs/testing.md
CHANGED
|
@@ -54,3 +54,125 @@ desktop shell, or OS integration:
|
|
|
54
54
|
|
|
55
55
|
Keep those checks as manual or host-run smoke validation until a dedicated
|
|
56
56
|
host harness exists.
|
|
57
|
+
|
|
58
|
+
Use this smoke checklist when a change touches terminal delivery, host desktop
|
|
59
|
+
notifications, or reviewer confidence around those boundaries. If the change
|
|
60
|
+
does not touch those areas, copy the PR-note block below and mark the relevant
|
|
61
|
+
rows `not run`.
|
|
62
|
+
|
|
63
|
+
### Terminal Key Delivery
|
|
64
|
+
|
|
65
|
+
Run the raw key probe outside tmux, in the terminal emulator being claimed:
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
projmux setup --timeout 10s
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Observe:
|
|
72
|
+
|
|
73
|
+
- `Alt-1` through `Alt-5` report `OK plain`. These are the guaranteed
|
|
74
|
+
zero-config launch defaults.
|
|
75
|
+
- If a guaranteed key reports `MISS timeout`, preview a supported terminal
|
|
76
|
+
mapping with `projmux init ghostty` or `projmux init windows-terminal`,
|
|
77
|
+
apply it with the same command plus `--apply`, restart that terminal if
|
|
78
|
+
required, and rerun `projmux setup --timeout 10s`.
|
|
79
|
+
- Optional direct aliases and transport-dependent chords may be reported by
|
|
80
|
+
the probe, but they are not part of the guaranteed host smoke unless the PR
|
|
81
|
+
explicitly changes them.
|
|
82
|
+
|
|
83
|
+
Then run the app in the same terminal:
|
|
84
|
+
|
|
85
|
+
```sh
|
|
86
|
+
projmux shell
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Observe:
|
|
90
|
+
|
|
91
|
+
- `Alt-1` opens the project sidebar.
|
|
92
|
+
- `Alt-2` opens the notification sidebar.
|
|
93
|
+
- `Alt-3` opens the existing-session picker.
|
|
94
|
+
- `Alt-4` opens the AI split picker.
|
|
95
|
+
- `Alt-5` opens Settings.
|
|
96
|
+
- Pressing the same launch key again closes the popup instead of typing escape
|
|
97
|
+
bytes into the shell or picker input.
|
|
98
|
+
|
|
99
|
+
### WSL Toast
|
|
100
|
+
|
|
101
|
+
Run this from WSL with Windows Terminal available. The detached tmux server is
|
|
102
|
+
intentional: `projmux focus` falls back to the product desktop notification
|
|
103
|
+
path when there is no attached client to switch.
|
|
104
|
+
|
|
105
|
+
```sh
|
|
106
|
+
sock="${TMPDIR:-/tmp}/projmux-host-smoke.sock"
|
|
107
|
+
tmux -S "$sock" kill-server 2>/dev/null || true
|
|
108
|
+
tmux -S "$sock" new-session -d -s projmux-host-smoke 'sleep 600'
|
|
109
|
+
PROJMUX_DESKTOP_NOTIFY_MODE=notify \
|
|
110
|
+
projmux focus --socket "$sock" --target projmux-host-smoke --json
|
|
111
|
+
tmux -S "$sock" kill-server
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Observe:
|
|
115
|
+
|
|
116
|
+
- The JSON includes `"ok":true`, `"dispatch":"notify-only"`, and
|
|
117
|
+
`"reason":"no-attached-client"`.
|
|
118
|
+
- Windows shows a short projmux toast with `session ready:
|
|
119
|
+
projmux-host-smoke`.
|
|
120
|
+
- No visible PowerShell or console window remains open after the toast.
|
|
121
|
+
|
|
122
|
+
If the PR changes click-to-focus behavior, repeat with
|
|
123
|
+
`PROJMUX_DESKTOP_NOTIFY_MODE=raise`, click the toast, and record whether the
|
|
124
|
+
host terminal returns to the target. Otherwise leave click callbacks marked as
|
|
125
|
+
manual/not run.
|
|
126
|
+
|
|
127
|
+
### macOS GUI Notification
|
|
128
|
+
|
|
129
|
+
The built-in desktop sender is Linux/WSL-oriented. On macOS, smoke the
|
|
130
|
+
documented `PROJMUX_NOTIFY_HOOK` escape hatch with an `osascript` sender:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
hook="${TMPDIR:-/tmp}/projmux-macos-notify.sh"
|
|
134
|
+
cat >"$hook" <<'SH'
|
|
135
|
+
#!/bin/sh
|
|
136
|
+
title=${1:-projmux}
|
|
137
|
+
body=${2:-}
|
|
138
|
+
osascript \
|
|
139
|
+
-e 'on run argv' \
|
|
140
|
+
-e 'display notification (item 2 of argv) with title (item 1 of argv)' \
|
|
141
|
+
-e 'end run' \
|
|
142
|
+
"$title" "$body"
|
|
143
|
+
SH
|
|
144
|
+
chmod 0755 "$hook"
|
|
145
|
+
|
|
146
|
+
sock="${TMPDIR:-/tmp}/projmux-host-smoke.sock"
|
|
147
|
+
tmux -S "$sock" kill-server 2>/dev/null || true
|
|
148
|
+
tmux -S "$sock" new-session -d -s projmux-host-smoke 'sleep 600'
|
|
149
|
+
PROJMUX_NOTIFY_HOOK="$hook" \
|
|
150
|
+
projmux focus --socket "$sock" --target projmux-host-smoke --json
|
|
151
|
+
tmux -S "$sock" kill-server
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Observe:
|
|
155
|
+
|
|
156
|
+
- The JSON includes `"ok":true`, `"dispatch":"notify-only"`, and
|
|
157
|
+
`"reason":"no-attached-client"`.
|
|
158
|
+
- macOS shows a Notification Center banner with `session ready:
|
|
159
|
+
projmux-host-smoke`.
|
|
160
|
+
- If macOS prompts for notification permission, record that state in the PR
|
|
161
|
+
instead of treating the product command as verified.
|
|
162
|
+
|
|
163
|
+
### PR Note Template
|
|
164
|
+
|
|
165
|
+
```markdown
|
|
166
|
+
Host-only smoke validation:
|
|
167
|
+
|
|
168
|
+
- Docker-covered checks: `make test-integration`, `make test-install-smoke`,
|
|
169
|
+
and `make test-e2e` cover portable Linux tmux/config/notify behavior only.
|
|
170
|
+
- Terminal key delivery: not run / run on <terminal>; `projmux setup --timeout
|
|
171
|
+
10s` showed <result>; `Alt-1..5` app popup smoke <passed/failed/not run>.
|
|
172
|
+
- WSL toast: not run / run on <Windows + WSL distro>; detached-focus smoke
|
|
173
|
+
produced `dispatch=notify-only`; observed <toast/no toast/notes>.
|
|
174
|
+
- macOS GUI notification: not run / run on <macOS version>; hook smoke
|
|
175
|
+
produced `dispatch=notify-only`; observed <banner/permission prompt/notes>.
|
|
176
|
+
- Desktop notification click callbacks: not run unless this PR changes
|
|
177
|
+
click-to-focus behavior; result <notes>.
|
|
178
|
+
```
|
package/docs/theme-palette.md
CHANGED
|
@@ -41,6 +41,14 @@ onto these stable names:
|
|
|
41
41
|
| `critical` | destructive/error/critical state | settings remove/quit, notify critical badge, statusbar critical usage |
|
|
42
42
|
| `warning` | progress, pending, warning, busy state | AI busy/thinking indicators, notify pending title, usage warning |
|
|
43
43
|
|
|
44
|
+
AI semantic status badges use renderer-only state roles layered on top of that
|
|
45
|
+
inventory: `progress`, `success`, and `action_required`. The fallback contract
|
|
46
|
+
is progress yellow, success green, action-required amber-orange. These roles are
|
|
47
|
+
separate from notify queue severity and desktop notification urgency; an AI
|
|
48
|
+
approval row can be `critical` in the notify queue while the live status badge
|
|
49
|
+
uses `action_required`, not red. `critical` remains reserved for error, failure,
|
|
50
|
+
destructive, over-limit, or risk states.
|
|
51
|
+
|
|
44
52
|
Renderer-only role names such as `accent.ai`, `state.progress`, `git.branch`,
|
|
45
53
|
and trust colors remain in `internal/theme/palette.go` until Phase 2+ maps each
|
|
46
54
|
surface to the resolver tokens. The key product contract for this phase is that
|
|
@@ -127,10 +135,11 @@ Accents and state:
|
|
|
127
135
|
| `accent.action` | `141;205;142`, strong `122;199;173` | `colour29` bg / `colour230` fg |
|
|
128
136
|
| `accent.attention` | notify HUD background/project family | `colour53`, project `colour90` |
|
|
129
137
|
| `accent.ai` | notify agent `colour37` family | `colour37` bg / `colour121` fg |
|
|
130
|
-
| `state.progress` | `255;204;102`; switch attention/busy dot and pending notify title/bell/badge `colour220` | `colour220` |
|
|
131
|
-
| `state.
|
|
138
|
+
| `state.progress` | `255;204;102`; switch attention/busy dot, pane-border in-progress badge, and pending notify title/bell/badge `colour220` | `colour220` |
|
|
139
|
+
| `state.action_required` | AI approval/input-required status badge amber-orange; currently aliases the established warning token | `colour214` |
|
|
140
|
+
| `state.warning` | usage/status popup warning ANSI 256 wrapper; non-AI warning chrome | `colour214` |
|
|
132
141
|
| `state.danger` | `255;107;107` | `colour160` |
|
|
133
|
-
| `state.success` | settings/trust green families | `colour72`, `colour151` |
|
|
142
|
+
| `state.success` | settings/trust green families; pane-border response-complete badge | `colour72`, `colour151` |
|
|
134
143
|
| `state.ahead` | switch/git metadata and notify age ANSI 256 wrapper | `colour153` |
|
|
135
144
|
| `git.branch` | switch/sidebar branch badge uses the statusbar git branch block colors | `colour30` bg / `colour231` fg |
|
|
136
145
|
|
|
@@ -140,6 +149,7 @@ Surface-specific tokens:
|
|
|
140
149
|
| --- | --- |
|
|
141
150
|
| Native picker | current row, titlebar, rule, pointer, highlight, muted text, chip active/inactive/disabled |
|
|
142
151
|
| Statusbar row 1 | session identity, cwd secondary text, divider, git branch block, git dirty/staged/ahead/behind, settings action chip, clock |
|
|
152
|
+
| App pane borders | semantic AI badge marker style (`dot`, `emoji`, or spacing-preserving `off`) plus action-required/success/progress state color |
|
|
143
153
|
| Notify HUD/sidebar | line bg/fg, project badge, info/warn/crit/stale/gone badges, AI agent badge, count/age text |
|
|
144
154
|
| Usage HUD/popup | OK/warning/critical/over-limit bars and numbers, empty cells, muted sync age |
|
|
145
155
|
| Settings | add/type/open action, destructive remove/quit, back/cancel, info/read-only, dim description, root action/dim rows, trust trusted/stale/untrusted |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projmux",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.6",
|
|
4
4
|
"description": "tmux project session manager",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/crevissepartners/projmux#readme",
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
"README-ko.md",
|
|
24
24
|
"LICENSE"
|
|
25
25
|
],
|
|
26
|
-
"optionalDependencies": {
|
|
27
|
-
"@projmux/darwin-arm64": "0.6.5",
|
|
28
|
-
"@projmux/darwin-x64": "0.6.5",
|
|
29
|
-
"@projmux/linux-arm64": "0.6.5",
|
|
30
|
-
"@projmux/linux-x64": "0.6.5"
|
|
31
|
-
},
|
|
32
26
|
"scripts": {
|
|
33
27
|
"package:npm": "scripts/package-npm.sh",
|
|
34
28
|
"package:npm:pack": "scripts/package-npm.sh --pack"
|
|
29
|
+
},
|
|
30
|
+
"optionalDependencies": {
|
|
31
|
+
"@projmux/linux-x64": "0.6.6",
|
|
32
|
+
"@projmux/linux-arm64": "0.6.6",
|
|
33
|
+
"@projmux/darwin-x64": "0.6.6",
|
|
34
|
+
"@projmux/darwin-arm64": "0.6.6"
|
|
35
35
|
}
|
|
36
36
|
}
|