← Commit history

docs/mesh: merge the Hydrogen, limits and verb sections back in

John Lauer ·e32275a133 ·1mo ago ·parent eadf39b
1 file changed +57−9
docs/mesh.md+57−9
@@ -151,8 +151,9 @@ raises one card**, and only a person can answer it: - clicking it in Adom Bridge's own window, or - answering the mirrored copy that appeared on another of your machines. -There is no verb that approves a join. An AI can list trust records and it can-revoke or deny one, but approving is human-only, permanently. A decision made on+There is no verb that approves a join. An AI can list trust records, re-`raise` a+card a human has not got to yet, and revoke or deny one, but approving is+human-only, permanently. A decision made on one machine is carried to your other trusted machines over the mesh itself, so one click settles the fleet and the duplicate cards disappear. @@ -231,6 +232,38 @@ machine:  ![The permission stack showing one request from another machine and one from this machine](docs/mesh/permission-stack.png) +## In Hydrogen: the cards show up where you are looking++When Adom Bridge runs embedded under Hydrogen, the human is looking at Hydrogen, not at Adom+Bridge's window and, if toasts are hidden or Do Not Disturb is on, not at a toast either. So every+card is forwarded to Hydrogen's permission dialog:++- **A local prompt** (an AI asking to run something on this machine) has always been forwarded.+- **A prompt from another of your boxes** is forwarded too since 2.1.74. Before that, a cross-box+  card stopped at Adom Bridge's own window and a Windows toast, and Hydrogen never showed it: you+  could see "Permission request on winvm, open Adom Bridge to decide it here" and find nothing in+  Hydrogen. Now the same card, with the machine chip, renders in Hydrogen on every box you have it+  open on, and deciding it there (2.1.75) routes the decision back to the origin with the nonce,+  the same path a click in Adom Bridge takes.+- **Dismissals are forwarded as well.** When the origin decides, expires, or drops a prompt,+  Hydrogen's copy on every other box goes down with it. A mirrored card nobody answers is dropped+  from the receiving box after 330 seconds (the same cap Hydrogen applies), so a stack never+  fills with prompts that can no longer be answered.+- **The join card for a new mesh machine** is forwarded the same way, and re-raised as described+  above until a human decides.+- **Plain toasts reach Hydrogen too (2.1.77).** A toast with nothing to decide ("export done", a+  bridge's "library imported", "Hydrogen was restarted by ...") is shown to Hydrogen as one of its+  own toasts, with the origin box named when it came from another of your machines (subject to+  `cross_box_toasts`, exactly as the Windows toast is).++The reliable surface is the dialog, in Hydrogen or in Adom Bridge's window. A Windows toast is a+courtesy: on a fresh Windows 11 install Do Not Disturb stays on until the one-time "Allow important+notifications from Adom Bridge" prompt is answered, and until then a toast folds into the+notification center unseen. `GET /status` on the loopback API reports this as+`notifications.mayBeSuppressed` (2.1.73), so an AI that raised a prompt can tell you to look at+the dialog instead of waiting for a toast, and `notification_settings_open` opens the Windows page+where the permission is granted. Adom Bridge never grants that permission for itself.+ ### How a decision is safe  A mirrored card is a grant path, so it is locked down.@@ -276,15 +309,18 @@ card everywhere.  --- -## Verbs+## Verbs and settings -| Verb | What it does |+| Surface | What | |---|---|-| `desktop_mesh_status` | mode, running, node ID, relay, endpoints, phase |-| `desktop_mesh_peers` | the machines in your directory, with link path and trust |-| `desktop_mesh_trust` | `list`, `revoke`, `deny`. There is no approve: that is human-only |-| `desktop_ui_panel {panel:"mesh"}` | open the Mesh view |-| `settings_set {mesh_mode}` | change mode; the endpoint is rebound live |+| `desktop_mesh_status` | this box: node id, mode, relay, endpoints, counters; also re-raises any pending join card older than 330 s |+| `desktop_mesh_peers` | every same-account box: reach, link (transport, encryption, RTT, bytes), version, trust |+| `desktop_mesh_trust` | `list`, `raise` (2.1.74), `revoke`, `deny`; never approve |+| `desktop_ui_panel {"panel": "mesh"}` | open the Mesh view |+| `settings_set {"mesh_mode": "off" \| "relay" \| "direct"}` | the mode; `mesh_enabled: true` means `direct` |+| `settings_set {"cross_box_toasts": "prompts" \| "decisions" \| "all"}` | how much plain toast traffic crosses boxes |+| `GET /status` -> `notifications.mayBeSuppressed` | whether a toast on this box may go unseen |+| `POST /permission/resolve {id, decision}` | how Hydrogen decides a card; a `remote:<peer>:<id>` id is routed back to the origin (2.1.75), and `/permission/state` lists those ids as pending so Hydrogen keeps the card up |  Addressing a machine is the same as ever: `--target <name>`. When the mesh has a route it is used, and the cloud relay is the fallback. `targets` tells you which@@ -292,6 +328,18 @@ path each machine is on.  --- +## What it cannot do yet++- **Direct paths across different networks.** Two boxes behind different NATs talk through the+  Adom mesh relay (still end-to-end encrypted). Hole punching needs a UDP-reachable relay host+  and is not on yet; a box on the same network as you connects directly in `direct` mode.+- **Other accounts.** The mesh is one account. Pairing a work account with a personal one is+  planned, not shipped.+- **Containers as full nodes.** Your Hydrogen containers are drawn under their parent box and are+  reachable through it; they do not yet hold their own node keys.++---+ ## If something is not working  - **A machine is missing from the Mesh view.** Its directory entry may be stale.