terminay 4.2.1 → 4.2.2
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/LICENSE +21 -0
- package/README.md +128 -0
- package/package.json +2 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Mark Wylde
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Terminay CLI
|
|
2
|
+
|
|
3
|
+
The command-line interface to [Terminay](https://terminay.com), a local-first
|
|
4
|
+
terminal workspace for software projects.
|
|
5
|
+
|
|
6
|
+
Today it installs and controls **Terminay Server** on a Linux host, under the
|
|
7
|
+
`daemon` command group. One command takes a clean machine to a running,
|
|
8
|
+
pairable server:
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
sudo npx terminay daemon install
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Then pair a device with it:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
sudo npx terminay daemon qr-code
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
That shows a scannable code, waits for the device that scans it, and asks you
|
|
21
|
+
to approve it after comparing the match code shown on both sides.
|
|
22
|
+
|
|
23
|
+
## Requirements
|
|
24
|
+
|
|
25
|
+
64-bit GNU/Linux on x64 or arm64, with systemd, and a Debian 12-compatible
|
|
26
|
+
userspace (glibc 2.36 or newer). The CLI refuses to run `daemon` commands
|
|
27
|
+
anywhere else, naming the requirement rather than failing part-way through.
|
|
28
|
+
|
|
29
|
+
The CLI itself needs Node 20 or newer. The server does not need Node at all:
|
|
30
|
+
each release archive carries its own pinned Node runtime, the native PTY addon,
|
|
31
|
+
and the workspace UI it serves, so the target needs neither Node nor a compiler
|
|
32
|
+
to run the server.
|
|
33
|
+
|
|
34
|
+
## Commands
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
terminay daemon install [ref] Resolve, verify, install, start
|
|
38
|
+
terminay daemon upgrade [ref] Follow the installed channel
|
|
39
|
+
terminay daemon uninstall Remove the service; keep the data root
|
|
40
|
+
terminay daemon start | stop
|
|
41
|
+
terminay daemon status Unit state, version, channel, exposure
|
|
42
|
+
terminay daemon qr-code Pairing code and approval, in one terminal
|
|
43
|
+
terminay daemon approvals List devices waiting for approval
|
|
44
|
+
terminay daemon approve <id>
|
|
45
|
+
terminay daemon deny <id>
|
|
46
|
+
terminay daemon reset-identity Rotate the host key; revoke every device
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
`terminay daemon pairing-url` is an alias for `qr-code`. Run `terminay --help`
|
|
50
|
+
for the full flag list.
|
|
51
|
+
|
|
52
|
+
## Choosing what to install
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
sudo npx terminay daemon install # the newest tagged release
|
|
56
|
+
sudo npx terminay daemon install v4.2.1 # a specific release
|
|
57
|
+
sudo npx terminay daemon install main # the rolling main channel
|
|
58
|
+
sudo npx terminay daemon install my-branch # built from source on the target
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
A branch or commit has no published archive, so the CLI builds one on the
|
|
62
|
+
machine. It checks for `git`, `python3`, `make`, and a C++ compiler before
|
|
63
|
+
downloading anything.
|
|
64
|
+
|
|
65
|
+
`upgrade` with no reference re-resolves whatever channel the machine is already
|
|
66
|
+
on, so a host tracking `main` never silently moves onto the tag stream.
|
|
67
|
+
|
|
68
|
+
## Verification
|
|
69
|
+
|
|
70
|
+
Every downloaded archive is checked against its published SHA-256 and then
|
|
71
|
+
against its Ed25519 signature, using a public key committed to this package's
|
|
72
|
+
source. There is no flag and no environment variable that skips it: the
|
|
73
|
+
boundary crossed is "release pipeline → your machine", and that key is the only
|
|
74
|
+
thing that makes the download trustworthy.
|
|
75
|
+
|
|
76
|
+
This package is published from CI with
|
|
77
|
+
[npm provenance](https://docs.npmjs.com/generating-provenance-statements), so
|
|
78
|
+
you can verify which commit and workflow built the version you installed.
|
|
79
|
+
|
|
80
|
+
## Install scope and the run-as account
|
|
81
|
+
|
|
82
|
+
With a terminal attached, `install` asks two questions.
|
|
83
|
+
|
|
84
|
+
The first is whether to install a system-wide service or one owned by your
|
|
85
|
+
login. The second is which account the server and its terminals run as — **that
|
|
86
|
+
choice decides whose files, keys, and agents a paired device can reach**. A
|
|
87
|
+
dedicated `terminay` system account is the default.
|
|
88
|
+
|
|
89
|
+
Answer both up front with `--system` or `--user` and `--run-as <user>`, which is
|
|
90
|
+
also required when there is no terminal to ask on.
|
|
91
|
+
|
|
92
|
+
## Reaching the server
|
|
93
|
+
|
|
94
|
+
Exposure defaults to `hosted,direct`, and the direct origin is derived from the
|
|
95
|
+
machine's primary address. That is right for a host with a routable address and
|
|
96
|
+
wrong for one behind NAT or with a DNS name, so the derived value is printed at
|
|
97
|
+
install and can be overridden:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
sudo npx terminay daemon install --direct-origin https://box.example.com:8443
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
`--expose off|hosted|direct|hosted,direct` and `--port` control the rest.
|
|
104
|
+
|
|
105
|
+
## Where things live
|
|
106
|
+
|
|
107
|
+
| | System scope | User scope |
|
|
108
|
+
| --- | --- | --- |
|
|
109
|
+
| Versions | `/opt/terminay/versions/<version>` | `~/.local/share/terminay/versions/<version>` |
|
|
110
|
+
| Active version | `/opt/terminay/current` | `~/.local/share/terminay/current` |
|
|
111
|
+
| Configuration | `/etc/terminay/server.env` | `~/.config/terminay/server.env` |
|
|
112
|
+
| Data root | `/var/lib/terminay` | `~/.local/share/terminay/data` |
|
|
113
|
+
|
|
114
|
+
Installed versions are immutable once verified. `current` is a symlink replaced
|
|
115
|
+
atomically, so an upgrade that does not come up healthy puts the previous
|
|
116
|
+
version back. `uninstall` keeps the data root — which holds the host key and
|
|
117
|
+
your paired device records — unless you pass `--purge`.
|
|
118
|
+
|
|
119
|
+
## Links
|
|
120
|
+
|
|
121
|
+
- [Installation guide](https://terminay.com/docs/installation)
|
|
122
|
+
- [Standalone server runbook](https://github.com/markwylde/terminay/blob/main/docs/operations/standalone-server.md)
|
|
123
|
+
- [Release, install, and update policy](https://github.com/markwylde/terminay/blob/main/docs/operations/release-update-policy.md)
|
|
124
|
+
- [Source and issues](https://github.com/markwylde/terminay)
|
|
125
|
+
|
|
126
|
+
## License
|
|
127
|
+
|
|
128
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "terminay",
|
|
3
|
-
"version": "4.2.
|
|
3
|
+
"version": "4.2.2",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "Installs and controls a headless Terminay Server on Linux.",
|
|
5
|
+
"description": "The Terminay command-line interface. Installs and controls a headless Terminay Server on Linux.",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|