agentglow 0.2.10 → 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.
Files changed (28) hide show
  1. package/dist/chunks/{KitScene-Bm1I35Zc.js → KitScene-DG_pcnWW.js} +1273 -1195
  2. package/dist/chunks/{index-COLbf8XM.js → index-Agh7jdYu.js} +182 -182
  3. package/dist/chunks/{index-CGTp73GN.js → index-B2EHxcBQ.js} +400 -400
  4. package/dist/chunks/{index-D-r9aJ4u.js → index-B4Cqo621.js} +33 -33
  5. package/dist/chunks/index-BfQsJ0TH.js +751 -0
  6. package/dist/chunks/index-BmBGYhJS.js +891 -0
  7. package/dist/chunks/index-Bnn-x-aE.js +767 -0
  8. package/dist/chunks/{index-BWsSd_Wm.js → index-CTQTtm9q.js} +212 -212
  9. package/dist/chunks/{index-_IwfbZy7.js → index-CTZbUTDY.js} +62 -62
  10. package/dist/chunks/{index-cRPj-lzn.js → index-CdKvybsL.js} +284 -284
  11. package/dist/chunks/index-CeiIEWek.js +818 -0
  12. package/dist/chunks/{index-D4Wlmsay.js → index-Ci8tSMhc.js} +15 -15
  13. package/dist/chunks/{index-C2vLpNCb.js → index-Cls_VZdb.js} +100 -100
  14. package/dist/chunks/index-DFFRhihO.js +892 -0
  15. package/dist/chunks/index-DMCETM4H.js +605 -0
  16. package/dist/chunks/{index-AugvjZJN.js → index-URn4zDHp.js} +223 -223
  17. package/dist/chunks/index-u4rYZ1UO.js +495 -0
  18. package/dist/index.js +1 -1
  19. package/dist/style.css +1 -1
  20. package/dist/types/world.d.ts +30 -5
  21. package/package.json +1 -1
  22. package/dist/chunks/index-BAQDf-0T.js +0 -492
  23. package/dist/chunks/index-BRnLrSfZ.js +0 -605
  24. package/dist/chunks/index-CKyn9lcT.js +0 -753
  25. package/dist/chunks/index-CnoB0ZDk.js +0 -889
  26. package/dist/chunks/index-KmczAvvY.js +0 -818
  27. package/dist/chunks/index-Z4vdWCok.js +0 -763
  28. package/dist/chunks/index-uZGu9jzU.js +0 -887
@@ -1,5 +1,7 @@
1
1
  export type AgentType = "planner" | "researcher" | "graph_scout" | "records_scout" | "data_scout" | "writer";
2
- export type StepName = "plan" | "research" | "write";
2
+ /** Any workflow-defined step name (the backend scrubs and caps it). */
3
+ export type StepName = string;
4
+ export type StepStatus = "queued" | "running" | "done" | "failed";
3
5
  export type InstanceStatus = "spawning" | "thinking" | "waiting" | "done" | "failed";
4
6
  export type WorldEvent = {
5
7
  type: "run";
@@ -105,7 +107,13 @@ export declare const AGENT_TYPES: {
105
107
  }[];
106
108
  export declare const TYPE_COLOR: Record<AgentType, string>;
107
109
  export declare const TYPE_LABEL: Record<AgentType, string>;
108
- export declare const STEPS: StepName[];
110
+ /**
111
+ * Scenes draw a run's steps in 3 fixed slots (the planner / researcher / writer positions): slot 0 = the 1st step seen,
112
+ * slot 1 = the 2nd, slot 2 = everything after. A 3-step workflow (plan / research / write) maps 1:1.
113
+ */
114
+ export declare const STEP_SLOTS: number[];
115
+ /** Step chips / label segments shown per run before collapsing the rest into "+N". */
116
+ export declare const MAX_STEP_CHIPS = 6;
109
117
  export declare const RUN_COLORS: string[];
110
118
  export declare const KIND_COLOR: Record<string, string>;
111
119
  export type Instance = {
@@ -167,16 +175,33 @@ export type Run = {
167
175
  color: string;
168
176
  slot: number;
169
177
  status: "started" | "completed" | "failed";
170
- steps: Record<StepName, "queued" | "running" | "done" | "failed">;
178
+ /** status of every step seen so far; a step is only known once its first event arrives */
179
+ steps: Record<StepName, StepStatus>;
180
+ /** step names in first-seen order */
181
+ stepOrder: StepName[];
171
182
  /** true once a step event arrives (e.g. Hatchet); plain agent runs have no steps */
172
183
  hasSteps: boolean;
173
184
  startedAt: number;
174
185
  endedAt: number;
175
186
  handoffAt: number;
176
- handoffFrom: StepName;
177
- handoffTo: StepName;
187
+ /** handoff between step SLOTS (see STEP_SLOTS), never within one */
188
+ handoffFrom: number;
189
+ handoffTo: number;
190
+ /** the step that finished most recently (handoff source) */
191
+ lastDone: StepName;
178
192
  final: string;
179
193
  };
194
+ /** Which of the 3 scene slots a step is drawn in (see STEP_SLOTS). */
195
+ export declare function stepSlot(r: Run, step: StepName): number;
196
+ /** A slot's status: running if any of its steps runs, failed if any (last attempt) failed, done once all are done. */
197
+ export declare function slotStatus(r: Run, k: number): StepStatus;
198
+ /** A slot's caption: its step, or the running (else latest) one plus "+N" when the last slot holds several; "" if none yet. */
199
+ export declare function slotLabel(r: Run, k: number): string;
200
+ /** Steps for chips / label lines: the first MAX_STEP_CHIPS in order, plus how many more are hidden. */
201
+ export declare function stepChips(r: Run, max?: number): {
202
+ shown: StepName[];
203
+ more: number;
204
+ };
180
205
  export type Comet = {
181
206
  id: number;
182
207
  run: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentglow",
3
- "version": "0.2.10",
3
+ "version": "0.2.11",
4
4
  "description": "Live 3D views of agent systems (LangGraph, deepagents, any OpenTelemetry-instrumented agents) as a React component.",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -1,492 +0,0 @@
1
- import { jsxs as L, jsx as a, Fragment as ce } from "react/jsx-runtime";
2
- import { Trail as we, 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 U } from "@react-three/fiber";
5
- import { useRef as S, useMemo as T, useEffect as et, useState as De } from "react";
6
- import * as e from "three";
7
- import { h as se, i as tt, T as pe, f as nt, a as Z, p as ot, e as rt, l as st, s as at, L as fe, w as E, K as ct, G as it, b as Q, c as Ge, d as lt, g as Me, S as re, R as ut, u as pt, j as ft } from "./KitScene-Bm1I35Zc.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, Be = { plan: Math.PI * 0.5, research: Math.PI * 0.5 + _e / 3, write: Math.PI * 0.5 + _e * 2 / 3 }, Fe = tt, dt = (t) => (se(t, 11) - 0.5) * 2.4, N = {
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 Re(t) {
16
- const s = t.toLowerCase();
17
- let o = N.index.get(s);
18
- if (o === void 0) {
19
- const n = Math.max(1, N.pos.length);
20
- let c = 7;
21
- for (let y = 0; y < s.length; y++) c = c * 31 + s.charCodeAt(y) >>> 0;
22
- o = c % n, N.index.set(s, o);
23
- }
24
- return o;
25
- }
26
- function ht(t, s) {
27
- const o = N.group;
28
- return !o || !N.pos.length ? !1 : (s.copy(N.pos[Re(t)]).applyMatrix4(o.matrixWorld), !0);
29
- }
30
- const mt = new e.Color("#ef4444"), yt = new e.Color("#f59e0b"), gt = new e.Color("#ffffff"), Mt = new e.SphereGeometry(1, 32, 32), wt = new e.SphereGeometry(1, 24, 24), bt = new e.SphereGeometry(0.06, 10, 10), xt = new e.RingGeometry(0.85, 1, 48), vt = new e.RingGeometry(0.92, 1, 48), St = new e.Vector3();
31
- function At(t) {
32
- for (const s of E.mcpPending.values()) if (s.instance === t) return !0;
33
- return !1;
34
- }
35
- function Ct({ agent: t, selected: s, onSelect: o }) {
36
- const n = t.inst, c = n.id, y = n.type, i = pe[y], m = Fe(y), r = m ? 0.46 : 0.35, p = S(null), d = S(null), u = S(null), w = S(null), h = S(null), g = S(null), b = S(null), f = S(null), O = S(""), $ = S(1), X = T(() => new e.Color(i), [i]), C = T(() => new e.Color(), []), A = T(
37
- () => ({
38
- core: new e.MeshBasicMaterial({ toneMapped: !1 }),
39
- halo: new e.MeshBasicMaterial({ color: i, 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
- [i]
45
- ), x = T(() => ({ phase: se(c, 12) * Math.PI * 2, rr: 0.75 + se(c, 13) * 0.5, tilt: 0.25 + se(c, 14) * 0.5, seed: se(c, 15) * Math.PI * 2, last: -1, born: new e.Vector3(), bornSet: !1 }), [c]);
46
- U(({ clock: P, camera: I }) => {
47
- var Pe;
48
- const M = p.current;
49
- if (!M) return;
50
- const l = performance.now(), v = P.elapsedTime, G = x.last < 0 ? 0 : Math.min(0.1, v - x.last);
51
- x.last = v;
52
- const R = n.status, B = R === "thinking" ? m ? 1.5 : 0.75 : R === "waiting" ? m ? 0.35 : 0.18 : m ? 0.8 : 0.4;
53
- x.phase += G * B * (F ? 0.3 : 1);
54
- const D = (m ? 0.42 : 0.24) * nt.spread * x.rr * (F ? 0.4 : 1), q = t.live;
55
- q.copy(t.pos), q.x += Math.cos(x.phase) * D, q.z += Math.sin(x.phase) * D, q.y += Math.sin(x.phase * 2 + x.seed) * D * x.tilt + (F ? 0 : Math.sin(v * 0.9 + x.seed) * 0.12);
56
- const V = Math.min(1, (l - n.bornAt) / 950);
57
- if (V < 1) {
58
- const _ = n.parent ? Z(n.parent) : void 0;
59
- x.bornSet || (x.born.copy(_ ?? q), x.bornSet = !0), _ && x.born.copy(_);
60
- const Ce = 1 - Math.pow(1 - V, 3);
61
- q.lerpVectors(St.copy(x.born), q, Ce);
62
- }
63
- M.position.copy(q);
64
- const J = ot(n, l), H = rt(n, l), ee = (l - n.bornAt) / 1e3, j = n.exitAt ? (l - n.exitAt) / st(n) : 0, te = r * t.scale, de = !n.exitAt && R === "thinking", be = !n.exitAt && R === "waiting", Ee = !n.exitAt && At(c), he = F ? 0.3 : 1, xe = de ? 0.5 + 0.5 * Math.sin(v * 7 * he) : 0, ve = be || Ee ? 0.5 + 0.5 * Math.sin(v * 1.7 * he) : 0;
65
- let me = de ? 2.4 + xe * 1.8 : be ? 0.35 + ve * 0.55 : 1.3;
66
- me += H * 5;
67
- const Se = ee < 0.6 ? 1 - ee / 0.6 : 0;
68
- me += Se * 3.5;
69
- let Ae = J * (1 + H * 0.35 + xe * 0.12 + ve * 0.08), ie = 0;
70
- if (n.exitAt && (ie = j < 0.1 ? 1 - j / 0.1 : 0, Ae = j < 0.1 ? 1 + j * 4 : 1.4 * Math.pow(Math.max(0, 1 - (j - 0.1) / 0.75), 2), me = 2 + ie * 5), d.current && (d.current.scale.setScalar(Math.max(1e-3, te * Ae)), C.copy(X), Ee && C.lerp(yt, 0.25 + ve * 0.25), R === "failed" && C.lerp(mt, 0.8), ie > 0 && C.lerp(gt, ie * 0.7), A.core.color.copy(C).multiplyScalar(me)), u.current && (u.current.scale.setScalar(Math.max(1e-3, te * Ae * (1.45 + H * 0.6 + xe * 0.2 + Se * 1))), A.halo.opacity = (de ? 0.09 : be ? 0.04 : 0.06) + H * 0.06 + Se * 0.15 + ie * 0.25), w.current && (w.current.visible = de, w.current.scale.setScalar(Math.max(1e-3, te * 2.2 * J)), w.current.rotation.y += 0.07 * he, w.current.rotation.x += 0.03 * he), h.current) {
71
- let _ = -1;
72
- ee < 0.9 ? (_ = ee / 0.9, A.shock.color.copy(X).multiplyScalar(2.2 * (1 - _) * (1 - _))) : n.exitAt && j < 0.5 && (_ = j / 0.5, A.shock.color.set(R === "failed" ? "#ef4444" : "#ffffff").multiplyScalar(2.5 * (1 - _) * (1 - _))), h.current.visible = _ >= 0, _ >= 0 && (h.current.quaternion.copy(I.quaternion), h.current.scale.setScalar(te * (1.2 + _ * 2.6)));
73
- }
74
- if (g.current && (g.current.visible = s, g.current.quaternion.copy(I.quaternion), g.current.scale.setScalar(te * 2.6 * Math.max(0.2, J))), (Pe = f.current) == null || Pe.position.set(0, -te * 1.5 - 0.35, 0), b.current) {
75
- const _ = n.exitAt ? R === "failed" ? "failed" : "done" : ee < 2.4 ? "born" : "name";
76
- if (_ !== O.current) {
77
- O.current = _;
78
- const Oe = c.split(":")[2], ye = `${n.name}${Oe !== void 0 ? ` ${Number(Oe) + 1}` : ""}`;
79
- b.current.setText(_ === "born" ? `+ ${ye}` : _ === "done" ? `${ye} done` : _ === "failed" ? `× ${ye}` : ye);
80
- }
81
- const Ce = _ === "born" ? 1 : _ === "name" ? 0.85 : Math.max(0, 1 - j * 1.6);
82
- $.current += ((at(c) ? 1 : 0) - $.current) * 0.12, b.current.setOpacity(Ce * $.current * Math.min(1, ee / 0.4));
83
- }
84
- });
85
- const k = (P) => (P.stopPropagation(), o(c));
86
- return /* @__PURE__ */ L("group", { ref: p, position: t.pos, children: [
87
- /* @__PURE__ */ a(we, { width: m ? 1.5 : 2.6, length: m ? 3 : 5, color: i, attenuation: (P) => P * P, decay: 1, children: /* @__PURE__ */ a("mesh", { ref: d, geometry: Mt, material: A.core, scale: 1e-3, onClick: k, onPointerOver: () => document.body.style.cursor = "pointer", onPointerOut: () => document.body.style.cursor = "" }) }),
88
- /* @__PURE__ */ a("mesh", { ref: u, geometry: wt, material: A.halo, scale: 1e-3, onClick: k }),
89
- /* @__PURE__ */ a("group", { ref: w, visible: !1, children: [0, 1, 2].map((P) => /* @__PURE__ */ a("mesh", { geometry: bt, material: A.electron, position: [Math.cos(P * Math.PI * 2 / 3), Math.sin(P * 2.1) * 0.35, Math.sin(P * Math.PI * 2 / 3)] }, P)) }),
90
- /* @__PURE__ */ a("mesh", { ref: h, geometry: xt, material: A.shock, visible: !1, raycast: () => null }),
91
- /* @__PURE__ */ a("mesh", { ref: g, geometry: vt, material: A.sel, visible: !1, raycast: () => null }),
92
- /* @__PURE__ */ a("group", { ref: f, children: /* @__PURE__ */ a(fe, { ref: b, text: "", color: i, size: m ? 0.24 : 0.3, opacity: 0, fit: !0, pxRange: m ? [8, 11.5] : [9, 13] }) })
93
- ] });
94
- }
95
- function Bt(t) {
96
- const s = [];
97
- for (let n = 0; n < t; n++) {
98
- const c = n / t, y = 0.45 + 4.1 * Math.sqrt(c) + (Math.random() - 0.5) * 0.4, m = n % 3 / 3 * Math.PI * 2 + y * 1.3 + (Math.random() - 0.5) * 0.5;
99
- s.push(new e.Vector3(Math.cos(m) * y, (Math.random() - 0.5) * 0.5 * (1.4 - c), Math.sin(m) * y));
100
- }
101
- return s;
102
- }
103
- const ze = 32, Le = new e.Color(5, 5, 5), Gt = 200, Ve = 1.35, Ne = 4.75 * Ve + 0.6, ge = 6;
104
- function Rt({ galaxy: t }) {
105
- const s = T(() => {
106
- const C = t.nodes.slice(0, Gt), A = new Set(C.map((x) => x.id));
107
- return { nodes: C, links: t.links.filter((x) => A.has(x.source) && A.has(x.target)) };
108
- }, [t]), o = S([]), n = S([]), c = S([]), y = S(Array(ge).fill(-1)), i = S(null), m = S(null), r = S(null), p = S(null), d = s.nodes.length, u = T(() => Bt(d), [d]), w = T(() => s.nodes.map((C) => new e.Color(ct[C.kind] ?? "#94a3b8")), [s]), h = T(() => new Float32Array(Math.max(1, d)), [d]), g = T(() => new Uint8Array(Math.max(1, d)), [d]), b = T(() => new e.Object3D(), []), f = T(() => new e.Color(), []), O = T(() => new e.Vector3(), []), $ = T(() => {
109
- const C = new Map(s.nodes.map((M, l) => [M.id, l])), A = [], x = [], k = /* @__PURE__ */ new Set(), P = (M, l) => {
110
- const v = M < l ? `${M}-${l}` : `${l}-${M}`;
111
- M === l || k.has(v) || (k.add(v), A.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 = C.get(M.source), v = C.get(M.target);
115
- l !== void 0 && v !== void 0 && u[l].distanceTo(u[v]) < 3 && P(l, v);
116
- }
117
- for (let M = 0; M < d; M++) {
118
- let l = -1, v = -1, G = 1e9, R = 1e9;
119
- for (let B = 0; B < d; B++) {
120
- if (B === M) continue;
121
- const D = u[M].distanceToSquared(u[B]);
122
- D < G ? (v = l, R = G, l = B, G = D) : D < R && (v = B, R = D);
123
- }
124
- l >= 0 && P(M, l), v >= 0 && R < 1.2 && P(M, v);
125
- }
126
- const I = new e.BufferGeometry();
127
- return I.setAttribute("position", new e.Float32BufferAttribute(A, 3)), I.setAttribute("color", new e.Float32BufferAttribute(x, 3)), I;
128
- }, [s, u, w, d]);
129
- et(() => (N.pos = u, N.index = new Map(s.nodes.map((C, A) => [C.name.toLowerCase(), A])), N.group = i.current, () => void (N.group = null)), [s, u]), U(({ camera: C, clock: A }) => {
130
- const x = i.current, k = m.current;
131
- if (!x || !k) return;
132
- x.updateMatrixWorld();
133
- const P = performance.now();
134
- h.fill(0), g.fill(0);
135
- let I = 0;
136
- for (const l of E.flares) {
137
- const v = (P - l.start) / 1e3, G = Re(l.node), R = Math.exp(-v * 1.3);
138
- if (R > h[G] && (h[G] = R), l.op === "write" && (g[G] = 1), r.current && I < ze && v < 1.6) {
139
- O.copy(u[G]).applyMatrix4(x.matrix), b.position.copy(O), b.quaternion.copy(C.quaternion);
140
- const B = v / 1.6;
141
- b.scale.setScalar((l.op === "write" ? 0.6 + B * 3.2 : 0.3 + B * 1.4) * (1 - B * 0.2)), b.updateMatrix(), r.current.setMatrixAt(I, b.matrix), l.op === "write" ? f.copy(Le).multiplyScalar(1 - B) : f.copy(w[G]).multiplyScalar(3 * (1 - B)), r.current.setColorAt(I, f), 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 = E.flares.length - 1; l >= 0 && M < ge; l--) {
147
- const v = E.flares[l], G = (P - v.start) / 1e3;
148
- if (G > 1.8) continue;
149
- const R = Re(v.node);
150
- let B = !1;
151
- for (let V = 0; V < M; V++) y.current[V] === R && (B = !0);
152
- if (B) continue;
153
- const D = o.current[M], q = n.current[M];
154
- D && q && (D.position.copy(u[R]), (y.current[M] !== R || c.current[M] !== v.op) && (q.setText(`${v.op === "write" ? "wrote · " : ""}${v.node}`), c.current[M] = v.op, q.setColor(v.op === "write" ? "#ffffff" : `#${w[R].getHexString()}`)), q.setOpacity(Math.min(1, (1.8 - G) / 0.5)), D.visible = !0), y.current[M] = R, M++;
155
- }
156
- for (let l = M; l < ge; l++)
157
- y.current[l] = -1, o.current[l] && (o.current[l].visible = !1);
158
- for (let l = 0; l < d; l++) {
159
- const v = h[l];
160
- b.position.copy(u[l]), b.quaternion.identity(), b.scale.setScalar(1 + v * (g[l] ? 4.5 : 3)), b.updateMatrix(), k.setMatrixAt(l, b.matrix), f.copy(w[l]).multiplyScalar(0.85 + v * 5), g[l] && f.lerp(Le, v * 0.7), k.setColorAt(l, f);
161
- }
162
- k.instanceMatrix.needsUpdate = !0, k.instanceColor && (k.instanceColor.needsUpdate = !0), p.current && p.current.scale.setScalar(1 + Math.sin(A.elapsedTime * 1.3) * 0.06);
163
- });
164
- const X = T(() => new e.Color("#c7d2fe").multiplyScalar(2.4), []);
165
- return /* @__PURE__ */ L(ce, { children: [
166
- /* @__PURE__ */ L("group", { ref: i, rotation: [0.3, 0, 0.08], scale: Ve, children: [
167
- /* @__PURE__ */ L("instancedMesh", { ref: m, args: [void 0, void 0, Math.max(1, d)], frustumCulled: !1, children: [
168
- /* @__PURE__ */ a("sphereGeometry", { args: [0.065, 10, 10] }),
169
- /* @__PURE__ */ a("meshBasicMaterial", { toneMapped: !1 })
170
- ] }),
171
- /* @__PURE__ */ a("lineSegments", { geometry: $, 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 }, (C, A) => /* @__PURE__ */ a("group", { ref: (x) => void (o.current[A] = x), visible: !1, children: /* @__PURE__ */ a(fe, { ref: (x) => void (n.current[A] = x), position: [0, 0.32, 0], text: "", size: 0.2, opacity: 0, pxRange: [8, 11.5] }) }, A)),
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(), Y = new e.Vector3(), z = new e.Color(), K = new e.Color(), ke = new e.Color("#f59e0b"), Tt = new e.Color("#ef4444"), le = 900, ne = 22;
191
- function Et() {
192
- const t = T(() => {
193
- const s = new e.BufferGeometry();
194
- return s.setAttribute("position", new e.BufferAttribute(new Float32Array(le * 6), 3)), s.setAttribute("color", new e.BufferAttribute(new Float32Array(le * 6), 3)), s;
195
- }, []);
196
- return U(({ clock: s }) => {
197
- const o = t.getAttribute("position"), n = t.getAttribute("color"), c = performance.now(), y = s.elapsedTime;
198
- let i = 0;
199
- const m = (r, p, d, u) => {
200
- i >= le || (o.setXYZ(i * 2, r.x, r.y, r.z), o.setXYZ(i * 2 + 1, p.x, p.y, p.z), n.setXYZ(i * 2, d.r, d.g, d.b), n.setXYZ(i * 2 + 1, u.r, u.g, u.b), i++);
201
- };
202
- for (const r of E.flares) {
203
- const p = (c - r.start) / 1900;
204
- if (p >= 1 || !Q(r.instance)) continue;
205
- const d = Z(r.instance);
206
- if (!d || !ht(r.node, Y)) continue;
207
- const u = E.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 ? pe[u.type] : "#c7d2fe").multiplyScalar(1.6 * w), K.copy(z).multiplyScalar(1.6)), m(d, Y, z, K);
209
- }
210
- for (const r of E.instances.values()) {
211
- if (!r.parent || !Q(r)) continue;
212
- const p = E.instances.get(r.parent);
213
- if (!p) continue;
214
- const d = (c - r.bornAt) / 1e3, u = d < 1.4 ? 1 - d / 1.4 : 0, w = Fe(r.type) && !r.exitAt ? 0.35 : 0, h = Math.max(u * 3, w);
215
- if (h <= 0.01) continue;
216
- const g = Z(r.parent), b = Z(r.id);
217
- !g || !b || (z.set(pe[p.type]).multiplyScalar(h), K.set(pe[r.type]).multiplyScalar(h * 1.4), m(g, b, z, K));
218
- }
219
- for (const r of E.mcpPending.values()) {
220
- if (!Q(r.instance)) continue;
221
- const p = Z(r.instance), d = E.mcpServers.get(r.server), u = Ge(r.server);
222
- if (!p || !d || !u) continue;
223
- Y.copy(u), Y.y += ae(d.slot);
224
- const w = lt(r, c), h = Math.min(1, w / 2.2), g = K.set(d.color);
225
- h < 0.5 ? g.lerp(ke, h * 2) : g.copy(ke).lerp(Tt, (h - 0.5) * 2);
226
- const b = 0.8 + Math.min(2.5, w * 0.9), f = y * (F ? 0.3 : 1.4);
227
- for (let O = 0; O < ne; O++) {
228
- const $ = O / ne, X = (O + 0.55) / ne, C = (($ - f) % 1 + 1) % 1, A = 0.25 + Math.pow(1 - C, 6) * 2.2 + (($ * 3 - f * 3) % 1 + 1) % 1 * 0.15;
229
- z.copy(g).multiplyScalar(A * b), W.copy(p).lerp(Y, $);
230
- const x = W.x, k = W.y, P = W.z;
231
- if (W.copy(p).lerp(Y, X), i >= le) break;
232
- o.setXYZ(i * 2, x, k, P), o.setXYZ(i * 2 + 1, W.x, W.y, W.z), n.setXYZ(i * 2, z.r, z.g, z.b), n.setXYZ(i * 2 + 1, z.r, z.g, z.b), i++;
233
- }
234
- }
235
- for (const r of E.mcpResolved) {
236
- const p = (c - r.resolvedAt) / 700;
237
- if (p >= 1 || !Q(r.instance)) continue;
238
- const d = Z(r.instance), u = E.mcpServers.get(r.server), w = Ge(r.server);
239
- if (!d || !u || !w) continue;
240
- Y.copy(w), Y.y += ae(u.slot);
241
- const h = 1 - p;
242
- for (let g = 0; g < ne; g++) {
243
- const b = g / ne, f = (g + 1) / ne, O = Math.abs(b - h), $ = (1 - p) * (0.15 + Math.exp(-O * 18) * 5);
244
- z.set(u.color).lerp(K.setRGB(1, 1, 1), 0.6).multiplyScalar($), W.copy(d).lerp(Y, b);
245
- const X = W.x, C = W.y, A = W.z;
246
- if (W.copy(d).lerp(Y, f), i >= le) break;
247
- o.setXYZ(i * 2, X, C, A), o.setXYZ(i * 2 + 1, W.x, W.y, W.z), n.setXYZ(i * 2, z.r, z.g, z.b), n.setXYZ(i * 2 + 1, z.r, z.g, z.b), i++;
248
- }
249
- }
250
- t.setDrawRange(0, i * 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 Pt(t, s, o, n, c) {
254
- const y = (t.x + s.x) / 2, i = (t.y + s.y) / 2 + n, m = (t.z + s.z) / 2, r = 1 - o;
255
- return c.set(r * r * t.x + 2 * r * o * y + o * o * s.x, r * r * t.y + 2 * r * o * i + o * o * s.y, r * r * t.z + 2 * r * o * m + o * o * s.z);
256
- }
257
- function Ot({ comet: t }) {
258
- const s = S(null), o = E.instances.get(t.from), n = o ? pe[o.type] : "#ffffff", c = T(() => new e.Color(n).multiplyScalar(4), [n]);
259
- return U(() => {
260
- const y = performance.now(), i = Math.min(1, (y - t.start) / t.dur), m = i < 0.5 ? 2 * i * i : 1 - Math.pow(-2 * i + 2, 2) / 2, r = Z(t.from), p = Z(t.to);
261
- !s.current || !r || !p || (Y.copy(r), Pt(Y, p, m, 1.2 + r.distanceTo(p) * 0.15, s.current.position), s.current.scale.setScalar(i >= 1 ? 1e-3 : 1));
262
- }), /* @__PURE__ */ a(we, { width: 2.2, length: 7, color: n, attenuation: (y) => y * y, 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: c, toneMapped: !1 })
265
- ] }) });
266
- }
267
- function _t() {
268
- const [t, s] = De([]), o = S(-1);
269
- return U(() => {
270
- let n = E.comets.length * 7919 + Me.version * 104729;
271
- for (const c of E.comets) n += c.id;
272
- n !== o.current && (o.current = n, s(Me.grouped ? E.comets.filter((c) => Q(c.from) && Q(c.to)) : E.comets.slice()));
273
- }), /* @__PURE__ */ a(ce, { children: t.map((n) => /* @__PURE__ */ a(Ot, { comet: n }, n.id)) });
274
- }
275
- const zt = new e.Vector3(0, 1, 0);
276
- function Lt({ call: t }) {
277
- var c;
278
- const s = S(null), o = ((c = E.mcpServers.get(t.server)) == null ? void 0 : c.color) ?? "#e5e7eb", n = T(() => new e.Color(o).lerp(new e.Color("#ffffff"), 0.35).multiplyScalar(6), [o]);
279
- return U(() => {
280
- var w;
281
- const y = performance.now(), i = Math.min(1, (y - t.start) / t.dur), m = i * i * (3 - 2 * i), r = Z(t.instance), p = Ge(t.server);
282
- if (!s.current || !r || !p) return;
283
- Y.copy(p), Y.y += ae(((w = E.mcpServers.get(t.server)) == null ? void 0 : w.slot) ?? 0);
284
- const d = t.phase === "call" ? r : Y, u = t.phase === "call" ? Y : r;
285
- s.current.position.copy(d).lerp(u, m), W.copy(u).sub(d).normalize(), s.current.quaternion.setFromUnitVectors(zt, W), s.current.scale.set(i >= 1 ? 1e-3 : 1, i >= 1 ? 1e-3 : 1, i >= 1 ? 1e-3 : 1);
286
- }), /* @__PURE__ */ a(we, { width: 1.4, length: 10, color: o, attenuation: (y) => y * y * y, 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 kt() {
292
- const [t, s] = De([]), o = S(-1);
293
- return U(() => {
294
- let n = E.mcpCalls.length * 7919 + Me.version * 104729;
295
- for (const c of E.mcpCalls) n += c.id;
296
- n !== o.current && (o.current = n, s(Me.grouped ? E.mcpCalls.filter((c) => Q(c.instance)) : E.mcpCalls.slice()));
297
- }), /* @__PURE__ */ a(ce, { children: t.map((n) => /* @__PURE__ */ a(Lt, { call: n }, n.id)) });
298
- }
299
- const It = new e.CylinderGeometry(0.22, 0.22, 0.75, 12), Wt = new e.TorusGeometry(0.5, 0.04, 8, 40), $t = new e.BoxGeometry(0.3, 0.03, 0.03), qt = new e.BoxGeometry(0.75, 0.02, 0.42), Xt = new e.SphereGeometry(0.55, 20, 20), ae = (t) => t % 2 ? 0.9 : 1.6;
300
- function Yt({ mcp: t }) {
301
- const s = t.srv, o = s.color, n = S(null), c = S(null), y = S(null), i = T(() => new e.Color(o), [o]), m = T(
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 = S(null);
311
- return U(({ clock: p }, d) => {
312
- if (!n.current) return;
313
- const u = performance.now(), w = p.elapsedTime;
314
- n.current.position.copy(t.pos), n.current.position.y += ae(s.slot);
315
- const h = Math.exp(-((u - s.activeAt) / 1e3) * 1.8), g = s.inflight > 0, b = F ? 0.25 : 1;
316
- c.current && (c.current.rotation.x += d * (g ? 2.4 : 0.35) * b), m.body.color.copy(i).multiplyScalar(0.9 + (g ? 1.6 + Math.sin(w * 6) * 0.6 : 0) + h * 3), r.current && (r.current.rotation.z += d * (g ? 1.5 : 0.25) * b), m.ring.color.copy(i).multiplyScalar(0.7 + h * 3 + (g ? 1 : 0)), y.current && y.current.scale.setScalar(1 + h * 1.2 + (g ? 0.4 + Math.sin(w * 6) * 0.25 : 0)), m.beacon.opacity = 0.05 + h * 0.1 + (g ? 0.07 : 0);
317
- }), /* @__PURE__ */ L("group", { ref: n, children: [
318
- /* @__PURE__ */ a("mesh", { geometry: It, material: m.body }),
319
- /* @__PURE__ */ a("mesh", { ref: r, geometry: Wt, material: m.ring, rotation: [Math.PI / 2, 0, 0] }),
320
- /* @__PURE__ */ a("group", { ref: c, children: [-1, 1].map((p) => /* @__PURE__ */ L("group", { children: [
321
- /* @__PURE__ */ a("mesh", { geometry: $t, material: m.strut, position: [p * 0.55, 0, 0] }),
322
- /* @__PURE__ */ a("mesh", { geometry: qt, material: m.panel, position: [p * 1.05, 0, 0] })
323
- ] }, p)) }),
324
- /* @__PURE__ */ a("mesh", { ref: y, geometry: Xt, material: m.beacon }),
325
- /* @__PURE__ */ a(fe, { 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), Dt = new e.EdgesGeometry(Ue), ue = new e.Vector3(), oe = new e.Vector3();
329
- function Ft({ mcp: t, backend: s }) {
330
- const o = t.srv, n = s.res, c = T(() => new e.Color(o.color).lerp(new e.Color("#ffffff"), 0.3), [o.color]), y = S(null), i = S(null), m = S(null), r = S(""), p = T(
331
- () => ({
332
- fill: new e.MeshBasicMaterial({ color: c, transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 }),
333
- edge: new e.LineBasicMaterial({ color: c, transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 }),
334
- tether: new e.LineBasicMaterial({ color: c, transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1 })
335
- }),
336
- [c]
337
- ), d = T(() => {
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 U(({ clock: u }) => {
342
- var X;
343
- const w = performance.now(), h = n.inflight > 0, g = Math.exp(-((w - n.activeAt) / 1e3) * 1.5), b = h && !F ? 0.5 + 0.5 * Math.sin(u.elapsedTime * 5) : 0;
344
- oe.copy(s.pos), oe.y += ae(o.slot) * 0.6, (X = y.current) == null || X.position.copy(oe), i.current && (i.current.rotation.y = F ? 0.4 : u.elapsedTime * (h ? 1.2 : 0.25));
345
- const f = h ? 1.4 + b * 0.8 : 0.18 + g * 0.9;
346
- p.fill.color.copy(c).multiplyScalar(f * 0.35), p.edge.color.copy(c).multiplyScalar(f * 1.4), p.tether.color.copy(c).multiplyScalar(h ? 0.7 + b * 0.4 : 0.12 + g * 0.5), ue.copy(t.pos), ue.y += ae(o.slot);
347
- const O = d.geometry.getAttribute("position");
348
- O.setXYZ(0, ue.x, ue.y, ue.z), O.setXYZ(1, oe.x, oe.y, oe.z), O.needsUpdate = !0;
349
- let $ = n.name;
350
- if (h) {
351
- let C = "";
352
- for (const A of E.mcpPending.values()) A.server === o.name && A.resource === n.name && (C = A.tool);
353
- $ = `${n.name} ▸ ${C || "query"}()`;
354
- }
355
- m.current && ($ !== r.current && m.current.setText(r.current = $), m.current.setOpacity(h ? 1 : 0.5 + g * 0.5));
356
- }), /* @__PURE__ */ L(ce, { children: [
357
- /* @__PURE__ */ a("primitive", { object: d }),
358
- /* @__PURE__ */ L("group", { ref: y, children: [
359
- /* @__PURE__ */ L("group", { ref: i, children: [
360
- /* @__PURE__ */ a("mesh", { geometry: Ue, material: p.fill }),
361
- /* @__PURE__ */ a("lineSegments", { geometry: Dt, material: p.edge })
362
- ] }),
363
- /* @__PURE__ */ a(fe, { ref: m, 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 Te = { queued: "#64748b", running: "#fbbf24", done: "#22c55e", failed: "#ef4444" }, Vt = new e.TorusGeometry(1, 1, 6, 320);
368
- function Nt() {
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 Ut = new e.OctahedronGeometry(0.26, 0), Zt = new e.RingGeometry(0.34, 0.42, 40), Ht = new e.SphereGeometry(0.16, 12, 12), Ie = new e.Matrix4(), We = new e.Vector3(), $e = new e.Quaternion(), qe = new e.Quaternion(), jt = new e.Vector3(1, 0, 0), Xe = (t, s, o, n) => n.set(Math.cos(o) * t, Math.sin(o) * s, 0);
395
- function Kt({ run: t, color: s }) {
396
- pt();
397
- const o = t.status !== "started", n = [{ text: "hatchet ", color: s }];
398
- if (t.hasSteps) for (const c of re) n.push({ text: ` ${t.steps[c] === "running" ? "›" : "·"}${c}`, color: Te[t.steps[c]] });
399
- else n.push({ text: o ? "complete" : "running…", color: "#94a3b8" });
400
- return o && n.push({ text: " brief ready", color: "#4ade80" }), /* @__PURE__ */ a(fe, { 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] });
401
- }
402
- function Qt({ run: t }) {
403
- const s = t.id, o = t.color, n = T(() => dt(s), [s]), c = T(() => (se(s, 16) - 0.5) * 0.24, [s]), y = S(null), i = S([]), m = S([]), r = S([]), p = S(null), d = S(null), u = T(() => new e.Color(), []), w = T(() => new e.Color(o), [o]), h = T(
404
- () => ({
405
- orbit: Nt(),
406
- beads: re.map(() => new e.MeshBasicMaterial({ transparent: !0, toneMapped: !1 })),
407
- halos: re.map(() => new e.MeshBasicMaterial({ transparent: !0, blending: e.AdditiveBlending, depthWrite: !1, toneMapped: !1, side: e.DoubleSide })),
408
- runner: new e.MeshBasicMaterial({ color: new e.Color("#fde68a").multiplyScalar(5), toneMapped: !1 })
409
- }),
410
- []
411
- );
412
- return U(({ clock: g }) => {
413
- var v;
414
- const b = y.current;
415
- if (!b) return;
416
- const f = t.run ?? E.runs.get(s), O = performance.now(), $ = g.elapsedTime;
417
- We.crossVectors(t.side, t.axis), Ie.makeBasis(t.side, t.axis, We), $e.setFromRotationMatrix(Ie), qe.setFromAxisAngle(jt, c), b.quaternion.copy($e).multiply(qe), b.position.copy(t.origin);
418
- const X = t.hu + 0.35, C = t.hv + 0.35, A = f ? Math.min(1, (O - f.startedAt) / 900) : 1, x = f != null && f.endedAt ? Math.max(0, 1 - (O - f.endedAt) / ut) : 1, k = A * x, P = f != null && f.endedAt ? Math.exp(-((O - f.endedAt) / 1e3) * 2.5) : 0, I = h.orbit.uniforms;
419
- I.uA.value = X, I.uB.value = C, I.uOpacity.value = k * 0.75, I.uColor.value.copy(w).multiplyScalar(1.1 + P * 3), (f == null ? void 0 : f.status) === "completed" && I.uColor.value.lerp(u.set("#4ade80"), P);
420
- for (let G = 0; G < re.length; G++) {
421
- const R = re[G], B = f ? f.steps[R] : "queued", D = !!(f != null && f.hasSteps), q = m.current[G];
422
- if (q && (q.visible = D, Xe(X, C, Be[R] + n, q.position)), !D) continue;
423
- const V = B === "running" ? 0.5 + 0.5 * Math.sin($ * (F ? 2 : 6)) : 0, J = i.current[G];
424
- J && (u.set(Te[B]).multiplyScalar(B === "queued" ? 0.7 : B === "running" ? 2 + V * 2 : 2.4), h.beads[G].color.copy(u), h.beads[G].opacity = k, J.scale.setScalar((B === "running" ? 1.3 + V * 0.25 : B === "done" ? 1.05 : 0.8) * Math.max(0.01, k)));
425
- const H = r.current[G];
426
- H && (H.visible = B !== "queued", h.halos[G].color.set(Te[B]), h.halos[G].opacity = k * (B === "running" ? 0.35 + V * 0.4 : 0.18), H.scale.setScalar(B === "running" ? 1.6 + V * 0.9 : 1.3));
427
- }
428
- const M = f != null && f.handoffAt ? (O - f.handoffAt) / 1400 : 2;
429
- if (p.current && f) {
430
- const G = Be[f.handoffFrom] + n;
431
- let R = Be[f.handoffTo] + n;
432
- R < G && (R += Math.PI * 2);
433
- const B = M >= 1 ? 1 : 1 - Math.pow(1 - Math.max(0, M), 3);
434
- Xe(X, C, G + (R - G) * B, p.current.position), p.current.scale.setScalar(M < 1 ? 1 : 1e-3);
435
- }
436
- const l = Math.hypot(t.side.z * X, t.axis.z * C);
437
- (v = d.current) == null || v.position.set(t.origin.x, 0.4, t.origin.z - l - 0.5);
438
- }), /* @__PURE__ */ L(ce, { children: [
439
- /* @__PURE__ */ L("group", { ref: y, children: [
440
- /* @__PURE__ */ a("mesh", { geometry: Vt, material: h.orbit, frustumCulled: !1 }),
441
- re.map((g, b) => /* @__PURE__ */ L("group", { ref: (f) => void (m.current[b] = f), visible: !1, children: [
442
- /* @__PURE__ */ a("mesh", { ref: (f) => void (i.current[b] = f), geometry: Ut, material: h.beads[b] }),
443
- /* @__PURE__ */ a("mesh", { ref: (f) => void (r.current[b] = f), geometry: Zt, material: h.halos[b] })
444
- ] }, g)),
445
- /* @__PURE__ */ a(we, { width: 3.2, length: 9, color: "#fde68a", attenuation: (g) => g * g, children: /* @__PURE__ */ a("mesh", { ref: p, geometry: Ht, material: h.runner, scale: 1e-3 }) })
446
- ] }),
447
- /* @__PURE__ */ a("group", { ref: d, children: t.run && /* @__PURE__ */ a(Kt, { run: t.run, color: o }) })
448
- ] });
449
- }
450
- const Jt = /* @__PURE__ */ L(ce, { children: [
451
- /* @__PURE__ */ a("fog", { attach: "fog", args: ["#03050b", 70, 170] }),
452
- /* @__PURE__ */ a(He, { radius: 130, depth: 50, count: F ? 1500 : 5e3, factor: 3.4, saturation: 0.4, fade: !0, speed: F ? 0 : 0.2 })
453
- ] });
454
- function an() {
455
- return /* @__PURE__ */ L(
456
- ft,
457
- {
458
- title: "orbit · planetary system",
459
- 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",
460
- preset: "radial",
461
- plane: "xz",
462
- camera: { position: [0, 25, 21], fov: 50 },
463
- controls: { maxPolarAngle: Math.PI * 0.42 },
464
- bg: "#03050b",
465
- fit: { nRef: 4, min: 0.62, max: 1.6, minRadius: 5.5 },
466
- agentRadius: 0.85,
467
- graph: { natural: Ne, radius: 2.6 },
468
- peripheryGap: 3.8,
469
- Background: Jt,
470
- Agent: Ct,
471
- RunMarker: Qt,
472
- McpServer: Yt,
473
- Backend: Ft,
474
- GraphResource: Rt,
475
- cluster: { radius: 1.35, variant: "stars" },
476
- clusterOffset: [0, 1.2, 0],
477
- PostFX: /* @__PURE__ */ L(je, { multisampling: 0, children: [
478
- /* @__PURE__ */ a(Ke, { mipmapBlur: !0, intensity: 1.3, luminanceThreshold: 0.2, luminanceSmoothing: 0.25, radius: 0.78 }),
479
- /* @__PURE__ */ a(Qe, { eskil: !1, offset: 0.25, darkness: 0.85 }),
480
- /* @__PURE__ */ a(Je, { opacity: 0.025 })
481
- ] }),
482
- children: [
483
- /* @__PURE__ */ a(Et, {}),
484
- /* @__PURE__ */ a(_t, {}),
485
- /* @__PURE__ */ a(kt, {})
486
- ]
487
- }
488
- );
489
- }
490
- export {
491
- an as default
492
- };