@emptyos/client 0.1.0
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 +264 -0
- package/bin/empty.js +4 -0
- package/lib/browser.js +23 -0
- package/lib/catalog-output.js +73 -0
- package/lib/cli.js +985 -0
- package/lib/commands.js +272 -0
- package/lib/config.js +189 -0
- package/lib/constants.js +13 -0
- package/lib/errors.js +16 -0
- package/lib/git.js +28 -0
- package/lib/koans.js +26 -0
- package/lib/manifest.js +117 -0
- package/lib/pairing.js +466 -0
- package/lib/platform-update.js +304 -0
- package/lib/process.js +97 -0
- package/lib/rpc.js +161 -0
- package/lib/skill-install.js +65 -0
- package/lib/thing-put.js +406 -0
- package/lib/tunnel-proxy.js +119 -0
- package/package.json +29 -0
- package/skills/emptyos-computer/SKILL.md +233 -0
- package/skills/emptyos-computer/agents/openai.yaml +4 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: emptyos-computer
|
|
3
|
+
description: Work with a personal EmptyOS computer through the external `empty` CLI. Use when an agent needs to connect to or inspect a computer; work with Things, Projects, Data, changes, sharing, or hooks; publish verified software; or enter the computer for resident-only work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# EmptyOS Computer
|
|
7
|
+
|
|
8
|
+
Run every `empty` command from the local terminal. The client decides whether
|
|
9
|
+
the operation is local, transported over SSH, or a local/remote Git workflow.
|
|
10
|
+
Use the live help as the command reference:
|
|
11
|
+
|
|
12
|
+
```sh
|
|
13
|
+
empty --help
|
|
14
|
+
empty thing --help
|
|
15
|
+
empty <command> --help
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Use `--json` for stable results and error codes rather than parsing human text.
|
|
19
|
+
|
|
20
|
+
This skill ships inside the `@emptyos/client` npm package; `empty skill
|
|
21
|
+
install [--dir <path>]` copies it into a skills directory. For anything beyond
|
|
22
|
+
this bootstrap, read https://emptyos.com/docs/.
|
|
23
|
+
|
|
24
|
+
## Start and select a computer
|
|
25
|
+
|
|
26
|
+
Inspect the selected profile and available profiles first:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
empty computer show --json
|
|
30
|
+
empty computers --json
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
If no computer profile exists and the user supplies an EmptyOS computer URL,
|
|
34
|
+
connect through EmptyOS rather than asking for an exe.dev account or provider
|
|
35
|
+
SSH access:
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
empty connect https://<computer-host>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Show the user the printed short code, SSH-key fingerprint, and approval URL.
|
|
42
|
+
Wait for them to authenticate with EmptyOS, compare both values, and approve
|
|
43
|
+
the request. `connect` derives the local alias from the hostname; `--as
|
|
44
|
+
<alias>` chooses the local shorthand used with `--computer`. `--label <label>`
|
|
45
|
+
sets this connecting client's persistent display label on the approval and
|
|
46
|
+
approved-agent screens and defaults to this machine's hostname. The command
|
|
47
|
+
selects the first profile automatically but preserves an existing default, so
|
|
48
|
+
use `empty computer use <alias>` when the newly connected computer should
|
|
49
|
+
replace that default.
|
|
50
|
+
|
|
51
|
+
Use `empty --computer <alias> ...` to target a non-default profile. Use
|
|
52
|
+
`empty computer add` only when the user intentionally supplies an existing SSH
|
|
53
|
+
target; use `empty connect` for an EmptyOS computer URL. Profile removal is
|
|
54
|
+
local client state; inspect `empty computer remove --help` before using it.
|
|
55
|
+
|
|
56
|
+
## Discover the computer
|
|
57
|
+
|
|
58
|
+
Start broad, then inspect the relevant object:
|
|
59
|
+
|
|
60
|
+
```sh
|
|
61
|
+
empty --json
|
|
62
|
+
empty status --json
|
|
63
|
+
empty things --json
|
|
64
|
+
empty projects --json
|
|
65
|
+
empty data --json
|
|
66
|
+
empty changes --json
|
|
67
|
+
empty commands --json
|
|
68
|
+
empty hooks --json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`empty --json` is the compact whole-computer overview. `empty status --json`
|
|
72
|
+
reports health. For focused inspection, use `empty thing describe <id> --json`,
|
|
73
|
+
`empty thing logs <id> --json`, and `empty data describe <id> --json`.
|
|
74
|
+
`empty commands --json` merges built-in commands with owner-authored commands
|
|
75
|
+
installed on the selected computer.
|
|
76
|
+
|
|
77
|
+
## Work with Things
|
|
78
|
+
|
|
79
|
+
### Put a new Thing
|
|
80
|
+
|
|
81
|
+
Put workstation content on the selected computer:
|
|
82
|
+
|
|
83
|
+
```sh
|
|
84
|
+
empty put <local-path> [--as <id>] [--name <display-name>] [--project <project-id>]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`put` accepts regular files, HTML pages, ready static directories, and clean
|
|
88
|
+
manifested Thing repositories. For ordinary files and static sites, it
|
|
89
|
+
generates the manifest and `./verify`; that check prevents import or later
|
|
90
|
+
publication when the expected served file or build output is missing. Every
|
|
91
|
+
manifested Thing, static or service, must provide a tracked executable
|
|
92
|
+
`./verify` and may provide a tracked executable `./prepare`. Services require a
|
|
93
|
+
manifest and are registered stopped. `--project` requires an existing Project
|
|
94
|
+
and records membership in the initial commit.
|
|
95
|
+
|
|
96
|
+
Treat a selected directory as the deployment boundary: inspect every file and
|
|
97
|
+
prefer ready build output over a source repository root. EmptyOS does not scan
|
|
98
|
+
for secrets. For a manifested import, the computer runs `./prepare` when
|
|
99
|
+
present as trusted, unsandboxed owner code that may use the network, then runs
|
|
100
|
+
`./verify` offline.
|
|
101
|
+
|
|
102
|
+
### Clone and publish an existing Thing
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
empty clone <id>
|
|
106
|
+
cd <id>
|
|
107
|
+
# inspect, edit, run ./verify, and commit exactly one change
|
|
108
|
+
empty put . --json
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Treat the clone's Git-local EmptyOS binding as authoritative. Do not copy a
|
|
112
|
+
checkout between computers, change its `emptyos.*` Git keys, push directly to
|
|
113
|
+
the live branch, or bypass a stale-publish rejection. Fetch and rebase or
|
|
114
|
+
squash onto the computer's current head, then publish again. Publication
|
|
115
|
+
requires a clean checkout and exactly one verified, non-merge commit above the
|
|
116
|
+
current computer head.
|
|
117
|
+
|
|
118
|
+
### Inspect and control Things
|
|
119
|
+
|
|
120
|
+
Use `empty thing describe <id> --json` before changing a Thing and
|
|
121
|
+
`empty thing logs <id> --json` for bounded service logs. Control services through
|
|
122
|
+
`empty thing start|stop|restart <id>` rather than raw process commands. Use
|
|
123
|
+
`empty thing assign` and `empty thing unassign` for Project membership.
|
|
124
|
+
|
|
125
|
+
`empty thing remove <id>` removes a service registration; it does not delete
|
|
126
|
+
the Thing directory or associated Data. Do not treat it as content deletion.
|
|
127
|
+
|
|
128
|
+
### Expose and unexpose Things
|
|
129
|
+
|
|
130
|
+
Anonymous sharing is static-only. Before `empty expose <id>` or
|
|
131
|
+
`empty put ... --public`, inspect every file in the declared document
|
|
132
|
+
directory. Static sites and declared single files are eligible only when that
|
|
133
|
+
directory is below the repository root; services and repository-root static
|
|
134
|
+
Things are refused. Do not bypass a refusal by editing `visibility`.
|
|
135
|
+
|
|
136
|
+
Use `empty unexpose <id>` as the immediate fail-safe to revoke anonymous
|
|
137
|
+
access, including when the Thing has become invalid or otherwise ineligible.
|
|
138
|
+
|
|
139
|
+
## Work with Projects
|
|
140
|
+
|
|
141
|
+
Use `empty projects --json` to list Projects and
|
|
142
|
+
`empty project create <id> <name...>` to create one. Use
|
|
143
|
+
`empty thing assign|unassign` to change a Thing's membership.
|
|
144
|
+
`empty put --project <id>` requires the Project to exist.
|
|
145
|
+
|
|
146
|
+
Projects organize Things but do not change their routes, visibility, service
|
|
147
|
+
identity, lifecycle, or Data associations.
|
|
148
|
+
|
|
149
|
+
## Work with Data
|
|
150
|
+
|
|
151
|
+
Use `empty data --json` to list registered Datasets and
|
|
152
|
+
`empty data describe <id> --json` to inspect one. Use the live command
|
|
153
|
+
inventory for supported Data operations rather than inventing commands or
|
|
154
|
+
manifest fields.
|
|
155
|
+
|
|
156
|
+
Never copy SQLite files between the workstation and computer. Keep canonical
|
|
157
|
+
Data on the computer and change it only through a running Thing or an explicit
|
|
158
|
+
supported computer command. Data stays outside Thing Git history, publication,
|
|
159
|
+
and Undo.
|
|
160
|
+
|
|
161
|
+
## Review changes and extend the computer
|
|
162
|
+
|
|
163
|
+
### Status, history, and Undo
|
|
164
|
+
|
|
165
|
+
Use `empty status --json` for computer health and `empty changes --json` for
|
|
166
|
+
committed change records. Before `empty undo <change-id> --json`, inspect the
|
|
167
|
+
exact change and confirm its target worktree is clean. Undo creates a new Git
|
|
168
|
+
revert commit for one target and never changes Data.
|
|
169
|
+
|
|
170
|
+
Supported mutations share the computer's mutation lock. If a command returns
|
|
171
|
+
`computer-busy`, retry later instead of bypassing the lock through raw SSH or
|
|
172
|
+
filesystem edits.
|
|
173
|
+
|
|
174
|
+
### Commands and hooks
|
|
175
|
+
|
|
176
|
+
Treat `empty commands --json` as the authoritative inventory of built-in and
|
|
177
|
+
owner-authored commands. Treat `empty hooks --json` as the inventory of
|
|
178
|
+
supported lifecycle events and installed hooks.
|
|
179
|
+
|
|
180
|
+
`empty hook install <event> <path>` installs owner code from a path on the
|
|
181
|
+
computer into the tracked platform hook directory and commits it. Inspect the
|
|
182
|
+
source first. Use `empty ssh` when preparing that computer-side path; do not
|
|
183
|
+
teach `put` or `clone` to install platform extensions implicitly.
|
|
184
|
+
|
|
185
|
+
## Enter the computer
|
|
186
|
+
|
|
187
|
+
Prefer transported `empty` commands when they cover the operation. Use
|
|
188
|
+
`empty ssh` only for work that genuinely needs the resident environment;
|
|
189
|
+
arguments after `--` have ordinary remote-shell semantics. Once there, read
|
|
190
|
+
`~/EMPTY.md`. The installed computer contract, not this bootstrap, defines
|
|
191
|
+
resident paths and capabilities.
|
|
192
|
+
|
|
193
|
+
## Platform updates
|
|
194
|
+
|
|
195
|
+
If a command reports that the selected computer lacks a required capability,
|
|
196
|
+
inspect the platform update before retrying:
|
|
197
|
+
|
|
198
|
+
```sh
|
|
199
|
+
empty computer update --check --json
|
|
200
|
+
empty computer update
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
The second command uses the selected profile's configured HTTPS release
|
|
204
|
+
catalog when present, otherwise the official EmptyOS release catalog. Use
|
|
205
|
+
`--catalog` only for an operator-selected catalog override, or `--release` for
|
|
206
|
+
an immutable local artifact obtained through a trusted channel. Use
|
|
207
|
+
`empty --computer <alias> computer update ...` for a non-default profile.
|
|
208
|
+
|
|
209
|
+
If the owner reports that Home shows `An EmptyOS update needs your changes
|
|
210
|
+
reconciled`, a signed operator update found overlapping resident changes and
|
|
211
|
+
stopped before changing the installed platform. Inspect the exact official
|
|
212
|
+
release first:
|
|
213
|
+
|
|
214
|
+
```sh
|
|
215
|
+
empty computer update --check --catalog https://release.emptyos.com/platform/v1/catalog.json --json
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
Apply only after the owner approves the inspected update. The Home advisory is
|
|
219
|
+
local state, not a resident catalog poll. It remains until the resident update
|
|
220
|
+
succeeds; a read-only check alone does not clear it.
|
|
221
|
+
|
|
222
|
+
If apply returns `needs-reconciliation`, continue the retained transaction
|
|
223
|
+
rather than starting another update. Read `retainedStage`, `conflicts`, and
|
|
224
|
+
`nextCommand` from the JSON result. Enter the computer with `empty ssh`, read
|
|
225
|
+
the stage's `RECONCILE.md`, and inspect the baseline, local, and incoming
|
|
226
|
+
versions of every listed conflict. Edit only the detached `candidate` paths
|
|
227
|
+
named by that contract; preserve the user's intent, do not edit `~/emptyos`,
|
|
228
|
+
and do not commit or rebase the candidate. Run its complete test suite, then
|
|
229
|
+
execute the exact `empty computer update --resume <stage-name>` command from
|
|
230
|
+
the result. Resume rejects stale live state, edits outside the declared
|
|
231
|
+
conflicts, changed deterministic paths, and validator failures. If a human
|
|
232
|
+
encounters this state outside an agent session, tell them to continue the
|
|
233
|
+
retained update from an agent instead of attempting a blind overwrite.
|