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 %}