agentglow 0.1.0 → 0.2.0

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 (41) hide show
  1. package/README.md +38 -3
  2. package/dist/chunks/KitScene-BuFtYuhc.js +2737 -0
  3. package/dist/chunks/index-BPyTLdiF.js +792 -0
  4. package/dist/chunks/index-Bo5HRf-O.js +784 -0
  5. package/dist/chunks/index-C42Ihyo1.js +605 -0
  6. package/dist/chunks/index-C5YqtHnC.js +677 -0
  7. package/dist/chunks/index-Cyv7bII1.js +818 -0
  8. package/dist/chunks/index-D0UvupqM.js +1143 -0
  9. package/dist/chunks/index-D733n3Hf.js +1086 -0
  10. package/dist/chunks/index-DCmhxN8v.js +1010 -0
  11. package/dist/chunks/index-DO9SAG-u.js +753 -0
  12. package/dist/chunks/index-Dn6oRasS.js +887 -0
  13. package/dist/chunks/index-HyfZ0ePz.js +838 -0
  14. package/dist/chunks/index-XMOz-HBf.js +492 -0
  15. package/dist/chunks/index-ZT88hgW-.js +763 -0
  16. package/dist/chunks/index-e6egU2Q6.js +889 -0
  17. package/dist/chunks/index-jLXx_Wgk.js +68 -0
  18. package/dist/chunks/index-tonipLb2.js +980 -0
  19. package/dist/index.js +1 -1
  20. package/dist/style.css +1 -1
  21. package/dist/types/AgentScene.d.ts +14 -1
  22. package/dist/types/world.d.ts +59 -0
  23. package/package.json +1 -1
  24. package/dist/chunks/ClusterBall-CPsd6JvJ.js +0 -1489
  25. package/dist/chunks/index-0Bqa57T_.js +0 -786
  26. package/dist/chunks/index-4JCQqMml.js +0 -831
  27. package/dist/chunks/index-55W5crSg.js +0 -63
  28. package/dist/chunks/index-78lWZCrQ.js +0 -984
  29. package/dist/chunks/index-Bv6_kdaq.js +0 -768
  30. package/dist/chunks/index-Cgb5ir1r.js +0 -688
  31. package/dist/chunks/index-CqVCWpP7.js +0 -796
  32. package/dist/chunks/index-D1O5v601.js +0 -1065
  33. package/dist/chunks/index-DOoA9htC.js +0 -1181
  34. package/dist/chunks/index-K__sPGRy.js +0 -1134
  35. package/dist/chunks/index-N0zWN8NS.js +0 -857
  36. package/dist/chunks/index-NiYqQci9.js +0 -936
  37. package/dist/chunks/index-PQRnbPiJ.js +0 -565
  38. package/dist/chunks/index-VOXn1m-Q.js +0 -848
  39. package/dist/chunks/index-o4vs5msj.js +0 -837
  40. package/dist/chunks/index-yos7IepY.js +0 -890
  41. package/dist/chunks/spread-CWdeDFd9.js +0 -35
@@ -1,848 +0,0 @@
1
- var hs = Object.defineProperty;
2
- var fs = (l, t, n) => t in l ? hs(l, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : l[t] = n;
3
- var y = (l, t, n) => fs(l, typeof t != "symbol" ? t + "" : t, n);
4
- import { jsx as G, jsxs as ft, Fragment as _t } from "react/jsx-runtime";
5
- import { OrbitControls as ds } from "@react-three/drei";
6
- import { Canvas as us, useThree as ps, useFrame as bt } from "@react-three/fiber";
7
- import { EffectComposer as ms, Bloom as gs, Vignette as Ms, Noise as ys } from "@react-three/postprocessing";
8
- import { useState as jt, useMemo as ns, useEffect as is, useRef as tt } from "react";
9
- import * as x from "three";
10
- import { K as bs, h as Zt, w as _, b as Jt, R as xs, c as Qt, p as As, e as ws, S as V, l as dt, d as Lt, i as Rs, T as rs, C as Ss, f as zs, H as Gs, L as ut, t as Cs, g as vs, u as Is } from "./ClusterBall-CPsd6JvJ.js";
11
- import { r as Fs, j as zt, a as ts, i as Bs } from "./spread-CWdeDFd9.js";
12
- var os;
13
- const pt = typeof window < "u" && !!((os = window.matchMedia) != null && os.call(window, "(prefers-reduced-motion: reduce)").matches), rt = pt ? 0.3 : 1, X = pt ? 9e3 : 24e3, at = pt ? 3500 : 8e3, k = 6, Z = pt ? 450 : 1100, Ot = 9e3, q = 48, At = 31, ct = 4.6, st = 28, Tt = 64, wt = 18, kt = 16, ot = 8, N = Math.PI * 2, Ps = 200, H = [
14
- [-14.5, 2.5],
15
- [14.5, 2.5],
16
- [0, -13.5],
17
- [-12, -12],
18
- [12, -12],
19
- [0, 14]
20
- ], as = (l) => zt(l, 71) * 0.9, Dt = new Float32Array(6), Et = (l, t = Dt[l]) => Math.atan2(-H[l][1], -H[l][0]) + Math.PI / 3 + t;
21
- function yt(l, t, n, e = Dt[l]) {
22
- const s = Et(l, e) + t * N / 3;
23
- return n.set(H[l][0] + Math.cos(s) * ct, 0.35, H[l][1] + Math.sin(s) * ct);
24
- }
25
- const Os = [-150, -30, -100, 150, 30, -62, -128, 90].map((l) => l * Math.PI / 180);
26
- function Gt(l, t) {
27
- const n = Os[l % ot], e = 27 + (l >= ot ? 3 : 0);
28
- return t.set(Math.cos(n) * e, 3.2 + l % 2 * 1.2, Math.sin(n) * e);
29
- }
30
- const Mt = Object.fromEntries(Object.entries(rs).map(([l, t]) => [l, new x.Color(t)])), ss = { planner: 0, researcher: 1, graph_scout: 1, records_scout: 1, data_scout: 1, writer: 2 }, Rt = Bs, Ts = () => ({ used: !1, id: "", inst: null, seen: 0, x: 0, y: 0, z: 0, r: 1, g: 1, b: 1, omega: 0, bright: 0, swirl: 0, rscale: 1, tiltA: 0, tiltB: 0, count: 0, want: 0, rank: 0, dTh: 0, rad: 0, released: !1, p: 0, e: 0, waitMcp: 0 }), et = (l) => {
31
- const t = Math.sin(l * 127.1 + 311.7) * 43758.5453;
32
- return t - Math.floor(t);
33
- };
34
- function lt(l) {
35
- const t = new x.BufferGeometry();
36
- return t.setAttribute("position", new x.BufferAttribute(new Float32Array(l * 3), 3).setUsage(x.DynamicDrawUsage)), t.setAttribute("acol", new x.BufferAttribute(new Float32Array(l * 3), 3).setUsage(x.DynamicDrawUsage)), t.setAttribute("size", new x.BufferAttribute(new Float32Array(l), 1).setUsage(x.DynamicDrawUsage)), t;
37
- }
38
- const U = (l, t) => l.getAttribute(t).array, ht = (l) => {
39
- l.getAttribute("position").needsUpdate = !0, l.getAttribute("acol").needsUpdate = !0, l.getAttribute("size").needsUpdate = !0;
40
- };
41
- function ks() {
42
- return new x.ShaderMaterial({
43
- uniforms: { uScale: { value: 300 }, uPR: { value: 1 } },
44
- vertexShader: (
45
- /* glsl */
46
- `
47
- attribute vec3 acol;
48
- attribute float size;
49
- uniform float uScale;
50
- uniform float uPR;
51
- varying vec3 vC;
52
- void main() {
53
- vec4 mv = modelViewMatrix * vec4(position, 1.0);
54
- gl_Position = projectionMatrix * mv;
55
- gl_PointSize = min(96.0, size * uPR * uScale / max(0.5, -mv.z));
56
- vC = acol;
57
- if (size <= 0.0) gl_Position = vec4(2.0, 2.0, 2.0, 1.0);
58
- }`
59
- ),
60
- fragmentShader: (
61
- /* glsl */
62
- `
63
- varying vec3 vC;
64
- void main() {
65
- vec2 c = gl_PointCoord - 0.5;
66
- float d = dot(c, c) * 4.0;
67
- if (d > 1.0) discard;
68
- float a = exp(-d * 3.2) - 0.04;
69
- gl_FragColor = vec4(vC * max(a, 0.0), 1.0);
70
- }`
71
- ),
72
- transparent: !0,
73
- depthWrite: !1,
74
- blending: x.AdditiveBlending
75
- });
76
- }
77
- const R = new x.Vector3(), W = new x.Vector3(), T = new x.Vector3(), S = new x.Color(), J = new x.Color(), Q = new x.Object3D(), K = new x.Color(1, 1, 1), es = new x.Color("#fbbf24"), Ls = new x.Color("#ef4444"), Es = new x.Color("#ef4444");
78
- class _s {
79
- constructor(t) {
80
- y(this, "galaxy");
81
- y(this, "material", ks());
82
- y(this, "frame", 0);
83
- y(this, "selectedId", null);
84
- // ---- field
85
- y(this, "fieldGeo", lt(X));
86
- y(this, "fP", U(this.fieldGeo, "position"));
87
- y(this, "fC", U(this.fieldGeo, "acol"));
88
- y(this, "fS", U(this.fieldGeo, "size"));
89
- y(this, "fYb", new Float32Array(X));
90
- y(this, "fIvx", new Float32Array(X));
91
- y(this, "fIvz", new Float32Array(X));
92
- y(this, "fHeat", new Float32Array(X));
93
- y(this, "fT", new Float32Array(X * 3));
94
- y(this, "fOwner", new Int16Array(X).fill(-1));
95
- y(this, "fAng", new Float32Array(X));
96
- y(this, "fOrb", new Float32Array(X));
97
- y(this, "fRnd", new Float32Array(X));
98
- // ---- slots (agent instances)
99
- y(this, "slots", Array.from({ length: q }, Ts));
100
- y(this, "idToSlot", /* @__PURE__ */ new Map());
101
- y(this, "pendingByInst", /* @__PURE__ */ new Map());
102
- // ---- runs
103
- y(this, "runRef", new Array(k).fill(null));
104
- y(this, "rAlpha", new Float32Array(k));
105
- y(this, "rCol", Array.from({ length: k }, () => new x.Color()));
106
- y(this, "rColStr", new Array(k).fill(""));
107
- y(this, "runGeo", lt(k * Z));
108
- y(this, "rTh", new Float32Array(k * Z));
109
- y(this, "rSp", new Float32Array(k * Z));
110
- y(this, "rRr", new Float32Array(k * Z));
111
- y(this, "rY", new Float32Array(k * Z));
112
- // ---- nebula (FalkorDB)
113
- y(this, "nebGeo", lt(at));
114
- y(this, "anchorGeo");
115
- y(this, "nA", new Uint16Array(at));
116
- y(this, "nO", new Float32Array(at * 3));
117
- y(this, "nSpin", new Float32Array(at));
118
- y(this, "nB", new Float32Array(at));
119
- y(this, "aLocal");
120
- y(this, "aCol");
121
- y(this, "aNamed");
122
- y(this, "burst");
123
- y(this, "burstW");
124
- y(this, "flareCol");
125
- y(this, "nameIdx", /* @__PURE__ */ new Map());
126
- y(this, "nebAngle", 0.4);
127
- y(this, "nAnchors", 1);
128
- y(this, "edgeGeo", new x.BufferGeometry());
129
- y(this, "edgeA", new Uint16Array(0));
130
- y(this, "lastFlareId", 0);
131
- y(this, "lastFlare", null);
132
- // ---- streams + lines
133
- y(this, "streamGeo", lt(Ot));
134
- y(this, "beamGeo");
135
- y(this, "glowGeo", lt(q + k * 3 + ot));
136
- // ---- meshes
137
- y(this, "cores");
138
- y(this, "hits");
139
- y(this, "attractors");
140
- y(this, "stepRings");
141
- y(this, "rings");
142
- y(this, "pulsars");
143
- y(this, "pulsarBeams");
144
- y(this, "selRing");
145
- y(this, "ringStart", new Float32Array(st).fill(-1e9));
146
- y(this, "ringDur", new Float32Array(st).fill(1));
147
- y(this, "ringMax", new Float32Array(st));
148
- y(this, "ringPos", new Float32Array(st * 3));
149
- y(this, "ringCol", new Float32Array(st * 3));
150
- y(this, "ringNext", 0);
151
- y(this, "mcpSpin", new Float32Array(ot));
152
- // ------------------------------------------------------------------ frame
153
- /** LOD size multiplier for eddies, sampled once per frame */
154
- y(this, "lodK", 1);
155
- // active runs / swirls packed for the hot loop
156
- y(this, "aX", new Float32Array(k));
157
- y(this, "aZ", new Float32Array(k));
158
- y(this, "aA", new Float32Array(k));
159
- y(this, "aR", new Float32Array(k * 3));
160
- y(this, "sX", new Float32Array(q));
161
- y(this, "sZ", new Float32Array(q));
162
- y(this, "sS", new Float32Array(q));
163
- var g, w, d;
164
- this.galaxy = t;
165
- const n = Math.max(1, Math.min(Ps, t.nodes.length));
166
- this.nAnchors = n, t.nodes.slice(0, n).forEach((o, f) => this.nameIdx.set(o.name.toLowerCase(), f));
167
- for (let o = 0; o < X; o++) {
168
- const f = Math.sqrt(Math.random()) * At, a = Math.random() * N;
169
- this.fP[o * 3] = Math.cos(a) * f, this.fP[o * 3 + 2] = Math.sin(a) * f, this.fYb[o] = (Math.random() - 0.5) * (0.6 + f * 0.05), this.fP[o * 3 + 1] = this.fYb[o], this.fRnd[o] = Math.random(), this.fOrb[o] = 0.16 + 1.35 * Math.pow(Math.random(), 1.5), this.fAng[o] = Math.random() * N;
170
- }
171
- for (let o = 0; o < k * Z; o++) {
172
- this.rTh[o] = Math.random() * N, this.rSp[o] = 0.2 + Math.random() * 0.14;
173
- const f = (Math.random() + Math.random() + Math.random() - 1.5) * 0.55;
174
- this.rRr[o] = f, this.rY[o] = (Math.random() - 0.5) * 0.35;
175
- }
176
- this.aLocal = new Float32Array(n * 3), this.aCol = new Float32Array(n * 3), this.aNamed = new Uint8Array(n), this.burst = new Float32Array(n), this.burstW = new Float32Array(n), this.flareCol = new Float32Array(n * 3);
177
- for (let o = 0; o < n; o++) {
178
- const f = o / n, a = 0.5 + 4.6 * Math.sqrt(f) + (Math.random() - 0.5) * 0.45, M = o % 3 / 3 * N + a * 1.15 + (Math.random() - 0.5) * 0.5;
179
- this.aLocal[o * 3] = Math.cos(M) * a, this.aLocal[o * 3 + 1] = (Math.random() - 0.5) * 0.7 * (1.3 - f) + 0.4, this.aLocal[o * 3 + 2] = Math.sin(M) * a, S.set(bs[((g = t.nodes[o]) == null ? void 0 : g.kind) ?? ""] ?? "#94a3b8"), this.aCol[o * 3] = S.r, this.aCol[o * 3 + 1] = S.g, this.aCol[o * 3 + 2] = S.b, this.aNamed[o] = o < 22 ? 1 : 0;
180
- }
181
- for (let o = 0; o < at; o++) {
182
- const f = Math.random() < 0.2 ? Math.floor(Math.random() * Math.min(22, n)) : Math.floor(Math.random() * n);
183
- this.nA[o] = f;
184
- const a = 0.18 + 0.55 * Math.pow(Math.random(), 3), M = Math.random() * N, O = a * Math.sqrt(-2 * Math.log(1 - Math.random() * 0.98));
185
- this.nO[o * 3] = Math.cos(M) * O, this.nO[o * 3 + 1] = (Math.random() - 0.5) * a * 0.8, this.nO[o * 3 + 2] = Math.sin(M) * O, this.nSpin[o] = (0.15 + Math.random() * 0.5) * (Math.random() < 0.5 ? 1 : 0.6), this.nB[o] = 0.5 + Math.random() * 0.7;
186
- }
187
- this.anchorGeo = lt(n);
188
- const e = [], s = /* @__PURE__ */ new Set(), r = (o, f) => {
189
- if (o === f) return;
190
- const a = o < f ? `${o}-${f}` : `${f}-${o}`;
191
- s.has(a) || (s.add(a), e.push(o, f));
192
- };
193
- for (const o of t.links) {
194
- const f = this.nameIdx.get(((w = t.nodes.find((M) => M.id === o.source)) == null ? void 0 : w.name.toLowerCase()) ?? ""), a = this.nameIdx.get(((d = t.nodes.find((M) => M.id === o.target)) == null ? void 0 : d.name.toLowerCase()) ?? "");
195
- if (f !== void 0 && a !== void 0) {
196
- const M = this.aLocal[f * 3] - this.aLocal[a * 3], O = this.aLocal[f * 3 + 2] - this.aLocal[a * 3 + 2];
197
- M * M + O * O < 9 && r(f, a);
198
- }
199
- }
200
- for (let o = 0; o < n; o++) {
201
- let f = -1, a = 1e9, M = -1, O = 1e9;
202
- for (let z = 0; z < n; z++) {
203
- if (z === o) continue;
204
- const I = this.aLocal[o * 3] - this.aLocal[z * 3], L = this.aLocal[o * 3 + 1] - this.aLocal[z * 3 + 1], B = this.aLocal[o * 3 + 2] - this.aLocal[z * 3 + 2], j = I * I + L * L + B * B;
205
- j < a ? (M = f, O = a, f = z, a = j) : j < O && (M = z, O = j);
206
- }
207
- f >= 0 && r(o, f), M >= 0 && o % 2 === 0 && r(o, M);
208
- }
209
- this.edgeA = Uint16Array.from(e);
210
- const m = new Float32Array(e.length * 3), b = Math.cos(this.nebAngle), c = Math.sin(this.nebAngle);
211
- e.forEach((o, f) => {
212
- const a = this.aLocal[o * 3], M = this.aLocal[o * 3 + 2];
213
- m[f * 3] = a * b - M * c, m[f * 3 + 1] = this.aLocal[o * 3 + 1], m[f * 3 + 2] = a * c + M * b;
214
- }), this.edgeGeo.setAttribute("position", new x.BufferAttribute(m, 3)), this.edgeGeo.setAttribute("color", new x.BufferAttribute(new Float32Array(e.length * 3), 3).setUsage(x.DynamicDrawUsage));
215
- const i = Tt + kt * wt;
216
- this.beamGeo = new x.BufferGeometry(), this.beamGeo.setAttribute("position", new x.BufferAttribute(new Float32Array(i * 6), 3).setUsage(x.DynamicDrawUsage)), this.beamGeo.setAttribute("color", new x.BufferAttribute(new Float32Array(i * 6), 3).setUsage(x.DynamicDrawUsage));
217
- const u = new x.Sphere(new x.Vector3(), 400), v = new x.MeshBasicMaterial({ toneMapped: !1 });
218
- this.cores = new x.InstancedMesh(new x.IcosahedronGeometry(0.26, 3), v, q), this.hits = new x.InstancedMesh(new x.SphereGeometry(0.95, 10, 8), new x.MeshBasicMaterial({ transparent: !0, opacity: 0, depthWrite: !1, colorWrite: !1 }), q), this.attractors = new x.InstancedMesh(new x.IcosahedronGeometry(0.3, 3), new x.MeshBasicMaterial({ toneMapped: !1 }), k * 3);
219
- const F = new x.RingGeometry(0.9, 1, 96);
220
- F.rotateX(-Math.PI / 2);
221
- const C = () => new x.MeshBasicMaterial({ toneMapped: !1, transparent: !0, blending: x.AdditiveBlending, depthWrite: !1, side: x.DoubleSide });
222
- this.stepRings = new x.InstancedMesh(new x.RingGeometry(0.93, 1, 6, 1).rotateX(-Math.PI / 2), C(), k * 3), this.rings = new x.InstancedMesh(F, C(), st), this.pulsars = new x.InstancedMesh(new x.OctahedronGeometry(0.42, 0), new x.MeshBasicMaterial({ toneMapped: !1 }), ot);
223
- const P = new x.ConeGeometry(0.12, 3.2, 8, 1, !0);
224
- P.translate(0, 1.6, 0);
225
- const p = P.clone().rotateX(Math.PI), A = new x.BufferGeometry();
226
- ((o, f) => {
227
- const a = o.getAttribute("position").array, M = f.getAttribute("position").array, O = o.getIndex().array, z = f.getIndex().array, I = new Float32Array(a.length + M.length);
228
- I.set(a), I.set(M, a.length);
229
- const L = [...O, ...Array.from(z, (B) => B + a.length / 3)];
230
- A.setAttribute("position", new x.BufferAttribute(I, 3)), A.setIndex(L);
231
- })(P, p), this.pulsarBeams = new x.InstancedMesh(A, C(), ot);
232
- for (const o of [this.cores, this.hits, this.attractors, this.stepRings, this.rings, this.pulsars, this.pulsarBeams]) {
233
- o.boundingSphere = u, o.frustumCulled = !1, o.instanceMatrix.setUsage(x.DynamicDrawUsage), o.setColorAt(0, S.setRGB(0, 0, 0));
234
- for (let f = 0; f < o.count; f++)
235
- Q.position.set(0, -999, 0), Q.scale.setScalar(1e-4), Q.updateMatrix(), o.setMatrixAt(f, Q.matrix), o.setColorAt(f, S.setRGB(0, 0, 0));
236
- }
237
- this.selRing = new x.Mesh(new x.RingGeometry(1.25, 1.33, 64).rotateX(-Math.PI / 2), C()), this.selRing.visible = !1;
238
- }
239
- dispose() {
240
- for (const t of [this.edgeGeo, this.fieldGeo, this.runGeo, this.nebGeo, this.anchorGeo, this.streamGeo, this.beamGeo, this.glowGeo]) t.dispose();
241
- for (const t of [this.cores, this.hits, this.attractors, this.stepRings, this.rings, this.pulsars, this.pulsarBeams])
242
- t.geometry.dispose(), t.material.dispose(), t.dispose();
243
- this.material.dispose();
244
- }
245
- // ------------------------------------------------------------------ helpers
246
- anchorIdx(t) {
247
- const n = t.toLowerCase();
248
- let e = this.nameIdx.get(n);
249
- if (e === void 0) {
250
- let s = 7;
251
- for (let r = 0; r < n.length; r++) s = s * 31 + n.charCodeAt(r) >>> 0;
252
- e = s % this.nAnchors, this.nameIdx.set(n, e);
253
- }
254
- return e;
255
- }
256
- anchorWorld(t, n) {
257
- const e = Math.cos(this.nebAngle), s = Math.sin(this.nebAngle), r = this.aLocal[t * 3], m = this.aLocal[t * 3 + 2];
258
- return n.set(r * e - m * s, this.aLocal[t * 3 + 1], r * s + m * e);
259
- }
260
- slotOf(t) {
261
- const n = this.idToSlot.get(t);
262
- return n === void 0 ? null : this.slots[n];
263
- }
264
- emitRing(t, n, e, s, r, m, b, c = 1) {
265
- const i = this.ringNext++ % st;
266
- this.ringStart[i] = b, this.ringDur[i] = m, this.ringMax[i] = r, this.ringPos.set([t, n, e], i * 3), this.ringCol.set([s.r * c, s.g * c, s.b * c], i * 3);
267
- }
268
- alloc(t, n) {
269
- const e = this.slots.findIndex((b) => !b.used);
270
- if (e < 0) return -1;
271
- const s = this.slots[e], r = Mt[t.type];
272
- if (Object.assign(s, { used: !0, id: t.id, inst: t, count: 0, released: !1, r: r.r, g: r.g, b: r.b, omega: 2, bright: 0.6, swirl: 0, p: 0, e: 0 }), s.tiltA = (et(e + n) - 0.5) * 0.7, s.tiltB = (et(e * 3.1 + n) - 0.5) * 0.7, s.rscale = Rt(t.type) ? 0.72 : 1, s.want = Math.round((Rt(t.type) ? 380 : 620) * (pt ? 0.5 : 1)), s.rank = Fs(t), Rt(t.type)) {
273
- const b = Zt(t.run, 72) < 0.5 ? -1 : 1;
274
- s.dTh = zt(t.run, 73) * 0.5 + b * ts(s.rank) * 0.62, s.rad = 4.4 * (0.88 + 0.26 * Zt(t.id, 74));
275
- } else
276
- s.dTh = ts(s.rank) * 0.5 + zt(t.id, 75) * 0.16, s.rad = ct - 1.9 + zt(t.id, 76) * 0.7;
277
- const m = t.parent ? this.slotOf(t.parent) : null;
278
- if (m)
279
- s.x = m.x, s.y = m.y, s.z = m.z;
280
- else {
281
- const b = _.runs.get(t.run);
282
- yt(((b == null ? void 0 : b.slot) ?? 0) % k, ss[t.type], R), s.x = R.x, s.y = R.y, s.z = R.z;
283
- }
284
- if (this.idToSlot.set(t.id, e), this.emitRing(s.x, s.y, s.z, r, 2.4, 0.9, n, 2.2), m) {
285
- const b = this.idToSlot.get(t.parent);
286
- let c = Math.floor(m.count * 0.28);
287
- for (let i = 0; i < X && c > 0; i++)
288
- this.fOwner[i] === b && i & 1 && (this.fOwner[i] = e, m.count--, s.count++, c--);
289
- }
290
- return e;
291
- }
292
- release(t, n) {
293
- const e = this.slots[t], s = this.fP;
294
- for (let r = 0; r < X; r++) {
295
- if (this.fOwner[r] !== t) continue;
296
- this.fOwner[r] = -1;
297
- const m = s[r * 3] - e.x, b = s[r * 3 + 2] - e.z, c = Math.sqrt(m * m + b * b) + 1e-3, i = (2.4 + this.fRnd[r] * 3.6) * (pt ? 0.5 : 1);
298
- this.fIvx[r] = m / c * i - b / c * e.omega * 0.5, this.fIvz[r] = b / c * i + m / c * e.omega * 0.5, this.fHeat[r] = 1, this.fT[r * 3] = e.r, this.fT[r * 3 + 1] = e.g, this.fT[r * 3 + 2] = e.b;
299
- }
300
- e.count = 0, S.setRGB(e.r, e.g, e.b).lerp(K, 0.5), this.emitRing(e.x, e.y, e.z, S, 3.2, 1.1, n, 2.6);
301
- }
302
- update(t, n, e) {
303
- const s = Math.min(0.05, t);
304
- this.lodK = Jt(), this.frame++, this.syncRuns(n, s), this.syncSlots(n, s, e), this.recruit(n), this.updateField(s, e), this.updateFlares(n), this.updateNebula(e), this.updateRunCurrents(n, e), this.updateStreams(n, e), this.updateMeshes(n, e, s);
305
- }
306
- syncRuns(t, n) {
307
- this.runRef.fill(null);
308
- for (const e of _.runs.values()) {
309
- const s = e.slot % k, r = this.runRef[s], m = !dt.grouped || Lt(e.id), b = !!r && (!dt.grouped || Lt(r.id));
310
- (!r || m && !b || m === b && e.startedAt > r.startedAt) && (this.runRef[s] = e);
311
- }
312
- for (let e = 0; e < k; e++) {
313
- const s = this.runRef[e];
314
- Dt[e] = s ? as(s.id) : 0;
315
- let r = 0;
316
- s && (r = Math.min(1, (t - s.startedAt) / 1800), s.endedAt && (r *= Math.max(0, 1 - (t - s.endedAt - (xs - 3e3)) / 3e3)), s.color !== this.rColStr[e] && (this.rColStr[e] = s.color, this.rCol[e].set(s.color))), this.rAlpha[e] += (r - this.rAlpha[e]) * Math.min(1, n * 3);
317
- }
318
- }
319
- syncSlots(t, n, e) {
320
- const s = this.frame;
321
- for (const b of _.instances.values()) {
322
- if (dt.grouped && !Rs(b)) continue;
323
- let c = this.idToSlot.get(b.id);
324
- c === void 0 && (c = this.alloc(b, t)), !(c < 0) && (this.slots[c].seen = s, this.slots[c].inst = b);
325
- }
326
- this.pendingByInst.clear();
327
- for (const b of _.mcpPending.values()) this.pendingByInst.set(b.instance, Math.max(this.pendingByInst.get(b.instance) ?? 0, Qt(b, t)));
328
- const r = 1 - Math.exp(-n * 2.2), m = 1 - Math.exp(-n * 4);
329
- for (let b = 0; b < q; b++) {
330
- const c = this.slots[b];
331
- if (!c.used) continue;
332
- const i = c.inst;
333
- if (c.seen !== s) {
334
- c.count > 0 && this.release(b, t), c.used = !1, c.inst = null, this.idToSlot.delete(c.id);
335
- continue;
336
- }
337
- const u = _.runs.get(i.run), v = ((u == null ? void 0 : u.slot) ?? 0) % k, F = ss[i.type], C = Et(v) + F * N / 3, P = Rt(i.type), p = P ? ct - 1.9 : c.rad, A = P ? C : C + c.dTh;
338
- let h = H[v][0] + Math.cos(A) * p, g = H[v][1] + Math.sin(A) * p;
339
- if (P) {
340
- const M = C + c.dTh;
341
- h += Math.cos(M) * c.rad, g += Math.sin(M) * c.rad;
342
- }
343
- const w = 0.9 + Math.sin(e * 0.9 + b) * 0.18;
344
- i.exitAt || (c.x += (h - c.x) * r, c.y += (w - c.y) * r, c.z += (g - c.z) * r), c.p = As(i, t), c.e = ws(i, t), c.waitMcp = this.pendingByInst.get(i.id) ?? -1;
345
- const d = i.status === "thinking", o = i.status === "waiting";
346
- let f = d ? 3.6 : o ? 0.7 : 2.2, a = d ? 1 : o ? 0.3 : 0.7;
347
- c.waitMcp >= 0 && (f = 1, a = 0.45 + 0.3 * (0.5 + 0.5 * Math.sin(e * 3.2))), i.exitAt && (f = 0, a = 0), c.omega += (f * (1 + c.e * 0.7) * rt - c.omega) * m, c.bright += (a + c.e * 1.2 - c.bright) * m, c.swirl = i.exitAt ? 0 : (d ? 1.6 : 0.6) * c.p * rt, i.exitAt && !c.released && (c.released = !0, this.release(b, t));
348
- }
349
- }
350
- recruit(t) {
351
- const n = this.fP;
352
- for (let e = 0; e < q; e++) {
353
- const s = this.slots[e];
354
- if (!s.used || !s.inst || s.inst.exitAt) continue;
355
- const r = (t - s.inst.bornAt) / 1e3, m = s.want * Math.min(1, r / 1.6);
356
- for (let b = 0; b < 140 && s.count < m; b++) {
357
- const c = Math.random() * X | 0;
358
- if (this.fOwner[c] !== -1) continue;
359
- const i = n[c * 3] - s.x, u = n[c * 3 + 2] - s.z;
360
- i * i + u * u > 120 || (this.fOwner[c] = e, this.fAng[c] = Math.atan2(u, i), s.count++);
361
- }
362
- }
363
- }
364
- updateField(t, n) {
365
- const e = this.fP, s = this.fC, r = this.fS, m = this.fOwner, b = this.slots, c = this.fRnd, i = t * rt, u = n * rt, v = 1 - Math.exp(-t * 2.8), F = Math.exp(-t * 0.5), C = Math.exp(-t * 1.3), P = 0.23 * u, p = 0.17 * u, A = 0.11 * u;
366
- let h = 0;
367
- for (let d = 0; d < k; d++)
368
- this.rAlpha[d] < 0.01 || (this.aX[h] = H[d][0], this.aZ[h] = H[d][1], this.aA[h] = this.rAlpha[d], this.aR[h * 3] = this.rCol[d].r, this.aR[h * 3 + 1] = this.rCol[d].g, this.aR[h * 3 + 2] = this.rCol[d].b, h++);
369
- let g = 0;
370
- for (const d of b)
371
- !d.used || d.swirl <= 0.01 || (this.sX[g] = d.x, this.sZ[g] = d.z, this.sS[g] = d.swirl, g++);
372
- const w = At * At;
373
- for (let d = 0; d < X; d++) {
374
- const o = d * 3;
375
- let f = e[o], a = e[o + 1], M = e[o + 2];
376
- const O = m[d];
377
- if (O >= 0) {
378
- const z = b[O], I = this.fOrb[d] * z.rscale * (0.35 + 0.65 * z.p) * this.lodK, L = this.fAng[d] += z.omega * t / (0.3 + I), B = Math.cos(L), j = Math.sin(L), E = z.x + B * I, $ = z.z + j * I, Ct = z.y + (j * z.tiltA + B * z.tiltB) * I + (c[d] - 0.5) * 0.14;
379
- f += (E - f) * v, a += (Ct - a) * v, M += ($ - M) * v;
380
- const mt = z.bright * (1.5 - I * 0.55) * (0.6 + 0.4 * c[d]);
381
- s[o] = z.r * mt + 0.05, s[o + 1] = z.g * mt + 0.05, s[o + 2] = z.b * mt + 0.05, r[d] = 0.5 + 0.35 * c[d];
382
- } else {
383
- const z = f * f + M * M, I = Math.sqrt(z) + 1e-4, L = I / 11, B = 1.25 * L / (1 + L * L);
384
- let j = -M / I * B, E = f / I * B;
385
- const $ = Math.sin(0.27 * f + P), Ct = Math.cos(0.27 * f + P), mt = Math.sin(0.31 * M - p), Ut = Math.cos(0.31 * M - p), Nt = 0.41 * M + 0.33 * f + A, cs = Math.sin(Nt), Wt = Math.cos(Nt);
386
- j += ($ * -0.31 * mt + 0.7 * 0.41 * Wt) * 3, E -= (0.27 * Ct * Ut + 0.7 * 0.33 * Wt) * 3;
387
- const $t = $ * Ut + 0.7 * cs + I * 0.09, vt = 0.5 + 0.5 * Math.sin($t * 5.5), Xt = vt * vt * vt;
388
- let qt = 0, Ht = 0, Vt = 0;
389
- for (let D = 0; D < h; D++) {
390
- const Y = f - this.aX[D], nt = M - this.aZ[D], gt = Y * Y + nt * nt;
391
- if (gt > 140) continue;
392
- const it = Math.sqrt(gt) + 1e-4, Bt = it / ct, Yt = 2.6 * this.aA[D] * Bt * Math.exp(-Bt * Bt * 0.6);
393
- j -= nt / it * Yt, E += Y / it * Yt;
394
- const Kt = it - ct, Pt = Math.exp(-Kt * Kt * 0.55) * this.aA[D];
395
- qt += this.aR[D * 3] * Pt, Ht += this.aR[D * 3 + 1] * Pt, Vt += this.aR[D * 3 + 2] * Pt;
396
- }
397
- for (let D = 0; D < g; D++) {
398
- const Y = f - this.sX[D], nt = M - this.sZ[D], gt = Y * Y + nt * nt;
399
- if (gt > 16) continue;
400
- const it = this.sS[D] / (1 + gt * 0.9);
401
- j -= nt * it, E += Y * it;
402
- }
403
- j += this.fIvx[d], E += this.fIvz[d], this.fIvx[d] *= C, this.fIvz[d] *= C, f += j * i, M += E * i, a += (this.fYb[d] - a) * t * 1.2;
404
- const xt = this.fHeat[d] *= F, ls = j * j + E * E, It = (0.14 + Xt * 2.8) * (0.6 + Math.min(1.2, ls * 0.3)) * (0.45 + 0.75 * c[d]), Ft = 0.5 + 0.5 * Math.sin($t * 1.3 + 1);
405
- if (s[o] = (0.05 + 0.05 * Ft) * It + qt * 0.42 + this.fT[o] * xt * 1.8, s[o + 1] = (0.08 + 0.03 * Ft) * It + Ht * 0.42 + this.fT[o + 1] * xt * 1.8, s[o + 2] = (0.2 - 0.04 * Ft) * It + Vt * 0.42 + this.fT[o + 2] * xt * 1.8, r[d] = 0.26 + 0.2 * c[d] + Xt * 0.12 + xt * 0.35, z > w) {
406
- const D = Math.sqrt(Math.random()) * At * 0.97, Y = Math.random() * N;
407
- f = Math.cos(Y) * D, M = Math.sin(Y) * D, this.fHeat[d] = 0, this.fIvx[d] = this.fIvz[d] = 0;
408
- }
409
- }
410
- e[o] = f, e[o + 1] = a, e[o + 2] = M;
411
- }
412
- ht(this.fieldGeo);
413
- }
414
- updateFlares(t) {
415
- this.burst.fill(0), this.burstW.fill(0);
416
- for (const n of _.flares) {
417
- const e = this.anchorIdx(n.node), s = (t - n.start) / 1e3, r = (1 - Math.exp(-s * 9)) * Math.exp(-s * 1.3);
418
- if (n.id > this.lastFlareId) {
419
- if (this.lastFlareId = n.id, this.anchorWorld(e, R), n.op === "write")
420
- this.emitRing(R.x, R.y, R.z, K, 4.2, 1.7, t, 2.4), this.emitRing(R.x, R.y, R.z, K, 2.2, 1, t, 1.6);
421
- else {
422
- const m = _.instances.get(n.instance);
423
- this.emitRing(R.x, R.y, R.z, m ? Mt[m.type] : K, 1.1, 0.7, t, 1.6);
424
- }
425
- this.lastFlare = { name: n.node, op: n.op, at: t, idx: e };
426
- }
427
- if (r > this.burst[e]) {
428
- this.burst[e] = r;
429
- const m = _.instances.get(n.instance), b = n.op === "write" ? K : m ? Mt[m.type] : K;
430
- this.flareCol[e * 3] = b.r, this.flareCol[e * 3 + 1] = b.g, this.flareCol[e * 3 + 2] = b.b, n.op === "write" && (this.burstW[e] = 1);
431
- }
432
- }
433
- }
434
- updateNebula(t) {
435
- const n = U(this.nebGeo, "position"), e = U(this.nebGeo, "acol"), s = U(this.nebGeo, "size"), r = Math.cos(this.nebAngle), m = Math.sin(this.nebAngle), b = t * rt, c = this.aLocal, i = this.aCol, u = this.flareCol;
436
- for (let h = 0; h < at; h++) {
437
- const g = this.nA[h], w = this.burst[g], d = b * this.nSpin[h], o = Math.cos(d), f = Math.sin(d), a = this.nO[h * 3], M = this.nO[h * 3 + 2], O = 1 + w * (2.2 + this.burstW[g] * 4.5), z = c[g * 3] + (a * o - M * f) * O, I = c[g * 3 + 2] + (a * f + M * o) * O, L = c[g * 3 + 1] + this.nO[h * 3 + 1] * O;
438
- n[h * 3] = z * r - I * m, n[h * 3 + 1] = L, n[h * 3 + 2] = z * m + I * r;
439
- const B = this.nB[h] * 0.3;
440
- e[h * 3] = i[g * 3] * B + 0.05 + u[g * 3] * w * 2.4, e[h * 3 + 1] = i[g * 3 + 1] * B + 0.06 + u[g * 3 + 1] * w * 2.4, e[h * 3 + 2] = i[g * 3 + 2] * B + 0.12 + u[g * 3 + 2] * w * 2.4, s[h] = 0.3 + this.nB[h] * 0.2 + w * 0.5;
441
- }
442
- ht(this.nebGeo);
443
- const v = U(this.anchorGeo, "position"), F = U(this.anchorGeo, "acol"), C = U(this.anchorGeo, "size"), P = this.burst.length;
444
- for (let h = 0; h < P; h++) {
445
- const g = c[h * 3], w = c[h * 3 + 2];
446
- v[h * 3] = g * r - w * m, v[h * 3 + 1] = c[h * 3 + 1], v[h * 3 + 2] = g * m + w * r;
447
- const d = this.burst[h], o = this.aNamed[h] ? 2.2 : 1.1;
448
- F[h * 3] = i[h * 3] * o + u[h * 3] * d * 7, F[h * 3 + 1] = i[h * 3 + 1] * o + u[h * 3 + 1] * d * 7, F[h * 3 + 2] = i[h * 3 + 2] * o + u[h * 3 + 2] * d * 7, C[h] = (this.aNamed[h] ? 1.25 : 0.75) * (1 + d * 3.5);
449
- }
450
- ht(this.anchorGeo);
451
- const p = this.edgeGeo.getAttribute("color").array, A = this.edgeA;
452
- for (let h = 0; h < A.length; h++) {
453
- const g = A[h], w = A[h ^ 1], d = Math.max(this.burst[g], this.burst[w] * 0.6);
454
- p[h * 3] = i[g * 3] * 0.32 + 0.05 + u[g * 3] * d * 3, p[h * 3 + 1] = i[g * 3 + 1] * 0.32 + 0.06 + u[g * 3 + 1] * d * 3, p[h * 3 + 2] = i[g * 3 + 2] * 0.32 + 0.1 + u[g * 3 + 2] * d * 3;
455
- }
456
- this.edgeGeo.getAttribute("color").needsUpdate = !0;
457
- }
458
- updateRunCurrents(t, n) {
459
- const e = U(this.runGeo, "position"), s = U(this.runGeo, "acol"), r = U(this.runGeo, "size"), m = n * rt, b = [0, 0, 0], c = [0, 0, 0];
460
- for (let i = 0; i < k; i++) {
461
- const u = this.runRef[i], v = this.rAlpha[i], F = i * Z;
462
- if (!u || v < 0.01) {
463
- for (let a = 0; a < Z; a++) r[F + a] = 0;
464
- continue;
465
- }
466
- const C = H[i][0], P = H[i][1], p = Et(i);
467
- for (let a = 0; a < 3; a++) {
468
- b[a] = p + a * N / 3;
469
- const M = u.steps[V[a]];
470
- c[a] = M === "running" ? 2.2 : M === "done" ? 0.5 : 0;
471
- }
472
- const A = (t - u.handoffAt) / 1e3, h = u.handoffAt > 0 && A < 2.4, g = p + V.indexOf(u.handoffFrom) * N / 3, w = ((V.indexOf(u.handoffTo) - V.indexOf(u.handoffFrom)) % 3 + 3) % 3 * (N / 3), d = w * Math.min(1, 1 - Math.pow(1 - Math.min(1, A / 1.4), 3)), o = h ? 3.2 * (1 - A / 2.4) : 0, f = this.rCol[i];
473
- for (let a = 0; a < Z; a++) {
474
- const M = F + a, O = this.rTh[M] + m * this.rSp[M], z = ct + this.rRr[M] + 0.16 * Math.sin(3 * O + m * 0.6 + M);
475
- e[M * 3] = C + Math.cos(O) * z, e[M * 3 + 1] = 0.25 + this.rY[M], e[M * 3 + 2] = P + Math.sin(O) * z;
476
- let I = 0;
477
- for (let E = 0; E < 3; E++) {
478
- if (c[E] === 0) continue;
479
- let $ = (O - b[E]) % N;
480
- $ < -Math.PI ? $ += N : $ > Math.PI && ($ -= N), $ > Math.PI && ($ -= N), I += c[E] * Math.exp(-$ * $ * 2.2);
481
- }
482
- let L = 0;
483
- if (h) {
484
- let E = (O - g) % N;
485
- if (E < 0 && (E += N), E <= d && E <= w + 0.1) {
486
- const $ = Math.exp(-(d - E) * 2.2);
487
- I += o * (0.4 + $), L = 0.6 * $;
488
- }
489
- }
490
- const B = Math.exp(-this.rRr[M] * this.rRr[M] * 4), j = v * (0.32 + 0.5 * B + I);
491
- s[M * 3] = (f.r + (1 - f.r) * L) * j, s[M * 3 + 1] = (f.g + (1 - f.g) * L) * j, s[M * 3 + 2] = (f.b + (1 - f.b) * L) * j, r[M] = 0.36 + 0.28 * B + I * 0.12;
492
- }
493
- }
494
- ht(this.runGeo);
495
- }
496
- updateStreams(t, n) {
497
- const e = U(this.streamGeo, "position"), s = U(this.streamGeo, "acol"), r = U(this.streamGeo, "size");
498
- let m = 0;
499
- const b = (p, A, h, g, w, d, o) => {
500
- m >= Ot || (e[m * 3] = p, e[m * 3 + 1] = A, e[m * 3 + 2] = h, s[m * 3] = g, s[m * 3 + 1] = w, s[m * 3 + 2] = d, r[m] = o, m++);
501
- }, c = (p, A, h, g, w) => {
502
- const d = (p.x + A.x) / 2, o = (p.y + A.y) / 2 + h, f = (p.z + A.z) / 2, a = 1 - g;
503
- return w.set(a * a * p.x + 2 * a * g * d + g * g * A.x, a * a * p.y + 2 * a * g * o + g * g * A.y, a * a * p.z + 2 * a * g * f + g * g * A.z);
504
- };
505
- for (let p = 0; p < k; p++) {
506
- const A = this.runRef[p];
507
- if (!A || !A.handoffAt) continue;
508
- const h = (t - A.handoffAt) / 1e3;
509
- if (h > 2.4) continue;
510
- yt(p, V.indexOf(A.handoffFrom), R), yt(p, V.indexOf(A.handoffTo), W);
511
- const g = this.rCol[p], w = 220;
512
- for (let d = 0; d < w; d++) {
513
- const o = (h - d / w * 1.4) / 0.9;
514
- if (o < 0 || o > 1) continue;
515
- c(R, W, 2.2, o, T);
516
- const f = Math.sin(o * Math.PI) * 0.35, a = (1 - o * 0.4) * 2.4;
517
- b(T.x + (et(d) - 0.5) * f, T.y + (et(d + 7) - 0.5) * f, T.z + (et(d + 13) - 0.5) * f, (g.r * 0.6 + 0.4) * a, (g.g * 0.6 + 0.4) * a, (g.b * 0.6 + 0.4) * a, 0.7 + (d % 9 === 0 ? 0.8 : 0));
518
- }
519
- }
520
- for (const p of _.comets) {
521
- const A = this.slotOf(p.from), h = this.slotOf(p.to);
522
- if (!A || !h) continue;
523
- const g = Math.min(1, (t - p.start) / p.dur), w = g < 0.5 ? 2 * g * g : 1 - Math.pow(-2 * g + 2, 2) / 2;
524
- R.set(A.x, A.y, A.z), W.set(h.x, h.y, h.z);
525
- const d = R.distanceTo(W), o = A.inst ? Mt[A.inst.type] : K, f = g >= 1 ? Math.max(0, 1 - (t - p.start - p.dur) / 250) : 1;
526
- for (let a = 0; a < 90; a++) {
527
- const M = w - a * 55e-4;
528
- if (M < 0) break;
529
- c(R, W, 1.2 + d * 0.16, M, T);
530
- const O = a * 6e-3, z = (a === 0 ? 7 : 3.2 * Math.pow(1 - a / 90, 1.6)) * f;
531
- b(T.x + (et(p.id + a) - 0.5) * O, T.y + (et(p.id * 3 + a) - 0.5) * O, T.z + (et(p.id * 7 + a) - 0.5) * O, (o.r * 0.7 + 0.3) * z, (o.g * 0.7 + 0.3) * z, (o.b * 0.7 + 0.3) * z, a === 0 ? 2.6 : 0.85 - a * 6e-3);
532
- }
533
- }
534
- const i = this.beamGeo.getAttribute("position").array, u = this.beamGeo.getAttribute("color").array;
535
- let v = 0;
536
- const F = (p, A, h, g, w, d, o, f, a, M, O, z) => {
537
- i.set([p, A, h, g, w, d], v * 6), u.set([o, f, a, M, O, z], v * 6), v++;
538
- };
539
- for (const p of _.flares) {
540
- if (v >= Tt) break;
541
- const A = this.slotOf(p.instance);
542
- if (!A) continue;
543
- const h = (t - p.start) / 2600;
544
- if (h >= 1) continue;
545
- this.anchorWorld(this.anchorIdx(p.node), W), R.set(A.x, A.y, A.z);
546
- const g = p.op === "write", w = g ? K : A.inst ? Mt[A.inst.type] : K, d = (1 - h) * (g ? 1.6 : 1);
547
- F(R.x, R.y, R.z, W.x, W.y, W.z, w.r * d * 0.6, w.g * d * 0.6, w.b * d * 0.6, w.r * d * 1.4, w.g * d * 1.4, w.b * d * 1.4);
548
- for (let o = 0; o < 22; o++) {
549
- let f = ((t - p.start) / 1e3 * 0.75 + o / 22) % 1;
550
- g || (f = 1 - f), c(R, W, 1.2, f, T);
551
- const a = 2.4 * d * Math.sin(f * Math.PI);
552
- b(T.x, T.y, T.z, w.r * a, w.g * a, w.b * a, 0.55);
553
- }
554
- }
555
- for (const p of _.mcpCalls) {
556
- const A = this.slotOf(p.instance), h = _.mcpServers.get(p.server);
557
- if (!A || !h) continue;
558
- const g = (t - p.start) / p.dur;
559
- if (g > 1) continue;
560
- R.set(A.x, A.y, A.z), Gt(h.slot, W);
561
- const w = p.phase === "call" ? R : W, d = p.phase === "call" ? W : R;
562
- S.set(h.color);
563
- const o = 1 - Math.pow(1 - g, 2);
564
- for (let f = 0; f < 60; f++) {
565
- const a = o - f * 8e-3;
566
- if (a < 0) break;
567
- c(w, d, 3, a, T);
568
- const M = (f === 0 ? 6 : 2.6 * (1 - f / 60)) * (p.phase === "result" ? 1.2 : 1);
569
- b(T.x, T.y, T.z, (S.r * 0.75 + 0.25) * M, (S.g * 0.75 + 0.25) * M, (S.b * 0.75 + 0.25) * M, f === 0 ? 2.2 : 0.7);
570
- }
571
- }
572
- let C = 0;
573
- const P = (p, A, h, g) => {
574
- if (C >= kt) return;
575
- const w = this.slotOf(p), d = _.mcpServers.get(A);
576
- if (!w || !d) return;
577
- C++, R.set(w.x, w.y, w.z), Gt(d.slot, W), S.set(d.color), h < 2 ? S.lerp(es, Math.min(1, h / 2)) : S.copy(es).lerp(Ls, Math.min(1, h - 2));
578
- const o = g >= 0 ? (1 - g) * 1.2 : 0.5 + Math.min(1.8, h * 0.6), f = n * 2.2;
579
- let a = R.x, M = R.y, O = R.z;
580
- for (let z = 1; z <= wt; z++) {
581
- const I = z / wt;
582
- c(R, W, 3, I, T);
583
- const L = 0.5 + 0.5 * Math.sin((I * 9 - f) * N * 0.5), B = o * (0.25 + 0.75 * L * L);
584
- v < Tt + kt * wt && F(a, M, O, T.x, T.y, T.z, S.r * B, S.g * B, S.b * B, S.r * B, S.g * B, S.b * B), a = T.x, M = T.y, O = T.z;
585
- }
586
- if (g < 0) {
587
- const z = 5 + Math.min(8, Math.floor(h * 3));
588
- for (let I = 0; I < z; I++) {
589
- const L = (n * (0.45 + h * 0.15) + I / z) % 1;
590
- c(R, W, 3, L, T);
591
- const B = o * 0.9;
592
- b(T.x, T.y, T.z, S.r * B, S.g * B, S.b * B, 0.8);
593
- }
594
- } else {
595
- const z = 1 - Math.min(1, g * 1.6);
596
- for (let I = 0; I < 26; I++) {
597
- const L = z + I * 0.012;
598
- if (L > 1) break;
599
- c(R, W, 3, L, T);
600
- const B = (I === 0 ? 9 : 4 * (1 - I / 26)) * (1 - g * 0.5);
601
- b(T.x, T.y, T.z, 0.6 * B + S.r * B * 0.4, 0.6 * B + S.g * B * 0.4, 0.6 * B + S.b * B * 0.4, I === 0 ? 2.8 : 0.9);
602
- }
603
- }
604
- };
605
- for (const p of _.mcpPending.values()) P(p.instance, p.server, Qt(p, t), -1);
606
- for (const p of _.mcpResolved) P(p.instance, p.server, (p.resolvedAt - p.since) / 1e3, Math.min(1, (t - p.resolvedAt) / 700));
607
- for (let p = m; p < Ot && r[p] !== 0; p++)
608
- r[p] = 0;
609
- this.streamGeo.setDrawRange(0, Math.max(m, 1)), ht(this.streamGeo), this.beamGeo.setDrawRange(0, v * 2), this.beamGeo.getAttribute("position").needsUpdate = !0, this.beamGeo.getAttribute("color").needsUpdate = !0;
610
- }
611
- setInst(t, n, e, s, r, m, b, c = 0, i = 0, u = 0) {
612
- Q.position.set(e, s, r), Q.rotation.set(c, i, u), Q.scale.setScalar(Math.max(1e-4, m)), Q.updateMatrix(), t.setMatrixAt(n, Q.matrix), t.setColorAt(n, b);
613
- }
614
- updateMeshes(t, n, e) {
615
- const s = U(this.glowGeo, "position"), r = U(this.glowGeo, "acol"), m = U(this.glowGeo, "size"), b = (i, u, v, F, C, P, p) => {
616
- s[i * 3] = u, s[i * 3 + 1] = v, s[i * 3 + 2] = F, r[i * 3] = C.r * P, r[i * 3 + 1] = C.g * P, r[i * 3 + 2] = C.b * P, m[i] = p;
617
- };
618
- let c = null;
619
- for (let i = 0; i < q; i++) {
620
- const u = this.slots[i];
621
- if (!u.used || !u.inst) {
622
- this.setInst(this.cores, i, 0, -999, 0, 0, S.setRGB(0, 0, 0)), this.setInst(this.hits, i, 0, -999, 0, 0, S), m[i] = 0;
623
- continue;
624
- }
625
- u.id === this.selectedId && (c = u);
626
- const v = u.inst, F = (t - v.bornAt) / 1e3, C = Math.exp(-F * 3.5), P = v.exitAt ? (t - v.exitAt) / 1e3 : -1, p = P >= 0 ? Math.exp(-P * 5) : 0, h = v.status === "thinking" && !v.exitAt ? 0.1 * Math.sin(n * 9 + i) : 0, g = P >= 0 ? Math.pow(u.p, 1.6) : u.p, w = Jt(), d = (g * (1 + u.e * 0.45 + h) + p * 0.9 + C * 0.6) * w;
627
- S.setRGB(u.r, u.g, u.b).multiplyScalar(1.3 + u.bright * 1.5 + u.e * 1.1), S.lerp(J.setRGB(4, 4, 4), Math.min(1, C + p)), this.setInst(this.cores, i, u.x, u.y, u.z, d, S, n * u.omega * 0.3, n * u.omega, 0), this.setInst(this.hits, i, u.x, u.y, u.z, v.exitAt ? 0 : 1, S), S.setRGB(u.r, u.g, u.b), b(i, u.x, u.y, u.z, S, (0.3 + u.bright * 0.4 + u.e * 0.5 + C * 2 + p * 2.5) * u.p + p, (5 + u.e * 4 + C * 10 + p * 14) * Math.max(u.p, p) * w);
628
- }
629
- c ? (this.selRing.visible = !0, this.selRing.position.set(c.x, c.y, c.z), this.selRing.rotation.y = n * 1.5, this.selRing.scale.setScalar(1 + 0.08 * Math.sin(n * 4)), this.selRing.material.color.setRGB(c.r * 3, c.g * 3, c.b * 3)) : this.selRing.visible = !1;
630
- for (let i = 0; i < k; i++) {
631
- const u = this.runRef[i], v = this.rAlpha[i];
632
- for (let F = 0; F < 3; F++) {
633
- const C = i * 3 + F, P = q + C;
634
- if (!u || v < 0.01) {
635
- this.setInst(this.attractors, C, 0, -999, 0, 0, S.setRGB(0, 0, 0)), this.setInst(this.stepRings, C, 0, -999, 0, 0, S), m[P] = 0;
636
- continue;
637
- }
638
- yt(i, F, R);
639
- const p = u.steps[V[F]], A = this.rCol[i];
640
- let h = 0.6, g = 0.5, w = 0.25, d = 0.9, o = 0.12, f = 4;
641
- if (S.copy(A), p === "running") {
642
- const a = 0.5 + 0.5 * Math.sin(n * 5);
643
- h = 1.15 + a * 0.2, S.lerp(K, 0.45), g = 3 + a * 1.5, w = 1.4 + a, d = 1.15 + a * 0.25, o = 1.1 + a * 0.6, f = 12;
644
- } else p === "done" ? (h = 0.85, g = 1.8, w = 0.7, d = 0.95, o = 0.4, f = 6) : p === "failed" && S.copy(Es);
645
- if (u.handoffAt && V[F] === u.handoffTo) {
646
- const a = (t - u.handoffAt) / 1e3 - 1.2;
647
- if (a > 0 && a < 1) {
648
- const M = Math.exp(-a * 4);
649
- h += M * 0.8, o += M * 2, f += M * 10;
650
- }
651
- }
652
- J.copy(S).multiplyScalar(g * v), this.setInst(this.attractors, C, R.x, R.y, R.z, h, J, 0, n * 0.6, 0), J.copy(S).multiplyScalar(w * v), this.setInst(this.stepRings, C, R.x, R.y, R.z, d, J, 0, p === "running" ? n * 1.6 : 0.3, 0), b(P, R.x, R.y, R.z, S, o * v, f);
653
- }
654
- }
655
- for (let i = 0; i < ot; i++) {
656
- const u = q + k * 3 + i;
657
- this.setInst(this.pulsars, i, 0, -999, 0, 0, S.setRGB(0, 0, 0)), this.setInst(this.pulsarBeams, i, 0, -999, 0, 0, S), m[u] = 0;
658
- }
659
- for (const i of _.mcpServers.values()) {
660
- const u = i.slot % ot, v = q + k * 3 + u;
661
- Gt(i.slot, R);
662
- const F = Math.exp(-((t - i.activeAt) / 1e3) * 2.5), C = i.inflight > 0 ? 1 : 0;
663
- this.mcpSpin[u] += e * (0.4 + C * 3.5) * rt;
664
- const P = 0.5 + 0.5 * Math.sin(n * (C ? 9 : 2.2) + u);
665
- S.set(i.color), J.copy(S).multiplyScalar(1.6 + C * 1.6 + F * 3 + P * 0.6), this.setInst(this.pulsars, u, R.x, R.y, R.z, 1 + F * 0.6 + C * 0.2 * P, J, 0, this.mcpSpin[u], 0), J.copy(S).multiplyScalar(0.25 + C * 0.9 * P + F * 0.8), this.setInst(this.pulsarBeams, u, R.x, R.y, R.z, 1 + C * 0.3, J, 0.5 * Math.sin(this.mcpSpin[u] * 0.5), this.mcpSpin[u], 0.35 + 0.3 * Math.cos(this.mcpSpin[u])), b(v, R.x, R.y, R.z, S, 0.6 + C * 0.8 * P + F * 1.6, 9 + F * 12 + C * 4);
666
- }
667
- for (let i = 0; i < st; i++) {
668
- const u = (t - this.ringStart[i]) / (this.ringDur[i] * 1e3);
669
- if (u < 0 || u >= 1) {
670
- this.setInst(this.rings, i, 0, -999, 0, 0, S.setRGB(0, 0, 0));
671
- continue;
672
- }
673
- const v = 1 - Math.pow(1 - u, 3), F = (1 - u) * (1 - u);
674
- S.setRGB(this.ringCol[i * 3] * F, this.ringCol[i * 3 + 1] * F, this.ringCol[i * 3 + 2] * F), this.setInst(this.rings, i, this.ringPos[i * 3], this.ringPos[i * 3 + 1], this.ringPos[i * 3 + 2], 0.15 + this.ringMax[i] * v, S);
675
- }
676
- for (const i of [this.cores, this.hits, this.attractors, this.stepRings, this.rings, this.pulsars, this.pulsarBeams])
677
- i.instanceMatrix.needsUpdate = !0, i.instanceColor && (i.instanceColor.needsUpdate = !0);
678
- ht(this.glowGeo);
679
- }
680
- }
681
- function js(l, t, n) {
682
- const [e, s] = H[l];
683
- let r = l === 1 ? 0.74 : 1;
684
- const m = dt.laneExpanded[l] > 0;
685
- return m && (r *= 0.82), t.set(e * r, (m ? 5.2 : 1.8) + Math.sin(n * 0.6 + l * 2.1) * 0.2, s * r);
686
- }
687
- function Ds() {
688
- return /* @__PURE__ */ G(Ss, { place: js, radius: 1.7, variant: "swarm", pointSize: 1.1 });
689
- }
690
- const St = new x.Vector3();
691
- function Us({ engine: l, onSelect: t }) {
692
- const n = ps((s) => s.gl);
693
- is(() => {
694
- l.material.uniforms.uPR.value = n.getPixelRatio();
695
- }, [l, n]), bt((s, r) => {
696
- Cs(), vs(), l.update(r, performance.now(), s.clock.elapsedTime);
697
- });
698
- const e = (s) => {
699
- var m;
700
- s.stopPropagation();
701
- const r = s.instanceId !== void 0 ? (m = l.slots[s.instanceId]) == null ? void 0 : m.id : null;
702
- r && l.slots[s.instanceId].used && t(r);
703
- };
704
- return /* @__PURE__ */ ft("group", { children: [
705
- /* @__PURE__ */ G("points", { geometry: l.fieldGeo, material: l.material, frustumCulled: !1 }),
706
- /* @__PURE__ */ G("points", { geometry: l.runGeo, material: l.material, frustumCulled: !1 }),
707
- /* @__PURE__ */ G("points", { geometry: l.nebGeo, material: l.material, frustumCulled: !1 }),
708
- /* @__PURE__ */ G("points", { geometry: l.anchorGeo, material: l.material, frustumCulled: !1 }),
709
- /* @__PURE__ */ G("points", { geometry: l.streamGeo, material: l.material, frustumCulled: !1 }),
710
- /* @__PURE__ */ G("points", { geometry: l.glowGeo, material: l.material, frustumCulled: !1 }),
711
- /* @__PURE__ */ G("lineSegments", { geometry: l.edgeGeo, frustumCulled: !1, children: /* @__PURE__ */ G("lineBasicMaterial", { vertexColors: !0, transparent: !0, blending: x.AdditiveBlending, depthWrite: !1, toneMapped: !1 }) }),
712
- /* @__PURE__ */ G("lineSegments", { geometry: l.beamGeo, frustumCulled: !1, children: /* @__PURE__ */ G("lineBasicMaterial", { vertexColors: !0, transparent: !0, blending: x.AdditiveBlending, depthWrite: !1, toneMapped: !1 }) }),
713
- /* @__PURE__ */ G("primitive", { object: l.cores }),
714
- /* @__PURE__ */ G("primitive", { object: l.attractors }),
715
- /* @__PURE__ */ G("primitive", { object: l.stepRings }),
716
- /* @__PURE__ */ G("primitive", { object: l.rings }),
717
- /* @__PURE__ */ G("primitive", { object: l.pulsars }),
718
- /* @__PURE__ */ G("primitive", { object: l.pulsarBeams }),
719
- /* @__PURE__ */ G("primitive", { object: l.selRing }),
720
- /* @__PURE__ */ G(
721
- "primitive",
722
- {
723
- object: l.hits,
724
- onClick: e,
725
- onPointerOver: () => document.body.style.cursor = "pointer",
726
- onPointerOut: () => document.body.style.cursor = ""
727
- }
728
- )
729
- ] });
730
- }
731
- function Ns({ run: l }) {
732
- Is();
733
- const t = l.slot % k, n = ns(() => V.map((s, r) => yt(t, r, new x.Vector3(), as(l.id)).toArray()), [t, l.id]), e = (s) => s === "running" ? l.color : s === "done" ? "#cbd5e1" : s === "failed" ? "#fecaca" : "#64748b";
734
- return /* @__PURE__ */ ft("group", { children: [
735
- /* @__PURE__ */ G(
736
- ut,
737
- {
738
- position: [H[t][0], 0.6, H[t][1]],
739
- text: `${l.hasSteps ? "hatchet · " : ""}${l.topic}`,
740
- secondary: V.map((s, r) => ({ text: `${r ? " " : ""}${s.toUpperCase()}`, color: e(l.steps[s]) })),
741
- secondarySize: 0.24,
742
- color: l.color,
743
- size: 0.34,
744
- maxWidth: 10,
745
- fadeMs: 300,
746
- pxRange: [10, 14]
747
- }
748
- ),
749
- V.map((s, r) => /* @__PURE__ */ G(
750
- ut,
751
- {
752
- position: [n[r][0], n[r][1] + 1.1, n[r][2]],
753
- text: s,
754
- font: "mono",
755
- plate: "none",
756
- uppercase: !0,
757
- letterSpacing: 0.08,
758
- textColor: l.color,
759
- size: 0.24,
760
- opacity: l.steps[s] === "running" ? 1 : l.steps[s] === "done" ? 0.75 : 0.55,
761
- fadeMs: 300,
762
- pxRange: [7.5, 10.5]
763
- },
764
- s
765
- ))
766
- ] });
767
- }
768
- function Ws() {
769
- const [l, t] = jt([]), n = tt(/* @__PURE__ */ new Set()), e = tt(-1);
770
- return bt(() => {
771
- const s = _.runs;
772
- let r = s.size !== n.current.size || e.current !== dt.version;
773
- if (!r)
774
- for (const m of s.keys()) n.current.has(m) || (r = !0);
775
- r && (n.current = new Set(s.keys()), e.current = dt.version, t([...s.values()].filter((m) => Lt(m.id))));
776
- }), /* @__PURE__ */ G(_t, { children: l.map((s) => /* @__PURE__ */ G(Ns, { run: s }, s.id)) });
777
- }
778
- function $s() {
779
- const [l, t] = jt([]), n = tt(0);
780
- return bt(() => {
781
- _.mcpServers.size !== n.current && (n.current = _.mcpServers.size, t([..._.mcpServers.values()].map((e) => ({ name: e.name, slot: e.slot, color: e.color }))));
782
- }), /* @__PURE__ */ G(_t, { children: l.map((e) => {
783
- const s = Gt(e.slot, new x.Vector3());
784
- return /* @__PURE__ */ G(ut, { position: [s.x, s.y + 1.5, s.z], text: `mcp · ${e.name}`, color: e.color, size: 0.3, pxRange: [9, 13] }, e.name);
785
- }) });
786
- }
787
- function Xs({ engine: l }) {
788
- const t = tt(null), n = tt(null), e = tt("");
789
- return bt(() => {
790
- var c;
791
- const s = l.selectedId ?? _.focus, r = s ? l.slotOf(s) : null, m = !!r && !!r.inst && !r.inst.exitAt;
792
- if ((c = n.current) == null || c.setOpacity(m ? 1 : 0), !r || !r.inst || !t.current || !n.current) return;
793
- t.current.position.set(r.x, r.y + 1.25, r.z);
794
- const b = `${r.inst.name} · ${r.inst.status}`;
795
- b !== e.current && (e.current = b, n.current.setText(b), n.current.setColor(rs[r.inst.type]));
796
- }), /* @__PURE__ */ G("group", { ref: t, children: /* @__PURE__ */ G(ut, { ref: n, text: "", size: 0.3, opacity: 0, fadeMs: 300, pxRange: [9, 13], renderOrder: 24 }) });
797
- }
798
- function qs({ engine: l }) {
799
- const t = tt(null), n = tt(null), e = tt("");
800
- return bt(() => {
801
- const s = l.lastFlare;
802
- if (!s || !t.current || !n.current) return;
803
- const r = (performance.now() - s.at) / 1e3;
804
- n.current.setOpacity(r < 2.2 ? 1 : 0), l.anchorWorld(s.idx, St), t.current.position.set(St.x, St.y + 0.9, St.z);
805
- const m = `${s.op === "write" ? "wrote" : "read"} · ${s.name}`;
806
- m !== e.current && (e.current = m, n.current.setText(m), n.current.setColor(s.op === "write" ? "#ffffff" : "#a5b4fc"));
807
- }), /* @__PURE__ */ G("group", { ref: t, children: /* @__PURE__ */ G(ut, { ref: n, text: "", size: 0.28, opacity: 0, fadeMs: 400, pxRange: [8.5, 12], renderOrder: 24 }) });
808
- }
809
- function Hs({ galaxy: l, selected: t, onSelect: n }) {
810
- const e = ns(() => new _s(l), [l]);
811
- return is(() => () => e.dispose(), [e]), e.selectedId = t, /* @__PURE__ */ ft(_t, { children: [
812
- /* @__PURE__ */ G(Us, { engine: e, onSelect: n }),
813
- /* @__PURE__ */ G(Ds, {}),
814
- /* @__PURE__ */ G(Ws, {}),
815
- /* @__PURE__ */ G($s, {}),
816
- /* @__PURE__ */ G(Xs, { engine: e }),
817
- /* @__PURE__ */ G(qs, { engine: e }),
818
- /* @__PURE__ */ G(ut, { position: [0, -1.3, 0], text: "FalkorDB", color: "#a5b4fc", size: 0.34, pxRange: [9.5, 13] })
819
- ] });
820
- }
821
- function ee() {
822
- const l = zs(), [t, n] = jt(null);
823
- return /* @__PURE__ */ ft("div", { className: "scene-root", children: [
824
- /* @__PURE__ */ ft(
825
- us,
826
- {
827
- camera: { position: [0, 25, 28], fov: 50 },
828
- dpr: [1, 1.75],
829
- gl: { antialias: !1, powerPreference: "high-performance" },
830
- onPointerMissed: () => n(null),
831
- children: [
832
- /* @__PURE__ */ G("color", { attach: "background", args: ["#020309"] }),
833
- /* @__PURE__ */ G(Hs, { galaxy: l, selected: t, onSelect: n }),
834
- /* @__PURE__ */ G(ds, { makeDefault: !0, enableDamping: !0, dampingFactor: 0.06, minDistance: 10, maxDistance: 70, maxPolarAngle: Math.PI * 0.47 }),
835
- /* @__PURE__ */ ft(ms, { multisampling: 0, children: [
836
- /* @__PURE__ */ G(gs, { mipmapBlur: !0, intensity: 1.25, luminanceThreshold: 0.22, luminanceSmoothing: 0.25, radius: 0.78 }),
837
- /* @__PURE__ */ G(Ms, { eskil: !1, offset: 0.22, darkness: 0.85 }),
838
- /* @__PURE__ */ G(ys, { opacity: 0.03 })
839
- ] })
840
- ]
841
- }
842
- ),
843
- /* @__PURE__ */ G(Gs, { title: "flow · murmuration", subtitle: "agents are eddies condensing out of the current · hatchet runs are vortices · the knowledge graph is the nebula", selected: t, onClose: () => n(null) })
844
- ] });
845
- }
846
- export {
847
- ee as default
848
- };