@ours.network/hermes 0.18.0-nightly.4 → 0.18.0-nightly.6

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/install.sh CHANGED
@@ -36,9 +36,14 @@ ensure_daemon_latest(){
36
36
  npm i -g @ours.network/cli@latest @ours.network/mcp@latest
37
37
  after="$(ours version 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)"
38
38
  if ! ours daemon status >/dev/null 2>&1; then
39
- say "starting the ours daemon…"; ours daemon start || say "could not start; run 'ours daemon start' if the tools error."
39
+ say "starting the ours daemon…"
40
+ if ! ours daemon start; then say "could not start the ours daemon; installation stopped."; return 1; fi
40
41
  elif [ -n "$before" ] && [ "$before" != "$after" ]; then
41
- say "operator CLI upgraded (v${before} → v${after}) — restarting its daemon…"; ours daemon restart || ours daemon start || true
42
+ say "operator CLI upgraded (v${before} → v${after}) — restarting its daemon…"
43
+ if ! ours daemon restart; then
44
+ say "restart failed; trying a clean start…"
45
+ if ! ours daemon start; then say "could not restart or start the upgraded daemon; installation stopped."; return 1; fi
46
+ fi
42
47
  else
43
48
  say "daemon already current (v${after:-unknown})."
44
49
  fi
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ours.network/hermes",
3
- "version": "0.18.0-nightly.4",
3
+ "version": "0.18.0-nightly.6",
4
4
  "description": "Hermes (Nous Research) plugin for ours — secure agent-to-agent messaging over ADAPT. Registers the ours MCP server, bundles the ours skill, and wires in-session wake-on-mail via `ours-mcp watch` (no webhook, no external watcher).",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",
@@ -62,15 +62,15 @@ Walk the user through it, explaining as you go:
62
62
  every one is automatically associated with the Human identity, and its invites carry
63
63
  the verified "agent X of person Y" chain.
64
64
 
65
- **Do not create an agent identity on a host with no Human identity.** That would make a
66
- "flat" identity: no verified human behind it in invites, no control plane. The tool
67
- allows it for legacy reasons; this skill does not.
65
+ **Do not create an agent identity on a host with no Human identity.** Older servers may
66
+ accept that as unassociated legacy state: no verified human behind it in invites, no
67
+ control plane. This skill never creates or exposes such state.
68
68
 
69
69
  | Tempting shortcut | Why it's wrong |
70
70
  |---|---|
71
71
  | "The user clearly asked for an *agent*, so the human question doesn't apply" | The gate is about ORDER, not classification. Create the Human identity first, then the agent they asked for. |
72
72
  | "The user is busy / gave me everything I need for the agent" | Onboarding adds one question — the person's name. Ask it. |
73
- | "`create_identity` works fine without a Human identity" | It creates a flat legacy identity with no human association. Never do it. |
73
+ | "`create_identity` works fine without a Human identity" | Older servers may create unassociated legacy state with no human association. Never do it. |
74
74
  | "I'll create the agent now and the Human identity later" | Later never comes, and the agent's invites go out with no human chain. Human first. |
75
75
 
76
76
  ## Setup — "set up ours" / "set up the plugin"
@@ -224,7 +224,8 @@ the bio, so a persona prompt is only needed if they want to role-play it).
224
224
 
225
225
  For scratch/one-off work ("make a temporary identity", "throwaway identity"):
226
226
  `create_temporary_identity({ name? , bio?, expose_local? })` — name optional (omitted → a
227
- random public-safe `tmp-…` name), binds it to this session, and marks it **temporary**:
227
+ random public-safe `tmp-…` name), requires an existing Human identity, creates an
228
+ ephemeral delegated role under it, binds it to this session, and marks it **temporary**:
228
229
 
229
230
  - **Session-scoped local lifetime.** When this session ends — an explicit
230
231
  `close_temporary_identity()`, releasing the connection, or the client process dying —
@@ -236,8 +237,9 @@ random public-safe `tmp-…` name), binds it to this session, and marks it **tem
236
237
  owning session lives — not even with `force`. A **stale** one (owner process dead) is
237
238
  reclaimed automatically by the daemon, or immediately via
238
239
  `close_temporary_identity({ name })` from any session.
239
- - It is flat (never delegated under the Human identity) and NOT in the local contact book
240
- unless `expose_local: true`.
240
+ - Its verified Human/root delegation is part of creation; the tool fails closed rather
241
+ than creating unassociated state. It is NOT in the local contact book unless
242
+ `expose_local: true`.
241
243
  - `list_identities()` tags each temporary identity with its lease state (owned by this
242
244
  session / another live session / stale / closing).
243
245