@mmmbuto/nexuscrew 0.8.12 → 0.8.14

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/README.md CHANGED
@@ -16,7 +16,7 @@ panes, windows. tmux does the work; the browser is just a faithful client.
16
16
 
17
17
  ---
18
18
 
19
- ## What it is (v0.8.12 "Mobile Roster")
19
+ ## What it is (v0.8.14 "Private Launch")
20
20
 
21
21
  - Runs a small server on the host where your tmux sessions live.
22
22
  - Each attach spawns a real PTY running `tmux attach` and bridges its bytes over a WebSocket
@@ -25,14 +25,19 @@ panes, windows. tmux does the work; the browser is just a faithful client.
25
25
  live terminals side by side, draggable dividers, per-tile composer, layout remembered.
26
26
  Tiles attach with `ignore-size` so they never resize your real terminals.
27
27
  - **Ordered Fleet roster**: desktop and mobile share the same per-location model. Local and
28
- every Hydra route are independently collapsible and filterable by all, pinned, active, or
29
- off; route-qualified pins and the deterministic pinned live fresh output activity →
30
- name order survive reloads. Search covers every visible node once the combined roster grows
31
- beyond eight entries. Desktop chrome and the mobile header stay fixed while their lists
32
- scroll, and the compact version/endpoint/language footer remains readable on narrow screens.
28
+ every Hydra route are independently collapsible and filterable by all, pinned, active, off,
29
+ or technical. Technical tmux sessions stay out of the normal roster until explicitly shown,
30
+ and every location count reflects the rows actually displayed. Route-qualified pins keep
31
+ priority, while cells can be reordered from the dedicated handle with Pointer Events on
32
+ mouse, touch, or pen, or with keyboard move controls. Reorder highlights the destination,
33
+ scrolls at list edges, commits only on release and can be cancelled without changing the
34
+ saved order. The owner-qualified order survives reloads and is shared by compact and expanded
35
+ views. Desktop chrome and the mobile header stay fixed while their lists scroll, and the
36
+ compact version/endpoint/language footer remains readable on narrow screens.
33
37
  - **Attached decks by default**: named workspaces switch as tabs inside the same PWA without
34
38
  reloading terminals or losing a pending layout save. Use `↗` only when you want to detach a
35
- deck into another browser window or monitor.
39
+ deck into another browser window or monitor. Every Local or remote owner group ends with its
40
+ own compact `+ new`, so the creation destination is explicit and never falls back elsewhere.
36
41
  - **Federated Hydra inventory**: connect existing NexusCrew installations through the SSH
37
42
  configuration you already control and see local, direct, and relayed tmux fleets in one UI.
38
43
  Route labels show where every session lives; creation, attach, files, lifecycle and Fleet
@@ -47,12 +52,20 @@ panes, windows. tmux does the work; the browser is just a faithful client.
47
52
  - **Cell lifecycle from the UI**: the primary `+` creates a managed Fleet cell at Local or
48
53
  any reachable node. Power opens one shared launch sheet where engine, model, permission
49
54
  policy and boot can be reviewed before every start; deletion lives in Settings → Fleet.
55
+ An immediately exiting client reports bounded, redacted diagnostics and cannot leave a
56
+ zero-window phantom beside the configured cell.
50
57
  - **Legacy session adoption**: Settings → Fleet lists managed and unmanaged tmux sessions on
51
58
  every route. A live unmanaged session can be explicitly imported as a managed cell without
52
59
  inventing its engine, provider or model.
53
- - **Selective cell backup**: export chosen cells with their engine mapping and system prompt,
54
- then select exactly which definitions to restore. Provider keys and runtime session state
55
- are never exported; active cells that need a restart are reported explicitly.
60
+ - **Selective cell and engine backup**: export chosen cells, reusable engine definitions,
61
+ engine mapping and system prompts, then select exactly what to restore. Archives contain
62
+ credential-variable names but never their values, provider keys or runtime session state;
63
+ conflicts and active cells that need a restart are reported explicitly.
64
+ - **Private provider credentials**: each node resolves a required key from its runtime
65
+ environment, compatible user-owned provider files, or an optional local write-only store.
66
+ The PWA can set, replace, or forget a missing key on that exact node without displaying it.
67
+ Values never enter Fleet definitions, backups, API responses, tmux state, process arguments,
68
+ temporary files, or logs.
56
69
  - **Rich cards**: last activity, current command, a sanitized one-line preview per session.
57
70
  - **Fleet control**: a built-in schema-driven fleet manager handles cells, engines, model
58
71
  selection, and boot persistence; an existing external `fleet` CLI can take ownership through
@@ -70,6 +83,13 @@ panes, windows. tmux does the work; the browser is just a faithful client.
70
83
  serialize installation across processes, verify the restarted runtime and roll back once
71
84
  to the exact previous version if the new server does not become healthy. On Linux, stopping
72
85
  or restarting the HTTP service preserves the independent shared tmux server and every session.
86
+ Registry checks and service processes use a stable NexusCrew working directory, so deleting
87
+ the directory from which NexusCrew was originally launched cannot break future updates.
88
+ - **Authenticated cell network**: AI cells can discover the owner-qualified Fleet directory
89
+ visible through the authorized Hydra topology and submit bounded text to one exact active
90
+ destination. Inactive cells remain visible but are never presented as queued recipients;
91
+ a `submitted` receipt confirms only paste plus Enter in the target TUI, not that its model
92
+ accepted, processed or completed the task.
73
93
  - **Universal**: a PTY is a PTY — a coding agent, a REPL, a plain shell, anything tmux holds.
74
94
 
75
95
  ## Screenshots
@@ -107,10 +127,19 @@ The concise provider catalog is scoped per CLI:
107
127
  GitHub Copilot, OpenRouter, local Ollama, DeepSeek, Z.AI, and a custom provider.
108
128
 
109
129
  Provider credentials are resolved from the selected CLI's native login or from an environment
110
- variable named in the PWA; NexusCrew never stores a new secret value. Legacy Z.AI A/P engines
111
- remain launch-compatible for existing fleets but are not provider choices for new engines.
112
- Model discovery is used where the CLI/provider documents it, with a manual model field as the
113
- portable fallback.
130
+ variable named in the PWA. A named variable is read first from the service environment, then
131
+ from the optional node-local NexusCrew store, then—when present—from the user-owned
132
+ `~/.config/ai-shell/providers.zsh`, `~/.config/keys/ai.env`, or
133
+ `~/.config/secure/.env`, parsed strictly as assignment data and never sourced or executed.
134
+ The PWA shows only whether the requested name is configured and its source category; a missing
135
+ value can be saved locally in `~/.nexuscrew/credentials.json` under a user-owned `0700`
136
+ directory and `0600` file, or removed again. The store is write-only through the API and is
137
+ never included in config, services, Fleet backups, federation payloads, logs, or responses.
138
+ At launch, secret-bearing environment data crosses a private one-shot Unix socket and reaches
139
+ the CLI by direct process spawn; it never enters tmux environment state, argv, or a temporary
140
+ file. Legacy Z.AI A/P engines remain launch-compatible for existing fleets but are not provider
141
+ choices for new engines. Model discovery is used where the CLI/provider documents it, with a
142
+ manual model field as the portable fallback.
114
143
 
115
144
  Managed engines expose a permission selector both in their definition and in the cell launch
116
145
  sheet. New Claude engines (native, Z.AI, Ollama, or custom) default to **Bypass permissions**
@@ -123,11 +152,14 @@ auto-compaction window variables, including one-million-token profiles where dec
123
152
  Custom argv-based engines remain supported. Their command, environment, cwd, and prompt are
124
153
  validated against a strict trust boundary and launched without a shell.
125
154
 
126
- Settings → Fleet also provides a selective **Cells backup** flow. The JSON file contains only
127
- portable cell definitions (cwd, engine choice, model mapping, boot flag and system prompt),
128
- never provider credentials, PWA tokens or live tmux identifiers. During restore you choose the
129
- destination engine for each cell and confirm overwrites; running cells are left untouched and
130
- listed as needing a restart.
155
+ Settings → Fleet also provides a selective **Cells and engines backup** flow. The v2 JSON file
156
+ contains portable cell definitions (cwd, engine choice, model mapping, boot flag and system
157
+ prompt) plus only the selected reusable engine definitions. Custom-engine environment-variable
158
+ names are portable; their values, provider credentials, PWA tokens and live tmux identifiers
159
+ are never exported. Legacy cell-only v1 files remain importable. Restore previews conflicts,
160
+ lets you choose each section independently, confirms every overwrite before mutation, preserves
161
+ only matching values already configured on the destination, and reports which active cells need
162
+ a restart.
131
163
 
132
164
  ### External fleet manager
133
165
 
@@ -209,13 +241,17 @@ The link never contains an SSH key, identity file, API key or PWA token. Its onl
209
241
  the random, one-time pairing invite; SSH routing fields are non-secret configuration. A
210
242
  successful pairing creates one supervised SSH connection to the hub. Its normal `-L` channel
211
243
  is private and provides access to the hub. The optional `-R` channel is added to that same SSH
212
- process only when the user enables **Share this node**, after which the hub verifies it before
213
- advertising the device. Both sides exchange only redacted topology.
244
+ process only when the user enables **Share this device through the selected hub** in the local
245
+ device card. The hub verifies the authenticated reverse channel before advertising the device;
246
+ its inbound-node controls then decide whether authorized clients see the whole network,
247
+ relay-only or a selected set. Both sides exchange only redacted topology.
214
248
 
215
249
  A newly paired phone or laptop is private by default: the hub keeps it in Settings without
216
- probing it as a server or showing a false red error. Enabling Share makes it routable and turns
217
- authenticated reverse-channel health into a real requirement; a shared node that stops
218
- responding, or a live endpoint that rejects authentication, remains a real health error.
250
+ probing it as a server or showing a false red error. Share always refers to the current local
251
+ device—not to the remote hub card—and uses its already selected hub connection; no direct
252
+ peer-to-peer SSH is required. Enabling Share makes it routable and turns authenticated
253
+ reverse-channel health into a real requirement; a shared node that stops responding, or a live
254
+ endpoint that rejects authentication, remains a real health error.
219
255
 
220
256
  NexusCrew does not create SSH keys or edit `authorized_keys`. OpenSSH remains authoritative for
221
257
  identity files, agents, host keys, ports, ProxyJump and forwarding policy. NexusCrew uses
@@ -228,8 +264,9 @@ PWA token never crosses a peer link.
228
264
  A relay controls what its peers can see. The default is the whole network; a peer can be reduced
229
265
  to relay-only or a selected set. HTTP and WebSocket routing enforce that policy at every hop,
230
266
  with stable instance IDs, cycle rejection and a four-hop ceiling. Session creation, terminal,
231
- files, termination, and Fleet editing work on Local or any reachable route. Previously seen
232
- transitive nodes remain listed as offline with their last-seen time while a relay is down.
267
+ files, termination, Fleet editing and authorized cell discovery work on Local or any reachable
268
+ route. Previously seen transitive nodes remain listed as offline with their last-seen time while
269
+ a relay is down.
233
270
 
234
271
  ## Install & run
235
272
 
@@ -273,7 +310,10 @@ nexuscrew
273
310
  Termux uses the Android ARM64 PTY provider. The normal command starts NexusCrew in the
274
311
  background and exits. `nexuscrew boot` installs the Termux:Boot script explicitly; install the
275
312
  Termux:Boot app and launch it once, because Android app activation cannot be verified by the
276
- CLI. `nexuscrew doctor` reports that limitation even when the script itself is valid.
313
+ CLI. `nexuscrew doctor` reports that limitation even when the script itself is valid. Inside
314
+ managed cells, npm-installed Codex and Codex-VL scripts are launched through the active Node
315
+ executable when their shebang depends on the unavailable `/usr/bin/env`; native executables
316
+ such as Pi remain direct launches.
277
317
 
278
318
  On every platform the first run starts the server in the background and opens the PWA wizard.
279
319
  After onboarding, the same command starts or reuses it, prints a compact status and guide, and
@@ -308,8 +348,10 @@ and the active service or detached runtime is restarted on the same loopback por
308
348
  runtime fails its bounded health check, NexusCrew reinstalls the exact previous version and
309
349
  restarts once; that failed version is then blocked from automatic retry. The updater never
310
350
  accepts a prerelease from `latest`, never downgrades, and redacts registry credentials and local
311
- paths from PWA errors. Its current state and manual check/apply controls live in Settings
312
- System. Set `NEXUSCREW_AUTO_UPDATE=0` (or `false`, `no`, `off`) to disable scheduling.
351
+ paths from PWA errors. Registry commands run from a stable directory owned by NexusCrew and
352
+ accept npm's JSON scalar or plain semantic-version output. Its current state and manual
353
+ check/apply controls live in Settings → System. Set `NEXUSCREW_AUTO_UPDATE=0` (or `false`,
354
+ `no`, `off`) to disable scheduling.
313
355
 
314
356
  On Linux, the installed service uses `KillMode=process`: service lifecycle affects NexusCrew,
315
357
  not the shared tmux server. Existing units are protected by an atomic drop-in before any CLI or
@@ -336,8 +378,8 @@ by normal startup, help, doctor, or service output.
336
378
 
337
379
  `nexuscrew mcp` runs a minimal **stdio MCP server** (JSON-RPC 2.0, one JSON message per
338
380
  line, zero SDK dependencies) that brings NexusCrew *inside* your AI sessions. An agent
339
- running in a tmux session gets six tools the cell→human channel plus its
340
- read-only deck context:
381
+ running in a tmux session gets eight tools: the cell→human channel, read-only deck context,
382
+ and an authenticated active-cell network:
341
383
 
342
384
  - `nc_notify {title, body?, urgency?}` — human notification: toast on every open UI +
343
385
  web push on subscribed devices (enable push from Settings → System).
@@ -351,13 +393,24 @@ read-only deck context:
351
393
  authorized shared-owner deck that contains it. Deck identity is owner-qualified; members
352
394
  include stable owner ID, Fleet cell name (when managed), exact tmux session and the Hydra
353
395
  route valid from the caller. Unavailable members remain visible with `cell: null`.
396
+ - `nc_cells {}` — returns the owner-qualified Fleet directory visible through the caller's
397
+ authorized, non-stale Hydra topology. Every entry has a stable `<instanceId>:<cell>` ID,
398
+ exact tmux session and route, activity state and `canReceive`; duplicate cell names on
399
+ different devices remain unambiguous.
400
+ - `nc_send_cell {to, message}` — submits bounded text to one exact ID returned by `nc_cells`.
401
+ The caller must itself be an active local Fleet cell, the destination must still be active,
402
+ and every remote hop rechecks identity and ACL. There is no silent offline queue. A
403
+ `submitted` receipt means only that bracketed paste and a separate Enter reached the target
404
+ TUI; it does not mean accepted, working or completed.
354
405
  - `nc_status {}` / `nc_inbox {}` — read-only: live sessions + fleet cells / inbox files.
355
406
 
356
407
  The caller's identity is the tmux session name (`$TMUX` → `tmux display-message`), with
357
408
  `NEXUSCREW_MCP_SESSION` as fallback for non-tmux contexts. The bridge talks to the local
358
- HTTP API (loopback + token from `~/.nexuscrew/token`); the cell↔cell bus stays out of scope.
359
- `nc_deck` is discovery only: use the AI client's verified tmux-messaging workflow to contact
360
- another member, and never scrape `decks.json` directly.
409
+ HTTP API (loopback + token from `~/.nexuscrew/token`). Use `nc_deck` for visual workspace
410
+ neighbours and `nc_cells` for the global authorized directory; use `nc_send_cell` for managed
411
+ cell delivery. Direct tmux injection is only a declared same-host compatibility or repair
412
+ fallback and must never bypass Fleet membership or Hydra ACLs. Never scrape `decks.json`
413
+ directly.
361
414
 
362
415
  Register it in **Claude Code** (`.mcp.json` in your project root, or `~/.claude.json`):
363
416
 
@@ -404,8 +457,9 @@ node bin/nexuscrew.js serve
404
457
 
405
458
  ## Status
406
459
 
407
- The current release candidate is **v0.8.12**. npm **`latest`**, the GitHub tag and the release
408
- assets are promoted from the same verified artifact.
460
+ The current release candidate is **v0.8.14**. npm **`latest`** is promoted from the verified
461
+ artifact first; the GitHub tag and release follow the operator field test from the same source
462
+ candidate.
409
463
 
410
464
  ## License
411
465