agentglow 0.2.9 → 0.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/{KitScene-Bm1I35Zc.js → KitScene-DG_pcnWW.js} +1273 -1195
- package/dist/chunks/{index-COLbf8XM.js → index-Agh7jdYu.js} +182 -182
- package/dist/chunks/{index-CGTp73GN.js → index-B2EHxcBQ.js} +400 -400
- package/dist/chunks/{index-D-r9aJ4u.js → index-B4Cqo621.js} +33 -33
- package/dist/chunks/index-BfQsJ0TH.js +751 -0
- package/dist/chunks/index-BmBGYhJS.js +891 -0
- package/dist/chunks/index-Bnn-x-aE.js +767 -0
- package/dist/chunks/{index-BWsSd_Wm.js → index-CTQTtm9q.js} +212 -212
- package/dist/chunks/{index-_IwfbZy7.js → index-CTZbUTDY.js} +62 -62
- package/dist/chunks/{index-cRPj-lzn.js → index-CdKvybsL.js} +284 -284
- package/dist/chunks/index-CeiIEWek.js +818 -0
- package/dist/chunks/{index-D4Wlmsay.js → index-Ci8tSMhc.js} +15 -15
- package/dist/chunks/{index-C2vLpNCb.js → index-Cls_VZdb.js} +100 -100
- package/dist/chunks/index-DFFRhihO.js +892 -0
- package/dist/chunks/index-DMCETM4H.js +605 -0
- package/dist/chunks/{index-AugvjZJN.js → index-URn4zDHp.js} +223 -223
- package/dist/chunks/index-u4rYZ1UO.js +495 -0
- package/dist/index.js +1 -1
- package/dist/style.css +1 -1
- package/dist/types/world.d.ts +30 -5
- package/package.json +1 -1
- package/dist/chunks/index-BAQDf-0T.js +0 -492
- package/dist/chunks/index-BRnLrSfZ.js +0 -605
- package/dist/chunks/index-CKyn9lcT.js +0 -753
- package/dist/chunks/index-CnoB0ZDk.js +0 -889
- package/dist/chunks/index-KmczAvvY.js +0 -818
- package/dist/chunks/index-Z4vdWCok.js +0 -763
- package/dist/chunks/index-uZGu9jzU.js +0 -887
|
@@ -0,0 +1,495 @@
|
|
|
1
|
+
import { jsxs as L, jsx as a, Fragment as se } from "react/jsx-runtime";
|
|
2
|
+
import { Trail as be, Sparkles as Ze, Stars as He } from "@react-three/drei";
|
|
3
|
+
import { EffectComposer as je, Bloom as Ke, Vignette as Qe, Noise as Je } from "@react-three/postprocessing";
|
|
4
|
+
import { useFrame as N } from "@react-three/fiber";
|
|
5
|
+
import { useRef as A, useMemo as R, useEffect as et, useState as De } from "react";
|
|
6
|
+
import * as e from "three";
|
|
7
|
+
import { h as oe, i as tt, T as le, f as nt, a as Z, p as ot, e as rt, l as st, s as at, L as ue, w as T, K as ct, G as it, b as Q, c as Re, d as lt, g as Me, S as ye, R as ut, j as pt, u as ft, k as dt, m as ht } from "./KitScene-DG_pcnWW.js";
|
|
8
|
+
var Ye;
|
|
9
|
+
const F = typeof window < "u" && !!((Ye = window.matchMedia) != null && Ye.call(window, "(prefers-reduced-motion: reduce)").matches), _e = Math.PI * 2, Ge = [Math.PI * 0.5, Math.PI * 0.5 + _e / 3, Math.PI * 0.5 + _e * 2 / 3], Fe = tt, mt = (t) => (oe(t, 11) - 0.5) * 2.4, V = {
|
|
10
|
+
/** the galaxy's inner (tilted) group; its matrixWorld includes the kit's side placement + scale */
|
|
11
|
+
group: null,
|
|
12
|
+
pos: [],
|
|
13
|
+
index: /* @__PURE__ */ new Map()
|
|
14
|
+
};
|
|
15
|
+
function Te(t) {
|
|
16
|
+
const s = t.toLowerCase();
|
|
17
|
+
let o = V.index.get(s);
|
|
18
|
+
if (o === void 0) {
|
|
19
|
+
const n = Math.max(1, V.pos.length);
|
|
20
|
+
let i = 7;
|
|
21
|
+
for (let h = 0; h < s.length; h++) i = i * 31 + s.charCodeAt(h) >>> 0;
|
|
22
|
+
o = i % n, V.index.set(s, o);
|
|
23
|
+
}
|
|
24
|
+
return o;
|
|
25
|
+
}
|
|
26
|
+
function yt(t, s) {
|
|
27
|
+
const o = V.group;
|
|
28
|
+
return !o || !V.pos.length ? !1 : (s.copy(V.pos[Te(t)]).applyMatrix4(o.matrixWorld), !0);
|
|
29
|
+
}
|
|
30
|
+
const gt = new e.Color("#ef4444"), Mt = new e.Color("#f59e0b"), wt = new e.Color("#ffffff"), bt = new e.SphereGeometry(1, 32, 32), xt = new e.SphereGeometry(1, 24, 24), vt = new e.SphereGeometry(0.06, 10, 10), St = new e.RingGeometry(0.85, 1, 48), At = new e.RingGeometry(0.92, 1, 48), Ct = new e.Vector3();
|
|
31
|
+
function Bt(t) {
|
|
32
|
+
for (const s of T.mcpPending.values()) if (s.instance === t) return !0;
|
|
33
|
+
return !1;
|
|
34
|
+
}
|
|
35
|
+
function Gt({ agent: t, selected: s, onSelect: o }) {
|
|
36
|
+
const n = t.inst, i = n.id, h = n.type, c = le[h], g = Fe(h), r = g ? 0.46 : 0.35, p = A(null), f = A(null), u = A(null), w = A(null), y = A(null), d = A(null), b = A(null), m = A(null), P = A(""), q = A(1), X = R(() => new e.Color(c), [c]), B = R(() => new e.Color(), []), C = R(
|
|
37
|
+
() => ({
|
|
38
|
+
core: new e.MeshBasicMaterial({ toneMapped: !1 }),
|
|
39
|
+
halo: new e.MeshBasicMaterial({ color: c, transparent: !0, opacity: 0.1, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 }),
|
|
40
|
+
electron: new e.MeshBasicMaterial({ color: new e.Color(4, 4, 4), toneMapped: !1 }),
|
|
41
|
+
shock: new e.MeshBasicMaterial({ transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1, side: e.DoubleSide }),
|
|
42
|
+
sel: new e.MeshBasicMaterial({ color: new e.Color(3, 3, 3), transparent: !0, opacity: 0.8, depthWrite: !1, toneMapped: !1, side: e.DoubleSide })
|
|
43
|
+
}),
|
|
44
|
+
[c]
|
|
45
|
+
), x = R(() => ({ phase: oe(i, 12) * Math.PI * 2, rr: 0.75 + oe(i, 13) * 0.5, tilt: 0.25 + oe(i, 14) * 0.5, seed: oe(i, 15) * Math.PI * 2, last: -1, born: new e.Vector3(), bornSet: !1 }), [i]);
|
|
46
|
+
N(({ clock: E, camera: I }) => {
|
|
47
|
+
var Oe;
|
|
48
|
+
const M = p.current;
|
|
49
|
+
if (!M) return;
|
|
50
|
+
const l = performance.now(), v = E.elapsedTime, G = x.last < 0 ? 0 : Math.min(0.1, v - x.last);
|
|
51
|
+
x.last = v;
|
|
52
|
+
const S = n.status, O = S === "thinking" ? g ? 1.5 : 0.75 : S === "waiting" ? g ? 0.35 : 0.18 : g ? 0.8 : 0.4;
|
|
53
|
+
x.phase += G * O * (F ? 0.3 : 1);
|
|
54
|
+
const Y = (g ? 0.42 : 0.24) * nt.spread * x.rr * (F ? 0.4 : 1), $ = t.live;
|
|
55
|
+
$.copy(t.pos), $.x += Math.cos(x.phase) * Y, $.z += Math.sin(x.phase) * Y, $.y += Math.sin(x.phase * 2 + x.seed) * Y * x.tilt + (F ? 0 : Math.sin(v * 0.9 + x.seed) * 0.12);
|
|
56
|
+
const U = Math.min(1, (l - n.bornAt) / 950);
|
|
57
|
+
if (U < 1) {
|
|
58
|
+
const _ = n.parent ? Z(n.parent) : void 0;
|
|
59
|
+
x.bornSet || (x.born.copy(_ ?? $), x.bornSet = !0), _ && x.born.copy(_);
|
|
60
|
+
const Be = 1 - Math.pow(1 - U, 3);
|
|
61
|
+
$.lerpVectors(Ct.copy(x.born), $, Be);
|
|
62
|
+
}
|
|
63
|
+
M.position.copy($);
|
|
64
|
+
const j = ot(n, l), pe = rt(n, l), J = (l - n.bornAt) / 1e3, H = n.exitAt ? (l - n.exitAt) / st(n) : 0, ee = r * t.scale, fe = !n.exitAt && S === "thinking", xe = !n.exitAt && S === "waiting", Ee = !n.exitAt && Bt(i), de = F ? 0.3 : 1, ve = fe ? 0.5 + 0.5 * Math.sin(v * 7 * de) : 0, Se = xe || Ee ? 0.5 + 0.5 * Math.sin(v * 1.7 * de) : 0;
|
|
65
|
+
let he = fe ? 2.4 + ve * 1.8 : xe ? 0.35 + Se * 0.55 : 1.3;
|
|
66
|
+
he += pe * 5;
|
|
67
|
+
const Ae = J < 0.6 ? 1 - J / 0.6 : 0;
|
|
68
|
+
he += Ae * 3.5;
|
|
69
|
+
let Ce = j * (1 + pe * 0.35 + ve * 0.12 + Se * 0.08), ae = 0;
|
|
70
|
+
if (n.exitAt && (ae = H < 0.1 ? 1 - H / 0.1 : 0, Ce = H < 0.1 ? 1 + H * 4 : 1.4 * Math.pow(Math.max(0, 1 - (H - 0.1) / 0.75), 2), he = 2 + ae * 5), f.current && (f.current.scale.setScalar(Math.max(1e-3, ee * Ce)), B.copy(X), Ee && B.lerp(Mt, 0.25 + Se * 0.25), S === "failed" && B.lerp(gt, 0.8), ae > 0 && B.lerp(wt, ae * 0.7), C.core.color.copy(B).multiplyScalar(he)), u.current && (u.current.scale.setScalar(Math.max(1e-3, ee * Ce * (1.45 + pe * 0.6 + ve * 0.2 + Ae * 1))), C.halo.opacity = (fe ? 0.09 : xe ? 0.04 : 0.06) + pe * 0.06 + Ae * 0.15 + ae * 0.25), w.current && (w.current.visible = fe, w.current.scale.setScalar(Math.max(1e-3, ee * 2.2 * j)), w.current.rotation.y += 0.07 * de, w.current.rotation.x += 0.03 * de), y.current) {
|
|
71
|
+
let _ = -1;
|
|
72
|
+
J < 0.9 ? (_ = J / 0.9, C.shock.color.copy(X).multiplyScalar(2.2 * (1 - _) * (1 - _))) : n.exitAt && H < 0.5 && (_ = H / 0.5, C.shock.color.set(S === "failed" ? "#ef4444" : "#ffffff").multiplyScalar(2.5 * (1 - _) * (1 - _))), y.current.visible = _ >= 0, _ >= 0 && (y.current.quaternion.copy(I.quaternion), y.current.scale.setScalar(ee * (1.2 + _ * 2.6)));
|
|
73
|
+
}
|
|
74
|
+
if (d.current && (d.current.visible = s, d.current.quaternion.copy(I.quaternion), d.current.scale.setScalar(ee * 2.6 * Math.max(0.2, j))), (Oe = m.current) == null || Oe.position.set(0, -ee * 1.5 - 0.35, 0), b.current) {
|
|
75
|
+
const _ = n.exitAt ? S === "failed" ? "failed" : "done" : J < 2.4 ? "born" : "name";
|
|
76
|
+
if (_ !== P.current) {
|
|
77
|
+
P.current = _;
|
|
78
|
+
const Pe = i.split(":")[2], me = `${n.name}${Pe !== void 0 ? ` ${Number(Pe) + 1}` : ""}`;
|
|
79
|
+
b.current.setText(_ === "born" ? `+ ${me}` : _ === "done" ? `${me} done` : _ === "failed" ? `× ${me}` : me);
|
|
80
|
+
}
|
|
81
|
+
const Be = _ === "born" ? 1 : _ === "name" ? 0.85 : Math.max(0, 1 - H * 1.6);
|
|
82
|
+
q.current += ((at(i) ? 1 : 0) - q.current) * 0.12, b.current.setOpacity(Be * q.current * Math.min(1, J / 0.4));
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
const k = (E) => (E.stopPropagation(), o(i));
|
|
86
|
+
return /* @__PURE__ */ L("group", { ref: p, position: t.pos, children: [
|
|
87
|
+
/* @__PURE__ */ a(be, { width: g ? 1.5 : 2.6, length: g ? 3 : 5, color: c, attenuation: (E) => E * E, decay: 1, children: /* @__PURE__ */ a("mesh", { ref: f, geometry: bt, material: C.core, scale: 1e-3, onClick: k, onPointerOver: () => document.body.style.cursor = "pointer", onPointerOut: () => document.body.style.cursor = "" }) }),
|
|
88
|
+
/* @__PURE__ */ a("mesh", { ref: u, geometry: xt, material: C.halo, scale: 1e-3, onClick: k }),
|
|
89
|
+
/* @__PURE__ */ a("group", { ref: w, visible: !1, children: [0, 1, 2].map((E) => /* @__PURE__ */ a("mesh", { geometry: vt, material: C.electron, position: [Math.cos(E * Math.PI * 2 / 3), Math.sin(E * 2.1) * 0.35, Math.sin(E * Math.PI * 2 / 3)] }, E)) }),
|
|
90
|
+
/* @__PURE__ */ a("mesh", { ref: y, geometry: St, material: C.shock, visible: !1, raycast: () => null }),
|
|
91
|
+
/* @__PURE__ */ a("mesh", { ref: d, geometry: At, material: C.sel, visible: !1, raycast: () => null }),
|
|
92
|
+
/* @__PURE__ */ a("group", { ref: m, children: /* @__PURE__ */ a(ue, { ref: b, text: "", color: c, size: g ? 0.24 : 0.3, opacity: 0, fit: !0, pxRange: g ? [8, 11.5] : [9, 13] }) })
|
|
93
|
+
] });
|
|
94
|
+
}
|
|
95
|
+
function Rt(t) {
|
|
96
|
+
const s = [];
|
|
97
|
+
for (let n = 0; n < t; n++) {
|
|
98
|
+
const i = n / t, h = 0.45 + 4.1 * Math.sqrt(i) + (Math.random() - 0.5) * 0.4, g = n % 3 / 3 * Math.PI * 2 + h * 1.3 + (Math.random() - 0.5) * 0.5;
|
|
99
|
+
s.push(new e.Vector3(Math.cos(g) * h, (Math.random() - 0.5) * 0.5 * (1.4 - i), Math.sin(g) * h));
|
|
100
|
+
}
|
|
101
|
+
return s;
|
|
102
|
+
}
|
|
103
|
+
const ze = 32, Le = new e.Color(5, 5, 5), Tt = 200, Ve = 1.35, Ne = 4.75 * Ve + 0.6, ge = 6;
|
|
104
|
+
function Et({ galaxy: t }) {
|
|
105
|
+
const s = R(() => {
|
|
106
|
+
const B = t.nodes.slice(0, Tt), C = new Set(B.map((x) => x.id));
|
|
107
|
+
return { nodes: B, links: t.links.filter((x) => C.has(x.source) && C.has(x.target)) };
|
|
108
|
+
}, [t]), o = A([]), n = A([]), i = A([]), h = A(Array(ge).fill(-1)), c = A(null), g = A(null), r = A(null), p = A(null), f = s.nodes.length, u = R(() => Rt(f), [f]), w = R(() => s.nodes.map((B) => new e.Color(ct[B.kind] ?? "#94a3b8")), [s]), y = R(() => new Float32Array(Math.max(1, f)), [f]), d = R(() => new Uint8Array(Math.max(1, f)), [f]), b = R(() => new e.Object3D(), []), m = R(() => new e.Color(), []), P = R(() => new e.Vector3(), []), q = R(() => {
|
|
109
|
+
const B = new Map(s.nodes.map((M, l) => [M.id, l])), C = [], x = [], k = /* @__PURE__ */ new Set(), E = (M, l) => {
|
|
110
|
+
const v = M < l ? `${M}-${l}` : `${l}-${M}`;
|
|
111
|
+
M === l || k.has(v) || (k.add(v), C.push(u[M].x, u[M].y, u[M].z, u[l].x, u[l].y, u[l].z), x.push(w[M].r, w[M].g, w[M].b, w[l].r, w[l].g, w[l].b));
|
|
112
|
+
};
|
|
113
|
+
for (const M of s.links) {
|
|
114
|
+
const l = B.get(M.source), v = B.get(M.target);
|
|
115
|
+
l !== void 0 && v !== void 0 && u[l].distanceTo(u[v]) < 3 && E(l, v);
|
|
116
|
+
}
|
|
117
|
+
for (let M = 0; M < f; M++) {
|
|
118
|
+
let l = -1, v = -1, G = 1e9, S = 1e9;
|
|
119
|
+
for (let O = 0; O < f; O++) {
|
|
120
|
+
if (O === M) continue;
|
|
121
|
+
const Y = u[M].distanceToSquared(u[O]);
|
|
122
|
+
Y < G ? (v = l, S = G, l = O, G = Y) : Y < S && (v = O, S = Y);
|
|
123
|
+
}
|
|
124
|
+
l >= 0 && E(M, l), v >= 0 && S < 1.2 && E(M, v);
|
|
125
|
+
}
|
|
126
|
+
const I = new e.BufferGeometry();
|
|
127
|
+
return I.setAttribute("position", new e.Float32BufferAttribute(C, 3)), I.setAttribute("color", new e.Float32BufferAttribute(x, 3)), I;
|
|
128
|
+
}, [s, u, w, f]);
|
|
129
|
+
et(() => (V.pos = u, V.index = new Map(s.nodes.map((B, C) => [B.name.toLowerCase(), C])), V.group = c.current, () => void (V.group = null)), [s, u]), N(({ camera: B, clock: C }) => {
|
|
130
|
+
const x = c.current, k = g.current;
|
|
131
|
+
if (!x || !k) return;
|
|
132
|
+
x.updateMatrixWorld();
|
|
133
|
+
const E = performance.now();
|
|
134
|
+
y.fill(0), d.fill(0);
|
|
135
|
+
let I = 0;
|
|
136
|
+
for (const l of T.flares) {
|
|
137
|
+
const v = (E - l.start) / 1e3, G = Te(l.node), S = Math.exp(-v * 1.3);
|
|
138
|
+
if (S > y[G] && (y[G] = S), l.op === "write" && (d[G] = 1), r.current && I < ze && v < 1.6) {
|
|
139
|
+
P.copy(u[G]).applyMatrix4(x.matrix), b.position.copy(P), b.quaternion.copy(B.quaternion);
|
|
140
|
+
const O = v / 1.6;
|
|
141
|
+
b.scale.setScalar((l.op === "write" ? 0.6 + O * 3.2 : 0.3 + O * 1.4) * (1 - O * 0.2)), b.updateMatrix(), r.current.setMatrixAt(I, b.matrix), l.op === "write" ? m.copy(Le).multiplyScalar(1 - O) : m.copy(w[G]).multiplyScalar(3 * (1 - O)), r.current.setColorAt(I, m), I++;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
r.current && (r.current.count = I, r.current.instanceMatrix.needsUpdate = !0, r.current.instanceColor && (r.current.instanceColor.needsUpdate = !0));
|
|
145
|
+
let M = 0;
|
|
146
|
+
for (let l = T.flares.length - 1; l >= 0 && M < ge; l--) {
|
|
147
|
+
const v = T.flares[l], G = (E - v.start) / 1e3;
|
|
148
|
+
if (G > 1.8) continue;
|
|
149
|
+
const S = Te(v.node);
|
|
150
|
+
let O = !1;
|
|
151
|
+
for (let U = 0; U < M; U++) h.current[U] === S && (O = !0);
|
|
152
|
+
if (O) continue;
|
|
153
|
+
const Y = o.current[M], $ = n.current[M];
|
|
154
|
+
Y && $ && (Y.position.copy(u[S]), (h.current[M] !== S || i.current[M] !== v.op) && ($.setText(`${v.op === "write" ? "wrote · " : ""}${v.node}`), i.current[M] = v.op, $.setColor(v.op === "write" ? "#ffffff" : `#${w[S].getHexString()}`)), $.setOpacity(Math.min(1, (1.8 - G) / 0.5)), Y.visible = !0), h.current[M] = S, M++;
|
|
155
|
+
}
|
|
156
|
+
for (let l = M; l < ge; l++)
|
|
157
|
+
h.current[l] = -1, o.current[l] && (o.current[l].visible = !1);
|
|
158
|
+
for (let l = 0; l < f; l++) {
|
|
159
|
+
const v = y[l];
|
|
160
|
+
b.position.copy(u[l]), b.quaternion.identity(), b.scale.setScalar(1 + v * (d[l] ? 4.5 : 3)), b.updateMatrix(), k.setMatrixAt(l, b.matrix), m.copy(w[l]).multiplyScalar(0.85 + v * 5), d[l] && m.lerp(Le, v * 0.7), k.setColorAt(l, m);
|
|
161
|
+
}
|
|
162
|
+
k.instanceMatrix.needsUpdate = !0, k.instanceColor && (k.instanceColor.needsUpdate = !0), p.current && p.current.scale.setScalar(1 + Math.sin(C.elapsedTime * 1.3) * 0.06);
|
|
163
|
+
});
|
|
164
|
+
const X = R(() => new e.Color("#c7d2fe").multiplyScalar(2.4), []);
|
|
165
|
+
return /* @__PURE__ */ L(se, { children: [
|
|
166
|
+
/* @__PURE__ */ L("group", { ref: c, rotation: [0.3, 0, 0.08], scale: Ve, children: [
|
|
167
|
+
/* @__PURE__ */ L("instancedMesh", { ref: g, args: [void 0, void 0, Math.max(1, f)], frustumCulled: !1, children: [
|
|
168
|
+
/* @__PURE__ */ a("sphereGeometry", { args: [0.065, 10, 10] }),
|
|
169
|
+
/* @__PURE__ */ a("meshBasicMaterial", { toneMapped: !1 })
|
|
170
|
+
] }),
|
|
171
|
+
/* @__PURE__ */ a("lineSegments", { geometry: q, children: /* @__PURE__ */ a("lineBasicMaterial", { vertexColors: !0, transparent: !0, opacity: 0.4, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 }) }),
|
|
172
|
+
/* @__PURE__ */ L("mesh", { ref: p, children: [
|
|
173
|
+
/* @__PURE__ */ a("sphereGeometry", { args: [0.38, 32, 32] }),
|
|
174
|
+
/* @__PURE__ */ a("meshBasicMaterial", { color: X, toneMapped: !1 })
|
|
175
|
+
] }),
|
|
176
|
+
/* @__PURE__ */ L("mesh", { children: [
|
|
177
|
+
/* @__PURE__ */ a("sphereGeometry", { args: [1.1, 32, 32] }),
|
|
178
|
+
/* @__PURE__ */ a("meshBasicMaterial", { color: "#818cf8", transparent: !0, opacity: 0.07, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 })
|
|
179
|
+
] }),
|
|
180
|
+
Array.from({ length: ge }, (B, C) => /* @__PURE__ */ a("group", { ref: (x) => void (o.current[C] = x), visible: !1, children: /* @__PURE__ */ a(ue, { ref: (x) => void (n.current[C] = x), position: [0, 0.32, 0], text: "", size: 0.2, opacity: 0, pxRange: [8, 11.5] }) }, C)),
|
|
181
|
+
/* @__PURE__ */ a(Ze, { count: F ? 30 : 110, scale: [9, 1.3, 9], size: 0.7, speed: F ? 0.05 : 0.3, color: "#a5b4fc", opacity: 0.6 })
|
|
182
|
+
] }),
|
|
183
|
+
/* @__PURE__ */ L("instancedMesh", { ref: r, args: [void 0, void 0, ze], frustumCulled: !1, children: [
|
|
184
|
+
/* @__PURE__ */ a("ringGeometry", { args: [0.2, 0.26, 40] }),
|
|
185
|
+
/* @__PURE__ */ a("meshBasicMaterial", { transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1, side: e.DoubleSide })
|
|
186
|
+
] }),
|
|
187
|
+
/* @__PURE__ */ a(it, { position: [0, -0.6, Ne * 0.78], color: "#a5b4fc", size: 0.42, pxRange: [10, 15] })
|
|
188
|
+
] });
|
|
189
|
+
}
|
|
190
|
+
const W = new e.Vector3(), D = new e.Vector3(), z = new e.Color(), K = new e.Color(), ke = new e.Color("#f59e0b"), Ot = new e.Color("#ef4444"), ce = 900, te = 22;
|
|
191
|
+
function Pt() {
|
|
192
|
+
const t = R(() => {
|
|
193
|
+
const s = new e.BufferGeometry();
|
|
194
|
+
return s.setAttribute("position", new e.BufferAttribute(new Float32Array(ce * 6), 3)), s.setAttribute("color", new e.BufferAttribute(new Float32Array(ce * 6), 3)), s;
|
|
195
|
+
}, []);
|
|
196
|
+
return N(({ clock: s }) => {
|
|
197
|
+
const o = t.getAttribute("position"), n = t.getAttribute("color"), i = performance.now(), h = s.elapsedTime;
|
|
198
|
+
let c = 0;
|
|
199
|
+
const g = (r, p, f, u) => {
|
|
200
|
+
c >= ce || (o.setXYZ(c * 2, r.x, r.y, r.z), o.setXYZ(c * 2 + 1, p.x, p.y, p.z), n.setXYZ(c * 2, f.r, f.g, f.b), n.setXYZ(c * 2 + 1, u.r, u.g, u.b), c++);
|
|
201
|
+
};
|
|
202
|
+
for (const r of T.flares) {
|
|
203
|
+
const p = (i - r.start) / 1900;
|
|
204
|
+
if (p >= 1 || !Q(r.instance)) continue;
|
|
205
|
+
const f = Z(r.instance);
|
|
206
|
+
if (!f || !yt(r.node, D)) continue;
|
|
207
|
+
const u = T.instances.get(r.instance), w = 1 - p;
|
|
208
|
+
r.op === "write" ? (z.setRGB(3, 3, 3.4).multiplyScalar(w), K.setRGB(5, 5, 5).multiplyScalar(w)) : (z.set(u ? le[u.type] : "#c7d2fe").multiplyScalar(1.6 * w), K.copy(z).multiplyScalar(1.6)), g(f, D, z, K);
|
|
209
|
+
}
|
|
210
|
+
for (const r of T.instances.values()) {
|
|
211
|
+
if (!r.parent || !Q(r)) continue;
|
|
212
|
+
const p = T.instances.get(r.parent);
|
|
213
|
+
if (!p) continue;
|
|
214
|
+
const f = (i - r.bornAt) / 1e3, u = f < 1.4 ? 1 - f / 1.4 : 0, w = Fe(r.type) && !r.exitAt ? 0.35 : 0, y = Math.max(u * 3, w);
|
|
215
|
+
if (y <= 0.01) continue;
|
|
216
|
+
const d = Z(r.parent), b = Z(r.id);
|
|
217
|
+
!d || !b || (z.set(le[p.type]).multiplyScalar(y), K.set(le[r.type]).multiplyScalar(y * 1.4), g(d, b, z, K));
|
|
218
|
+
}
|
|
219
|
+
for (const r of T.mcpPending.values()) {
|
|
220
|
+
if (!Q(r.instance)) continue;
|
|
221
|
+
const p = Z(r.instance), f = T.mcpServers.get(r.server), u = Re(r.server);
|
|
222
|
+
if (!p || !f || !u) continue;
|
|
223
|
+
D.copy(u), D.y += re(f.slot);
|
|
224
|
+
const w = lt(r, i), y = Math.min(1, w / 2.2), d = K.set(f.color);
|
|
225
|
+
y < 0.5 ? d.lerp(ke, y * 2) : d.copy(ke).lerp(Ot, (y - 0.5) * 2);
|
|
226
|
+
const b = 0.8 + Math.min(2.5, w * 0.9), m = h * (F ? 0.3 : 1.4);
|
|
227
|
+
for (let P = 0; P < te; P++) {
|
|
228
|
+
const q = P / te, X = (P + 0.55) / te, B = ((q - m) % 1 + 1) % 1, C = 0.25 + Math.pow(1 - B, 6) * 2.2 + ((q * 3 - m * 3) % 1 + 1) % 1 * 0.15;
|
|
229
|
+
z.copy(d).multiplyScalar(C * b), W.copy(p).lerp(D, q);
|
|
230
|
+
const x = W.x, k = W.y, E = W.z;
|
|
231
|
+
if (W.copy(p).lerp(D, X), c >= ce) break;
|
|
232
|
+
o.setXYZ(c * 2, x, k, E), o.setXYZ(c * 2 + 1, W.x, W.y, W.z), n.setXYZ(c * 2, z.r, z.g, z.b), n.setXYZ(c * 2 + 1, z.r, z.g, z.b), c++;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
for (const r of T.mcpResolved) {
|
|
236
|
+
const p = (i - r.resolvedAt) / 700;
|
|
237
|
+
if (p >= 1 || !Q(r.instance)) continue;
|
|
238
|
+
const f = Z(r.instance), u = T.mcpServers.get(r.server), w = Re(r.server);
|
|
239
|
+
if (!f || !u || !w) continue;
|
|
240
|
+
D.copy(w), D.y += re(u.slot);
|
|
241
|
+
const y = 1 - p;
|
|
242
|
+
for (let d = 0; d < te; d++) {
|
|
243
|
+
const b = d / te, m = (d + 1) / te, P = Math.abs(b - y), q = (1 - p) * (0.15 + Math.exp(-P * 18) * 5);
|
|
244
|
+
z.set(u.color).lerp(K.setRGB(1, 1, 1), 0.6).multiplyScalar(q), W.copy(f).lerp(D, b);
|
|
245
|
+
const X = W.x, B = W.y, C = W.z;
|
|
246
|
+
if (W.copy(f).lerp(D, m), c >= ce) break;
|
|
247
|
+
o.setXYZ(c * 2, X, B, C), o.setXYZ(c * 2 + 1, W.x, W.y, W.z), n.setXYZ(c * 2, z.r, z.g, z.b), n.setXYZ(c * 2 + 1, z.r, z.g, z.b), c++;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
t.setDrawRange(0, c * 2), o.needsUpdate = !0, n.needsUpdate = !0;
|
|
251
|
+
}), /* @__PURE__ */ a("lineSegments", { geometry: t, frustumCulled: !1, children: /* @__PURE__ */ a("lineBasicMaterial", { vertexColors: !0, transparent: !0, opacity: 0.95, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 }) });
|
|
252
|
+
}
|
|
253
|
+
function _t(t, s, o, n, i) {
|
|
254
|
+
const h = (t.x + s.x) / 2, c = (t.y + s.y) / 2 + n, g = (t.z + s.z) / 2, r = 1 - o;
|
|
255
|
+
return i.set(r * r * t.x + 2 * r * o * h + o * o * s.x, r * r * t.y + 2 * r * o * c + o * o * s.y, r * r * t.z + 2 * r * o * g + o * o * s.z);
|
|
256
|
+
}
|
|
257
|
+
function zt({ comet: t }) {
|
|
258
|
+
const s = A(null), o = T.instances.get(t.from), n = o ? le[o.type] : "#ffffff", i = R(() => new e.Color(n).multiplyScalar(4), [n]);
|
|
259
|
+
return N(() => {
|
|
260
|
+
const h = performance.now(), c = Math.min(1, (h - t.start) / t.dur), g = c < 0.5 ? 2 * c * c : 1 - Math.pow(-2 * c + 2, 2) / 2, r = Z(t.from), p = Z(t.to);
|
|
261
|
+
!s.current || !r || !p || (D.copy(r), _t(D, p, g, 1.2 + r.distanceTo(p) * 0.15, s.current.position), s.current.scale.setScalar(c >= 1 ? 1e-3 : 1));
|
|
262
|
+
}), /* @__PURE__ */ a(be, { width: 2.2, length: 7, color: n, attenuation: (h) => h * h, decay: 1.2, children: /* @__PURE__ */ L("mesh", { ref: s, scale: 1e-3, children: [
|
|
263
|
+
/* @__PURE__ */ a("sphereGeometry", { args: [0.13, 14, 14] }),
|
|
264
|
+
/* @__PURE__ */ a("meshBasicMaterial", { color: i, toneMapped: !1 })
|
|
265
|
+
] }) });
|
|
266
|
+
}
|
|
267
|
+
function Lt() {
|
|
268
|
+
const [t, s] = De([]), o = A(-1);
|
|
269
|
+
return N(() => {
|
|
270
|
+
let n = T.comets.length * 7919 + Me.version * 104729;
|
|
271
|
+
for (const i of T.comets) n += i.id;
|
|
272
|
+
n !== o.current && (o.current = n, s(Me.grouped ? T.comets.filter((i) => Q(i.from) && Q(i.to)) : T.comets.slice()));
|
|
273
|
+
}), /* @__PURE__ */ a(se, { children: t.map((n) => /* @__PURE__ */ a(zt, { comet: n }, n.id)) });
|
|
274
|
+
}
|
|
275
|
+
const kt = new e.Vector3(0, 1, 0);
|
|
276
|
+
function It({ call: t }) {
|
|
277
|
+
var i;
|
|
278
|
+
const s = A(null), o = ((i = T.mcpServers.get(t.server)) == null ? void 0 : i.color) ?? "#e5e7eb", n = R(() => new e.Color(o).lerp(new e.Color("#ffffff"), 0.35).multiplyScalar(6), [o]);
|
|
279
|
+
return N(() => {
|
|
280
|
+
var w;
|
|
281
|
+
const h = performance.now(), c = Math.min(1, (h - t.start) / t.dur), g = c * c * (3 - 2 * c), r = Z(t.instance), p = Re(t.server);
|
|
282
|
+
if (!s.current || !r || !p) return;
|
|
283
|
+
D.copy(p), D.y += re(((w = T.mcpServers.get(t.server)) == null ? void 0 : w.slot) ?? 0);
|
|
284
|
+
const f = t.phase === "call" ? r : D, u = t.phase === "call" ? D : r;
|
|
285
|
+
s.current.position.copy(f).lerp(u, g), W.copy(u).sub(f).normalize(), s.current.quaternion.setFromUnitVectors(kt, W), s.current.scale.set(c >= 1 ? 1e-3 : 1, c >= 1 ? 1e-3 : 1, c >= 1 ? 1e-3 : 1);
|
|
286
|
+
}), /* @__PURE__ */ a(be, { width: 1.4, length: 10, color: o, attenuation: (h) => h * h * h, decay: 1.5, children: /* @__PURE__ */ L("mesh", { ref: s, scale: 1e-3, children: [
|
|
287
|
+
/* @__PURE__ */ a("capsuleGeometry", { args: [0.05, 0.7, 4, 8] }),
|
|
288
|
+
/* @__PURE__ */ a("meshBasicMaterial", { color: n, toneMapped: !1 })
|
|
289
|
+
] }) });
|
|
290
|
+
}
|
|
291
|
+
function $t() {
|
|
292
|
+
const [t, s] = De([]), o = A(-1);
|
|
293
|
+
return N(() => {
|
|
294
|
+
let n = T.mcpCalls.length * 7919 + Me.version * 104729;
|
|
295
|
+
for (const i of T.mcpCalls) n += i.id;
|
|
296
|
+
n !== o.current && (o.current = n, s(Me.grouped ? T.mcpCalls.filter((i) => Q(i.instance)) : T.mcpCalls.slice()));
|
|
297
|
+
}), /* @__PURE__ */ a(se, { children: t.map((n) => /* @__PURE__ */ a(It, { call: n }, n.id)) });
|
|
298
|
+
}
|
|
299
|
+
const Wt = new e.CylinderGeometry(0.22, 0.22, 0.75, 12), qt = new e.TorusGeometry(0.5, 0.04, 8, 40), Xt = new e.BoxGeometry(0.3, 0.03, 0.03), Yt = new e.BoxGeometry(0.75, 0.02, 0.42), Dt = new e.SphereGeometry(0.55, 20, 20), re = (t) => t % 2 ? 0.9 : 1.6;
|
|
300
|
+
function Ft({ mcp: t }) {
|
|
301
|
+
const s = t.srv, o = s.color, n = A(null), i = A(null), h = A(null), c = R(() => new e.Color(o), [o]), g = R(
|
|
302
|
+
() => ({
|
|
303
|
+
body: new e.MeshBasicMaterial({ toneMapped: !1 }),
|
|
304
|
+
ring: new e.MeshBasicMaterial({ toneMapped: !1 }),
|
|
305
|
+
strut: new e.MeshBasicMaterial({ color: "#94a3b8" }),
|
|
306
|
+
panel: new e.MeshBasicMaterial({ color: new e.Color(o).lerp(new e.Color("#1e3a8a"), 0.6).multiplyScalar(0.9), toneMapped: !1 }),
|
|
307
|
+
beacon: new e.MeshBasicMaterial({ color: o, transparent: !0, opacity: 0.1, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 })
|
|
308
|
+
}),
|
|
309
|
+
[o]
|
|
310
|
+
), r = A(null);
|
|
311
|
+
return N(({ clock: p }, f) => {
|
|
312
|
+
if (!n.current) return;
|
|
313
|
+
const u = performance.now(), w = p.elapsedTime;
|
|
314
|
+
n.current.position.copy(t.pos), n.current.position.y += re(s.slot);
|
|
315
|
+
const y = Math.exp(-((u - s.activeAt) / 1e3) * 1.8), d = s.inflight > 0, b = F ? 0.25 : 1;
|
|
316
|
+
i.current && (i.current.rotation.x += f * (d ? 2.4 : 0.35) * b), g.body.color.copy(c).multiplyScalar(0.9 + (d ? 1.6 + Math.sin(w * 6) * 0.6 : 0) + y * 3), r.current && (r.current.rotation.z += f * (d ? 1.5 : 0.25) * b), g.ring.color.copy(c).multiplyScalar(0.7 + y * 3 + (d ? 1 : 0)), h.current && h.current.scale.setScalar(1 + y * 1.2 + (d ? 0.4 + Math.sin(w * 6) * 0.25 : 0)), g.beacon.opacity = 0.05 + y * 0.1 + (d ? 0.07 : 0);
|
|
317
|
+
}), /* @__PURE__ */ L("group", { ref: n, children: [
|
|
318
|
+
/* @__PURE__ */ a("mesh", { geometry: Wt, material: g.body }),
|
|
319
|
+
/* @__PURE__ */ a("mesh", { ref: r, geometry: qt, material: g.ring, rotation: [Math.PI / 2, 0, 0] }),
|
|
320
|
+
/* @__PURE__ */ a("group", { ref: i, children: [-1, 1].map((p) => /* @__PURE__ */ L("group", { children: [
|
|
321
|
+
/* @__PURE__ */ a("mesh", { geometry: Xt, material: g.strut, position: [p * 0.55, 0, 0] }),
|
|
322
|
+
/* @__PURE__ */ a("mesh", { geometry: Yt, material: g.panel, position: [p * 1.05, 0, 0] })
|
|
323
|
+
] }, p)) }),
|
|
324
|
+
/* @__PURE__ */ a("mesh", { ref: h, geometry: Dt, material: g.beacon }),
|
|
325
|
+
/* @__PURE__ */ a(ue, { position: [0, -1.1, 0], text: `MCP · ${s.name}`, color: o, size: 0.3, pxRange: [9, 13] })
|
|
326
|
+
] });
|
|
327
|
+
}
|
|
328
|
+
const Ue = new e.OctahedronGeometry(0.3, 0), Vt = new e.EdgesGeometry(Ue), ie = new e.Vector3(), ne = new e.Vector3();
|
|
329
|
+
function Nt({ mcp: t, backend: s }) {
|
|
330
|
+
const o = t.srv, n = s.res, i = R(() => new e.Color(o.color).lerp(new e.Color("#ffffff"), 0.3), [o.color]), h = A(null), c = A(null), g = A(null), r = A(""), p = R(
|
|
331
|
+
() => ({
|
|
332
|
+
fill: new e.MeshBasicMaterial({ color: i, transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 }),
|
|
333
|
+
edge: new e.LineBasicMaterial({ color: i, transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 }),
|
|
334
|
+
tether: new e.LineBasicMaterial({ color: i, transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 })
|
|
335
|
+
}),
|
|
336
|
+
[i]
|
|
337
|
+
), f = R(() => {
|
|
338
|
+
const u = new e.BufferGeometry();
|
|
339
|
+
return u.setAttribute("position", new e.BufferAttribute(new Float32Array(6), 3)), Object.assign(new e.Line(u, p.tether), { frustumCulled: !1 });
|
|
340
|
+
}, [p.tether]);
|
|
341
|
+
return N(({ clock: u }) => {
|
|
342
|
+
var X;
|
|
343
|
+
const w = performance.now(), y = n.inflight > 0, d = Math.exp(-((w - n.activeAt) / 1e3) * 1.5), b = y && !F ? 0.5 + 0.5 * Math.sin(u.elapsedTime * 5) : 0;
|
|
344
|
+
ne.copy(s.pos), ne.y += re(o.slot) * 0.6, (X = h.current) == null || X.position.copy(ne), c.current && (c.current.rotation.y = F ? 0.4 : u.elapsedTime * (y ? 1.2 : 0.25));
|
|
345
|
+
const m = y ? 1.4 + b * 0.8 : 0.18 + d * 0.9;
|
|
346
|
+
p.fill.color.copy(i).multiplyScalar(m * 0.35), p.edge.color.copy(i).multiplyScalar(m * 1.4), p.tether.color.copy(i).multiplyScalar(y ? 0.7 + b * 0.4 : 0.12 + d * 0.5), ie.copy(t.pos), ie.y += re(o.slot);
|
|
347
|
+
const P = f.geometry.getAttribute("position");
|
|
348
|
+
P.setXYZ(0, ie.x, ie.y, ie.z), P.setXYZ(1, ne.x, ne.y, ne.z), P.needsUpdate = !0;
|
|
349
|
+
let q = n.name;
|
|
350
|
+
if (y) {
|
|
351
|
+
let B = "";
|
|
352
|
+
for (const C of T.mcpPending.values()) C.server === o.name && C.resource === n.name && (B = C.tool);
|
|
353
|
+
q = `${n.name} ▸ ${B || "query"}()`;
|
|
354
|
+
}
|
|
355
|
+
g.current && (q !== r.current && g.current.setText(r.current = q), g.current.setOpacity(y ? 1 : 0.5 + d * 0.5));
|
|
356
|
+
}), /* @__PURE__ */ L(se, { children: [
|
|
357
|
+
/* @__PURE__ */ a("primitive", { object: f }),
|
|
358
|
+
/* @__PURE__ */ L("group", { ref: h, children: [
|
|
359
|
+
/* @__PURE__ */ L("group", { ref: c, children: [
|
|
360
|
+
/* @__PURE__ */ a("mesh", { geometry: Ue, material: p.fill }),
|
|
361
|
+
/* @__PURE__ */ a("lineSegments", { geometry: Vt, material: p.edge })
|
|
362
|
+
] }),
|
|
363
|
+
/* @__PURE__ */ a(ue, { ref: g, position: [0, -0.7, 0], text: n.name, color: o.color, size: 0.2, opacity: 0.5, pxRange: [7.5, 11] })
|
|
364
|
+
] })
|
|
365
|
+
] });
|
|
366
|
+
}
|
|
367
|
+
const we = { queued: "#64748b", running: "#fbbf24", done: "#22c55e", failed: "#ef4444" }, Ut = new e.TorusGeometry(1, 1, 6, 320);
|
|
368
|
+
function Zt() {
|
|
369
|
+
return new e.ShaderMaterial({
|
|
370
|
+
uniforms: { uA: { value: 4 }, uB: { value: 3 }, uTube: { value: 0.03 }, uColor: { value: new e.Color() }, uOpacity: { value: 0 } },
|
|
371
|
+
vertexShader: (
|
|
372
|
+
/* glsl */
|
|
373
|
+
`
|
|
374
|
+
uniform float uA; uniform float uB; uniform float uTube;
|
|
375
|
+
void main(){
|
|
376
|
+
float th = atan(position.y, position.x);
|
|
377
|
+
vec3 c = vec3(cos(th), sin(th), 0.0);
|
|
378
|
+
vec3 off = position - c * 1.0; // torus radius 1, tube radius 1
|
|
379
|
+
vec3 p = vec3(cos(th) * uA, sin(th) * uB, 0.0) + off * uTube;
|
|
380
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(p, 1.0);
|
|
381
|
+
}`
|
|
382
|
+
),
|
|
383
|
+
fragmentShader: (
|
|
384
|
+
/* glsl */
|
|
385
|
+
`
|
|
386
|
+
uniform vec3 uColor; uniform float uOpacity;
|
|
387
|
+
void main(){ gl_FragColor = vec4(uColor * uOpacity, 1.0); }`
|
|
388
|
+
),
|
|
389
|
+
transparent: !0,
|
|
390
|
+
depthWrite: !1,
|
|
391
|
+
blending: e.AdditiveBlending
|
|
392
|
+
});
|
|
393
|
+
}
|
|
394
|
+
const Ht = new e.OctahedronGeometry(0.26, 0), jt = new e.RingGeometry(0.34, 0.42, 40), Kt = new e.SphereGeometry(0.16, 12, 12), Ie = new e.Matrix4(), $e = new e.Vector3(), We = new e.Quaternion(), qe = new e.Quaternion(), Qt = new e.Vector3(1, 0, 0), Xe = (t, s, o, n) => n.set(Math.cos(o) * t, Math.sin(o) * s, 0);
|
|
395
|
+
function Jt({ run: t, color: s }) {
|
|
396
|
+
ft();
|
|
397
|
+
const o = t.status !== "started", n = [{ text: "hatchet ", color: s }];
|
|
398
|
+
if (t.hasSteps) {
|
|
399
|
+
const { shown: i, more: h } = dt(t);
|
|
400
|
+
for (const c of i) n.push({ text: ` ${t.steps[c] === "running" ? "›" : "·"}${c}`, color: we[t.steps[c]] });
|
|
401
|
+
h && n.push({ text: ` +${h}`, color: we.queued });
|
|
402
|
+
} else n.push({ text: o ? "complete" : "running…", color: "#94a3b8" });
|
|
403
|
+
return o && n.push({ text: " brief ready", color: "#4ade80" }), /* @__PURE__ */ a(ue, { text: t.topic, secondary: n, textColor: "#f1f5f9", color: s, size: 0.32, maxWidth: 9, opacity: o ? 0.65 : 1, fadeMs: 300, anchorY: "bottom", pxRange: [9.5, 14] });
|
|
404
|
+
}
|
|
405
|
+
function en({ run: t }) {
|
|
406
|
+
const s = t.id, o = t.color, n = R(() => mt(s), [s]), i = R(() => (oe(s, 16) - 0.5) * 0.24, [s]), h = A(null), c = A([]), g = A([]), r = A([]), p = A(null), f = A(null), u = R(() => new e.Color(), []), w = R(() => new e.Color(o), [o]), y = R(
|
|
407
|
+
() => ({
|
|
408
|
+
orbit: Zt(),
|
|
409
|
+
beads: ye.map(() => new e.MeshBasicMaterial({ transparent: !0, toneMapped: !1 })),
|
|
410
|
+
halos: ye.map(() => new e.MeshBasicMaterial({ transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1, side: e.DoubleSide })),
|
|
411
|
+
runner: new e.MeshBasicMaterial({ color: new e.Color("#fde68a").multiplyScalar(5), toneMapped: !1 })
|
|
412
|
+
}),
|
|
413
|
+
[]
|
|
414
|
+
);
|
|
415
|
+
return N(({ clock: d }) => {
|
|
416
|
+
var v;
|
|
417
|
+
const b = h.current;
|
|
418
|
+
if (!b) return;
|
|
419
|
+
const m = t.run ?? T.runs.get(s), P = performance.now(), q = d.elapsedTime;
|
|
420
|
+
$e.crossVectors(t.side, t.axis), Ie.makeBasis(t.side, t.axis, $e), We.setFromRotationMatrix(Ie), qe.setFromAxisAngle(Qt, i), b.quaternion.copy(We).multiply(qe), b.position.copy(t.origin);
|
|
421
|
+
const X = t.hu + 0.35, B = t.hv + 0.35, C = m ? Math.min(1, (P - m.startedAt) / 900) : 1, x = m != null && m.endedAt ? Math.max(0, 1 - (P - m.endedAt) / ut) : 1, k = C * x, E = m != null && m.endedAt ? Math.exp(-((P - m.endedAt) / 1e3) * 2.5) : 0, I = y.orbit.uniforms;
|
|
422
|
+
I.uA.value = X, I.uB.value = B, I.uOpacity.value = k * 0.75, I.uColor.value.copy(w).multiplyScalar(1.1 + E * 3), (m == null ? void 0 : m.status) === "completed" && I.uColor.value.lerp(u.set("#4ade80"), E);
|
|
423
|
+
for (let G = 0; G < ye.length; G++) {
|
|
424
|
+
const S = m ? pt(m, G) : "queued", O = !!(m != null && m.hasSteps), Y = g.current[G];
|
|
425
|
+
if (Y && (Y.visible = O, Xe(X, B, Ge[G] + n, Y.position)), !O) continue;
|
|
426
|
+
const $ = S === "running" ? 0.5 + 0.5 * Math.sin(q * (F ? 2 : 6)) : 0, U = c.current[G];
|
|
427
|
+
U && (u.set(we[S]).multiplyScalar(S === "queued" ? 0.7 : S === "running" ? 2 + $ * 2 : 2.4), y.beads[G].color.copy(u), y.beads[G].opacity = k, U.scale.setScalar((S === "running" ? 1.3 + $ * 0.25 : S === "done" ? 1.05 : 0.8) * Math.max(0.01, k)));
|
|
428
|
+
const j = r.current[G];
|
|
429
|
+
j && (j.visible = S !== "queued", y.halos[G].color.set(we[S]), y.halos[G].opacity = k * (S === "running" ? 0.35 + $ * 0.4 : 0.18), j.scale.setScalar(S === "running" ? 1.6 + $ * 0.9 : 1.3));
|
|
430
|
+
}
|
|
431
|
+
const M = m != null && m.handoffAt ? (P - m.handoffAt) / 1400 : 2;
|
|
432
|
+
if (p.current && m) {
|
|
433
|
+
const G = Ge[m.handoffFrom] + n;
|
|
434
|
+
let S = Ge[m.handoffTo] + n;
|
|
435
|
+
S < G && (S += Math.PI * 2);
|
|
436
|
+
const O = M >= 1 ? 1 : 1 - Math.pow(1 - Math.max(0, M), 3);
|
|
437
|
+
Xe(X, B, G + (S - G) * O, p.current.position), p.current.scale.setScalar(M < 1 ? 1 : 1e-3);
|
|
438
|
+
}
|
|
439
|
+
const l = Math.hypot(t.side.z * X, t.axis.z * B);
|
|
440
|
+
(v = f.current) == null || v.position.set(t.origin.x, 0.4, t.origin.z - l - 0.5);
|
|
441
|
+
}), /* @__PURE__ */ L(se, { children: [
|
|
442
|
+
/* @__PURE__ */ L("group", { ref: h, children: [
|
|
443
|
+
/* @__PURE__ */ a("mesh", { geometry: Ut, material: y.orbit, frustumCulled: !1 }),
|
|
444
|
+
ye.map((d) => /* @__PURE__ */ L("group", { ref: (b) => void (g.current[d] = b), visible: !1, children: [
|
|
445
|
+
/* @__PURE__ */ a("mesh", { ref: (b) => void (c.current[d] = b), geometry: Ht, material: y.beads[d] }),
|
|
446
|
+
/* @__PURE__ */ a("mesh", { ref: (b) => void (r.current[d] = b), geometry: jt, material: y.halos[d] })
|
|
447
|
+
] }, d)),
|
|
448
|
+
/* @__PURE__ */ a(be, { width: 3.2, length: 9, color: "#fde68a", attenuation: (d) => d * d, children: /* @__PURE__ */ a("mesh", { ref: p, geometry: Kt, material: y.runner, scale: 1e-3 }) })
|
|
449
|
+
] }),
|
|
450
|
+
/* @__PURE__ */ a("group", { ref: f, children: t.run && /* @__PURE__ */ a(Jt, { run: t.run, color: o }) })
|
|
451
|
+
] });
|
|
452
|
+
}
|
|
453
|
+
const tn = /* @__PURE__ */ L(se, { children: [
|
|
454
|
+
/* @__PURE__ */ a("fog", { attach: "fog", args: ["#03050b", 70, 170] }),
|
|
455
|
+
/* @__PURE__ */ a(He, { radius: 130, depth: 50, count: F ? 1500 : 5e3, factor: 3.4, saturation: 0.4, fade: !0, speed: F ? 0 : 0.2 })
|
|
456
|
+
] });
|
|
457
|
+
function ln() {
|
|
458
|
+
return /* @__PURE__ */ L(
|
|
459
|
+
ht,
|
|
460
|
+
{
|
|
461
|
+
title: "orbit · planetary system",
|
|
462
|
+
subtitle: "agents orbit at the centre · each Hatchet run is an orbit · agents are born, work and implode · MCP stations on the rim · knowledge-graph galaxy on the side",
|
|
463
|
+
preset: "radial",
|
|
464
|
+
plane: "xz",
|
|
465
|
+
camera: { position: [0, 25, 21], fov: 50 },
|
|
466
|
+
controls: { maxPolarAngle: Math.PI * 0.42 },
|
|
467
|
+
bg: "#03050b",
|
|
468
|
+
fit: { nRef: 4, min: 0.62, max: 1.6, minRadius: 5.5 },
|
|
469
|
+
agentRadius: 0.85,
|
|
470
|
+
graph: { natural: Ne, radius: 2.6 },
|
|
471
|
+
peripheryGap: 3.8,
|
|
472
|
+
Background: tn,
|
|
473
|
+
Agent: Gt,
|
|
474
|
+
RunMarker: en,
|
|
475
|
+
McpServer: Ft,
|
|
476
|
+
Backend: Nt,
|
|
477
|
+
GraphResource: Et,
|
|
478
|
+
cluster: { radius: 1.35, variant: "stars" },
|
|
479
|
+
clusterOffset: [0, 1.2, 0],
|
|
480
|
+
PostFX: /* @__PURE__ */ L(je, { multisampling: 0, children: [
|
|
481
|
+
/* @__PURE__ */ a(Ke, { mipmapBlur: !0, intensity: 1.3, luminanceThreshold: 0.2, luminanceSmoothing: 0.25, radius: 0.78 }),
|
|
482
|
+
/* @__PURE__ */ a(Qe, { eskil: !1, offset: 0.25, darkness: 0.85 }),
|
|
483
|
+
/* @__PURE__ */ a(Je, { opacity: 0.025 })
|
|
484
|
+
] }),
|
|
485
|
+
children: [
|
|
486
|
+
/* @__PURE__ */ a(Pt, {}),
|
|
487
|
+
/* @__PURE__ */ a(Lt, {}),
|
|
488
|
+
/* @__PURE__ */ a($t, {})
|
|
489
|
+
]
|
|
490
|
+
}
|
|
491
|
+
);
|
|
492
|
+
}
|
|
493
|
+
export {
|
|
494
|
+
ln as default
|
|
495
|
+
};
|
package/dist/index.js
CHANGED
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.scene-root{position:fixed;top:0;right:0;bottom:0;left:0;background:#03050b;color:#e8edf5;font-family:Public Sans,system-ui,sans-serif;overflow:hidden}.scene-root canvas{display:block}.hud{position:absolute;z-index:10;background:#0a0e1a8c;border:1px solid rgba(148,163,255,.16);border-radius:14px;backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3);box-shadow:0 8px 32px #00000059,inset 0 1px #ffffff0a}.hud-topwrap{position:absolute;z-index:10;top:12px;left:12px;max-width:calc(100% - var(--hud-side, 320px) - 36px);display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;pointer-events:none}.hud-topwrap.is-rail{--hud-side: 40px}.hud-topwrap>*{pointer-events:auto}.hud-top{position:relative;padding:6px 8px 6px 12px;min-width:0}.hud-bar{display:flex;align-items:center;gap:4px 8px;flex-wrap:wrap}.hud-bar .hud-run{margin-top:0}.hud-info{all:unset;cursor:pointer;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font:italic 600 11px/1 Georgia,serif;color:#94a3b8;border:1px solid rgba(148,163,184,.35)}.hud-info:hover,.hud-info.on{color:#e2e8f0;border-color:#818cf8}.hud-theme{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#03050b8c url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%2394a3b8'/%3E%3C/svg%3E") no-repeat right 9px center;color:#cbd5e1;border:1px solid rgba(148,163,255,.22);border-radius:999px;font:inherit;font-size:11px;text-transform:uppercase;letter-spacing:.08em;padding:4px 24px 4px 10px;cursor:pointer;outline:none}.hud-theme:hover{border-color:#818cf8}.hud-title{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;letter-spacing:-.01em;white-space:nowrap}.hud-sub{margin:6px 0 2px;max-width:460px;font-size:12px;line-height:1.45;color:#94a3b8}.hud-dot{width:9px;height:9px;border-radius:50%;background:#22c55e;box-shadow:0 0 10px #22c55e;animation:hud-ping 1.6s ease-out infinite}@keyframes hud-ping{0%{box-shadow:0 0 #22c55eb3}to{box-shadow:0 0 0 10px #22c55e00}}.hud-badge{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;padding:2px 7px;border-radius:999px;background:#94a3b829;color:#cbd5e1}.hud-stats{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.hud-stat{font-size:11px;color:#94a3b8;padding:2px 8px;border-radius:999px;background:#03050b66;white-space:nowrap}.hud-stat b{color:#f1f5f9;font-weight:700;font-variant-numeric:tabular-nums}.scene-root :focus-visible{outline:2px solid #818cf8;outline-offset:2px}.hud-side{top:12px;right:12px;bottom:12px;width:320px;display:flex;flex-direction:column;padding:8px 10px 10px;font-size:13px;box-sizing:border-box;animation:hs-in .18s ease-out}.hud-side.is-rail{width:40px;padding:6px 0;align-items:center}@keyframes hs-in{0%{opacity:.4}}.hs-head{display:flex;align-items:center;gap:2px;padding-bottom:8px;margin:0 -2px 2px;border-bottom:1px solid rgba(148,163,255,.12)}.hs-head button{all:unset;cursor:pointer;display:flex;align-items:center;gap:5px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#94a3b8;padding:5px 9px;border-radius:999px}.hs-head button:hover{color:#e2e8f0}.hs-head button.on{color:#f1f5f9;background:#818cf838}.hs-head em,.hs-icon em{font-style:normal;font-size:10px;font-weight:700;font-variant-numeric:tabular-nums;color:#c7d2fe;letter-spacing:0}.hs-head .hs-collapse{margin-left:auto;font-size:14px;padding:2px 8px;letter-spacing:0}.hs-rail{display:flex;flex-direction:column;align-items:center;gap:6px}.hs-rail button{all:unset;cursor:pointer;position:relative;width:30px;height:30px;display:grid;place-items:center;border-radius:9px;color:#94a3b8}.hs-rail button:hover{color:#e2e8f0;background:#94a3ff1a}.hs-rail .hs-collapse{font-size:14px;margin-bottom:4px}.hs-icon em{position:absolute;top:-3px;right:-5px;min-width:14px;height:14px;padding:0 3px;box-sizing:border-box;border-radius:999px;display:grid;place-items:center;font-size:9px;background:#4f46e5;color:#eef2ff}.hs-icon em:empty{min-width:8px;width:8px;height:8px;padding:0;top:1px;right:1px;background:#22d3ee;box-shadow:0 0 8px #22d3ee}.hs-body{flex:1;min-height:0;display:flex;flex-direction:column}.hs-body[hidden]{display:none}.hs-empty{margin:14px 4px;font-size:12px;line-height:1.5;color:#64748b}.hs-events{list-style:none;margin:6px -4px 0;padding:0;overflow-y:auto;min-height:0;flex:1;font-size:11.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hs-events li>*{all:unset;box-sizing:border-box;width:100%;display:flex;gap:8px;align-items:baseline;padding:4px 6px;border-radius:7px;color:#cbd5e1;line-height:1.4}.hs-events li>button{cursor:pointer}.hs-events li>button:hover{background:#94a3ff1a;color:#f1f5f9}.hs-events i{flex:0 0 7px;height:7px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c);transform:translateY(-1px)}.hs-events span{min-width:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}.ap-head{display:flex;align-items:center;gap:8px;margin-top:6px}.ap-count{flex:none;color:#64748b;font-size:11px;font-variant-numeric:tabular-nums}.ap-link{all:unset;cursor:pointer;font-size:12px;color:#93c5fd}.ap-link:hover{color:#bfdbfe}.ap-searchrow{display:flex;align-items:center;gap:8px;margin-top:8px}.ap-search{flex:1;min-width:0;width:100%;box-sizing:border-box;background:#03050b99;border:1px solid rgba(148,163,255,.2);border-radius:8px;color:inherit;font:inherit;font-size:12px;padding:6px 9px;outline:none}.ap-search:focus{border-color:#818cf8}.ap-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.ap-chips button{all:unset;cursor:pointer;display:flex;align-items:center;gap:5px;font-size:11px;padding:3px 7px;border-radius:999px;border:1px solid rgba(148,163,255,.15);color:#cbd5e1}.ap-chips button.on{border-color:var(--c);background:color-mix(in srgb,var(--c) 18%,transparent);color:#f8fafc}.ap-chips i{width:8px;height:8px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.ap-chips em{font-style:normal;color:var(--c);font-weight:700;font-variant-numeric:tabular-nums}.ap-row-filters{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;align-items:center}.ap-seg{display:flex;border:1px solid rgba(148,163,255,.15);border-radius:8px;overflow:hidden}.ap-seg{flex:none}.ap-seg button{all:unset;cursor:pointer;font-size:11px;padding:3px 6px;color:#94a3b8;text-transform:capitalize}.ap-seg button.on{background:#818cf840;color:#f1f5f9}.ap-row-filters select{flex:1;min-width:64px;background:#03050b99;color:#cbd5e1;border:1px solid rgba(148,163,255,.15);border-radius:8px;font:inherit;font-size:11px;padding:3px 6px}.ap-list{list-style:none;margin:8px -4px 0;padding:0;overflow-y:auto;min-height:0;flex:1}.ap-list li button{all:unset;box-sizing:border-box;width:100%;cursor:pointer;display:flex;align-items:center;gap:8px;padding:6px;border-radius:8px}.ap-list li button:hover{background:#94a3ff1a}.ap-list li button.is-done{opacity:.55}.ap-list i{flex:0 0 9px;height:9px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.ap-list i[data-status=thinking]{animation:ap-pulse .9s ease-in-out infinite}.ap-list i[data-status=waiting]{opacity:.5}.ap-list i[data-status=done]{background:transparent;border:1.5px solid var(--c);box-shadow:none}@keyframes ap-pulse{50%{transform:scale(1.5)}}.ap-name{flex:1;min-width:0;display:flex;flex-direction:column;font-size:12px;color:#e2e8f0}.ap-name small{color:#64748b;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-meta{text-align:right;font-size:11px;color:#94a3b8;font-variant-numeric:tabular-nums;display:flex;flex-direction:column}.ap-meta b{color:var(--c);font-weight:600;text-transform:lowercase}.hs-events li.is-skill>*{background:#f5b83d12}.hs-skill{flex:0 0 auto;font-size:9.5px;font-weight:600;line-height:1.5;text-transform:uppercase;letter-spacing:.06em;color:#fcd581;padding:0 6px;border-radius:999px;border:1px solid rgba(245,184,61,.55);background:#f5b83d1f}.ap-title{display:flex;align-items:center;gap:6px;min-width:0}.ap-skill{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-size:9.5px;font-weight:600;color:#fcd581;padding:0 6px;border-radius:999px;border:1px solid rgba(245,184,61,.55);background:#f5b83d1f}.ap-skill:before{content:"skill:";color:#b8893a;font-weight:500}.hs-skill:before{content:"";display:inline-block;width:6px;height:6px;margin:0 4px 0 -1px;border:1px solid currentColor;border-radius:50%;vertical-align:0;box-shadow:0 0 4px #f5b83d99}.ap-skills{display:flex;flex-wrap:wrap;gap:4px}.ap-skills span{font-size:11px;color:#e2e8f0;padding:2px 8px;border-radius:999px;border:1px solid rgba(245,184,61,.35);background:#f5b83d0f;display:inline-flex;gap:5px;align-items:baseline}.ap-skills span.on{border-color:#f5b83d;background:#f5b83d2e;color:#fde7b0;box-shadow:0 0 10px #f5b83d40}.ap-skills em{font-style:normal;font-size:10px;color:#b8893a;font-variant-numeric:tabular-nums}.ap-more{padding:6px;color:#64748b;font-size:11px}.ap-detail{overflow-y:auto;min-height:0;margin-top:8px;flex:1}.ap-detail h3{margin:0;display:flex;align-items:center;gap:8px;font-size:15px;color:var(--c)}.ap-detail h3 i{width:11px;height:11px;border-radius:50%;background:var(--c);box-shadow:0 0 10px var(--c)}.ap-detail h3 small{color:#64748b;font-size:11px;font-weight:500}.ap-status{margin-top:3px;font-size:12px;color:#cbd5e1}.ap-status[data-status=thinking]{color:#fde68a}.ap-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(46px,1fr));gap:4px;margin:10px 0 4px}.ap-stats div{background:#03050b73;border-radius:8px;padding:6px;text-align:center}.ap-stats dt{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:#64748b}.ap-stats dd{margin:2px 0 0;font-size:15px;font-weight:700;color:#f1f5f9;font-variant-numeric:tabular-nums}.ap-detail section{margin-top:10px}.ap-detail h4{margin:0 0 4px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#64748b}.ap-detail p{margin:0;font-size:12px;color:#cbd5e1}.ap-steps{display:flex;gap:4px;margin-top:4px}.ap-steps span{font-size:10px;text-transform:uppercase;letter-spacing:.06em;padding:2px 7px;border-radius:999px;border:1px solid #334155;color:#64748b}.ap-steps span[data-status=running]{border-color:#fbbf24;color:#fde68a}.ap-steps span[data-status=done]{border-color:#22c55e;color:#86efac}.ap-chip-link{all:unset;cursor:pointer;display:block;font-size:12px;color:#e2e8f0;padding:3px 6px;border-left:2px solid var(--c);margin:2px 0;border-radius:0 6px 6px 0}.ap-chip-link:hover{background:#94a3ff1a}.ap-wait{color:#fbbf24!important;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.ap-nodes{line-height:1.5}.ap-events{margin:0;padding-left:14px;display:grid;gap:3px;font-size:11px;color:#cbd5e1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hud-badge--live{background:#22c55e2e;color:#86efac}.hud-badge--denied{background:#f871712e;color:#fca5a5;text-transform:none;letter-spacing:.02em}.hud-chip{text-transform:none;letter-spacing:.02em;font-weight:500;background:#818cf829;color:#c7d2fe;white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}.hud-chip b{font-weight:650;color:#e0e7ff}.hud-run{display:flex;gap:6px;margin-top:8px;align-items:center;flex-wrap:wrap}.hud-run input{flex:1;min-width:160px;background:#03050b99;border:1px solid rgba(148,163,255,.2);border-radius:999px;color:inherit;font:inherit;font-size:12px;padding:6px 11px;outline:none}.hud-run button{border:0;border-radius:999px;padding:6px 13px;font:inherit;font-size:12px;font-weight:600;background:linear-gradient(135deg,#818cf8,#22d3ee);color:#03050b;cursor:pointer}.hud-run button:disabled{opacity:.5}.hud-run span{font-size:11px;color:#86efac}.agentglow-embed{position:relative;overflow:hidden;width:100%;height:100%;min-height:320px;isolation:isolate}.agentglow-embed .scene-root{position:absolute;top:0;right:0;bottom:0;left:0}.lod-cluster-label{all:unset;box-sizing:border-box;display:grid;gap:1px;text-align:center;cursor:pointer;pointer-events:auto;font-size:12px;font-weight:600;color:#f8fafc;padding:4px 11px 5px;border-radius:12px;white-space:nowrap;background:#03050b9e;border:1px solid color-mix(in srgb,var(--c, #818cf8) 60%,transparent);text-shadow:0 0 10px var(--c, #818cf8);box-shadow:0 0 18px color-mix(in srgb,var(--c, #818cf8) 22%,transparent);transition:border-color .2s,background .2s}.lod-cluster-label:hover{background:color-mix(in srgb,var(--c, #818cf8) 22%,rgba(3,5,11,.7));border-color:var(--c, #818cf8)}.lod-cluster-label b{font-weight:700;letter-spacing:-.01em}.lod-cluster-label small{font-size:10px;font-weight:500;color:#94a3b8;text-shadow:none;font-variant-numeric:tabular-nums}.hud-dock{display:flex;align-items:center;gap:8px}.hud-dock:empty{display:none}.hud-dock>.hud{position:static}.hud-lod{padding:6px 8px 6px 12px;display:flex;align-items:center;gap:8px;font-size:12px;color:#cbd5e1;white-space:nowrap}.hud-lod span b{margin:0 1px}.hud-lod b{color:#f1f5f9;font-variant-numeric:tabular-nums}.hud-lod i{width:7px;height:7px;border-radius:50%;background:#a5b4fc;box-shadow:0 0 8px #a5b4fc}.hud-lod button{all:unset;cursor:pointer;font-size:11px;padding:3px 9px;border-radius:999px;border:1px solid rgba(148,163,255,.25);color:#c7d2fe}.hud-lod button:hover{background:#818cf833;color:#f8fafc}.scene-root{container:agscene / size}@container agscene (max-width: 719px){.scene-root .hud-top{padding:5px 7px 5px 10px}.scene-root .hud-title{font-size:13px}.scene-root .hud-theme{padding:3px 20px 3px 8px;font-size:10px;background-position:right 7px center}.scene-root .hud-stat:nth-child(n+3){display:none}.scene-root .hud-side:not(.is-rail){width:min(290px,calc(100% - 64px));padding:6px 8px 8px}.scene-root .hs-head button{padding:4px 6px;letter-spacing:.04em;font-size:10.5px}.scene-root .hs-head .hs-collapse{padding:2px 4px}.scene-root .ap-list li button{padding:4px 6px}.scene-root .hud-topwrap:not(.is-rail){--hud-side: min(290px, calc(100% - 64px) )}}@container agscene (max-height: 520px){.scene-root .hud-sub{max-height:4.5em;overflow:auto}}.scene-label.subway-station{font-size:10px;font-weight:500;padding:1px 6px;letter-spacing:.08em;text-transform:uppercase;color:#cbd5e1;opacity:.85}.scene-label.subway-airport{font-size:11px}.scene-label.subway-run{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:4px 9px;border-radius:10px;font-size:11px}.subway-steps{display:flex;gap:4px}.subway-steps b{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;padding:0 5px;border-radius:999px;color:#94a3b8;border:1px solid #334155;text-shadow:none}.subway-steps b[data-st=running]{color:#fde68a;border-color:#fbbf24;box-shadow:0 0 8px #fbbf2499}.subway-steps b[data-st=done]{color:#bbf7d0;border-color:#22c55e}.subway-steps b[data-st=failed]{color:#fecaca;border-color:#ef4444}.scene-label.subway-flare{font-size:10px;transition:opacity .2s}.city-root{background:#05040d}.city-district{display:grid;gap:4px;padding:5px 10px 6px;border-radius:10px;transition:opacity .4s}.city-district-top{display:flex;align-items:baseline;gap:8px}.city-district-top b{font-size:12px;color:#f8fafc}.city-count{font-size:10px;font-weight:500;color:#a5b4fc;text-shadow:none}.city-steps{display:flex;gap:4px}.city-chip{--sc: #3b4256;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:1px 7px;border-radius:999px;color:var(--sc);border:1px solid color-mix(in srgb,var(--sc) 70%,transparent);text-shadow:none}.city-chip[data-st=running]{color:#03050b;background:var(--sc);box-shadow:0 0 10px var(--sc)}.city-chip[data-st=done]{color:var(--sc);background:color-mix(in srgb,var(--sc) 18%,transparent)}.city-chip[data-st=queued]{color:#64748b;border-color:#334155}.city-chip+.city-chip:before{content:""}.city-tower-label{font-size:13px}.city-mcp-label{font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.city-tower-label{font-size:15px;font-weight:800;letter-spacing:.06em;padding:3px 12px}.city-node-label{font-size:10px;transition:opacity .2s}.tunnel-pause{padding:7px 14px;color:#e2e8f0;font:600 11px/1 Public Sans,system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;white-space:nowrap}.flow-run{display:flex;flex-direction:column;align-items:center;gap:4px;pointer-events:none}.flow-run .scene-label{font-size:11px;max-width:220px;overflow:hidden;text-overflow:ellipsis}.flow-steps{display:flex;gap:3px;font:600 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.06em}.flow-steps span{padding:2px 5px;border-radius:999px;color:#64748b;background:#03050b8c;border:1px solid rgba(100,116,139,.35)}.flow-steps span[data-s=running]{color:#03050b;background:var(--c);border-color:var(--c);box-shadow:0 0 12px var(--c)}.flow-steps span[data-s=done]{color:var(--c);border-color:color-mix(in srgb,var(--c) 60%,transparent)}.flow-steps span[data-s=failed]{color:#fecaca;background:#7f1d1d}.flow-step{font:600 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.08em;color:color-mix(in srgb,var(--c) 70%,white);text-shadow:0 0 8px var(--c);opacity:.55;pointer-events:none;white-space:nowrap;transition:opacity .3s}.flow-step[data-s=running]{opacity:1}.flow-hint{font-size:10px;padding:1px 7px;opacity:.9}.flow-label-core{font-size:11px;letter-spacing:.04em}.ap-root{background:radial-gradient(ellipse at 45% 50%,#03140e,#010604 60%,#000302)}.ap-root,.ap-tag,.ap-airport,.ap-gate,.ap-strip,.ap-wp,.ap-bearing{--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace}.ap-bearing{font:600 9px/1 var(--mono);color:#2fae6e;letter-spacing:.08em;opacity:.85;text-shadow:0 0 6px rgba(70,255,154,.5)}.ap-tag{position:relative;width:0;height:0;pointer-events:none;transition:none}.ap-leader{position:absolute;left:6px;top:-22px;overflow:visible}.ap-leader line{stroke:color-mix(in srgb,var(--c) 45%,#46ff9a);stroke-width:1;opacity:.7}.ap-tag-box{position:absolute;left:28px;top:-38px;display:grid;gap:1px;padding:2px 6px 2px 5px;border-left:2px solid var(--c);background:#010c089e;white-space:nowrap}.ap-call{font:700 10px/1.15 var(--mono);letter-spacing:.06em;color:#d9ffe9;text-shadow:0 0 8px color-mix(in srgb,var(--c) 70%,transparent)}.ap-data{font:500 9px/1.15 var(--mono);letter-spacing:.05em;color:#57d897}.ap-tag-big .ap-call{font-size:12px}.ap-tag-big .ap-data{font-size:10px}.ap-airport{width:max-content;display:flex;align-items:center;gap:6px;white-space:nowrap;font:600 10px/1 var(--mono);color:#c8f7de;letter-spacing:.04em;padding:3px 7px;border:1px solid color-mix(in srgb,var(--c) 55%,transparent);background:#010a07b3;text-shadow:0 0 8px color-mix(in srgb,var(--c) 60%,transparent)}.ap-airport-code{font-weight:800;color:var(--c);letter-spacing:.1em}.ap-gate{white-space:nowrap;font:500 9px/1 var(--mono);color:#a6e9c6;letter-spacing:.03em;padding:2px 5px;background:#010a078c;border-bottom:1px solid color-mix(in srgb,var(--c) 50%,transparent)}.ap-gate.ap-hot{color:#fff;font-weight:700;border-bottom-color:var(--c);box-shadow:0 0 10px color-mix(in srgb,var(--c) 50%,transparent)}.ap-strip{width:max-content;display:grid;gap:2px;text-align:left;padding:4px 9px 4px 8px;border-left:3px solid var(--c);background:#010c08b8;outline:1px solid rgba(70,255,154,.14);max-width:260px}.ap-strip-topic{font:600 11px/1.25 Public Sans,system-ui,sans-serif;color:#e8fff1;white-space:normal}.ap-strip-sub{font:500 9px/1.2 var(--mono);color:#5fbf8d;letter-spacing:.05em;white-space:nowrap}.ap-wp{white-space:nowrap;font:600 9px/1 var(--mono);letter-spacing:.05em;color:#e9fffb;padding:2px 5px;border:1px solid color-mix(in srgb,var(--c, #38e8ff) 60%,transparent);background:#010a0aa6;text-shadow:0 0 8px var(--c, #38e8ff)}.ap-tag-left .ap-leader{left:-28px;transform:scaleX(-1)}.ap-tag-left .ap-tag-box{left:auto;right:28px;text-align:right;border-left:0;border-right:2px solid var(--c);padding:2px 5px 2px 6px}
|
|
1
|
+
.scene-root{position:fixed;top:0;right:0;bottom:0;left:0;background:#03050b;color:#e8edf5;font-family:Public Sans,system-ui,sans-serif;overflow:hidden}.scene-root canvas{display:block}.hud{position:absolute;z-index:10;background:#0a0e1a8c;border:1px solid rgba(148,163,255,.16);border-radius:14px;backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3);box-shadow:0 8px 32px #00000059,inset 0 1px #ffffff0a}.hud-topwrap{position:absolute;z-index:10;top:12px;left:12px;max-width:calc(100% - var(--hud-side, 320px) - 36px);display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;pointer-events:none}.hud-topwrap.is-rail{--hud-side: 40px}.hud-topwrap>*{pointer-events:auto}.hud-top{position:relative;padding:6px 8px 6px 12px;min-width:0}.hud-bar{display:flex;align-items:center;gap:4px 8px;flex-wrap:wrap}.hud-bar .hud-run{margin-top:0}.hud-info{all:unset;cursor:pointer;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font:italic 600 11px/1 Georgia,serif;color:#94a3b8;border:1px solid rgba(148,163,184,.35)}.hud-info:hover,.hud-info.on{color:#e2e8f0;border-color:#818cf8}.hud-theme{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#03050b8c url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%2394a3b8'/%3E%3C/svg%3E") no-repeat right 9px center;color:#cbd5e1;border:1px solid rgba(148,163,255,.22);border-radius:999px;font:inherit;font-size:11px;text-transform:uppercase;letter-spacing:.08em;padding:4px 24px 4px 10px;cursor:pointer;outline:none}.hud-theme:hover{border-color:#818cf8}.hud-title{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;letter-spacing:-.01em;white-space:nowrap}.hud-sub{margin:6px 0 2px;max-width:460px;font-size:12px;line-height:1.45;color:#94a3b8}.hud-dot{width:9px;height:9px;border-radius:50%;background:#22c55e;box-shadow:0 0 10px #22c55e;animation:hud-ping 1.6s ease-out infinite}@keyframes hud-ping{0%{box-shadow:0 0 #22c55eb3}to{box-shadow:0 0 0 10px #22c55e00}}.hud-badge{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;padding:2px 7px;border-radius:999px;background:#94a3b829;color:#cbd5e1}.hud-stats{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.hud-stat{font-size:11px;color:#94a3b8;padding:2px 8px;border-radius:999px;background:#03050b66;white-space:nowrap}.hud-stat b{color:#f1f5f9;font-weight:700;font-variant-numeric:tabular-nums}.scene-root :focus-visible{outline:2px solid #818cf8;outline-offset:2px}.hud-side{top:12px;right:12px;bottom:12px;width:320px;display:flex;flex-direction:column;padding:8px 10px 10px;font-size:13px;box-sizing:border-box;animation:hs-in .18s ease-out}.hud-side.is-rail{width:40px;padding:6px 0;align-items:center}@keyframes hs-in{0%{opacity:.4}}.hs-head{display:flex;align-items:center;gap:2px;padding-bottom:8px;margin:0 -2px 2px;border-bottom:1px solid rgba(148,163,255,.12)}.hs-head button{all:unset;cursor:pointer;display:flex;align-items:center;gap:5px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#94a3b8;padding:5px 9px;border-radius:999px}.hs-head button:hover{color:#e2e8f0}.hs-head button.on{color:#f1f5f9;background:#818cf838}.hs-head em,.hs-icon em{font-style:normal;font-size:10px;font-weight:700;font-variant-numeric:tabular-nums;color:#c7d2fe;letter-spacing:0}.hs-head .hs-collapse{margin-left:auto;font-size:14px;padding:2px 8px;letter-spacing:0}.hs-rail{display:flex;flex-direction:column;align-items:center;gap:6px}.hs-rail button{all:unset;cursor:pointer;position:relative;width:30px;height:30px;display:grid;place-items:center;border-radius:9px;color:#94a3b8}.hs-rail button:hover{color:#e2e8f0;background:#94a3ff1a}.hs-rail .hs-collapse{font-size:14px;margin-bottom:4px}.hs-icon em{position:absolute;top:-3px;right:-5px;min-width:14px;height:14px;padding:0 3px;box-sizing:border-box;border-radius:999px;display:grid;place-items:center;font-size:9px;background:#4f46e5;color:#eef2ff}.hs-icon em:empty{min-width:8px;width:8px;height:8px;padding:0;top:1px;right:1px;background:#22d3ee;box-shadow:0 0 8px #22d3ee}.hs-body{flex:1;min-height:0;display:flex;flex-direction:column}.hs-body[hidden]{display:none}.hs-empty{margin:14px 4px;font-size:12px;line-height:1.5;color:#64748b}.hs-events{list-style:none;margin:6px -4px 0;padding:0;overflow-y:auto;min-height:0;flex:1;font-size:11.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hs-events li>*{all:unset;box-sizing:border-box;width:100%;display:flex;gap:8px;align-items:baseline;padding:4px 6px;border-radius:7px;color:#cbd5e1;line-height:1.4}.hs-events li>button{cursor:pointer}.hs-events li>button:hover{background:#94a3ff1a;color:#f1f5f9}.hs-events i{flex:0 0 7px;height:7px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c);transform:translateY(-1px)}.hs-events span{min-width:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}.ap-head{display:flex;align-items:center;gap:8px;margin-top:6px}.ap-count{flex:none;color:#64748b;font-size:11px;font-variant-numeric:tabular-nums}.ap-link{all:unset;cursor:pointer;font-size:12px;color:#93c5fd}.ap-link:hover{color:#bfdbfe}.ap-searchrow{display:flex;align-items:center;gap:8px;margin-top:8px}.ap-search{flex:1;min-width:0;width:100%;box-sizing:border-box;background:#03050b99;border:1px solid rgba(148,163,255,.2);border-radius:8px;color:inherit;font:inherit;font-size:12px;padding:6px 9px;outline:none}.ap-search:focus{border-color:#818cf8}.ap-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.ap-chips button{all:unset;cursor:pointer;display:flex;align-items:center;gap:5px;font-size:11px;padding:3px 7px;border-radius:999px;border:1px solid rgba(148,163,255,.15);color:#cbd5e1}.ap-chips button.on{border-color:var(--c);background:color-mix(in srgb,var(--c) 18%,transparent);color:#f8fafc}.ap-chips i{width:8px;height:8px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.ap-chips em{font-style:normal;color:var(--c);font-weight:700;font-variant-numeric:tabular-nums}.ap-row-filters{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;align-items:center}.ap-seg{display:flex;border:1px solid rgba(148,163,255,.15);border-radius:8px;overflow:hidden}.ap-seg{flex:none}.ap-seg button{all:unset;cursor:pointer;font-size:11px;padding:3px 6px;color:#94a3b8;text-transform:capitalize}.ap-seg button.on{background:#818cf840;color:#f1f5f9}.ap-row-filters select{flex:1;min-width:64px;background:#03050b99;color:#cbd5e1;border:1px solid rgba(148,163,255,.15);border-radius:8px;font:inherit;font-size:11px;padding:3px 6px}.ap-list{list-style:none;margin:8px -4px 0;padding:0;overflow-y:auto;min-height:0;flex:1}.ap-list li button{all:unset;box-sizing:border-box;width:100%;cursor:pointer;display:flex;align-items:center;gap:8px;padding:6px;border-radius:8px}.ap-list li button:hover{background:#94a3ff1a}.ap-list li button.is-done{opacity:.55}.ap-list i{flex:0 0 9px;height:9px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.ap-list i[data-status=thinking]{animation:ap-pulse .9s ease-in-out infinite}.ap-list i[data-status=waiting]{opacity:.5}.ap-list i[data-status=done]{background:transparent;border:1.5px solid var(--c);box-shadow:none}@keyframes ap-pulse{50%{transform:scale(1.5)}}.ap-name{flex:1;min-width:0;display:flex;flex-direction:column;font-size:12px;color:#e2e8f0}.ap-name small{color:#64748b;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-meta{text-align:right;font-size:11px;color:#94a3b8;font-variant-numeric:tabular-nums;display:flex;flex-direction:column}.ap-meta b{color:var(--c);font-weight:600;text-transform:lowercase}.hs-events li.is-skill>*{background:#f5b83d12}.hs-skill{flex:0 0 auto;font-size:9.5px;font-weight:600;line-height:1.5;text-transform:uppercase;letter-spacing:.06em;color:#fcd581;padding:0 6px;border-radius:999px;border:1px solid rgba(245,184,61,.55);background:#f5b83d1f}.ap-title{display:flex;align-items:center;gap:6px;min-width:0}.ap-skill{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-size:9.5px;font-weight:600;color:#fcd581;padding:0 6px;border-radius:999px;border:1px solid rgba(245,184,61,.55);background:#f5b83d1f}.ap-skill:before{content:"skill:";color:#b8893a;font-weight:500}.hs-skill:before{content:"";display:inline-block;width:6px;height:6px;margin:0 4px 0 -1px;border:1px solid currentColor;border-radius:50%;vertical-align:0;box-shadow:0 0 4px #f5b83d99}.ap-skills{display:flex;flex-wrap:wrap;gap:4px}.ap-skills span{font-size:11px;color:#e2e8f0;padding:2px 8px;border-radius:999px;border:1px solid rgba(245,184,61,.35);background:#f5b83d0f;display:inline-flex;gap:5px;align-items:baseline}.ap-skills span.on{border-color:#f5b83d;background:#f5b83d2e;color:#fde7b0;box-shadow:0 0 10px #f5b83d40}.ap-skills em{font-style:normal;font-size:10px;color:#b8893a;font-variant-numeric:tabular-nums}.ap-more{padding:6px;color:#64748b;font-size:11px}.ap-detail{overflow-y:auto;min-height:0;margin-top:8px;flex:1}.ap-detail h3{margin:0;display:flex;align-items:center;gap:8px;font-size:15px;color:var(--c)}.ap-detail h3 i{width:11px;height:11px;border-radius:50%;background:var(--c);box-shadow:0 0 10px var(--c)}.ap-detail h3 small{color:#64748b;font-size:11px;font-weight:500}.ap-status{margin-top:3px;font-size:12px;color:#cbd5e1}.ap-status[data-status=thinking]{color:#fde68a}.ap-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(46px,1fr));gap:4px;margin:10px 0 4px}.ap-stats div{background:#03050b73;border-radius:8px;padding:6px;text-align:center}.ap-stats dt{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:#64748b}.ap-stats dd{margin:2px 0 0;font-size:15px;font-weight:700;color:#f1f5f9;font-variant-numeric:tabular-nums}.ap-detail section{margin-top:10px}.ap-detail h4{margin:0 0 4px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#64748b}.ap-detail p{margin:0;font-size:12px;color:#cbd5e1}.ap-steps{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.ap-steps span{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;text-transform:uppercase;letter-spacing:.06em;padding:2px 7px;border-radius:999px;border:1px solid #334155;color:#64748b}.ap-steps span[data-status=running]{border-color:#fbbf24;color:#fde68a}.ap-steps span[data-status=done]{border-color:#22c55e;color:#86efac}.ap-steps span[data-status=failed]{border-color:#ef4444;color:#fca5a5}.ap-chip-link{all:unset;cursor:pointer;display:block;font-size:12px;color:#e2e8f0;padding:3px 6px;border-left:2px solid var(--c);margin:2px 0;border-radius:0 6px 6px 0}.ap-chip-link:hover{background:#94a3ff1a}.ap-wait{color:#fbbf24!important;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.ap-nodes{line-height:1.5}.ap-events{margin:0;padding-left:14px;display:grid;gap:3px;font-size:11px;color:#cbd5e1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hud-badge--live{background:#22c55e2e;color:#86efac}.hud-badge--denied{background:#f871712e;color:#fca5a5;text-transform:none;letter-spacing:.02em}.hud-chip{text-transform:none;letter-spacing:.02em;font-weight:500;background:#818cf829;color:#c7d2fe;white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}.hud-chip b{font-weight:650;color:#e0e7ff}.hud-run{display:flex;gap:6px;margin-top:8px;align-items:center;flex-wrap:wrap}.hud-run input{flex:1;min-width:160px;background:#03050b99;border:1px solid rgba(148,163,255,.2);border-radius:999px;color:inherit;font:inherit;font-size:12px;padding:6px 11px;outline:none}.hud-run button{border:0;border-radius:999px;padding:6px 13px;font:inherit;font-size:12px;font-weight:600;background:linear-gradient(135deg,#818cf8,#22d3ee);color:#03050b;cursor:pointer}.hud-run button:disabled{opacity:.5}.hud-run select{max-width:160px;min-width:0;background:#03050b99;color:#cbd5e1;border:1px solid rgba(148,163,255,.2);border-radius:999px;font:inherit;font-size:12px;padding:5px 9px;cursor:pointer}.hud-run span{font-size:11px;color:#86efac}.agentglow-embed{position:relative;overflow:hidden;width:100%;height:100%;min-height:320px;isolation:isolate}.agentglow-embed .scene-root{position:absolute;top:0;right:0;bottom:0;left:0}.lod-cluster-label{all:unset;box-sizing:border-box;display:grid;gap:1px;text-align:center;cursor:pointer;pointer-events:auto;font-size:12px;font-weight:600;color:#f8fafc;padding:4px 11px 5px;border-radius:12px;white-space:nowrap;background:#03050b9e;border:1px solid color-mix(in srgb,var(--c, #818cf8) 60%,transparent);text-shadow:0 0 10px var(--c, #818cf8);box-shadow:0 0 18px color-mix(in srgb,var(--c, #818cf8) 22%,transparent);transition:border-color .2s,background .2s}.lod-cluster-label:hover{background:color-mix(in srgb,var(--c, #818cf8) 22%,rgba(3,5,11,.7));border-color:var(--c, #818cf8)}.lod-cluster-label b{font-weight:700;letter-spacing:-.01em}.lod-cluster-label small{font-size:10px;font-weight:500;color:#94a3b8;text-shadow:none;font-variant-numeric:tabular-nums}.hud-dock{display:flex;align-items:center;gap:8px}.hud-dock:empty{display:none}.hud-dock>.hud{position:static}.hud-lod{padding:6px 8px 6px 12px;display:flex;align-items:center;gap:8px;font-size:12px;color:#cbd5e1;white-space:nowrap}.hud-lod span b{margin:0 1px}.hud-lod b{color:#f1f5f9;font-variant-numeric:tabular-nums}.hud-lod i{width:7px;height:7px;border-radius:50%;background:#a5b4fc;box-shadow:0 0 8px #a5b4fc}.hud-lod button{all:unset;cursor:pointer;font-size:11px;padding:3px 9px;border-radius:999px;border:1px solid rgba(148,163,255,.25);color:#c7d2fe}.hud-lod button:hover{background:#818cf833;color:#f8fafc}.scene-root{container:agscene / size}@container agscene (max-width: 719px){.scene-root .hud-top{padding:5px 7px 5px 10px}.scene-root .hud-title{font-size:13px}.scene-root .hud-theme{padding:3px 20px 3px 8px;font-size:10px;background-position:right 7px center}.scene-root .hud-stat:nth-child(n+3){display:none}.scene-root .hud-side:not(.is-rail){width:min(290px,calc(100% - 64px));padding:6px 8px 8px}.scene-root .hs-head button{padding:4px 6px;letter-spacing:.04em;font-size:10.5px}.scene-root .hs-head .hs-collapse{padding:2px 4px}.scene-root .ap-list li button{padding:4px 6px}.scene-root .hud-topwrap:not(.is-rail){--hud-side: min(290px, calc(100% - 64px) )}}@container agscene (max-height: 520px){.scene-root .hud-sub{max-height:4.5em;overflow:auto}}.scene-label.subway-station{font-size:10px;font-weight:500;padding:1px 6px;letter-spacing:.08em;text-transform:uppercase;color:#cbd5e1;opacity:.85}.scene-label.subway-airport{font-size:11px}.scene-label.subway-run{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:4px 9px;border-radius:10px;font-size:11px}.subway-steps{display:flex;gap:4px}.subway-steps b{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.06em;padding:0 5px;border-radius:999px;color:#94a3b8;border:1px solid #334155;text-shadow:none}.subway-steps b[data-st=running]{color:#fde68a;border-color:#fbbf24;box-shadow:0 0 8px #fbbf2499}.subway-steps b[data-st=done]{color:#bbf7d0;border-color:#22c55e}.subway-steps b[data-st=failed]{color:#fecaca;border-color:#ef4444}.scene-label.subway-flare{font-size:10px;transition:opacity .2s}.city-root{background:#05040d}.city-district{display:grid;gap:4px;padding:5px 10px 6px;border-radius:10px;transition:opacity .4s}.city-district-top{display:flex;align-items:baseline;gap:8px}.city-district-top b{font-size:12px;color:#f8fafc}.city-count{font-size:10px;font-weight:500;color:#a5b4fc;text-shadow:none}.city-steps{display:flex;gap:4px}.city-chip{--sc: #3b4256;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;padding:1px 7px;border-radius:999px;color:var(--sc);border:1px solid color-mix(in srgb,var(--sc) 70%,transparent);text-shadow:none}.city-chip[data-st=running]{color:#03050b;background:var(--sc);box-shadow:0 0 10px var(--sc)}.city-chip[data-st=done]{color:var(--sc);background:color-mix(in srgb,var(--sc) 18%,transparent)}.city-chip[data-st=queued]{color:#64748b;border-color:#334155}.city-chip+.city-chip:before{content:""}.city-tower-label{font-size:13px}.city-mcp-label{font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.city-tower-label{font-size:15px;font-weight:800;letter-spacing:.06em;padding:3px 12px}.city-node-label{font-size:10px;transition:opacity .2s}.tunnel-pause{padding:7px 14px;color:#e2e8f0;font:600 11px/1 Public Sans,system-ui,sans-serif;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;white-space:nowrap}.flow-run{display:flex;flex-direction:column;align-items:center;gap:4px;pointer-events:none}.flow-run .scene-label{font-size:11px;max-width:220px;overflow:hidden;text-overflow:ellipsis}.flow-steps{display:flex;gap:3px;font:600 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.06em}.flow-steps span{padding:2px 5px;border-radius:999px;color:#64748b;background:#03050b8c;border:1px solid rgba(100,116,139,.35)}.flow-steps span[data-s=running]{color:#03050b;background:var(--c);border-color:var(--c);box-shadow:0 0 12px var(--c)}.flow-steps span[data-s=done]{color:var(--c);border-color:color-mix(in srgb,var(--c) 60%,transparent)}.flow-steps span[data-s=failed]{color:#fecaca;background:#7f1d1d}.flow-step{font:600 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.08em;color:color-mix(in srgb,var(--c) 70%,white);text-shadow:0 0 8px var(--c);opacity:.55;pointer-events:none;white-space:nowrap;transition:opacity .3s}.flow-step[data-s=running]{opacity:1}.flow-hint{font-size:10px;padding:1px 7px;opacity:.9}.flow-label-core{font-size:11px;letter-spacing:.04em}.ap-root{background:radial-gradient(ellipse at 45% 50%,#03140e,#010604 60%,#000302)}.ap-root,.ap-tag,.ap-airport,.ap-gate,.ap-strip,.ap-wp,.ap-bearing{--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace}.ap-bearing{font:600 9px/1 var(--mono);color:#2fae6e;letter-spacing:.08em;opacity:.85;text-shadow:0 0 6px rgba(70,255,154,.5)}.ap-tag{position:relative;width:0;height:0;pointer-events:none;transition:none}.ap-leader{position:absolute;left:6px;top:-22px;overflow:visible}.ap-leader line{stroke:color-mix(in srgb,var(--c) 45%,#46ff9a);stroke-width:1;opacity:.7}.ap-tag-box{position:absolute;left:28px;top:-38px;display:grid;gap:1px;padding:2px 6px 2px 5px;border-left:2px solid var(--c);background:#010c089e;white-space:nowrap}.ap-call{font:700 10px/1.15 var(--mono);letter-spacing:.06em;color:#d9ffe9;text-shadow:0 0 8px color-mix(in srgb,var(--c) 70%,transparent)}.ap-data{font:500 9px/1.15 var(--mono);letter-spacing:.05em;color:#57d897}.ap-tag-big .ap-call{font-size:12px}.ap-tag-big .ap-data{font-size:10px}.ap-airport{width:max-content;display:flex;align-items:center;gap:6px;white-space:nowrap;font:600 10px/1 var(--mono);color:#c8f7de;letter-spacing:.04em;padding:3px 7px;border:1px solid color-mix(in srgb,var(--c) 55%,transparent);background:#010a07b3;text-shadow:0 0 8px color-mix(in srgb,var(--c) 60%,transparent)}.ap-airport-code{font-weight:800;color:var(--c);letter-spacing:.1em}.ap-gate{white-space:nowrap;font:500 9px/1 var(--mono);color:#a6e9c6;letter-spacing:.03em;padding:2px 5px;background:#010a078c;border-bottom:1px solid color-mix(in srgb,var(--c) 50%,transparent)}.ap-gate.ap-hot{color:#fff;font-weight:700;border-bottom-color:var(--c);box-shadow:0 0 10px color-mix(in srgb,var(--c) 50%,transparent)}.ap-strip{width:max-content;display:grid;gap:2px;text-align:left;padding:4px 9px 4px 8px;border-left:3px solid var(--c);background:#010c08b8;outline:1px solid rgba(70,255,154,.14);max-width:260px}.ap-strip-topic{font:600 11px/1.25 Public Sans,system-ui,sans-serif;color:#e8fff1;white-space:normal}.ap-strip-sub{font:500 9px/1.2 var(--mono);color:#5fbf8d;letter-spacing:.05em;white-space:nowrap}.ap-wp{white-space:nowrap;font:600 9px/1 var(--mono);letter-spacing:.05em;color:#e9fffb;padding:2px 5px;border:1px solid color-mix(in srgb,var(--c, #38e8ff) 60%,transparent);background:#010a0aa6;text-shadow:0 0 8px var(--c, #38e8ff)}.ap-tag-left .ap-leader{left:-28px;transform:scaleX(-1)}.ap-tag-left .ap-tag-box{left:auto;right:28px;text-align:right;border-left:0;border-right:2px solid var(--c);padding:2px 5px 2px 6px}
|