@mmmbuto/nexuscrew 0.8.25 → 0.8.27

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 CHANGED
@@ -2,6 +2,49 @@
2
2
 
3
3
  All notable changes to NexusCrew are tracked here.
4
4
 
5
+ ## 0.8.27 — 2026-07-21 — "Portable Control"
6
+
7
+ - Restores Fleet and shell launches on current Android/Termux builds by preserving only a
8
+ validated, owner-safe `libtermux-exec` preload under the active Termux prefix. The related
9
+ Node-shebang workaround now detects the Termux runtime layout even when Node reports Linux.
10
+ - Surfaces stable, sanitized `ENOENT`/`EACCES` client-spawn diagnostics without exposing command
11
+ paths, arguments, environment values or credentials, and adds an actionable `nexuscrew doctor`
12
+ check for the Termux execution bridge.
13
+ - Keeps macOS LaunchAgents rooted at the stable user home rather than the replaceable runtime
14
+ directory, with a blocking doctor check for stale launchd working directories.
15
+ - Adds viewer-local aliases for routed nodes, keyed by stable instance identity and stored in a
16
+ private local file. Aliases change display text only; remote labels, routes, owners and topology
17
+ remain untouched and the mutation is never federated.
18
+ - Adds **Settings → Diagnostics** with bounded, structured, source-redacted records, temporary
19
+ 5/15/30/60-minute verbose windows, filtering, pause, export, clear and routed read access.
20
+ Warning and error records remain available while verbose mode is off.
21
+ - Uses the logical Fleet cell name as the visible cell title on mobile, desktop overlays and grid
22
+ tiles, while retaining technical route context only as non-primary metadata.
23
+ - Updates the production lock to `body-parser@1.20.6`.
24
+ - Gate: **931 isolated Node tests** (930 pass / 1 platform skip), **70/70 frontend component
25
+ tests**, production PWA build and zero production dependency vulnerabilities in both dependency
26
+ trees.
27
+
28
+ ## 0.8.26 — 2026-07-20 — "MCP Identity"
29
+
30
+ - Makes MCP caller resolution directly diagnosable through the read-only `nc_identity` tool.
31
+ The diagnostic works without a token or resolved session, reports only non-sensitive source
32
+ and presence metadata, and returns stable missing/invalid identity codes with remediation.
33
+ - Keeps identity-gated tools fail-closed while improving their error contract. A missing or
34
+ invalid tmux identity can no longer be mistaken for a transport failure, and `nc_notify`
35
+ continues to degrade safely to an unknown sender.
36
+ - Documents the explicit `env_vars` name allowlist required by clients that clear the MCP stdio
37
+ environment, including the matching repeatable `codex-vl mcp add --env-var NAME` form. Values
38
+ remain outside command arguments and configuration files.
39
+ - Extends `nexuscrew doctor` with a non-failing MCP identity check: PWA-only users receive at
40
+ most an informational warning, while MCP users can see whether `TMUX` or
41
+ `NEXUSCREW_MCP_SESSION` is observable in the current process.
42
+ - Stabilizes the writable-provider-file security fixture across differing CI umasks without
43
+ weakening the production permission check.
44
+ - Gate: **888 isolated Node tests** (887 pass / 1 platform skip), **39/39 frontend component
45
+ tests**, production PWA build and zero production dependency vulnerabilities in both the root
46
+ and frontend dependency trees.
47
+
5
48
  ## 0.8.25 — 2026-07-19 — "Token Plan"
6
49
 
7
50
  - Adds Alibaba Token Plan Personal as a first-class managed provider for Claude Code,
package/README.md CHANGED
@@ -83,6 +83,10 @@ The first run creates the loopback-only runtime, starts it in the background, op
83
83
  and presents the setup wizard. Later runs reuse the configured service, print a compact status,
84
84
  and exit.
85
85
 
86
+ On Android, `nexuscrew doctor` also verifies the Termux execution bridge used by current app
87
+ builds. NexusCrew carries forward only a validated `libtermux-exec` preload from the active
88
+ Termux prefix; arbitrary loader injection remains excluded from Fleet environments.
89
+
86
90
  The preferred port is `41820`. If another process owns it, NexusCrew selects the next free
87
91
  loopback port and records the result.
88
92
 
@@ -203,7 +207,8 @@ can be changed with pointer drag-and-drop or keyboard controls and is saved auto
203
207
 
204
208
  On mobile, locations are independently collapsible and filterable by all, pinned, active, off,
205
209
  or technical sessions. The same owner-qualified ordering model is used by compact and expanded
206
- desktop views.
210
+ desktop views. Managed terminals use the logical Fleet cell name as their visible title; tmux
211
+ session and route identifiers remain technical context rather than the primary heading.
207
212
 
208
213
  <p align="center">
209
214
  <img src="docs/img/fleet-mobile.gif" width="420" alt="NexusCrew mobile Fleet view with managed cells and session controls">
@@ -270,6 +275,10 @@ Their human-readable label has one server-backed source: rename from Settings or
270
275
  same canonical label appears everywhere without changing the technical route name, node identity,
271
276
  credentials, Share state or deck identity.
272
277
 
278
+ For routed nodes that the current installation does not own, Settings → Nodes offers a local
279
+ alias instead of a remote rename. The alias is private to the viewing installation, follows the
280
+ stable instance identity and never changes or federates the remote label, route or owner.
281
+
273
282
  Pairing links contain a short-lived one-time invite and routing fields, but no SSH private key,
274
283
  provider key or PWA token. Node and deck identities remain owner-qualified across the network,
275
284
  and every routed HTTP or WebSocket request rechecks authorization, hop count and cycle rules.
@@ -316,6 +325,17 @@ state and manual controls are available in Settings → System; set
316
325
  On Linux, generated user services use `KillMode=process` so restarting NexusCrew does not stop
317
326
  the shared tmux server. Lifecycle commands fail closed when that protection cannot be verified.
318
327
 
328
+ ## Structured diagnostics
329
+
330
+ Settings → Diagnostics shows a bounded in-memory event buffer for the local installation or an
331
+ authorized routed node. Verbose collection is explicit and expires after 5, 15, 30 or 60 minutes;
332
+ operational warnings and errors remain available when verbose mode is off. The view supports
333
+ level/component filtering, pause, autoscroll, copy, JSON export and explicit clear.
334
+
335
+ Records are structured and redacted before storage. Raw terminal content, prompts, command lines,
336
+ environment values, tokens, credentials and filesystem paths are not accepted as diagnostic
337
+ metadata. The buffer is not a reader for service journals or log files.
338
+
319
339
  ## MCP bridge
320
340
 
321
341
  `nexuscrew mcp` exposes the local authenticated runtime as a dependency-free stdio MCP server.
@@ -331,11 +351,18 @@ It is intended for AI sessions running inside managed tmux cells.
331
351
  | `nc_deck` | Discover owner-qualified decks containing the calling tmux session |
332
352
  | `nc_cells` | List authorized active and inactive Fleet cells across visible nodes |
333
353
  | `nc_send_cell` | Submit bounded text to one exact active cell returned by `nc_cells` |
354
+ | `nc_identity` | Read-only identity diagnostics; callable with no session and no token |
334
355
 
335
356
  Cell delivery uses bracketed paste followed by a separate Enter. A `submitted` receipt confirms
336
357
  delivery to the target TUI, not acceptance or completion by its model. There is no silent
337
358
  offline queue.
338
359
 
360
+ `nc_identity` returns only non-sensitive data: the `source` the caller was resolved from
361
+ (`tmux`, `NEXUSCREW_MCP_SESSION`, or `missing`), boolean presence of the identity env vars,
362
+ a stable `code` (`OK`, `NEXUSCREW_MCP_IDENTITY_MISSING`, `NEXUSCREW_MCP_IDENTITY_INVALID`) and
363
+ a remediation hint. It never calls an HTTP API or reads the token, so it works even when the
364
+ identity is missing — use it to diagnose why the identity-gated tools fail closed.
365
+
339
366
  Register the bridge in Claude Code:
340
367
 
341
368
  ```json
@@ -349,16 +376,32 @@ Register the bridge in Claude Code:
349
376
  }
350
377
  ```
351
378
 
352
- Or in Codex / Codex-VL:
379
+ Or in Codex / Codex-VL (`env_vars` allowlists variable **names** only — no values are copied
380
+ into the CLI or config file):
353
381
 
354
382
  ```toml
355
383
  [mcp_servers.nexuscrew]
356
384
  command = "nexuscrew"
357
385
  args = ["mcp"]
386
+ env_vars = ["NEXUSCREW_MCP_SESSION", "TMUX", "TMUX_PANE"]
387
+ ```
388
+
389
+ The equivalent CLI form on a Codex-VL build that supports `--env-var` (allowlist by name, repeated):
390
+
391
+ ```text
392
+ codex-vl mcp add nexuscrew \
393
+ --env-var NEXUSCREW_MCP_SESSION \
394
+ --env-var TMUX \
395
+ --env-var TMUX_PANE \
396
+ -- nexuscrew mcp
358
397
  ```
359
398
 
360
- The caller is resolved from its tmux session. `NEXUSCREW_MCP_SESSION` is available only as an
361
- explicit fallback for non-tmux contexts.
399
+ The caller is resolved, in order, from its tmux session (`tmux display-message -p '#S'`),
400
+ then from the `NEXUSCREW_MCP_SESSION` fallback, then not at all. Codex/Codex-VL launch MCP stdio
401
+ processes with a cleared environment, so those clients must explicitly allowlist the identity
402
+ env vars for the server to observe them; otherwise the identity-gated tools (`nc_ask`, `nc_send_file`,
403
+ `nc_deck`, `nc_send_cell`, `nc_inbox`) stay fail-closed with a stable
404
+ `NEXUSCREW_MCP_IDENTITY_*` code, while `nc_notify` degrades to an unknown sender.
362
405
 
363
406
  ## Configuration
364
407
 
@@ -411,7 +454,7 @@ See [CHANGELOG.md](CHANGELOG.md) for released changes.
411
454
 
412
455
  ## Status
413
456
 
414
- The current stable release is **v0.8.25** on npm and GitHub.
457
+ The current stable release is **v0.8.27** on npm and GitHub.
415
458
 
416
459
  ## License
417
460