a11oy / web /hologram.html
betterwithage's picture
deploy(hf): sync szl-holdings/a11oy@main derived COPY set
34baeda verified
Raw
History Blame
36.4 kB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"/>
<title>SZL Holographic Command Bridge — living agentic-GPU organism</title>
<meta name="description" content="A 3D holographic command bridge for the SZL agentic-GPU organism: the RTX 5000 @ betterwithage as the MIND core, six proven round9 organs (BRAIN/HEART/BLOOD/IMMUNE/SKELETON/NERVOUS) orbiting and pulsing when active, energy-flow particles streaming from energy sources to the core (colored by source), and the consent-only swarm as a constellation. Reads the REAL endpoints (/code/healthz, /v1/energy/budget, organ probes). HONEST: sovereign glow only when /code/healthz says sovereign:true; energy figures are SAMPLE/ESTIMATE; Λ trust = Conjecture 1; unreachable organs render dim/unknown — no fabricated data. Three.js r128 vendored locally (NO CDN)."/>
<style>
:root{
--bg0:#03060c; --bg1:#06101e; --ink:#dbe7ff; --dim:#7e93b8; --line:#16243c;
--green:#34f5b0; --amber:#ffcb57; --red:#ff5d73; --grey:#5d6e8c;
--teal:#39d7ff; --violet:#b98cff; --gold:#ffd66e;
--solar:#ffd24a; --wind:#5ad6ff; --hydro:#36b6ff; --flare:#ff7a3c; --grid:#9aa6bd;
--mono:ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;
--sans:Inter,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg0);color:var(--ink);font-family:var(--sans);overflow:hidden}
#stage{position:fixed;inset:0;display:block}
/* HUD overlay */
.hud{position:fixed;pointer-events:none;font-family:var(--mono);text-shadow:0 1px 8px #000a}
.hud b{font-weight:600}
#title{top:18px;left:22px;max-width:46vw;pointer-events:auto}
#title h1{margin:0;font-size:16px;letter-spacing:.14em;color:var(--ink);font-weight:600}
#title .sub{margin-top:4px;font-size:11px;color:var(--dim);letter-spacing:.04em;line-height:1.5}
.badge{display:inline-block;margin-top:8px;padding:3px 8px;border:1px solid var(--line);border-radius:999px;
font-size:10px;letter-spacing:.08em;color:var(--dim);background:#0a1422aa}
/* mind posture card */
#mind{top:18px;right:22px;width:300px;border:1px solid var(--line);border-radius:14px;
background:linear-gradient(180deg,#0a1626dd,#060d18ee);padding:14px 16px;pointer-events:auto;backdrop-filter:blur(4px)}
#mind .row{display:flex;justify-content:space-between;gap:10px;font-size:12px;padding:3px 0;border-bottom:1px dashed #13203660}
#mind .row:last-child{border-bottom:0}
#mind .k{color:var(--dim)}
#mind .v{color:var(--ink);text-align:right}
.pill{display:inline-block;padding:2px 9px;border-radius:999px;font-size:11px;font-weight:600;letter-spacing:.04em}
.pill.green{background:#0c3a2c;color:var(--green);box-shadow:0 0 14px #34f5b055}
.pill.amber{background:#3a2e0c;color:var(--amber)}
.pill.red{background:#3a1018;color:var(--red)}
.pill.grey{background:#1a2333;color:var(--grey)}
#mind h2{margin:0 0 8px;font-size:11px;letter-spacing:.16em;color:var(--dim);font-weight:600}
/* organ legend / energy legend */
#legend{bottom:18px;left:22px;border:1px solid var(--line);border-radius:12px;background:#070f1ccc;
padding:11px 13px;pointer-events:auto;font-size:11px;max-width:340px;backdrop-filter:blur(3px)}
#legend h3{margin:0 0 6px;font-size:10px;letter-spacing:.14em;color:var(--dim);font-weight:600}
.lg-row{display:flex;align-items:center;gap:7px;padding:2px 0;color:var(--dim)}
.dot{width:9px;height:9px;border-radius:50%;flex:none;box-shadow:0 0 8px currentColor}
.organs-list{display:grid;grid-template-columns:1fr 1fr;gap:2px 14px;margin-top:6px}
/* energy/flow card */
#flow{bottom:18px;right:22px;width:300px;border:1px solid var(--line);border-radius:14px;
background:linear-gradient(180deg,#0a1626dd,#060d18ee);padding:13px 16px;pointer-events:auto;backdrop-filter:blur(4px)}
#flow h2{margin:0 0 8px;font-size:11px;letter-spacing:.16em;color:var(--dim);font-weight:600}
#flow .row{display:flex;justify-content:space-between;font-size:12px;padding:3px 0;border-bottom:1px dashed #13203660}
#flow .row:last-child{border-bottom:0}
#flow .k{color:var(--dim)} #flow .v{color:var(--ink)}
.sample{display:inline-block;margin-left:6px;padding:1px 6px;border:1px solid #4a3a12;border-radius:6px;
font-size:9px;letter-spacing:.06em;color:var(--amber);background:#241c08}
/* organ tooltip */
#tip{position:fixed;pointer-events:none;font-family:var(--mono);font-size:11px;color:var(--ink);
background:#0a1626ee;border:1px solid var(--line);border-radius:10px;padding:8px 11px;max-width:280px;
opacity:0;transition:opacity .12s;z-index:9;box-shadow:0 8px 30px #000a}
#tip .t{font-weight:600;letter-spacing:.06em} #tip .d{color:var(--dim);margin-top:3px;line-height:1.45}
#tip .st{margin-top:5px}
/* footer doctrine line */
#foot{bottom:0;left:0;right:0;text-align:center;font-size:10px;color:var(--grey);
padding:7px 12px;letter-spacing:.05em;background:linear-gradient(0deg,#03060ce0,#03060c00)}
#foot code{color:var(--dim)}
a{color:var(--teal);text-decoration:none}
/* council (Ayllu) card — mid right, under MIND */
#council{top:190px;right:22px;width:300px;border:1px solid var(--line);border-radius:14px;
background:linear-gradient(180deg,#0a1626dd,#060d18ee);padding:13px 16px;pointer-events:auto;backdrop-filter:blur(4px)}
#council h2{margin:0 0 8px;font-size:11px;letter-spacing:.16em;color:var(--dim);font-weight:600}
#council .row{display:flex;justify-content:space-between;font-size:12px;padding:3px 0;border-bottom:1px dashed #13203660}
#council .row:last-child{border-bottom:0}
#council .k{color:var(--dim)} #council .v{color:var(--ink);text-align:right}
#council .who{margin-top:7px;font-size:10.5px;color:var(--violet);line-height:1.5;word-spacing:1px}
/* lab (PINN research) card — mid left, under TITLE */
#lab{top:150px;left:22px;width:292px;border:1px solid var(--line);border-radius:14px;
background:linear-gradient(180deg,#0a1626dd,#060d18ee);padding:13px 16px;pointer-events:auto;backdrop-filter:blur(4px)}
#lab h2{margin:0 0 3px;font-size:11px;letter-spacing:.16em;color:var(--dim);font-weight:600}
#lab .rig{font-size:10.5px;color:var(--teal);margin-bottom:7px;line-height:1.5}
#lab .row{display:flex;justify-content:space-between;font-size:12px;padding:3px 0;border-bottom:1px dashed #13203660}
#lab .row:last-child{border-bottom:0}
#lab .k{color:var(--dim)} #lab .v{color:var(--ink);font-family:var(--mono)}
.measured{display:inline-block;margin-left:6px;padding:1px 6px;border:1px solid #123a2c;border-radius:6px;
font-size:9px;letter-spacing:.06em;color:var(--green);background:#08241a}
/* zoom preset bar — top center */
#zoombar{top:16px;left:50%;transform:translateX(-50%);display:flex;gap:6px;pointer-events:auto;
background:#070f1ccc;border:1px solid var(--line);border-radius:999px;padding:5px 6px;backdrop-filter:blur(3px)}
#zoombar button{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;color:var(--dim);
background:transparent;border:0;border-radius:999px;padding:5px 12px;cursor:pointer;transition:.15s}
#zoombar button:hover{color:var(--ink)}
#zoombar button.on{color:var(--bg0);background:var(--teal);font-weight:600}
/* no-webgl fallback */
#nogl{position:fixed;inset:0;display:none;place-items:center;text-align:center;padding:40px;
font-family:var(--mono);color:var(--dim)}
#nogl.show{display:grid}
@media(max-width:900px){
#title{max-width:90vw} #mind,#flow,#council,#lab{width:min(92vw,300px)}
#legend,#council,#lab{display:none}
}
</style>
</head>
<body>
<canvas id="stage"></canvas>
<div id="nogl">
<div>
<div style="font-size:15px;color:var(--ink);letter-spacing:.1em">WebGL unavailable</div>
<p>This holographic bridge needs WebGL. The live data it renders is still honest and reachable
as JSON at <code>/api/a11oy/code/healthz</code> and <code>/api/a11oy/v1/energy/budget</code>,
and as a 2D surface at <a href="/energy">/energy</a>.</p>
</div>
</div>
<div class="hud" id="title">
<h1>SZL ESTATE — HOLOGRAPHIC BRIDGE</h1>
<div class="sub">
The living <b>agentic-GPU organism</b>, zoomed out to the whole estate — RTX&nbsp;5000 @ betterwithage as the <b>MIND</b>,
six proven <b>organs</b> as the body, the <b>Ayllu council</b> as its deliberating minds,
and your <b>hardware &amp; stack</b> as the surrounding estate.<br/>
Live nodes glow; declared nodes are labelled; nothing is fabricated.
</div>
<span class="badge" id="conn">● connecting…</span>
</div>
<div class="hud" id="zoombar">
<button data-zoom="council">COUNCIL</button>
<button data-zoom="organism" class="on">ORGANISM</button>
<button data-zoom="estate">ESTATE</button>
</div>
<div class="hud" id="mind">
<h2>MIND CORE — /code/healthz</h2>
<div class="row"><span class="k">Posture</span><span class="v"><span class="pill grey" id="m_posture">unknown</span></span></div>
<div class="row"><span class="k">Sovereign</span><span class="v" id="m_sov"></span></div>
<div class="row"><span class="k">Inference</span><span class="v" id="m_inf"></span></div>
<div class="row"><span class="k">Λ trust</span><span class="v" id="m_lambda">Conjecture&nbsp;1</span></div>
</div>
<div class="hud" id="council">
<h2>COUNCIL — /v1/ayllu/roster</h2>
<div class="row"><span class="k">Personas</span><span class="v" id="cl_n"></span></div>
<div class="row"><span class="k">Backend</span><span class="v" id="cl_be"></span></div>
<div class="row"><span class="k">Loop</span><span class="v">bounded · Λ-gated</span></div>
<div class="who" id="cl_who">convening the core council…</div>
</div>
<div class="hud" id="flow">
<h2>CIRCULATION — /v1/energy/budget</h2>
<div class="row"><span class="k">Dominant source</span><span class="v" id="f_src"></span></div>
<div class="row"><span class="k">Σ joules<span class="sample">SAMPLE</span></span><span class="v" id="f_j"></span></div>
<div class="row"><span class="k">Receipts</span><span class="v" id="f_n"></span></div>
<div class="row"><span class="k">Bekenstein</span><span class="v" id="f_bek"></span></div>
</div>
<div class="hud" id="lab">
<h2>LAB — PhysicsNeMo PINN<span class="measured">MEASURED</span></h2>
<div class="rig">rosie · RTX&nbsp;5050 (Blackwell sm_120)<br/>PhysicsNeMo 2.1.1 · torch 2.12.1+cu130</div>
<div class="row"><span class="k">Poisson rel-L2</span><span class="v">2.99e-4</span></div>
<div class="row"><span class="k">Burgers rel-L2</span><span class="v">0.644</span></div>
<div class="row"><span class="k">Duffing α err</span><span class="v">1.2e-5</span></div>
<div class="row"><span class="k">Snapshot</span><span class="v" style="color:var(--dim)">2026-07-02 · local</span></div>
</div>
<div class="hud" id="legend">
<h3>ENERGY SOURCES (flow color)</h3>
<div class="lg-row"><span class="dot" style="color:var(--solar)"></span>solar
<span class="dot" style="color:var(--wind);margin-left:10px"></span>wind
<span class="dot" style="color:var(--hydro);margin-left:10px"></span>hydro
<span class="dot" style="color:var(--flare);margin-left:10px"></span>flare
<span class="dot" style="color:var(--grid);margin-left:10px"></span>grid</div>
<h3 style="margin-top:9px">ORGAN STATE</h3>
<div class="lg-row"><span class="dot" style="color:var(--green)"></span>active&nbsp;(pulses)
<span class="dot" style="color:var(--amber);margin-left:10px"></span>degraded
<span class="dot" style="color:var(--grey);margin-left:10px"></span>unknown&nbsp;(unreachable — honest dim)</div>
<h3 style="margin-top:9px">SHELLS (zoom out)</h3>
<div class="lg-row"><span class="dot" style="color:var(--violet)"></span>Ayllu council&nbsp;(minds)
<span class="dot" style="color:var(--gold);margin-left:10px"></span>estate&nbsp;— hardware &amp; stack</div>
<div class="lg-row" style="color:var(--grey)">estate nodes are <b style="color:var(--dim)">declared</b> (no live probe) unless marked</div>
</div>
<div id="tip"></div>
<div class="hud" id="foot">
Three.js r128 vendored locally — <b>0 runtime CDN</b>. Energy figures are <b>SAMPLE/ESTIMATE</b>;
PINN results are a <b>MEASURED</b> local snapshot (not live). Council is read live from <code>/v1/ayllu/roster</code>.
Estate nodes are <b>declared</b> (no live probe) unless marked. Sovereign glow only when <code>/code/healthz</code> reports
<code>sovereign:true</code>. Λ trust = <b>Conjecture 1</b> (advisory). Unreachable organs render dim — <b>no fabricated data</b>.
</div>
<!-- THREE r128 (MIT), vendored locally at /vendor/three.min.js — NO CDN (matches fleet-c2.html). -->
<script src="/vendor/three.min.js"></script>
<script>
"use strict";
(function(){
// ---- honest fetch: never throws, returns null on any failure ----
var API = "/api/a11oy";
function getJSON(u){
return fetch(u, {cache:"no-store"})
.then(function(r){ return r.ok ? r.json() : null; })
.catch(function(){ return null; });
}
function esc(s){ return String(s==null?"":s).replace(/[&<>"']/g,function(c){return({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]||c);}); }
function fmt(n,d){ var x=Number(n); return isFinite(x)? x.toFixed(d==null?2:d) : "—"; }
function $(id){ return document.getElementById(id); }
// ---- organ catalogue: each is a PROVEN round9 formula doing a real job ----
// status starts "unknown" (dim) and only goes active/degraded on confirmed signal.
var ORGANS = [
{id:"BRAIN", col:0xb98cff, role:"belief-update admission (PAC-Bayes McAllester) — how the mind reasons under uncertainty",
probe:API+"/v1/formulas", note:"amaru /v1/formulas (pac_bayes)"},
{id:"HEART", col:0xff5d73, role:"σ-algebra receipt bus — every GPU action leaves a measurable beat",
probe:API+"/v1/receipts/summary",note:"amaru /receipts · khipu ledger"},
{id:"BLOOD", col:0xff7a3c, role:"Cardano-anchored DSSE — carries signed provenance to every organ",
probe:API+"/v1/khipu/health", note:"sentra /khipu/sign"},
{id:"IMMUNE", col:0x34f5b0, role:"Neyman-Pearson deny-by-default gates — rejects unsafe/overclaim work",
probe:API+"/v1/gates", note:"sentra /v1/gates (8 gates)"},
{id:"SKELETON",col:0x39d7ff, role:"the Lean proof spine (Λ = Conjecture 1) — holds the body honest",
probe:API+"/math/lean/theorems", note:"amaru /math/lean/theorems"},
{id:"NERVOUS", col:0xffd66e, role:"Shannon-alarm drift sense — proprioception + self-monitor",
probe:API+"/overwatch/snapshot", note:"amaru /overwatch/snapshot"}
];
// energy-source -> color (matches the CSS legend)
var SRC_COLOR = {
solar:0xffd24a, wind:0x5ad6ff, hydro:0x36b6ff, flare:0xff7a3c, grid:0x9aa6bd
};
function srcColor(s){
s = String(s||"").toLowerCase();
for(var k in SRC_COLOR){ if(s.indexOf(k)>=0) return SRC_COLOR[k]; }
return 0x9aa6bd; // unknown source -> grid grey (honest neutral)
}
// ---- Ayllu council (deliberating minds) — the 3 core personas as an honest
// fallback; the live count/names come from /v1/ayllu/roster when reachable.
var COUNCIL_FALLBACK = ["Amaru","Kamachiq","Qhatuq"];
var COUNCIL_COL = 0xb98cff;
// ---- Estate shell: Rosa's real hardware & stack. These are DECLARED nodes
// (no per-node live probe) unless noted — labelled honestly, never faked.
var ESTATE = [
{id:"rosie · RTX 5050", col:0x34f5b0, kind:"GPU · research", note:"Blackwell sm_120 — PINN lab (PhysicsNeMo)", live:false},
{id:"betterwithage · RTX 5000", col:0x39d7ff, kind:"GPU · sovereign", note:"the MIND core — inference (probed at centre)", live:true},
{id:"Hetzner · prod box", col:0xffd66e, kind:"compute · host", note:"alloy-api + agents · /opt/alloyscape", live:false},
{id:"Neon · Postgres 17", col:0x5ad6ff, kind:"data · database", note:"managed Postgres — ledgers & state", live:false},
{id:"Hugging Face · Spaces", col:0xffcb57, kind:"edge · deploy", note:"a11oy / anatomy / killinchu / immune", live:false},
{id:"Backblaze B2 · backups", col:0x9aa6bd, kind:"storage · DR", note:"daily pg_dump safety net", live:false}
];
var ESTATE_COL_DEFAULT = 0xffd66e;
// ---------- WebGL guard ----------
if(!window.THREE || !(function(){try{var c=document.createElement("canvas");
return !!(window.WebGLRenderingContext && (c.getContext("webgl")||c.getContext("experimental-webgl")));
}catch(e){return false;}})()){
$("nogl").classList.add("show");
$("conn").textContent = "● WebGL unavailable — JSON endpoints still honest";
// still drive the HUD cards from live JSON so the data is not lost.
pollData();
setInterval(pollData, 15000);
return;
}
// ---------- scene ----------
var THREE = window.THREE;
var canvas = $("stage");
var renderer = new THREE.WebGLRenderer({canvas:canvas, antialias:true, alpha:true});
renderer.setPixelRatio(Math.min(window.devicePixelRatio||1, 2));
var scene = new THREE.Scene();
scene.fog = new THREE.FogExp2(0x03060c, 0.010); // gentler so the estate shell stays readable when zoomed out
var camera = new THREE.PerspectiveCamera(52, 1, 0.1, 400);
camera.position.set(0, 9, 34);
scene.add(new THREE.AmbientLight(0x223355, 0.7));
var key = new THREE.PointLight(0x66aaff, 1.1, 200); key.position.set(0,18,18); scene.add(key);
// starfield backdrop
(function(){
var g = new THREE.BufferGeometry(), N=1400, p=new Float32Array(N*3);
for(var i=0;i<N;i++){ var r=120+Math.random()*120;
var th=Math.random()*Math.PI*2, ph=Math.acos(2*Math.random()-1);
p[i*3]=r*Math.sin(ph)*Math.cos(th); p[i*3+1]=r*Math.cos(ph)*0.5; p[i*3+2]=r*Math.sin(ph)*Math.sin(th); }
g.setAttribute("position", new THREE.BufferAttribute(p,3));
scene.add(new THREE.Points(g, new THREE.PointsMaterial({color:0x2b3b5a,size:0.6,sizeAttenuation:true})));
})();
// ============ MIND CORE (RTX 5000) ============
var core = new THREE.Group(); scene.add(core);
var coreGeo = new THREE.IcosahedronGeometry(3.2, 2);
var coreMat = new THREE.MeshStandardMaterial({
color:0x0e2a44, emissive:0x0a3a55, emissiveIntensity:0.6,
metalness:0.6, roughness:0.25, transparent:true, opacity:0.92, flatShading:true
});
var coreMesh = new THREE.Mesh(coreGeo, coreMat); core.add(coreMesh);
// wireframe shell — its color = sovereign posture (grey until confirmed)
var shellMat = new THREE.MeshBasicMaterial({color:0x5d6e8c, wireframe:true, transparent:true, opacity:0.35});
var shell = new THREE.Mesh(new THREE.IcosahedronGeometry(3.9,1), shellMat); core.add(shell);
// sovereign glow halo (hidden until sovereign:true is confirmed)
var haloMat = new THREE.SpriteMaterial({color:0x34f5b0, transparent:true, opacity:0.0, depthWrite:false, blending:THREE.AdditiveBlending});
var halo = new THREE.Sprite(haloMat); halo.scale.set(22,22,1); core.add(halo);
// (procedural radial sprite so we ship NO image asset)
(function(){
var s=128, cv=document.createElement("canvas"); cv.width=cv.height=s;
var x=cv.getContext("2d"), gr=x.createRadialGradient(s/2,s/2,0,s/2,s/2,s/2);
gr.addColorStop(0,"rgba(255,255,255,0.9)"); gr.addColorStop(0.4,"rgba(255,255,255,0.25)"); gr.addColorStop(1,"rgba(255,255,255,0)");
x.fillStyle=gr; x.fillRect(0,0,s,s);
haloMat.map = new THREE.CanvasTexture(cv); haloMat.needsUpdate=true;
})();
// ============ ORGAN NODES (6, orbiting) ============
var organMeshes = [];
var ORBIT = 11.5;
ORGANS.forEach(function(o, i){
var grp = new THREE.Group();
var ang = (i/ORGANS.length)*Math.PI*2;
var node = new THREE.Mesh(
new THREE.OctahedronGeometry(1.15, 0),
new THREE.MeshStandardMaterial({color:o.col, emissive:o.col, emissiveIntensity:0.25,
metalness:0.4, roughness:0.4, transparent:true, opacity:0.45}) // dim until confirmed active
);
var ring = new THREE.Mesh(
new THREE.TorusGeometry(1.7, 0.06, 8, 40),
new THREE.MeshBasicMaterial({color:o.col, transparent:true, opacity:0.25})
);
ring.rotation.x = Math.PI/2;
grp.add(node); grp.add(ring);
grp.userData = {organ:o, baseAngle:ang, node:node, ring:ring, status:"unknown", pulse:0};
scene.add(grp);
organMeshes.push(grp);
});
// ============ ENERGY-FLOW PARTICLES (sources -> core) ============
// Each "source" emits particles that stream inward; color = energy source.
// Number of active streams + their color is DERIVED from live receipts, never invented.
var MAXP = 900;
var flowGeo = new THREE.BufferGeometry();
var fpos = new Float32Array(MAXP*3), fcol = new Float32Array(MAXP*3);
var fdat = []; // per-particle {ang,rad,spd,active}
for(var i=0;i<MAXP;i++){
fdat.push({ang:Math.random()*Math.PI*2, rad:0, spd:0, active:false, col:[0.36,0.42,0.55]});
fpos[i*3]=0; fpos[i*3+1]=0; fpos[i*3+2]=0;
fcol[i*3]=0.36; fcol[i*3+1]=0.42; fcol[i*3+2]=0.55;
}
flowGeo.setAttribute("position", new THREE.BufferAttribute(fpos,3));
flowGeo.setAttribute("color", new THREE.BufferAttribute(fcol,3));
var flowPts = new THREE.Points(flowGeo, new THREE.PointsMaterial({
size:0.5, vertexColors:true, transparent:true, opacity:0.85,
blending:THREE.AdditiveBlending, depthWrite:false, sizeAttenuation:true
}));
scene.add(flowPts);
var activeStreams = 0; // set from live data; 0 = honest "no confirmed flow"
function setFlow(streamCount, colorHex){
activeStreams = Math.max(0, Math.min(MAXP, streamCount|0));
var c = new THREE.Color(colorHex);
for(var i=0;i<MAXP;i++){
var on = i < activeStreams;
fdat[i].active = on;
if(on){
fdat[i].rad = 26 + Math.random()*40;
fdat[i].ang = Math.random()*Math.PI*2;
fdat[i].spd = 0.10 + Math.random()*0.14;
fdat[i].col = [c.r, c.g, c.b];
}
}
}
// ============ SWARM CONSTELLATION ============
// Faint outer ring of points = consent-only swarm nodes (count from /v1/gates or default fabric).
var swarmGrp = new THREE.Group(); scene.add(swarmGrp);
function buildSwarm(n){
while(swarmGrp.children.length) swarmGrp.remove(swarmGrp.children[0]);
n = Math.max(1, Math.min(64, n|0));
for(var i=0;i<n;i++){
var a=(i/n)*Math.PI*2 + 0.3, r=20+ (i%3)*1.6;
var m=new THREE.Mesh(new THREE.SphereGeometry(0.22,8,8),
new THREE.MeshBasicMaterial({color:i===0?0x34f5b0:0x39557a}));
m.position.set(Math.cos(a)*r, (Math.sin(i*1.7)*2.2), Math.sin(a)*r);
swarmGrp.add(m);
}
}
buildSwarm(7); // default 7-node fabric; replaced by live count when available
// ============ COUNCIL RING (Ayllu — deliberating minds) ============
var COUNCIL_R = 15.5;
var councilGrp = new THREE.Group(); scene.add(councilGrp);
var councilNodes = [];
function buildCouncil(names){
if(!councilGrp) return; // no-op in the no-WebGL path
while(councilGrp.children.length) councilGrp.remove(councilGrp.children[0]);
councilNodes = [];
names = (names && names.length) ? names : COUNCIL_FALLBACK;
names.forEach(function(nm,i){
var a=(i/names.length)*Math.PI*2 + 0.5;
var m=new THREE.Mesh(new THREE.TetrahedronGeometry(0.7,0),
new THREE.MeshStandardMaterial({color:COUNCIL_COL, emissive:COUNCIL_COL,
emissiveIntensity:0.4, metalness:0.3, roughness:0.4, transparent:true, opacity:0.8}));
m.position.set(Math.cos(a)*COUNCIL_R, Math.sin(i*1.3)*1.6, Math.sin(a)*COUNCIL_R);
m.userData={hover:{title:esc(nm), role:"Ayllu council persona", note:"bounded, Λ-gated deliberation", status:"council"}};
councilGrp.add(m); councilNodes.push(m);
});
}
buildCouncil(COUNCIL_FALLBACK);
// ============ ESTATE SHELL (hardware & stack — declared) ============
var ESTATE_R = 25;
var estateGrp = new THREE.Group(); scene.add(estateGrp);
var estateNodes = [];
ESTATE.forEach(function(o,i){
var a=(i/ESTATE.length)*Math.PI*2;
var g=new THREE.Group();
var col = o.col || ESTATE_COL_DEFAULT;
var box=new THREE.Mesh(new THREE.BoxGeometry(1.1,1.1,1.1),
new THREE.MeshStandardMaterial({color:col, emissive:col,
emissiveIntensity:o.live?0.4:0.16, metalness:0.5, roughness:0.4,
transparent:true, opacity:o.live?0.85:0.5, flatShading:true}));
var ring=new THREE.Mesh(new THREE.TorusGeometry(1.5,0.045,6,32),
new THREE.MeshBasicMaterial({color:col, transparent:true, opacity:o.live?0.4:0.18}));
ring.rotation.x=Math.PI/2;
g.add(box); g.add(ring);
g.position.set(Math.cos(a)*ESTATE_R, Math.sin(i*1.9)*2.6, Math.sin(a)*ESTATE_R);
box.userData={hover:{title:esc(o.id), role:esc(o.kind), note:esc(o.note),
status:o.live?"live (probed at centre)":"declared — no live probe"}};
estateGrp.add(g); estateNodes.push(box);
});
// ---------- interaction: drag-rotate, wheel-zoom, hover organs ----------
var ray = new THREE.Raycaster(), mouse = new THREE.Vector2();
var rotY=0.0, rotX=0.0, dragging=false, lx=0, ly=0, autoRot=true, zoom=34, zoomTarget=34;
var ZOOM_PRESET={council:22, organism:34, estate:80};
(function(){
var bar=$("zoombar"); if(!bar) return;
bar.addEventListener("click", function(e){
var b=e.target.closest("button"); if(!b) return;
var z=ZOOM_PRESET[b.getAttribute("data-zoom")]; if(z==null) return;
zoomTarget=z;
if(b.getAttribute("data-zoom")==="estate") autoRot=true; // let the estate slowly reveal itself
Array.prototype.forEach.call(bar.querySelectorAll("button"),function(x){x.classList.remove("on");});
b.classList.add("on");
});
})();
canvas.addEventListener("pointerdown", function(e){ dragging=true; autoRot=false; lx=e.clientX; ly=e.clientY; });
window.addEventListener("pointerup", function(){ dragging=false; });
window.addEventListener("pointermove", function(e){
if(dragging){ rotY += (e.clientX-lx)*0.005; rotX += (e.clientY-ly)*0.004;
rotX=Math.max(-0.9,Math.min(0.9,rotX)); lx=e.clientX; ly=e.clientY; }
// hover tooltip
mouse.x=(e.clientX/window.innerWidth)*2-1; mouse.y=-(e.clientY/window.innerHeight)*2+1;
ray.setFromCamera(mouse, camera);
var tip=$("tip");
var hit = ray.intersectObjects(organMeshes.map(function(g){return g.userData.node;}));
if(hit.length){
var g = organMeshes.filter(function(gg){return gg.userData.node===hit[0].object;})[0];
var u=g.userData, st=u.status;
var stc = st==="active"?"var(--green)":(st==="degraded"?"var(--amber)":"var(--grey)");
tip.innerHTML = '<div class="t" style="color:#'+u.organ.col.toString(16).padStart(6,"0")+'">'+esc(u.organ.id)+'</div>'+
'<div class="d">'+esc(u.organ.role)+'</div>'+
'<div class="st"><span style="color:'+stc+'">●</span> '+esc(st)+' · <span style="color:var(--dim)">'+esc(u.organ.note)+'</span></div>';
tip.style.left=(e.clientX+14)+"px"; tip.style.top=(e.clientY+12)+"px"; tip.style.opacity=1;
} else {
// council + estate nodes carry their own honest hover card
var xh = ray.intersectObjects(councilNodes.concat(estateNodes));
if(xh.length && xh[0].object.userData.hover){
var h=xh[0].object.userData.hover;
var col=(xh[0].object.material&&xh[0].object.material.color)?xh[0].object.material.color.getHexString():"dbe7ff";
tip.innerHTML='<div class="t" style="color:#'+col+'">'+h.title+'</div>'+
'<div class="d">'+h.role+'</div>'+
'<div class="st"><span style="color:var(--dim)">●</span> '+h.status+' · <span style="color:var(--dim)">'+h.note+'</span></div>';
tip.style.left=(e.clientX+14)+"px"; tip.style.top=(e.clientY+12)+"px"; tip.style.opacity=1;
} else tip.style.opacity=0;
}
});
canvas.addEventListener("wheel", function(e){ e.preventDefault(); zoomTarget=Math.max(16,Math.min(90, zoomTarget+e.deltaY*0.03)); }, {passive:false});
function resize(){
var w=window.innerWidth, h=window.innerHeight;
renderer.setSize(w,h,false); camera.aspect=w/h; camera.updateProjectionMatrix();
}
window.addEventListener("resize", resize); resize();
// ---------- animation ----------
var t0=performance.now();
function tick(now){
var t=(now-t0)/1000;
if(autoRot) rotY += 0.0016;
zoom += (zoomTarget - zoom) * 0.08; // smooth glide between zoom presets
// camera framing from rot + zoom
camera.position.x = Math.sin(rotY)*zoom*Math.cos(rotX);
camera.position.z = Math.cos(rotY)*zoom*Math.cos(rotX);
camera.position.y = 9 + Math.sin(rotX)*zoom;
camera.lookAt(0,0,0);
core.rotation.y += 0.003; shell.rotation.y -= 0.0017; shell.rotation.x += 0.0009;
coreMat.emissiveIntensity = 0.55 + Math.sin(t*1.6)*0.12; // gentle breathing
// organs orbit + pulse when active
organMeshes.forEach(function(g){
var u=g.userData, a=u.baseAngle + t*0.12;
var R=ORBIT + Math.sin(t*0.4 + u.baseAngle)*0.6;
g.position.set(Math.cos(a)*R, Math.sin(a*1.3 + u.baseAngle)*2.4, Math.sin(a)*R);
g.lookAt(0,0,0);
var s=1;
if(u.status==="active"){ u.pulse += 0.06; s = 1 + Math.abs(Math.sin(u.pulse))*0.5;
u.node.material.emissiveIntensity = 0.5 + Math.abs(Math.sin(u.pulse))*0.8;
u.node.material.opacity = 0.95; u.ring.material.opacity = 0.55;
} else if(u.status==="degraded"){ s=1+Math.sin(t*4)*0.06;
u.node.material.emissiveIntensity=0.35; u.node.material.opacity=0.7; u.ring.material.opacity=0.3;
} else { // unknown -> dim, still, honest
u.node.material.emissiveIntensity=0.12; u.node.material.opacity=0.32; u.ring.material.opacity=0.14;
}
u.node.scale.setScalar(s);
});
// energy-flow particles stream inward toward the core; recycle at center
var pos=flowGeo.attributes.position.array, col=flowGeo.attributes.color.array;
for(var i=0;i<MAXP;i++){
var d=fdat[i];
if(!d.active){ pos[i*3]=0;pos[i*3+1]=-999;pos[i*3+2]=0; continue; }
d.rad -= d.spd; if(d.rad < 3.4){ d.rad = 26 + Math.random()*40; d.ang = Math.random()*Math.PI*2; }
var yy = Math.sin(d.ang*2 + d.rad*0.1)*2.2;
pos[i*3] = Math.cos(d.ang)*d.rad;
pos[i*3+1] = yy;
pos[i*3+2] = Math.sin(d.ang)*d.rad;
col[i*3]=d.col[0]; col[i*3+1]=d.col[1]; col[i*3+2]=d.col[2];
}
flowGeo.attributes.position.needsUpdate=true; flowGeo.attributes.color.needsUpdate=true;
swarmGrp.rotation.y += 0.0006;
// council minds — slow counter-orbit, each tetra spins + breathes
councilGrp.rotation.y -= 0.0012;
councilNodes.forEach(function(m,i){
m.rotation.y += 0.02; m.rotation.x += 0.012;
m.material.emissiveIntensity = 0.35 + Math.abs(Math.sin(t*1.1 + i))*0.35;
});
// estate shell — gentle drift; each node slowly tumbles
estateGrp.rotation.y += 0.0004;
estateNodes.forEach(function(m){ m.rotation.y += 0.01; });
renderer.render(scene,camera);
requestAnimationFrame(tick);
}
requestAnimationFrame(tick);
// ---------- LIVE DATA: bind the hologram to the real endpoints ----------
function applyPosture(hz){
var pEl=$("m_posture"), sEl=$("m_sov"), iEl=$("m_inf");
if(!hz){ // unreachable -> honest unknown, NO sovereign glow
pEl.className="pill grey"; pEl.textContent="unknown — unreachable";
sEl.textContent="—"; iEl.textContent="—";
shellMat.color.setHex(0x5d6e8c); haloMat.opacity=0.0;
$("conn").textContent="● /code/healthz unreachable — honest empty-state";
return;
}
var sov = hz.sovereign===true, inf=String(hz.inference||"");
sEl.textContent = sov ? "true" : "false";
iEl.textContent = inf || "—";
if(sov && inf==="self-hosted-gpu"){
pEl.className="pill green"; pEl.textContent="GREEN — sovereign GPU serving";
shellMat.color.setHex(0x34f5b0); // green shell
haloMat.color.setHex(0x34f5b0); haloMat.opacity=0.55; // sovereign glow ON
} else if(sov){
pEl.className="pill green"; pEl.textContent="GREEN — sovereign";
shellMat.color.setHex(0x34f5b0); haloMat.color.setHex(0x34f5b0); haloMat.opacity=0.4;
} else {
// reachable but NOT sovereign -> amber, NO sovereign glow (half-state refused)
pEl.className="pill amber"; pEl.textContent="MAINTENANCE — router fallback";
shellMat.color.setHex(0xffcb57); haloMat.opacity=0.0;
}
$("conn").textContent="● live";
}
function applyBudget(b){
var srcEl=$("f_src"), jEl=$("f_j"), nEl=$("f_n"), bekEl=$("f_bek");
if(!b){
srcEl.textContent="—"; jEl.textContent="—"; nEl.textContent="0 (no confirmed flow)";
bekEl.textContent="—"; setFlow(0,0x9aa6bd); // honest: no data => no streams
return;
}
var rows = b.receipts || b.ledger || b.tasks || [];
if(!Array.isArray(rows)) rows=[];
var n = (b.count!=null)? b.count : rows.length;
// dominant energy source by joules (SAMPLE) — honest if none present
var bySrc={}, totJ=0;
rows.forEach(function(r){
var s=String(r.energy_source||r.source||"").toLowerCase()||"unknown";
var j=Number(r.joules_est||r.joules||0)||0;
bySrc[s]=(bySrc[s]||0)+j; totJ+=j;
});
if(b.total_joules_est!=null) totJ=Number(b.total_joules_est)||totJ;
var dom="unknown", domJ=-1;
for(var s in bySrc){ if(bySrc[s]>domJ){domJ=bySrc[s];dom=s;} }
srcEl.innerHTML = (dom==="unknown")? '<span style="color:var(--dim)">unlabeled</span>'
: '<span style="color:#'+srcColor(dom).toString(16).padStart(6,"0")+'">'+esc(dom)+'</span>';
jEl.textContent = (totJ>0)? fmt(totJ,3) : "—";
nEl.textContent = String(n);
// Bekenstein gate (proven F19/TH6) — show pass count if present, else summary
var within = rows.filter(function(r){return r.within===true || r.bekenstein_ok===true;}).length;
bekEl.innerHTML = rows.length
? '<span style="color:var(--green)">'+within+'/'+rows.length+' within bound</span>'
: (b.total_shannon_bits!=null? '<span style="color:var(--dim)">Σ bits '+fmt(b.total_shannon_bits,0)+'</span>':'—');
// streams: scale with receipt count (bounded), colored by dominant source.
// 0 receipts => 0 streams (honest: we draw flow only for confirmed activity).
setFlow(Math.min(MAXP, n*40), srcColor(dom));
}
function applyOrgan(g, ok){
// ok===true active, ok===false reachable-but-degraded, null unknown
g.userData.status = (ok===true)?"active":(ok===false?"degraded":"unknown");
}
function applyCouncil(j){
var nEl=$("cl_n"), beEl=$("cl_be"), whoEl=$("cl_who");
if(!j){ // roster unreachable -> honest fallback to the declared core 3
if(nEl) nEl.textContent="3 (core · declared)";
if(beEl) beEl.innerHTML='<span style="color:var(--grey)">roster unreachable</span>';
if(whoEl) whoEl.textContent=COUNCIL_FALLBACK.join(" · ");
buildCouncil(COUNCIL_FALLBACK);
return;
}
var people = j.personas || j.roster || [];
if(!Array.isArray(people)) people=[];
var names = people.map(function(p){ return (p && (p.name||p.persona||p.id)) || String(p); }).filter(Boolean);
if(!names.length) names=COUNCIL_FALLBACK;
var be = (j.backend && (j.backend.mode||j.backend.status)) || j.backend || j.mode || "—";
var beLive = /live/i.test(String(be));
if(nEl) nEl.textContent=String(j.count!=null?j.count:names.length);
if(beEl) beEl.innerHTML='<span style="color:'+(beLive?"var(--green)":"var(--amber)")+'">'+esc(String(be))+'</span>';
if(whoEl) whoEl.textContent=names.join(" · ");
buildCouncil(names);
}
function pollData(){
getJSON(API+"/code/healthz").then(applyPosture);
getJSON(API+"/v1/energy/budget").then(applyBudget);
getJSON(API+"/v1/ayllu/roster").then(applyCouncil);
// probe each organ endpoint; honest dim on null. Never blocks the scene.
organMeshes.forEach(function(g){
getJSON(g.userData.organ.probe).then(function(j){
applyOrgan(g, j==null ? null : true);
});
});
// swarm size from gates payload if present (else keep default fabric)
getJSON(API+"/v1/gates").then(function(j){
if(j){
var n = Array.isArray(j)? j.length : (j.nodes? j.nodes.length : (j.count||7));
buildSwarm(n);
}
});
}
pollData();
setInterval(pollData, 15000);
})();
</script>
</body>
</html>