Skip to content

VAF v0.1.0a23

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 16 Aug 22:24
· 72 commits to main since this release

Added

  • A harness with no VAF at all can join a room now. Every invitation with a
    wire endpoint carries a section for exactly that guest: the room host serves
    a single-file client (/api/a2a/client.py, Python standard library only, no
    install) together with its authority (/api/a2a/ca.pem), and the invitation
    itself carries the file's sha256 and the CA fingerprint - checking those two
    numbers is what makes the unverified downloads safe. The client pins the
    authority, redeems the ticket, keeps the seat, and speaks join, read,
    wait, say, answer, report and leave. It lives in the repository as
    examples/12_a2a_wire_peer.py, imports nothing from VAF, and is tested
    against an independent WebSocket implementation - so the protocol's claim
    that the document alone is enough to build from now covers the transport,
    not only the rules.
  • A held line into a remote agent room: vaf a2a session. The CLI is one
    process per command, and the wire punished that shape: the writer lease from
    each dropped connection blocked the next one for up to 90 seconds, so five of
    seven messages from the first cross-machine peer never arrived. The session
    holds one connection and turns it into files - incoming messages append to an
    inbox as they are pushed, anything dropped into the outbox folder is sent on
    the held line and acknowledged beside it, and a failed send keeps its file
    instead of losing the message. One session per room; a second start names the
    first one's pid. Runs in the foreground, or detached with --background.

Fixed

  • A hung worker says where it hangs. One background worker took a task and
    never finished it; for three hours the queue looked empty while half the
    agent was gone, and the stuck thread's stack died with the process. A task
    held past five minutes now writes one loud log line and a dump of every
    thread's stack to its own log file, so the next hang can be diagnosed instead
    of guessed at.
  • A room answer cannot vanish any more. An agent asked a direct question in
    its room wrote a finished reply as plain text instead of through the room
    tool - and the reply was silently discarded, which read as the agent being
    dead. A room turn's plain-text answer is now delivered into the room, once,
    and only when the turn did not already send one properly.
  • A remote peer can hear now, not just talk. read, members and log
    answered "there is no room on this machine" for rooms joined over the wire,
    while the sending verbs worked - so the first cross-machine agent spoke into
    a room for an hour without seeing that the same urgent question had been put
    to it three times. All three answer for remote rooms now, from the session's
    mirror when one runs and over the wire otherwise. What the wire cannot know
    stays honest: a remote roster reports liveness as unknown rather than marking
    everyone who is merely far away as absent.
  • The invitation names a port somebody actually listens on. 443 is
    privileged, a desktop VAF falls back to 8443 by design - and the invitation
    was built from the configuration alone, so the first field join dialled a
    port nothing listened on and cost twenty minutes of port-scanning against a
    perfectly correct certificate fingerprint. The invitation now asks the
    running server for the real port, and when no server can confirm one it says
    the port is a guess and what to do about it, instead of asserting it.
  • The agent learns from a room every fifteen things people SAY, not every
    fifteen protocol frames.
    A room produces bookkeeping alongside every
    visible message - pings to quiet members, joins, vote tallies - so "every 15
    messages" fired every two to three of the owner's messages in a three-voice
    room, exactly as observed. The learning interval now counts spoken
    contributions only.