+Witnessed messaging (receipts ledger): every ack now writes a timestamped receipt keyed (message, agent, action). New `receipt` MCP tool writes non-consuming annotations (seen, r-ack, retracted, …) and new `get_receipts` returns the full trail for a message: who saw it, who acted on it, when. Ledger schema v2 with automatic migration — v1 acknowledged flags are backfilled as receipts, so existing audit history has no gap.
+Fleet broadcast: send_message accepts to_agent_id: "*", delivering to every other agent in the fleet. Recipient list is resolved and captured at send time; SSE push notifies every recipient; each recipient acks independently, and `acknowledged` becomes true only when all have acked. send_message now returns `recipients` alongside `message_id`.
Changed
~Message.acknowledged is now a derived field (true when every addressed recipient holds an ack receipt). Existing single-recipient behavior is unchanged.
v0.8.7
Added
+Fleet dashboard TUI: npx agent-mesh-dashboard (or npx agent-mesh dashboard) shows live fleets, recent agents (with retry counts), and recent events. Refreshes every 1s (configurable via --interval). ANSI in-place updates. Ctrl+C to exit.
v0.8.6
Added
+Fleet template sharing: exportFleetTemplate(name, file_path, version?) writes a portable meshfleet-template-v1 JSON. importFleetTemplate(file_path, rename?) reads, validates the schema, and inserts (auto-suffix on conflict).
v0.8.5
Added
+Fleet template versioning: re-saving a template now creates a new version (auto-increment) instead of overwriting. getFleetTemplate(name, version?) returns latest or specific. listFleetTemplateVersions(name) and deleteFleetTemplate(name, version?) round out the API. FleetTemplate interface gained a 'version' field.
v0.8.4
Added
+Performance benchmarks: benchmark/bench.ts + BENCHMARKS.md. v1.0 gates met — spawn bookkeeping 6.4ms p50 (target <100ms), 10k messages persisted without drops. Known bottleneck: sendMessage rewrites the full ledger (~3.8ms/msg at 10k scale); batch writes are a v0.9+ follow-up.
v0.8.3
Added
+Synonym expansion (lightweight semantic routing): new src/synonyms.ts module with a curated table for 30+ dev terms. route_work now expands 'ui' to also match a frontend agent, 'db' to match a database agent, etc. Zero network cost, no ML dep. Override via setSynonymOverrides().
v0.8.2
Added
+Routing feedback loop: new record_routing_outcome(agent_id, capability_key, success) MCP tool. Future route_work matches weight their score by accumulated outcomes (Wilson-style). RouteMatch.weight field added.
v0.8.1
Added
+Skill taxonomy (hierarchical matching): new src/skill-taxonomy.ts module. Loads a JSON hierarchy like { frontend: { react: ['nextjs', 'remix'] } } and matches keywords against ancestors and descendants with decaying weight. Wire into route_work in v0.9.
v0.8.0
Added
+Automatic retry with exponential backoff: agents that fail transiently (non-zero exit, heartbeat watchdog, timeout, spawn error) are respawned up to 3 times with 1s/2s/4s + ±20% jitter; permanent failure after exhaustion; configurable via AGENT_MESH_RETRY_BASE_MS
+Partial result recovery on startup: recoverInterruptedAgents() flips agents stuck in 'running' to a new 'interrupted' status with a clear error message — no more stale fleet_status after a crash
+Ledger schema versioning: every save stamps schema_version: 1; migrateLedger() upgrades v0 ledgers on load
+route_work top_n parameter: fan out work to the N best-scoring agents; stable tie-break by agent_id
+Real-time inbox push via SSE: subscribe_inbox(agent_id) MCP tool returns a stream URL agents can connect to for real-time push of incoming P2P messages
+Standalone HTTP SSE server on port 13579 (MESHFLEET_SSE_PORT) serving GET /inbox/:agent_id/stream with heartbeat comments every 30s
+src/realtime.ts: subscriber registry with per-agent connection cap (default 5), backpressure handling, SSE formatting
+src/sse-server.ts: HTTP server with per-agent cap, heartbeat, graceful shutdown
+notifySubscribers hooked into send_message handler so every new message pushes to active SSE clients
+15 new unit tests for the realtime module (90 total, all passing)
+Bumped version to 0.7.0
Changed
~Startup log now reports the SSE port when the HTTP server starts successfully