Spaces:
Sleeping
Sleeping
File size: 8,432 Bytes
8d60e33 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 |
{% extends "base.html" %}
{% block body %}
<div class="card" style="padding:28px">
<div class="hero" style="display:grid; gap:14px;">
<div class="badge">MatrixHub • A2A Verification</div>
<h1 style="margin:0">MatrixHub</h1>
<p class="lede">
MatrixHub uses <strong>A2A agents</strong> and <strong>MCP servers</strong> to deliver
plug-and-play building blocks for <em>multi-agent applications</em>. This instance ships
a compact <strong>A2A Validator</strong> UI so you can quickly connect to agents,
inspect their <em>Agent Card</em>, and validate protocol compliance.
</p>
<div class="cta">
<a class="btn" href="/validator">Open Validator</a>
</div>
<div class="meta">
<span class="chip">Product: MatrixHub Validator</span>
<span class="chip">Version: {{ request.app.version }}</span>
<span class="chip">Endpoints: /validator · /agent-card · /healthz · /readyz</span>
</div>
</div>
</div>
<div class="grid">
<div class="card feature">
<div class="icon">🤝</div>
<h3>What is A2A?</h3>
<p>
<strong>A2A (Agent-to-Agent)</strong> is a simple, open protocol that lets independently
built AI agents talk to each other over the web. It standardizes three things:
</p>
<div class="list">
<div>• <strong>Discovery</strong> — every agent publishes an <em>Agent Card</em> (JSON) with
name/description/version, capabilities (e.g. streaming), skills, and default IO modes.
Think of it like “openapi.json” for agents.</div>
<div>• <strong>Messaging</strong> — structured events over HTTP/JSON-RPC (and optionally websockets):
<code>message</code>, <code>task</code>, <code>status-update</code>, <code>artifact-update</code>;
supports streaming; carries metadata for auth/tenancy.</div>
<div>• <strong>Interop rules</strong> — content types, IDs, correlation, and validation
so different frameworks can compose cleanly.</div>
</div>
<p style="margin-top:8px">
<strong>Why it matters:</strong> interoperability, discoverability, portability, safety/compliance,
and composability (fan-out, tools-as-agents) with consistent IDs and streaming.
</p>
</div>
<div class="card feature">
<div class="icon">🧭</div>
<h3>Where MatrixHub fits</h3>
<p>MatrixHub is the “registry + utilities” layer for A2A:</p>
<div class="list">
<div>• <strong>Directory/Catalog:</strong> publish & discover A2A-compatible agents by skill, version, trust.</div>
<div>• <strong>Validation & QA:</strong> lint Agent Cards and live endpoints (what this Validator UI does).</div>
<div>• <strong>Routing/Relay:</strong> optional proxy for CORS, auth, rate-limits, observability.</div>
<div>• <strong>Dev Experience:</strong> templates, SDKs, and “try it” UIs for quick local testing.</div>
<div>• <strong>Governance:</strong> versions, deprecation, and optional signing (provenance & trust).</div>
</div>
<p style="margin-top:8px">
Think of MatrixHub as the connective tissue that makes A2A practical at team/org scale.
</p>
</div>
<div class="card feature">
<div class="icon">🧩</div>
<h3>A2A on MCP servers</h3>
<p>
MCP is great for wiring <em>tools</em> to <em>clients</em> (e.g., editor ↔ tools). A2A complements MCP for
agent↔agent federation across domains:
</p>
<div class="list">
<div>• <strong>Expose MCP tools as A2A skills:</strong> publish an Agent Card; other agents can discover/call them.</div>
<div>• <strong>Cross-ecosystem calls:</strong> LLM agents, workflows, or other MCP servers invoke via A2A without speaking MCP.</div>
<div>• <strong>Uniform messaging:</strong> map MCP tool calls to A2A <code>message</code>/<code>task</code> and use A2A streaming.</div>
<div>• <strong>Catalog integration:</strong> MatrixHub indexes your MCP server by its Agent Card for discovery & testing.</div>
</div>
<p style="margin-top:8px">
Net effect: MCP stays your local tool bridge; A2A turns it into an internet-addressable agent other agents can compose with.
</p>
</div>
</div>
<div class="card arch">
<h3 style="margin-top:0">What this program does now</h3>
<div class="diagram">
<div class="lane">
<div class="box user">You</div>
<div class="arrow">/validator</div>
<div class="box ai">MatrixHub Validator</div>
<div class="arrow">/agent-card</div>
<div class="box svc">Target Agent (A2A)</div>
</div>
</div>
<div class="quick">
<p><strong>Summary:</strong> This instance exposes a lightweight A2A Validator:</p>
<div class="list" style="margin-top:6px">
<div>• <strong>Validator UI</strong> at <code>/validator</code> — connect to an agent URL, fetch & validate its Agent Card.</div>
<div>• <strong>Alias</strong> <code>POST /agent-card</code> → <code>/validator/agent-card</code> (frontend default).</div>
<div>• <strong>Health</strong> endpoints: <code>/healthz</code>, <code>/readyz</code>.</div>
<div>• <strong>Socket.IO</strong> mounted at <code>/socket.io</code> (used for debug logs & future streaming).</div>
<div>• RAG/Chat/Plan routes are disabled here to keep the focus on A2A verification.</div>
</div>
<details style="margin-top:10px">
<summary>Quick start (local)</summary>
<pre><code># Run the service
uvicorn app.main:app --host 0.0.0.0 --port 7860
# Open the Validator UI
# → http://localhost:7860/validator
# (Optional) Resolve an Agent Card directly (server alias)
curl -s -X POST http://localhost:7860/agent-card \
-H 'content-type: application/json' \
-d '{"url":"https://example.com/.well-known/agent.json","sid":"debug"}' | jq</code></pre>
</details>
</div>
</div>
<style>
.hero .badge{
display:inline-block; font-size:12px; letter-spacing:.06em;
color:#002f1b; background:linear-gradient(180deg,#00ff9c,#00c97e);
border-radius:999px; padding:6px 10px; font-weight:700;
box-shadow:0 6px 24px rgba(0,255,156,.25);
}
h1 { font-family:"Share Tech Mono", monospace; color:var(--matrix); letter-spacing:.03em; }
.lede { font-size:16px; opacity:.95; max-width:64ch; }
.cta { display:flex; gap:10px; margin-top:4px; flex-wrap:wrap; }
.btn {
display:inline-block; text-decoration:none; padding:10px 14px; border-radius:12px;
font-weight:700; font-family:"Share Tech Mono", monospace; letter-spacing:.03em;
background:linear-gradient(180deg,#00ff9c,#00c97e); color:#032215;
box-shadow:0 6px 20px rgba(0,255,156,.25);
}
.btn.ghost { background:#0b1a12; color:var(--muted); border:1px solid var(--border); box-shadow:none; }
.btn:hover { filter:brightness(1.05); }
.meta { display:flex; gap:10px; flex-wrap:wrap; margin-top:6px; }
.chip {
font-size:12px; border:1px solid var(--border); border-radius:999px;
padding:4px 10px; background:#061006a6;
}
.grid {
margin:22px auto; display:grid; gap:16px;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.feature .icon { font-size:22px; margin-bottom:4px; }
.feature .list { margin-top:6px; opacity:.9; font-size:14px; display:grid; gap:4px; }
.arch { margin-top:18px; }
.diagram { margin-top:8px; display:grid; gap:8px; }
.lane { display:flex; gap:10px; align-items:center; flex-wrap:wrap; }
.box {
padding:8px 10px; border-radius:10px; border:1px solid var(--border);
background:#020a04; font-family:"Share Tech Mono", monospace; font-size:13px;
}
.svc { box-shadow:0 0 0 1px rgba(0,255,156,.08); }
.ai { box-shadow:0 0 0 1px rgba(0,255,156,.12); }
.user{ box-shadow:0 0 0 1px rgba(0,255,156,.08); }
.arrow { opacity:.7; font-family:"Share Tech Mono", monospace; }
.quick { margin-top:8px; display:grid; gap:8px; }
details { border:1px solid var(--border); border-radius:12px; padding:8px 10px; background:#06100680; }
details summary { cursor:pointer; user-select:none; color:var(--muted); }
pre { margin:8px 0 0; }
</style>
{% endblock %}
|