projmux 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-ko.md +89 -72
- package/README.md +21 -14
- package/docs/agent-workflow.md +8 -1
- package/docs/cli.md +51 -19
- package/docs/globalization.md +10 -8
- package/docs/hooks.md +28 -15
- package/docs/legacy-diagnostics-inventory.md +23 -0
- package/docs/operational-diagnostics.md +168 -2
- package/docs/resource-attribution.md +16 -0
- package/docs/session-restore.md +18 -0
- package/docs/settings-ia.md +8 -7
- package/docs/statusbar.md +12 -13
- package/docs/upgrading.md +8 -7
- package/package.json +5 -5
package/README-ko.md
CHANGED
|
@@ -4,38 +4,43 @@
|
|
|
4
4
|
<img src="docs/assets/projmux-icon.png" alt="projmux icon" width="112">
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
[](https://github.com/crevissepartners/projmux/actions/workflows/ci.yml)
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>여러 AI 에이전트를 함께 쓰는 tmux 기반 개발 작업 공간.</strong>
|
|
9
|
+
<br>
|
|
10
|
+
<em>Claude Code, Codex, Antigravity pane을 한곳에서 운영하고, 에이전트가 권한을 요청하거나 작업을 마치면 바로 알려 줍니다.</em>
|
|
11
|
+
</p>
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
<p align="center">
|
|
14
|
+
<a href="https://www.npmjs.com/package/projmux"><img src="https://img.shields.io/npm/v/projmux?logo=npm" alt="npm version"></a>
|
|
15
|
+
<a href="https://github.com/crevissepartners/projmux/actions/workflows/ci.yml"><img src="https://github.com/crevissepartners/projmux/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
16
|
+
<a href="LICENSE"><img src="https://img.shields.io/github/license/crevissepartners/projmux" alt="MIT license"></a>
|
|
17
|
+
<a href="README.md"><img src="https://img.shields.io/badge/lang-English-blue" alt="English README"></a>
|
|
18
|
+
</p>
|
|
15
19
|
|
|
16
20
|
<p align="center">
|
|
17
|
-
<img src="docs/assets/projmux-ai-attention.gif" alt="projmux AI
|
|
21
|
+
<img src="docs/assets/projmux-ai-attention.gif" alt="projmux의 AI 세션 재개, 권한 요청, 그룹형 알림 흐름" width="820">
|
|
18
22
|
<br>
|
|
19
|
-
<em>기존 AI
|
|
23
|
+
<em>기존 AI 세션을 이어서 열고 다른 프로젝트에서 작업하다가, 에이전트가 승인을 요청하면 그룹형 알림에서 확인하고 해당 작업 pane으로 돌아갑니다.</em>
|
|
20
24
|
</p>
|
|
21
25
|
|
|
22
|
-
##
|
|
26
|
+
## projmux란?
|
|
23
27
|
|
|
24
|
-
`projmux`는 프로젝트
|
|
25
|
-
프로젝트 전환,
|
|
26
|
-
|
|
27
|
-
Claude Code
|
|
28
|
-
|
|
28
|
+
`projmux`는 프로젝트 디렉터리마다 오래 유지되는 tmux 세션을 연결합니다.
|
|
29
|
+
프로젝트 전환, 세션 미리보기, AI 분할 창 실행, 상태 표시를 키보드 중심의
|
|
30
|
+
작업 공간 하나로 묶습니다.
|
|
31
|
+
Claude Code, Codex, Antigravity의 훅 연동을 관리하고, 각 에이전트의 권한
|
|
32
|
+
요청과 작업 완료 알림을 한곳에 모읍니다.
|
|
29
33
|
|
|
30
|
-
터미널
|
|
31
|
-
|
|
34
|
+
터미널 작업 공간을 명령 하나로 열고, 같은 키 조합으로 프로젝트와 tmux
|
|
35
|
+
창, pane, 알림, 설정 사이를 빠르게 오가고 싶을 때 사용합니다.
|
|
32
36
|
|
|
33
37
|
## 요구 사항
|
|
34
38
|
|
|
35
39
|
- [Node.js](https://nodejs.org/)와 npm: 기본 설치 경로에 필요합니다.
|
|
36
40
|
- [tmux](https://github.com/tmux/tmux/wiki/Installing) **3.4 이상**.
|
|
37
41
|
|
|
38
|
-
|
|
42
|
+
설치한 뒤에는 읽기 전용 점검 명령인 `projmux doctor`로 로컬 실행 환경을
|
|
43
|
+
확인하세요.
|
|
39
44
|
|
|
40
45
|
## 설치
|
|
41
46
|
|
|
@@ -44,95 +49,107 @@ npm install -g projmux
|
|
|
44
49
|
projmux version
|
|
45
50
|
```
|
|
46
51
|
|
|
47
|
-
npm
|
|
48
|
-
설치합니다. 일반
|
|
52
|
+
npm 패키지는 작은 Node.js 실행 연결부와 Linux/macOS x64·arm64용 projmux
|
|
53
|
+
실행 파일을 함께 설치합니다. 일반 사용자에게는 npm 설치를 권장합니다.
|
|
49
54
|
|
|
50
|
-
|
|
51
|
-
[
|
|
55
|
+
Go 또는 소스 코드로 직접 설치하는 방법, GitHub Release와 패키징에 관한
|
|
56
|
+
내용은 [설치 안내](docs/install.md)를 참고하세요.
|
|
52
57
|
|
|
53
58
|
## 빠른 시작
|
|
54
59
|
|
|
55
|
-
|
|
60
|
+
독립된 projmux용 tmux 환경을 엽니다.
|
|
56
61
|
|
|
57
62
|
```sh
|
|
58
63
|
projmux shell
|
|
59
64
|
```
|
|
60
65
|
|
|
61
|
-
|
|
66
|
+
projmux 안에서는 다음 키를 사용합니다.
|
|
67
|
+
|
|
68
|
+
- `Alt-1`: 프로젝트 사이드바를 엽니다.
|
|
69
|
+
- `Alt-2`: 알림 목록을 엽니다.
|
|
70
|
+
- `Alt-3`: 최근 창 목록(`Recent Windows`)을 엽니다.
|
|
71
|
+
- `Alt-4`: 이어서 열 AI 세션을 선택합니다.
|
|
72
|
+
- `Alt-5`: 설정을 엽니다.
|
|
73
|
+
- `Alt-7`: 새 AI 분할 창을 선택합니다.
|
|
62
74
|
|
|
63
|
-
- `Alt-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
- `Alt-4`: AI resume session picker.
|
|
67
|
-
- `Alt-5`: settings.
|
|
68
|
-
- `Alt-7`: AI split picker.
|
|
75
|
+
`Alt-1`부터 `Alt-5`까지는 별도 설정 없이 쓸 수 있는 기본 키입니다. `Alt-7`도
|
|
76
|
+
기본으로 제공되며 설정에서 바꿀 수 있습니다. 전체 키 구성은
|
|
77
|
+
[터미널 키 설정](docs/keybindings.md)을 참고하세요.
|
|
69
78
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
물리 키 어댑터가 자동으로 동작합니다. 그 밖의 경로에서는 tmux 밖에서
|
|
75
|
-
`projmux setup`을 실행한 뒤, 지원 터미널에서는
|
|
76
|
-
`projmux setup terminal [terminal] --apply`를 사용하세요.
|
|
79
|
+
키가 동작하지 않는다면 macOS 배포본의 `projmux shell`에서는 접근성 권한을
|
|
80
|
+
한 번 승인하세요. 이후 물리 키 어댑터가 자동으로 동작합니다. 그 밖의
|
|
81
|
+
환경에서는 tmux 밖에서 `projmux setup`을 실행한 다음, 지원되는 터미널에
|
|
82
|
+
`projmux setup terminal [terminal] --apply`를 적용하세요.
|
|
77
83
|
|
|
78
84
|
## 일상 사용
|
|
79
85
|
|
|
80
|
-
-
|
|
81
|
-
|
|
82
|
-
-
|
|
83
|
-
|
|
84
|
-
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
86
|
+
- 프로젝트 디렉터리를 고르면 projmux가 해당 tmux 세션을 만들거나 기존
|
|
87
|
+
세션을 다시 사용합니다.
|
|
88
|
+
- 자주 쓰는 프로젝트는 `pin`으로 고정해 목록 위쪽에서 쉽게 찾을 수
|
|
89
|
+
있습니다.
|
|
90
|
+
- 전환하기 전에 창(window)과 pane, Git 브랜치, Kubernetes 컨텍스트, AI pane
|
|
91
|
+
상태를 미리 확인할 수 있습니다.
|
|
92
|
+
- 기존 Claude, Codex, Antigravity 대화를 이어서 열거나 projmux가 관리하는 새
|
|
93
|
+
AI 분할 창을 만들 수 있습니다.
|
|
94
|
+
- 권한 요청과 작업 완료 알림을 에이전트별로 묶어 보고, 확인이 필요한
|
|
95
|
+
pane으로 곧바로 이동할 수 있습니다.
|
|
96
|
+
- 읽기 전용 `Resource Inspector`에서 프로젝트, 창, pane별 CPU와 RSS 사용량을
|
|
97
|
+
확인할 수 있습니다. 현재 Linux/tmux 환경을 지원합니다.
|
|
98
|
+
- 창과 pane 배치, shell 작업 디렉터리, 지원되는 AI 세션 재개 정보를
|
|
99
|
+
`Session State` 스냅샷으로 저장하고 미리 볼 수 있습니다.
|
|
100
|
+
- 환경 변수를 직접 편집하지 않고 `Settings > Project Picker`에서 검색 루트와
|
|
101
|
+
작업 디렉터리를 추가할 수 있습니다.
|
|
102
|
+
- `Settings > About > Update` 또는 `projmux update apply`로 업그레이드할 수
|
|
103
|
+
있습니다.
|
|
90
104
|
|
|
91
105
|
<p align="center">
|
|
92
|
-
<img src="docs/assets/projmux-shell-sidebar.gif" alt="projmux
|
|
106
|
+
<img src="docs/assets/projmux-shell-sidebar.gif" alt="projmux의 프로젝트 전환과 Codex 작업 흐름" width="820">
|
|
93
107
|
<br>
|
|
94
|
-
<em
|
|
108
|
+
<em>프로젝트를 전환하고 Codex pane을 연 뒤 완료 알림을 확인합니다.</em>
|
|
95
109
|
</p>
|
|
96
110
|
|
|
97
|
-
`PROJMUX_PROJDIR`,
|
|
98
|
-
|
|
99
|
-
|
|
111
|
+
`PROJMUX_PROJDIR`, 관리 루트, 알림, 사용량 추적에 관한 자세한 내용은
|
|
112
|
+
[설정](docs/configuration.md)을 참고하세요. 설치 방식에 따른 업데이트 동작은
|
|
113
|
+
[업그레이드 안내](docs/upgrading.md)에 정리되어 있습니다.
|
|
100
114
|
|
|
101
115
|
## 멀티 에이전트 워크플로
|
|
102
116
|
|
|
103
|
-
하나의 tmux
|
|
104
|
-
|
|
105
|
-
|
|
117
|
+
하나의 tmux 창에 shell과 projmux가 관리하는 Claude, Codex, Antigravity pane을
|
|
118
|
+
나란히 띄울 수 있습니다. 프로젝트와 pane 사이를 오가며 작업해도 projmux가
|
|
119
|
+
에이전트별 권한 요청과 완료 알림을 그룹형 알림함에 모아 줍니다.
|
|
106
120
|
|
|
107
121
|
<p align="center">
|
|
108
|
-
<img src="docs/assets/projmux-three-pane-workflow.gif" alt="projmux shell, Codex, Claude 3-pane
|
|
122
|
+
<img src="docs/assets/projmux-three-pane-workflow.gif" alt="projmux의 shell, Codex, Claude 3-pane 작업 흐름" width="820">
|
|
109
123
|
<br>
|
|
110
|
-
<em
|
|
124
|
+
<em>shell, Codex, Claude pane을 오가며 서로 다른 작업을 진행하고, 완료 알림은 한곳에서 확인합니다.</em>
|
|
111
125
|
</p>
|
|
112
126
|
|
|
113
127
|
## 에이전트 스킬 자동화
|
|
114
128
|
|
|
115
|
-
AI
|
|
116
|
-
|
|
129
|
+
AI 도구에서도 같은 projmux 명령줄 도구(CLI)를 호출해 projmux가 관리하는
|
|
130
|
+
pane을 열고 작업 지시를 전달할 수 있습니다.
|
|
117
131
|
|
|
118
132
|
```sh
|
|
119
133
|
projmux ai split --agent codex right -- "Review the retry logic."
|
|
120
134
|
```
|
|
121
135
|
|
|
122
|
-
Claude, Codex
|
|
123
|
-
[AI
|
|
136
|
+
Claude, Codex를 비롯한 여러 에이전트용 템플릿과 이름 규칙은
|
|
137
|
+
[AI 에이전트 바로가기](docs/ai-agent-shortcuts.md)에 정리되어 있습니다.
|
|
124
138
|
|
|
125
139
|
## 추가 문서
|
|
126
140
|
|
|
127
|
-
- [
|
|
128
|
-
- [
|
|
129
|
-
- [
|
|
130
|
-
- [AI
|
|
131
|
-
- [CLI
|
|
132
|
-
- [
|
|
133
|
-
- [
|
|
134
|
-
- [
|
|
135
|
-
- [
|
|
141
|
+
- [설치 안내](docs/install.md)
|
|
142
|
+
- [설정](docs/configuration.md)
|
|
143
|
+
- [터미널 키 설정](docs/keybindings.md)
|
|
144
|
+
- [AI 에이전트 바로가기](docs/ai-agent-shortcuts.md)
|
|
145
|
+
- [CLI 명령어](docs/cli.md)
|
|
146
|
+
- [상태 표시줄](docs/statusbar.md)
|
|
147
|
+
- [훅](docs/hooks.md)
|
|
148
|
+
- [사용량 추적](docs/usage-tracking.md)
|
|
149
|
+
- [Resource Inspector](docs/resource-attribution.md)
|
|
150
|
+
- [Session State](docs/session-restore.md)
|
|
151
|
+
- [운영 진단](docs/operational-diagnostics.md)
|
|
152
|
+
- [에이전트 작업 흐름](docs/agent-workflow.md)
|
|
136
153
|
|
|
137
154
|
## 개발
|
|
138
155
|
|
|
@@ -143,8 +160,8 @@ make fix
|
|
|
143
160
|
make test
|
|
144
161
|
```
|
|
145
162
|
|
|
146
|
-
|
|
147
|
-
[
|
|
163
|
+
기여자를 위한 자세한 내용은 [테스트](docs/testing.md),
|
|
164
|
+
[구조](docs/architecture.md), [저장소 구성](docs/repo-layout.md)을 참고하세요.
|
|
148
165
|
|
|
149
166
|
## 라이선스
|
|
150
167
|
|
package/README.md
CHANGED
|
@@ -23,9 +23,9 @@ projmux shell
|
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
<p align="center">
|
|
26
|
-
<img src="docs/assets/projmux-ai-attention.gif" alt="projmux AI
|
|
26
|
+
<img src="docs/assets/projmux-ai-attention.gif" alt="projmux AI session resume, agent permission, and grouped notification workflow" width="820">
|
|
27
27
|
<br>
|
|
28
|
-
<em>Resume an existing AI session, keep working in another project, then
|
|
28
|
+
<em>Resume an existing AI session, keep working in another project, then return through grouped notifications when the agent needs approval.</em>
|
|
29
29
|
</p>
|
|
30
30
|
|
|
31
31
|
## Why
|
|
@@ -34,8 +34,8 @@ Six tmux windows. Each one is running Claude Code, Codex, or Antigravity on a
|
|
|
34
34
|
different repo. Three are idle. One is waiting on a permission prompt. One
|
|
35
35
|
crashed an hour ago and you have no idea which.
|
|
36
36
|
|
|
37
|
-
projmux
|
|
38
|
-
|
|
37
|
+
projmux manages Claude Code, Codex, and Antigravity hook integrations, including
|
|
38
|
+
Antigravity's hook/statusline wiring, shows live per-pane state in the tmux
|
|
39
39
|
status bar, and lets one keystroke take you to the pane that actually needs
|
|
40
40
|
you. It also remembers each agent's resume id, so after a reboot every pane
|
|
41
41
|
comes back as the *same* conversation — not a fresh one.
|
|
@@ -91,16 +91,20 @@ fallbacks.
|
|
|
91
91
|
- Pin important projects so they stay easy to reach.
|
|
92
92
|
- Preview windows, panes, git branch, Kubernetes context, and AI pane state
|
|
93
93
|
before switching.
|
|
94
|
-
- Resume an existing Claude or
|
|
95
|
-
split.
|
|
96
|
-
- Review permission and completion events
|
|
97
|
-
|
|
94
|
+
- Resume an existing Claude, Codex, or Antigravity conversation, or open a new
|
|
95
|
+
managed AI split.
|
|
96
|
+
- Review grouped permission and completion events, then jump directly to the
|
|
97
|
+
pane that needs attention.
|
|
98
|
+
- Inspect live project, window, and pane CPU/RSS with the read-only Resource
|
|
99
|
+
Inspector on Linux/tmux.
|
|
100
|
+
- Save and inspect Session State snapshots for window/pane layouts, shell cwd,
|
|
101
|
+
and supported AI resumes.
|
|
98
102
|
- Use Settings > Project Picker to add roots and workdirs without editing env
|
|
99
103
|
vars.
|
|
100
104
|
- Use Settings > About > Update or `projmux update apply` to upgrade.
|
|
101
105
|
|
|
102
106
|
<p align="center">
|
|
103
|
-
<img src="docs/assets/projmux-shell-sidebar.gif" alt="projmux project switch and managed Codex
|
|
107
|
+
<img src="docs/assets/projmux-shell-sidebar.gif" alt="projmux project switch and managed Codex workflow" width="820">
|
|
104
108
|
<br>
|
|
105
109
|
<em>Switch projects, launch a managed Codex pane, and review its completion notification.</em>
|
|
106
110
|
</p>
|
|
@@ -111,14 +115,14 @@ For update behavior by installer type, see [Upgrading](docs/upgrading.md).
|
|
|
111
115
|
|
|
112
116
|
## Multi-Agent Workflow
|
|
113
117
|
|
|
114
|
-
Keep a shell and
|
|
115
|
-
Move between
|
|
116
|
-
permission and completion events in one
|
|
118
|
+
Keep a shell and managed Claude, Codex, or Antigravity panes visible in the
|
|
119
|
+
same tmux window. Move between projects and panes while projmux collects agent
|
|
120
|
+
permission and completion events in one grouped inbox.
|
|
117
121
|
|
|
118
122
|
<p align="center">
|
|
119
|
-
<img src="docs/assets/projmux-three-pane-workflow.gif" alt="projmux shell, Codex, and Claude
|
|
123
|
+
<img src="docs/assets/projmux-three-pane-workflow.gif" alt="projmux shell, Codex, and Claude three-pane workflow" width="820">
|
|
120
124
|
<br>
|
|
121
|
-
<em>Move across
|
|
125
|
+
<em>Move across shell, Codex, and Claude panes while independent tasks report back through one notification queue.</em>
|
|
122
126
|
</p>
|
|
123
127
|
|
|
124
128
|
## Automation With Agent Skills
|
|
@@ -143,6 +147,9 @@ Templates and naming conventions for Claude, Codex, and other agents are in
|
|
|
143
147
|
- [Statusbar](docs/statusbar.md)
|
|
144
148
|
- [Hooks](docs/hooks.md)
|
|
145
149
|
- [Usage tracking](docs/usage-tracking.md)
|
|
150
|
+
- [Resource Inspector](docs/resource-attribution.md)
|
|
151
|
+
- [Session State](docs/session-restore.md)
|
|
152
|
+
- [Operational Diagnostics](docs/operational-diagnostics.md)
|
|
146
153
|
- [Agent Workflow](docs/agent-workflow.md)
|
|
147
154
|
|
|
148
155
|
## Development
|
package/docs/agent-workflow.md
CHANGED
|
@@ -30,6 +30,8 @@
|
|
|
30
30
|
- `make fix`: safe automatic fixes such as `go fix` and repository-approved cleanup steps.
|
|
31
31
|
- `make npm-pack`: macOS-hosted local npm binary package staging and `npm pack --dry-run` for the root package plus platform packages, including native-key-adapter checks for both Darwin architectures; release staging reuses the release matrix archives.
|
|
32
32
|
- `make security`: pinned govulncheck, gosec, staticcheck, gitleaks history/current-tree, actionlint, and shellcheck gates. Reviewed gosec/staticcheck findings use checked-in fingerprint/count baselines so only new findings fail.
|
|
33
|
+
- `make test`: lifecycle hook context coverage verifies that the production client supplies `projmux` socket metadata, standard persistent and ephemeral `post-create` receive the exact non-empty pane id returned by session creation, `pre-create` receives no pane id before creation, and empty socket/pane values are omitted from the hook environment.
|
|
34
|
+
- `make test`: atomic project and private-global config writes preserve existing regular-file metadata, resolve valid relative and multi-hop symlinks to the final target without replacing link inodes, retain `0644`/`0600` defaults for missing destinations, recover dangling symlinks as regular files, and preserve original content with no temp artifacts across resolve/stat/create/write/close/chown/chmod/rename failures. Source-level global and Settings project writer tests exercise the production entrypoints with isolated home/repository paths.
|
|
33
35
|
- `make test`: fast unit coverage for app-layer AI split native agent launch/selective popup-toggle/settings/status/notification parity including AI pane option metadata, watcher metadata bootstrap for existing panes, capture-backed reply detection, missing-pane watcher shutdown, armed focus-only reply badge clearing, busy attention preservation on focus clear, manual AI topic preservation while watcher status still updates, agent-labeled desktop notification message context with pane-title-first body text, global/project-local lifecycle hook dispatch for post-create/pre-create/post-attach/send-noti with project hook and `.projmux/config.toml` trust-store hashing plus env/settings kill-switch gating, declarative startup command and hook run coverage, `send-noti` stdin JSON delivery plus `PROJMUX_NOTIFY_*` env payload, notify queue write success/failure/depth-guard dispatch rules, notify/statusbar/sidebar origin-client focus routing, project config env/kube session environment application, Settings project config env/kube/startup form writes with trust-store refresh and preserved hook commands, startup command send-keys orchestration plus startup pane replay markers, pre-create abort behavior, and shared projmux notification icon paths, and scoped even row/column resizing after shell and agent splits, status-bar git/kube segment parity including muted git branch block styling, compact dirty/staged/ahead/behind state colors, and bounded git/kube child execution, statusbar pwd display-only native-framed path popup with shared popup-wait-key/no-extra-payload-line command coverage, no clipboard or tmux buffer copy, and popup-wait-key cursor/raw-mode restore coverage, statusbar usage native HUD popup alignment/height-budget/threshold palette/muted sync-staleness/fallback coverage without raw CLI popup or popup-toggle stacking, statusbar settings click popup fallback and settings chip right-edge rendering without default trailing space, popup-toggle stale marker recovery, isolated `projmux shell` tmux app launch/config generation including home fallback plus project-context default session targeting from `PROJMUX_CWD` or nearest project marker, app-owned project-name statusbar layout, distinct project badge color, and quiet debounced session-state autosave command/app-config trigger, shell-entry welcome release prompt and inline update handling, shell update skip-by-latest-tag behavior plus best-effort stale-cache refresh, pane/window keybindings, keymap.toml tmux override rendering/stale unbinds including retired direct/UserKey cleanup, Settings Keybindings root/list/detail capture flows including parse-error rows, unsafe raw capture and timeout guards, disable/reset writes, app config regeneration, live tmux source-file reload, no-live-tmux save behavior, and stage-by-stage apply recovery copy, window rename bindings, pane rename helper/binding, pane-exit rebalance command/hooks, hook-pane and after-select-pane based attention focus hooks, attention badge toggle/clear/list/window rendering, attach/current/kill/pin/preview/prune/sessions/session-popup/settings commands, switch, tag, tmux helper commands, update status/check/apply cache and installer detection including GitHub Release binary asset selection/extraction/replacement, doctor versioned read-only report/section/verbosity contracts, AI notify integration diagnostics, and Session State resume metadata diagnostics, Settings AI notify integration diagnostics read-only status/conflict/CLI guidance, and Settings About update status/check action wiring, untitled standalone popup-toggle marker close/config install, direct popup minimum sizing, AI picker minimum width and height, sidebar minimum width and compact badge spacing, preview select writes, popup render output after cycling, switch picker pin action behavior without inline settings rows, nested settings hub sections for AI defaults, project picker filesystem scan/pin actions, Project Root settings source/shadowing/set/current/clear flows, app/keybinding info including Ctrl-M rename forwarding, and About version/source rendering, switch picker focused-session kill, switch picker launcher-key abort bindings, switch explicit project-root, unconfigured-root, and weak managed-root heuristic parity, switch popup hiding new-session candidates while sidebar keeps create-capable rows, switch row project-name display with `~` pinned to the top and live-session-first sorting, pretty-path, preview-context including kube context/namespace, switch settings subcommand flows including add-current-pin, interactive add-pin picker, and settings label/preview polish including Phase 2 Settings/hookmaker/project-startup/trust/quit destructive row color regression strings, native preview wiring, baseline picker surface parity including prompt/footer/header fallback without app-name filler and search-key scoped card matching, sidebar compact action-only key footer, sidebar preview-window/start-position behavior without focus-time session switching, sidebar row/window ANSI styling with pane-aggregated attention badge state and AI topic labels, Alt+2/Alt+3 legacy popup row, preview-window, pane metadata, and pane-snapshot parity, switch read0 card rows with active/inactive title styling, right-side status badges, combined directory/git metadata with muted inactive branch styling and bounded slow-repository branch enrichment, statusbar-matched block window tabs with window attention badges, read0 expect-key action parsing, restored pin/tag card badges, and restrained selected-row marker styling, switch preview metadata without duplicated directory/git rows, preview metadata rendering, popup pane display names for AI agents, AI topics, and shell commands, switch preview cycle bindings, sessions picker preview/cycle/open/kill wiring including attached-session fallback behavior, sessions picker launcher-key abort bindings, popup/switch preview summary formatting, popup sessions tmux entry helpers, switch/popup/session rendering, session identity, session-state Claude/Codex/Antigravity resume and declarative startup replay, session snapshot capture/autosave recipe classification including save/autosave pre-capture resume metadata refresh from live AI session ids including Antigravity conversation ids, Claude transcript paths, and Codex rollout log cwd matching/ambiguity skips, candidate discovery, config path derivation, popup preview read-models, and pure state rules including preview, tag, and lifecycle stores.
|
|
34
36
|
- `make test`: fast unit coverage for app-layer AI split native agent launch/selective popup-toggle/settings/status/notification parity including AI pane option metadata, watcher metadata bootstrap for existing panes, capture-backed reply detection, missing-pane watcher shutdown, armed focus-only reply badge clearing, busy attention preservation on focus clear, manual AI topic preservation while watcher status still updates, agent-labeled desktop notification message context with pane-title-first body text, global/project-local lifecycle hook dispatch for post-create/pre-create/post-attach/send-noti with project hook and `.projmux/config.toml` trust-store hashing plus env/settings kill-switch gating, declarative startup command and hook run coverage, `send-noti` stdin JSON delivery plus `PROJMUX_NOTIFY_*` env payload, notify queue write success/failure/depth-guard dispatch rules, notify/statusbar/sidebar origin-client focus routing, project config env/kube session environment application, Settings project config env/kube/startup form writes with trust-store refresh and preserved hook commands, startup command send-keys orchestration plus startup pane replay markers, pre-create abort behavior, and shared projmux notification icon paths, and scoped even row/column resizing after shell and agent splits, status-bar git/kube segment parity including muted git branch block styling and compact dirty/staged/ahead/behind state colors, statusbar pwd display-only native-framed path popup with shared popup-wait-key/no-extra-payload-line command coverage, no clipboard or tmux buffer copy, and popup-wait-key cursor/raw-mode restore coverage, statusbar usage native HUD popup alignment/height-budget/threshold palette/muted sync-staleness/fallback coverage without raw CLI popup or popup-toggle stacking, statusbar settings click popup fallback and settings chip right-edge rendering without default trailing space, popup-toggle stale marker recovery, isolated `projmux shell` tmux app launch/config generation including home fallback plus project-context default session targeting from `PROJMUX_CWD` or nearest project marker, app-owned project-name statusbar layout, distinct project badge color, and quiet debounced session-state autosave command/app-config trigger, shell-entry welcome release prompt and inline update handling, shell update skip-by-latest-tag behavior plus best-effort stale-cache refresh, pane/window keybindings, keymap.toml tmux override rendering/stale unbinds including retired direct/UserKey cleanup, Settings Keybindings root/list/detail capture flows including parse-error rows, unsafe raw capture and timeout guards, disable/reset writes, app config regeneration, live tmux source-file reload, no-live-tmux save behavior, and stage-by-stage apply recovery copy, window rename bindings, pane rename helper/binding, pane-exit rebalance command/hooks, hook-pane and after-select-pane based attention focus hooks, attention badge toggle/clear/list/window rendering, attach/current/kill/pin/preview/prune/sessions/session-popup/settings commands, switch, tag, tmux helper commands, update status/check/apply cache and installer detection including GitHub Release binary asset selection/extraction/replacement, doctor versioned read-only report/section/verbosity contracts, AI notify integration diagnostics, and Session State resume metadata diagnostics, Settings AI notify integration diagnostics read-only status/conflict/CLI guidance, and Settings About update status/check action wiring, untitled standalone popup-toggle marker close/config install, direct popup minimum sizing, AI picker minimum width and height, sidebar minimum width and compact badge spacing, preview select writes, popup render output after cycling, switch picker pin action behavior without inline settings rows, nested settings hub sections for AI defaults, project picker filesystem scan/pin actions, Project Root settings source/shadowing/set/current/clear flows, app/keybinding info including Ctrl-M rename forwarding, and About version/source rendering, switch picker focused-session kill, switch picker launcher-key abort bindings, switch explicit project-root, unconfigured-root, and weak managed-root heuristic parity, switch popup hiding new-session candidates while sidebar keeps create-capable rows, switch row project-name display with `~` pinned to the top and live-session-first sorting, pretty-path, preview-context including kube context/namespace, switch settings subcommand flows including add-current-pin, interactive add-pin picker, and settings label/preview polish including Phase 2 Settings/hookmaker/project-startup/trust/quit destructive row color regression strings, native preview wiring, baseline picker surface parity including prompt/footer/header fallback without app-name filler and search-key scoped card matching, sidebar compact action-only key footer, sidebar preview-window/start-position behavior without focus-time session switching, sidebar row/window ANSI styling with pane-aggregated attention badge state and AI topic labels, Alt+2/Alt+3 legacy popup row, preview-window, pane metadata, and pane-snapshot parity, switch read0 card rows with active/inactive title styling, right-side status badges, combined directory/git metadata with muted inactive branch styling, statusbar-matched block window tabs with window attention badges, read0 expect-key action parsing, restored pin/tag card badges, and restrained selected-row marker styling, switch preview metadata without duplicated directory/git rows, preview metadata rendering, popup pane display names for AI agents, AI topics, and shell commands, switch preview cycle bindings, sessions picker preview/cycle/open/kill wiring including attached-session fallback behavior, sessions picker launcher-key abort bindings, popup/switch preview summary formatting, popup sessions tmux entry helpers, switch/popup/session rendering, session identity, session-state Claude/Codex/Antigravity resume and declarative startup replay, session snapshot capture/autosave recipe classification including save/autosave pre-capture resume metadata refresh from live AI session ids including Antigravity conversation ids, Claude transcript paths, and Codex rollout log cwd matching/ambiguity skips, candidate discovery, config path derivation, popup preview read-models, and pure state rules including preview, tag, and lifecycle stores.
|
|
35
37
|
- `make test` also covers GitHub Release updater resource and integrity boundaries: bounded compressed responses, decompressed tar streams, total and per-file regular bytes, entry counts, required SHA-256 asset digests, release-host/redirect allowlisting, scratch cleanup, and no atomic replacement after rejection.
|
|
@@ -40,6 +42,7 @@
|
|
|
40
42
|
- `make test` also covers the Settings information-density/feedback contract: compact About producers and removed static-guide negative guards, canonical `setup` / `setup terminal` / read-only `doctor` destinations, single-source no-project guidance with project-context action preservation, Appearance/Theme/About ownership copy, and popup-visible passive mutation success/failure/validation feedback with replacement/clear and rendered-entry reachability guards. Dedicated Welcome, key-capture/probe/diagnostic, and read-only viewer outputs remain outside generic mutation feedback.
|
|
41
43
|
- `make test` also covers native Alt-1 sidebar `Sidebar:KillSession` mutable refresh: the action kills through the focused-session safety path, keeps the native picker session open, refreshes rows and preview with `picker.Action.Mutate`/`DeferredUpdate`, and preserves the previous-live-session guard.
|
|
42
44
|
- `make test` also covers Notify sidebar pane-grouped read-model rows and interactions: collapsed pane inbox group construction, fixed three-line group cards with stable project/provider, topic/context, aggregate metadata, and latest-preview slots including topic-with-project cases, child-count badges that match expandable child rows without rendering `+0`, childless group headers without strong fold affordance, selected/expanded marker-only row shape changes, duplicate label/preview reduction, worst-severity aggregation, inactive/gone group display and child-count rendering, pane-less fallback grouping, compact newest-first child event rows with warn/critical severity preservation, Right/Left fold mutation plus childless Right no-op refresh, folded and expanded live group Enter focus+ack with mixed-severity critical rows, inactive-but-routable group Enter focus+ack, gone group Enter cleanup without focus including critical rows, target-gone race cleanup, transient focus-failure no-ack refresh, child Enter focus/ack preservation, explicit group acknowledgement including mixed-severity critical rows, and grouped deferred refresh output with expanded-state pruning.
|
|
45
|
+
- `make test` also covers the installed-surface coherence contract: localized Session State summaries and Project Picker Back/open guidance; single-label Resource search plus disabled empty shared-bucket feedback; en-US/ko-KR Sessions row/preview labels with the concise open/close footer visible in actual 80x24 projmux and 112x30 daylight native frames; Notify empty read-only close-only chrome; and INFO/WARN/CRIT Clear All confirmation with Esc/Cancel no-write and explicit confirm feedback.
|
|
43
46
|
- `make test` also covers the AI provider metadata registry for Claude/Codex/Antigravity launch providers: registry-derived enabled-agent defaults and ordering, Settings enabled-agent rows, AI picker visibility for disabled providers, ambient usage model scope derivation for currently registered adapters, hook diagnostic provider metadata, Antigravity session-state support metadata, and explicit diagnostics for disabled providers.
|
|
44
47
|
- `make test` also covers the Antigravity v1.1.12 hook contract: authoritative CLI `--event` selection with legacy payload fallback, sanitized camelCase common/invocation/post-tool/Stop fixtures, empty/absent/populated `workspacePaths` handling with inherited-pane-first attribution, explicit-error-centric Stop severity including unknown-reason diagnostics, the official five-event catalog with disabled permission-changing `PreToolUse`, and valid non-permission-changing hook response JSON.
|
|
45
48
|
- `make test` also covers the Antigravity v1.1.12 statusline bridge: official stacked managed-object golden, settings install/reinstall/remove byte and mode preservation, custom-command conflict and malformed/symlink/permission preflight, empty custom stdout, official snake_case identity/agent/confirmation/context-token/quota fixture parsing, busy/quiet state mapping including Stop → late busy → idle completion preservation and next-PreInvocation reset, stable approval dedupe identity, structured conversation-local context sidecar writes with the legacy string-percent fallback retained as private hook/notify diagnostics, opaque quota bucket ordering/identity and collision guards, remaining-fraction validation/conversion, independent absolute/relative reset persistence, and context-only/empty/null/disabled/malformed quota degradation without context usage snapshots.
|
|
@@ -87,6 +90,10 @@
|
|
|
87
90
|
- `make test` also covers `projmux ai ingest log` tail/path rendering and bounded JSONL log trimming for ingest diagnostics.
|
|
88
91
|
- `make test` also covers the Phase 0 operational diagnostics foundation: closed safe-event schema, control/length/home sanitization, lossy stable top-level error messages with dynamic pane/title/body/transcript/config-value exclusion, exhaustive allowlisted top-level/multi-mode command classification including direct-help and explicit dry-run success exclusion with boolean `=false` safeguards, exactly-once state-changing/error outcomes with explicit zero-success/error-one coverage for the six automatic `ai ingest`, attention arm/clear/window, session-state autosave, and recent-window record paths plus an explicit-mutation success regression, private permission repair, platform replace-existing bounded complete-record retention, corrupt-tail recovery, OS-owned inter-process lock identity/crash recovery and explicit 200 ms budget, concurrent short-process rotation, common text/JSON/tail/filter reader fixtures, and unchanged top-level runtime/usage/exitCoder output and exit semantics.
|
|
89
92
|
- `make test` also covers Operational diagnostics Phase 2 lifecycle adoption: the maintained explicit-mutation inventory (attach/current/kill/sessions/switch plus session-popup open, window recent, prune ephemeral, focus session switching, shell open-app, snapshot replay creation, popup-toggle cancel restore, and tmux apply); session create/attach/switch/kill and `tmux apply` start/outcome success/error tables; composite create-then-attach and prune-kill-then-attach failure-stage attribution while preserving one outer pair; shared run IDs and no duplicate top-level outcome; best-effort store/write failure injection; closed operation/code pairing; apply typed no-server versus generic runner failure classification; focus success sealing at the actual switch-client boundary; unchanged read-only/hot-path zero-success recording; typed no-write runtime health projection with latest-state and bounded failure-code semantics; Doctor runtime/log typed consumer reuse; and support-report raw socket/path/session/window/pane/name negative fixtures. `make test-integration` additionally runs real create/attach/switch/kill success/failure routing against a run-unique `-L` socket, validates exact lifecycle pairs and apply classifications without raw routing, and guards cleanup with the queried actual socket path beneath the run-unique smoke root.
|
|
93
|
+
- `make test` also covers Operational diagnostics Phase 3 Session State adoption: the closed outcome/operation/code/source/six-count schema; direct and popup manual save/delete, Settings latest/named save and current/project delete, deduplicated prune delete, and actual project-startup latest/named restore ownership; exact snapshot and item aggregates; error count omission; Settings feedback error capture; append-failure best-effort ownership; autosave session/config/source/interval/debounce/store/save/set-option failure ownership including quiet error-one and project on/off precedence over a broken global config, plus repeated autosave success/no-op zero-volume behavior; same-run coexistence with the runtime lifecycle pair; and seeded path/command/session metadata negative fixtures. `make test-integration` exercises manual save, autosave success/error, actual latest restore, and aggregate delete against the guarded run-unique tmux socket and isolated XDG root, including exact snapshot cleanup and raw metadata negative checks.
|
|
94
|
+
- `make test` also covers Operational diagnostics Phase 4 notify/focus adoption: the closed transition/disposition/provider/category/route schema and cross-family rejection; explicit notify enqueue ownership with queued/deduplicated/failed outcomes; secondary attention and nested prune-reconcile enqueue ownership isolation with no-change zero volume; external-hook, Linux, WSL Toast/fallback, disabled, unavailable, desktop-dedupe, and visible-pane delivery outcomes; one shared process recorder with identical-tuple hot-path coalescing; append-failure best-effort semantics; focus direct/queue/toast request classification with unresolved, notify-only, fallback, and focused outcomes; same-run coexistence with the existing `session.switch` lifecycle pair without a generic duplicate; unchanged `PROJMUX_FOCUS_DEBUG` output; and seeded summary/body/tag/group/title/path/UUID plus support-report negative fixtures.
|
|
95
|
+
- `make test` also covers Operational diagnostics Phase 5 AI watcher/ingest adoption: the closed provider/event-kind/result/failure schema, provider-specific kind catalogs, result/failure tuple compatibility, and cross-family rejection; watcher start plus pane-gone/hook-active terminal ownership, actual launch-failure classification, per-run tuple coalescing, and no per-poll records; Codex/Claude/Antigravity malformed, read, oversized, unmatched, unsupported-event, and route-error projection plus tmux-bell valid, blank, and pane-not-found coverage; zero common AI events for normal state/notify/known-quiet/deduped ingress while Phase 4 notify retains its transition; legacy `ai-ingest.log` producer, `ai ingest log`, bounded retention, and support count-consumer parity; append-failure best-effort ownership with no generic duplicate; and seeded prompt/tool/path/UUID/conversation/session/title negative fixtures for operations and support output.
|
|
96
|
+
- `make test` also covers Operational diagnostics Phase 6 resource adoption and legacy review: exact closed resource source/result/failure tuples and cross-family rejection; production app graph wiring through Resource Inspector lifecycle → tmux inventory/project discovery/procfs attribution; unavailable, partial, stale, collection error, and actual context-deadline scan-budget fixtures; normal sample/refresh zero volume, persistent-transition coalescing, silent recovery plus anomaly re-entry, and append-failure best-effort UI/CLI preservation; separate host-only status sampler zero ownership; operations text/JSON and error-only support projection with partial/stale omission; seeded CPU/MEM/PID/process/path/title/command/UUID/session/error text negative fixtures; common journal retention/rotation regression; and the file/surface legacy diagnostic inventory without breaking removal.
|
|
90
97
|
- `make test` also covers the Phase 1 explicit redacted support report: complete preview-before-write ordering, deterministic private archive entries and manifest schema/redaction metadata, Doctor schema-version-1 structural reuse with closed static diagnostic allowlists, strict no-repair bounded operations reads, config-presence-only and AI-ingest count-only projection, exhaustive seeded free-text/path/routing/content negative redaction, missing/corrupt/unreadable source reasons, collision/partial-temp safety, and report success/error exclusion from legacy-hook migration and operational outcomes.
|
|
91
98
|
- `make test` also covers welcome revisit policy: legacy `skip_version` readability without shell suppression, `s` Skip until next vs Enter continue, Settings > About > Welcome native viewer, best-effort shell update cache refresh, and attach-popup no-duplicate/no-op behavior.
|
|
92
99
|
- `make test` also covers `projmux quit` action-picker rows, cancel/close no-op behavior, explicit quit of only app-owned tmux runtimes marked by `@projmux_app=1`, missing/default runtime no-ops, dispatcher wiring, and `Settings > About > Quit projmux` routing through the same picker before any shutdown side effect.
|
|
@@ -122,7 +129,7 @@
|
|
|
122
129
|
- `make test` also covers npm retire/staging path canonicalization for the resolved projmux executable so generated tmux config and hooks never embed a `node_modules/.projmux-<hash>` directory, plus error-suppressed attention and rebalance-panes hooks.
|
|
123
130
|
- `make test-integration`: Docker-backed Linux integration smoke with real `tmux`, `git`, and `stty`; covers Doctor schema 2 missing/corrupt/permission degradation, runtime socket/config current/stale findings against a guarded run-unique `-L` socket, source byte/mode/mtime/inventory no-repair evidence, explicit support-report no-request/preview/private archive and Doctor-schema inspection, missing/corrupt/permission-denied source manifest reasons with no source-mode repair, preview-writer failure before output creation, collision byte/mode preservation and temp cleanup, tmux config print/install/apply including stale live `C-t` pane-label retirement, current `M-p` preservation, current `C-t` reassignment, repeated apply/keymap byte preservation, and unrelated live/current binding preservation, default-off/on live resource config plus two-sample procfs status rendering, notify queue CRUD against isolated HOME/XDG paths, private operational-log persistence/mode repair/readback/hot-path exclusion/best-effort write failure, and built-CLI propagation of a fake tmux `split-window -P -F "#{pane_id}"` result to `--print-pane-id` stdout. Root containers run the permission case through `runuser`+`nobody`; environments without that adapter take an explicit asserted skip instead of treating root chmod access as denial.
|
|
124
131
|
- `make test-install-smoke`: Docker-backed source install smoke; covers `make install`, atomic binary replacement, `tmux apply` against a live `projmux` socket, post-install notify queue initialization, and installed-binary temporary HOME/XDG support-report preview → explicit private archive → manifest/Doctor schema inspection with exact smoke-root cleanup.
|
|
125
|
-
- `make test-e2e`: Docker-backed real-tmux workflow smoke for session/pane setup, a direct shell `--print-pane-id` split whose returned `%N` handle is verified against the isolated live server, an attached-client `rename-pane-label` command-prompt flow covering current-label initial value, Enter confirm, native Esc cancel, empty clear, and AI topic/manual/raw-title non-mutation, app config sourcing, reply-state notify reconciliation, focus notify fallback, status notify rendering with contextual project/state/agent badges,
|
|
132
|
+
- `make test-e2e`: Docker-backed real-tmux workflow smoke for session/pane setup, a direct shell `--print-pane-id` split whose returned `%N` handle is verified against the isolated live server, an attached-client `rename-pane-label` command-prompt flow covering current-label initial value, Enter confirm, native Esc cancel, empty clear, and AI topic/manual/raw-title non-mutation, app config sourcing, reply-state notify reconciliation, focus notify fallback, status notify rendering with contextual project/state/agent badges, an isolated attached-client `display-popup` Settings recorder flow that verifies staged-before-write Enter confirmation plus Esc cancellation against a temporary HOME/keymap while stale retired picker env/file values remain inert, unchanged, and silent, and a reused FIFO/attached-client Notify Clear All flow whose command markers and queue JSON prove cancel no-write, INFO/WARN/CRIT confirm clear, and pane focus restoration. Host-only terminal, WSL, macOS, and GUI notification behavior remains outside Docker; see [docs/testing.md](testing.md).
|
|
126
133
|
|
|
127
134
|
## When To Update This List
|
|
128
135
|
- A feature moves between unit, integration, and e2e coverage levels.
|
package/docs/cli.md
CHANGED
|
@@ -46,19 +46,20 @@ projmux <command> [args...]
|
|
|
46
46
|
| `update` | Check installer-aware GitHub release update status. |
|
|
47
47
|
| `upgrade` | Self-update via `go install`. |
|
|
48
48
|
| `welcome` | Print the shell onboarding guide again. |
|
|
49
|
-
| `usage` | Report AI usage across fixed windows
|
|
49
|
+
| `usage` | Report AI usage across fixed windows and named account quota buckets. |
|
|
50
50
|
| `version` | Print the current version. |
|
|
51
51
|
|
|
52
52
|
## switch
|
|
53
53
|
|
|
54
54
|
```
|
|
55
|
-
projmux switch [
|
|
55
|
+
projmux switch [--ui=popup|sidebar]
|
|
56
|
+
projmux switch open <path>
|
|
56
57
|
projmux switch toggle-tag | toggle-pin | kill | settings | preview
|
|
57
58
|
projmux switch cycle-pane | cycle-window | sidebar-focus
|
|
58
59
|
```
|
|
59
60
|
|
|
60
61
|
Project picker. With no positional argument, opens the configured picker popup
|
|
61
|
-
or sidebar (depending on entry helper).
|
|
62
|
+
or sidebar (depending on entry helper). `switch open <path>` jumps directly. The
|
|
62
63
|
sub-verbs are entry hooks invoked by tmux keybindings (e.g.
|
|
63
64
|
`sidebar-focus` is wired to the sidebar's focus binding so navigation keeps
|
|
64
65
|
the active session in sync).
|
|
@@ -109,7 +110,7 @@ projmux doctor [--json] [--section deps|runtime|integrations|session-state|logs]
|
|
|
109
110
|
Runs read-only diagnostics, including a dependency check for `tmux ≥ 3.4`,
|
|
110
111
|
`git`, `stty` (POSIX only), and
|
|
111
112
|
`kubectl` (optional), then reports read-only AI notify integration diagnostics
|
|
112
|
-
for Codex hooks, Claude Code hooks, and the tmux bell
|
|
113
|
+
for Codex hooks, Claude Code hooks, Antigravity hooks/statusline, and the tmux bell
|
|
113
114
|
fallback. AI notify integration statuses are `installed`, `missing`, or
|
|
114
115
|
`conflict`; missing or conflicting integrations are informational and do not
|
|
115
116
|
make doctor fail. It also reports read-only Session State resume metadata
|
|
@@ -209,6 +210,17 @@ channel and never change command output or exit status. See
|
|
|
209
210
|
[operational-diagnostics.md](operational-diagnostics.md) for the file,
|
|
210
211
|
retention, concurrency, and privacy contracts.
|
|
211
212
|
|
|
213
|
+
`ai watch-title` emits a bounded common lifecycle: one start, one terminal
|
|
214
|
+
pane-gone/hook-active stop, and at most one copy of each closed watcher failure
|
|
215
|
+
tuple per process. Normal polling iterations emit nothing. AI hook ingest emits
|
|
216
|
+
common events only for malformed/read/oversized payloads, unmatched or invalid
|
|
217
|
+
targets, unsupported event classification, and route failures. Provider event
|
|
218
|
+
names, payloads, prompt/tool/transcript values, notification text, pane
|
|
219
|
+
metadata, paths, UUIDs, and conversation/session IDs are never stored. Normal
|
|
220
|
+
state/notify/quiet/dedupe hook results stay zero-volume in the common AI family;
|
|
221
|
+
the existing notify transition remains the owner when notification behavior
|
|
222
|
+
occurs.
|
|
223
|
+
|
|
212
224
|
Session create/attach/switch/kill and `tmux apply` use correlated
|
|
213
225
|
`lifecycle.start`/`lifecycle.outcome` records instead of a duplicate generic
|
|
214
226
|
top-level outcome. The text and JSONL views expose only the closed safe
|
|
@@ -341,10 +353,12 @@ projmux notify reconcile [--json]
|
|
|
341
353
|
While open, the native
|
|
342
354
|
sidebar refreshes its row list on successful queue-write events without an
|
|
343
355
|
Alt-2 close/reopen toggle, using the same deferred refresh path as `a` and
|
|
344
|
-
`x`. The sidebar
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
356
|
+
`x`. The sidebar is a pane/session-grouped inbox whose collapsed rows are
|
|
357
|
+
fixed three-line cards: project/session, agent/provider, and newest age on
|
|
358
|
+
line 1; topic/pane-title/task context plus severity/live-state metadata on
|
|
359
|
+
line 2; and the latest notification preview on line 3. Hidden queue ids
|
|
360
|
+
remain action values, but the sidebar has no search input. `--client` is used
|
|
361
|
+
by tmux popup launchers to keep row-select focus on the clicked client.
|
|
348
362
|
- `ack <id>` removes one entry; `--all` flushes the queue.
|
|
349
363
|
- `reconcile` — walks `tmux list-panes -a` and back-fills entries for
|
|
350
364
|
panes whose attention state is `reply` AND whose AI agent option is
|
|
@@ -356,7 +370,7 @@ projmux notify reconcile [--json]
|
|
|
356
370
|
|
|
357
371
|
## usage
|
|
358
372
|
|
|
359
|
-
Authoritative AI
|
|
373
|
+
Authoritative AI account usage. See [usage-tracking.md](usage-tracking.md)
|
|
360
374
|
for adapter detail.
|
|
361
375
|
|
|
362
376
|
```
|
|
@@ -412,13 +426,22 @@ core-equivalent CPU. Project and window rows count panes, while pane rows count
|
|
|
412
426
|
the attributed processes. Pane rows and detail share the resolved pane identity
|
|
413
427
|
and label the tmux current command, PID/SID, pane id, and TTY separately. Memory
|
|
414
428
|
is explicitly an RSS sum (shared pages can be counted more than once) plus its
|
|
415
|
-
host ratio. `
|
|
416
|
-
`
|
|
417
|
-
|
|
429
|
+
host ratio. `No project match`, `Multiple project matches`, and non-drillable
|
|
430
|
+
`Other / unattributed` remain explicit. The first two are display labels over
|
|
431
|
+
stable internal attribution keys. Warming, partial, unavailable, unknown, and
|
|
432
|
+
overage states also remain explicit. No process
|
|
418
433
|
command list, mutation, history, graph, daemon, persistence, or Session State
|
|
419
434
|
telemetry is created. Linux/tmux provides attribution; unsupported platforms
|
|
420
435
|
show an unavailable reason rather than zero metrics.
|
|
421
436
|
|
|
437
|
+
Only Resource Inspector anomalies (`unavailable`, `partial`, `stale`, closed
|
|
438
|
+
collection-stage errors, and scan-budget exhaustion) enter the private bounded
|
|
439
|
+
operations journal. Identical persistent anomalies are transition-coalesced;
|
|
440
|
+
healthy periodic samples and refreshes emit zero records. These records contain
|
|
441
|
+
no CPU/RSS values, PID/process detail, project/tmux identity, path/title/command,
|
|
442
|
+
or arbitrary error/status text. `diagnostics report` includes only error-level
|
|
443
|
+
closed resource outcomes; local-only partial/stale info rows are omitted.
|
|
444
|
+
|
|
422
445
|
This is distinct from `projmux status resources`, which remains the short
|
|
423
446
|
host-only statusbar renderer.
|
|
424
447
|
|
|
@@ -476,10 +499,10 @@ projmux statusbar usage-refresh
|
|
|
476
499
|
```
|
|
477
500
|
|
|
478
501
|
Click/keyboard dispatcher for the two-line status bar. Implemented range ids:
|
|
479
|
-
`session pwd kube git usage notify settings`. The bare `window` /
|
|
502
|
+
`session pwd kube git resources usage notify settings`. The bare `window` /
|
|
480
503
|
`window|<idx>` token (tmux's built-in window-list range) and the empty
|
|
481
504
|
range fall through to `select-window -t @<mouse_window>` so the native
|
|
482
|
-
click-to-switch tab affordance is preserved on row
|
|
505
|
+
click-to-switch tab affordance is preserved on row 1. Unknown range ids are
|
|
483
506
|
non-specialized placeholders and no-op. `session` opens the existing-session
|
|
484
507
|
popup; `pwd` shows the current pane path in a native-framed display-only
|
|
485
508
|
popup; `kube` and `git` open the project switcher popup;
|
|
@@ -523,11 +546,11 @@ supplied window.
|
|
|
523
546
|
|
|
524
547
|
```
|
|
525
548
|
projmux ai split [--agent <claude|codex|antigravity|shell|selective|resume>] [--force-agent] [--print-pane-id] [right|down] [-- <extra-arg>...]
|
|
526
|
-
projmux ai picker [--inside] [--shell] [--resume]
|
|
527
|
-
projmux ai settings
|
|
528
|
-
projmux ai status set <thinking|waiting|idle> [
|
|
529
|
-
projmux ai notify
|
|
530
|
-
projmux ai watch-title [
|
|
549
|
+
projmux ai picker [--inside] [--shell] [--resume] [right|down]
|
|
550
|
+
projmux ai settings [--get|--set <mode>]
|
|
551
|
+
projmux ai status set <thinking|waiting|idle> [pane]
|
|
552
|
+
projmux ai notify [notify|reset] [pane]
|
|
553
|
+
projmux ai watch-title [pane]
|
|
531
554
|
projmux ai ingest codex-hook < payload.json
|
|
532
555
|
projmux ai ingest claude-hook < payload.json
|
|
533
556
|
projmux ai ingest antigravity-hook [--event <PreInvocation|PostInvocation|PostToolUse|Stop|Statusline>] < payload.json
|
|
@@ -754,6 +777,15 @@ payloads are not stored. The log is capped at 1 MiB and trimmed to the most
|
|
|
754
777
|
recent roughly 512 KiB when it grows past the cap. Use `--json` for raw JSONL
|
|
755
778
|
and `--path` to print the resolved file path.
|
|
756
779
|
|
|
780
|
+
This legacy log is retained for compatibility. Its producer, `ingest log`
|
|
781
|
+
consumer, 1 MiB/roughly 512 KiB retention, and support-report count summary are
|
|
782
|
+
unchanged. The common operations journal now carries only the safe anomalous
|
|
783
|
+
classification and watcher lifecycle described above. Both surfaces run in
|
|
784
|
+
parallel during the migration. It is now documented as a deprecation candidate,
|
|
785
|
+
but this release does not deprecate, remove, rename, or change it; a separate
|
|
786
|
+
breaking roadmap must first migrate its detailed local consumer. See
|
|
787
|
+
[legacy-diagnostics-inventory.md](legacy-diagnostics-inventory.md).
|
|
788
|
+
|
|
757
789
|
For `Stop`, projmux reads `transcript_path` when present and extracts the last
|
|
758
790
|
assistant text from the transcript tail; if that is unavailable, it falls back
|
|
759
791
|
to a generic Claude completion row. `PermissionRequest` rows expose the tool
|
package/docs/globalization.md
CHANGED
|
@@ -34,7 +34,7 @@ Classification:
|
|
|
34
34
|
|
|
35
35
|
| Family | Examples | Class | Phase 0 policy |
|
|
36
36
|
| --- | --- | --- | --- |
|
|
37
|
-
| Agent names | `Codex`, `Claude`, `AI` | `literal` | Preserve exactly. |
|
|
37
|
+
| Agent names | `Codex`, `Claude`, `Antigravity`, `AI` | `literal` | Preserve exactly. |
|
|
38
38
|
| Category labels | `Response complete`, `Approval required`, `Input required`, `Error`, `Subagent stopped`, `Teammate waiting` | `translate` | English baseline now; catalog keys later. |
|
|
39
39
|
| Review body prefix | `Review pending:` | `translate` | English baseline now; catalog key later. |
|
|
40
40
|
| Tool names | `Bash`, `Read`, `WebFetch`, `Shell` | `literal` | Preserve provider/source spelling. |
|
|
@@ -78,7 +78,7 @@ Classification:
|
|
|
78
78
|
| Row labels and previews | enabled/disabled state, current source, saved values | `translate` | Inventory only; catalog later. |
|
|
79
79
|
| Disabled reasons and warnings | missing project, env override, conflict text | `translate` | Inventory only; catalog later. |
|
|
80
80
|
| Config keys and env vars | `PROJMUX_PROJDIR`, `config.toml`, `ui.locale` | `literal` | Preserve exactly. |
|
|
81
|
-
| Commands shown for copying | `projmux ai integrate codex --dry-run` | `literal` | Preserve exactly. |
|
|
81
|
+
| Commands shown for copying | `projmux ai integrate codex --dry-run`, `projmux ai integrate antigravity --dry-run` | `literal` | Preserve exactly. |
|
|
82
82
|
| Persisted values | `none`, `notify`, `raise`, `auto` | `literal` | Preserve enum values. |
|
|
83
83
|
|
|
84
84
|
### Native Picker And Render Surfaces
|
|
@@ -124,7 +124,7 @@ Classification:
|
|
|
124
124
|
|
|
125
125
|
Do not translate these families:
|
|
126
126
|
|
|
127
|
-
- Product and agent names: `Codex`, `Claude`, `projmux`, `tmux`,
|
|
127
|
+
- Product and agent names: `Codex`, `Claude`, `Antigravity`, `projmux`, `tmux`,
|
|
128
128
|
`GitHub`, `npm`.
|
|
129
129
|
- Terminal and app names: `Windows Terminal`, `Ghostty`, `WezTerm`, `Kitty`,
|
|
130
130
|
`iTerm2`, `Alacritty`, `Foot`.
|
|
@@ -239,7 +239,8 @@ Contribution convention:
|
|
|
239
239
|
- Add the `en-US` entry in the same change as the key.
|
|
240
240
|
- Add `ko-KR` when the translation is known; otherwise rely on fallback while
|
|
241
241
|
keeping the missing key intentional in review notes.
|
|
242
|
-
- Do not translate product names (`projmux`, `tmux`, `Codex`, `Claude
|
|
242
|
+
- Do not translate product names (`projmux`, `tmux`, `Codex`, `Claude`,
|
|
243
|
+
`Antigravity`),
|
|
243
244
|
commands, paths, config keys, environment variables, provider payloads, or
|
|
244
245
|
source enum values.
|
|
245
246
|
- Runtime migrations should be narrow by surface. Move a string family behind
|
|
@@ -296,7 +297,8 @@ Width-safe rendering:
|
|
|
296
297
|
|
|
297
298
|
Runtime surfaces migrated:
|
|
298
299
|
|
|
299
|
-
- AI desktop notification summaries for Codex and
|
|
300
|
+
- AI desktop notification summaries for Codex, Claude, and Antigravity hook
|
|
301
|
+
payloads.
|
|
300
302
|
- In-app notify queue table/sidebar/statusbar display text for AI entries.
|
|
301
303
|
- Notify live explanation text for `projmux notify list --live`.
|
|
302
304
|
- Sidebar/table/statusbar age formatting and sidebar stale/gone/target labels.
|
|
@@ -317,9 +319,9 @@ Literal preservation and parity rules:
|
|
|
317
319
|
- Translate only catalog-owned category labels such as `Response complete`,
|
|
318
320
|
`Approval required`, `Input required`, `Error`, `Subagent stopped`, and
|
|
319
321
|
`Teammate waiting`.
|
|
320
|
-
- Preserve provider-owned payloads verbatim: `Codex`, `Claude`,
|
|
321
|
-
commands, paths, URLs, query strings, transcript excerpts,
|
|
322
|
-
subagent IDs.
|
|
322
|
+
- Preserve provider-owned payloads verbatim: `Codex`, `Claude`, `Antigravity`,
|
|
323
|
+
tool names, commands, paths, URLs, query strings, transcript excerpts,
|
|
324
|
+
teammate IDs, and subagent IDs.
|
|
323
325
|
- Desktop notification summaries and in-app queue display text must use the
|
|
324
326
|
same rendered category labels for the same locale while preserving the same
|
|
325
327
|
literal payload body.
|
package/docs/hooks.md
CHANGED
|
@@ -205,11 +205,11 @@ If a `send-noti` hook itself calls `projmux notify push`, projmux sees
|
|
|
205
205
|
`PROJMUX_NOTIFY_HOOK_DEPTH=1` in the child environment and skips another
|
|
206
206
|
`send-noti` hook fire. The queue write itself still succeeds.
|
|
207
207
|
|
|
208
|
-
`Settings > Notifications > Delivery sources` surfaces the active Codex
|
|
209
|
-
Claude, and tmux AI notify diagnostics: status, conflicts, config
|
|
210
|
-
copyable CLI install/remove/dry-run commands. It also shows whether
|
|
208
|
+
`Settings > Notifications > Delivery sources` surfaces the active Codex,
|
|
209
|
+
Claude, Antigravity, and tmux AI notify diagnostics: status, conflicts, config
|
|
210
|
+
paths, and copyable CLI install/remove/dry-run commands. It also shows whether
|
|
211
211
|
`PROJMUX_NOTIFY_HOOK` overrides the built-in desktop sender. It does not install
|
|
212
|
-
or remove external Codex, Claude, or tmux settings.
|
|
212
|
+
or remove external Codex, Claude, Antigravity, or tmux settings.
|
|
213
213
|
|
|
214
214
|
`PROJMUX_NOTIFY_HOOK` is separate from `[hooks.send-noti]`: it replaces the
|
|
215
215
|
desktop sender and receives positional arguments
|
|
@@ -731,16 +731,28 @@ projmux does not run `post-attach` for outside-tmux attach paths in this phase.
|
|
|
731
731
|
|
|
732
732
|
## Environment
|
|
733
733
|
|
|
734
|
-
Hooks inherit projmux's environment
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
| `
|
|
739
|
-
|
|
|
740
|
-
| `
|
|
741
|
-
| `
|
|
742
|
-
| `
|
|
743
|
-
| `
|
|
734
|
+
Hooks inherit projmux's environment. The lifecycle variables below are added by
|
|
735
|
+
event; “omitted” means the variable is not added when its context value is
|
|
736
|
+
empty.
|
|
737
|
+
|
|
738
|
+
| Variable | `pre-create` | `post-create` | `post-attach` | `send-noti` |
|
|
739
|
+
| --- | --- | --- | --- | --- |
|
|
740
|
+
| `PROJMUX_SESSION` | new session name | new session name | target session name | target session when known; otherwise empty |
|
|
741
|
+
| `PROJMUX_CWD` | requested session directory | created session directory | resolved target directory; may be empty if lookup fails | dispatcher working directory |
|
|
742
|
+
| `PROJMUX_SESSION_KIND` | `persistent` or `ephemeral` | `persistent` or `ephemeral` | empty | empty |
|
|
743
|
+
| `PROJMUX_VERSION` | projmux version | projmux version | projmux version | projmux version |
|
|
744
|
+
| `PROJMUX_SOCKET` | app socket metadata (`projmux`) | app socket metadata (`projmux`) | app socket metadata (`projmux`) | queue-entry socket when known; otherwise omitted |
|
|
745
|
+
| `PROJMUX_PANE` | omitted: no pane exists yet | exact id returned by standard persistent/ephemeral `tmux new-session`, such as `%7`; omitted for snapshot replay | omitted | target pane when known; otherwise omitted |
|
|
746
|
+
|
|
747
|
+
`pre-create` intentionally has no `PROJMUX_PANE`: it runs before
|
|
748
|
+
`tmux new-session` creates the first pane. Standard persistent and ephemeral
|
|
749
|
+
`post-create` paths run after creation and therefore receive that exact pane
|
|
750
|
+
id. Snapshot replay can restore multiple panes and does not expose a single
|
|
751
|
+
returned pane at its lifecycle boundary, so it omits `PROJMUX_PANE`.
|
|
752
|
+
`PROJMUX_SOCKET` is routing metadata for hook commands; it does not imply that
|
|
753
|
+
the tmux client itself adds `-L` to its commands. The `post-attach` and
|
|
754
|
+
`send-noti` cells describe their existing contexts; this contract adds no pane
|
|
755
|
+
context to either event.
|
|
744
756
|
|
|
745
757
|
## Examples
|
|
746
758
|
|
|
@@ -749,6 +761,7 @@ Hooks inherit projmux's environment, plus:
|
|
|
749
761
|
```bash
|
|
750
762
|
#!/usr/bin/env bash
|
|
751
763
|
echo "session=$PROJMUX_SESSION cwd=$PROJMUX_CWD kind=$PROJMUX_SESSION_KIND"
|
|
764
|
+
tmux -L "$PROJMUX_SOCKET" set-option -p -t "$PROJMUX_PANE" @projmux_initialized 1
|
|
752
765
|
```
|
|
753
766
|
|
|
754
767
|
### Project Startup Command
|
|
@@ -770,7 +783,7 @@ case "$PROJMUX_CWD" in
|
|
|
770
783
|
*) exit 0 ;;
|
|
771
784
|
esac
|
|
772
785
|
|
|
773
|
-
tmux set-environment -t "$PROJMUX_SESSION" GH_TOKEN "$token"
|
|
786
|
+
tmux -L "$PROJMUX_SOCKET" set-environment -t "$PROJMUX_SESSION" GH_TOKEN "$token"
|
|
774
787
|
```
|
|
775
788
|
|
|
776
789
|
`set-environment` only seeds the session env that newly-spawned panes inherit;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Legacy diagnostics inventory
|
|
2
|
+
|
|
3
|
+
This is the Phase 6 file/surface inventory. `Keep`, `Deprecate candidate`, and
|
|
4
|
+
`Remove candidate` are review classifications, not runtime changes. Nothing in
|
|
5
|
+
this phase removes, renames, ignores, or changes an environment variable, log,
|
|
6
|
+
CLI, config action, output format, permission, or retention contract.
|
|
7
|
+
|
|
8
|
+
| Surface | Producer / reader files | Current consumer and data boundary | Candidate and rationale | Separate follow-up |
|
|
9
|
+
| --- | --- | --- | --- | --- |
|
|
10
|
+
| `PROJMUX_USAGE_DEBUG` | `internal/app/usagecmd/usage.go`; adapter contract in `internal/core/usage/registry.go` and safe token helper in `internal/core/usage/adapters/claude/claude.go` | `projmux status usage` operator stderr; documented by `AGENTS.md`, `docs/configuration.md`, and `docs/usage-tracking.md`; `internal/app/usagecmd/usage_test.go` fixes the opt-in behavior; adapter errors are otherwise swallowed on the status hot path | **Keep.** Usage adapters are not adopted by the common journal and this opt-in stderr is the only immediate adapter failure consumer. | No removal follow-up. Re-evaluate only with a separately scoped usage diagnostics adoption. |
|
|
11
|
+
| `PROJMUX_SESSIONSTATE_DEBUG` | read/output gate in `internal/app/tmux.go` | Operator/automation stderr for a quiet autosave error; documented in `docs/configuration.md`; tests in `internal/app/tmux_test.go` cover popup environment propagation | **Deprecate candidate.** Phase 3 already records the same quiet autosave failure as a closed common error, but scripts may consume stderr. | Yes: announce deprecation, audit scripts, and remove only in a breaking PR after a compatibility window. |
|
|
12
|
+
| `PROJMUX_FOCUS_DEBUG` | read/output gate in `internal/app/focus.go` | Operator stderr one-line raw target/session/window/pane/socket/client/source/kind; documented in `AGENTS.md`, `docs/cli.md`, `docs/configuration.md`, `docs/operational-diagnostics.md`, and the maintained test list in `docs/agent-workflow.md`; `internal/app/focus_test.go` fixes the byte contract | **Deprecate candidate.** Phase 4 common focus events are safer for support, but the raw routing line remains a distinct local troubleshooting consumer. | Yes: publish safe replacement guidance and remove only through a breaking deprecation roadmap. |
|
|
13
|
+
| `PROJMUX_NATIVE_DEBUG_LOG` | `internal/ui/picker/backend.go` and `colorgrid.go` append native picker actions/query/value/errors; `internal/app/tmux.go` inherits it into popup environments | Developer-selected file path; popup inheritance is covered in `internal/app/tmux_test.go`; no public CLI/support reader, retention bound, or privacy redaction | **Remove candidate.** The opt-in trace can contain user query/value/error text and is not bounded. Current behavior remains intact because a safe bounded replacement and migration notice are outside Phase 6. | Yes: design a bounded private picker trace or common closed events, document migration, then ship removal as breaking. |
|
|
14
|
+
| bounded `ai-ingest.log` | Codex producer `internal/app/ai_ingest_codex.go`; Claude producer `internal/app/ai_ingest_claude.go`; Antigravity producer `internal/app/ai_ingest_antigravity.go`; tmux-bell producer plus shared `appendAIIngestLog`, path, cap, and trim in `internal/app/ai_ingest.go`; common projection in `internal/app/ai_ingest_diagnostics.go` | Detailed CLI reader `internal/app/ai_ingest.go` (`projmux ai ingest log`); count-only support reader `internal/app/diagnostics_report.go`; docs consumers `docs/cli.md`, `docs/hooks.md`, `docs/configuration.md`, `docs/operational-diagnostics.md`, and the maintained test list in `docs/agent-workflow.md`; `internal/app/ai_ingest_test.go`, `internal/app/ai_ingest_diagnostics_test.go`, `internal/app/diagnostics_report_test.go`, and `test/integration/linux-smoke.sh` cover retention/consumer/corrupt/permission behavior | **Deprecate candidate.** Phase 5 common events cover anomalous classification, but intentionally omit normal state/notify/quiet/dedupe detail and all identity. Removing the file now would break the detailed CLI consumer and measured parity. | Yes: define whether detailed normal-state diagnostics remain a product requirement, migrate or retire `ai ingest log` and support counts, announce a compatibility window, then use a breaking PR. |
|
|
15
|
+
|
|
16
|
+
The separate host resource status path is not a legacy debug surface:
|
|
17
|
+
`internal/app/status.go` invokes `internal/systemstatus.Sampler` for
|
|
18
|
+
`projmux status resources`. It owns only host aggregate display/cache behavior,
|
|
19
|
+
not pane/project attribution, and emits zero common resource events. The Phase
|
|
20
|
+
6 Resource Inspector owner is `internal/app/resources.go` →
|
|
21
|
+
`internal/app/resources_collector_linux.go` →
|
|
22
|
+
`internal/integrations/tmux.ListResourcePanes` plus
|
|
23
|
+
`internal/integrations/procfsresources.Collector`.
|
|
@@ -36,6 +36,136 @@ operation instead of recording nested outcomes. Lifecycle ownership replaces
|
|
|
36
36
|
the generic top-level `command.outcome`; it never duplicates it. Start/outcome
|
|
37
37
|
append failures are ignored and do not change the command result.
|
|
38
38
|
|
|
39
|
+
Session State mutations use one outcome-only `session-state.outcome` record
|
|
40
|
+
per selected attempt. The closed operations are `session-state.save`,
|
|
41
|
+
`session-state.autosave`, `session-state.restore`, and `session-state.delete`;
|
|
42
|
+
an error uses only the matching `.failed` code, `kind=runtime`, and an empty
|
|
43
|
+
message. Optional sources are limited to `manual`, `settings-latest`,
|
|
44
|
+
`settings-named`, `autosave`, `startup-latest`, `startup-named`, and `prune`.
|
|
45
|
+
Successful save and actual startup restore outcomes contain only exact
|
|
46
|
+
non-negative `window_count`, `pane_count`, `shell_recipe_count`,
|
|
47
|
+
`agent_recipe_count`, and `startup_recipe_count` aggregates. Successful delete
|
|
48
|
+
contains only `item_count`; errors contain no counts. Snapshot paths/content,
|
|
49
|
+
project paths, pane cwd/commands, snapshot names, and agent or conversation
|
|
50
|
+
identifiers are never projected.
|
|
51
|
+
|
|
52
|
+
Direct and popup save, Settings latest/named save, direct and Settings delete,
|
|
53
|
+
deduplicated prune delete, and actual latest/named project-startup replay own
|
|
54
|
+
these outcomes. Preview, dry-run, and nested store/replay calls do not.
|
|
55
|
+
Autosave success and disabled, not-due, or fresh no-ops always write zero
|
|
56
|
+
records; a real autosave failure writes exactly one error even when `--quiet`
|
|
57
|
+
preserves its historical successful exit. Session State logical ownership
|
|
58
|
+
suppresses a generic top-level outcome even when journal append fails. An
|
|
59
|
+
actual restore may also produce its runtime lifecycle pair with the same run
|
|
60
|
+
ID; the lifecycle pair and Session State terminal outcome describe different
|
|
61
|
+
contracts and are not duplicates.
|
|
62
|
+
|
|
63
|
+
Notify and focus transitions use the same process `run_id` and add only closed
|
|
64
|
+
`transition`, `disposition`, `provider`, `category`, and `route` enums. Notify
|
|
65
|
+
transitions are `enqueue` and `delivery`; focus uses `request`. Enqueue records
|
|
66
|
+
distinguish queued, stable-ID deduplicated, and failed outcomes. Delivery
|
|
67
|
+
records distinguish delivered, dedupe/visibility/setting suppression, and
|
|
68
|
+
failed outcomes across the external sender hook, WSL Toast and fallback, and
|
|
69
|
+
Linux `notify-send` routes. Focus request records distinguish focused,
|
|
70
|
+
notify-only, session-only, window-only, and failed outcomes. Failure codes are
|
|
71
|
+
closed stage classifications and messages stay empty.
|
|
72
|
+
|
|
73
|
+
Provider and category values are projected through fixed allowlists. Unknown
|
|
74
|
+
values become `other`; arbitrary provider payloads and notification metadata
|
|
75
|
+
cannot extend the event schema. Notification summary/body, tag/group, terminal
|
|
76
|
+
title/topic, paths, queue or routing IDs, UUIDs, and AI/conversation/session
|
|
77
|
+
identifiers are never recorded. The notifier sender owns one terminal delivery
|
|
78
|
+
outcome after fallback selection, so failed intermediate WSL adapters do not
|
|
79
|
+
produce duplicate records when a later route succeeds.
|
|
80
|
+
|
|
81
|
+
One process writes at most one copy of an identical safe notify/focus tuple.
|
|
82
|
+
This fixes repeated stable-ID queue replacement, desktop dedupe, visible-pane
|
|
83
|
+
suppression, and reconcile hot paths to a finite per-run volume; the journal's
|
|
84
|
+
existing size/retention cap remains the cross-process bound. Explicit `notify
|
|
85
|
+
push` and `focus` outcomes logically replace the generic top-level
|
|
86
|
+
`command.outcome`, including when append fails. Secondary automatic enqueue or
|
|
87
|
+
delivery events do not claim an unrelated outer command. A successful focus
|
|
88
|
+
that switches a tmux client may coexist with the shipped runtime
|
|
89
|
+
`session.switch` lifecycle pair under the same run ID: the pair describes the
|
|
90
|
+
tmux mutation, while `focus.transition` describes the request-level result.
|
|
91
|
+
|
|
92
|
+
AI watcher and hook-ingest diagnostics use the same process `run_id` and add
|
|
93
|
+
only closed `provider`, `ai_kind`, `ai_result`, and `failure` enums. The event
|
|
94
|
+
families are `ai.watcher.transition` and `ai.ingest.outcome`. Watcher provider
|
|
95
|
+
is the generic `ai`; ingest providers are `codex`, `claude`, `antigravity`, or
|
|
96
|
+
`tmux-bell`. Each provider accepts only its own closed semantic-kind catalog;
|
|
97
|
+
for example, `tmux-bell` can only emit `bell`, while watcher events can only use
|
|
98
|
+
the generic `ai` provider and `watcher` kind. Provider event names are projected
|
|
99
|
+
into semantic kinds such as `prompt`, `permission`, `stop`, `notification`,
|
|
100
|
+
`tool`, `session`, `compact`, `subagent`, `teammate`, `statusline`, `invocation`,
|
|
101
|
+
`lifecycle`, `bell`, `payload`, or `unknown`. A raw or future event name can
|
|
102
|
+
therefore be diagnosed as `unknown` but can never extend the journal schema.
|
|
103
|
+
|
|
104
|
+
One watcher process emits at most one `started` transition, one terminal
|
|
105
|
+
`pane-gone` or `hook-active` transition, and one copy of each distinct safe
|
|
106
|
+
failure tuple. The existing observable launch seam uses only
|
|
107
|
+
`watcher-launch-failed`; status application remains the pre-existing
|
|
108
|
+
best-effort operation and does not claim to expose swallowed tmux write errors.
|
|
109
|
+
The terminal watcher event logically replaces its generic top-level outcome,
|
|
110
|
+
including when append fails.
|
|
111
|
+
The polling loop does not record snapshots, observed titles, captures, pane
|
|
112
|
+
state, or a record per iteration.
|
|
113
|
+
|
|
114
|
+
Hook ingest projects only anomalies: invalid/read/oversized payloads, unmatched
|
|
115
|
+
or invalid targets, unsupported event classification, and terminal route
|
|
116
|
+
failure. Route failures are limited to the observable bell queue/store and
|
|
117
|
+
Antigravity explicit-response seams. Identical safe anomaly tuples are
|
|
118
|
+
coalesced per process. Successful state, notification, quiet, and bell-dedupe
|
|
119
|
+
traffic emits zero common AI events. Notify enqueue/delivery remains owned by
|
|
120
|
+
the Phase 4 notify recorder, so ingest does not add a second AI success outcome
|
|
121
|
+
or claim a secondary notify outcome. An ingest failure owns the top-level error
|
|
122
|
+
logically before its best-effort append, preventing a duplicate generic
|
|
123
|
+
`command.outcome`.
|
|
124
|
+
|
|
125
|
+
The common AI event never contains the raw hook payload or event name, prompt,
|
|
126
|
+
transcript, tool name/input/output, notification summary/body, pane content,
|
|
127
|
+
cwd/path/command/title/topic, tmux target, queue ID, provider conversation or
|
|
128
|
+
session identifier, UUID, or arbitrary reason/error string. `failure` is a
|
|
129
|
+
stage enum, not `error.Error()`.
|
|
130
|
+
|
|
131
|
+
Resource attribution diagnostics use `component=resource` and the single
|
|
132
|
+
`resource.sampler.outcome` family. The Resource Inspector lifecycle is the
|
|
133
|
+
only writer: its Linux collector owns tmux inventory, project-root discovery,
|
|
134
|
+
and procfs attribution, while its refresh gate owns derived staleness. The
|
|
135
|
+
closed `source` values are `sampler`, `tmux-inventory`, `project-discovery`,
|
|
136
|
+
and `refresh`; the closed `resource_result` values are `unavailable`,
|
|
137
|
+
`partial`, `stale`, `error`, and `scan-budget-exceeded`. `failure` is limited
|
|
138
|
+
to the matching safe stage enum. Impossible source/result/failure combinations
|
|
139
|
+
are rejected.
|
|
140
|
+
|
|
141
|
+
The lifecycle's existing overlap and trigger-drop counters remain UI-only
|
|
142
|
+
refresh feedback and do not create an operational event by themselves. When
|
|
143
|
+
the retained last-complete sample crosses the stale boundary, the refresh
|
|
144
|
+
owner records the single coalesced `stale` transition instead.
|
|
145
|
+
|
|
146
|
+
Normal warming/ready samples, periodic samples, successful automatic/manual
|
|
147
|
+
refreshes, and the separate host-only `projmux status resources` sampler emit
|
|
148
|
+
zero common resource events. The two-second Resource Inspector lifecycle budget
|
|
149
|
+
measures inventory, discovery, and procfs collection together. Tmux inventory
|
|
150
|
+
and procfs observe its context directly. Project discovery does not currently
|
|
151
|
+
accept a context, so an overrun is classified as budget-exceeded when discovery
|
|
152
|
+
returns rather than being preempted; making that seam cancellable is a separate
|
|
153
|
+
follow-up. Budget exhaustion preserves the established unavailable UI/CLI
|
|
154
|
+
result and adds only the safe budget tuple. A persistent identical anomaly
|
|
155
|
+
emits once. Recovery is silent and resets that transition, so a later re-entry
|
|
156
|
+
emits once again. Journal append failure does not affect snapshot selection,
|
|
157
|
+
popup refresh, stdout/stderr, or exit status.
|
|
158
|
+
|
|
159
|
+
No resource event contains CPU or memory values, PID/process counts, process
|
|
160
|
+
command/cwd/title, project/session/window/pane identifiers, socket/TTY,
|
|
161
|
+
attribution details, snapshot status text, arbitrary errors, paths, UUIDs, or
|
|
162
|
+
privacy seeds. Partial and stale outcomes are info-level and remain in the
|
|
163
|
+
private local journal only. Unavailable, collection/inventory/discovery error,
|
|
164
|
+
and scan-budget outcomes are error-level, so the explicit support report may
|
|
165
|
+
include their closed enums after hashing run/version correlation. The report's
|
|
166
|
+
existing error-only projection omits partial/stale and never exports metrics or
|
|
167
|
+
identity.
|
|
168
|
+
|
|
39
169
|
The diagnostics package exposes a typed `ReadRuntimeHealth` projection for
|
|
40
170
|
read-only Doctor consumers. It reports the fixed `tmux` backend, latest
|
|
41
171
|
socket/apply state, and a bounded tail/count of safe failures using only
|
|
@@ -106,8 +236,44 @@ viewer read is excluded from success logging, so inspection does not create a
|
|
|
106
236
|
recursion loop.
|
|
107
237
|
|
|
108
238
|
The older bounded `ai-ingest.log` and subsystem-specific `PROJMUX_*_DEBUG`
|
|
109
|
-
surfaces retain their current paths, formats, and behavior.
|
|
110
|
-
|
|
239
|
+
surfaces retain their current paths, formats, and behavior. Phase 6 deliberately
|
|
240
|
+
keeps the legacy producer and both existing consumers: `projmux ai ingest log`
|
|
241
|
+
still reads the legacy JSONL bytes, and `diagnostics report` still emits its
|
|
242
|
+
allowlisted source/result count summary. Legacy append failure remains
|
|
243
|
+
best-effort and independent of common-journal append failure.
|
|
244
|
+
|
|
245
|
+
The measured migration parity is:
|
|
246
|
+
|
|
247
|
+
| Legacy `ai-ingest.log` result | Common operational projection |
|
|
248
|
+
| --- | --- |
|
|
249
|
+
| parse error with no classified event | `payload / failed / payload-invalid` |
|
|
250
|
+
| bell queue/store or Antigravity response route error | allowlisted semantic kind / `failed / route-failed` |
|
|
251
|
+
| no matching pane | allowlisted semantic kind / `ignored / target-unmatched` |
|
|
252
|
+
| pane-not-found bell target | `bell / ignored / target-unmatched` |
|
|
253
|
+
| unknown event recorded as quiet | `unknown / ignored / unsupported-event` |
|
|
254
|
+
| normal `state`, `notify`, known `quiet`, or `deduped` | zero common AI events; existing state/notify owner remains authoritative |
|
|
255
|
+
| stdin read or payload-size rejection before the legacy append seam | common-only `payload-read` or `payload-oversized`; no legacy row existed |
|
|
256
|
+
| blank `ai ingest bell` CLI target rejected before the legacy append seam | common-only `bell / ignored / target-invalid`; exit semantics unchanged |
|
|
257
|
+
|
|
258
|
+
This is a dual-run migration seam, not a deprecation. Operators who need the
|
|
259
|
+
legacy detailed local view can keep using `ai ingest log`; support archives
|
|
260
|
+
remain count-only for that file. The common journal is the safe correlated
|
|
261
|
+
source for watcher lifecycle and anomalous ingest classification. The file is
|
|
262
|
+
a documented **Deprecate candidate**, not deprecated behavior in this release:
|
|
263
|
+
common diagnostics cover anomalies but not the legacy detailed normal-state
|
|
264
|
+
consumer. Any deprecation/removal requires a separate breaking roadmap with
|
|
265
|
+
consumer migration.
|
|
266
|
+
|
|
267
|
+
`PROJMUX_FOCUS_DEBUG` remains available with its existing one-line byte
|
|
268
|
+
contract. Focus diagnostics share its request classification seam, but do not
|
|
269
|
+
copy the debug line's raw target, session/window/pane, socket, client, source,
|
|
270
|
+
or kind values into the journal. It is a documented **Deprecate candidate**
|
|
271
|
+
because the common focus transition is the safe support path; its raw routing
|
|
272
|
+
byte contract remains unchanged until a separate breaking deprecation.
|
|
273
|
+
|
|
274
|
+
The complete file/surface inventory and decisions are maintained in
|
|
275
|
+
[legacy-diagnostics-inventory.md](legacy-diagnostics-inventory.md). These are
|
|
276
|
+
candidates only; Phase 6 removes, renames, ignores, or changes none of them.
|
|
111
277
|
|
|
112
278
|
## Explicit support report
|
|
113
279
|
|
|
@@ -48,6 +48,13 @@ maps, SQLite, protobuf, or remote telemetry.
|
|
|
48
48
|
- Snapshot state is `warming`, `ready`, `partial`, or `unavailable`. Bounded
|
|
49
49
|
diagnostics contain scan duration and sampled/skipped/race/permission counts,
|
|
50
50
|
plus identity/delta quality counts; they contain no user payload.
|
|
51
|
+
- The interactive lifecycle has a two-second total budget matching its
|
|
52
|
+
non-overlapping cadence. Tmux inventory and procfs observe the context
|
|
53
|
+
directly. Project discovery is included in elapsed-budget classification but
|
|
54
|
+
its current interface is not cancellable, so an overrun is recognized only
|
|
55
|
+
when discovery returns. Budget exhaustion remains an unavailable snapshot;
|
|
56
|
+
it never exposes a partially mutating result. Context-aware project discovery
|
|
57
|
+
is a separate follow-up.
|
|
51
58
|
|
|
52
59
|
## Measurements
|
|
53
60
|
|
|
@@ -172,6 +179,15 @@ Memory, or Name once from the current sample, while later refreshes update row
|
|
|
172
179
|
values without silently moving focus. Native synchronized frame diffs repaint
|
|
173
180
|
only changed rows and update state/footer chrome together.
|
|
174
181
|
|
|
182
|
+
The Resource Inspector lifecycle projects only unavailable, partial, stale,
|
|
183
|
+
collection/inventory/discovery error, and scan-budget transitions into the
|
|
184
|
+
private bounded operations journal. A persistent identical transition is
|
|
185
|
+
coalesced until silent recovery; normal samples and refreshes emit nothing.
|
|
186
|
+
The statusbar's separate host-only sampler also emits nothing. Resource events
|
|
187
|
+
never contain the metrics, PID/process data, tmux/project identity, paths,
|
|
188
|
+
titles, commands, snapshot reasons, or arbitrary error strings described by
|
|
189
|
+
this UI model. See [operational-diagnostics.md](operational-diagnostics.md).
|
|
190
|
+
|
|
175
191
|
The live summary is a fixed five-row bottom dock below the search/list surface:
|
|
176
192
|
one renderer-owned theme-aware divider, then Host, Attributed, Coverage, and
|
|
177
193
|
Sample. It does not scroll or filter with rows. Coverage owns the non-drillable
|
package/docs/session-restore.md
CHANGED
|
@@ -137,3 +137,21 @@ longer accepts startup selector flags for session-state restore. It always
|
|
|
137
137
|
follows the normal empty attach path after resolving the target app session name
|
|
138
138
|
and startup directory. Use `Settings > Session State > Sidebar startup picker` for
|
|
139
139
|
interactive Latest snapshot / Named snapshot / Empty session selection.
|
|
140
|
+
|
|
141
|
+
## Operational diagnostics
|
|
142
|
+
|
|
143
|
+
Selected Session State mutations leave one local, best-effort terminal outcome
|
|
144
|
+
in the bounded operational journal. Manual and popup save, Project Settings
|
|
145
|
+
latest/named save, manual/Settings/prune delete, and actual project-startup
|
|
146
|
+
latest/named replay are covered. Restore preview and `--dry-run` remain
|
|
147
|
+
read-only. Successful autosave, disabled/not-due/fresh autosave no-ops, and
|
|
148
|
+
nested snapshot store/replay calls do not write an outcome; an actual autosave
|
|
149
|
+
failure writes one safe error even under `--quiet`.
|
|
150
|
+
|
|
151
|
+
The outcome contains only a closed operation/source and aggregate window,
|
|
152
|
+
pane, recipe, or deleted-item counts. It never contains a snapshot or project
|
|
153
|
+
path, snapshot content/name, pane cwd/command, agent resume/conversation/session
|
|
154
|
+
ID, or arbitrary metadata. Diagnostics append failure never changes save,
|
|
155
|
+
restore, delete, or quiet-autosave behavior. See
|
|
156
|
+
[operational-diagnostics.md](operational-diagnostics.md) for the complete event
|
|
157
|
+
schema and retention/privacy contract.
|
package/docs/settings-ia.md
CHANGED
|
@@ -71,11 +71,11 @@ view-first layout:
|
|
|
71
71
|
desktop AI notification collapse window. It stores integer seconds and shows
|
|
72
72
|
the effective source; `PROJMUX_TMUX_NOTIFY_DEDUPE_SECONDS` remains the top
|
|
73
73
|
override. The tmux bell fallback keeps its fixed 5 second window.
|
|
74
|
-
- `Settings > Notifications > Delivery sources` shows Codex
|
|
75
|
-
tmux producer diagnostics, the effective desktop sender
|
|
76
|
-
copyable install/remove/dry-run commands. Settings copies
|
|
77
|
-
it does not install or remove external notify wiring. The
|
|
78
|
-
source is intentionally omitted from Settings.
|
|
74
|
+
- `Settings > Notifications > Delivery sources` shows Codex, Claude,
|
|
75
|
+
Antigravity, and tmux producer diagnostics, the effective desktop sender
|
|
76
|
+
override state, and copyable install/remove/dry-run commands. Settings copies
|
|
77
|
+
command text only; it does not install or remove external notify wiring. The
|
|
78
|
+
legacy Codex notify source is intentionally omitted from Settings.
|
|
79
79
|
- `Settings > Notifications > Hook quiet policy` shows Codex/Claude hook
|
|
80
80
|
runtime action values and writes only
|
|
81
81
|
`${XDG_CONFIG_HOME:-$HOME/.config}/projmux/ai-hook-actions.json`. It does not
|
|
@@ -97,7 +97,8 @@ view-first layout:
|
|
|
97
97
|
- `Settings > Labs > Project Hooks` is overview-first. The Labs root opens the
|
|
98
98
|
overview, and the on/off mutation rows live one level deeper.
|
|
99
99
|
- `Settings > AI Settings` is view-first. The root contains `Default split
|
|
100
|
-
mode
|
|
100
|
+
mode`, `Enabled agents`, and `Resume picker`; the default-mode detail contains
|
|
101
|
+
the `Claude`, `Codex`, `Antigravity`, `Shell`, and `Selective` choices.
|
|
101
102
|
- `Settings > Project > Project recipe` is the functional label for
|
|
102
103
|
`.projmux/config.toml`. Search still matches `config.toml` as an alias.
|
|
103
104
|
- `Settings > Project > Project recipe` is view-first. The root contains section
|
|
@@ -117,7 +118,7 @@ view-first layout:
|
|
|
117
118
|
visible as warnings and fall back to `en-US`.
|
|
118
119
|
- Global root descriptions keep ownership explicit: Appearance owns language,
|
|
119
120
|
AI badge style, and status/notification icon decoration; Theme owns presets,
|
|
120
|
-
color tokens
|
|
121
|
+
and color tokens. About describes only the surface it retains.
|
|
121
122
|
- `Settings > About` is intentionally compact: Version, Source, update
|
|
122
123
|
status/actions (including Latest, Update state, Installer, and Release notes
|
|
123
124
|
when available), Welcome, and Quit. It does not reproduce static key,
|
package/docs/statusbar.md
CHANGED
|
@@ -122,16 +122,16 @@ bind-key -n MouseDown1Status if-shell -F "#{==:#{mouse_status_range},window}" \
|
|
|
122
122
|
|
|
123
123
|
## Range catalogue
|
|
124
124
|
|
|
125
|
-
| Range id |
|
|
126
|
-
| -------- |
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
129
|
-
| `
|
|
130
|
-
| `
|
|
131
|
-
| `
|
|
132
|
-
| `
|
|
133
|
-
| `
|
|
134
|
-
| `
|
|
125
|
+
| Range id | Generated row | Click action | Keyboard |
|
|
126
|
+
| -------- | ------------- | ----------------------------------------- | ------------- |
|
|
127
|
+
| `notify` | `status-format[0]` | `projmux focus --target <newest> --source status-bar --kind segment-click [--client <tty>]`, then ack on focus success | `prefix s n` |
|
|
128
|
+
| `usage` | `status-format[0]` | show a native-framed usage HUD popup from cached usage state | `prefix s u` |
|
|
129
|
+
| `session` | `status-format[1]` | `projmux tmux popup-toggle sessionizer-sidebar` | `prefix s s` |
|
|
130
|
+
| `pwd` | `status-format[1]` | show a native-framed current-path popup; no clipboard or tmux buffer copy | `prefix s p` |
|
|
131
|
+
| `kube` | `status-format[1]` | `projmux tmux popup-toggle sessionizer` | `prefix s k` |
|
|
132
|
+
| `git` | `status-format[1]` | `projmux tmux popup-toggle sessionizer` | `prefix s g` |
|
|
133
|
+
| `resources` | `status-format[1]` | `projmux tmux popup-toggle --client <tty> resource-inspector` | mouse or custom `Resources:Open`; no default key |
|
|
134
|
+
| `settings` | `status-format[1]` | `projmux tmux popup-toggle --client <tty> ai-split-settings` | mouse only; `prefix s s` remains `session` |
|
|
135
135
|
|
|
136
136
|
`notify` reads the pending queue only. For a live pane-state view that is
|
|
137
137
|
independent of queued reminders, use `projmux attention list`. To explain why
|
|
@@ -284,9 +284,8 @@ updates the matching live tmux option
|
|
|
284
284
|
(`@projmux_statusbar_decoration_cwd`, `_git`, or `_notify`) when run inside
|
|
285
285
|
tmux. The legacy `~/.config/projmux/statusbar-decoration` and
|
|
286
286
|
`@projmux_statusbar_decoration` remain fallback defaults for older configs.
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
font family or size, so unsupported environments report `not applied`.
|
|
287
|
+
Settings > Theme controls the bottom status bar background through
|
|
288
|
+
`status_background`; `surface` controls popup and native frame backgrounds.
|
|
290
289
|
|
|
291
290
|
Settings > Labs controls the experimental live resource segment. Its saved
|
|
292
291
|
value is `~/.config/projmux/live-resources`; changing it inside tmux updates
|
package/docs/upgrading.md
CHANGED
|
@@ -116,13 +116,14 @@ through separate terminal preset variants.
|
|
|
116
116
|
|
|
117
117
|
### Pane body vs popup backgrounds
|
|
118
118
|
|
|
119
|
-
The general
|
|
120
|
-
separate public tokens. The pane body follows `background` (unset
|
|
121
|
-
terminal default),
|
|
122
|
-
settings/notify/recent/picker frames follow
|
|
123
|
-
fallback equals `background`, leaving
|
|
124
|
-
|
|
125
|
-
body.
|
|
119
|
+
The general pane, bottom status bar, and popup/native frame backgrounds are now
|
|
120
|
+
driven by separate public tokens. The pane body follows `background` (unset
|
|
121
|
+
keeps the terminal default), the status bar follows `status_background`, and
|
|
122
|
+
native popup bodies plus the settings/notify/recent/picker frames follow
|
|
123
|
+
`surface`. Because the `surface` fallback equals `background`, leaving those two
|
|
124
|
+
unset looks exactly as before; set `surface` separately to make popups read as a
|
|
125
|
+
distinct surface from the pane body. Set `status_background` separately to
|
|
126
|
+
repaint only the bottom status bar.
|
|
126
127
|
|
|
127
128
|
### Theme font keys removed
|
|
128
129
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projmux",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "tmux project session manager",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/crevissepartners/projmux#readme",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"package:npm:pack": "scripts/package-npm.sh --pack"
|
|
29
29
|
},
|
|
30
30
|
"optionalDependencies": {
|
|
31
|
-
"@projmux/linux-x64": "0.10.
|
|
32
|
-
"@projmux/linux-arm64": "0.10.
|
|
33
|
-
"@projmux/darwin-x64": "0.10.
|
|
34
|
-
"@projmux/darwin-arm64": "0.10.
|
|
31
|
+
"@projmux/linux-x64": "0.10.1",
|
|
32
|
+
"@projmux/linux-arm64": "0.10.1",
|
|
33
|
+
"@projmux/darwin-x64": "0.10.1",
|
|
34
|
+
"@projmux/darwin-arm64": "0.10.1"
|
|
35
35
|
}
|
|
36
36
|
}
|