gh-glance 0.19.1 → 0.19.3
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/CHANGELOG.md +25 -1
- package/README.md +23 -21
- package/index.mjs +21 -11
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.19.3] - 2026-11-12
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- A single contradictory rate-limit reading no longer pauses all panes until
|
|
15
|
+
the hourly reset. Rejected budget readings now show a failed budget check
|
|
16
|
+
that retries automatically instead of corrupt coordination state.
|
|
17
|
+
|
|
18
|
+
## [0.19.2] - 2026-11-06
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- The fifth section is now named `Events` (`5:Events`) at every width that shows
|
|
23
|
+
a name, in the tab bar, its view title and the help text. Narrow panes no longer switch it
|
|
24
|
+
to a different word (`Status`, earlier `Notices`). Full tab names now fit
|
|
25
|
+
in panes 7 columns narrower.
|
|
26
|
+
- A wait that ends in under two minutes no longer counts toward the `Events`
|
|
27
|
+
unread badge. The view still lists it. Each wait is measured on its own, so
|
|
28
|
+
repeated short waits do not add up. Problems, causes that need action and
|
|
29
|
+
longer waits count as before.
|
|
30
|
+
|
|
10
31
|
## [0.19.1] - 2026-11-04
|
|
11
32
|
|
|
12
33
|
### Changed
|
|
@@ -1430,7 +1451,10 @@ engineering, security, QA and UX. What follows is what changed as a result.
|
|
|
1430
1451
|
- The `main` field from `package.json`. It advertised the file as importable,
|
|
1431
1452
|
but importing it took over the terminal or exited the host process.
|
|
1432
1453
|
|
|
1433
|
-
[Unreleased]: https://github.com/juan294/gh-glance/compare/v0.19.
|
|
1454
|
+
[Unreleased]: https://github.com/juan294/gh-glance/compare/v0.19.3...HEAD
|
|
1455
|
+
[0.19.3]: https://github.com/juan294/gh-glance/compare/v0.19.2...v0.19.3
|
|
1456
|
+
[0.19.2]: https://github.com/juan294/gh-glance/compare/v0.19.1...v0.19.2
|
|
1457
|
+
[0.19.1]: https://github.com/juan294/gh-glance/compare/v0.19.0...v0.19.1
|
|
1434
1458
|
[0.19.0]: https://github.com/juan294/gh-glance/compare/v0.18.1...v0.19.0
|
|
1435
1459
|
[0.18.1]: https://github.com/juan294/gh-glance/compare/v0.18.0...v0.18.1
|
|
1436
1460
|
[0.18.0]: https://github.com/juan294/gh-glance/compare/v0.17.1...v0.18.0
|
package/README.md
CHANGED
|
@@ -20,15 +20,15 @@ pane next to your editor) where you want an always-on glance at repo activity
|
|
|
20
20
|
without switching to the browser.
|
|
21
21
|
|
|
22
22
|
```
|
|
23
|
-
[1:Actions (4)]
|
|
23
|
+
[1:Actions (4)] 2:Issues 3:Pull requests 4:Security 5:Events
|
|
24
24
|
───────────────────────────────────────────────────────────────────────────
|
|
25
25
|
╭─ Actions · owner/repo ──────────────────────────────────────────────────╮
|
|
26
26
|
│ TITLE │WORKFLOW │BRANCH │TIME │UPDATED │
|
|
27
27
|
│ ─────────────────────────────────────────────────────────────────────── │
|
|
28
|
-
│ >+ ci: pin actions to com… #443 CI develop 1m20s
|
|
29
|
-
│ x fix: restore the prima… #442 Code… develop 1m28s
|
|
30
|
-
│ + chore: bump dependenci… #441 CI dependa…int-10 30s
|
|
31
|
-
│ - docs: update the readme #440 CI develop 15s
|
|
28
|
+
│ >+ ci: pin actions to com… #443 CI develop 1m20s 96d ago │
|
|
29
|
+
│ x fix: restore the prima… #442 Code… develop 1m28s 96d ago │
|
|
30
|
+
│ + chore: bump dependenci… #441 CI dependa…int-10 30s 96d ago │
|
|
31
|
+
│ - docs: update the readme #440 CI develop 15s 97d ago │
|
|
32
32
|
│ │
|
|
33
33
|
│ │
|
|
34
34
|
╰──────────────────────────────────────────────────────────────── 4 of 4 ─╯
|
|
@@ -47,9 +47,9 @@ without switching to the browser.
|
|
|
47
47
|
> red" is answerable without switching to that tab — an `x` means the tab's
|
|
48
48
|
> latest fetch failed, and a `?` in place of the Security count means its
|
|
49
49
|
> endpoints could not be read, which is not the same as there being nothing to
|
|
50
|
-
> report. `5:
|
|
50
|
+
> report. `5:Events` gains an
|
|
51
51
|
> unread count such as `(3)` when waits or problems arrive while it is closed;
|
|
52
|
-
> see [
|
|
52
|
+
> see [Events](#events).
|
|
53
53
|
|
|
54
54
|
<!-- contract:allow-emoji -- the check/cross above stand in for Nerd Font
|
|
55
55
|
Octicons the app actually draws; they are literal examples, not decoration. -->
|
|
@@ -89,7 +89,7 @@ current.
|
|
|
89
89
|
Security -- see [Limitations](#limitations).
|
|
90
90
|
- Tab bar with live counts, pinned to the top of the pane above a divider,
|
|
91
91
|
switchable via `1`-`5`, arrow keys, or `Tab`/`Shift+Tab`
|
|
92
|
-
- **[
|
|
92
|
+
- **[Events](#events)** -- `5` opens the pane's status history:
|
|
93
93
|
automatic waits, failed refreshes, Security source notes, cleared causes and
|
|
94
94
|
GitHub's own platform status. Only causes that need you stay above a table
|
|
95
95
|
- Adjustable full-table columns, with visible header grips, a keyboard width
|
|
@@ -307,8 +307,8 @@ stdout isn't a terminal rather than streaming redraw frames into a pipe.
|
|
|
307
307
|
| Key | Action |
|
|
308
308
|
|---|---|
|
|
309
309
|
| `1` `2` `3` `4` | Jump to Actions / Issues / Pull Requests / Security |
|
|
310
|
-
| `5` | Open
|
|
311
|
-
| `←` / `→` | Previous / next tab (
|
|
310
|
+
| `5` | Open Events, the pane's status history. `↑` / `↓` and `PgUp` / `PgDn` scroll it, `r` checks GitHub's status page, and `1`-`4` or `Esc` return to a section. |
|
|
311
|
+
| `←` / `→` | Previous / next tab (Events is the fifth position) |
|
|
312
312
|
| `Tab` / `Shift+Tab` | Next / previous tab |
|
|
313
313
|
| `↑` / `↓` or `j` / `k` | Move the cursor between rows |
|
|
314
314
|
| `PgUp` / `PgDn` | Move a page at a time |
|
|
@@ -328,12 +328,12 @@ stdout isn't a terminal rather than streaming redraw frames into a pipe.
|
|
|
328
328
|
| `?` | Open or close contextual help; `n` / `p` moves through its pages |
|
|
329
329
|
| `q` / `Esc` / `Ctrl+C` | Quit from ordinary navigation; `Esc` leaves feature views, editors and width mode. While editing a query or range, `q` is text and `Ctrl+C` quits. |
|
|
330
330
|
|
|
331
|
-
###
|
|
331
|
+
### Events
|
|
332
332
|
|
|
333
333
|
Lines above a table appear only when you must act: a local coordination store
|
|
334
334
|
that needs `gh-glance --doctor`, a lost GitHub login, an inaccessible
|
|
335
335
|
repository, or a repeated request limit that waits for `r`. Everything else
|
|
336
|
-
goes to the fifth section, `5:
|
|
336
|
+
goes to the fifth section, `5:Events`: automatic waits (budget checks,
|
|
337
337
|
quota pacing, other panes), failed refreshes with their raw text, Security
|
|
338
338
|
sources that are not enabled or not available, refreshes, and the moment each
|
|
339
339
|
cause cleared. The table no longer moves when a wait starts or ends.
|
|
@@ -364,9 +364,11 @@ only a proxy reaches the internet the row reads "GitHub status unavailable",
|
|
|
364
364
|
and `GH_GLANCE_GITHUB_STATUS=off` turns it off.
|
|
365
365
|
|
|
366
366
|
The tab label shows how many waits and problems arrived since you last opened
|
|
367
|
-
the view, for example `5:
|
|
368
|
-
action, yellow when all are waits.
|
|
369
|
-
|
|
367
|
+
the view, for example `5:Events (3)`: red when any is a problem or needs
|
|
368
|
+
action, yellow when all are waits. A wait that ends in under two minutes stops
|
|
369
|
+
counting at that point, although the view still lists it. Each wait is measured
|
|
370
|
+
on its own, so repeated short waits do not add up. Routine
|
|
371
|
+
refreshes never change the badge, so an idle pane still redraws nothing. The status bar keeps its one-row state
|
|
370
372
|
(`Paused`, `Stale`, ...) as before.
|
|
371
373
|
|
|
372
374
|
### Adjusting column widths
|
|
@@ -678,7 +680,7 @@ Environment variables work too, and the flags take precedence:
|
|
|
678
680
|
| `GH_TOKEN`, `GITHUB_TOKEN`, `GH_ENTERPRISE_TOKEN`, `GITHUB_ENTERPRISE_TOKEN` | Used by the default `gh` provider with `gh`'s host-specific precedence. gh-glance never logs or stores the raw values. One-way credential digests keep private rows access-partitioned; credentials GitHub verifies as the same principal share its quota ledger. App-provider children remove these variables before setting their memory-only installation token. |
|
|
679
681
|
| `GH_CONFIG_DIR` | Selects `gh`'s account configuration and contributes its normalized identity to the cache and governor namespaces. Separate values can isolate simultaneous panes on different accounts; see [No account pinning](#limitations). |
|
|
680
682
|
| `GH_GLANCE_REFRESH=<seconds>` | Minimum active-tab poll interval, 2-3600. Sets the floor for every pane in a shell; `--refresh` takes precedence. See [Rate limit](#rate-limit). |
|
|
681
|
-
| `GH_GLANCE_GITHUB_STATUS=off` | Turn off the GitHub platform status check in
|
|
683
|
+
| `GH_GLANCE_GITHUB_STATUS=off` | Turn off the GitHub platform status check in Events. An `http(s)` URL instead points it at another Statuspage `summary.json` endpoint. Any other value also turns it off and says so in the view. |
|
|
682
684
|
| `GH_GLANCE_ICONS=unicode` | Unicode status glyphs and single-cell text substitutes for Nerd Font row icons |
|
|
683
685
|
| `GH_GLANCE_ICONS=ascii` | ASCII-only status and row icons |
|
|
684
686
|
| `GH_GLANCE_NO_ANIMATION=1` | Stop status and run-state motion. Semantic words such as Watching, Checking, and Paused still report what is happening. |
|
|
@@ -990,7 +992,7 @@ loads the saved rows for that same target immediately. Their age remains
|
|
|
990
992
|
explicit through the `stale` label, and the footer still reports the current
|
|
991
993
|
hold; cached data never turns a failure into a false success. A rate limit
|
|
992
994
|
retries automatically, so it does not take rows from the table: a sustained
|
|
993
|
-
hold is listed in [
|
|
995
|
+
hold is listed in [Events](#events) with its cause (Core,
|
|
994
996
|
GraphQL, or the tab that hit it) and next automatic retry, and the badge turns
|
|
995
997
|
yellow. Only a hold that needs you, such as a repeated limit that waits for
|
|
996
998
|
`r`, stays above the table with its action and the age of the last complete
|
|
@@ -1107,7 +1109,7 @@ monitor makes no GitHub request or coordination write.
|
|
|
1107
1109
|
Advanced Security](https://docs.github.com/en/code-security/getting-started/github-security-features).
|
|
1108
1110
|
On repos/plans without it, `gh-glance` doesn't crash or spam errors -- it
|
|
1109
1111
|
lists each disabled source, such as `Code scanning: not enabled (needs GitHub
|
|
1110
|
-
Advanced Security)`, in [
|
|
1112
|
+
Advanced Security)`, in [Events](#events) instead of above the
|
|
1111
1113
|
table (when no alerts are shown, the Security panel collapses them into one
|
|
1112
1114
|
line such as `Code scanning, Secret scanning: not enabled here`), and still
|
|
1113
1115
|
displays whatever it *can* get (Dependabot alerts work independently of
|
|
@@ -1196,11 +1198,11 @@ GH_GLANCE_ICONS=ascii gh-glance
|
|
|
1196
1198
|
| `GraphQL: Could not resolve to a Repository...` in older gh-glance versions | The response has the same ambiguity: a missing or renamed target, or a private repository not visible to the active account. Run `gh-glance --doctor --probe`. |
|
|
1197
1199
|
| Actions says `not available for this repository` while Repository access is `ok` | The repository resolved, but that endpoint is unavailable; inspect the corresponding `--doctor --probe` block. |
|
|
1198
1200
|
| Row icons are blank boxes | Your terminal font is not a Nerd Font. Use `GH_GLANCE_ICONS=unicode`. |
|
|
1199
|
-
|
|
|
1201
|
+
| Events lists a Security "not enabled" note | Code scanning and secret scanning need GitHub Advanced Security. Dependabot alerts work independently. The note appears only when the feature genuinely is unavailable: auth, SSO and network failures show the real error instead. |
|
|
1200
1202
|
| `none of the git remotes ... point to a known GitHub host` | `gh` is not authenticated for that host. Run `gh auth login --hostname <host>`. |
|
|
1201
1203
|
| Security tab empty on an enterprise host in an older gh-glance version | Older versions could route alert endpoints separately. Current gh-glance routes every API call and the governor to one effective host; use `--repo host/owner/name`, `GH_HOST`, or a qualified `GH_REPO`, then confirm the resolved host with `--doctor`. |
|
|
1202
1204
|
| Tabs start failing after working for a while | The enterprise SAML session lapsed. Re-authorize in the browser; the dashboard recovers within about 30 seconds. Run `gh-glance --doctor --probe` to confirm. |
|
|
1203
|
-
| A tab's count is red | That tab's last fetch failed. The error is listed in
|
|
1205
|
+
| A tab's count is red | That tab's last fetch failed. The error is listed in Events (`5`); when it needs you (login, repository or endpoint access), it also stays above that tab's table, translated into what to do about it where `gh-glance` recognises the failure. |
|
|
1204
1206
|
| Security tab shows `?` instead of a number | The alert endpoints could not be read at all -- an expired SAML session, a token without `security_events`, or an org OAuth restriction. `?` means "unknown", not "zero"; run `gh-glance --doctor --probe` to see which probe failed and how it was classified. |
|
|
1205
1207
|
| `Watching` with `next 2m` | The active tab has a shared budget probe or safe grant scheduled. The interval names this grant only; it is not a recurring polling interval. Pressing `r` raises safe priority but cannot bypass the lane or reserve. |
|
|
1206
1208
|
| `Shared` | This pane is using a generation acquired for matching local subscribers. This is coalescing, not quota scarcity. |
|
|
@@ -1208,7 +1210,7 @@ GH_GLANCE_ICONS=ascii gh-glance
|
|
|
1208
1210
|
| `Paused` without a reset time | Budget or coordinator evidence is unknown, corrupt, locked, or unwritable. No data call is started. Run `gh-glance --doctor`; also check the config directory permissions and whether another live process owns its private lock. |
|
|
1209
1211
|
| `--doctor` reports an acquisition lock as `orphaned` | A dead owner or an aged incomplete lock record was found. A running pane retries recovery through the private lock protocol; plain doctor only inspects it. If the state does not change, inspect the reported lock age and the config directory permissions. |
|
|
1210
1212
|
| `--doctor` reports an acquisition lock as `busy` | A live or unconfirmed owner, or a recent incomplete lock record, is present. Keep the other pane running and check again after the reported age advances; plain doctor does not steal a lock. |
|
|
1211
|
-
| Rows stay old while the footer shows a coordination reason | The rows remain last-known-good data. The reason persists until a valid shared snapshot or completed cleanup clears that acquisition failure; a healthy rate-budget probe alone does not prove that acquisition succeeded. The footer shows the source age and
|
|
1213
|
+
| Rows stay old while the footer shows a coordination reason | The rows remain last-known-good data. The reason persists until a valid shared snapshot or completed cleanup clears that acquisition failure; a healthy rate-budget probe alone does not prove that acquisition succeeded. The footer shows the source age and Events (`5`) gives the longer reason. |
|
|
1212
1214
|
| A failing tab seems to have stopped retrying | Recognized endpoint failures back off rather than re-spawning `gh` at the floor. Press `r` to request a higher-priority retry, or `R` to also clear the endpoint backoff; either way the retry waits for a safe grant, so the tab remains Watching or Paused. |
|
|
1213
1215
|
| `unknown argument: -v` | `-v` used to mean `--version` and no longer does, because this CLI also has `--verbose`. Use `--version` or `--verbose` explicitly. |
|
|
1214
1216
|
| Cached rows plus `Paused`, `Stale`, or `Disconnected` | The rows are last-known-good data while the live source is blocked, overdue, or unavailable. A cache read never advances source success. The footer never calls stale or disconnected rows `Watching`. |
|
package/index.mjs
CHANGED
|
@@ -6163,13 +6163,14 @@ function budgetFromObservation(raw, previous, nowMs, {
|
|
|
6163
6163
|
) return { status: "invalid" };
|
|
6164
6164
|
const epoch = `${normalized.limit}:${normalized.resetMs}`;
|
|
6165
6165
|
// Endpoint responses can carry cached or endpoint-specific rate headers.
|
|
6166
|
-
//
|
|
6167
|
-
//
|
|
6166
|
+
// Only the claimed observer may move the epoch in either direction. A
|
|
6167
|
+
// backwards move must be newer than the stored evidence to replace it.
|
|
6168
6168
|
if (!allowEpochChange && (!previous || previous.epoch !== epoch)) {
|
|
6169
6169
|
return { status: "ignored", epoch };
|
|
6170
6170
|
}
|
|
6171
6171
|
if (previous) {
|
|
6172
|
-
if (normalized.resetMs < previous.resetMs
|
|
6172
|
+
if (normalized.resetMs < previous.resetMs &&
|
|
6173
|
+
(!allowEpochChange || receivedAt <= previous.observedAt)) return { status: "ignored" };
|
|
6173
6174
|
if (budgetEpoch(previous) === epoch && normalized.used < previous.used) {
|
|
6174
6175
|
if (!allowEpochChange) return { status: "ignored" };
|
|
6175
6176
|
// The claimed observer can lag a newer endpoint response within the
|
|
@@ -6272,7 +6273,7 @@ function publishProbe(scope, leaseId, nonce, budgets, nowMs, resource) {
|
|
|
6272
6273
|
clearProvenBlock: true,
|
|
6273
6274
|
allowEpochChange: true,
|
|
6274
6275
|
});
|
|
6275
|
-
if (observed.status === "invalid") return { ok: false, reason: "
|
|
6276
|
+
if (observed.status === "invalid") return { ok: false, reason: "probe-failed" };
|
|
6276
6277
|
if (observed.status !== "ignored") {
|
|
6277
6278
|
// The observer's own cost is local spend. Left out, the external-factor
|
|
6278
6279
|
// reconciliation below attributes it to other clients, and the governor
|
|
@@ -6288,7 +6289,7 @@ function publishProbe(scope, leaseId, nonce, budgets, nowMs, resource) {
|
|
|
6288
6289
|
if (observed.epochChanged && state.epochs[resource] !== null) resetResources.push(resource);
|
|
6289
6290
|
}
|
|
6290
6291
|
}
|
|
6291
|
-
if (changedResources.length === 0) return { ok: false, reason: "
|
|
6292
|
+
if (changedResources.length === 0) return { ok: false, reason: "probe-failed" };
|
|
6292
6293
|
if (!retireClaimedQuiescentDebt(state, resource, claim)) {
|
|
6293
6294
|
return ACCOUNTING_OVERFLOW;
|
|
6294
6295
|
}
|
|
@@ -12362,7 +12363,7 @@ const { version } = JSON.parse(readFileSync(new URL("./package.json", import.met
|
|
|
12362
12363
|
// this file already applies to argv vectors and to classify().
|
|
12363
12364
|
const KEY_TABLE = [
|
|
12364
12365
|
["1 2 3 4", "Actions / Issues / Pull requests / Security"],
|
|
12365
|
-
["5", "
|
|
12366
|
+
["5", "Events: status history; Up / Down scroll, r checks GitHub status, Esc returns"],
|
|
12366
12367
|
["Left / Right", "Previous / next tab"],
|
|
12367
12368
|
["Tab / Shift+Tab", "Next / previous tab"],
|
|
12368
12369
|
["Up / Down, j / k", "Move the cursor between rows"],
|
|
@@ -12530,7 +12531,7 @@ Environment:
|
|
|
12530
12531
|
(--refresh takes precedence)
|
|
12531
12532
|
GH_GLANCE_GITHUB_STATUS=off
|
|
12532
12533
|
Turn off the githubstatus.com check in
|
|
12533
|
-
|
|
12534
|
+
Events (an http(s) URL replaces the endpoint)
|
|
12534
12535
|
GH_GLANCE_ICONS=unicode Unicode status glyphs and text row substitutes
|
|
12535
12536
|
GH_GLANCE_ICONS=ascii ASCII-only status and row icons
|
|
12536
12537
|
GH_GLANCE_NO_ANIMATION=1 Stop motion; semantic status words remain
|
|
@@ -16828,7 +16829,7 @@ function contextHelpPages({ view, target, tab, remoteSetup = false }, keys = key
|
|
|
16828
16829
|
issues: "Issues shows open issues in the selected repository.",
|
|
16829
16830
|
prs: "Pull requests shows open requests to merge changes into the selected repository.",
|
|
16830
16831
|
security: "Security shows alerts returned by the checked sources; unavailable sources can hide alerts.",
|
|
16831
|
-
notifications: "
|
|
16832
|
+
notifications: "Events lists what happened in this pane: waits, refreshes, failures and cleared causes.",
|
|
16832
16833
|
};
|
|
16833
16834
|
const title = remoteSetup ? "No GitHub remote found" : view.title;
|
|
16834
16835
|
const action = remoteSetup ? "Close help with ?, then Enter to start gh repo create; or restart with gh-glance --repo owner/name."
|
|
@@ -17026,6 +17027,9 @@ const VERDICT_NOTICE_LEVELS = Object.freeze({
|
|
|
17026
17027
|
"auth-problem": "action", unavailable: "action", "no-remote": "action", "rate-limited": "wait",
|
|
17027
17028
|
});
|
|
17028
17029
|
const NOTIFICATION_LOG_MAX = 500;
|
|
17030
|
+
// A wait that ends within this long left nothing to look at: it stays in the
|
|
17031
|
+
// history but does not count as unread. Each episode is measured on its own.
|
|
17032
|
+
const SHORT_WAIT_MS = 120_000;
|
|
17029
17033
|
// Tabs whose requests draw on each rate resource; a cause on that resource
|
|
17030
17034
|
// holds them up. The cost table is fixed, so this is computed once.
|
|
17031
17035
|
const NOTICE_RESOURCE_TABS = Object.freeze(Object.fromEntries(RATE_RESOURCES.map((resource) =>
|
|
@@ -17058,7 +17062,8 @@ function fetchErrorLevel(error) {
|
|
|
17058
17062
|
// one affecting the same tab, came after it); an ended entry never reopens, so a recurring condition reads
|
|
17059
17063
|
// as a new episode. An entry the bound already dropped cannot be ended, so its
|
|
17060
17064
|
// "Cleared" line is silently skipped. Earlier-session history is context, not
|
|
17061
|
-
// news, so it never raises the badge
|
|
17065
|
+
// news, so it never raises the badge, and neither does a short wait that has
|
|
17066
|
+
// already cleared.
|
|
17062
17067
|
function createNotificationLog({ max = NOTIFICATION_LOG_MAX, now = Date.now } = {}) {
|
|
17063
17068
|
const entries = []; // oldest first
|
|
17064
17069
|
let nextId = 1;
|
|
@@ -17126,6 +17131,7 @@ function createNotificationLog({ max = NOTIFICATION_LOG_MAX, now = Date.now } =
|
|
|
17126
17131
|
let yellow = false;
|
|
17127
17132
|
for (const entry of entries) {
|
|
17128
17133
|
if (entry.level === "info" || entry.source === EARLIER_SESSION_SOURCE || entry.id <= seenId) continue;
|
|
17134
|
+
if (entry.level === "wait" && entry.endedAt !== null && entry.endedAt - entry.firstAt < SHORT_WAIT_MS) continue;
|
|
17129
17135
|
unread += 1;
|
|
17130
17136
|
if (entry.level === "wait") yellow = true;
|
|
17131
17137
|
else red = true;
|
|
@@ -17980,14 +17986,16 @@ const MIN_TABLE_WIDTH = Math.max(...TABS.map((t) => minimumWidthFor(t.header)));
|
|
|
17980
17986
|
const MIN_COMPACT_WIDTH = Math.max(...TABS.map((t) => minimumWidthFor(t.compactHeader)));
|
|
17981
17987
|
|
|
17982
17988
|
// The tab bar is laid out independently of the table. Full labels are used
|
|
17983
|
-
// whenever they fit the measured bar (~
|
|
17989
|
+
// whenever they fit the measured bar (~90 columns with counts on every tab, less
|
|
17984
17990
|
// with fewer); short labels need ~76. Once the bar has dropped to short labels,
|
|
17985
17991
|
// full ones return only with this many spare columns, so a pane parked on the
|
|
17986
17992
|
// boundary, or a count gaining a digit, does not flip labels back and forth and
|
|
17987
17993
|
// defeat the unchanged-frame optimization. Below the short width the bar drops
|
|
17988
17994
|
// names and keeps digits and counts (see tabBarEntries).
|
|
17989
17995
|
const TAB_LABEL_HYSTERESIS = 4;
|
|
17990
|
-
|
|
17996
|
+
// One name at every tier: a label that changes with the pane width reads as a
|
|
17997
|
+
// different feature.
|
|
17998
|
+
const NOTIFICATIONS_LABEL = Object.freeze({ full: "Events", short: "Events" });
|
|
17991
17999
|
|
|
17992
18000
|
function tabFailureSuffix({ count, failed, brokenCI }) {
|
|
17993
18001
|
if (count == null) return failed ? " x" : "";
|
|
@@ -23663,6 +23671,7 @@ export {
|
|
|
23663
23671
|
inspectGovernor,
|
|
23664
23672
|
governorHealth,
|
|
23665
23673
|
refreshSharedBudget,
|
|
23674
|
+
refreshResourceBudget,
|
|
23666
23675
|
readCoreBudget,
|
|
23667
23676
|
readSharedBudgetSources,
|
|
23668
23677
|
safe,
|
|
@@ -23876,6 +23885,7 @@ export {
|
|
|
23876
23885
|
cleanupQueueForResource,
|
|
23877
23886
|
presentRecovery,
|
|
23878
23887
|
RECOVERY_COPY,
|
|
23888
|
+
HARD_STORAGE_REASONS,
|
|
23879
23889
|
NOTICE_LEVELS,
|
|
23880
23890
|
NOTIFICATION_LOG_MAX,
|
|
23881
23891
|
noticeLevel,
|
package/package.json
CHANGED