@nervur-org/dock 0.3.1 → 0.4.1
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/GETTING_STARTED.md +23 -13
- package/{beings/GLOSSARY.md → GLOSSARY.md} +3 -3
- package/NOTICE +1 -1
- package/README.md +20 -16
- package/{beings/WORLDS.md → WORLDS.md} +6 -4
- package/api/route.ts +3 -3
- package/beings/avatar.ts +2 -2
- package/beings/carry.ts +2 -2
- package/beings/clock.ts +2 -2
- package/beings/courier.ts +2 -2
- package/beings/desk.ts +2 -2
- package/beings/doorbell.ts +2 -2
- package/beings/envoy.ts +2 -2
- package/beings/join.ts +2 -2
- package/beings/link.ts +5 -5
- package/beings/look.ts +1 -1
- package/beings/porter.ts +2 -2
- package/beings/presence.ts +1 -1
- package/beings/setup.ts +3 -3
- package/beings/side.ts +2 -2
- package/beings/user.ts +2 -2
- package/beings/way.ts +1 -1
- package/cli/client.ts +6 -6
- package/cli/daemon.ts +7 -7
- package/cli/estate/{quo.service → nervur.service} +12 -12
- package/cli/estate/org.nervur.plist +44 -0
- package/cli/estate.ts +6 -6
- package/cli/{quo.ts → nervur.ts} +43 -37
- package/cli/pilot.ts +3 -3
- package/cli/stand.ts +3 -3
- package/dist/api/route.d.ts +2 -2
- package/dist/api/route.js +2 -2
- package/dist/beings/avatar.d.ts +1 -1
- package/dist/beings/avatar.js +1 -1
- package/dist/beings/carry.d.ts +2 -2
- package/dist/beings/carry.js +1 -1
- package/dist/beings/clock.d.ts +2 -2
- package/dist/beings/clock.js +1 -1
- package/dist/beings/courier.d.ts +2 -2
- package/dist/beings/courier.js +1 -1
- package/dist/beings/desk.d.ts +3 -3
- package/dist/beings/desk.js +1 -1
- package/dist/beings/doorbell.d.ts +3 -3
- package/dist/beings/doorbell.js +1 -1
- package/dist/beings/envoy.d.ts +2 -2
- package/dist/beings/envoy.js +1 -1
- package/dist/beings/join.d.ts +2 -2
- package/dist/beings/link.d.ts +2 -2
- package/dist/beings/link.js +3 -3
- package/dist/beings/look.d.ts +1 -1
- package/dist/beings/porter.d.ts +2 -2
- package/dist/beings/porter.js +1 -1
- package/dist/beings/presence.d.ts +1 -1
- package/dist/beings/setup.d.ts +1 -1
- package/dist/beings/side.d.ts +1 -1
- package/dist/beings/side.js +1 -1
- package/dist/beings/user.d.ts +3 -3
- package/dist/beings/user.js +1 -1
- package/dist/beings/way.d.ts +1 -1
- package/dist/cli/client.js +4 -4
- package/dist/cli/daemon.d.ts +1 -1
- package/dist/cli/daemon.js +6 -6
- package/dist/cli/estate/{quo.service → nervur.service} +12 -12
- package/dist/cli/estate/org.nervur.plist +44 -0
- package/dist/cli/estate.js +6 -6
- package/dist/cli/{quo.js → nervur.js} +43 -37
- package/dist/cli/stand.d.ts +2 -2
- package/dist/dock/agents.d.ts +1 -1
- package/dist/dock/agents.js +1 -1
- package/dist/dock/apns.js +1 -1
- package/dist/dock/console.d.ts +1 -1
- package/dist/dock/dialers.d.ts +2 -2
- package/dist/dock/dialers.js +2 -2
- package/dist/dock/faculty.d.ts +2 -2
- package/dist/dock/faculty.js +1 -1
- package/dist/dock/grants.d.ts +1 -1
- package/dist/dock/grants.js +1 -1
- package/dist/dock/http2.js +1 -1
- package/dist/dock/index.d.ts +1 -1
- package/dist/dock/index.js +1 -1
- package/dist/dock/local.d.ts +2 -2
- package/dist/dock/location.d.ts +1 -1
- package/dist/dock/notifications.d.ts +1 -1
- package/dist/dock/notifications.js +1 -1
- package/dist/dock/push.d.ts +1 -1
- package/dist/dock/push.js +3 -3
- package/dist/dock/service.js +1 -1
- package/dist/dock/timer.d.ts +1 -1
- package/dist/harbor/browser.d.ts +2 -2
- package/dist/harbor/browser.js +4 -4
- package/dist/harbor/capacitor.d.ts +1 -1
- package/dist/harbor/capacitor.js +1 -1
- package/dist/harbor/disk.d.ts +4 -4
- package/dist/harbor/disk.js +5 -5
- package/dist/harbor/edge/edge.d.ts +2 -2
- package/dist/harbor/edge/edge.js +5 -5
- package/dist/harbor/edge/exercise.js +8 -8
- package/dist/harbor/edge/given.d.ts +1 -1
- package/dist/harbor/edge/platform.d.ts +1 -1
- package/dist/harbor/edge/storage.d.ts +1 -1
- package/dist/harbor/edge/storage.js +2 -2
- package/dist/harbor/edge/worker.js +2 -2
- package/dist/harbor/files.d.ts +1 -1
- package/dist/harbor/files.js +2 -2
- package/dist/harbor/http.d.ts +2 -2
- package/dist/harbor/http.js +1 -1
- package/dist/harbor/idb.d.ts +1 -1
- package/dist/harbor/idb.js +0 -0
- package/dist/harbor/quo.js +1 -1
- package/dist/harbor/seal.js +1 -1
- package/dist/harbor/sealed.d.ts +1 -1
- package/dist/harbor/sealed.js +4 -4
- package/dist/harbor/tauri.d.ts +1 -1
- package/dist/harbor/tauri.js +1 -1
- package/dist/harbor/ward.d.ts +1 -1
- package/dist/human/app.d.ts +2 -2
- package/dist/human/door.js +4 -4
- package/dist/human/guest.js +1 -1
- package/dist/human/html.d.ts +1 -1
- package/dist/human/html.js +1 -1
- package/dist/human/local.d.ts +1 -1
- package/dist/human/mark.js +2 -2
- package/dist/human/move.d.ts +2 -2
- package/dist/human/move.js +1 -1
- package/dist/human/screen.d.ts +1 -1
- package/dist/human/screen.js +3 -3
- package/dist/human/tab.bundle.txt +32 -32
- package/dist/human/tab.js +7 -7
- package/dist/human/tree.d.ts +1 -1
- package/dist/human/wake.d.ts +2 -2
- package/dist/human/wake.js +1 -1
- package/dist/human/web.d.ts +1 -1
- package/dist/human/web.js +4 -4
- package/dist/human/worker.bundle.txt +27 -27
- package/dist/human/worker.js +4 -4
- package/dist/human/worlds.d.ts +2 -2
- package/dist/human/worlds.js +4 -4
- package/dist/mcp/agent.d.ts +1 -1
- package/dist/mcp/allow.d.ts +1 -1
- package/dist/mcp/allow.js +2 -2
- package/dist/mcp/oauth.js +1 -1
- package/dist/mcp/runner.d.ts +1 -1
- package/dist/mcp/server.d.ts +2 -2
- package/dist/mcp/server.js +2 -2
- package/dock/agents.ts +2 -2
- package/dock/apns.ts +1 -1
- package/dock/console.ts +1 -1
- package/dock/dialers.ts +3 -3
- package/dock/faculty.ts +2 -2
- package/dock/grants.ts +2 -2
- package/dock/http2.ts +1 -1
- package/dock/index.ts +3 -3
- package/dock/local.ts +1 -1
- package/dock/location.ts +1 -1
- package/dock/notifications.ts +2 -2
- package/dock/push.ts +4 -4
- package/dock/service.ts +1 -1
- package/dock/timer.ts +1 -1
- package/harbor/browser.ts +5 -5
- package/harbor/capacitor.ts +2 -2
- package/harbor/disk.ts +8 -8
- package/harbor/edge/edge.ts +7 -7
- package/harbor/edge/exercise.ts +11 -11
- package/harbor/edge/given.ts +1 -1
- package/harbor/edge/platform.d.ts +1 -1
- package/harbor/edge/storage.ts +2 -2
- package/harbor/edge/worker.ts +2 -2
- package/harbor/edge/wrangler.toml +3 -3
- package/harbor/files.ts +2 -2
- package/harbor/http.ts +2 -2
- package/harbor/idb.ts +0 -0
- package/harbor/quo.ts +1 -1
- package/harbor/resolve.ts +1 -1
- package/harbor/seal.ts +1 -1
- package/harbor/sealed.ts +5 -5
- package/harbor/tauri.ts +2 -2
- package/harbor/ward.ts +1 -1
- package/human/app.ts +2 -2
- package/human/apps.ts +1 -1
- package/human/door.ts +4 -4
- package/human/guest.ts +2 -2
- package/human/html.ts +2 -2
- package/human/local.ts +1 -1
- package/human/mark.ts +2 -2
- package/human/move.ts +3 -3
- package/human/screen.ts +5 -5
- package/human/tab.bundle.txt +32 -32
- package/human/tab.ts +10 -10
- package/human/tree.ts +1 -1
- package/human/wake.ts +3 -3
- package/human/web.ts +5 -5
- package/human/worker.bundle.txt +27 -27
- package/human/worker.ts +6 -6
- package/human/worlds.ts +5 -5
- package/mcp/agent.ts +1 -1
- package/mcp/allow.ts +5 -5
- package/mcp/oauth.ts +1 -1
- package/mcp/runner.ts +1 -1
- package/mcp/server.ts +3 -3
- package/package.json +15 -7
- package/{api/quo-api.md → quo-api.md} +1 -1
- package/{beings/quo-dock.md → quo-dock.md} +75 -72
- package/{harbor/quo-harbor.md → quo-harbor.md} +54 -30
- package/{human/quo-human.md → quo-human.md} +7 -7
- package/{mcp/quo-mcp.md → quo-mcp.md} +10 -10
- package/cli/estate/systems.quo.plist +0 -44
- package/cli/quo-dock.md +0 -1942
- package/dist/cli/estate/systems.quo.plist +0 -44
- package/dock/quo-app-bells.md +0 -280
- package/dock/quo-dock.md +0 -1942
- /package/dist/cli/{quo.d.ts → nervur.d.ts} +0 -0
- /package/{beings/quo-app-bells.md → quo-app-bells.md} +0 -0
|
@@ -131,7 +131,7 @@ running there, from her cells, and painted by the same painter.
|
|
|
131
131
|
on every device and no class carries a layout. A kind an estate wants and
|
|
132
132
|
the grammar lacks is asked for here, and never written around.
|
|
133
133
|
- **The painter emits the kit and nothing else.** Every node paints as a
|
|
134
|
-
piece of `papers/
|
|
134
|
+
piece of `papers/nervur-ui.md`'s catalogue, a `stack` as `.nv-stack`, a
|
|
135
135
|
`list` as `.nv-list` of `.nv-item`, a `person` as `.nv-person` with an
|
|
136
136
|
`.nv-avatar`, a title as `.nv-t-title`, a form as the kit's fieldset and
|
|
137
137
|
fields and one `.nv-button`, an answer as `.nv-answer` with the word it
|
|
@@ -326,7 +326,7 @@ Read with the trunk's "Carrying" and "The look", which this applies.
|
|
|
326
326
|
- **Worlds have addresses, and so do the beings one holds.** `web./<ward>`
|
|
327
327
|
is that world's page, `web./` lists the worlds shown, and a hostname per
|
|
328
328
|
world is one proxy line, the estate's choice. Shown is the ward's own
|
|
329
|
-
mark, `
|
|
329
|
+
mark, `nervur show` and `nervur hide`, hidden at `init`: a hidden ward is not
|
|
330
330
|
listed and a stranger at its page meets the plain door, while a link
|
|
331
331
|
still knocks with its invitation and the desk still answers a proof, so
|
|
332
332
|
an estate shows its face and leaves every home hidden. `quo.` stays one per harbor,
|
|
@@ -339,24 +339,24 @@ Read with the trunk's "Carrying" and "The look", which this applies.
|
|
|
339
339
|
device paints as nothing, since an address adds no right. Every section
|
|
340
340
|
on the world's page says where its own page is.
|
|
341
341
|
- **A link is the page with the invitation in the fragment**, under the one
|
|
342
|
-
reserved key `
|
|
343
|
-
`ward` alone: `web.acme.com/shop#
|
|
342
|
+
reserved key `nervur`, the invitation compact as `ward.heir.secret` or
|
|
343
|
+
`ward` alone: `web.acme.com/shop#nervur=...`. The fragment never leaves the
|
|
344
344
|
browser, where a query string would reach the server, its logs and every
|
|
345
345
|
referer. The tab reads it, strips it from the address bar before anything
|
|
346
346
|
else runs, and joins. A page's own routing keeps the query, the path and
|
|
347
|
-
the rest of the fragment; only `
|
|
347
|
+
the rest of the fragment; only `nervur` is taken. `beings/link.ts`.
|
|
348
348
|
- **An answer that is an invitation paints as the link it is.** The only
|
|
349
349
|
thing to do with one is to open it, and a being does not know where her
|
|
350
350
|
page lives while the side does: the side builds the link on the world's
|
|
351
351
|
page address, which is why the grammar carries no URL and this is not a
|
|
352
352
|
node. It is how devices beget devices on a page: a human asks her user
|
|
353
353
|
being's `device` for the next one and gets back a link to send, the same
|
|
354
|
-
link `
|
|
354
|
+
link `nervur invite` prints on the box. A side with an `admit` shows a guest
|
|
355
355
|
the door instead, and that is the door alone.
|
|
356
356
|
- **An invitation is self-addressing.** It names its ward by pk, so the
|
|
357
357
|
path of the page it was opened on is a hint for humans and nothing more:
|
|
358
358
|
the tab joins in the local ward of the ward the invitation names, and
|
|
359
|
-
the address follows. `web./#
|
|
359
|
+
the address follows. `web./#nervur=...` is a complete way in for anyone
|
|
360
360
|
holding an invitation to any ward the harbor hosts, and every ward has a
|
|
361
361
|
page, whether or not anyone is at its door, so that a link into one has
|
|
362
362
|
somewhere to land; a ward with no public being says it admits by
|
|
@@ -70,7 +70,7 @@ the two words give it what it needs to decide.
|
|
|
70
70
|
|
|
71
71
|
The client speaks OAuth and lands the human on the allow page of the web
|
|
72
72
|
route, where nothing is typed but an invitation: the one the root minted
|
|
73
|
-
for this client on the user being with `
|
|
73
|
+
for this client on the user being with `nervur invite`, and the identity it
|
|
74
74
|
will be. The invitation names its ward, so the world the client is let
|
|
75
75
|
into is the invitation's, and the grant remembers it: a bearer is an
|
|
76
76
|
identity in a world and a session is that identity's there. A session
|
|
@@ -144,11 +144,11 @@ process runs as the human on the device, and the avatar lives in the laptop
|
|
|
144
144
|
harbor. No droplet is needed for this. A dialer harbor is enough, because the
|
|
145
145
|
model is on the same machine as the ward it talks to.
|
|
146
146
|
|
|
147
|
-
One thing to know when a client launches `
|
|
147
|
+
One thing to know when a client launches `nervur side` or `nervur pilot`: the MCP
|
|
148
148
|
SDK spawns the server with a stripped environment, without `TMPDIR`. A
|
|
149
149
|
harbor folder whose path is long gets its sockets in the temp dir under a
|
|
150
150
|
hashed name, and the child then computes a different temp dir and finds no
|
|
151
|
-
daemon. The default `~/.
|
|
151
|
+
daemon. The default `~/.nervur` is short and unaffected; for a long folder,
|
|
152
152
|
hand the client the full environment.
|
|
153
153
|
|
|
154
154
|
### Two ways a model is driven
|
|
@@ -218,8 +218,8 @@ the dock ward's `agents` faculty, the way a schedule is placed on the
|
|
|
218
218
|
clock, and it lives in her cells and in no file:
|
|
219
219
|
|
|
220
220
|
```bash
|
|
221
|
-
|
|
222
|
-
|
|
221
|
+
nervur ask --ward dock agents keep '{"id":"claude","ward":"main","command":"claude","args":["-p","--model","haiku"],"dir":"/home/nervur/claude"}'
|
|
222
|
+
nervur ask --ward dock agents keep '{"id":"kimi","ward":"main","url":"https://openrouter.ai/api/v1","model":"moonshotai/kimi-k2","key":"..."}'
|
|
223
223
|
```
|
|
224
224
|
|
|
225
225
|
She runs at once and again at every boot; `drop` stops her and forgets the
|
|
@@ -271,16 +271,16 @@ runner pins, in `packages/dock/mcp/runner.ts`:
|
|
|
271
271
|
Ten is a ceiling, not a permission: a turn that ends there has no final
|
|
272
272
|
text, and the gate decided everything the model reached. The proof is
|
|
273
273
|
`packages/dock/test/runner.test.ts` over a scripted endpoint on loopback, and the
|
|
274
|
-
same suite runs one live turn when `
|
|
274
|
+
same suite runs one live turn when `NERVUR_MODEL_URL` names a real endpoint.
|
|
275
275
|
|
|
276
|
-
From a terminal the runner is `
|
|
277
|
-
the same pipe as `
|
|
276
|
+
From a terminal the runner is `nervur run --as NAME --url URL --model NAME`:
|
|
277
|
+
the same pipe as `nervur side`, with the model named in the hello line, so
|
|
278
278
|
the daemon runs the runner beside the avatar it boots for the name. A line
|
|
279
279
|
typed is a turn; the model's final text is a line back; a push from the
|
|
280
280
|
user being starts a turn of its own and its text comes back the same way.
|
|
281
281
|
A turn that ends at the ceiling, `--turns`, has no final text and comes
|
|
282
282
|
back as an empty line; a model that fails comes back as one line holding
|
|
283
|
-
an error object. The bearer, `
|
|
283
|
+
an error object. The bearer, `NERVUR_MODEL_KEY`, is read by the command from
|
|
284
284
|
the device and crosses only the local socket.
|
|
285
285
|
|
|
286
286
|
### A model as the owner
|
|
@@ -297,7 +297,7 @@ nothing and logs nothing: what a model did with it is in the host's own
|
|
|
297
297
|
transcript, and an invitation it was handed is in no file of the dock's.
|
|
298
298
|
The pilot is handed to one local agent by the device's own rules. A remote
|
|
299
299
|
pilot is a standing at the ward, and still not a route: a model without a
|
|
300
|
-
ward of its own cannot be an owner anywhere. `
|
|
300
|
+
ward of its own cannot be an owner anywhere. `nervur pilot --via S` is that
|
|
301
301
|
pilot: S is a standing the user being here holds at the
|
|
302
302
|
far ward, taken when the root here knocked for her with an invitation the
|
|
303
303
|
far root minted on its ward's pk, and every tool call is a sealed ask
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<!--
|
|
3
|
-
The daemon on a Mac, as the user, forever: a launchd agent. It holds the
|
|
4
|
-
harbor at ~/.quo and the socket to every quo. route ~/.quo/dial.json
|
|
5
|
-
names, so a Mac behind NAT is reached through the droplet it dialed. The
|
|
6
|
-
daemon runs the dock's emitted `dist/cli/quo.js` from where the estate
|
|
7
|
-
installed it, never the source. Install, with node on the path:
|
|
8
|
-
|
|
9
|
-
sed "s#HOME#$HOME#g; s#NODE#$(which node)#g" mac/systems.quo.plist > ~/Library/LaunchAgents/systems.quo.plist
|
|
10
|
-
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/systems.quo.plist
|
|
11
|
-
|
|
12
|
-
Remove with `launchctl bootout gui/$(id -u)/systems.quo`; restart after a
|
|
13
|
-
wire change with `launchctl kickstart -k gui/$(id -u)/systems.quo`. The
|
|
14
|
-
log is ~/.quo/serve.log. No HTTP door: a Mac is a dialer, not a listener.
|
|
15
|
-
-->
|
|
16
|
-
<plist version="1.0">
|
|
17
|
-
<dict>
|
|
18
|
-
<key>Label</key>
|
|
19
|
-
<string>systems.quo</string>
|
|
20
|
-
<key>ProgramArguments</key>
|
|
21
|
-
<array>
|
|
22
|
-
<string>NODE</string>
|
|
23
|
-
<string>HOME/ESTATE/node_modules/@nervur-org/dock/dist/cli/quo.js</string>
|
|
24
|
-
<string>serve</string>
|
|
25
|
-
</array>
|
|
26
|
-
<key>EnvironmentVariables</key>
|
|
27
|
-
<dict>
|
|
28
|
-
<key>QUO_DIR</key>
|
|
29
|
-
<string>HOME/.quo</string>
|
|
30
|
-
</dict>
|
|
31
|
-
<key>WorkingDirectory</key>
|
|
32
|
-
<string>HOME/ESTATE</string>
|
|
33
|
-
<key>RunAtLoad</key>
|
|
34
|
-
<true/>
|
|
35
|
-
<key>KeepAlive</key>
|
|
36
|
-
<true/>
|
|
37
|
-
<key>ThrottleInterval</key>
|
|
38
|
-
<integer>2</integer>
|
|
39
|
-
<key>StandardOutPath</key>
|
|
40
|
-
<string>HOME/.quo/serve.log</string>
|
|
41
|
-
<key>StandardErrorPath</key>
|
|
42
|
-
<string>HOME/.quo/serve.log</string>
|
|
43
|
-
</dict>
|
|
44
|
-
</plist>
|