Parent: #45
Blocked by: P3 above
Refined during planning: presence is a gossip-frame extension, not a separate mechanism. gossip-frame's peer-advert already carries snapshot-seconds; extend it with an open extension bag (mirroring token-claims' own * tstr => any pattern) carrying status (active/idle/busy) and whatever else a peer wants to advertise about itself, plus periodic re-advertisement. list_agents/list_rooms read this the same way they'd read any other gossiped fact.
Foundational wire-mesh piece landed: ExaDev/wire-mesh#91 opens peer-advert's own extension tail (the same * tstr => any pattern token-claims already carries) and adds MeshSession.sendGossipUpdate(extensions?), which re-sends a fresh self-advert with given extensions merged in -- the mechanism periodic re-advertisement needs, since the initial self-advert wireUpConnection sends at connect time is otherwise never repeated. No timer lives inside MeshSession itself; the caller (agent-comms) owns its own re-advertisement cadence.
Remaining for P4, once #91 merges and a new wire-mesh-core version publishes: agent-comms' own periodic re-advertisement loop (calling sendGossipUpdate on some interval with {status: agent.status}), consuming the status extension field off each connected peer's own advert (via WireMeshTransport's own peer-directory access) to drive list_agents/list_rooms' own presence display, and deciding the actual re-advertisement interval.
Parent: #45
Blocked by: P3 above
Refined during planning: presence is a gossip-frame extension, not a separate mechanism. gossip-frame's peer-advert already carries snapshot-seconds; extend it with an open extension bag (mirroring token-claims' own * tstr => any pattern) carrying status (active/idle/busy) and whatever else a peer wants to advertise about itself, plus periodic re-advertisement. list_agents/list_rooms read this the same way they'd read any other gossiped fact.
Foundational wire-mesh piece landed: ExaDev/wire-mesh#91 opens peer-advert's own extension tail (the same
* tstr => anypattern token-claims already carries) and addsMeshSession.sendGossipUpdate(extensions?), which re-sends a fresh self-advert with given extensions merged in -- the mechanism periodic re-advertisement needs, since the initial self-advertwireUpConnectionsends at connect time is otherwise never repeated. No timer lives inside MeshSession itself; the caller (agent-comms) owns its own re-advertisement cadence.Remaining for P4, once #91 merges and a new wire-mesh-core version publishes: agent-comms' own periodic re-advertisement loop (calling sendGossipUpdate on some interval with
{status: agent.status}), consuming thestatusextension field off each connected peer's own advert (via WireMeshTransport's own peer-directory access) to drive list_agents/list_rooms' own presence display, and deciding the actual re-advertisement interval.