openenv / docs /sentinel /assets /sentinel-protocol-serving.svg
sentinel-space-publisher
space: publish latest Sentinel app snapshot
c452421
<svg xmlns="http://www.w3.org/2000/svg" width="1550" height="760" viewBox="0 0 1550 760" role="img" aria-labelledby="title desc">
<title id="title">SENTINEL protocol and serving architecture</title>
<desc id="desc">SENTINEL serving diagram showing clients, Hugging Face Space, Docker, FastAPI, OpenEnv routes, MCP server, A2A server, and the core SENTINEL environment.</desc>
<defs>
<marker id="arrow" markerWidth="13" markerHeight="10" refX="11" refY="5" orient="auto">
<path d="M0,0 L13,5 L0,10 Z" fill="#334155"/>
</marker>
<style>
.title{font:700 33px Arial,sans-serif;fill:#111827}
.label{font:700 16px Arial,sans-serif;fill:#111827}
.small{font:13px Arial,sans-serif;fill:#334155}
.box{stroke:#334155;stroke-width:2;rx:12;ry:12}
.outer{stroke:#94a3b8;stroke-width:1.6;rx:18;ry:18;fill:#ffffff}
.arrow{stroke:#334155;stroke-width:2.2;fill:none;marker-end:url(#arrow)}
</style>
</defs>
<rect width="1550" height="760" fill="#f8fafc"/>
<text x="55" y="58" class="title">Protocol + Serving Layer: OpenEnv, HTTP, MCP, A2A, Docker, HF Space</text>
<text x="55" y="90" class="small">SENTINEL is not only a notebook. The same core environment is exposed through multiple agent and evaluation protocols.</text>
<rect x="55" y="145" width="250" height="120" class="box" fill="#dbeafe"/>
<text x="180" y="180" text-anchor="middle" class="label">External Users</text>
<text x="180" y="210" text-anchor="middle" class="small">OpenEnv evaluator</text>
<text x="180" y="232" text-anchor="middle" class="small">agent clients</text>
<text x="180" y="254" text-anchor="middle" class="small">demo/browser/API calls</text>
<rect x="55" y="335" width="250" height="120" class="box" fill="#e0f2fe"/>
<text x="180" y="370" text-anchor="middle" class="label">Deployment Shell</text>
<text x="180" y="400" text-anchor="middle" class="small">Dockerfile</text>
<text x="180" y="422" text-anchor="middle" class="small">Hugging Face Space</text>
<text x="180" y="444" text-anchor="middle" class="small">openenv.yaml metadata</text>
<rect x="380" y="105" width="360" height="555" class="outer"/>
<text x="560" y="140" text-anchor="middle" class="label">Server Boundary</text>
<rect x="420" y="180" width="280" height="82" class="box" fill="#fef3c7"/>
<text x="560" y="212" text-anchor="middle" class="label">FastAPI app</text>
<text x="560" y="238" text-anchor="middle" class="small">app.py / health / dashboard</text>
<rect x="420" y="305" width="280" height="82" class="box" fill="#dcfce7"/>
<text x="560" y="337" text-anchor="middle" class="label">Native OpenEnv routes</text>
<text x="560" y="363" text-anchor="middle" class="small">/openenv/reset / step / state</text>
<rect x="420" y="430" width="280" height="82" class="box" fill="#ede9fe"/>
<text x="560" y="462" text-anchor="middle" class="label">MCP server</text>
<text x="560" y="488" text-anchor="middle" class="small">server/mcp_server.py tools</text>
<rect x="420" y="555" width="280" height="82" class="box" fill="#fce7f3"/>
<text x="560" y="587" text-anchor="middle" class="label">A2A protocol server</text>
<text x="560" y="613" text-anchor="middle" class="small">server/a2a_server.py agent card</text>
<rect x="830" y="210" width="300" height="160" class="box" fill="#fee2e2"/>
<text x="980" y="248" text-anchor="middle" class="label">Universal Adapter</text>
<text x="980" y="280" text-anchor="middle" class="small">normalizes protocol calls</text>
<text x="980" y="305" text-anchor="middle" class="small">into reset / step / state</text>
<text x="980" y="330" text-anchor="middle" class="small">and structured observations</text>
<rect x="1210" y="190" width="260" height="210" class="box" fill="#ecfccb"/>
<text x="1340" y="232" text-anchor="middle" class="label">Core SENTINEL Env</text>
<text x="1340" y="264" text-anchor="middle" class="small">sentinel/environment.py</text>
<text x="1340" y="289" text-anchor="middle" class="small">workers + trust + memory</text>
<text x="1340" y="314" text-anchor="middle" class="small">constitution + reward</text>
<text x="1340" y="339" text-anchor="middle" class="small">multi-crisis command</text>
<rect x="1210" y="480" width="260" height="120" class="box" fill="#e0e7ff"/>
<text x="1340" y="518" text-anchor="middle" class="label">Artifacts</text>
<text x="1340" y="548" text-anchor="middle" class="small">audit logs, metrics</text>
<text x="1340" y="572" text-anchor="middle" class="small">proof pack, dashboard</text>
<path class="arrow" d="M305 205 H415"/>
<path class="arrow" d="M305 395 C350 395,365 346,415 346"/>
<path class="arrow" d="M700 221 H825"/>
<path class="arrow" d="M700 346 H825"/>
<path class="arrow" d="M700 471 H825"/>
<path class="arrow" d="M700 596 C790 596,790 345,825 345"/>
<path class="arrow" d="M1130 290 H1205"/>
<path class="arrow" d="M1340 400 V475"/>
</svg>