projmux 0.15.2 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-ko.md +3 -4
- package/README.md +3 -3
- package/docs/agent-message-replies.md +82 -2
- package/docs/ai-agent-shortcuts.md +6 -5
- package/docs/architecture.md +149 -63
- package/docs/claude-coordination-endpoints.md +192 -21
- package/docs/cli-guide.md +322 -124
- package/docs/cli.md +605 -500
- package/docs/codex-installed-compatibility.md +6 -11
- package/docs/codex-native-required-migration.md +1 -59
- package/docs/configuration.md +164 -176
- package/docs/globalization.md +11 -1
- package/docs/heterogeneous-dialogue-canary.md +8 -3
- package/docs/hooks.md +83 -32
- package/docs/keybindings.md +108 -3
- package/docs/legacy-cli-retirement.md +3 -3
- package/docs/legacy-diagnostics-inventory.md +4 -4
- package/docs/native-picker.md +3 -5
- package/docs/notify-queue.md +1 -1
- package/docs/operational-diagnostics.md +53 -31
- package/docs/pr-guideline.md +66 -22
- package/docs/release.md +97 -0
- package/docs/replacement-contract.md +66 -58
- package/docs/resource-attribution.md +2 -2
- package/docs/session-restore.md +46 -80
- package/docs/settings-ia.md +43 -20
- package/docs/statusbar.md +25 -22
- package/docs/testing.md +15 -0
- package/docs/theme-palette.md +14 -0
- package/docs/tmux-surface-inventory.md +8 -10
- package/docs/troubleshooting.md +2 -4
- package/docs/upgrading.md +142 -7
- package/docs/usage-tracking.md +56 -53
- package/package.json +5 -5
- package/docs/agent-workflow.md +0 -2123
- package/docs/codex-generation-pool.md +0 -623
- package/docs/codex-stored-qualification.md +0 -45
package/docs/usage-tracking.md
CHANGED
|
@@ -1,22 +1,26 @@
|
|
|
1
1
|
# Usage tracking
|
|
2
2
|
|
|
3
3
|
`projmux agent usage` and `projmux internal status usage` report authoritative fixed-window
|
|
4
|
-
utilisation for Claude/Codex
|
|
4
|
+
utilisation for Claude/Codex.
|
|
5
5
|
`--model all`, the tmux
|
|
6
6
|
HUD, and the statusbar usage popup use Settings > AI Settings > Enabled
|
|
7
|
-
agents as the source of truth, so disabled Claude/Codex
|
|
7
|
+
agents as the source of truth, so disabled Claude/Codex providers are
|
|
8
8
|
not refreshed or rendered on ambient/all surfaces. Explicit read-only
|
|
9
|
-
requests such as `projmux agent usage --model claude
|
|
10
|
-
`--model antigravity`
|
|
9
|
+
requests such as `projmux agent usage --model claude` or `--model codex`
|
|
11
10
|
still collect and render that provider even when it is disabled.
|
|
12
11
|
|
|
13
|
-
Claude and Codex adapters read the upstream's own account view.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
Claude and Codex adapters read the upstream's own account view. projmux does
|
|
13
|
+
not infer quota, cadence, reset timestamps, or account limits from screen
|
|
14
|
+
scraping, tokens, history, OAuth/cache files, or binary strings.
|
|
15
|
+
|
|
16
|
+
Antigravity has no usage adapter: Antigravity offers no official usage event,
|
|
17
|
+
and projmux no longer reads its statusLine. `--model antigravity` is still
|
|
18
|
+
accepted; it prints no rows and the `Antigravity usage unsupported` note (exit
|
|
19
|
+
status 0), and an enabled Antigravity shows the same note on `--model all` and
|
|
20
|
+
in the statusbar popup. Rows an older Antigravity adapter left in
|
|
21
|
+
`snapshots.json` are never printed or projected, and leftover
|
|
22
|
+
`usage/antigravity-*.json` sidecars and Antigravity statusbar visibility files
|
|
23
|
+
are neither read nor deleted.
|
|
20
24
|
|
|
21
25
|
Claude keeps the canonical aggregate `five_hour` and `seven_day` rows and also
|
|
22
26
|
preserves structurally valid typed `limits[]` rows as named account quotas for
|
|
@@ -128,30 +132,6 @@ rollout fallback row records `source=rollout` plus the closed fallback reason.
|
|
|
128
132
|
If neither lane produces rows, Manager preserves the previous source/value and
|
|
129
133
|
adds a closed `stale_reason` to the last-known-good row.
|
|
130
134
|
|
|
131
|
-
### Antigravity (`internal/core/usage/adapters/antigravity`)
|
|
132
|
-
|
|
133
|
-
Local managed-statusline sidecars. No network or credential reads.
|
|
134
|
-
|
|
135
|
-
- `context_window.used_percentage` and its conversation ID remain in the
|
|
136
|
-
private context sidecar for hook/notify diagnostics. They do not become
|
|
137
|
-
Usage snapshots. The legacy string percentage remains a writer fallback.
|
|
138
|
-
- The official `quota` map is sorted by its exact bucket ID. Each valid bucket
|
|
139
|
-
becomes `window=quota`, `bucket=<upstream ID>` and renders as
|
|
140
|
-
`quota/<upstream ID>` on account-inspection surfaces.
|
|
141
|
-
- Used percent is `100 * (1 - remaining_fraction)`. Non-finite or values
|
|
142
|
-
outside `[0,1]`, empty IDs, null/disabled entries, and negative relative
|
|
143
|
-
resets are ignored safely. Rejected and duplicate buckets are skipped
|
|
144
|
-
individually — the healthy buckets in the same map still become rows — and the
|
|
145
|
-
skip is reported by sorted row index only, never by bucket ID.
|
|
146
|
-
- `reset_time` and optional `reset_in_seconds` are stored independently. An
|
|
147
|
-
absent relative reset differs from explicit zero; no value is derived from
|
|
148
|
-
the other.
|
|
149
|
-
- Context and quota use independent private sidecars. A context-only payload
|
|
150
|
-
does not erase the last quota observation. An explicit empty/null quota map
|
|
151
|
-
records no buckets; the manager's existing rule still preserves prior model
|
|
152
|
-
rows when an adapter returns zero total rows. Context never participates in
|
|
153
|
-
that account-row replacement decision.
|
|
154
|
-
|
|
155
135
|
## Snapshot store
|
|
156
136
|
|
|
157
137
|
```
|
|
@@ -180,7 +160,7 @@ across machines (Dropbox, iCloud Drive).
|
|
|
180
160
|
### `projmux agent usage`
|
|
181
161
|
|
|
182
162
|
```
|
|
183
|
-
projmux agent usage [--model codex|claude|
|
|
163
|
+
projmux agent usage [--model codex|claude|all] [--window 5h|weekly|context|quota|all]
|
|
184
164
|
[--json] [--force|-f]
|
|
185
165
|
```
|
|
186
166
|
|
|
@@ -192,7 +172,6 @@ Enabled agents, filters by window, and renders the tab-aligned table:
|
|
|
192
172
|
MODEL WINDOW PCT RESETS_AT RESET_IN STALE SOURCE REASON
|
|
193
173
|
codex 5h/codex · General 12% 2026-05-07T14:00:00+09:00 - app-server
|
|
194
174
|
claude 5h 80% 2026-05-07T14:00:00+09:00 -
|
|
195
|
-
antigravity quota/gemini-weekly 6% 2026-07-06T16:50:32+09:00 560580s
|
|
196
175
|
claude quota/group-redacted · Model Redacted Alpha 38% 2031-02-03T15:05:06+09:00 - *
|
|
197
176
|
```
|
|
198
177
|
|
|
@@ -210,11 +189,9 @@ claude is in backoff, try again in 30m (use --force to bypass)
|
|
|
210
189
|
|
|
211
190
|
When no AI agents are enabled, all-model table output contains no
|
|
212
191
|
provider rows and prints a short Settings hint. `--json` returns an
|
|
213
|
-
empty array. Explicit `--model claude
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
zero or more account `quota/<bucket-id>` rows. Legacy cached `window=context`
|
|
217
|
-
rows are suppressed in text and JSON output. `--window quota` selects only
|
|
192
|
+
empty array. Explicit `--model claude` and `--model codex` bypass the
|
|
193
|
+
enabled-agent filter for read-only inspection and collect/render only the
|
|
194
|
+
requested adapter. Legacy cached `window=context` rows are suppressed in text and JSON output. `--window quota` selects only
|
|
218
195
|
account buckets; `--window weekly` never matches an opaque quota bucket named
|
|
219
196
|
`weekly`. `--window context` remains an accepted compatibility filter and
|
|
220
197
|
returns no Usage rows.
|
|
@@ -236,11 +213,10 @@ after collection, throttle/backoff, and cache load. If no AI
|
|
|
236
213
|
agents are enabled, the status segment emits nothing.
|
|
237
214
|
|
|
238
215
|
The HUD first derives an ambient projection separate from lossless account
|
|
239
|
-
snapshots. The explicit HUD capability map admits Claude/Codex `5h` and
|
|
240
|
-
`weekly
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
do not participate in status width. Claude `limits[]` named/model rows are also
|
|
216
|
+
snapshots. The explicit HUD capability map admits only Claude/Codex `5h` and
|
|
217
|
+
`weekly`. Context, named quota buckets, and cached rows from providers without
|
|
218
|
+
a capability (such as the removed Antigravity adapter) do not participate in
|
|
219
|
+
status width. Claude `limits[]` named/model rows are also
|
|
244
220
|
excluded; only its aggregate official `5h` and `weekly` rows reach the HUD.
|
|
245
221
|
The Settings provider list consumes `aiprovider.UsageSupported()` order, but a
|
|
246
222
|
window toggle exists only when this same projection seam declares it. A future
|
|
@@ -248,11 +224,26 @@ provider or an opaque bucket cannot manufacture a window row.
|
|
|
248
224
|
For native Codex multi-bucket rows, the exact `codex` bucket wins the HUD
|
|
249
225
|
projection, then the legacy empty bucket, then lexical bucket order. The HUD
|
|
250
226
|
compact identity is derived from that same row: a healthy authoritative
|
|
251
|
-
`app-server` row is simply `Codex`, a
|
|
252
|
-
`Codex [
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
227
|
+
`app-server` row is simply `Codex`, a retained last-known-good row is
|
|
228
|
+
`Codex [stale]`, and a fallback row keeps the bare `Codex` text while the HUD
|
|
229
|
+
paints its label with the dedicated `provenance` theme color. Blank, malformed,
|
|
230
|
+
or future non-stale provenance also fails conservatively to that same fallback
|
|
231
|
+
presentation rather than looking native or expanding the compact vocabulary.
|
|
232
|
+
|
|
233
|
+
That label used to spend 11 cells on a ` [fallback]` tag. It now spends none in
|
|
234
|
+
the HUD and one in the text tiers, which is what the user asked for:
|
|
235
|
+
*"이거 간단한 로드맵 거리긴한대 codex[fallback] 하단 status 바대신 주황색의 Codex가나오는게어때"*
|
|
236
|
+
and, once the color-rule options were laid out, *"B로 가자"* — a role color of its
|
|
237
|
+
own rather than a reused threshold color, with `[stale]` left alone. That role
|
|
238
|
+
color is the public `provenance` theme token (`colour208` in the fallback
|
|
239
|
+
theme); see [theme-palette.md](theme-palette.md).
|
|
240
|
+
|
|
241
|
+
Below the bar tiers the segment is colorless, so a fallback row spells
|
|
242
|
+
`Codex^ 5h:17%` there, or `X^ 5h:17%` at the single-letter tier: one ASCII cell
|
|
243
|
+
in place of the tag. A client that cannot paint color, or a theme that sets
|
|
244
|
+
`provenance` to the ordinary label color, therefore shows no fallback signal in
|
|
245
|
+
the HUD at all — the recovery path is the full surface below.
|
|
246
|
+
The exact raw source and closed fallback/stale reason stay
|
|
256
247
|
in `agent usage --model codex` table/JSON output and in
|
|
257
248
|
`projmux diagnostics log --component usage`; compact labels never replace
|
|
258
249
|
those fields.
|
|
@@ -329,7 +320,19 @@ When a collection fails, the failure is visible in three places:
|
|
|
329
320
|
|
|
330
321
|
The row carries the provider and closed source/failure enums and nothing else:
|
|
331
322
|
`collect-failed` (whole-adapter failure, `level=error`) or `rows-skipped`
|
|
332
|
-
(partial failure, `level=info`).
|
|
323
|
+
(partial failure, `level=info`). A whole Claude failure names its class in
|
|
324
|
+
place of `collect-failed`, also at `level=error`:
|
|
325
|
+
`credentials-unavailable` (no credentials path resolved, or the credentials
|
|
326
|
+
file is missing, unreadable, or unparseable), `credentials-token-empty`,
|
|
327
|
+
`auth-rejected` (a 401 the stored refresh token could not recover from: no
|
|
328
|
+
refresh token, a failed refresh round-trip, or another 401 for the refreshed
|
|
329
|
+
token), `rate-limited` (429), `http-status` (any other non-200 response),
|
|
330
|
+
`network-error` (the request could not be built or sent, or its body could
|
|
331
|
+
not be read), or `response-invalid` (a 200 body that did not parse). The
|
|
332
|
+
class comes from the adapter's typed error, never from its message text. A
|
|
333
|
+
failure without a class stays `collect-failed`, and so does every whole
|
|
334
|
+
Codex failure. Status codes, paths, upstream bodies, and
|
|
335
|
+
credentials never reach the row. Codex rollout fallback records
|
|
333
336
|
`source=rollout` plus its closed fallback reason; retained data records
|
|
334
337
|
`source=last-known-good` plus its closed stale reason. A healthy native
|
|
335
338
|
collection writes no row at all. Identical `(provider, source, failure)`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "projmux",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"description": "tmux project session manager",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/crevissepartners/projmux#readme",
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"package:npm:pack": "scripts/package-npm.sh --pack"
|
|
29
29
|
},
|
|
30
30
|
"optionalDependencies": {
|
|
31
|
-
"@projmux/linux-x64": "0.
|
|
32
|
-
"@projmux/linux-arm64": "0.
|
|
33
|
-
"@projmux/darwin-x64": "0.
|
|
34
|
-
"@projmux/darwin-arm64": "0.
|
|
31
|
+
"@projmux/linux-x64": "0.16.0",
|
|
32
|
+
"@projmux/linux-arm64": "0.16.0",
|
|
33
|
+
"@projmux/darwin-x64": "0.16.0",
|
|
34
|
+
"@projmux/darwin-arm64": "0.16.0"
|
|
35
35
|
}
|
|
36
36
|
}
|