projmux 0.4.2 → 0.4.4

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.
Files changed (3) hide show
  1. package/README-ko.md +19 -16
  2. package/README.md +64 -79
  3. package/package.json +5 -5
package/README-ko.md CHANGED
@@ -82,7 +82,8 @@ projmux shell
82
82
  - [Go 1.24+](https://go.dev/dl/) — binary 설치/빌드에 필요.
83
83
  - [tmux](https://github.com/tmux/tmux/wiki/Installing) **≥ 3.4** — workspace 런타임. 이전 버전은 `display-popup -T` 등 projmux 가 사용하는 기능이 없습니다.
84
84
  - [fzf](https://github.com/junegunn/fzf#installation) **≥ 0.55** — popup/sidebar picker. 멀티라인 피커가 `--marker-multi-line`, `--gap-line`, `--highlight-line` 을 사용하며 모두 0.55 까지 도입됐습니다.
85
- - [zsh](https://zsh.sourceforge.io/) — `projmux shell` 이 만드는 앱 tmux 설정의 기본 shell.
85
+ - `bash`, `zsh`, `sh` 같은 Unix shell — `projmux shell` 이 만드는 앱 tmux
86
+ 설정은 절대 경로 `$SHELL` 을 사용하고, 없으면 `/bin/sh` 로 fallback 합니다.
86
87
  - [git](https://git-scm.com/downloads) — branch/status segment.
87
88
  - `stty` — POSIX 터미널 제어, `projmux setup` 에서 사용. macOS/Linux 기본 시스템에 이미 포함, Windows 호스트에선 해당 없음.
88
89
  - [kubectl](https://kubernetes.io/docs/tasks/tools/) — 선택, Kubernetes status segment 사용 시에만.
@@ -114,16 +115,17 @@ projmux version
114
115
 
115
116
  ### 선택: `PROJMUX_PROJDIR`
116
117
 
117
- `PROJMUX_PROJDIR` 은 projmux 가 picker/탐색에서 기본으로 사용할 프로젝트
118
- 루트입니다. 설정하지 않으면 projmux 내장된 source-root 탐색(`~/source`,
119
- `~/work`, `~/projects`, `~/src`, `~/code`, `~/source/repos`) 으로 자동
120
- fallback 합니다.
118
+ `PROJMUX_PROJDIR` 은 명시적으로 설정했을 때 projmux 가 picker/탐색에서 사용할
119
+ primary 프로젝트 루트입니다. 설정하지 않으면 projmux canonical repo root
120
+ 가정하지 않습니다. 탐색은 pin, 살아 있는 session, saved workdirs, 그리고 존재할
121
+ 때만 참고하는 약한 common-folder probe(`~/source`, `~/work`, `~/projects`,
122
+ `~/src`, `~/code`) 를 사용합니다.
121
123
 
122
124
  ```sh
123
- export PROJMUX_PROJDIR="$HOME/source/repos"
125
+ export PROJMUX_PROJDIR="/your/path"
124
126
  ```
125
127
 
126
- `~/.zshrc` (또는 사용 중인 shell rc 파일) 한 줄 추가하면 됩니다. 첫 실행
128
+ `~/.bashrc`, `~/.zshrc` 또는 사용 중인 shell rc 파일에 한 줄 추가하면 됩니다. 첫 실행
127
129
  이후에는 `~/.config/projmux/projdir` 에 memoize 되므로, 이후 env 가 없어도 같은
128
130
  루트가 유지됩니다.
129
131
 
@@ -134,7 +136,7 @@ prepend 됩니다. saved 파일에는 primary 만 memoize 됩니다.
134
136
 
135
137
  ```sh
136
138
  # Linux/macOS — primary repo + 보조 검색 root
137
- export PROJMUX_PROJDIR="$HOME/source/repos:/srv/work/repos"
139
+ export PROJMUX_PROJDIR="/main/repos:/srv/work/repos"
138
140
  ```
139
141
 
140
142
  #### 최초 설치 시 projdir 지정
@@ -217,12 +219,13 @@ PROJMUX_PROJDIR="/main/repos:/secondary/repos" projmux upgrade # Linux/macOS
217
219
  ## 프로젝트 탐색 방식
218
220
 
219
221
  `projmux switch`는 pinned directory, 현재 살아 있는 tmux session, 발견된
220
- project root를 합쳐 후보를 만듭니다. 기본 탐색은 존재하는 경우 `~/source`,
221
- `~/work`, `~/projects`, `~/src`, `~/code`, `~/source/repos` 같은 일반적인
222
- 소스 디렉터리를 우선합니다. `projmux settings`의 `Project Picker > Add
223
- Project...`는 filesystem root를 depth 3까지 스캔하므로 `~`나 `~rp` 밖의
224
- 프로젝트도 picker 후보로 추가할 있습니다. 세션 이름은 정규화된 디렉터리
225
- 경로에서 만들어지므로 같은 프로젝트는 다시 실행해도 같은 tmux 세션으로 연결됩니다.
222
+ project root를 합쳐 후보를 만듭니다. 명시적인 검색 root 없으면 기본 탐색은
223
+ 존재하는 경우 `~/source`, `~/work`, `~/projects`, `~/src`, `~/code` 같은 약한
224
+ common-folder probe 참고합니다. canonical `~/source/repos` root 가정하지
225
+ 않습니다. `projmux settings`의 `Project Picker > Add Project...`는 filesystem
226
+ root를 depth 3까지 스캔하므로 약한 probe 밖의 프로젝트도 picker 후보로 추가할
227
+ 있습니다. 세션 이름은 정규화된 디렉터리 경로에서 만들어지므로 같은 프로젝트는
228
+ 다시 실행해도 같은 tmux 세션으로 연결됩니다.
226
229
 
227
230
  탐색 root를 영구적으로 커스터마이즈하려면 Project Picker 섹션의 다음 항목을
228
231
  사용하세요:
@@ -253,8 +256,8 @@ projmux는 새 tmux 세션을 만들 때마다 선택적 사용자 스크립트
253
256
 
254
257
  | 변수 | 용도 |
255
258
  | --- | --- |
256
- | `PROJMUX_PROJDIR` | 현재 shell 의 기본 프로젝트 루트. OS-native PATH 형식 multi-value 지원: 첫 항목이 primary repo root (saved 파일에 memoize), 이후 항목은 managed-roots 검색 목록 앞에 prepend. |
257
- | `PROJMUX_MANAGED_ROOTS` | 콜론 구분 검색 root 목록. saved/default 보다 우선. |
259
+ | `PROJMUX_PROJDIR` | 현재 shell 의 명시적 primary 프로젝트 루트. OS-native PATH 형식 multi-value 지원: 첫 항목이 primary repo root (saved 파일에 memoize), 이후 항목은 managed-roots 검색 목록 앞에 prepend. |
260
+ | `PROJMUX_MANAGED_ROOTS` | 콜론 구분 검색 root 목록. saved/heuristic 목록보다 우선. |
258
261
  | `PROJMUX_NOTIFY_HOOK` | AI desktop notification 을 내장 sender 대신 받는 외부 실행 파일. |
259
262
  | `PROJMUX_USAGE_STATE_DIR` | AI 사용량 snapshot 캐시 디렉터리. 기본값은 `<state>/projmux/usage`. Dropbox/iCloud 같은 동기화 위치를 가리키게 하면 여러 머신 사이에서 authoritative 사용량을 공유할 수 있다. |
260
263
  | `PROJMUX_USAGE_DEBUG` | 비어 있지 않으면 `projmux status usage` 의 adapter 오류를 swallow 하지 않고 stderr 로 surface 한다. |
package/README.md CHANGED
@@ -7,6 +7,9 @@ sidebar navigation, generated keybindings, status metadata, and AI-pane
7
7
  attention signals. It can run as its own tmux app (`projmux shell`) or install
8
8
  the same behavior into your existing tmux server.
9
9
 
10
+ [![npm version](https://img.shields.io/npm/v/projmux?logo=npm)](https://www.npmjs.com/package/projmux)
11
+ [![CI](https://github.com/crevissepartners/projmux/actions/workflows/ci.yml/badge.svg)](https://github.com/crevissepartners/projmux/actions/workflows/ci.yml)
12
+
10
13
  [한국어 README](README-ko.md)
11
14
 
12
15
  ## Why projmux
@@ -29,26 +32,6 @@ for a daily terminal workspace:
29
32
  self-contained tmux app, or install the generated snippet into your normal
30
33
  tmux server.
31
34
 
32
- ## What's new in 0.4
33
-
34
- - **`projmux setup` / `projmux init`** — diagnose terminal key delivery,
35
- then auto-merge the right CSI-u bindings into Ghostty or Windows
36
- Terminal configs.
37
- - **`projmux doctor`** — runtime dependency report with minimum-version
38
- enforcement (tmux 3.4, fzf 0.55).
39
- - **`projmux focus`** — unified switch-client dispatch shared by the
40
- AI reply-ready flow and the status-bar notify click.
41
- - **Persistent notify queue** — `projmux notify push|list|ack|reconcile`
42
- with TTL, severity, source, and target metadata. See
43
- [notify-queue.md](docs/notify-queue.md).
44
- - **Authoritative usage tracking** — `projmux usage` reads Claude's
45
- OAuth usage endpoint and Codex's local rollout `rate_limits`. See
46
- [usage-tracking.md](docs/usage-tracking.md).
47
- - **Two-line clickable status bar** — row 0 keeps the native window
48
- list (click a tab to switch), row 1 splits a notify HUD pill (left)
49
- and a usage HUD bar (right). Both segments degrade gracefully on
50
- narrow status budgets. See [statusbar.md](docs/statusbar.md).
51
-
52
35
  ## What It Does
53
36
 
54
37
  - Creates or switches to tmux sessions from project directories.
@@ -81,10 +64,14 @@ Open the app once, then use its generated tmux bindings to:
81
64
 
82
65
  ## Requirements
83
66
 
84
- - [Go 1.24+](https://go.dev/dl/) — required to install or build the binary.
67
+ - [Node.js](https://nodejs.org/) and npm — required for the recommended npm
68
+ install path.
69
+ - [Go 1.24+](https://go.dev/dl/) — required only when installing with
70
+ `go install` or building from source.
85
71
  - [tmux](https://github.com/tmux/tmux/wiki/Installing) **≥ 3.4** — the workspace runtime. Earlier versions miss `display-popup -T` and other features projmux depends on.
86
72
  - [fzf](https://github.com/junegunn/fzf#installation) **≥ 0.55** — interactive popup/sidebar pickers. The multiline picker uses `--marker-multi-line`, `--gap-line`, and `--highlight-line`, which landed by 0.55.
87
- - [zsh](https://zsh.sourceforge.io/) default shell of the generated app config (`projmux shell`).
73
+ - A Unix shell such as `bash`, `zsh`, or `sh` — `projmux shell` uses your
74
+ absolute `$SHELL` for the generated app config, falling back to `/bin/sh`.
88
75
  - [git](https://git-scm.com/downloads) — branch/status metadata.
89
76
  - `stty` — POSIX terminal control, used by `projmux setup`. Already shipped by every macOS / Linux base system; not applicable on Windows hosts.
90
77
  - [kubectl](https://kubernetes.io/docs/tasks/tools/) — optional, only for the Kubernetes status segment.
@@ -92,40 +79,49 @@ Open the app once, then use its generated tmux bindings to:
92
79
  Desktop notifications: Linux uses `notify-send`; WSL routes Windows toasts via
93
80
  `powershell.exe`. Override either with `PROJMUX_NOTIFY_HOOK`.
94
81
 
95
- Run `projmux doctor` any time to verify everything is on `PATH` and that
96
- tmux/fzf meet the minimum supported versions.
82
+ Run `projmux doctor` any time to verify runtime dependencies are on `PATH`
83
+ and that tmux/fzf meet the minimum supported versions. Terminal key delivery
84
+ is diagnosed separately with `projmux setup`.
97
85
 
98
86
  ## Install
99
87
 
100
88
  ```sh
101
- go install github.com/crevissepartners/projmux/cmd/projmux@latest
89
+ npm install -g projmux
102
90
  ```
103
91
 
104
- This drops the binary in `$(go env GOBIN)` (when set) or `$(go env GOPATH)/bin`
105
- (default `~/go/bin`). Make sure that directory is on your `PATH`:
92
+ npm installs a small Node.js shim plus the matching platform binary package
93
+ for Linux and macOS on x64 or arm64. The shim marks the install as npm-managed
94
+ so `projmux update` and the Settings About screen can use the right upgrade
95
+ path.
96
+
97
+ Verify:
106
98
 
107
99
  ```sh
108
- export PATH="$(go env GOPATH)/bin:$PATH"
100
+ projmux version
109
101
  ```
110
102
 
111
- Verify:
103
+ If npm is not a fit for your machine, install with Go:
112
104
 
113
105
  ```sh
114
- projmux version
106
+ go install github.com/crevissepartners/projmux/cmd/projmux@latest
115
107
  ```
116
108
 
109
+ This drops the binary in `$(go env GOBIN)` (when set) or `$(go env GOPATH)/bin`
110
+ (default `~/go/bin`). Make sure that directory is on your `PATH`.
111
+
117
112
  ### Optional: `PROJMUX_PROJDIR`
118
113
 
119
- `PROJMUX_PROJDIR` is the default project root projmux uses for picker and
120
- discovery. It is optional when unset, projmux falls back to its built-in
121
- source-root discovery (`~/source`, `~/work`, `~/projects`, `~/src`, `~/code`,
122
- `~/source/repos`).
114
+ `PROJMUX_PROJDIR` is the primary project root projmux uses for picker and
115
+ discovery when you explicitly configure it. It is optional; when unset,
116
+ projmux does not assume a canonical repo root. Discovery still uses pins, live
117
+ sessions, saved workdirs, and weak common-folder probes (`~/source`, `~/work`,
118
+ `~/projects`, `~/src`, `~/code`) when they exist.
123
119
 
124
120
  ```sh
125
- export PROJMUX_PROJDIR="$HOME/source/repos"
121
+ export PROJMUX_PROJDIR="/your/path"
126
122
  ```
127
123
 
128
- Add the line to `~/.zshrc` (or your shell's rc file). The resolved value is
124
+ Add the line to `~/.bashrc`, `~/.zshrc`, or your shell's rc file. The resolved value is
129
125
  memoized to `~/.config/projmux/projdir` after first use, so later shells keep
130
126
  the same root even without the env var.
131
127
 
@@ -138,14 +134,13 @@ search list, so they participate in discovery just like
138
134
 
139
135
  ```sh
140
136
  # Linux/macOS — primary repo + secondary search root
141
- export PROJMUX_PROJDIR="$HOME/source/repos:/srv/work/repos"
137
+ export PROJMUX_PROJDIR="/main/repos:/srv/work/repos"
142
138
  ```
143
139
 
144
- #### Set the project root at install time
140
+ #### Set the project root during setup
145
141
 
146
142
  ```sh
147
- PROJMUX_PROJDIR=/your/path go install github.com/crevissepartners/projmux/cmd/projmux@latest
148
- PROJMUX_PROJDIR=/your/path projmux tmux apply
143
+ PROJMUX_PROJDIR=/your/path projmux shell
149
144
  ```
150
145
 
151
146
  The first invocation that sees the env var writes
@@ -173,13 +168,15 @@ projmux shell
173
168
  ```
174
169
 
175
170
  projmux owns this tmux server, its generated config, status bar, and popup
176
- bindings. The left status badge shows the current project name; the right side
177
- shows path, kube segment, git segment, and clock.
178
-
179
- If a key does not fire, run `projmux setup` to see which sequences your
180
- terminal swallows, then `projmux init [terminal] --apply` (auto-detects when
181
- no terminal is given) to merge the right CSI-u bindings into your terminal
182
- config. Dotfiles users on multi-machine setups should pass
171
+ bindings. Cooperative terminals get `Alt-1`..`Alt-5` immediately, with no
172
+ terminal config. The left status badge shows the current project name; the
173
+ right side shows path, kube segment, git segment, and clock.
174
+
175
+ If a key does not fire, run `projmux setup` outside tmux to see which
176
+ sequences your terminal swallows. For supported terminals, preview the
177
+ fallback with `projmux init [terminal]`, then apply it with
178
+ `projmux init [terminal] --apply` (auto-detects when no terminal is given).
179
+ Dotfiles users on multi-machine setups should pass
183
180
  `--allow-symlink` or `--config <path>` to make their intent explicit. Full
184
181
  flow and the manual CSI-u fallback are in
185
182
  [Terminal Keybindings](docs/keybindings.md).
@@ -190,50 +187,37 @@ for the supported versions.
190
187
 
191
188
  ## Upgrading
192
189
 
193
- `projmux upgrade` reinstalls the binary via `go install`, atomically replaces
194
- the active file, and reapplies the live tmux config so a running `-L projmux`
195
- server picks up new bindings without a restart.
190
+ The Settings About screen is the normal interactive update surface: it shows
191
+ cached release status, installer source, Check Updates, Update Now, and
192
+ release notes. The startup update prompt uses the same cache and never reaches
193
+ the network.
194
+ To refresh the cached release status manually, run:
196
195
 
197
196
  ```sh
198
- projmux upgrade # @latest, replace + apply
199
- projmux upgrade --ref @v0.2.0 # pin a specific tag
200
- projmux upgrade --ref @main # track a branch
201
- projmux upgrade --target /usr/local/bin/projmux # replace another path
202
- projmux upgrade --no-apply # skip 'projmux tmux apply'
203
- projmux upgrade --dry-run # print the steps only
197
+ projmux update check
204
198
  ```
205
199
 
206
- The upgrade reads `PROJMUX_PROJDIR` from the calling shell and memoizes the
207
- primary (first) path to `~/.config/projmux/projdir`, so the new binary keeps
208
- the same project root context as the one it replaces.
209
-
210
- Pass a new project root inline to atomically switch the binary and the saved
211
- projdir in one step:
212
-
213
- ```sh
214
- PROJMUX_PROJDIR=/new/path projmux upgrade
215
-
216
- # Multi-path also works; only the primary entry is persisted to the saved file.
217
- PROJMUX_PROJDIR="/main/repos:/secondary/repos" projmux upgrade # Linux/macOS
218
- # Windows: PROJMUX_PROJDIR="C:\main\repos;C:\secondary\repos"
219
- ```
200
+ Use Settings > About > Update or `projmux update apply` to update through the
201
+ detected installer. See [Upgrading](docs/upgrading.md) for npm, Go, GitHub
202
+ Release, and source-checkout details.
220
203
 
221
204
  ## Usage
222
205
 
223
206
  Day-to-day, projmux is driven by tmux keybindings inside `projmux shell` — see
224
207
  [Terminal Keybindings](docs/keybindings.md). For the full CLI surface (pins,
225
- preview state, status helpers, `upgrade`, etc.), run `projmux help` or
208
+ preview state, status helpers, updates, etc.), run `projmux help` or
226
209
  `<command> --help`.
227
210
 
228
211
  ## How It Finds Projects
229
212
 
230
213
  `projmux switch` combines pinned directories, live tmux sessions, and discovered
231
- project roots. The default discovery logic favors common source locations such
232
- as `~/source`, `~/work`, `~/projects`, `~/src`, `~/code`, and `~/source/repos`
233
- when they exist. `projmux settings` also has `Project Picker > Add Project...`,
234
- which scans those filesystem roots up to depth 3 so projects outside `~` and
235
- `~rp` can be added to the picker. Session names are derived from normalized
236
- directory paths, so a project keeps the same tmux session name across launches.
214
+ project roots. When no explicit search roots are configured, discovery uses
215
+ weak common-folder probes such as `~/source`, `~/work`, `~/projects`, `~/src`,
216
+ and `~/code` if they exist; it does not assume a canonical `~/source/repos`
217
+ root. `projmux settings` also has `Project Picker > Add Project...`, which
218
+ scans filesystem roots up to depth 3 so projects outside the weak probes can be
219
+ added to the picker. Session names are derived from normalized directory paths,
220
+ so a project keeps the same tmux session name across launches.
237
221
 
238
222
  For permanent search-root customization, the Project Picker section also
239
223
  includes:
@@ -264,8 +248,8 @@ and troubleshooting.
264
248
 
265
249
  | Variable | Purpose |
266
250
  | --- | --- |
267
- | `PROJMUX_PROJDIR` | Default project root for the current shell. Accepts an OS-native PATH-style multi-value: the first entry is the primary repo root (memoized to `~/.config/projmux/projdir`), and any additional entries are prepended to the managed-roots search list. |
268
- | `PROJMUX_MANAGED_ROOTS` | Colon-separated list of search roots. Overrides the saved/default list. |
251
+ | `PROJMUX_PROJDIR` | Explicit primary project root for the current shell. Accepts an OS-native PATH-style multi-value: the first entry is the primary repo root (memoized to `~/.config/projmux/projdir`), and any additional entries are prepended to the managed-roots search list. |
252
+ | `PROJMUX_MANAGED_ROOTS` | Colon-separated list of search roots. Overrides the saved/heuristic list. |
269
253
  | `PROJMUX_NOTIFY_HOOK` | External executable that receives AI desktop notifications instead of the built-in sender. |
270
254
  | `PROJMUX_USAGE_STATE_DIR` | Override directory for the AI-usage snapshot cache. Defaults to `<state>/projmux/usage`. Point this at a synced location (Dropbox, iCloud Drive, etc) to share authoritative usage between machines. |
271
255
  | `PROJMUX_USAGE_DEBUG` | When non-empty, surfaces adapter errors from `projmux status usage` to stderr instead of swallowing them. |
@@ -316,6 +300,7 @@ More documentation:
316
300
  - [Statusbar](docs/statusbar.md)
317
301
  - [Notify queue](docs/notify-queue.md)
318
302
  - [Usage tracking](docs/usage-tracking.md)
303
+ - [Upgrading](docs/upgrading.md)
319
304
  - [Hooks](docs/hooks.md)
320
305
  - [Migration Plan](docs/migration-plan.md)
321
306
  - [Repo Layout](docs/repo-layout.md)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "projmux",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "tmux project session manager",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/crevissepartners/projmux#readme",
@@ -22,10 +22,10 @@
22
22
  "LICENSE"
23
23
  ],
24
24
  "optionalDependencies": {
25
- "@projmux/darwin-arm64": "0.4.2",
26
- "@projmux/darwin-x64": "0.4.2",
27
- "@projmux/linux-arm64": "0.4.2",
28
- "@projmux/linux-x64": "0.4.2"
25
+ "@projmux/darwin-arm64": "0.4.4",
26
+ "@projmux/darwin-x64": "0.4.4",
27
+ "@projmux/linux-arm64": "0.4.4",
28
+ "@projmux/linux-x64": "0.4.4"
29
29
  },
30
30
  "scripts": {
31
31
  "package:npm": "scripts/package-npm.sh",