@fnndsc/porter 0.6.3 → 0.6.4

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/dist/notes.json CHANGED
@@ -1 +1 @@
1
- {"package":"@fnndsc/porter","version":"0.6.3","built":"2026-10-08T18:06:53.511Z","releases":[{"version":"0.6.3","date":"2026-10-08","merge":"834ea59d0dfe","bump":"patch","changes":[{"hash":"df34da0","headline":"A failed login now says what failed, instead of always blaming the credentials.","body":"An untrusted TLS certificate names the host, the code and `NODE_EXTRA_CA_CERTS`; an unreachable CUBE says so with the code; only CUBE refusing the login mentions the password. The same holds for token logins, `sudo`, and porter's login page.","internal":false},{"hash":"563d788","headline":"porter installed from npm now starts instead of exiting silently.","body":"That covers its `porter` bin link, `npx porter` and `node_modules/.bin/porter`. It used to decide whether it was the program by checking that `argv[1]` ended in `porter.js`; it now compares real paths, as chell and calypso do.","internal":false},{"hash":null,"headline":"Updated dependencies [d3618fb]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [df34da0] - @fnndsc/chell@5.11.2 - @fnndsc/cumin@3.27.7 - @fnndsc/calypso@0.19.7","body":"","internal":true}]},{"version":"0.6.2","date":"2026-10-07","merge":"4f36075aae4f","bump":"patch","changes":[{"hash":"3538728","headline":"A restart now says why in plain words, naming the packages a stale daemon was behind.","body":"`Restarting a stale calypso daemon (brasa 0.31.5 → 0.33.0)` replaces \"the old one is told why and ended\"; RESTART reads `Restarting the calypso daemon, as asked`.","internal":false}]},{"version":"0.6.1","date":"2026-10-06","merge":"e86717fcd132","bump":"patch","changes":[{"hash":"6325bc4","headline":"The door has a page to type a chell code at.","body":"`/device` puts a code field beside the username and password, as github.com/login/device does, and authorising a code also starts the user's session when none is up, so a first-ever `chell auth login` is followed by a `chell -c` that works.","internal":false},{"hash":null,"headline":"Updated dependencies [6325bc4] - @fnndsc/chell@5.11.1","body":"","internal":true}]},{"version":"0.6.0","date":"2026-10-06","merge":"1b09efadc872","bump":"minor","changes":[{"hash":"5c16c65","headline":"The door takes a token as well as a password, so a script can come through without one.","body":"A human login can mint a named door token (a JSON login asking for one, or the browser authorising a chell by one-time code on the login page); the door keeps only its hash, with the name and the day it dies (`PORTER_TOKEN_DAYS`, 30 by default), and a script presents it as `Authorization: Bearer`. A session not up boots on the login it saved. Expired and unknown tokens are refused by name, and the journal says who came through by which token.","internal":false},{"hash":"44c75f4","headline":"The porter's own command line lists, revokes and mints door tokens.","body":"`porter --tokens` shows user, name, minted, dies and last used; `porter --revoke <user> [<name>]` ends one or all of a user's; `porter --mint <user> --name <name>` mints one by the operator's hand, shown once, for a service identity or a hand-over. A running door notices a store changed under it on the token's next use, so a revocation takes effect without a restart.","internal":false},{"hash":"b4a7674","headline":"A holder can see and end their own door tokens.","body":"A token login answers whose token it was; `GET /auth/tokens` lists the identity's tokens by one of them and `DELETE /auth/token` revokes the token in hand, which is what `chell auth tokens` and `chell auth logout` call.","internal":false},{"hash":null,"headline":"Updated dependencies [b4a7674]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [8ae54c6]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [eea6238] - @fnndsc/chell@5.11.0","body":"","internal":true}]},{"version":"0.5.5","date":"2026-10-05","merge":"9b5699be2dee","bump":"patch","changes":[{"hash":"66bfa85","headline":"A login onto an older daemon restarts it the way the RESTART pill does.","body":"The old daemon is told why and waited out before the new one boots, so a terminal attaches to the new session rather than a port that is closing; and the door now reads the versions a berth carries, so a session restarted once is current and is not restarted again.","internal":false}]},{"version":"0.5.4","date":"2026-10-05","merge":"e8e51d6f6da5","bump":"patch","changes":[{"hash":"9f4c181","headline":"A login never lands on a kernel older than the door's.","body":"A session whose daemon still runs code from before the porter's last upgrade is ended at login and boots afresh on the way in, its saved state kept, so the first command you type is answered by the release that is installed.","internal":false},{"hash":null,"headline":"Updated dependencies [9f4c181] - @fnndsc/calypso@0.19.6","body":"","internal":true}]},{"version":"0.5.3","date":"2026-10-05","merge":"d2a8f2306caa","bump":"patch","changes":[{"hash":"a4aabb7","headline":"A word the porter entry does not know is refused by name instead of starting a second door.","body":"`porter --help` lists the words, `--sessions` says what `--status` says, and a restarted porter adopts the sessions it finds only once it holds its port.","internal":false}]},{"version":"0.5.2","date":"2026-10-05","merge":"ecfe0e091342","bump":"patch","changes":[{"hash":"5a0eef5","headline":"The package ships its release notes, so a session can say what changed.","body":"They are read from CHANGELOG.md at build into dist/notes.json.","internal":false},{"hash":null,"headline":"Updated dependencies [5a0eef5]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [5a0eef5]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [5a0eef5] - @fnndsc/calypso@0.19.4 - @fnndsc/chell@5.10.3 - @fnndsc/menu@0.19.0","body":"","internal":true}]},{"version":"0.5.1","date":"2026-10-04","merge":"8b4c28c80fc2","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [73c0087] - @fnndsc/menu@0.18.0 - @fnndsc/calypso@0.19.2 - @fnndsc/chell@5.10.1","body":"","internal":true}]},{"version":"0.5.0","date":"2026-10-03","merge":"b737b6d5269e","bump":"minor","changes":[{"hash":"33e4f1d","headline":"A session restarts from its own browser and stays logged in.","body":"Porter's new `POST /restart` (cookie-gated: only the cookie's own session) tells the old calypso daemon why, ends it, and boots a fresh one with chell's new `--saved-token` login, which uses the token the identity saved and refuses rather than come up offline. The browser follows the boot on the greeter; a refused saved token ends at the door with the reason. On SIGTERM the daemon sends `closing` (restart, end or stop) to every surface before it exits, and a remote chell prints why it went. `porter --end` leaves `end` as the reason.","internal":false},{"hash":null,"headline":"Updated dependencies [51315ec]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [33e4f1d]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [fe4b6b4] - @fnndsc/calypso@0.19.0 - @fnndsc/menu@0.17.0 - @fnndsc/chell@5.10.0","body":"","internal":true}]},{"version":"0.4.6","date":"2026-10-03","merge":"ff157a55d5ed","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [685ed59] - @fnndsc/calypso@0.18.0 - @fnndsc/menu@0.16.0 - @fnndsc/chell@5.9.8","body":"","internal":true}]},{"version":"0.4.5","date":"2026-10-03","merge":"30fbc2abbc84","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [2826f2b]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [c1cf57e]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [51da853] - @fnndsc/menu@0.15.0 - @fnndsc/calypso@0.17.0 - @fnndsc/chell@5.9.7","body":"","internal":true}]},{"version":"0.4.4","date":"2026-10-01","merge":"0491d58506dd","bump":"patch","changes":[{"hash":"88437cc","headline":"A tab icon: the ChRIS mark on the page's own ground, for the surface and for the door.","body":"","internal":false},{"hash":null,"headline":"Updated dependencies [4864a34] - @fnndsc/menu@0.14.0 - @fnndsc/calypso@0.16.10 - @fnndsc/chell@5.9.6","body":"","internal":true}]},{"version":"0.4.3","date":"2026-10-01","merge":"5625f543f8f6","bump":"patch","changes":[{"hash":"b5bb197","headline":"The greeter settles a boot row where it stands: the outcome of a `[PENDING]` or `[RETRY]` step replaces that row instead of appending beneath it.","body":"","internal":false}]},{"version":"0.4.2","date":"2026-10-01","merge":"1b77ac182c25","bump":"patch","changes":[{"hash":"cbd71cc","headline":"A refused file read says why: the kernel names the status and reason (403 not yours to read, 404 no such file, 502 CUBE could not serve it), `/vfs` answers with them instead of 404 for everything, and an image pane that lost a slice reads the reason out.","body":"`porter --end <who>` ends one session so the next login boots on the current kernel.","internal":false},{"hash":null,"headline":"Updated dependencies [cbd71cc] - @fnndsc/calypso@0.16.9","body":"","internal":true}]},{"version":"0.4.1","date":"2026-09-27","merge":"f3d2d7ed3d72","bump":"patch","changes":[{"hash":"ef542cd","headline":"`PORTER_SOUNDS_DIR` actually answers: the mount hands the route `/sounds/press.mp3` with its leading slash, which the sound match did not allow, so every sound was proxied to the page's own.","body":"Route-level test added.","internal":false}]},{"version":"0.4.0","date":"2026-09-27","merge":"49033a576021","bump":"minor","changes":[{"hash":"c6d8161","headline":"`PORTER_SOUNDS_DIR`: a folder of sounds the porter serves in place of the page's own (`/s/<key>/sounds/<name>.mp3|wav|ogg`, bare names only), so a deployment's original LCARS beeps — never in a package — live outside the install and survive an upgrade.","body":"","internal":false}]},{"version":"0.3.5","date":"2026-09-26","merge":"a1a7cf9a2b2d","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [fbd3f0a]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [fbd3f0a] - @fnndsc/menu@0.13.0 - @fnndsc/chell@5.9.5 - @fnndsc/calypso@0.16.8","body":"","internal":true}]},{"version":"0.3.4","date":"2026-09-26","merge":"70016c84b4f0","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [f571a14]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [d1da8ac]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [0f9ae74]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [d8e160c] - @fnndsc/chell@5.9.4 - @fnndsc/menu@0.12.0 - @fnndsc/calypso@0.16.7","body":"","internal":true}]},{"version":"0.3.3","date":"2026-09-24","merge":"646a384af419","bump":"patch","changes":[{"hash":"98b839f","headline":"A session whose daemon died is no longer proxied to the dead port: a login that boots a new daemon replaces the stale entry, and a mount whose daemon does not answer follows the session to its new berth or sends the browser to the door, instead of a bare 500 ECONNREFUSED.","body":"","internal":false}]},{"version":"0.3.2","date":"2026-09-22","merge":"2356c7db39f7","bump":"patch","changes":[{"hash":"05b9b41","headline":"porter: `porter --status` marks the pid on a gone row as stale.","body":"The berth outlives a daemon killed with -9, and the bare number read as a process the listing had just made. - @fnndsc/calypso@0.16.2","internal":false}]},{"version":"0.3.1","date":"2026-09-22","merge":"c1b0be0099d8","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [dac2d96]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [dac2d96]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [50f8a4e]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [c82f514] - @fnndsc/chell@5.9.1 - @fnndsc/menu@0.11.0 - @fnndsc/calypso@0.16.1","body":"","internal":true}]},{"version":"0.3.0","date":"2026-09-22","merge":"61536c94c899","bump":"minor","changes":[{"hash":"b58f4da","headline":"porter: published.","body":"`npm install -g @fnndsc/porter` brings the whole stack beneath it, and `PORTER_CUBE_URL=… porter` is the full login experience from one install. `@fnndsc/menu` is a declared dependency, since the greeter serves its brain and ANSI modules from where menu is installed.","internal":false},{"hash":"2b18178","headline":"porter: `porter --status` asks for nothing but the state directory.","body":"It read the full configuration first and refused without `PORTER_CUBE_URL`, a fact a listing never uses.","internal":false}]},{"version":"0.2.0","date":"2026-09-21","merge":"576426874567","bump":"minor","changes":[{"hash":"3a8cd1b","headline":"A porter at the door: the mise display manager, slice 3 — the shape without the door.","body":"`apps/porter` logs an operator into one CUBE, trades the password for a token, starts or joins that identity's calypso (`chell --daemon --auth-token-stdin`, the token on stdin, four directories of its own under the porter's state) and mounts the session at `/s/<key>/`: page, assets, `/vfs` and the WebSocket wire proxied to the daemon on loopback with the attach token added by the porter, so the browser holds none. `GET /boot/<key>` streams the session's boot as server-sent events, one per line the daemon wrote, replayed for a late attacher. `POST /sessions` re-checks the password at CUBE every time, even when the session is up.\n\ncalypso: the attach token may ride the upgrade URL (`?token=`), the way `/vfs?token=` already does, so a front that holds the token for a browser can put it on the proxied upgrade and the page attaches with an empty one; and `berth_pathIn(runtimeDir, identity)` names a berth under a runtime directory that is not the process's own.\n\nNo cookie yet: this porter binds loopback. The door — login page, cookie, LOG OUT — is the next slice.","internal":false},{"hash":"4ee180c","headline":"A session outlives its door: the porter's lifecycle.","body":"porter: a restarted porter adopts the sessions its predecessor started, from their berths under the state directory, rather than starting rivals. Idle sessions — no wire open, nothing through the door for `PORTER_IDLE_HOURS` (a day, like the cookie) — are ended by a sweep every minute: the process only; the state directory stays and the next login boots warm. `porter --status` lists the state directory's sessions and whether each answers. `deploy/` carries a systemd unit (a `porter` user, `KillMode=process` so a stopped door keeps its sessions), an env file example, and a Caddyfile for TLS in front. Boot lines kept per session are capped at 2000.\n\ncalypso: a berth records the daemon's pid, so a host that did not start a daemon can still end it.\n\nchell: a daemon off a TTY tolerates EPIPE on its stdout and stderr — the porter that started it may stop first, and a session outlives its door.","internal":false},{"hash":"21f8d21","headline":"The door itself: the porter logs a browser in and argus leaves by the door it came in.","body":"porter: `GET /login` asks for a username and a password; `POST /login` (form or JSON) trades the password for a CUBE token, starts or joins the session, sets a signed HttpOnly SameSite=Lax cookie naming it (Secure behind TLS, a day long by default) and sends the browser to `/s/<key>/?door`. The cookie gates the boot stream, the mount and the wire: a browser reaches only the session its cookie names; without it, the door (302), a refusal (401) or a dropped upgrade. `POST /logout` clears the cookie and leaves the session running. `PORTER_SECRET` signs the cookie; given none, one is made up per start and said so.\n\nargus: a LOG OUT pill beside AUDIO and the theme, in the frame's hue, standing only on a page that came through a door; pressed, it tells the door to forget this browser and goes to the door's login. The session is not touched. Law: a-surface-leaves-by-the-door-it-came-in.","internal":false},{"hash":"1c169d7","headline":"The greeter: the door answers at once, and a boot is watched rather than waited for.","body":"porter: `POST /login` no longer holds the browser for a cold boot. A session already up is entered directly; one that must boot sends the browser to `/greet/<key>`, where the mise brain wakes — the same frames a terminal boot draws, paced by the page — and the daemon's boot rows arrive beneath it as they are written, ANSI and all, from the boot stream. `ready` rests the brain and hands the browser to the session; `failed` says why and offers the door again. The login page wears the same shell with the brain at rest. The porter serves the two modules it draws with from the installed wire package (`/greeter/brain.js`, `/greeter/ansi.js`); a booting identity is pending in the registry and reaches its mount only when its berth answers.\n\nmenu: `@fnndsc/menu/ansi` — the ANSI-to-HTML converter and the console palette, moved from the ARGUS console so a browser greeter renders a boot the way the console renders a transcript; argus keeps the DOM half and re-exports the rest.","internal":false},{"hash":null,"headline":"Updated dependencies [d1a1c0d]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [3a8cd1b]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [1bdf876]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [4ee180c]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [c1178a0]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [5b520c7]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [810f3ba]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [7bba167] - @fnndsc/calypso@0.16.0 - @fnndsc/chell@5.9.0","body":"","internal":true}]}]}
1
+ {"package":"@fnndsc/porter","version":"0.6.4","built":"2026-10-08T18:34:15.317Z","releases":[{"version":"0.6.4","date":"2026-10-08","merge":"0dbedcf21c64","bump":"patch","changes":[{"hash":"eb43996","headline":"The door and the daemon now say their version, through `porter --version` and `calypso --version` (or `-V`).","body":"porter prints its own version and the brasa, calypso and chell it would start sessions on; calypso prints its stack, as `chell --version` does.","internal":false},{"hash":null,"headline":"Updated dependencies [eb43996] - @fnndsc/calypso@0.19.8","body":"","internal":true}]},{"version":"0.6.3","date":"2026-10-08","merge":"834ea59d0dfe","bump":"patch","changes":[{"hash":"df34da0","headline":"A failed login now says what failed, instead of always blaming the credentials.","body":"An untrusted TLS certificate names the host, the code and `NODE_EXTRA_CA_CERTS`; an unreachable CUBE says so with the code; only CUBE refusing the login mentions the password. The same holds for token logins, `sudo`, and porter's login page.","internal":false},{"hash":"563d788","headline":"porter installed from npm now starts instead of exiting silently.","body":"That covers its `porter` bin link, `npx porter` and `node_modules/.bin/porter`. It used to decide whether it was the program by checking that `argv[1]` ended in `porter.js`; it now compares real paths, as chell and calypso do.","internal":false},{"hash":null,"headline":"Updated dependencies [d3618fb]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [df34da0] - @fnndsc/chell@5.11.2 - @fnndsc/cumin@3.27.7 - @fnndsc/calypso@0.19.7","body":"","internal":true}]},{"version":"0.6.2","date":"2026-10-07","merge":"4f36075aae4f","bump":"patch","changes":[{"hash":"3538728","headline":"A restart now says why in plain words, naming the packages a stale daemon was behind.","body":"`Restarting a stale calypso daemon (brasa 0.31.5 → 0.33.0)` replaces \"the old one is told why and ended\"; RESTART reads `Restarting the calypso daemon, as asked`.","internal":false}]},{"version":"0.6.1","date":"2026-10-06","merge":"e86717fcd132","bump":"patch","changes":[{"hash":"6325bc4","headline":"The door has a page to type a chell code at.","body":"`/device` puts a code field beside the username and password, as github.com/login/device does, and authorising a code also starts the user's session when none is up, so a first-ever `chell auth login` is followed by a `chell -c` that works.","internal":false},{"hash":null,"headline":"Updated dependencies [6325bc4] - @fnndsc/chell@5.11.1","body":"","internal":true}]},{"version":"0.6.0","date":"2026-10-06","merge":"1b09efadc872","bump":"minor","changes":[{"hash":"5c16c65","headline":"The door takes a token as well as a password, so a script can come through without one.","body":"A human login can mint a named door token (a JSON login asking for one, or the browser authorising a chell by one-time code on the login page); the door keeps only its hash, with the name and the day it dies (`PORTER_TOKEN_DAYS`, 30 by default), and a script presents it as `Authorization: Bearer`. A session not up boots on the login it saved. Expired and unknown tokens are refused by name, and the journal says who came through by which token.","internal":false},{"hash":"44c75f4","headline":"The porter's own command line lists, revokes and mints door tokens.","body":"`porter --tokens` shows user, name, minted, dies and last used; `porter --revoke <user> [<name>]` ends one or all of a user's; `porter --mint <user> --name <name>` mints one by the operator's hand, shown once, for a service identity or a hand-over. A running door notices a store changed under it on the token's next use, so a revocation takes effect without a restart.","internal":false},{"hash":"b4a7674","headline":"A holder can see and end their own door tokens.","body":"A token login answers whose token it was; `GET /auth/tokens` lists the identity's tokens by one of them and `DELETE /auth/token` revokes the token in hand, which is what `chell auth tokens` and `chell auth logout` call.","internal":false},{"hash":null,"headline":"Updated dependencies [b4a7674]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [8ae54c6]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [eea6238] - @fnndsc/chell@5.11.0","body":"","internal":true}]},{"version":"0.5.5","date":"2026-10-05","merge":"9b5699be2dee","bump":"patch","changes":[{"hash":"66bfa85","headline":"A login onto an older daemon restarts it the way the RESTART pill does.","body":"The old daemon is told why and waited out before the new one boots, so a terminal attaches to the new session rather than a port that is closing; and the door now reads the versions a berth carries, so a session restarted once is current and is not restarted again.","internal":false}]},{"version":"0.5.4","date":"2026-10-05","merge":"e8e51d6f6da5","bump":"patch","changes":[{"hash":"9f4c181","headline":"A login never lands on a kernel older than the door's.","body":"A session whose daemon still runs code from before the porter's last upgrade is ended at login and boots afresh on the way in, its saved state kept, so the first command you type is answered by the release that is installed.","internal":false},{"hash":null,"headline":"Updated dependencies [9f4c181] - @fnndsc/calypso@0.19.6","body":"","internal":true}]},{"version":"0.5.3","date":"2026-10-05","merge":"d2a8f2306caa","bump":"patch","changes":[{"hash":"a4aabb7","headline":"A word the porter entry does not know is refused by name instead of starting a second door.","body":"`porter --help` lists the words, `--sessions` says what `--status` says, and a restarted porter adopts the sessions it finds only once it holds its port.","internal":false}]},{"version":"0.5.2","date":"2026-10-05","merge":"ecfe0e091342","bump":"patch","changes":[{"hash":"5a0eef5","headline":"The package ships its release notes, so a session can say what changed.","body":"They are read from CHANGELOG.md at build into dist/notes.json.","internal":false},{"hash":null,"headline":"Updated dependencies [5a0eef5]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [5a0eef5]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [5a0eef5] - @fnndsc/calypso@0.19.4 - @fnndsc/chell@5.10.3 - @fnndsc/menu@0.19.0","body":"","internal":true}]},{"version":"0.5.1","date":"2026-10-04","merge":"8b4c28c80fc2","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [73c0087] - @fnndsc/menu@0.18.0 - @fnndsc/calypso@0.19.2 - @fnndsc/chell@5.10.1","body":"","internal":true}]},{"version":"0.5.0","date":"2026-10-03","merge":"b737b6d5269e","bump":"minor","changes":[{"hash":"33e4f1d","headline":"A session restarts from its own browser and stays logged in.","body":"Porter's new `POST /restart` (cookie-gated: only the cookie's own session) tells the old calypso daemon why, ends it, and boots a fresh one with chell's new `--saved-token` login, which uses the token the identity saved and refuses rather than come up offline. The browser follows the boot on the greeter; a refused saved token ends at the door with the reason. On SIGTERM the daemon sends `closing` (restart, end or stop) to every surface before it exits, and a remote chell prints why it went. `porter --end` leaves `end` as the reason.","internal":false},{"hash":null,"headline":"Updated dependencies [51315ec]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [33e4f1d]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [fe4b6b4] - @fnndsc/calypso@0.19.0 - @fnndsc/menu@0.17.0 - @fnndsc/chell@5.10.0","body":"","internal":true}]},{"version":"0.4.6","date":"2026-10-03","merge":"ff157a55d5ed","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [685ed59] - @fnndsc/calypso@0.18.0 - @fnndsc/menu@0.16.0 - @fnndsc/chell@5.9.8","body":"","internal":true}]},{"version":"0.4.5","date":"2026-10-03","merge":"30fbc2abbc84","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [2826f2b]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [c1cf57e]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [51da853] - @fnndsc/menu@0.15.0 - @fnndsc/calypso@0.17.0 - @fnndsc/chell@5.9.7","body":"","internal":true}]},{"version":"0.4.4","date":"2026-10-01","merge":"0491d58506dd","bump":"patch","changes":[{"hash":"88437cc","headline":"A tab icon: the ChRIS mark on the page's own ground, for the surface and for the door.","body":"","internal":false},{"hash":null,"headline":"Updated dependencies [4864a34] - @fnndsc/menu@0.14.0 - @fnndsc/calypso@0.16.10 - @fnndsc/chell@5.9.6","body":"","internal":true}]},{"version":"0.4.3","date":"2026-10-01","merge":"5625f543f8f6","bump":"patch","changes":[{"hash":"b5bb197","headline":"The greeter settles a boot row where it stands: the outcome of a `[PENDING]` or `[RETRY]` step replaces that row instead of appending beneath it.","body":"","internal":false}]},{"version":"0.4.2","date":"2026-10-01","merge":"1b77ac182c25","bump":"patch","changes":[{"hash":"cbd71cc","headline":"A refused file read says why: the kernel names the status and reason (403 not yours to read, 404 no such file, 502 CUBE could not serve it), `/vfs` answers with them instead of 404 for everything, and an image pane that lost a slice reads the reason out.","body":"`porter --end <who>` ends one session so the next login boots on the current kernel.","internal":false},{"hash":null,"headline":"Updated dependencies [cbd71cc] - @fnndsc/calypso@0.16.9","body":"","internal":true}]},{"version":"0.4.1","date":"2026-09-27","merge":"f3d2d7ed3d72","bump":"patch","changes":[{"hash":"ef542cd","headline":"`PORTER_SOUNDS_DIR` actually answers: the mount hands the route `/sounds/press.mp3` with its leading slash, which the sound match did not allow, so every sound was proxied to the page's own.","body":"Route-level test added.","internal":false}]},{"version":"0.4.0","date":"2026-09-27","merge":"49033a576021","bump":"minor","changes":[{"hash":"c6d8161","headline":"`PORTER_SOUNDS_DIR`: a folder of sounds the porter serves in place of the page's own (`/s/<key>/sounds/<name>.mp3|wav|ogg`, bare names only), so a deployment's original LCARS beeps — never in a package — live outside the install and survive an upgrade.","body":"","internal":false}]},{"version":"0.3.5","date":"2026-09-26","merge":"a1a7cf9a2b2d","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [fbd3f0a]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [fbd3f0a] - @fnndsc/menu@0.13.0 - @fnndsc/chell@5.9.5 - @fnndsc/calypso@0.16.8","body":"","internal":true}]},{"version":"0.3.4","date":"2026-09-26","merge":"70016c84b4f0","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [f571a14]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [d1da8ac]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [0f9ae74]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [d8e160c] - @fnndsc/chell@5.9.4 - @fnndsc/menu@0.12.0 - @fnndsc/calypso@0.16.7","body":"","internal":true}]},{"version":"0.3.3","date":"2026-09-24","merge":"646a384af419","bump":"patch","changes":[{"hash":"98b839f","headline":"A session whose daemon died is no longer proxied to the dead port: a login that boots a new daemon replaces the stale entry, and a mount whose daemon does not answer follows the session to its new berth or sends the browser to the door, instead of a bare 500 ECONNREFUSED.","body":"","internal":false}]},{"version":"0.3.2","date":"2026-09-22","merge":"2356c7db39f7","bump":"patch","changes":[{"hash":"05b9b41","headline":"porter: `porter --status` marks the pid on a gone row as stale.","body":"The berth outlives a daemon killed with -9, and the bare number read as a process the listing had just made. - @fnndsc/calypso@0.16.2","internal":false}]},{"version":"0.3.1","date":"2026-09-22","merge":"c1b0be0099d8","bump":"patch","changes":[{"hash":null,"headline":"Updated dependencies [dac2d96]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [dac2d96]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [50f8a4e]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [c82f514] - @fnndsc/chell@5.9.1 - @fnndsc/menu@0.11.0 - @fnndsc/calypso@0.16.1","body":"","internal":true}]},{"version":"0.3.0","date":"2026-09-22","merge":"61536c94c899","bump":"minor","changes":[{"hash":"b58f4da","headline":"porter: published.","body":"`npm install -g @fnndsc/porter` brings the whole stack beneath it, and `PORTER_CUBE_URL=… porter` is the full login experience from one install. `@fnndsc/menu` is a declared dependency, since the greeter serves its brain and ANSI modules from where menu is installed.","internal":false},{"hash":"2b18178","headline":"porter: `porter --status` asks for nothing but the state directory.","body":"It read the full configuration first and refused without `PORTER_CUBE_URL`, a fact a listing never uses.","internal":false}]},{"version":"0.2.0","date":"2026-09-21","merge":"576426874567","bump":"minor","changes":[{"hash":"3a8cd1b","headline":"A porter at the door: the mise display manager, slice 3 — the shape without the door.","body":"`apps/porter` logs an operator into one CUBE, trades the password for a token, starts or joins that identity's calypso (`chell --daemon --auth-token-stdin`, the token on stdin, four directories of its own under the porter's state) and mounts the session at `/s/<key>/`: page, assets, `/vfs` and the WebSocket wire proxied to the daemon on loopback with the attach token added by the porter, so the browser holds none. `GET /boot/<key>` streams the session's boot as server-sent events, one per line the daemon wrote, replayed for a late attacher. `POST /sessions` re-checks the password at CUBE every time, even when the session is up.\n\ncalypso: the attach token may ride the upgrade URL (`?token=`), the way `/vfs?token=` already does, so a front that holds the token for a browser can put it on the proxied upgrade and the page attaches with an empty one; and `berth_pathIn(runtimeDir, identity)` names a berth under a runtime directory that is not the process's own.\n\nNo cookie yet: this porter binds loopback. The door — login page, cookie, LOG OUT — is the next slice.","internal":false},{"hash":"4ee180c","headline":"A session outlives its door: the porter's lifecycle.","body":"porter: a restarted porter adopts the sessions its predecessor started, from their berths under the state directory, rather than starting rivals. Idle sessions — no wire open, nothing through the door for `PORTER_IDLE_HOURS` (a day, like the cookie) — are ended by a sweep every minute: the process only; the state directory stays and the next login boots warm. `porter --status` lists the state directory's sessions and whether each answers. `deploy/` carries a systemd unit (a `porter` user, `KillMode=process` so a stopped door keeps its sessions), an env file example, and a Caddyfile for TLS in front. Boot lines kept per session are capped at 2000.\n\ncalypso: a berth records the daemon's pid, so a host that did not start a daemon can still end it.\n\nchell: a daemon off a TTY tolerates EPIPE on its stdout and stderr — the porter that started it may stop first, and a session outlives its door.","internal":false},{"hash":"21f8d21","headline":"The door itself: the porter logs a browser in and argus leaves by the door it came in.","body":"porter: `GET /login` asks for a username and a password; `POST /login` (form or JSON) trades the password for a CUBE token, starts or joins the session, sets a signed HttpOnly SameSite=Lax cookie naming it (Secure behind TLS, a day long by default) and sends the browser to `/s/<key>/?door`. The cookie gates the boot stream, the mount and the wire: a browser reaches only the session its cookie names; without it, the door (302), a refusal (401) or a dropped upgrade. `POST /logout` clears the cookie and leaves the session running. `PORTER_SECRET` signs the cookie; given none, one is made up per start and said so.\n\nargus: a LOG OUT pill beside AUDIO and the theme, in the frame's hue, standing only on a page that came through a door; pressed, it tells the door to forget this browser and goes to the door's login. The session is not touched. Law: a-surface-leaves-by-the-door-it-came-in.","internal":false},{"hash":"1c169d7","headline":"The greeter: the door answers at once, and a boot is watched rather than waited for.","body":"porter: `POST /login` no longer holds the browser for a cold boot. A session already up is entered directly; one that must boot sends the browser to `/greet/<key>`, where the mise brain wakes — the same frames a terminal boot draws, paced by the page — and the daemon's boot rows arrive beneath it as they are written, ANSI and all, from the boot stream. `ready` rests the brain and hands the browser to the session; `failed` says why and offers the door again. The login page wears the same shell with the brain at rest. The porter serves the two modules it draws with from the installed wire package (`/greeter/brain.js`, `/greeter/ansi.js`); a booting identity is pending in the registry and reaches its mount only when its berth answers.\n\nmenu: `@fnndsc/menu/ansi` — the ANSI-to-HTML converter and the console palette, moved from the ARGUS console so a browser greeter renders a boot the way the console renders a transcript; argus keeps the DOM half and re-exports the rest.","internal":false},{"hash":null,"headline":"Updated dependencies [d1a1c0d]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [3a8cd1b]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [1bdf876]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [4ee180c]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [c1178a0]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [5b520c7]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [810f3ba]","body":"","internal":true},{"hash":null,"headline":"Updated dependencies [7bba167] - @fnndsc/calypso@0.16.0 - @fnndsc/chell@5.9.0","body":"","internal":true}]}]}
package/dist/porter.d.ts CHANGED
@@ -19,6 +19,8 @@ export type PorterAsk = {
19
19
  name: string;
20
20
  } | {
21
21
  mode: 'help';
22
+ } | {
23
+ mode: 'version';
22
24
  };
23
25
  /** The usage, one line per word the entry takes. */
24
26
  export declare const PORTER_USAGE: string;
package/dist/porter.js CHANGED
@@ -15,6 +15,7 @@ import { ProcessHost } from './host/processHost.js';
15
15
  import { porterApp_build } from './app.js';
16
16
  import { berthKey_compute } from '@fnndsc/calypso/berth';
17
17
  import { entry_isMain } from './entry.js';
18
+ import { versionReport_build } from './versions.js';
18
19
  /**
19
20
  * Lists the sessions the state directory holds, without starting anything.
20
21
  *
@@ -156,6 +157,7 @@ export const PORTER_USAGE = [
156
157
  'porter --tokens the door tokens the store holds: user, name, minted, dies, last used',
157
158
  'porter --revoke <user> [<name>] revoke one door token by name, or every one of the user\'s',
158
159
  'porter --mint <user> --name <name> mint a door token by hand (PORTER_CUBE_URL names the CUBE); shown once',
160
+ 'porter --version the door\'s version and the session code it serves (-V)',
159
161
  'porter --help this',
160
162
  ].join('\n');
161
163
  /**
@@ -172,6 +174,9 @@ export function porterArgs_parse(argv) {
172
174
  const [word, ...rest] = argv;
173
175
  if (word === '--help' || word === '-h')
174
176
  return { mode: 'help' };
177
+ if (word === '--version' || word === '-V') {
178
+ return rest.length === 0 ? { mode: 'version' } : { refusal: `${word} takes no argument ('${rest[0] ?? ''}')` };
179
+ }
175
180
  if (word === '--status' || word === '--sessions') {
176
181
  return rest.length === 0 ? { mode: 'status' } : { refusal: `${word} takes no argument ('${rest[0] ?? ''}')` };
177
182
  }
@@ -217,6 +222,10 @@ async function porter_start() {
217
222
  console.log(PORTER_USAGE);
218
223
  return;
219
224
  }
225
+ if (ask.mode === 'version') {
226
+ console.log(versionReport_build());
227
+ return;
228
+ }
220
229
  if (ask.mode === 'status') {
221
230
  await status_print(porterStateDir_resolve(process.env));
222
231
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"porter.js","sourceRoot":"","sources":["../src/porter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"porter.js","sourceRoot":"","sources":["../src/porter.ts"],"names":[],"mappings":"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"}
@@ -19,3 +19,16 @@ export declare function installed_read(): Record<string, string>;
19
19
  * @returns The packages that differ (`brasa 0.31.5 → 0.33.0`), empty when the daemon is current.
20
20
  */
21
21
  export declare function berth_behind(berth: Berth, installed: Record<string, string>): string[];
22
+ /**
23
+ * What `porter --version` says: the door's own version, then the session
24
+ * code it serves (brasa, calypso, chell) — the code a login would put a
25
+ * daemon on, and so whether a session older than it restarts. One aligned
26
+ * `name version` line each, as `chell --version` prints its stack.
27
+ *
28
+ * @param installed - What the door ships, from {@link installed_read}.
29
+ * @param own - The door's version; read from its package by default.
30
+ * @returns The report.
31
+ */
32
+ export declare function versionReport_build(installed?: Record<string, string>, own?: string): string;
33
+ /** The door's own version, from its package.json (one level above dist/ and src/). */
34
+ export declare function porterVersion_read(): string;
package/dist/versions.js CHANGED
@@ -58,4 +58,29 @@ export function berth_behind(berth, installed) {
58
58
  }
59
59
  return behind;
60
60
  }
61
+ /**
62
+ * What `porter --version` says: the door's own version, then the session
63
+ * code it serves (brasa, calypso, chell) — the code a login would put a
64
+ * daemon on, and so whether a session older than it restarts. One aligned
65
+ * `name version` line each, as `chell --version` prints its stack.
66
+ *
67
+ * @param installed - What the door ships, from {@link installed_read}.
68
+ * @param own - The door's version; read from its package by default.
69
+ * @returns The report.
70
+ */
71
+ export function versionReport_build(installed = installed_read(), own = porterVersion_read()) {
72
+ const rows = [['porter', own], ...Object.entries(installed)];
73
+ const width = Math.max(...rows.map(([name]) => name.length));
74
+ return rows.map(([name, version]) => `${name.padEnd(width)} ${version}`).join('\n');
75
+ }
76
+ /** The door's own version, from its package.json (one level above dist/ and src/). */
77
+ export function porterVersion_read() {
78
+ try {
79
+ const manifest = createRequire(import.meta.url)('../package.json');
80
+ return typeof manifest.version === 'string' ? manifest.version : 'unknown';
81
+ }
82
+ catch {
83
+ return 'unknown';
84
+ }
85
+ }
61
86
  //# sourceMappingURL=versions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAA0B,CAAC,eAAe,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;AAE1G;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,eAAe,CAA0B,CAAC;YACtE,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QACvG,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,SAAiC;IAC1E,sEAAsE;IACtE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,CAAC,4DAA4D,CAAC,CAAC;IACxG,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAuB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,MAAM,OAAO,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,8EAA8E;AAC9E,MAAM,CAAC,MAAM,aAAa,GAA0B,CAAC,eAAe,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;AAE1G;;;;GAIG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,IAAI,eAAe,CAA0B,CAAC;YACtE,IAAI,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ;gBAAE,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;QACvG,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,SAAiC;IAC1E,sEAAsE;IACtE,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,CAAC,4DAA4D,CAAC,CAAC;IACxG,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACxD,MAAM,OAAO,GAAuB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,OAAO,MAAM,OAAO,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoC,cAAc,EAAE,EAAE,MAAc,kBAAkB,EAAE;IAC1H,MAAM,IAAI,GAA4B,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IACtF,MAAM,KAAK,GAAW,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAmB,EAAU,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/F,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAmB,EAAU,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,iBAAiB,CAA0B,CAAC;QAC5F,OAAO,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fnndsc/porter",
3
- "version": "0.6.3",
3
+ "version": "0.6.4",
4
4
  "description": "PORTER: the mise display manager — logs an operator in, finds or starts their calypso, and shows them to argus",
5
5
  "type": "module",
6
6
  "main": "dist/porter.js",
@@ -18,7 +18,7 @@
18
18
  "@fastify/cookie": "^11.1.2",
19
19
  "@fastify/formbody": "^9.0.0",
20
20
  "@fastify/reply-from": "^12.6.5",
21
- "@fnndsc/calypso": "^0.19.7",
21
+ "@fnndsc/calypso": "^0.19.8",
22
22
  "@fnndsc/cumin": "^3.27.7",
23
23
  "@fnndsc/chell": "^5.11.2",
24
24
  "@fnndsc/menu": "^0.19.0",