@nervur-org/dock 0.3.1 → 0.4.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.
Files changed (212) hide show
  1. package/GETTING_STARTED.md +22 -12
  2. package/{beings/GLOSSARY.md → GLOSSARY.md} +3 -3
  3. package/NOTICE +1 -1
  4. package/README.md +20 -16
  5. package/{beings/WORLDS.md → WORLDS.md} +6 -4
  6. package/api/route.ts +3 -3
  7. package/beings/avatar.ts +2 -2
  8. package/beings/carry.ts +2 -2
  9. package/beings/clock.ts +2 -2
  10. package/beings/courier.ts +2 -2
  11. package/beings/desk.ts +2 -2
  12. package/beings/doorbell.ts +2 -2
  13. package/beings/envoy.ts +2 -2
  14. package/beings/join.ts +2 -2
  15. package/beings/link.ts +5 -5
  16. package/beings/look.ts +1 -1
  17. package/beings/porter.ts +2 -2
  18. package/beings/presence.ts +1 -1
  19. package/beings/setup.ts +3 -3
  20. package/beings/side.ts +2 -2
  21. package/beings/user.ts +2 -2
  22. package/beings/way.ts +1 -1
  23. package/cli/client.ts +6 -6
  24. package/cli/daemon.ts +7 -7
  25. package/cli/estate/{quo.service → nervur.service} +12 -12
  26. package/cli/estate/org.nervur.plist +44 -0
  27. package/cli/estate.ts +6 -6
  28. package/cli/{quo.ts → nervur.ts} +43 -37
  29. package/cli/pilot.ts +3 -3
  30. package/cli/stand.ts +3 -3
  31. package/dist/api/route.d.ts +2 -2
  32. package/dist/api/route.js +2 -2
  33. package/dist/beings/avatar.d.ts +1 -1
  34. package/dist/beings/avatar.js +1 -1
  35. package/dist/beings/carry.d.ts +2 -2
  36. package/dist/beings/carry.js +1 -1
  37. package/dist/beings/clock.d.ts +2 -2
  38. package/dist/beings/clock.js +1 -1
  39. package/dist/beings/courier.d.ts +2 -2
  40. package/dist/beings/courier.js +1 -1
  41. package/dist/beings/desk.d.ts +3 -3
  42. package/dist/beings/desk.js +1 -1
  43. package/dist/beings/doorbell.d.ts +3 -3
  44. package/dist/beings/doorbell.js +1 -1
  45. package/dist/beings/envoy.d.ts +2 -2
  46. package/dist/beings/envoy.js +1 -1
  47. package/dist/beings/join.d.ts +2 -2
  48. package/dist/beings/link.d.ts +2 -2
  49. package/dist/beings/link.js +3 -3
  50. package/dist/beings/look.d.ts +1 -1
  51. package/dist/beings/porter.d.ts +2 -2
  52. package/dist/beings/porter.js +1 -1
  53. package/dist/beings/presence.d.ts +1 -1
  54. package/dist/beings/setup.d.ts +1 -1
  55. package/dist/beings/side.d.ts +1 -1
  56. package/dist/beings/side.js +1 -1
  57. package/dist/beings/user.d.ts +3 -3
  58. package/dist/beings/user.js +1 -1
  59. package/dist/beings/way.d.ts +1 -1
  60. package/dist/cli/client.js +4 -4
  61. package/dist/cli/daemon.d.ts +1 -1
  62. package/dist/cli/daemon.js +6 -6
  63. package/dist/cli/estate/{quo.service → nervur.service} +12 -12
  64. package/dist/cli/estate/org.nervur.plist +44 -0
  65. package/dist/cli/estate.js +6 -6
  66. package/dist/cli/{quo.js → nervur.js} +43 -37
  67. package/dist/cli/stand.d.ts +2 -2
  68. package/dist/dock/agents.d.ts +1 -1
  69. package/dist/dock/agents.js +1 -1
  70. package/dist/dock/apns.js +1 -1
  71. package/dist/dock/console.d.ts +1 -1
  72. package/dist/dock/dialers.d.ts +2 -2
  73. package/dist/dock/dialers.js +2 -2
  74. package/dist/dock/faculty.d.ts +2 -2
  75. package/dist/dock/faculty.js +1 -1
  76. package/dist/dock/grants.d.ts +1 -1
  77. package/dist/dock/grants.js +1 -1
  78. package/dist/dock/http2.js +1 -1
  79. package/dist/dock/index.d.ts +1 -1
  80. package/dist/dock/index.js +1 -1
  81. package/dist/dock/local.d.ts +2 -2
  82. package/dist/dock/location.d.ts +1 -1
  83. package/dist/dock/notifications.d.ts +1 -1
  84. package/dist/dock/notifications.js +1 -1
  85. package/dist/dock/push.d.ts +1 -1
  86. package/dist/dock/push.js +3 -3
  87. package/dist/dock/service.js +1 -1
  88. package/dist/dock/timer.d.ts +1 -1
  89. package/dist/harbor/browser.d.ts +2 -2
  90. package/dist/harbor/browser.js +4 -4
  91. package/dist/harbor/capacitor.d.ts +1 -1
  92. package/dist/harbor/capacitor.js +1 -1
  93. package/dist/harbor/disk.d.ts +4 -4
  94. package/dist/harbor/disk.js +5 -5
  95. package/dist/harbor/edge/edge.d.ts +2 -2
  96. package/dist/harbor/edge/edge.js +5 -5
  97. package/dist/harbor/edge/exercise.js +8 -8
  98. package/dist/harbor/edge/given.d.ts +1 -1
  99. package/dist/harbor/edge/platform.d.ts +1 -1
  100. package/dist/harbor/edge/storage.d.ts +1 -1
  101. package/dist/harbor/edge/storage.js +2 -2
  102. package/dist/harbor/edge/worker.js +2 -2
  103. package/dist/harbor/files.d.ts +1 -1
  104. package/dist/harbor/files.js +2 -2
  105. package/dist/harbor/http.d.ts +2 -2
  106. package/dist/harbor/http.js +1 -1
  107. package/dist/harbor/idb.d.ts +1 -1
  108. package/dist/harbor/idb.js +0 -0
  109. package/dist/harbor/quo.js +1 -1
  110. package/dist/harbor/seal.js +1 -1
  111. package/dist/harbor/sealed.d.ts +1 -1
  112. package/dist/harbor/sealed.js +4 -4
  113. package/dist/harbor/tauri.d.ts +1 -1
  114. package/dist/harbor/tauri.js +1 -1
  115. package/dist/harbor/ward.d.ts +1 -1
  116. package/dist/human/app.d.ts +2 -2
  117. package/dist/human/door.js +4 -4
  118. package/dist/human/guest.js +1 -1
  119. package/dist/human/html.d.ts +1 -1
  120. package/dist/human/html.js +1 -1
  121. package/dist/human/local.d.ts +1 -1
  122. package/dist/human/mark.js +2 -2
  123. package/dist/human/move.d.ts +2 -2
  124. package/dist/human/move.js +1 -1
  125. package/dist/human/screen.d.ts +1 -1
  126. package/dist/human/screen.js +3 -3
  127. package/dist/human/tab.bundle.txt +32 -32
  128. package/dist/human/tab.js +7 -7
  129. package/dist/human/tree.d.ts +1 -1
  130. package/dist/human/wake.d.ts +2 -2
  131. package/dist/human/wake.js +1 -1
  132. package/dist/human/web.d.ts +1 -1
  133. package/dist/human/web.js +4 -4
  134. package/dist/human/worker.bundle.txt +27 -27
  135. package/dist/human/worker.js +4 -4
  136. package/dist/human/worlds.d.ts +2 -2
  137. package/dist/human/worlds.js +4 -4
  138. package/dist/mcp/agent.d.ts +1 -1
  139. package/dist/mcp/allow.d.ts +1 -1
  140. package/dist/mcp/allow.js +2 -2
  141. package/dist/mcp/oauth.js +1 -1
  142. package/dist/mcp/runner.d.ts +1 -1
  143. package/dist/mcp/server.d.ts +2 -2
  144. package/dist/mcp/server.js +2 -2
  145. package/dock/agents.ts +2 -2
  146. package/dock/apns.ts +1 -1
  147. package/dock/console.ts +1 -1
  148. package/dock/dialers.ts +3 -3
  149. package/dock/faculty.ts +2 -2
  150. package/dock/grants.ts +2 -2
  151. package/dock/http2.ts +1 -1
  152. package/dock/index.ts +3 -3
  153. package/dock/local.ts +1 -1
  154. package/dock/location.ts +1 -1
  155. package/dock/notifications.ts +2 -2
  156. package/dock/push.ts +4 -4
  157. package/dock/service.ts +1 -1
  158. package/dock/timer.ts +1 -1
  159. package/harbor/browser.ts +5 -5
  160. package/harbor/capacitor.ts +2 -2
  161. package/harbor/disk.ts +8 -8
  162. package/harbor/edge/edge.ts +7 -7
  163. package/harbor/edge/exercise.ts +11 -11
  164. package/harbor/edge/given.ts +1 -1
  165. package/harbor/edge/platform.d.ts +1 -1
  166. package/harbor/edge/storage.ts +2 -2
  167. package/harbor/edge/worker.ts +2 -2
  168. package/harbor/edge/wrangler.toml +3 -3
  169. package/harbor/files.ts +2 -2
  170. package/harbor/http.ts +2 -2
  171. package/harbor/idb.ts +0 -0
  172. package/harbor/quo.ts +1 -1
  173. package/harbor/resolve.ts +1 -1
  174. package/harbor/seal.ts +1 -1
  175. package/harbor/sealed.ts +5 -5
  176. package/harbor/tauri.ts +2 -2
  177. package/harbor/ward.ts +1 -1
  178. package/human/app.ts +2 -2
  179. package/human/apps.ts +1 -1
  180. package/human/door.ts +4 -4
  181. package/human/guest.ts +2 -2
  182. package/human/html.ts +2 -2
  183. package/human/local.ts +1 -1
  184. package/human/mark.ts +2 -2
  185. package/human/move.ts +3 -3
  186. package/human/screen.ts +5 -5
  187. package/human/tab.bundle.txt +32 -32
  188. package/human/tab.ts +10 -10
  189. package/human/tree.ts +1 -1
  190. package/human/wake.ts +3 -3
  191. package/human/web.ts +5 -5
  192. package/human/worker.bundle.txt +27 -27
  193. package/human/worker.ts +6 -6
  194. package/human/worlds.ts +5 -5
  195. package/mcp/agent.ts +1 -1
  196. package/mcp/allow.ts +5 -5
  197. package/mcp/oauth.ts +1 -1
  198. package/mcp/runner.ts +1 -1
  199. package/mcp/server.ts +3 -3
  200. package/package.json +15 -7
  201. package/{api/quo-api.md → quo-api.md} +1 -1
  202. package/{beings/quo-dock.md → quo-dock.md} +74 -71
  203. package/{harbor/quo-harbor.md → quo-harbor.md} +54 -30
  204. package/{human/quo-human.md → quo-human.md} +7 -7
  205. package/{mcp/quo-mcp.md → quo-mcp.md} +10 -10
  206. package/cli/estate/systems.quo.plist +0 -44
  207. package/cli/quo-dock.md +0 -1942
  208. package/dist/cli/estate/systems.quo.plist +0 -44
  209. package/dock/quo-app-bells.md +0 -280
  210. package/dock/quo-dock.md +0 -1942
  211. /package/dist/cli/{quo.d.ts → nervur.d.ts} +0 -0
  212. /package/{beings/quo-app-bells.md → quo-app-bells.md} +0 -0
@@ -0,0 +1,44 @@
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 ~/.nervur and the socket to every quo. route ~/.nervur/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/nervur.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/org.nervur.plist > ~/Library/LaunchAgents/org.nervur.plist
10
+ launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/org.nervur.plist
11
+
12
+ Remove with `launchctl bootout gui/$(id -u)/org.nervur`; restart after a
13
+ wire change with `launchctl kickstart -k gui/$(id -u)/org.nervur`. The
14
+ log is ~/.nervur/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>org.nervur</string>
20
+ <key>ProgramArguments</key>
21
+ <array>
22
+ <string>NODE</string>
23
+ <string>HOME/ESTATE/node_modules/@nervur-org/dock/dist/cli/nervur.js</string>
24
+ <string>serve</string>
25
+ </array>
26
+ <key>EnvironmentVariables</key>
27
+ <dict>
28
+ <key>NERVUR_DIR</key>
29
+ <string>HOME/.nervur</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/.nervur/serve.log</string>
41
+ <key>StandardErrorPath</key>
42
+ <string>HOME/.nervur/serve.log</string>
43
+ </dict>
44
+ </plist>
package/cli/estate.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- // `quo estate DIR --domain D`: an estate folder, written once, of the shape
3
- // every estate has. One folder per harbor: `droplet/`, the quo directory
2
+ // `nervur estate DIR --domain D`: an estate folder, written once, of the shape
3
+ // every estate has. One folder per harbor: `droplet/`, the harbor directory
4
4
  // that device runs minus what it mints, its routes under the domain, no
5
5
  // agents, no schedules, no classes of its own, and that device's unit and
6
6
  // Caddyfile; and `mac/`, the launchd agent that runs the daemon on an
@@ -32,13 +32,13 @@ export async function estate(dir: string, domain: string): Promise<{ dir: string
32
32
  const name = basename(dir);
33
33
  const files: Record<string, string> = {
34
34
  'package.json': JSON.stringify({ name, private: true, description: `The ${name} estate: one owner's harbors, built on the dock and nothing else.`, type: 'module', dependencies: { '@nervur-org/dock': `^${await version()}` } }, null, 2) + '\n',
35
- [`${name}.md`]: `# ${name}\n\nAn estate: all of one owner's harbors. One folder per harbor, each the quo\ndirectory that device runs minus what it mints, plus that device's unit.\n\`droplet/\` is the first: its routes under \`${domain}\`, its agents, its\nclasses, its systemd unit and its Caddyfile. This folder depends on the\ndock and nothing else.\n\n## The droplet\n\nWhere it is, how it is reached, and what was done to stand it up: yours\nto write.\n`,
35
+ [`${name}.md`]: `# ${name}\n\nAn estate: all of one owner's harbors. One folder per harbor, each the harbor\ndirectory that device runs minus what it mints, plus that device's unit.\n\`droplet/\` is the first: its routes under \`${domain}\`, its agents, its\nclasses, its systemd unit and its Caddyfile. This folder depends on the\ndock and nothing else.\n\n## The droplet\n\nWhere it is, how it is reached, and what was done to stand it up: yours\nto write.\n`,
36
36
  'droplet/routes.json': JSON.stringify(routesFor(domain)) + '\n',
37
- 'droplet/stand.ts': `// SPDX-License-Identifier: Apache-2.0\n// What the root stands up on this harbor, once, after the inits and with no\n// daemon over the folder: the beings the estate boots for its own working\n// and the relations between them, placed on real invitations. Run as\n// \`node droplet/stand.ts <dir>\`; twice is once.\nimport { stand } from '@nervur-org/dock/stand';\n\nconsole.log(await stand(process.argv[2] ?? process.env.QUO_DIR ?? '', { boot: [], wire: [] }));\n`,
37
+ 'droplet/stand.ts': `// SPDX-License-Identifier: Apache-2.0\n// What the root stands up on this harbor, once, after the inits and with no\n// daemon over the folder: the beings the estate boots for its own working\n// and the relations between them, placed on real invitations. Run as\n// \`node droplet/stand.ts <dir>\`; twice is once.\nimport { stand } from '@nervur-org/dock/stand';\n\nconsole.log(await stand(process.argv[2] ?? process.env.NERVUR_DIR ?? '', { boot: [], wire: [] }));\n`,
38
38
  'droplet/classes/index.ts': '// The classes this harbor holds beside the dock\'s built-in ones, exported\n// by name.\nexport {};\n',
39
- 'droplet/quo.service': (await template('quo.service')).replaceAll('ESTATE', name),
39
+ 'droplet/nervur.service': (await template('nervur.service')).replaceAll('ESTATE', name),
40
40
  'droplet/Caddyfile': (await template('Caddyfile')).replaceAll('DOMAIN', domain),
41
- 'mac/systems.quo.plist': (await template('systems.quo.plist')).replaceAll('ESTATE', name),
41
+ 'mac/org.nervur.plist': (await template('org.nervur.plist')).replaceAll('ESTATE', name),
42
42
  };
43
43
  for (const [rel, text] of Object.entries(files)) {
44
44
  await mkdir(join(dir, rel, '..'), { recursive: true });
@@ -1,32 +1,38 @@
1
1
  #!/usr/bin/env node
2
2
  // SPDX-License-Identifier: Apache-2.0
3
- // `quo`: the one command of the estate. Thin on purpose: each subcommand
3
+ // `nervur`: the one command of the estate. Thin on purpose: each subcommand
4
4
  // picks a folder, reaches the daemon or the disk, and hands off. Logic that
5
5
  // appears here was missing from a being or a side, and moves there.
6
6
  //
7
- // quo init [--dir D] [--ward W] [--user U] [--class C] [--default] [--show] [--domain DOM] mint a seed, boot a ward over a disk store, write both; C is the class of the ward's home being, User unless said; --default marks it the default ward; --show shows it at the web route; --domain writes the four routes under DOM
8
- // quo default [--dir D] <ward> mark one ward the default, the one a caller means when naming none; the one ward hosted is the default unmarked
9
- // quo show|hide [--dir D] <ward> show a ward at the web route, listed at its root and its public being's page painted for a stranger; hidden at init, and a hidden ward's page is the plain door
10
- // quo domain [--dir D] <domain> write routes.json by the convention: mcp., web., quo. and api. under the domain, over https
11
- // quo serve [--dir D] [--http PORT] the daemon: harbor from disk, the two sockets, the HTTP door on loopback, a socket held to every route the dialers faculty keeps
12
- // quo census [--dir D] [--ward W] [--via S] the empty ask: pk and every being
13
- // quo boot [--dir D] [--ward W] [--via S] <json> { key, class, public? }
14
- // quo invite [--dir D] [--ward W] [--via S] <json> { being, id }; with routes.json naming web., the answer carries the link
15
- // quo knock [--dir D] [--ward W] [--via S] <json> { being | { boot, key }, id, invitation, method?, args?, wanted? }
16
- // quo remove [--dir D] [--ward W] [--via S] <json> { being, id }: a relation out of a being; on the ward pk, an owner
17
- // quo unboot [--dir D] [--ward W] [--via S] <json> { being }: a being out of the ward, with every relation she holds
18
- // quo ask [--dir D] [--ward W] <being> [method] [json] the root asking a being of its own ward, as the device
19
- // quo side [--dir D] [--ward W] --as NAME an avatar over stdio for a local MCP client; NAME is the client identity
20
- // quo run [--dir D] [--ward W] --as NAME --url URL --model NAME [--turns N] a human at a terminal talking to a model through an avatar: a line in, the model's final text out
21
- // quo pilot [--dir D] [--ward W] [--via S] the owner pilot over stdio: census, boot, invite, knock, remove
22
- // quo reach [--dir D] <pk> <url> a hint for the harbor's directory: that ward pk lives at that quo. route
23
- // quo estate <dir> --domain D an estate folder of the shape every estate has: a droplet's quo directory, unit and Caddyfile, a Mac's launchd agent, on this dock
7
+ // The command carries the kit's name and never the protocol's. `quo` is
8
+ // Quo's word, and it stays on the wire: the `quo.` route, a ward's door, the
9
+ // sealed wards' folder. Nothing a person types is called quo, and nothing a
10
+ // device holds for the daemon is either: the unit, the unix user, the home
11
+ // and the environment file all say nervur.
24
12
  //
25
- // D defaults to $QUO_DIR, then ~/.quo. W defaults to the default ward, and
13
+ // nervur init [--dir D] [--ward W] [--user U] [--class C] [--default] [--show] [--domain DOM] mint a seed, boot a ward over a disk store, write both; C is the class of the ward's home being, User unless said; --default marks it the default ward; --show shows it at the web route; --domain writes the four routes under DOM
14
+ // nervur default [--dir D] <ward> mark one ward the default, the one a caller means when naming none; the one ward hosted is the default unmarked
15
+ // nervur show|hide [--dir D] <ward> show a ward at the web route, listed at its root and its public being's page painted for a stranger; hidden at init, and a hidden ward's page is the plain door
16
+ // nervur domain [--dir D] <domain> write routes.json by the convention: mcp., web., quo. and api. under the domain, over https
17
+ // nervur serve [--dir D] [--http PORT] the daemon: harbor from disk, the two sockets, the HTTP door on loopback, a socket held to every route the dialers faculty keeps
18
+ // nervur census [--dir D] [--ward W] [--via S] the empty ask: pk and every being
19
+ // nervur boot [--dir D] [--ward W] [--via S] <json> { key, class, public? }
20
+ // nervur invite [--dir D] [--ward W] [--via S] <json> { being, id }; with routes.json naming web., the answer carries the link
21
+ // nervur knock [--dir D] [--ward W] [--via S] <json> { being | { boot, key }, id, invitation, method?, args?, wanted? }
22
+ // nervur remove [--dir D] [--ward W] [--via S] <json> { being, id }: a relation out of a being; on the ward pk, an owner
23
+ // nervur unboot [--dir D] [--ward W] [--via S] <json> { being }: a being out of the ward, with every relation she holds
24
+ // nervur ask [--dir D] [--ward W] <being> [method] [json] the root asking a being of its own ward, as the device
25
+ // nervur side [--dir D] [--ward W] --as NAME an avatar over stdio for a local MCP client; NAME is the client identity
26
+ // nervur run [--dir D] [--ward W] --as NAME --url URL --model NAME [--turns N] a human at a terminal talking to a model through an avatar: a line in, the model's final text out
27
+ // nervur pilot [--dir D] [--ward W] [--via S] the owner pilot over stdio: census, boot, invite, knock, remove
28
+ // nervur reach [--dir D] <pk> <url> a hint for the harbor's directory: that ward pk lives at that quo. route
29
+ // nervur estate <dir> --domain D an estate folder of the shape every estate has: a droplet's harbor directory, unit and Caddyfile, a Mac's launchd agent, on this dock
30
+ //
31
+ // D defaults to $NERVUR_DIR, then ~/.nervur. W defaults to the default ward, and
26
32
  // init names a new ward main when none is given. init takes
27
33
  // --user NAME for the user being, defaulting to the device's user. run
28
- // takes the model's base URL as --url or $QUO_MODEL_URL, its name as
29
- // --model or $QUO_MODEL, a bearer from $QUO_MODEL_KEY, read here and never
34
+ // takes the model's base URL as --url or $NERVUR_MODEL_URL, its name as
35
+ // --model or $NERVUR_MODEL, a bearer from $NERVUR_MODEL_KEY, read here and never
30
36
  // kept, and --turns as the ceiling of model calls in one turn. S is a
31
37
  // standing the user being holds at another ward, one the root there invited
32
38
  // as an owner: with --via, the owner asks go to that ward's door, sealed,
@@ -34,7 +40,7 @@
34
40
  import { homedir, userInfo } from 'node:os';
35
41
  import { join } from 'node:path';
36
42
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
37
- import { isInvitation } from '@nervur-org/nervur';
43
+ import { isInvitation } from 'nervur';
38
44
  import { DiskHarbor } from '../harbor/disk.ts';
39
45
  import { serve, readRoutes, writeRoutes } from './daemon.ts';
40
46
  import { ask, askBeing, side, reach, type Run } from './client.ts';
@@ -55,7 +61,7 @@ function parse(argv: string[]) {
55
61
  else rest.push(a);
56
62
  }
57
63
  const [cmd, json, more, third] = rest;
58
- return { cmd, json, more, third, flags, dir: flags.dir ?? process.env.QUO_DIR ?? join(homedir(), '.quo'), ward: flags.ward, via: flags.via };
64
+ return { cmd, json, more, third, flags, dir: flags.dir ?? process.env.NERVUR_DIR ?? join(homedir(), '.nervur'), ward: flags.ward, via: flags.via };
59
65
  }
60
66
 
61
67
  const print = (v: unknown) => console.log(JSON.stringify(v, null, 2));
@@ -69,7 +75,7 @@ async function main(argv: string[]): Promise<number> {
69
75
  }
70
76
  if (cmd === 'default') {
71
77
  if (!json) {
72
- console.error('quo default <ward>');
78
+ console.error('nervur default <ward>');
73
79
  return 2;
74
80
  }
75
81
  await DiskHarbor.setDefault(dir, json);
@@ -78,7 +84,7 @@ async function main(argv: string[]): Promise<number> {
78
84
  }
79
85
  if (cmd === 'show' || cmd === 'hide') {
80
86
  if (!json) {
81
- console.error(`quo ${cmd} <ward>`);
87
+ console.error(`nervur ${cmd} <ward>`);
82
88
  return 2;
83
89
  }
84
90
  await DiskHarbor.setShown(dir, json, cmd === 'show');
@@ -87,7 +93,7 @@ async function main(argv: string[]): Promise<number> {
87
93
  }
88
94
  if (cmd === 'domain') {
89
95
  if (!json) {
90
- console.error('quo domain <domain>');
96
+ console.error('nervur domain <domain>');
91
97
  return 2;
92
98
  }
93
99
  print({ routes: await writeRoutes(dir, json) });
@@ -99,18 +105,18 @@ async function main(argv: string[]): Promise<number> {
99
105
  const wardOf = async () => flags.ward ?? (await DiskHarbor.defaultOf(dir));
100
106
  if (cmd === 'side' || cmd === 'run') {
101
107
  if (!flags.as) {
102
- console.error(`quo ${cmd} needs --as NAME`);
108
+ console.error(`nervur ${cmd} needs --as NAME`);
103
109
  return 2;
104
110
  }
105
111
  let run: Run | undefined;
106
112
  if (cmd === 'run') {
107
- const url = flags.url ?? process.env.QUO_MODEL_URL;
108
- const model = flags.model ?? process.env.QUO_MODEL;
113
+ const url = flags.url ?? process.env.NERVUR_MODEL_URL;
114
+ const model = flags.model ?? process.env.NERVUR_MODEL;
109
115
  if (!url || !model) {
110
- console.error('quo run needs --url URL and --model NAME, or QUO_MODEL_URL and QUO_MODEL');
116
+ console.error('nervur run needs --url URL and --model NAME, or NERVUR_MODEL_URL and NERVUR_MODEL');
111
117
  return 2;
112
118
  }
113
- const key = process.env.QUO_MODEL_KEY;
119
+ const key = process.env.NERVUR_MODEL_KEY;
114
120
  const turns = flags.turns !== undefined ? Number(flags.turns) : undefined;
115
121
  if (turns !== undefined && !(Number.isInteger(turns) && turns > 0)) {
116
122
  console.error('--turns is a positive integer');
@@ -129,7 +135,7 @@ async function main(argv: string[]): Promise<number> {
129
135
  return -1;
130
136
  }
131
137
  if (cmd === 'serve') {
132
- const port = flags.http ?? process.env.QUO_HTTP;
138
+ const port = flags.http ?? process.env.NERVUR_HTTP;
133
139
  const s = await serve(dir, port !== undefined ? { http: { port: Number(port) } } : {});
134
140
  print({ dir: s.harbor.dir, sock: s.sock, side: s.side, http: s.http ? `http://${s.http.host}:${s.http.port}` : null, dial: s.quo.dialers.map((d) => d.url), wards: Object.fromEntries([...s.harbor.wards].map(([n, h]) => [n, h.pk])) });
135
141
  const stop = () => void s.close().then(() => process.exit(0));
@@ -139,19 +145,19 @@ async function main(argv: string[]): Promise<number> {
139
145
  }
140
146
  if (cmd === 'estate') {
141
147
  if (!json || !flags.domain) {
142
- console.error('quo estate needs <dir> --domain D');
148
+ console.error('nervur estate needs <dir> --domain D');
143
149
  return 2;
144
150
  }
145
151
  print(await estate(json, flags.domain));
146
152
  return 0;
147
153
  }
148
154
  // The root reaching into a being of its own ward. Two positionals and the
149
- // args as JSON, because a human writes this one by hand: `quo ask clock keep
155
+ // args as JSON, because a human writes this one by hand: `nervur ask clock keep
150
156
  // '{"id":"nightly","ask":"desk.hello","cron":"0 3 * * *"}'`. With no
151
157
  // method it is that being's describe, as the device sees her.
152
158
  if (cmd === 'ask') {
153
159
  if (!json) {
154
- console.error('quo ask needs <being> [method] [json]');
160
+ console.error('nervur ask needs <being> [method] [json]');
155
161
  return 2;
156
162
  }
157
163
  const out = await askBeing(dir, json, more, third ? (JSON.parse(third) as Record<string, unknown>) : {}, await wardOf());
@@ -161,7 +167,7 @@ async function main(argv: string[]): Promise<number> {
161
167
  }
162
168
  if (cmd === 'reach') {
163
169
  if (!json || !more) {
164
- console.error('quo reach needs <pk> <url>');
170
+ console.error('nervur reach needs <pk> <url>');
165
171
  return 2;
166
172
  }
167
173
  const out = await reach(dir, json, more);
@@ -188,7 +194,7 @@ async function main(argv: string[]): Promise<number> {
188
194
  const failed = 'error' in out || (typeof out.result === 'object' && out.result !== null && 'error' in out.result);
189
195
  return failed ? 1 : 0;
190
196
  }
191
- console.error('usage: quo init|default|show|hide|domain|serve|census|boot|public|invite|knock|remove|unboot|ask|side|run|pilot|reach|estate [--dir D] [--ward W] [--via S] [--as NAME] [--url URL --model NAME] [json]');
197
+ console.error('usage: nervur init|default|show|hide|domain|serve|census|boot|public|invite|knock|remove|unboot|ask|side|run|pilot|reach|estate [--dir D] [--ward W] [--via S] [--as NAME] [--url URL --model NAME] [json]');
192
198
  return 2;
193
199
  }
194
200
 
package/cli/pilot.ts CHANGED
@@ -1,18 +1,18 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- // The owner pilot: `quo pilot`. The model side pointed at a ward instead of
2
+ // The owner pilot: `nervur pilot`. The model side pointed at a ward instead of
3
3
  // an avatar. The ward is a being to her owner, so her describe is the tool
4
4
  // list and a tool call is an owner ask, exactly as for anyone; nothing here
5
5
  // names an ask. Whoever runs this process is the owner, by the device's own
6
6
  // rules: the root of the ward here, through the daemon's socket, or, with
7
7
  // `via`, an owner at another ward's door, on a standing the user being here
8
8
  // holds there. The owner creates and places; the work goes through
9
- // `quo side`, under a gate.
9
+ // `nervur side`, under a gate.
10
10
  //
11
11
  // It stands here and not in `mcp/`, because what it is made of is the
12
12
  // daemon's socket: `mcp/` holds the model side itself, the subject it is
13
13
  // given comes from a client of the daemon, and the client is this folder's.
14
14
  import type { Transport } from '@modelcontextprotocol/sdk/shared/transport.js';
15
- import type { Answer, Blueprint, JsonObject } from '@nervur-org/nervur';
15
+ import type { Answer, Blueprint, JsonObject } from 'nervur';
16
16
  import { ask } from './client.ts';
17
17
  import type { Serving } from '../beings/side.ts';
18
18
  import { mcpSide, type Subject } from '../mcp/server.ts';
package/cli/stand.ts CHANGED
@@ -27,12 +27,12 @@
27
27
  //
28
28
  // **It adds and never removes.** A line taken out of a script leaves its
29
29
  // relation standing, because silently unplacing a relation is a wake that
30
- // stops with nobody told. Removal is a deliberate `quo remove`.
30
+ // stops with nobody told. Removal is a deliberate `nervur remove`.
31
31
  //
32
32
  // **It fails loudly.** A line that will not place stops the script where it
33
33
  // is, and a harbor half stood is said, never served.
34
- import type { Invitation, JsonObject } from '@nervur-org/nervur';
35
- import type { Harbor } from '@nervur-org/nervur/harbor';
34
+ import type { Invitation, JsonObject } from 'nervur';
35
+ import type { Harbor } from 'nervur/harbor';
36
36
  import { DiskHarbor } from '../harbor/disk.ts';
37
37
 
38
38
  // A being the estate boots, and where; `public` marks her as the one being
@@ -1,8 +1,8 @@
1
1
  import type { Handler } from '../harbor/http.ts';
2
- import type { Hosted } from '@nervur-org/nervur/harbor';
2
+ import type { Hosted } from 'nervur/harbor';
3
3
  import type { Avatar } from '../beings/avatar.ts';
4
4
  import type { Grants } from '../dock/grants.ts';
5
- import { type Invitation } from '@nervur-org/nervur';
5
+ import { type Invitation } from 'nervur';
6
6
  export type Held = {
7
7
  wards: ReadonlyMap<string, Hosted>;
8
8
  here(): string;
package/dist/api/route.js CHANGED
@@ -2,7 +2,7 @@ import { readText } from '../harbor/http.js';
2
2
  import { invitationOf } from '../beings/link.js';
3
3
  import { landed, POLICY } from '../human/door.js';
4
4
  import { CSS } from '../human/style.js';
5
- import { isInvitation, isSilence, isWord, wordOf } from '@nervur-org/nervur';
5
+ import { isInvitation, isSilence, isWord, wordOf } from 'nervur';
6
6
  const open = { 'access-control-allow-origin': '*', 'access-control-allow-methods': 'GET, POST, OPTIONS', 'access-control-allow-headers': 'content-type, authorization' };
7
7
  const word = (s) => (typeof s === 'string' && /^[\w.-]{1,40}$/.test(s) ? s : null);
8
8
  export function apiRoute(harbor, o) {
@@ -13,7 +13,7 @@ export function apiRoute(harbor, o) {
13
13
  // that was sent here and never for a script somewhere else. Its policy
14
14
  // is the allow page's, and for the same reason: a page that runs no
15
15
  // script of its own should be allowed none.
16
- const page = (status, body) => new Response(`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>quo</title>\n<style>${CSS}</style>\n</head><body>${body}</body></html>`, {
16
+ const page = (status, body) => new Response(`<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>nervur</title>\n<style>${CSS}</style>\n</head><body>${body}</body></html>`, {
17
17
  status,
18
18
  headers: { 'content-type': 'text/html; charset=utf-8', 'cache-control': 'no-store', 'content-security-policy': POLICY, 'referrer-policy': 'no-referrer' },
19
19
  });
@@ -1,4 +1,4 @@
1
- import type { Answer, Blueprint, Invitation, JsonObject, OccupantRecord, Wanted } from '@nervur-org/nervur';
1
+ import type { Answer, Blueprint, Invitation, JsonObject, OccupantRecord, Wanted } from 'nervur';
2
2
  import { Carrier } from './carry.ts';
3
3
  export declare const USER = "user";
4
4
  export declare const PUSHER = "user:push";
@@ -7,7 +7,7 @@
7
7
  // calls the four methods below: one of the two ways in, `enter` behind a
8
8
  // route's proof or `join` with an invitation, then `tools` and `call`.
9
9
  // Nothing of a side is in her cells.
10
- import { isSilence, isWord, wordOf } from '@nervur-org/nervur';
10
+ import { isSilence, isWord, wordOf } from 'nervur';
11
11
  import { Carrier } from './carry.js';
12
12
  // Her one standing, and the id under which the user being pushes to her.
13
13
  // Two ids for one far being, because standings and occupants share one
@@ -1,5 +1,5 @@
1
- import { Being } from '@nervur-org/nervur';
2
- import type { Asker, Blueprint, JsonObject, OccupantRecord, Reply } from '@nervur-org/nervur';
1
+ import { Being } from 'nervur';
2
+ import type { Asker, Blueprint, JsonObject, OccupantRecord, Reply } from 'nervur';
3
3
  export declare class Carrier extends Being {
4
4
  static carries(_occupant: OccupantRecord | undefined, _asker: Asker): boolean;
5
5
  static hidden(id: string): boolean;
@@ -18,7 +18,7 @@
18
18
  // `look` once per digest, and keeps both in her cells. So a describe of
19
19
  // hers may cost one ask per stale standing, which is the price of a page
20
20
  // that is never more than one ask behind.
21
- import { Being, isSilence, isWord, wordOf } from '@nervur-org/nervur';
21
+ import { Being, isSilence, isWord, wordOf } from 'nervur';
22
22
  import { sanitise } from './look.js';
23
23
  // The names a far being carries, read off her notes: every ask her
24
24
  // `standings` groups name, and each group's page. Empty when she carries
@@ -1,5 +1,5 @@
1
- import { Being } from '@nervur-org/nervur';
2
- import type { Asker, Json, JsonObject, OccupantRecord, Stance } from '@nervur-org/nervur';
1
+ import { Being } from 'nervur';
2
+ import type { Asker, Json, JsonObject, OccupantRecord, Stance } from 'nervur';
3
3
  declare const root: (_occ: OccupantRecord | undefined, asker: Asker) => boolean;
4
4
  declare const timer: (_occ: OccupantRecord | undefined, asker: Asker) => boolean;
5
5
  declare const watching: (occ: OccupantRecord | undefined, asker: Asker) => boolean;
@@ -29,7 +29,7 @@
29
29
  // and what an occupant registered on the service placement. Nothing is read
30
30
  // from a file and nothing is set on the class, so a schedule outlives the
31
31
  // process the way every cell does, and is gone when it is dropped.
32
- import { Being, isSilence, isWord, wordOf, OWNER } from '@nervur-org/nervur';
32
+ import { Being, isSilence, isWord, wordOf, OWNER } from 'nervur';
33
33
  import { TIMER, join } from '../dock/index.js';
34
34
  // The root and nobody else. `OWNER` is one of the ward's own words, refused at
35
35
  // every mint, so no occupant can ever wear it: an ask gated this way is the
@@ -1,5 +1,5 @@
1
- import { Being } from '@nervur-org/nervur';
2
- import type { Invitation, JsonObject, OccupantRecord } from '@nervur-org/nervur';
1
+ import { Being } from 'nervur';
2
+ import type { Invitation, JsonObject, OccupantRecord } from 'nervur';
3
3
  export declare const MOVER = "mover";
4
4
  export type Moving = {
5
5
  world: string;
@@ -26,7 +26,7 @@
26
26
  // the shell holding this device when it is asked for, and what arrives goes
27
27
  // back to the shell, since a partition written into another ward's cells is
28
28
  // a copy nobody asked for.
29
- import { Being, isSilence, isWord, wordOf } from '@nervur-org/nervur';
29
+ import { Being, isSilence, isWord, wordOf } from 'nervur';
30
30
  // The id each end knows the other by for the length of one move.
31
31
  export const MOVER = 'mover';
32
32
  const HEX = /^(?:[0-9a-f]{2})+$/;
@@ -1,5 +1,5 @@
1
- import { Being } from '@nervur-org/nervur';
2
- import type { Asker, Blueprint, JsonObject, Reply, Stance } from '@nervur-org/nervur';
1
+ import { Being } from 'nervur';
2
+ import type { Asker, Blueprint, JsonObject, Reply, Stance } from 'nervur';
3
3
  export declare class Desk extends Being {
4
4
  static asks: {
5
5
  hello: {
@@ -49,5 +49,5 @@ export declare class Desk extends Being {
49
49
  kinds: string[];
50
50
  };
51
51
  send(args: JsonObject): Promise<JsonObject>;
52
- device(args: JsonObject): Promise<import("@nervur-org/nervur").Json>;
52
+ device(args: JsonObject): Promise<import("nervur").Json>;
53
53
  }
@@ -16,7 +16,7 @@
16
16
  // judges nothing here: she does not know what an address is, whether one was
17
17
  // sent to before, or what a link says. She keeps the ways in named in one
18
18
  // place, so a side that renders her renders every way into this world.
19
- import { Being, isSilence, isWord, wordOf } from '@nervur-org/nervur';
19
+ import { Being, isSilence, isWord, wordOf } from 'nervur';
20
20
  import { join } from '../dock/faculty.js';
21
21
  import { LOCAL } from '../dock/local.js';
22
22
  import { WAY, kindOf, verified } from './way.js';
@@ -1,5 +1,5 @@
1
- import { Being } from '@nervur-org/nervur';
2
- import type { Asker, JsonObject, OccupantRecord } from '@nervur-org/nervur';
1
+ import { Being } from 'nervur';
2
+ import type { Asker, JsonObject, OccupantRecord } from 'nervur';
3
3
  declare const isDevice: (occ: OccupantRecord | undefined) => boolean;
4
4
  declare const isWorld: (occ: OccupantRecord | undefined) => boolean;
5
5
  declare const isMaker: (occ: OccupantRecord | undefined) => occ is OccupantRecord;
@@ -67,7 +67,7 @@ export declare class Doorbell extends Being {
67
67
  for: typeof isWorld;
68
68
  };
69
69
  };
70
- describe(asker: Parameters<Being['describe']>[0]): import("@nervur-org/nervur").Blueprint;
70
+ describe(asker: Parameters<Being['describe']>[0]): import("nervur").Blueprint;
71
71
  claim(_args: JsonObject, asker: Asker): Promise<JsonObject>;
72
72
  keep(args: JsonObject): JsonObject;
73
73
  admit(_args: JsonObject): Promise<JsonObject>;
@@ -21,7 +21,7 @@
21
21
  // in. The device hands its banner key to a world itself, beside the
22
22
  // invitation to this doorbell, so a bell that held both halves of the
23
23
  // relation is a bell that could read a banner, and this one cannot.
24
- import { Being, isSilence, isWord, wordOf } from '@nervur-org/nervur';
24
+ import { Being, isSilence, isWord, wordOf } from 'nervur';
25
25
  const DEVICE = 'device';
26
26
  // Her standing at the box's push faculty, under an id of her own. The ward
27
27
  // knocks and takes it for her, and the invitation never reaches her.
@@ -1,5 +1,5 @@
1
- import { Being } from '@nervur-org/nervur';
2
- import type { Asker, AskSpec, JsonObject, OccupantRecord } from '@nervur-org/nervur';
1
+ import { Being } from 'nervur';
2
+ import type { Asker, AskSpec, JsonObject, OccupantRecord } from 'nervur';
3
3
  export declare const owner: (_rec: OccupantRecord | undefined, asker: Asker) => boolean;
4
4
  export declare const occupant: (rec: OccupantRecord | undefined) => boolean;
5
5
  export declare const places: (rec: OccupantRecord | undefined, asker: Asker) => boolean;
@@ -18,7 +18,7 @@
18
18
  // bytes checked before anything is parsed, the id kept bounded so a retry
19
19
  // lands once, `{ ok }` answered before the wake goes out, a wake that meets
20
20
  // silence written down and never retried.
21
- import { Being, isSilence, isWord, wordOf } from '@nervur-org/nervur';
21
+ import { Being, isSilence, isWord, wordOf } from 'nervur';
22
22
  // The two gates. The owner is the ward's ask pointer, `{ id: 'OWNER' }`,
23
23
  // which is how the daemon asks `deliver` and how the root places a
24
24
  // credential; an occupant is anyone holding a standing at her.
@@ -1,5 +1,5 @@
1
- import type { Hosted } from '@nervur-org/nervur/harbor';
2
- import type { Invitation } from '@nervur-org/nervur';
1
+ import type { Hosted } from 'nervur/harbor';
2
+ import type { Invitation } from 'nervur';
3
3
  import type { Avatar } from './avatar.ts';
4
4
  export declare function avatarOf(hosted: Hosted, identity: string): Promise<{
5
5
  avatar?: Avatar;
@@ -1,5 +1,5 @@
1
- import type { Invitation } from '@nervur-org/nervur';
2
- export declare const KEY = "quo";
1
+ import type { Invitation } from 'nervur';
2
+ export declare const KEY = "nervur";
3
3
  export declare const PROOF = "proof";
4
4
  export declare function format(inv: Invitation): string;
5
5
  export declare function parse(hash: string): Invitation | null;
@@ -1,4 +1,4 @@
1
- export const KEY = 'quo';
1
+ export const KEY = 'nervur';
2
2
  // The other reserved key: a proof, for a way in the world sent out itself.
3
3
  // A proof is not a capability into a ward, it is a word one door will trade
4
4
  // once for an invitation, and it rides in the fragment for the same reason:
@@ -15,7 +15,7 @@ export function format(inv) {
15
15
  // The invitation in a fragment, or null. Anything else in the fragment is
16
16
  // the page's own and is left alone.
17
17
  export function parse(hash) {
18
- const m = /(?:^#|&)quo=([^&]+)/.exec(hash.startsWith('#') ? hash : `#${hash}`);
18
+ const m = new RegExp(`(?:^#|&)${KEY}=([^&]+)`).exec(hash.startsWith('#') ? hash : `#${hash}`);
19
19
  if (!m)
20
20
  return null;
21
21
  const v = decodeURIComponent(m[1]);
@@ -55,7 +55,7 @@ export function proofLink(page, kind, token) {
55
55
  return `${page}#${PROOF}=${encodeURIComponent(`${kind}.${token}`)}`;
56
56
  }
57
57
  // The invitation as a human hands it over: the compact form, the whole link
58
- // it came in, or the JSON value `quo invite` printed. Wherever a person
58
+ // it came in, or the JSON value `nervur invite` printed. Wherever a person
59
59
  // types or pastes an invitation, this is what reads it, so the three forms
60
60
  // are one form everywhere.
61
61
  export function invitationOf(text) {
@@ -1,4 +1,4 @@
1
- import type { Blueprint, Json } from '@nervur-org/nervur';
1
+ import type { Blueprint, Json } from 'nervur';
2
2
  export type Hint = {
3
3
  title?: string;
4
4
  readOnly?: boolean;
@@ -1,5 +1,5 @@
1
- import { Being } from '@nervur-org/nervur';
2
- import type { JsonObject } from '@nervur-org/nervur';
1
+ import { Being } from 'nervur';
2
+ import type { JsonObject } from 'nervur';
3
3
  export declare class Porter extends Being {
4
4
  static cells: JsonObject;
5
5
  static asks: {
@@ -13,7 +13,7 @@
13
13
  // twice is two doorbells and no harm. A stranger who keeps knocking is the
14
14
  // harbor's, never hers and never the door's, and the count below is only so
15
15
  // that a loop in this session stops somewhere a human can see.
16
- import { Being, isSilence, isWord, wordOf } from '@nervur-org/nervur';
16
+ import { Being, isSilence, isWord, wordOf } from 'nervur';
17
17
  const ROOM = 64;
18
18
  export class Porter extends Being {
19
19
  static cells = { minted: 0 };
@@ -1,4 +1,4 @@
1
- import type { Asker, OccupantRecord, Stance } from '@nervur-org/nervur';
1
+ import type { Asker, OccupantRecord, Stance } from 'nervur';
2
2
  import { Avatar } from './avatar.ts';
3
3
  export declare class Presence extends Avatar {
4
4
  static carries(occupant: OccupantRecord | undefined, _asker: Asker): boolean;
@@ -1,3 +1,3 @@
1
- import type { Hosted } from '@nervur-org/nervur/harbor';
1
+ import type { Hosted } from 'nervur/harbor';
2
2
  export declare function setupHome(hosted: Hosted, user: string): Promise<void>;
3
3
  export declare function setup(hosted: Hosted, user: string, cls?: string): Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { Answer, Blueprint, Json, JsonObject, Wanted, WordName } from '@nervur-org/nervur';
1
+ import type { Answer, Blueprint, Json, JsonObject, Wanted, WordName } from 'nervur';
2
2
  import type { Avatar } from './avatar.ts';
3
3
  export type Serving = {
4
4
  close(): Promise<void>;
@@ -5,7 +5,7 @@
5
5
  // her one standing, and a push as a notification. Sides in this repository:
6
6
  // a screen, an MCP server, a runner, an event-driven agent. None knows
7
7
  // another exists, and none of this file names a platform.
8
- import { isSilence, isUnreached, isWord, wordOf } from '@nervur-org/nervur';
8
+ import { isSilence, isUnreached, isWord, wordOf } from 'nervur';
9
9
  export function word(answer) {
10
10
  if (isSilence(answer))
11
11
  return { word: 'silence' };
@@ -1,4 +1,4 @@
1
- import type { Asker, Blueprint, Invitation, JsonObject, OccupantRecord, Stance } from '@nervur-org/nervur';
1
+ import type { Asker, Blueprint, Invitation, JsonObject, OccupantRecord, Stance } from 'nervur';
2
2
  import { Carrier } from './carry.ts';
3
3
  export declare const DESK = "desk";
4
4
  export declare const BELL = "bell";
@@ -195,7 +195,7 @@ export declare class User extends Carrier {
195
195
  };
196
196
  hello(args: JsonObject, asker: Asker): Promise<{
197
197
  welcome: string | null;
198
- name: import("@nervur-org/nervur").Json;
198
+ name: import("nervur").Json;
199
199
  }>;
200
200
  wayBack(id: string, inv: Invitation): Promise<boolean>;
201
201
  whoami(_args: JsonObject, asker: Asker): {
@@ -208,7 +208,7 @@ export declare class User extends Carrier {
208
208
  pushed?: undefined;
209
209
  } | {
210
210
  error?: undefined;
211
- pushed: import("@nervur-org/nervur").Json;
211
+ pushed: import("nervur").Json;
212
212
  } | {
213
213
  unreached: boolean;
214
214
  rang: boolean;
@@ -7,7 +7,7 @@
7
7
  // client identity the desk established. A device she let mint brings the
8
8
  // next one in, so a human adds a device from a device already in and only
9
9
  // the first one has to come from the root, on the box.
10
- import { isInvitation, isSilence, isWord, wordOf } from '@nervur-org/nervur';
10
+ import { isInvitation, isSilence, isWord, wordOf } from 'nervur';
11
11
  import { Carrier } from './carry.js';
12
12
  import { PUSH, banner, isToken, join, sealBanner } from '../dock/index.js';
13
13
  export const DESK = 'desk';