spinuptui 0.20.0 → 0.21.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/CHANGELOG.md +83 -1
- package/README.md +144 -581
- package/package.json +1 -1
- package/src/config.ts +3 -0
- package/src/dev/fixtures.ts +494 -5
- package/src/index.tsx +44 -1
- package/src/lib/cliIncidents.ts +126 -0
- package/src/lib/cliSsh.ts +161 -0
- package/src/lib/probe.ts +1 -1
- package/src/lib/ssh.ts +46 -0
- package/src/lib/uptimeKuma.ts +99 -3
- package/src/lib/vanitySite.ts +74 -0
- package/src/ui/Header.tsx +10 -2
- package/src/ui/store.tsx +123 -6
- package/src/ui/views/KumaSite.tsx +508 -127
package/CHANGELOG.md
CHANGED
|
@@ -11,6 +11,86 @@ versions; such changes are called out here.
|
|
|
11
11
|
|
|
12
12
|
## [Unreleased]
|
|
13
13
|
|
|
14
|
+
## [0.21.0] - 2026-07-09
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- **`spinuptui ssh <domain>`** — non-interactive CLI subcommand for external
|
|
18
|
+
tooling (e.g. an incident-diagnostics agent that's handed only a domain).
|
|
19
|
+
Resolves the domain to its site/server, builds the SSH target, and runs a
|
|
20
|
+
live connectivity probe, returning JSON with a classified failure reason
|
|
21
|
+
(site not found, ambiguous domain match, server has no IP, key not
|
|
22
|
+
granted, token rejected, etc.) when it can't connect.
|
|
23
|
+
- **`spinuptui incidents <domain>` / `--all`** — surfaces Uptime Kuma's
|
|
24
|
+
down/up incident history as JSON, scoped to sites SpinupTUI manages
|
|
25
|
+
monitoring for. `--all` sweeps every such site over a single Kuma
|
|
26
|
+
connection; `--hours` sets the lookback window (default 24). Pairs with
|
|
27
|
+
`spinuptui ssh` for an external agent's discover → access → report loop.
|
|
28
|
+
- **Server-wide PHP-fatal sentinel monitor.** Fixes a real monitoring blind
|
|
29
|
+
spot: SpinupWP's page cache keeps serving `/` even while PHP is fataling on
|
|
30
|
+
anything the cache doesn't already have, so the existing health/fingerprint
|
|
31
|
+
monitors can sleep through a real outage (confirmed against a 2026-07-07
|
|
32
|
+
incident that went undetected for 54 of its 68 minutes). A root-level cron
|
|
33
|
+
(one per server, added via the monitoring overlay's repair flow once sudo
|
|
34
|
+
is connected — same place the Redis sentinel is set up) tails every site's
|
|
35
|
+
error/debug logs each minute for new `PHP Fatal error` lines and reports
|
|
36
|
+
up/down to a single new Kuma push monitor, with the actually-affected
|
|
37
|
+
site domain(s) carried in the down message. Surfaces automatically in
|
|
38
|
+
`spinuptui incidents --all`.
|
|
39
|
+
- **Cache-bypass monitor, opt-in per site.**
|
|
40
|
+
Closes the other half of the page-cache blind spot: a wedged PHP-FPM pool
|
|
41
|
+
that never logs a fatal is invisible to both the plain health monitor and
|
|
42
|
+
the new fatal sentinel above, since nginx serves the cache without ever
|
|
43
|
+
touching PHP-FPM. This registers an ordinary Kuma HTTP monitor with a
|
|
44
|
+
`Cookie: wordpress_no_cache=1` header — the same page-cache bypass
|
|
45
|
+
`siteDoctor.ts` already uses — so it actually exercises PHP on every check
|
|
46
|
+
(verified live: `fastcgi-cache-bypass-reason: COOKIE`). Deliberately opt-in
|
|
47
|
+
(not automatic) and defaults to a 1h check window (30m/1h/2h/4h/6h
|
|
48
|
+
choices), since forcing a real render costs the site something, unlike the
|
|
49
|
+
cache-served health/fingerprint checks — meant for sites with an actual
|
|
50
|
+
history of this failure mode, not the whole fleet.
|
|
51
|
+
|
|
52
|
+
### Changed
|
|
53
|
+
- **Site/server monitoring overlay rebuilt as a full-screen two-pane browser**
|
|
54
|
+
(`m` in the sites pane), replacing the small centered popover. A narrow
|
|
55
|
+
left list of the site's monitor kinds (with a live status dot) sits next
|
|
56
|
+
to a wide detail pane showing whichever one is selected — its one-line
|
|
57
|
+
definition, a longer explanation of the actual mechanism, live status, and
|
|
58
|
+
how to act on it. Grew out of real confusion testing the popover version:
|
|
59
|
+
six monitor kinds across two site contexts didn't fit legibly in a 68-col
|
|
60
|
+
box, and a separate glossary overlay left the explanation disconnected
|
|
61
|
+
from live status. Also **collapses the per-kind action keys into one `a`**
|
|
62
|
+
that acts on whichever monitor is currently highlighted (front page
|
|
63
|
+
selected → calibration picker; cache bypass selected → its picker;
|
|
64
|
+
anything else → register/repair) — fewer keys to remember now that the
|
|
65
|
+
detail pane shows which monitor you're acting on. The overlay also gained:
|
|
66
|
+
a passive "Alerts: …" header line (fetched once per open, not polled) so
|
|
67
|
+
notification wiring is visible without pressing `n`; `o` to deep-link
|
|
68
|
+
straight to the selected monitor's own page in Uptime Kuma; and `x` to
|
|
69
|
+
remove the front-page or cache-bypass monitor (confirm-gated) — scoped to
|
|
70
|
+
just those two kinds, since the other four re-derive themselves
|
|
71
|
+
automatically on the next repair and would silently reappear.
|
|
72
|
+
- **The header's fleet-wide "N monitors down" badge now names the domain(s)**
|
|
73
|
+
(falling back to a bare count once there are too many to list) and points
|
|
74
|
+
at the Search tab to find them, instead of an unactionable number with no
|
|
75
|
+
way to tell which site it means.
|
|
76
|
+
|
|
77
|
+
## [0.20.1] - 2026-07-08
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
- **README rewritten for readability.** It had grown to 857 lines of dense,
|
|
81
|
+
multi-paragraph feature bullets — hard to skim for someone landing on the
|
|
82
|
+
repo. Added a screenshot gallery (real Dev Mode captures of all five main
|
|
83
|
+
tabs), condensed the Features list to one-liners, and moved all 13 deep-dive
|
|
84
|
+
"how it works" sections into their own pages under `docs/` (linked from the
|
|
85
|
+
README's short pointer paragraphs). No content was removed, only relocated;
|
|
86
|
+
`RELEASING.md`'s "Keep the README current" checklist is updated to match the
|
|
87
|
+
new house style.
|
|
88
|
+
- **Dev Mode's example fleet scaled up** from 4 servers / 6 sites to 12
|
|
89
|
+
servers / ~80 sites / 19 events, generated deterministically (same fleet
|
|
90
|
+
every run) with a realistic spread of EOL Ubuntu/PHP, Standard WP/Bedrock/
|
|
91
|
+
non-WP sites, disabled HTTPS, and missing backups — mainly so the new
|
|
92
|
+
screenshots (and any future ones) show a fleet worth looking at.
|
|
93
|
+
|
|
14
94
|
## [0.20.0] - 2026-07-08
|
|
15
95
|
|
|
16
96
|
### Added
|
|
@@ -979,7 +1059,9 @@ Initial tagged release.
|
|
|
979
1059
|
### Notes
|
|
980
1060
|
- Read-only release: works with a SpinupWP **Read Only** API token.
|
|
981
1061
|
|
|
982
|
-
[Unreleased]: https://github.com/mwender/spinupwp-tui/compare/v0.
|
|
1062
|
+
[Unreleased]: https://github.com/mwender/spinupwp-tui/compare/v0.21.0...HEAD
|
|
1063
|
+
[0.21.0]: https://github.com/mwender/spinupwp-tui/compare/v0.20.1...v0.21.0
|
|
1064
|
+
[0.20.1]: https://github.com/mwender/spinupwp-tui/compare/v0.20.0...v0.20.1
|
|
983
1065
|
[0.20.0]: https://github.com/mwender/spinupwp-tui/compare/v0.19.1...v0.20.0
|
|
984
1066
|
[0.19.1]: https://github.com/mwender/spinupwp-tui/compare/v0.19.0...v0.19.1
|
|
985
1067
|
[0.19.0]: https://github.com/mwender/spinupwp-tui/compare/v0.18.0...v0.19.0
|