@mmmbuto/nexuscrew 0.8.52 → 0.8.53
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 +97 -0
- package/frontend/dist/assets/{index-Cxwpa2Y_.js → index-BJ-_5bxw.js} +29 -29
- package/frontend/dist/index.html +1 -1
- package/frontend/dist/version.json +1 -1
- package/lib/cli/commands.js +256 -3
- package/lib/mcp/server.js +35 -1
- package/lib/proxy/federation.js +29 -2
- package/lib/tmux/actions.js +33 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,103 @@ All notable changes to NexusCrew are tracked here.
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
## 0.8.53 — 2026-08-07 — "Coming Back Up, and Saying So"
|
|
8
|
+
|
|
9
|
+
Automatic updates are on by default and check every six hours, so a node
|
|
10
|
+
installs a new release and restarts itself without anyone watching. That makes
|
|
11
|
+
the restart path the most consequential code in the product, and this release
|
|
12
|
+
is about what happens when it doesn't work: today a node was measured staying
|
|
13
|
+
down for over twenty minutes after a restart, with its tunnel still up, while
|
|
14
|
+
nothing anywhere said so.
|
|
15
|
+
|
|
16
|
+
- **A restart now confirms the service came back.** `nexuscrew restart` used to
|
|
17
|
+
report success as soon as the restart *command* returned — which says the
|
|
18
|
+
command ran, not that anything is answering. The two look identical to whoever
|
|
19
|
+
reads the exit code. The check already existed and was already used by two
|
|
20
|
+
other paths: the auto-updater waits for health and fails if it doesn't come,
|
|
21
|
+
and the Fleet bootstrap does the same, with a comment that literally says "a
|
|
22
|
+
verified restart is needed". It was missing precisely on the command a person
|
|
23
|
+
types by hand — the one where no other code is checking on your behalf.
|
|
24
|
+
|
|
25
|
+
- **A service that exited after a restart is brought back, once.** On a phone
|
|
26
|
+
there is no service manager to raise the process again: if it goes, it stays
|
|
27
|
+
gone. That was measured — a node stayed down for over twenty minutes after a
|
|
28
|
+
restart, with its reverse tunnel still up, and nothing brought it back. Now,
|
|
29
|
+
when the service does not answer, the port decides what happens: free means
|
|
30
|
+
the process is gone and it is started again *once*; still busy means something
|
|
31
|
+
is holding it without serving, and retrying would only hide that. Once and no
|
|
32
|
+
more — repeating turns a fault into a loop. On a machine where a service
|
|
33
|
+
manager owns the runtime nothing is started alongside it: that is the
|
|
34
|
+
manager's job, and a process it does not know about would race its own unit
|
|
35
|
+
for the port and outlive a stop.
|
|
36
|
+
|
|
37
|
+
**Why the process exited is not established.** A plausible story — that the
|
|
38
|
+
restart did not wait for the old process before starting the new one — turned
|
|
39
|
+
out to be wrong on inspection: it does wait, and has since 0.8.17. So this is
|
|
40
|
+
a recovery for a failure whose cause is still open, not a fix for a known one,
|
|
41
|
+
and it is worth knowing which of the two you are relying on.
|
|
42
|
+
|
|
43
|
+
- **"Peer unreachable" no longer covers two different failures.** With a reverse
|
|
44
|
+
SSH channel, a device that is not connected leaves no listener and the
|
|
45
|
+
connection is *refused*; a device that is connected but whose NexusCrew has
|
|
46
|
+
died accepts the connection and then *resets* it. Those need opposite
|
|
47
|
+
remedies — one is fixed on the network, the other by going to the device —
|
|
48
|
+
and one message sent the investigation to the wrong place half the time. It
|
|
49
|
+
did: four hours were spent in federation and pairing while the defect was a
|
|
50
|
+
service that had not come back on a phone. The two are now named, with the
|
|
51
|
+
port, and an error nobody recognises is still reported as before rather than
|
|
52
|
+
guessed into a layer.
|
|
53
|
+
|
|
54
|
+
- **The interface reloads itself after the node updates.** With automatic
|
|
55
|
+
updates on, a node updates and restarts while an open app keeps running the
|
|
56
|
+
old bundle. The only way out was closing and reopening it — the banner had to
|
|
57
|
+
be tapped, and because of a service-worker defect fixed in 0.8.52, tapping it
|
|
58
|
+
did not work either. The app now applies the new bundle by itself. Only for
|
|
59
|
+
the case a reload can fix: when the package on the server is newer than the
|
|
60
|
+
interface it serves, no amount of reloading changes that, and it is left
|
|
61
|
+
alone. If the mismatch survives the reload it is not retried — a reload loop
|
|
62
|
+
makes the app unusable, which is far worse than a banner, so the banner
|
|
63
|
+
remains as the fallback. What you were typing is not lost: the composer draft
|
|
64
|
+
was already kept across reloads, which is what made this acceptable. The
|
|
65
|
+
version check now also repeats about once a minute rather than running only
|
|
66
|
+
when the app starts — an app left open in front of someone is precisely the
|
|
67
|
+
case this exists for, and checking only at startup would have made it work
|
|
68
|
+
solely for people who had already closed and reopened it.
|
|
69
|
+
|
|
70
|
+
- **`nexuscrew autoupdate on|off|status`.** The switch already existed — a
|
|
71
|
+
persisted setting, on by default, with a checkbox in Settings. It was missing
|
|
72
|
+
from the command line, which is where you need it: when a node has updated
|
|
73
|
+
itself and the service did not come back, the interface is the thing you
|
|
74
|
+
cannot open. With the service running the command goes through the API rather
|
|
75
|
+
than writing the file, because writing the file would leave the running
|
|
76
|
+
process with the old value — the setting would read "off" while updates kept
|
|
77
|
+
happening on schedule, and a switch that reads off without switching anything
|
|
78
|
+
off is worse than no switch. If the service is up but not answering, nothing
|
|
79
|
+
is written at all.
|
|
80
|
+
|
|
81
|
+
- **An error now says when the tool bridge is older than the hub.** Updating
|
|
82
|
+
NexusCrew does not update the MCP bridge of an already running session: that
|
|
83
|
+
process started with the previous code and keeps it until the session is
|
|
84
|
+
restarted. The symptom is cruel — you install a fix, try again, and get the
|
|
85
|
+
*old* error, so you conclude the fix does not work and go looking where the
|
|
86
|
+
defect is not. The check runs only on the error path, which costs nothing in
|
|
87
|
+
normal use and is the only moment it helps; it cannot be cached at startup
|
|
88
|
+
either, since the version that changes is the hub's, and it changes while the
|
|
89
|
+
bridge is running.
|
|
90
|
+
|
|
91
|
+
- **A long message sent to a cell is no longer pasted and left unsent.** The
|
|
92
|
+
wait between the bracketed paste and the Enter was a constant, while the time
|
|
93
|
+
a terminal interface needs to swallow a paste grows with its size — above a
|
|
94
|
+
certain length the client collapses it, the Enter lands while it is still
|
|
95
|
+
being processed, and it is swallowed. The message then sat in the composer
|
|
96
|
+
while the sender got a delivery receipt. Measured on the same target eleven
|
|
97
|
+
minutes apart: 2900 characters were never processed for nine hours, sixty
|
|
98
|
+
characters were being worked on in twelve seconds. The wait now grows with the
|
|
99
|
+
text, and below 500 characters nothing changes — those were already reliable,
|
|
100
|
+
and slowing them would be a cost paid by everyone for a defect that is not
|
|
101
|
+
theirs. This narrows the window rather than closing it: a receipt still means
|
|
102
|
+
paste and Enter, not acceptance.
|
|
103
|
+
|
|
7
104
|
## 0.8.52 — 2026-08-07 — "What a Peer May See, and What a Cell May Reach"
|
|
8
105
|
|
|
9
106
|
- **Each node now has a cryptographic identity, and it changes nothing yet.**
|