@mmmbuto/nexuscrew 0.8.30 → 0.8.31
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 +50 -0
- package/README.md +22 -7
- package/frontend/dist/assets/index-CZxcRYUd.js +93 -0
- package/frontend/dist/assets/index-CrggFFKZ.css +32 -0
- package/frontend/dist/index.html +2 -2
- package/frontend/dist/version.json +1 -1
- package/lib/fleet/builtin.js +65 -12
- package/lib/fleet/cell-hold.js +20 -0
- package/lib/fleet/definitions.js +113 -15
- package/lib/fleet/launch-broker.js +4 -1
- package/lib/fleet/launch.js +124 -0
- package/lib/fleet/managed.js +49 -7
- package/lib/fleet/provider.js +1 -1
- package/lib/fleet/runtime.js +90 -14
- package/lib/mcp/tools.js +2 -1
- package/lib/proxy/federation.js +63 -2
- package/lib/server.js +22 -6
- package/lib/settings/routes.js +60 -14
- package/lib/tmux/lifecycle.js +1 -0
- package/package.json +1 -1
- package/frontend/dist/assets/index-CJtVoawR.css +0 -32
- package/frontend/dist/assets/index-CPNWWnqN.js +0 -93
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,56 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to NexusCrew are tracked here.
|
|
4
4
|
|
|
5
|
+
## 0.8.31 — 2026-07-22 — "Safe Identity"
|
|
6
|
+
|
|
7
|
+
- **tmux session naming for dotted cell ids.** tmux silently normalizes `.` to `_`
|
|
8
|
+
in session names, so a cell whose id contains a dot (e.g. `agy.native`) could no
|
|
9
|
+
longer be targeted by its nominal `cloud-<id>` name. Dotted ids now map
|
|
10
|
+
deterministically to a dot-free, collision-free session name (`cloud-v2-…`, 55
|
|
11
|
+
chars); ids without a dot keep the historical `cloud-<id>` name, so the existing
|
|
12
|
+
sessions are never renamed. The real `tmuxSession` for any cell is always
|
|
13
|
+
available from `nc_cells` and the Fleet UI — use that rather than guessing
|
|
14
|
+
`cloud-<Cell>` for dotted ids. Cell launches are now staged (inert placeholder →
|
|
15
|
+
window-local `remain-on-exit` on `@N` → `respawn-pane` on `%N`) so setup and
|
|
16
|
+
early-exit diagnostics use stable tmux object IDs. Any pre-existing legacy
|
|
17
|
+
session is migrated in place via `rename-session -t $N`
|
|
18
|
+
(preserving the session id and the operator's attach).
|
|
19
|
+
- **Agy as a managed primary client** on Linux and macOS (non-Termux), with auth
|
|
20
|
+
delegated to Agy's own local login (no credential store read or copied),
|
|
21
|
+
`standard`/`unsafe` permission policies (`unsafe` adds
|
|
22
|
+
`--dangerously-skip-permissions`, consistent with the other clients),
|
|
23
|
+
free-text model selection, and an optional `--prompt-interactive` prompt passed
|
|
24
|
+
as the last argument. Termux and Windows keep using Agy through `shell.local`
|
|
25
|
+
with a per-cell `agy` command. Added to existing installs by an idempotent,
|
|
26
|
+
non-destructive, platform-aware backfill.
|
|
27
|
+
- **Share revocation now converges as authorization, not availability.** Turning
|
|
28
|
+
Share off persists private intent, withdraws the node from its hub over the
|
|
29
|
+
still-live private forward, and only then replaces the local tunnel without
|
|
30
|
+
its reverse channel. Authorized operational discovery (topology, decks and
|
|
31
|
+
MCP cell directories) removes the owner after the hub acknowledgement, while
|
|
32
|
+
a merely unreachable node remains visible as stale/offline. Partial failures
|
|
33
|
+
remain explicit and are retried with bounded, structured boot diagnostics.
|
|
34
|
+
|
|
35
|
+
- **Selective mobile-UX PR #1 (UI only).** Three client-only behaviours ported
|
|
36
|
+
onto the 0.8.31 candidate, no merge of PR #1:
|
|
37
|
+
- **Optional compact KeyBar.** A new `keybarLayout: "full" | "compact"`
|
|
38
|
+
preference (default `full`) renders a one-row compact bar with an expand
|
|
39
|
+
toggle that temporarily reveals the exact full key set without rewriting
|
|
40
|
+
the stored preference; the tall Enter and `showKeybarEnter=false` (no gap)
|
|
41
|
+
apply to both layouts. Editable in Settings → Input (IT/EN/ES), reset-safe
|
|
42
|
+
and synced across windows; a layout change never remounts xterm or
|
|
43
|
+
reconnects its WebSocket.
|
|
44
|
+
- **Live-DOM composer submit during IME.** Explicit submit reads
|
|
45
|
+
`textareaRef.current.value`, syncs the React draft and sends the visible
|
|
46
|
+
text after newline normalization — preserving the empty no-op, the
|
|
47
|
+
failed-send draft, history, STT and the focus policy.
|
|
48
|
+
- **Alternate-screen scroll as PageUp/PageDown.** A pure bounded plan routes
|
|
49
|
+
writable alternate-screen (vim/less/htop) vertical gestures to raw
|
|
50
|
+
`ESC[5~`/`ESC[6~` PTY input with a page-sized threshold; normal-screen and
|
|
51
|
+
any readonly terminal keep the server-side `scroll-up`/`scroll-down`
|
|
52
|
+
actions. Integrated into both wheel and touch paths without weakening
|
|
53
|
+
double-tap unlock, long-press selection, multi-touch or VirtualKeyboard.
|
|
54
|
+
|
|
5
55
|
## 0.8.30 — 2026-07-22 — "Focused Control"
|
|
6
56
|
|
|
7
57
|
- Makes every owner/node name in the top deck bar an explicit expand/collapse control. Newly seen
|
package/README.md
CHANGED
|
@@ -133,12 +133,13 @@ model, permission policy, optional system prompt, optional Shell command and boo
|
|
|
133
133
|
a stopped cell opens the same launch sheet on desktop and mobile, so the effective settings can
|
|
134
134
|
be reviewed before the process starts.
|
|
135
135
|
|
|
136
|
-
An **engine** describes how a CLI is launched. Clean installations include
|
|
136
|
+
An **engine** describes how a CLI is launched. Clean installations include these base adapters:
|
|
137
137
|
|
|
138
138
|
- Claude Code
|
|
139
139
|
- Codex
|
|
140
140
|
- Codex-VL
|
|
141
141
|
- Pi
|
|
142
|
+
- Agy — Linux and macOS only (auth delegated to Agy's local login; `standard`/`unsafe` permission policies). On Android/Termux use the Shell adapter with a per-cell `agy` command.
|
|
142
143
|
- Shell
|
|
143
144
|
|
|
144
145
|
The provider catalog is scoped to the selected CLI rather than to a machine-specific setup:
|
|
@@ -240,8 +241,12 @@ The two-row mobile key bar can also show a full-height Enter key beside Page Up/
|
|
|
240
241
|
interactive terminal choices can be confirmed without opening the software keyboard. By default,
|
|
241
242
|
key-bar and speech-to-text actions keep that keyboard closed, while a nearby double tap inside the
|
|
242
243
|
terminal explicitly opens it. **Settings → Input** can change the terminal gesture, hide the Enter
|
|
243
|
-
key, or allow key-bar and voice actions to retain the keyboard.
|
|
244
|
-
|
|
244
|
+
key, or allow key-bar and voice actions to retain the keyboard. The key bar also has a
|
|
245
|
+
**compact** layout (one row with an expand toggle that temporarily reveals the full key set
|
|
246
|
+
without changing the preference), and alternate-screen TUIs (vim/less/htop) receive vertical
|
|
247
|
+
gestures as raw Page Up/Page Down while normal and readonly terminals keep server-side scroll.
|
|
248
|
+
These preferences are browser-local and are synchronized between open NexusCrew windows for
|
|
249
|
+
the same origin.
|
|
245
250
|
|
|
246
251
|
The input composer can expand for longer prompts. Each owner-qualified tmux cell keeps its own
|
|
247
252
|
draft, size preference and bounded prompt history in the current browser, including safe
|
|
@@ -278,9 +283,19 @@ need direct SSH reachability to one another.
|
|
|
278
283
|
|
|
279
284
|
Reverse ports are reserved across active and pending pairings, probed before use and protected
|
|
280
285
|
by a persistent uniqueness check. Share is stored as desired state: failed activation rolls back
|
|
281
|
-
to private
|
|
282
|
-
|
|
283
|
-
|
|
286
|
+
to private. Deactivation first saves private intent, then asks the hub to withdraw the node over
|
|
287
|
+
the still-live private forward, and only after that acknowledgement removes the reverse channel.
|
|
288
|
+
If the hub cannot acknowledge the revocation, Settings refreshes to the saved private state and
|
|
289
|
+
shows that hub reconciliation is still pending; bounded boot retries continue without claiming
|
|
290
|
+
that remote removal already completed. A stale same-name peer or a late allocation collision
|
|
291
|
+
returns an actionable conflict instead of silently creating a duplicate record or consuming the
|
|
292
|
+
invitation.
|
|
293
|
+
|
|
294
|
+
Private pairing is administrative inventory, not operational publication. A paired client can
|
|
295
|
+
remain listed as **private** in Settings so it can be reconnected or shared again, but it is absent
|
|
296
|
+
from routable topology, owner/deck bars and MCP cell/deck discovery. Temporary loss of reachability
|
|
297
|
+
does not revoke consent: an authorized node remains visible as stale/offline until a successful
|
|
298
|
+
authoritative refresh either restores it or confirms its withdrawal.
|
|
284
299
|
|
|
285
300
|
The Share control reports desired publication separately from verified tunnel reachability. If a
|
|
286
301
|
detached process survives an upgrade with stale `-R` arguments, **Reconnect and reconcile** applies
|
|
@@ -490,7 +505,7 @@ See [CHANGELOG.md](CHANGELOG.md) for released changes.
|
|
|
490
505
|
|
|
491
506
|
## Status
|
|
492
507
|
|
|
493
|
-
The current stable release is **v0.8.
|
|
508
|
+
The current stable release is **v0.8.31** on npm and GitHub.
|
|
494
509
|
|
|
495
510
|
## License
|
|
496
511
|
|