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
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { jsx as p, jsxs as
|
|
5
|
-
import { Text as En, OrbitControls as
|
|
6
|
-
import { useThree as
|
|
7
|
-
import { useSyncExternalStore as
|
|
1
|
+
var gr = Object.defineProperty;
|
|
2
|
+
var Ar = (e, t, n) => t in e ? gr(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
|
|
3
|
+
var _e = (e, t, n) => Ar(e, typeof t != "symbol" ? t + "" : t, n);
|
|
4
|
+
import { jsx as p, jsxs as E, Fragment as ye } from "react/jsx-runtime";
|
|
5
|
+
import { Text as En, OrbitControls as br } from "@react-three/drei";
|
|
6
|
+
import { useThree as ut, useFrame as ve, Canvas as vr } from "@react-three/fiber";
|
|
7
|
+
import { useSyncExternalStore as it, createContext as bs, useRef as B, useMemo as ne, useEffect as $, Suspense as Mr, useImperativeHandle as yr, useContext as vs, useState as le, useLayoutEffect as xr, useCallback as Ms, Fragment as wr } from "react";
|
|
8
8
|
import * as y from "three";
|
|
9
|
-
import { u as
|
|
10
|
-
var
|
|
11
|
-
const
|
|
9
|
+
import { u as ln, T as kr } from "./index-Ci8tSMhc.js";
|
|
10
|
+
var As;
|
|
11
|
+
const st = typeof window < "u" && !!((As = window.matchMedia) != null && As.call(window, "(prefers-reduced-motion: reduce)").matches), g = {
|
|
12
12
|
plane: "xy",
|
|
13
13
|
agents: /* @__PURE__ */ new Map(),
|
|
14
14
|
runs: /* @__PURE__ */ new Map(),
|
|
@@ -41,31 +41,31 @@ const tt = typeof window < "u" && !!((gs = window.matchMedia) != null && gs.call
|
|
|
41
41
|
function ce(e, t, n) {
|
|
42
42
|
return g.plane === "xy" ? n.set(e, t, 0) : n.set(e, 0, -t);
|
|
43
43
|
}
|
|
44
|
-
function
|
|
44
|
+
function mc(e, t, n, s) {
|
|
45
45
|
return s.copy(e.origin).addScaledVector(e.side, t - e.cu).addScaledVector(e.axis, n - e.cv);
|
|
46
46
|
}
|
|
47
|
-
function
|
|
47
|
+
function gc(e) {
|
|
48
48
|
var t;
|
|
49
49
|
return (t = g.agents.get(e)) == null ? void 0 : t.live;
|
|
50
50
|
}
|
|
51
|
-
function
|
|
51
|
+
function Ac(e) {
|
|
52
52
|
var t;
|
|
53
53
|
return (t = g.mcp.get(e)) == null ? void 0 : t.pos;
|
|
54
54
|
}
|
|
55
|
-
function
|
|
55
|
+
function bc(e, t) {
|
|
56
56
|
var n, s;
|
|
57
57
|
return (s = (n = g.mcp.get(e)) == null ? void 0 : n.backends.get(t)) == null ? void 0 : s.pos;
|
|
58
58
|
}
|
|
59
|
-
function
|
|
59
|
+
function vc(e, t) {
|
|
60
60
|
const n = g.graph;
|
|
61
61
|
return t.copy(e).multiplyScalar(n.scale).add(n.pos);
|
|
62
62
|
}
|
|
63
|
-
function
|
|
63
|
+
function Mc(e, t) {
|
|
64
64
|
const n = g.graph;
|
|
65
65
|
return t.copy(e).sub(n.pos).divideScalar(Math.max(1e-4, n.scale));
|
|
66
66
|
}
|
|
67
|
-
let
|
|
68
|
-
const
|
|
67
|
+
let Sr = 0;
|
|
68
|
+
const kt = () => ++Sr, Te = (e) => [Math.round(e.x * 100) / 100, Math.round(e.y * 100) / 100, Math.round(e.z * 100) / 100];
|
|
69
69
|
function Rn() {
|
|
70
70
|
return {
|
|
71
71
|
plane: g.plane,
|
|
@@ -78,16 +78,16 @@ function Rn() {
|
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
typeof window < "u" && (Object.defineProperties(g, { toJSON: { value: Rn, enumerable: !1 }, summary: { value: Rn, enumerable: !1 } }), window.__agentglowKit = g);
|
|
81
|
-
const
|
|
81
|
+
const ys = [
|
|
82
82
|
{ type: "planner", label: "Planner", color: "#a78bfa" },
|
|
83
83
|
{ type: "researcher", label: "Researcher", color: "#fbbf24" },
|
|
84
84
|
{ type: "graph_scout", label: "Graph Scout", color: "#22d3ee" },
|
|
85
85
|
{ type: "records_scout", label: "Records Scout", color: "#f472b6" },
|
|
86
86
|
{ type: "data_scout", label: "Data Scout", color: "#fb7185" },
|
|
87
87
|
{ type: "writer", label: "Writer", color: "#4ade80" }
|
|
88
|
-
],
|
|
89
|
-
Object.fromEntries(
|
|
90
|
-
const
|
|
88
|
+
], We = Object.fromEntries(ys.map((e) => [e.type, e.color]));
|
|
89
|
+
Object.fromEntries(ys.map((e) => [e.type, e.label]));
|
|
90
|
+
const xs = [0, 1, 2], Or = 6, St = ["#818cf8", "#f472b6", "#34d399", "#fb923c", "#38bdf8", "#e879f9"], yc = {
|
|
91
91
|
Customer: "#f59e0b",
|
|
92
92
|
Account: "#38bdf8",
|
|
93
93
|
Incident: "#22c55e",
|
|
@@ -104,22 +104,40 @@ const ln = ["plan", "research", "write"], wt = ["#818cf8", "#f472b6", "#34d399",
|
|
|
104
104
|
Agency: "#ef4444",
|
|
105
105
|
Topic: "#facc15",
|
|
106
106
|
Committee: "#2dd4bf"
|
|
107
|
-
},
|
|
108
|
-
function
|
|
109
|
-
return e.endAt ? Math.max(e.endAt, e.startAt +
|
|
107
|
+
}, ws = 450, Er = 4e3, ks = 1100, Rr = 6e4;
|
|
108
|
+
function Ss(e) {
|
|
109
|
+
return e.endAt ? Math.max(e.endAt, e.startAt + Er) : 0;
|
|
110
110
|
}
|
|
111
111
|
function Vn(e, t = performance.now()) {
|
|
112
|
-
const n = Math.min(1, Math.max(0, (t - e.startAt) /
|
|
113
|
-
return n * (2 - n) *
|
|
112
|
+
const n = Math.min(1, Math.max(0, (t - e.startAt) / ws)), s = Ss(e), a = s ? Math.min(1, Math.max(0, 1 - (t - s) / ks)) : 1;
|
|
113
|
+
return n * (2 - n) * a * a * (3 - 2 * a);
|
|
114
114
|
}
|
|
115
|
-
|
|
115
|
+
function Cn(e, t) {
|
|
116
|
+
return Math.min(Math.max(e.stepOrder.indexOf(t), 0), xs.length - 1);
|
|
117
|
+
}
|
|
118
|
+
function Os(e, t) {
|
|
119
|
+
return t < xs.length - 1 ? e.stepOrder.slice(t, t + 1) : e.stepOrder.slice(t);
|
|
120
|
+
}
|
|
121
|
+
function xc(e, t) {
|
|
122
|
+
const n = Os(e, t).map((s) => e.steps[s]);
|
|
123
|
+
return n.length ? n.includes("running") ? "running" : n.includes("failed") ? "failed" : n.every((s) => s === "done") ? "done" : "queued" : "queued";
|
|
124
|
+
}
|
|
125
|
+
function Vr(e, t) {
|
|
126
|
+
const n = Os(e, t);
|
|
127
|
+
return n.length < 2 ? n[0] ?? "" : `${n.find((a) => e.steps[a] === "running") ?? n[n.length - 1]} +${n.length - 1}`;
|
|
128
|
+
}
|
|
129
|
+
function Es(e, t = Or) {
|
|
130
|
+
const n = e.stepOrder.length, s = n > t ? t - 1 : n;
|
|
131
|
+
return { shown: e.stepOrder.slice(0, s), more: n - s };
|
|
132
|
+
}
|
|
133
|
+
const Cr = {
|
|
116
134
|
warehouse: "#f97316",
|
|
117
135
|
search: "#22d3ee",
|
|
118
136
|
github: "#e5e7eb",
|
|
119
137
|
slack: "#e879f9",
|
|
120
138
|
"google-drive": "#facc15",
|
|
121
139
|
analytics: "#06b6d4"
|
|
122
|
-
}, un = (e) => e.doneAt > 0, te = (e) => !e.doneAt && !e.exitAt,
|
|
140
|
+
}, un = (e) => e.doneAt > 0, te = (e) => !e.doneAt && !e.exitAt, Tr = 12e4, Rs = 3e3, Vs = 2500, $t = 6e3, zt = { fadeMs: (e) => Vs }, wc = (e) => zt.fadeMs(e), h = {
|
|
123
141
|
runs: /* @__PURE__ */ new Map(),
|
|
124
142
|
instances: /* @__PURE__ */ new Map(),
|
|
125
143
|
comets: [],
|
|
@@ -167,15 +185,15 @@ const yr = {
|
|
|
167
185
|
selected: null,
|
|
168
186
|
/** the server answered 401 for this scope/run/token (the HUD shows a notice; no simulator fallback) */
|
|
169
187
|
unauthorized: !1
|
|
170
|
-
},
|
|
171
|
-
let Gt = 0,
|
|
172
|
-
const
|
|
173
|
-
|
|
188
|
+
}, zr = 500;
|
|
189
|
+
let Gt = 0, Cs = 0;
|
|
190
|
+
const rt = /* @__PURE__ */ new Set(), we = () => {
|
|
191
|
+
Cs++, rt.forEach((e) => e());
|
|
174
192
|
};
|
|
175
|
-
function
|
|
176
|
-
return
|
|
177
|
-
(e) => (
|
|
178
|
-
() =>
|
|
193
|
+
function Xe() {
|
|
194
|
+
return it(
|
|
195
|
+
(e) => (rt.add(e), () => rt.delete(e)),
|
|
196
|
+
() => Cs
|
|
179
197
|
), h;
|
|
180
198
|
}
|
|
181
199
|
const dn = (e, t = 0) => {
|
|
@@ -183,15 +201,15 @@ const dn = (e, t = 0) => {
|
|
|
183
201
|
for (let s = 0; s < e.length; s++) n = Math.imul(n ^ e.charCodeAt(s), 16777619);
|
|
184
202
|
return (n >>> 0) % 10007 / 10007;
|
|
185
203
|
};
|
|
186
|
-
function
|
|
204
|
+
function Pr() {
|
|
187
205
|
const e = new Set([...h.runs.values()].map((s) => s.slot)), t = [0, 1, 2, 3, 4, 5].filter((s) => !e.has(s));
|
|
188
206
|
if (t.length) return t[Math.floor(Math.random() * t.length)];
|
|
189
207
|
let n = 6;
|
|
190
208
|
for (; e.has(n); ) n++;
|
|
191
209
|
return n;
|
|
192
210
|
}
|
|
193
|
-
function
|
|
194
|
-
var s,
|
|
211
|
+
function Ts(e) {
|
|
212
|
+
var s, a;
|
|
195
213
|
const t = performance.now();
|
|
196
214
|
switch (e.type !== "mcp_register" && (h.ticker = [e, ...h.ticker].slice(0, 60)), e.type) {
|
|
197
215
|
case "run": {
|
|
@@ -199,44 +217,49 @@ function Es(e) {
|
|
|
199
217
|
const r = h.runs.get(e.run_id);
|
|
200
218
|
r && (r.topic = e.topic);
|
|
201
219
|
} else if (e.status === "started") {
|
|
202
|
-
const r =
|
|
220
|
+
const r = Pr();
|
|
203
221
|
h.runs.set(e.run_id, {
|
|
204
222
|
id: e.run_id,
|
|
205
223
|
topic: e.topic,
|
|
206
224
|
workflow: e.workflow,
|
|
207
|
-
color:
|
|
225
|
+
color: St[r % St.length],
|
|
208
226
|
slot: r,
|
|
209
227
|
status: "started",
|
|
210
|
-
steps: {
|
|
228
|
+
steps: {},
|
|
229
|
+
stepOrder: [],
|
|
211
230
|
hasSteps: !1,
|
|
212
231
|
startedAt: t,
|
|
213
232
|
endedAt: 0,
|
|
214
233
|
handoffAt: 0,
|
|
215
|
-
handoffFrom:
|
|
216
|
-
handoffTo:
|
|
234
|
+
handoffFrom: 0,
|
|
235
|
+
handoffTo: 0,
|
|
236
|
+
lastDone: "",
|
|
217
237
|
final: ""
|
|
218
238
|
}), h.stats.runs++;
|
|
219
239
|
} else {
|
|
220
240
|
const r = h.runs.get(e.run_id);
|
|
221
241
|
r && (r.status = e.status, r.endedAt = t);
|
|
222
|
-
for (const
|
|
242
|
+
for (const i of h.instances.values()) i.run === e.run_id && !i.exitAt && (i.exitAt = t);
|
|
223
243
|
}
|
|
224
244
|
break;
|
|
225
245
|
}
|
|
226
246
|
case "step": {
|
|
227
247
|
const r = h.runs.get(e.run_id);
|
|
228
248
|
if (!r) break;
|
|
229
|
-
r.hasSteps = !0;
|
|
230
|
-
const
|
|
231
|
-
r.steps[e.step] = e.status, e.status === "
|
|
249
|
+
r.hasSteps = !0, e.step in r.steps || r.stepOrder.push(e.step);
|
|
250
|
+
const i = r.steps[e.step];
|
|
251
|
+
if (r.steps[e.step] = e.status, e.status === "done" && (r.lastDone = e.step), e.status === "running" && i !== "running") {
|
|
252
|
+
const l = r.lastDone || r.stepOrder.find((c) => c !== e.step && r.steps[c] === "running"), u = l ? Cn(r, l) : -1, f = Cn(r, e.step);
|
|
253
|
+
u >= 0 && u !== f && (r.handoffAt = t, r.handoffFrom = u, r.handoffTo = f);
|
|
254
|
+
}
|
|
232
255
|
break;
|
|
233
256
|
}
|
|
234
257
|
case "spawn": {
|
|
235
|
-
const r = e.subagent ?? e.agent.endsWith("_scout"),
|
|
258
|
+
const r = e.subagent ?? e.agent.endsWith("_scout"), i = [...h.instances.values()].filter((l) => l.run === e.run_id).length;
|
|
236
259
|
h.instances.set(e.id, {
|
|
237
260
|
id: e.id,
|
|
238
261
|
run: e.run_id,
|
|
239
|
-
type:
|
|
262
|
+
type: Dr(e.agent, r),
|
|
240
263
|
name: e.agent,
|
|
241
264
|
parent: e.parent_id,
|
|
242
265
|
status: "spawning",
|
|
@@ -247,7 +270,7 @@ function Es(e) {
|
|
|
247
270
|
pulse: 0.8,
|
|
248
271
|
pulseAt: t,
|
|
249
272
|
tokens: 0,
|
|
250
|
-
index:
|
|
273
|
+
index: i,
|
|
251
274
|
recent: [],
|
|
252
275
|
llmCalls: 0,
|
|
253
276
|
toolCalls: 0,
|
|
@@ -263,12 +286,12 @@ function Es(e) {
|
|
|
263
286
|
const r = h.instances.get(e.id);
|
|
264
287
|
if (r) {
|
|
265
288
|
r.status = e.status, r.doneAt = t;
|
|
266
|
-
const
|
|
267
|
-
(!
|
|
289
|
+
const i = h.runs.get(r.run), l = !!r.parent && Date.now() - e.ts > Rs;
|
|
290
|
+
(!i || i.endedAt || l) && (r.exitAt = t);
|
|
268
291
|
}
|
|
269
|
-
for (const [
|
|
292
|
+
for (const [i, l] of h.mcpPending) l.instance === e.id && h.mcpPending.delete(i);
|
|
270
293
|
if (r && r.skill && !r.skillEndAt) {
|
|
271
|
-
for (const
|
|
294
|
+
for (const i of r.skills.values()) i.active && (i.active = !1, i.endAt = t);
|
|
272
295
|
r.skillEndAt = t;
|
|
273
296
|
}
|
|
274
297
|
break;
|
|
@@ -295,43 +318,43 @@ function Es(e) {
|
|
|
295
318
|
case "skill": {
|
|
296
319
|
const r = h.instances.get(e.id);
|
|
297
320
|
if (!r) break;
|
|
298
|
-
let
|
|
299
|
-
if (
|
|
300
|
-
const l =
|
|
301
|
-
|
|
302
|
-
} else if (
|
|
303
|
-
|
|
321
|
+
let i = r.skills.get(e.name);
|
|
322
|
+
if (i || r.skills.set(e.name, i = { active: !1, count: 0, last: t, startAt: 0, endAt: 0 }), i.last = t, e.status === "start") {
|
|
323
|
+
const l = i.count > 0 && (!i.endAt || t < Ss(i) + ks);
|
|
324
|
+
i.startAt = l ? t - Math.min(ws, t - i.startAt) : t, i.endAt = 0, i.active = !0, i.count++, r.skill = e.name, r.skillEndAt = 0;
|
|
325
|
+
} else if (i.active) {
|
|
326
|
+
i.active = !1, i.endAt = t;
|
|
304
327
|
let l = "";
|
|
305
|
-
for (const [
|
|
328
|
+
for (const [u, f] of r.skills) f.active && (!l || f.startAt > r.skills.get(l).startAt) && (l = u);
|
|
306
329
|
l ? r.skill = l : r.skillEndAt = t;
|
|
307
330
|
}
|
|
308
331
|
break;
|
|
309
332
|
}
|
|
310
333
|
case "graph":
|
|
311
|
-
h.hasGraph && !
|
|
334
|
+
h.hasGraph && !Pt(t) && (h.hasGraphAt = t), Is(!0, !1), h.graphAt = t, e.run_id && h.graphRuns.add(e.run_id), (s = h.instances.get(e.id)) != null && s.nodes && e.nodes.forEach((r) => h.instances.get(e.id).nodes.add(r));
|
|
312
335
|
for (const r of e.nodes.slice(0, 20)) h.flares.push({ id: ++Gt, run: e.run_id, instance: e.id, node: r, op: e.op, start: t });
|
|
313
336
|
e.op === "read" ? h.stats.graphReads += e.nodes.length : h.stats.graphWrites += e.nodes.length;
|
|
314
337
|
break;
|
|
315
338
|
case "mcp_register": {
|
|
316
339
|
let r = h.mcpRegistry.get(e.server);
|
|
317
340
|
r || h.mcpRegistry.set(e.server, r = /* @__PURE__ */ new Map());
|
|
318
|
-
for (const
|
|
341
|
+
for (const i of e.resources) r.has(i.name) || r.set(i.name, i.kind);
|
|
319
342
|
break;
|
|
320
343
|
}
|
|
321
344
|
case "mcp": {
|
|
322
345
|
let r = h.mcpServers.get(e.server);
|
|
323
|
-
r || (r = { name: e.server, color:
|
|
324
|
-
let
|
|
325
|
-
if (e.resource && (
|
|
326
|
-
const
|
|
327
|
-
|
|
346
|
+
r || (r = { name: e.server, color: Cr[e.server] ?? "#94a3b8", slot: h.mcpServers.size, activeAt: t, calls: 0, inflight: 0, resources: /* @__PURE__ */ new Map() }, h.mcpServers.set(e.server, r)), r.activeAt = t;
|
|
347
|
+
let i;
|
|
348
|
+
if (e.resource && (i = r.resources.get(e.resource), i || (i = { name: e.resource, kind: e.resource_kind ?? ((a = h.mcpRegistry.get(e.server)) == null ? void 0 : a.get(e.resource)) ?? "api", activeAt: t, inflight: 0, calls: 0 }, r.resources.set(e.resource, i)), i.activeAt = t, e.phase === "call" ? (i.inflight++, i.calls++) : i.inflight = Math.max(0, i.inflight - 1)), e.phase === "call") {
|
|
349
|
+
const u = h.instances.get(e.id);
|
|
350
|
+
u && u.mcpCalls++, r.calls++, r.inflight++, h.stats.mcpCalls++;
|
|
328
351
|
} else r.inflight = Math.max(0, r.inflight - 1);
|
|
329
352
|
h.mcpCalls.push({ id: ++Gt, run: e.run_id, instance: e.id, server: e.server, tool: e.tool, resource: e.resource, phase: e.phase, start: t, dur: 900 });
|
|
330
353
|
const l = `${e.id}|${e.server}|${e.tool}`;
|
|
331
354
|
if (e.phase === "call") h.mcpPending.set(l, { key: l, run: e.run_id, instance: e.id, server: e.server, tool: e.tool, resource: e.resource, since: t });
|
|
332
355
|
else {
|
|
333
|
-
const
|
|
334
|
-
|
|
356
|
+
const u = h.mcpPending.get(l);
|
|
357
|
+
u && h.mcpResolved.push({ ...u, resolvedAt: t }), h.mcpPending.delete(l);
|
|
335
358
|
}
|
|
336
359
|
break;
|
|
337
360
|
}
|
|
@@ -348,104 +371,104 @@ function Es(e) {
|
|
|
348
371
|
}
|
|
349
372
|
we();
|
|
350
373
|
}
|
|
351
|
-
const
|
|
352
|
-
function
|
|
374
|
+
const Wt = /* @__PURE__ */ new Set(), Nt = /* @__PURE__ */ new Set(), dt = /* @__PURE__ */ new Map();
|
|
375
|
+
function Ir(e, t) {
|
|
353
376
|
let n = !1;
|
|
354
377
|
for (const s of e.skills.values())
|
|
355
|
-
s.active && (t - s.startAt >
|
|
378
|
+
s.active && (t - s.startAt > Rr ? (s.active = !1, s.endAt = t) : n = !0);
|
|
356
379
|
n || (e.skillEndAt = t);
|
|
357
380
|
}
|
|
358
|
-
function
|
|
381
|
+
function Gr(e = performance.now()) {
|
|
359
382
|
let t = !1;
|
|
360
|
-
|
|
361
|
-
for (const [r,
|
|
362
|
-
|
|
363
|
-
for (const [r,
|
|
364
|
-
if (!Nt.has(r) && e -
|
|
383
|
+
Wt.clear(), Nt.clear(), dt.clear();
|
|
384
|
+
for (const [r, i] of h.instances)
|
|
385
|
+
Wt.add(i.run), i.skill && !i.skillEndAt && Ir(i, e), i.exitAt || (i.doneAt ? (i.doneAt > (dt.get(i.run) ?? 0) && dt.set(i.run, i.doneAt), i.parent && e - i.doneAt > Rs && (i.exitAt = e)) : Nt.add(i.run)), i.exitAt && e - i.exitAt > zt.fadeMs(i) && (h.instances.delete(r), h.archive.set(r, i), h.archive.size > zr && h.archive.delete(h.archive.keys().next().value), t = !0);
|
|
386
|
+
for (const [r, i] of dt)
|
|
387
|
+
if (!Nt.has(r) && e - i > Tr)
|
|
365
388
|
for (const l of h.instances.values()) l.run === r && !l.exitAt && (l.exitAt = e);
|
|
366
|
-
for (const [r,
|
|
367
|
-
|
|
389
|
+
for (const [r, i] of h.runs)
|
|
390
|
+
i.endedAt && e - i.endedAt > $t && !Wt.has(r) && (h.runs.delete(r), t = !0);
|
|
368
391
|
const n = h.comets.length;
|
|
369
392
|
h.comets = h.comets.filter((r) => e - r.start < r.dur + 250), h.mcpResolved = h.mcpResolved.filter((r) => e - r.resolvedAt < 700);
|
|
370
393
|
const s = h.mcpCalls.length;
|
|
371
394
|
h.mcpCalls = h.mcpCalls.filter((r) => e - r.start < r.dur + 250);
|
|
372
|
-
const
|
|
373
|
-
h.flares = h.flares.filter((r) => e - r.start < 2600), (t || n !== h.comets.length ||
|
|
395
|
+
const a = h.flares.length;
|
|
396
|
+
h.flares = h.flares.filter((r) => e - r.start < 2600), (t || n !== h.comets.length || a !== h.flares.length || s !== h.mcpCalls.length) && we();
|
|
374
397
|
}
|
|
375
|
-
function
|
|
398
|
+
function Wr(e, t = performance.now()) {
|
|
376
399
|
const n = Math.min(1, (t - e.bornAt) / 600), s = 1 - Math.pow(1 - n, 3);
|
|
377
|
-
return e.exitAt ? s * Math.max(0, 1 - (t - e.exitAt) /
|
|
400
|
+
return e.exitAt ? s * Math.max(0, 1 - (t - e.exitAt) / zt.fadeMs(e)) : s;
|
|
378
401
|
}
|
|
379
|
-
function
|
|
402
|
+
function Ot(e, t = performance.now()) {
|
|
380
403
|
return e.pulse * Math.exp(-((t - e.pulseAt) / 1e3) * 2.2);
|
|
381
404
|
}
|
|
382
|
-
function
|
|
405
|
+
function Nr(e, t = performance.now()) {
|
|
383
406
|
return (t - e.since) / 1e3;
|
|
384
407
|
}
|
|
385
|
-
const
|
|
386
|
-
function
|
|
387
|
-
if (
|
|
408
|
+
const qr = /* @__PURE__ */ new Set(["planner", "researcher", "graph_scout", "records_scout", "data_scout", "writer"]);
|
|
409
|
+
function Dr(e, t) {
|
|
410
|
+
if (qr.has(e)) return e;
|
|
388
411
|
const n = e.toLowerCase();
|
|
389
412
|
return /plan|orchestr|router|supervis|manager|coordinat/.test(n) ? "planner" : /writ|report|summar|answer|final|compose|draft/.test(n) ? "writer" : t ? /graph|kg|memory|retriev|search|web/.test(n) ? "graph_scout" : /record|doc|file/.test(n) ? "records_scout" : "data_scout" : "researcher";
|
|
390
413
|
}
|
|
391
|
-
function
|
|
414
|
+
function zs(e) {
|
|
392
415
|
return e.subagent ? 0.6 : 1.35;
|
|
393
416
|
}
|
|
394
417
|
function fn(e) {
|
|
395
418
|
if (e)
|
|
396
419
|
return h.instances.get(e) ?? h.archive.get(e);
|
|
397
420
|
}
|
|
398
|
-
function
|
|
421
|
+
function He(e) {
|
|
399
422
|
h.selected !== e && (h.selected = e, we());
|
|
400
423
|
}
|
|
401
|
-
function
|
|
424
|
+
function Tn(e) {
|
|
402
425
|
h.simulated = e, we();
|
|
403
426
|
}
|
|
404
|
-
function
|
|
427
|
+
function Fr(e) {
|
|
405
428
|
h.graphLabel !== e && (h.graphLabel = e, we());
|
|
406
429
|
}
|
|
407
|
-
function
|
|
430
|
+
function Ps(e) {
|
|
408
431
|
h.unauthorized !== e && (h.unauthorized = e, we());
|
|
409
432
|
}
|
|
410
|
-
function
|
|
433
|
+
function Lr() {
|
|
411
434
|
h.runs.clear(), h.instances.clear(), h.comets.length = 0, h.flares.length = 0, h.mcpServers.clear(), h.mcpRegistry.clear(), h.mcpCalls.length = 0, h.mcpPending.clear(), h.mcpResolved.length = 0, h.ticker.length = 0;
|
|
412
435
|
for (const e of Object.keys(h.stats)) h.stats[e] = 0;
|
|
413
436
|
h.lastFinal = "", h.simulated = !1, h.mode = "connecting", h.focus = null, h.focusAt = 0, h.spawnHintAt = 0, h.archive.clear(), h.selected = null, h.unauthorized = !1, h.hasGraph = !1, h.hasGraphAt = 0, h.graphRuns.clear(), h.graphAt = 0, we();
|
|
414
437
|
}
|
|
415
|
-
function
|
|
416
|
-
h.mode = e, h.simulated = e === "sim", e === "sim" &&
|
|
438
|
+
function zn(e) {
|
|
439
|
+
h.mode = e, h.simulated = e === "sim", e === "sim" && Is(!0, !1), we();
|
|
417
440
|
}
|
|
418
|
-
function
|
|
441
|
+
function Is(e, t = !0) {
|
|
419
442
|
h.hasGraph || (h.hasGraph = !0, h.hasGraphAt = h.mode === "sim" ? -1e9 : performance.now(), t && we());
|
|
420
443
|
}
|
|
421
|
-
const
|
|
422
|
-
function
|
|
423
|
-
return e.calls > 0 && (e.inflight > 0 || t - e.activeAt <
|
|
444
|
+
const Br = 9e4;
|
|
445
|
+
function Ur(e, t = performance.now()) {
|
|
446
|
+
return e.calls > 0 && (e.inflight > 0 || t - e.activeAt < Br);
|
|
424
447
|
}
|
|
425
|
-
function
|
|
448
|
+
function Pt(e = performance.now()) {
|
|
426
449
|
if (!h.hasGraph) return !1;
|
|
427
|
-
if (h.mode === "sim" || e - h.graphAt <
|
|
450
|
+
if (h.mode === "sim" || e - h.graphAt < $t) return !0;
|
|
428
451
|
for (const t of h.graphRuns) {
|
|
429
452
|
const n = h.runs.get(t);
|
|
430
|
-
if (n && (!n.endedAt || e - n.endedAt <
|
|
453
|
+
if (n && (!n.endedAt || e - n.endedAt < $t)) return !0;
|
|
431
454
|
(!n || n.endedAt) && h.graphRuns.delete(t);
|
|
432
455
|
}
|
|
433
456
|
return !1;
|
|
434
457
|
}
|
|
435
|
-
const
|
|
436
|
-
function
|
|
458
|
+
const Zr = 1800;
|
|
459
|
+
function Jr(e = performance.now()) {
|
|
437
460
|
if (!h.hasGraph) return 0;
|
|
438
|
-
const t = Math.min(1, Math.max(0, (e - h.hasGraphAt) /
|
|
461
|
+
const t = Math.min(1, Math.max(0, (e - h.hasGraphAt) / Zr));
|
|
439
462
|
return t * t * (3 - 2 * t);
|
|
440
463
|
}
|
|
441
|
-
function
|
|
442
|
-
return
|
|
443
|
-
(e) => (
|
|
464
|
+
function Hr() {
|
|
465
|
+
return it(
|
|
466
|
+
(e) => (rt.add(e), () => rt.delete(e)),
|
|
444
467
|
() => h.hasGraph,
|
|
445
468
|
() => !1
|
|
446
469
|
);
|
|
447
470
|
}
|
|
448
|
-
const qt = { agent: 600, skill: 450, run: 400, mcp: 300, resource: 290, cluster: 250, backend: 150, graph: 140, extra: 120, sub: 100 }, qe =
|
|
471
|
+
const qt = { agent: 600, skill: 450, run: 400, mcp: 300, resource: 290, cluster: 250, backend: 150, graph: 140, extra: 120, sub: 100 }, qe = bs({ kind: "extra" }), Z = {
|
|
449
472
|
entries: [],
|
|
450
473
|
/** a KitScene is mounted (outside one, nothing is ever hidden) */
|
|
451
474
|
active: 0,
|
|
@@ -459,95 +482,95 @@ const qt = { agent: 600, skill: 450, run: 400, mcp: 300, resource: 290, cluster:
|
|
|
459
482
|
/** measured on-screen size of the largest cluster badge (css px; 0 = none seen yet): presets space clusters by it */
|
|
460
483
|
badge: { w: 0, h: 0 }
|
|
461
484
|
};
|
|
462
|
-
function
|
|
485
|
+
function jr(e, t, n) {
|
|
463
486
|
return { kind: e, agent: t, size: n, live: !1, clip: !1, x: 0, y: 0, w: 0, h: 0, x1: 0, y1: 0, w1: 0, h1: 0, ax: 0, ay: 0, az: 0, ox0: 0, ox1: 0, oy0: 0, oy1: 0, seen: -1e9, drawn: !1, show: Z.active ? 0 : 1, subOff: !1, placed: !1, score: 0 };
|
|
464
487
|
}
|
|
465
|
-
function
|
|
488
|
+
function Xr(e) {
|
|
466
489
|
Z.entries.push(e);
|
|
467
490
|
}
|
|
468
|
-
function
|
|
491
|
+
function Kr(e) {
|
|
469
492
|
const t = Z.entries, n = t.indexOf(e);
|
|
470
493
|
n < 0 || (t[n] = t[t.length - 1], t.pop());
|
|
471
494
|
}
|
|
472
|
-
const
|
|
495
|
+
const Qr = 100, Yr = { agent: !1, skill: !0, run: !1, mcp: !1, resource: !1, cluster: !1, backend: !0, graph: !0, extra: !0, sub: !0 }, ft = 3, ze = [];
|
|
473
496
|
let me = new Float64Array(256 * 4);
|
|
474
|
-
const
|
|
475
|
-
function
|
|
497
|
+
const _r = (e, t) => t.score - e.score;
|
|
498
|
+
function $r(e, t) {
|
|
476
499
|
let n = qt[e.kind];
|
|
477
500
|
const s = e.agent;
|
|
478
501
|
if (s && (e.kind === "agent" || e.kind === "sub")) {
|
|
479
|
-
const
|
|
502
|
+
const a = s.inst;
|
|
480
503
|
if (h.selected === s.id) return 1e4;
|
|
481
|
-
const r = Math.min(1,
|
|
482
|
-
n = s.depth > 0 ? qt.sub + r * 0.5 : qt.agent + r, (
|
|
504
|
+
const r = Math.min(1, Ot(a, t)) * 60 + (a.status === "thinking" ? 30 : 0);
|
|
505
|
+
n = s.depth > 0 ? qt.sub + r * 0.5 : qt.agent + r, (a.exitAt || a.doneAt) && (n -= s.depth > 0 ? 60 : 350);
|
|
483
506
|
} else if (s && e.kind === "skill") {
|
|
484
507
|
if (h.selected === s.id) return 9990;
|
|
485
|
-
n += Math.min(1,
|
|
508
|
+
n += Math.min(1, Ot(s.inst, t)) * 30 + (s.depth > 0 ? 0 : 20), (s.inst.exitAt || s.inst.doneAt) && (n -= 300);
|
|
486
509
|
}
|
|
487
510
|
return n + e.size * 10 + (e.placed ? 8 : 0);
|
|
488
511
|
}
|
|
489
|
-
function
|
|
490
|
-
const r = e - n / 2 -
|
|
491
|
-
for (let f = 0; f <
|
|
512
|
+
function Pn(e, t, n, s, a) {
|
|
513
|
+
const r = e - n / 2 - ft, i = e + n / 2 + ft, l = t - s / 2 - ft, u = t + s / 2 + ft;
|
|
514
|
+
for (let f = 0; f < a; f++) {
|
|
492
515
|
const c = f * 4;
|
|
493
|
-
if (r < me[c + 2] &&
|
|
516
|
+
if (r < me[c + 2] && i > me[c] && l < me[c + 3] && u > me[c + 1]) return !1;
|
|
494
517
|
}
|
|
495
518
|
return !0;
|
|
496
519
|
}
|
|
497
|
-
function
|
|
498
|
-
if ((
|
|
499
|
-
const
|
|
500
|
-
|
|
520
|
+
function In(e, t, n, s, a) {
|
|
521
|
+
if ((a + 1) * 4 > me.length) {
|
|
522
|
+
const i = new Float64Array(me.length * 2);
|
|
523
|
+
i.set(me), me = i;
|
|
501
524
|
}
|
|
502
|
-
const r =
|
|
525
|
+
const r = a * 4;
|
|
503
526
|
me[r] = e - n / 2, me[r + 1] = t - s / 2, me[r + 2] = e + n / 2, me[r + 3] = t + s / 2;
|
|
504
527
|
}
|
|
505
|
-
function
|
|
528
|
+
function ea(e) {
|
|
506
529
|
ze.length = 0;
|
|
507
|
-
for (const
|
|
508
|
-
|
|
509
|
-
ze.sort(
|
|
530
|
+
for (const u of Z.entries)
|
|
531
|
+
u.live ? (u.score = $r(u, e), ze.push(u)) : u.placed = !1;
|
|
532
|
+
ze.sort(_r);
|
|
510
533
|
let t = 0, n = 0, s = 0;
|
|
511
|
-
for (const
|
|
512
|
-
|
|
513
|
-
let
|
|
514
|
-
for (const
|
|
515
|
-
const
|
|
516
|
-
|
|
534
|
+
for (const u of ze)
|
|
535
|
+
u.clip && Yr[u.kind] ? (u.show = 0, u.placed = !1, n++) : Pn(u.x, u.y, u.w, u.h, t) ? (In(u.x, u.y, u.w, u.h, t++), u.show = 1, u.subOff = !1, u.placed = !0) : u.w1 > 0 && Pn(u.x1, u.y1, u.w1, u.h1, t) ? (In(u.x1, u.y1, u.w1, u.h1, t++), u.show = 1, u.subOff = !0, u.placed = !0, s++) : (u.show = 0, u.placed = !1, n++);
|
|
536
|
+
let a = 0, r = 0;
|
|
537
|
+
for (const u of ze) u.kind === "cluster" && (a = Math.max(a, u.w), r = Math.max(r, u.h));
|
|
538
|
+
const i = Z.badge;
|
|
539
|
+
a > 0 && ((!i.w || Math.abs(a - i.w) / i.w > 0.12) && (i.w = a), (!i.h || Math.abs(r - i.h) / i.h > 0.12) && (i.h = r));
|
|
517
540
|
const l = Z.stats;
|
|
518
541
|
l.shown = t, l.hidden = n, l.dropped = s, l.off = Z.entries.length - ze.length, ze.length = 0;
|
|
519
542
|
}
|
|
520
|
-
function
|
|
543
|
+
function ta(e, t, n) {
|
|
521
544
|
if (Z.pxk = Math.min(1, Math.max(0.78, Math.sqrt(Math.min(t / 1280, n / 760)))), Z.due) {
|
|
522
|
-
Z.due = !1,
|
|
545
|
+
Z.due = !1, ea(e);
|
|
523
546
|
for (const s of Z.entries) s.live = !1;
|
|
524
|
-
} else e - Z.last >=
|
|
547
|
+
} else e - Z.last >= Qr && (Z.last = e, Z.due = !0);
|
|
525
548
|
}
|
|
526
|
-
const
|
|
527
|
-
function
|
|
528
|
-
for (const n of Z.entries)
|
|
549
|
+
const na = { agent: !1, skill: !1, sub: !1, run: !0, mcp: !0, resource: !0, backend: !0, cluster: !0, graph: !1, extra: !1 };
|
|
550
|
+
function sa(e, t) {
|
|
551
|
+
for (const n of Z.entries) na[n.kind] && e - n.seen < 600 && (n.show > 0 || !Z.active) && t(n);
|
|
529
552
|
}
|
|
530
|
-
function
|
|
553
|
+
function ra() {
|
|
531
554
|
const e = Z.entries.filter((n) => n.drawn && performance.now() - n.seen < 300);
|
|
532
555
|
let t = 0;
|
|
533
556
|
for (let n = 0; n < e.length; n++)
|
|
534
557
|
for (let s = n + 1; s < e.length; s++) {
|
|
535
|
-
const
|
|
536
|
-
Math.abs(
|
|
558
|
+
const a = e[n], r = e[s], i = a.subOff ? a.w1 : a.w, l = a.subOff ? a.h1 : a.h, u = a.subOff ? a.x1 : a.x, f = a.subOff ? a.y1 : a.y, c = r.subOff ? r.w1 : r.w, M = r.subOff ? r.h1 : r.h, o = r.subOff ? r.x1 : r.x, d = r.subOff ? r.y1 : r.y;
|
|
559
|
+
Math.abs(u - o) * 2 < i + c && Math.abs(f - d) * 2 < l + M && t++;
|
|
537
560
|
}
|
|
538
561
|
return t;
|
|
539
562
|
}
|
|
540
563
|
typeof window < "u" && (window.__agentglowLabels = {
|
|
541
564
|
labels: Z,
|
|
542
|
-
snapshot: () => ({ ...Z.stats, total: Z.entries.length, overlaps:
|
|
565
|
+
snapshot: () => ({ ...Z.stats, total: Z.entries.length, overlaps: ra() })
|
|
543
566
|
});
|
|
544
|
-
const
|
|
567
|
+
const Gs = { nRef: 4, min: 0.6, max: 1.6, minRadius: 5, maxRadius: 80, margin: 1.12 }, C = {
|
|
545
568
|
scale: 1,
|
|
546
569
|
spread: 1,
|
|
547
570
|
label: 1,
|
|
548
571
|
/** weighted visible agent count used for the current target */
|
|
549
572
|
n: 0,
|
|
550
|
-
profile: { ...
|
|
573
|
+
profile: { ...Gs },
|
|
551
574
|
/** canvas css px + HUD insets (px) measured by FitCamera */
|
|
552
575
|
w: 1600,
|
|
553
576
|
h: 900,
|
|
@@ -567,29 +590,29 @@ const Ts = { nRef: 4, min: 0.6, max: 1.6, minRadius: 5, maxRadius: 80, margin: 1
|
|
|
567
590
|
/** screen shrink of a stage "up" (b) step: 1 for xy stages, |sin(elevation)| for a tilted xz ground plane */
|
|
568
591
|
foreshorten: 1
|
|
569
592
|
};
|
|
570
|
-
function
|
|
571
|
-
C.profile = { ...
|
|
593
|
+
function aa(e) {
|
|
594
|
+
C.profile = { ...Gs, ...e }, fe = -1;
|
|
572
595
|
}
|
|
573
|
-
let
|
|
574
|
-
const xe = { from: 1, t0: 0, dur: 0 }, hn = (e) => y.MathUtils.clamp(Math.sqrt(C.profile.nRef / Math.max(1, e)), C.profile.min, C.profile.max),
|
|
575
|
-
function
|
|
576
|
-
|
|
596
|
+
let fe = -1, Dt = NaN;
|
|
597
|
+
const xe = { from: 1, t0: 0, dur: 0 }, hn = (e) => y.MathUtils.clamp(Math.sqrt(C.profile.nRef / Math.max(1, e)), C.profile.min, C.profile.max), Ws = (e) => e * e * (3 - 2 * e), at = { nLive: 0, activityAt: -1e9 };
|
|
598
|
+
function oa(e, t, n = t) {
|
|
599
|
+
at.nLive = t, n !== Dt && (Number.isNaN(Dt) || (at.activityAt = e), Dt = n), fe < 0 && (C.n = t, fe = hn(t), C.scale = fe, xe.dur = 0);
|
|
577
600
|
const s = xe.dur > 0 ? Math.min(1, (e - xe.t0) / xe.dur) : 1;
|
|
578
|
-
C.scale = xe.from + (
|
|
601
|
+
C.scale = xe.from + (fe - xe.from) * Ws(s), s >= 1 && (C.scale = fe), C.spread = Math.max(0.85, Math.pow(C.scale, 0.8)), C.label = y.MathUtils.clamp(Math.pow(C.scale, 0.5), 0.85, 1.25);
|
|
579
602
|
}
|
|
580
|
-
const
|
|
603
|
+
const ia = () => fe > 0 && Math.abs(hn(at.nLive) - fe) / fe > 0.06;
|
|
581
604
|
function Gn(e, t) {
|
|
582
|
-
C.n =
|
|
605
|
+
C.n = at.nLive;
|
|
583
606
|
const n = hn(C.n);
|
|
584
|
-
|
|
607
|
+
fe > 0 && Math.abs(n - fe) / fe <= 0.06 || (xe.from = C.scale, xe.t0 = e, xe.dur = t, fe = n);
|
|
585
608
|
}
|
|
586
|
-
const
|
|
587
|
-
function
|
|
588
|
-
var
|
|
589
|
-
const n = e.closest(".scene-root") ?? ((
|
|
590
|
-
if (!n || s.width < 1) return
|
|
609
|
+
const Ns = [".hud-top", ".hud-dock", ".hud-side"], en = "agentglow:hud-layout";
|
|
610
|
+
function ca(e, t = 1.6) {
|
|
611
|
+
var d;
|
|
612
|
+
const n = e.closest(".scene-root") ?? ((d = e.parentElement) == null ? void 0 : d.parentElement), s = e.getBoundingClientRect(), a = { top: 0, right: 0, bottom: 0, left: 0 };
|
|
613
|
+
if (!n || s.width < 1) return a;
|
|
591
614
|
const r = [];
|
|
592
|
-
for (const S of
|
|
615
|
+
for (const S of Ns) {
|
|
593
616
|
const A = n.querySelector(S);
|
|
594
617
|
if (!A || A.offsetParent === null) continue;
|
|
595
618
|
const m = A.getBoundingClientRect();
|
|
@@ -597,7 +620,7 @@ function $r(e, t = 1.6) {
|
|
|
597
620
|
const b = { left: m.left - s.left - 6, top: m.top - s.top - 6, right: m.right - s.left + 6, bottom: m.bottom - s.top + 6 };
|
|
598
621
|
b.right <= 0 || b.bottom <= 0 || b.left >= s.width || b.top >= s.height || r.push(b);
|
|
599
622
|
}
|
|
600
|
-
const
|
|
623
|
+
const i = s.width, l = s.height, u = (S, A) => {
|
|
601
624
|
if (S <= 0 || A <= 0) return 0;
|
|
602
625
|
const m = Math.min(S, A * t);
|
|
603
626
|
return m * (m / t) + S * A * 1e-3;
|
|
@@ -606,28 +629,28 @@ function $r(e, t = 1.6) {
|
|
|
606
629
|
for (let S = 0; S < 1 << 2 * f; S++) {
|
|
607
630
|
let A = 0, m = 0, b = 0, v = 0;
|
|
608
631
|
for (let T = 0; T < f; T++) {
|
|
609
|
-
const
|
|
610
|
-
P === 0 ? A = Math.max(A,
|
|
632
|
+
const R = r[T], P = S >> 2 * T & 3;
|
|
633
|
+
P === 0 ? A = Math.max(A, R.right) : P === 1 ? b = Math.max(b, i - R.left) : P === 2 ? m = Math.max(m, R.bottom) : v = Math.max(v, l - R.top);
|
|
611
634
|
}
|
|
612
|
-
const
|
|
613
|
-
|
|
635
|
+
const W = u(i - A - b, l - m - v);
|
|
636
|
+
W > c && (c = W, a.left = A, a.right = b, a.top = m, a.bottom = v);
|
|
614
637
|
}
|
|
615
|
-
const M =
|
|
616
|
-
if (
|
|
617
|
-
const S = M / (
|
|
618
|
-
|
|
638
|
+
const M = i * 0.68, o = l * 0.68;
|
|
639
|
+
if (a.left + a.right > M) {
|
|
640
|
+
const S = M / (a.left + a.right);
|
|
641
|
+
a.left *= S, a.right *= S;
|
|
619
642
|
}
|
|
620
|
-
if (
|
|
621
|
-
const S = o / (
|
|
622
|
-
|
|
643
|
+
if (a.top + a.bottom > o) {
|
|
644
|
+
const S = o / (a.top + a.bottom);
|
|
645
|
+
a.top *= S, a.bottom *= S;
|
|
623
646
|
}
|
|
624
|
-
return
|
|
647
|
+
return a;
|
|
625
648
|
}
|
|
626
|
-
const
|
|
649
|
+
const Wn = new y.Vector3();
|
|
627
650
|
new y.Vector3();
|
|
628
|
-
const
|
|
629
|
-
function
|
|
630
|
-
const n =
|
|
651
|
+
const ht = new y.Vector3(), Nn = new y.Matrix4(), Me = 0.85, Ne = 8, la = 1100, qn = 2500, ua = 1.04, da = 1e3, fa = 1.18, Dn = 7e3, ha = 2e3, pa = 1e4, ma = 450, Fn = 300, Ln = 0.985;
|
|
652
|
+
function ga({ points: e, origin: t }) {
|
|
653
|
+
const n = ut((c) => c.camera), s = ut((c) => c.controls), a = ut((c) => c.gl), r = ut((c) => c.size), i = B({
|
|
631
654
|
base: 0,
|
|
632
655
|
user: 1,
|
|
633
656
|
userActive: !1,
|
|
@@ -659,37 +682,37 @@ function ia({ points: e, origin: t }) {
|
|
|
659
682
|
// the instantaneous fit has been steady (<0.5%/frame) since: layout / grouping / labels still easing otherwise
|
|
660
683
|
lastDesired: 0,
|
|
661
684
|
steadySince: 0
|
|
662
|
-
}), l = B({ a: new Float64Array(512 * Ne), n: 0, tgt: new y.Vector3(), tpp: 0 }), { visit:
|
|
663
|
-
const c = l.current, M = (o,
|
|
664
|
-
if (!Number.isFinite(o) || !Number.isFinite(
|
|
685
|
+
}), l = B({ a: new Float64Array(512 * Ne), n: 0, tgt: new y.Vector3(), tpp: 0 }), { visit: u, visitLabel: f } = ne(() => {
|
|
686
|
+
const c = l.current, M = (o, d, S, A, m, b, v, W) => {
|
|
687
|
+
if (!Number.isFinite(o) || !Number.isFinite(d) || !Number.isFinite(S)) return;
|
|
665
688
|
if ((c.n + 1) * Ne > c.a.length) {
|
|
666
|
-
const
|
|
667
|
-
|
|
689
|
+
const R = new Float64Array(c.a.length * 2);
|
|
690
|
+
R.set(c.a), c.a = R;
|
|
668
691
|
}
|
|
669
|
-
|
|
692
|
+
ht.set(o - c.tgt.x, d - c.tgt.y, S - c.tgt.z).applyMatrix4(Nn);
|
|
670
693
|
const T = c.n * Ne;
|
|
671
|
-
c.a[T] =
|
|
694
|
+
c.a[T] = ht.x, c.a[T + 1] = ht.y, c.a[T + 2] = ht.z, c.a[T + 3] = A, c.a[T + 4] = m, c.a[T + 5] = b, c.a[T + 6] = v, c.a[T + 7] = W, c.n++;
|
|
672
695
|
};
|
|
673
696
|
return {
|
|
674
|
-
visit: (o,
|
|
697
|
+
visit: (o, d) => M(o.x + t.x, o.y + t.y, o.z + t.z, d, 0, 0, 0, 0),
|
|
675
698
|
// label anchors are world positions; css px (y down) -> view-angle units (y up)
|
|
676
699
|
visitLabel: (o) => M(o.ax, o.ay, o.az, 0, o.ox0 * c.tpp, o.ox1 * c.tpp, -o.oy1 * c.tpp, -o.oy0 * c.tpp)
|
|
677
700
|
};
|
|
678
701
|
}, [t]);
|
|
679
702
|
return $(() => {
|
|
680
|
-
C.w = r.width, C.h = r.height,
|
|
703
|
+
C.w = r.width, C.h = r.height, i.current.lastMeasure = -1e9, i.current.refit = !0;
|
|
681
704
|
}, [r.width, r.height]), $(() => () => n.clearViewOffset(), [n]), $(() => {
|
|
682
|
-
const c =
|
|
705
|
+
const c = a.domElement.closest(".scene-root");
|
|
683
706
|
if (!c) return;
|
|
684
707
|
const M = () => {
|
|
685
|
-
|
|
708
|
+
i.current.lastMeasure = -1e9, i.current.hudMoved = !0;
|
|
686
709
|
};
|
|
687
|
-
return c.addEventListener(
|
|
688
|
-
}, [
|
|
710
|
+
return c.addEventListener(en, M), () => c.removeEventListener(en, M);
|
|
711
|
+
}, [a]), $(() => {
|
|
689
712
|
if (!s) return;
|
|
690
|
-
const c =
|
|
691
|
-
c.userActive = !1, c.userUntil = performance.now() +
|
|
692
|
-
const
|
|
713
|
+
const c = i.current, M = () => c.userActive = !0, o = () => {
|
|
714
|
+
c.userActive = !1, c.userUntil = performance.now() + pa, c.want = c.from = c.cur, c.dur = 0;
|
|
715
|
+
const d = s.target ?? Wn.set(0, 0, 0), S = n.position.distanceTo(d);
|
|
693
716
|
c.cur > 0 && (c.user = y.MathUtils.clamp(S / c.cur, 0.35, 3));
|
|
694
717
|
};
|
|
695
718
|
return s.addEventListener("start", M), s.addEventListener("end", o), () => {
|
|
@@ -697,216 +720,216 @@ function ia({ points: e, origin: t }) {
|
|
|
697
720
|
};
|
|
698
721
|
}, [s, n]), ve((c, M) => {
|
|
699
722
|
var Ce;
|
|
700
|
-
const o =
|
|
701
|
-
|
|
723
|
+
const o = i.current, d = l.current;
|
|
724
|
+
qs = d, tn = { camera: n, points: e, origin: t, canvas: a.domElement };
|
|
702
725
|
const S = Math.min(0.1, M), A = performance.now(), m = Math.max(1, r.width), b = Math.max(1, r.height);
|
|
703
726
|
if (A - o.lastMeasure > 700) {
|
|
704
727
|
o.lastMeasure = A;
|
|
705
728
|
const U = C.insets;
|
|
706
|
-
C.insets =
|
|
729
|
+
C.insets = ca(a.domElement, o.aspect), o.hudMoved && (Math.max(Math.abs(U.top - C.insets.top), Math.abs(U.right - C.insets.right), Math.abs(U.bottom - C.insets.bottom), Math.abs(U.left - C.insets.left)) > 12 && (o.refit = !0), o.hudMoved = !1);
|
|
707
730
|
}
|
|
708
|
-
const v = C.insets,
|
|
709
|
-
C.aspect =
|
|
710
|
-
const
|
|
711
|
-
o.base || (o.base = n.position.distanceTo(
|
|
731
|
+
const v = C.insets, W = Math.max(m * 0.3, m - v.left - v.right), T = Math.max(b * 0.3, b - v.top - v.bottom);
|
|
732
|
+
C.aspect = W / T;
|
|
733
|
+
const R = (s == null ? void 0 : s.target) ?? Wn.set(0, 0, 0);
|
|
734
|
+
o.base || (o.base = n.position.distanceTo(R) || 20), o.dir.subVectors(n.position, R);
|
|
712
735
|
const P = o.dir.length() || 1;
|
|
713
736
|
o.dir.divideScalar(P), Nn.extractRotation(n.matrixWorld).invert(), C.foreshorten = y.MathUtils.clamp(g.plane === "xz" ? Math.abs(o.dir.y) : Math.sqrt(1 - o.dir.y * o.dir.y), 0.35, 1);
|
|
714
|
-
const w = Math.tan(y.MathUtils.degToRad(n.fov) / 2), V =
|
|
715
|
-
|
|
716
|
-
const O =
|
|
717
|
-
let
|
|
718
|
-
if (!O)
|
|
737
|
+
const w = Math.tan(y.MathUtils.degToRad(n.fov) / 2), V = W / m * w * n.aspect, I = T / b * w;
|
|
738
|
+
d.n = 0, d.tgt.copy(R), d.tpp = 2 * w / b, e(u), sa(A, f);
|
|
739
|
+
const O = d.n, x = C.profile, D = x.minRadius / Math.min(V, I), F = x.maxRadius / Math.min(V, I);
|
|
740
|
+
let N;
|
|
741
|
+
if (!O) N = o.want || o.base;
|
|
719
742
|
else {
|
|
720
743
|
const U = x.margin;
|
|
721
|
-
if (
|
|
744
|
+
if (Bn(d.a, O, F, U, V, I)) {
|
|
722
745
|
let se = Math.max(0.5, Math.min(D, F) * 0.25), he = F;
|
|
723
|
-
for (let
|
|
724
|
-
const
|
|
725
|
-
|
|
746
|
+
for (let Ke = 0; Ke < 22; Ke++) {
|
|
747
|
+
const Le = (se + he) / 2;
|
|
748
|
+
Bn(d.a, O, Le, U, V, I) ? he = Le : se = Le;
|
|
726
749
|
}
|
|
727
|
-
|
|
728
|
-
} else
|
|
750
|
+
N = y.MathUtils.clamp(he, D, F);
|
|
751
|
+
} else N = F;
|
|
729
752
|
}
|
|
730
753
|
let X = !1;
|
|
731
754
|
if (O) {
|
|
732
|
-
|
|
733
|
-
const U = V *
|
|
734
|
-
X = J[0] < o.sx - U || J[1] > o.sx + U || J[2] < o.sy - se || J[3] > o.sy + se, o.aspect += (y.MathUtils.clamp((J[1] - J[0]) / Math.max(1e-4, J[3] - J[2]), 0.5, 4) - o.aspect) * 0.1, C.fill[0] = (J[1] - J[0]) / (2 * V), C.fill[1] = (J[3] - J[2]) / (2 *
|
|
755
|
+
yt(d.a, O, P);
|
|
756
|
+
const U = V * Ln, se = I * Ln;
|
|
757
|
+
X = J[0] < o.sx - U || J[1] > o.sx + U || J[2] < o.sy - se || J[3] > o.sy + se, o.aspect += (y.MathUtils.clamp((J[1] - J[0]) / Math.max(1e-4, J[3] - J[2]), 0.5, 4) - o.aspect) * 0.1, C.fill[0] = (J[1] - J[0]) / (2 * V), C.fill[1] = (J[3] - J[2]) / (2 * I);
|
|
735
758
|
}
|
|
736
|
-
(!o.lastDesired || Math.abs(
|
|
759
|
+
(!o.lastDesired || Math.abs(N - o.lastDesired) / o.lastDesired > 5e-3) && (o.steadySince = A), o.lastDesired = N;
|
|
737
760
|
const j = A - o.steadySince, K = o.userActive || A < o.userUntil;
|
|
738
|
-
let L = -1, k = 0,
|
|
761
|
+
let L = -1, k = 0, G = !1;
|
|
739
762
|
if (!o.want || o.refit)
|
|
740
|
-
L =
|
|
763
|
+
L = N, k = o.want ? ma : 0, o.refit = !1;
|
|
741
764
|
else if (o.phase2) {
|
|
742
|
-
if (A >= o.phase2 && (j >=
|
|
765
|
+
if (A >= o.phase2 && (j >= Fn || A - o.phase2 >= qn)) {
|
|
743
766
|
o.phase2 = 0;
|
|
744
|
-
const U =
|
|
745
|
-
(U > 1.02 || U < 1 / 1.02) && (L =
|
|
767
|
+
const U = N / o.want;
|
|
768
|
+
(U > 1.02 || U < 1 / 1.02) && (L = N, k = o.phase2Ms);
|
|
746
769
|
}
|
|
747
770
|
} else if (!K) {
|
|
748
|
-
const U =
|
|
749
|
-
U >
|
|
771
|
+
const U = N / o.want, se = A - Math.max(at.activityAt, h.spawnHintAt), he = X && o.user >= 0.99 && (o.dur <= 0 || A - o.t0 >= o.dur);
|
|
772
|
+
U > ua || he ? (o.inSince = 0, o.outSince ? o.outMax = Math.max(o.outMax, N) : (o.outSince = A, o.outMax = N), (se >= la && j >= Fn || A - o.outSince >= qn) && (L = Math.max(o.outMax, N, he ? o.want : 0), k = da, G = !0)) : (o.outSince = 0, U < 1 / fa ? (o.inSince || (o.inSince = A), A - o.inSince >= Dn && se >= Dn && (L = N, k = ha, G = !0)) : o.inSince = 0);
|
|
750
773
|
}
|
|
751
774
|
if (L >= 0)
|
|
752
|
-
if (o.outSince = o.inSince = 0,
|
|
775
|
+
if (o.outSince = o.inSince = 0, G && ia() && !st)
|
|
753
776
|
Gn(A, k * 0.8), o.phase2 = A + k * 0.8 + 250, o.phase2Ms = k;
|
|
754
777
|
else {
|
|
755
|
-
const U =
|
|
756
|
-
o.from = o.cur || L, o.want = L, o.t0 = A, o.dur = U, o.fx = o.sx, o.fy = o.sy, O && (
|
|
778
|
+
const U = st ? 0 : k;
|
|
779
|
+
o.from = o.cur || L, o.want = L, o.t0 = A, o.dur = U, o.fx = o.sx, o.fy = o.sy, O && (yt(d.a, O, L * o.user), o.tx = y.MathUtils.clamp((J[0] + J[1]) / 2, -V * Me, V * Me), o.ty = y.MathUtils.clamp((J[2] + J[3]) / 2, -I * Me, I * Me)), Gn(A, U);
|
|
757
780
|
}
|
|
758
781
|
const H = 2 * w * o.want * o.user / b;
|
|
759
782
|
Math.abs(H - C.wpp) / C.wpp > 0.1 && (C.wpp = H);
|
|
760
|
-
const Q = o.dur > 0 ? Math.min(1, (A - o.t0) / o.dur) : 1,
|
|
761
|
-
if (o.cur = o.from + (o.want - o.from) *
|
|
762
|
-
|
|
783
|
+
const Q = o.dur > 0 ? Math.min(1, (A - o.t0) / o.dur) : 1, q = Ws(Q);
|
|
784
|
+
if (o.cur = o.from + (o.want - o.from) * q, K && O) {
|
|
785
|
+
yt(d.a, O, P);
|
|
763
786
|
const U = 1 - Math.exp(-S / 0.3);
|
|
764
|
-
o.tx = y.MathUtils.clamp((J[0] + J[1]) / 2, -V * Me, V * Me), o.ty = y.MathUtils.clamp((J[2] + J[3]) / 2, -
|
|
787
|
+
o.tx = y.MathUtils.clamp((J[0] + J[1]) / 2, -V * Me, V * Me), o.ty = y.MathUtils.clamp((J[2] + J[3]) / 2, -I * Me, I * Me), o.sx += (o.tx - o.sx) * U, o.sy += (o.ty - o.sy) * U, o.fx = o.sx, o.fy = o.sy;
|
|
765
788
|
} else
|
|
766
|
-
o.sx = o.fx + (o.tx - o.fx) *
|
|
767
|
-
C.cam.want = o.want, C.cam.fit =
|
|
768
|
-
const Y = v.left +
|
|
789
|
+
o.sx = o.fx + (o.tx - o.fx) * q, o.sy = o.fy + (o.ty - o.fy) * q;
|
|
790
|
+
C.cam.want = o.want, C.cam.fit = N, C.cam.dist = P, C.cam.user = o.user, C.cam.points = O;
|
|
791
|
+
const Y = v.left + W / 2, ee = v.top + T / 2, ge = m / 2 - Y + o.sx / (w * n.aspect) * (m / 2), ke = b / 2 - ee - o.sy / w * (b / 2), ae = n.view;
|
|
769
792
|
if ((!ae || !ae.enabled || ae.fullWidth !== m || ae.fullHeight !== b || Math.abs(ae.offsetX - ge) > 0.25 || Math.abs(ae.offsetY - ke) > 0.25) && n.setViewOffset(m, b, ge, ke, m, b), o.userActive) return;
|
|
770
793
|
let ie = o.cur * o.user;
|
|
771
|
-
(s == null ? void 0 : s.minDistance) !== void 0 && (ie = Math.max(ie, s.minDistance)), (s == null ? void 0 : s.maxDistance) !== void 0 && Number.isFinite(s.maxDistance) && (ie = Math.min(ie, s.maxDistance)), !(Math.abs(ie - P) < 1e-4) && (n.position.copy(
|
|
794
|
+
(s == null ? void 0 : s.minDistance) !== void 0 && (ie = Math.max(ie, s.minDistance)), (s == null ? void 0 : s.maxDistance) !== void 0 && Number.isFinite(s.maxDistance) && (ie = Math.min(ie, s.maxDistance)), !(Math.abs(ie - P) < 1e-4) && (n.position.copy(R).addScaledVector(o.dir, ie), (Ce = s == null ? void 0 : s.update) == null || Ce.call(s));
|
|
772
795
|
}), null;
|
|
773
796
|
}
|
|
774
797
|
const J = new Float64Array(4);
|
|
775
|
-
function
|
|
776
|
-
let s = 1 / 0,
|
|
798
|
+
function yt(e, t, n) {
|
|
799
|
+
let s = 1 / 0, a = -1 / 0, r = 1 / 0, i = -1 / 0;
|
|
777
800
|
for (let l = 0; l < t; l++) {
|
|
778
|
-
const
|
|
779
|
-
s = Math.min(s, (M - f) / c + e[
|
|
801
|
+
const u = l * Ne, f = e[u + 3], c = Math.max(0.05, n - e[u + 2] - f), M = e[u], o = e[u + 1];
|
|
802
|
+
s = Math.min(s, (M - f) / c + e[u + 4]), a = Math.max(a, (M + f) / c + e[u + 5]), r = Math.min(r, (o - f) / c + e[u + 6]), i = Math.max(i, (o + f) / c + e[u + 7]);
|
|
780
803
|
}
|
|
781
|
-
J[0] = s, J[1] =
|
|
804
|
+
J[0] = s, J[1] = a, J[2] = r, J[3] = i;
|
|
782
805
|
}
|
|
783
|
-
function
|
|
806
|
+
function Bn(e, t, n, s, a, r) {
|
|
784
807
|
for (let c = 0; c < t; c++) if (n - e[c * Ne + 2] - e[c * Ne + 3] <= 0.05) return !1;
|
|
785
|
-
|
|
786
|
-
const
|
|
787
|
-
return ((J[1] - J[0]) / 2 +
|
|
788
|
-
}
|
|
789
|
-
let
|
|
790
|
-
function
|
|
791
|
-
if (!
|
|
792
|
-
const { camera: e, points: t, origin: n, canvas: s } =
|
|
793
|
-
for (const A of
|
|
808
|
+
yt(e, t, n);
|
|
809
|
+
const i = (J[0] + J[1]) / 2, l = (J[2] + J[3]) / 2, u = Math.max(0, Math.abs(i) - a * Me), f = Math.max(0, Math.abs(l) - r * Me);
|
|
810
|
+
return ((J[1] - J[0]) / 2 + u) * s <= a && ((J[3] - J[2]) / 2 + f) * s <= r;
|
|
811
|
+
}
|
|
812
|
+
let qs = null, tn = null;
|
|
813
|
+
function Aa() {
|
|
814
|
+
if (!tn) return null;
|
|
815
|
+
const { camera: e, points: t, origin: n, canvas: s } = tn, a = s.getBoundingClientRect(), r = a.width, i = a.height, l = s.closest(".scene-root") ?? document, u = [];
|
|
816
|
+
for (const A of Ns) {
|
|
794
817
|
const m = l.querySelector(A);
|
|
795
818
|
if (!m || m.offsetParent === null) continue;
|
|
796
819
|
const b = m.getBoundingClientRect();
|
|
797
|
-
b.width < 2 || b.height < 2 ||
|
|
820
|
+
b.width < 2 || b.height < 2 || u.push({ sel: A, l: b.left - a.left, t: b.top - a.top, r: b.right - a.left, b: b.bottom - a.top });
|
|
798
821
|
}
|
|
799
|
-
const f = Math.tan(y.MathUtils.degToRad(e.fov) / 2), c = [], M = (A, m, b, v,
|
|
800
|
-
const
|
|
801
|
-
(b < 0 || v < 0 ||
|
|
822
|
+
const f = Math.tan(y.MathUtils.degToRad(e.fov) / 2), c = [], M = (A, m, b, v, W, T) => {
|
|
823
|
+
const R = u.filter((P) => b < P.r && W > P.l && v < P.b && T > P.t).map((P) => P.sel);
|
|
824
|
+
(b < 0 || v < 0 || W > r || T > i) && R.push("edge"), c.push({ kind: A, name: m, l: Math.round(b), t: Math.round(v), r: Math.round(W), b: Math.round(T), hits: R });
|
|
802
825
|
}, o = new y.Vector3();
|
|
803
826
|
t((A, m) => {
|
|
804
827
|
o.set(A.x + n.x, A.y + n.y, A.z + n.z);
|
|
805
828
|
const b = o.clone().applyMatrix4(e.matrixWorldInverse).z * -1;
|
|
806
829
|
o.project(e);
|
|
807
|
-
const v = (o.x + 1) / 2 * r,
|
|
808
|
-
M("point", `${A.x.toFixed(1)},${A.y.toFixed(1)},${A.z.toFixed(1)}`, v - T,
|
|
830
|
+
const v = (o.x + 1) / 2 * r, W = (1 - o.y) / 2 * i, T = m / Math.max(0.05, b) * (i / 2) / f;
|
|
831
|
+
M("point", `${A.x.toFixed(1)},${A.y.toFixed(1)},${A.z.toFixed(1)}`, v - T, W - T, v + T, W + T);
|
|
809
832
|
});
|
|
810
|
-
const
|
|
833
|
+
const d = performance.now();
|
|
811
834
|
for (const A of Z.entries)
|
|
812
|
-
if (A.drawn &&
|
|
813
|
-
const m = A.subOff ? A.w1 : A.w, b = A.subOff ? A.h1 : A.h, v = A.subOff ? A.x1 : A.x,
|
|
814
|
-
M(`label:${A.kind}`, "", v - m / 2,
|
|
835
|
+
if (A.drawn && d - A.seen < 600) {
|
|
836
|
+
const m = A.subOff ? A.w1 : A.w, b = A.subOff ? A.h1 : A.h, v = A.subOff ? A.x1 : A.x, W = A.subOff ? A.y1 : A.y;
|
|
837
|
+
M(`label:${A.kind}`, "", v - m / 2, W - b / 2, v + m / 2, W + b / 2);
|
|
815
838
|
}
|
|
816
839
|
const S = c.filter((A) => A.hits.length);
|
|
817
|
-
return { W: r, H:
|
|
840
|
+
return { W: r, H: i, huds: u, insets: C.insets, total: c.length, clipped: S.length, items: S };
|
|
818
841
|
}
|
|
819
|
-
function
|
|
820
|
-
const e =
|
|
842
|
+
function ba() {
|
|
843
|
+
const e = qs;
|
|
821
844
|
if (!e) return [];
|
|
822
845
|
const t = [];
|
|
823
846
|
for (let n = 0; n < e.n; n++) {
|
|
824
|
-
const s = n * Ne,
|
|
825
|
-
t.push([+(e.a[s] /
|
|
847
|
+
const s = n * Ne, a = C.cam.dist - e.a[s + 2];
|
|
848
|
+
t.push([+(e.a[s] / a).toFixed(3), +(e.a[s + 1] / a).toFixed(3), +e.a[s + 3].toFixed(2), +e.a[s + 4].toFixed(3), +e.a[s + 5].toFixed(3)]);
|
|
826
849
|
}
|
|
827
850
|
return t;
|
|
828
851
|
}
|
|
829
|
-
typeof window < "u" && (window.__agentglowFit = Object.assign(C, { framedPoints:
|
|
830
|
-
const be = Math.PI,
|
|
852
|
+
typeof window < "u" && (window.__agentglowFit = Object.assign(C, { framedPoints: ba, clipReport: Aa }));
|
|
853
|
+
const be = Math.PI, Ds = be * 2, De = 2.2, Fs = (e) => ({
|
|
831
854
|
sx: e > 1 ? Math.min(1.7, Math.pow(e, 0.6)) : 1,
|
|
832
855
|
sy: e < 1 ? Math.min(1.7, Math.pow(1 / e, 0.6)) : 1
|
|
833
856
|
});
|
|
834
|
-
function pn(e, t, n, s,
|
|
857
|
+
function pn(e, t, n, s, a) {
|
|
835
858
|
const r = t.n;
|
|
836
859
|
if (r <= 1) {
|
|
837
860
|
n.a = 0, n.b = 0, n.angle = -be / 2;
|
|
838
861
|
return;
|
|
839
862
|
}
|
|
840
|
-
const l = (r === 2 ? 0 : r === 4 ? be / 4 : be / 2) - e *
|
|
863
|
+
const l = (r === 2 ? 0 : r === 4 ? be / 4 : be / 2) - e * Ds / r, f = (Math.max(t.hu, t.hv) + a / 2) / Math.sin(be / r), { sx: c, sy: M } = s ? Fs(t.aspect) : { sx: 1, sy: 1 };
|
|
841
864
|
n.a = Math.cos(l) * f * c, n.b = Math.sin(l) * f * M, n.angle = Math.atan2(n.b, n.a);
|
|
842
865
|
}
|
|
843
|
-
const
|
|
844
|
-
function
|
|
866
|
+
const va = 186, Ma = 46, ya = 34, Ft = { w: 7, h: 6.5 };
|
|
867
|
+
function Ls(e = 0) {
|
|
845
868
|
const t = Z.pxk, n = Math.max(120, C.w - C.insets.left - C.insets.right), s = Math.max(100, C.h - C.insets.top - C.insets.bottom);
|
|
846
|
-
let
|
|
847
|
-
|
|
848
|
-
const r = Math.min((Z.badge.h ||
|
|
849
|
-
return
|
|
869
|
+
let a = (Z.badge.w || va * t) * 1.12;
|
|
870
|
+
a = e > 1 ? Math.min(a, 0.85 * Math.min(n, s * 1.3) / (1 / Math.sin(be / e) + 1)) : Math.min(a, 0.85 * n / 2);
|
|
871
|
+
const r = Math.min((Z.badge.h || Ma * t) * 1.15, 0.22 * s);
|
|
872
|
+
return Ft.w = Math.max(7, a * C.wpp), Ft.h = Math.max(6.5, 5 + r * C.wpp), Ft;
|
|
850
873
|
}
|
|
851
|
-
function
|
|
852
|
-
const r =
|
|
853
|
-
|
|
874
|
+
function Bs(e, t, n, s, a) {
|
|
875
|
+
const r = Ls(), i = Math.min(t, Math.max(2, Math.floor(Math.max(2 * n.hw + r.w * 0.6, r.w * 2) / r.w))), l = Math.floor(e / i), u = Math.min(i, t - l * i), f = Math.min(1.7, 1 / Math.max(0.35, C.foreshorten));
|
|
876
|
+
a.a = (e % i - (u - 1) / 2) * r.w, a.b = s - l * r.h * f;
|
|
854
877
|
}
|
|
855
|
-
function mn(e, t, n, s,
|
|
856
|
-
const r =
|
|
857
|
-
s.a = Math.cos(
|
|
878
|
+
function mn(e, t, n, s, a) {
|
|
879
|
+
const r = Ls(t), i = be / 2 + be / Math.max(1, t) - e * Ds / Math.max(1, t), l = Math.max(n.hw, n.hh) + ya * C.wpp * Z.pxk, u = Math.max(l + 3.6, t > 1 ? r.w / (2 * Math.sin(be / t)) : 0), { sx: f, sy: c } = a ? Fs(n.aspect) : { sx: 1, sy: 1 };
|
|
880
|
+
s.a = Math.cos(i) * u * f, s.b = Math.sin(i) * u * c;
|
|
858
881
|
}
|
|
859
|
-
const
|
|
882
|
+
const Us = {
|
|
860
883
|
name: "radial",
|
|
861
884
|
local: { topGap: 3.6, fanLen: 3.4, subGap: 2.7, fan: "spread", stackGap: 2, pad: 1.3 },
|
|
862
|
-
run: (e, t, n) => pn(e, t, n, !0,
|
|
863
|
-
cluster: (e, t, n, s,
|
|
885
|
+
run: (e, t, n) => pn(e, t, n, !0, De),
|
|
886
|
+
cluster: (e, t, n, s, a) => mn(t, n, s, a, !0),
|
|
864
887
|
periphery: "sides"
|
|
865
|
-
},
|
|
888
|
+
}, xa = {
|
|
866
889
|
name: "radar",
|
|
867
890
|
local: { topGap: 3.2, fanLen: 3, subGap: 2.5, fan: "spread", stackGap: 2, pad: 1.2 },
|
|
868
|
-
run: (e, t, n) => pn(e, t, n, !1,
|
|
869
|
-
cluster: (e, t, n, s,
|
|
891
|
+
run: (e, t, n) => pn(e, t, n, !1, De),
|
|
892
|
+
cluster: (e, t, n, s, a) => mn(t, n, s, a, !1),
|
|
870
893
|
periphery: "rim",
|
|
871
894
|
round: !0
|
|
872
|
-
},
|
|
895
|
+
}, wa = {
|
|
873
896
|
name: "drift",
|
|
874
897
|
local: { topGap: 4, fanLen: 3.8, subGap: 3, fan: "spread", stackGap: 2.2, pad: 1.5 },
|
|
875
|
-
run: (e, t, n) => pn(e, t, n, !0,
|
|
876
|
-
cluster: (e, t, n, s,
|
|
898
|
+
run: (e, t, n) => pn(e, t, n, !0, De * 1.6),
|
|
899
|
+
cluster: (e, t, n, s, a) => mn(t, n, s, a, !0),
|
|
877
900
|
periphery: "sides"
|
|
878
901
|
};
|
|
879
|
-
function
|
|
880
|
-
let
|
|
881
|
-
for (let
|
|
882
|
-
const l = Math.ceil(e /
|
|
883
|
-
|
|
902
|
+
function Zs(e, t, n, s) {
|
|
903
|
+
let a = 1, r = 1 / 0;
|
|
904
|
+
for (let i = 1; i <= e; i++) {
|
|
905
|
+
const l = Math.ceil(e / i), u = Math.abs(Math.log(i * t / (l * n) / s));
|
|
906
|
+
u < r - 1e-6 && (r = u, a = i);
|
|
884
907
|
}
|
|
885
|
-
return
|
|
908
|
+
return a;
|
|
886
909
|
}
|
|
887
|
-
const
|
|
910
|
+
const Un = 2.4, ka = {
|
|
888
911
|
name: "lanes",
|
|
889
912
|
local: { topGap: 4.6, fanLen: 2, subGap: 1.6, fan: "stack", stackGap: 1.5, pad: 1.2, subShift: 2.8 },
|
|
890
913
|
run(e, t, n) {
|
|
891
|
-
const s = t.n,
|
|
892
|
-
n.a = (
|
|
914
|
+
const s = t.n, a = 2 * t.hu + De * 2.5, r = 2 * t.hv + De + Un, i = Zs(s, a, r, t.aspect), l = Math.ceil(s / i), u = e % i, f = Math.floor(e / i), c = Math.min(i, s - f * i);
|
|
915
|
+
n.a = (u - (c - 1) / 2) * a, n.b = ((l - 1) / 2 - f) * r - Un / 2, n.angle = -be / 2;
|
|
893
916
|
},
|
|
894
|
-
cluster(e, t, n, s,
|
|
895
|
-
|
|
917
|
+
cluster(e, t, n, s, a) {
|
|
918
|
+
Bs(t, n, s, -(s.hh + 4), a);
|
|
896
919
|
},
|
|
897
920
|
periphery: "sides"
|
|
898
|
-
},
|
|
921
|
+
}, Sa = {
|
|
899
922
|
name: "grid",
|
|
900
923
|
local: { topGap: 3.4, fanLen: 3, subGap: 2.4, fan: "spread", stackGap: 2, pad: 1.3 },
|
|
901
924
|
run(e, t, n) {
|
|
902
|
-
const s = t.n,
|
|
903
|
-
n.a = (
|
|
925
|
+
const s = t.n, a = 2 * t.hu + De, r = 2 * t.hv + De, i = Zs(s, a, r, t.aspect), l = Math.ceil(s / i), u = e % i, f = Math.floor(e / i), c = Math.min(i, s - f * i);
|
|
926
|
+
n.a = (u - (c - 1) / 2) * a, n.b = ((l - 1) / 2 - f) * r, n.angle = -be / 2;
|
|
904
927
|
},
|
|
905
|
-
cluster(e, t, n, s,
|
|
906
|
-
|
|
928
|
+
cluster(e, t, n, s, a) {
|
|
929
|
+
Bs(t, n, s, -(s.hh + 4), a);
|
|
907
930
|
},
|
|
908
931
|
periphery: "sides"
|
|
909
|
-
},
|
|
932
|
+
}, Oa = { radial: Us, radar: xa, drift: wa, lanes: ka, grid: Sa }, re = 6, Js = 12, Ea = 9, Ra = 10, Va = 12, Ca = 6, Ta = 8e3, za = 250, Pa = 1500, Ia = 300, Ga = ["planner", "researcher", "graph_scout", "records_scout", "data_scout", "writer"], Wa = (e) => ({
|
|
910
933
|
lane: e,
|
|
911
934
|
active: !1,
|
|
912
935
|
runs: 0,
|
|
@@ -914,7 +937,7 @@ const Bn = 2.4, ma = {
|
|
|
914
937
|
thinking: 0,
|
|
915
938
|
tokens: 0,
|
|
916
939
|
energy: 0,
|
|
917
|
-
color:
|
|
940
|
+
color: St[e % St.length],
|
|
918
941
|
types: { planner: 0, researcher: 0, graph_scout: 0, records_scout: 0, data_scout: 0, writer: 0 },
|
|
919
942
|
version: 0,
|
|
920
943
|
runIds: []
|
|
@@ -934,163 +957,163 @@ const Bn = 2.4, ma = {
|
|
|
934
957
|
expandedRuns: 0,
|
|
935
958
|
collapsedRuns: 0,
|
|
936
959
|
activeClusters: 0,
|
|
937
|
-
clusters: Array.from({ length: re }, (e, t) =>
|
|
938
|
-
},
|
|
939
|
-
let
|
|
940
|
-
const
|
|
941
|
-
let
|
|
942
|
-
const
|
|
943
|
-
|
|
960
|
+
clusters: Array.from({ length: re }, (e, t) => Wa(t))
|
|
961
|
+
}, de = /* @__PURE__ */ new Set(), Ze = /* @__PURE__ */ new Map(), Oe = /* @__PURE__ */ new Set(), $e = /* @__PURE__ */ new Map(), Na = 0.25, pt = /* @__PURE__ */ new Map(), Be = [], Ee = /* @__PURE__ */ new Map(), Et = /* @__PURE__ */ new Map(), Pe = [], Lt = new Uint16Array(re), mt = /* @__PURE__ */ new Map();
|
|
962
|
+
let Zn = -1e9, Jn = -1, Ge = !0, Hn = null, jn = -1;
|
|
963
|
+
const nn = /* @__PURE__ */ new Set();
|
|
964
|
+
let Hs = 0;
|
|
965
|
+
const je = () => {
|
|
966
|
+
Hs++, nn.forEach((e) => e());
|
|
944
967
|
}, gn = (e) => (e % re + re) % re;
|
|
945
|
-
function
|
|
968
|
+
function xt(e) {
|
|
946
969
|
const t = h.runs.get(e);
|
|
947
970
|
return t ? gn(t.slot) : Math.floor(dn(e, 77) * re) % re;
|
|
948
971
|
}
|
|
949
|
-
const
|
|
950
|
-
function
|
|
972
|
+
const qa = (e) => xt(e.run);
|
|
973
|
+
function Bt(e) {
|
|
951
974
|
if (!z.grouped) return !0;
|
|
952
975
|
const t = typeof e == "string" ? h.instances.get(e) : e;
|
|
953
|
-
return t ?
|
|
976
|
+
return t ? de.has(t.run) : !1;
|
|
954
977
|
}
|
|
955
|
-
function
|
|
956
|
-
return !z.grouped ||
|
|
978
|
+
function Xn(e) {
|
|
979
|
+
return !z.grouped || de.has(e);
|
|
957
980
|
}
|
|
958
|
-
function
|
|
981
|
+
function kc(e) {
|
|
959
982
|
return z.grouped ? e === h.selected || Oe.has(e) : !0;
|
|
960
983
|
}
|
|
961
|
-
const
|
|
962
|
-
function
|
|
963
|
-
z.expandedLane = gn(e), z.showAll = !1,
|
|
984
|
+
const sn = (e) => z.clusters[gn(e)];
|
|
985
|
+
function Da(e) {
|
|
986
|
+
z.expandedLane = gn(e), z.showAll = !1, Ze.clear(), Ge = !0, je();
|
|
964
987
|
}
|
|
965
|
-
function
|
|
966
|
-
z.expandedLane = -1,
|
|
988
|
+
function Fa() {
|
|
989
|
+
z.expandedLane = -1, Ze.clear(), Ge = !0, je();
|
|
967
990
|
}
|
|
968
|
-
function
|
|
969
|
-
z.showAll = e, e && (z.expandedLane = -1), Ge = !0,
|
|
991
|
+
function Kn(e) {
|
|
992
|
+
z.showAll = e, e && (z.expandedLane = -1), Ge = !0, je();
|
|
970
993
|
}
|
|
971
|
-
function
|
|
972
|
-
return
|
|
973
|
-
(e) => (
|
|
974
|
-
() =>
|
|
994
|
+
function La() {
|
|
995
|
+
return it(
|
|
996
|
+
(e) => (nn.add(e), () => nn.delete(e)),
|
|
997
|
+
() => Hs
|
|
975
998
|
), z;
|
|
976
999
|
}
|
|
977
|
-
const
|
|
978
|
-
function
|
|
979
|
-
|
|
1000
|
+
const Ba = (e, t) => Ee.get(e) - Ee.get(t) || Et.get(t) - Et.get(e);
|
|
1001
|
+
function Ua(e) {
|
|
1002
|
+
$e.clear(), pt.clear();
|
|
980
1003
|
let t = 0;
|
|
981
|
-
for (const
|
|
982
|
-
|
|
1004
|
+
for (const d of h.instances.values())
|
|
1005
|
+
$e.set(d.run, ($e.get(d.run) ?? 0) + (d.doneAt && !d.exitAt ? Na : 1)), te(d) && (t++, pt.set(d.run, (pt.get(d.run) ?? 0) + 1));
|
|
983
1006
|
z.alive = t;
|
|
984
1007
|
const n = z.crowded;
|
|
985
|
-
!z.crowded && t >
|
|
1008
|
+
!z.crowded && t > Js ? z.crowded = !0 : z.crowded && t < Ea && (z.crowded = !1), !z.crowded && n && (z.showAll = !1, z.expandedLane = -1);
|
|
986
1009
|
const s = z.crowded && !z.showAll;
|
|
987
|
-
let
|
|
1010
|
+
let a = s !== z.grouped;
|
|
988
1011
|
if (z.grouped = s, !s) {
|
|
989
|
-
(
|
|
990
|
-
for (const
|
|
991
|
-
|
|
1012
|
+
(de.size || Oe.size) && (a = !0), de.clear(), Ze.clear(), Oe.clear(), z.expandedAgents = t, z.expandedRuns = h.runs.size, z.collapsedRuns = 0, z.activeClusters = 0;
|
|
1013
|
+
for (const d of z.clusters) d.active && (d.active = !1, d.runIds.length = 0, d.version++);
|
|
1014
|
+
a && z.version++, (a || n !== z.crowded) && je();
|
|
992
1015
|
return;
|
|
993
1016
|
}
|
|
994
|
-
const r = h.selected ? h.instances.get(h.selected) : void 0,
|
|
995
|
-
|
|
996
|
-
for (const [
|
|
1017
|
+
const r = h.selected ? h.instances.get(h.selected) : void 0, i = (r == null ? void 0 : r.run) ?? null;
|
|
1018
|
+
Be.length = 0, Ee.clear(), Et.clear();
|
|
1019
|
+
for (const [d, S] of $e) {
|
|
997
1020
|
if (S <= 0) continue;
|
|
998
|
-
const A = h.runs.get(
|
|
999
|
-
Ee.set(
|
|
1021
|
+
const A = h.runs.get(d), m = xt(d), b = de.has(d) && e - (Ze.get(d) ?? 0) < Ta, v = d === i ? 0 : z.expandedLane === m ? 1 : b ? 2 : (pt.get(d) ?? 0) > 0 ? 3 : 4;
|
|
1022
|
+
Ee.set(d, v), Et.set(d, (A == null ? void 0 : A.startedAt) ?? 0), Be.push(d);
|
|
1000
1023
|
}
|
|
1001
|
-
|
|
1002
|
-
const l = z.expandedLane >= 0 ?
|
|
1003
|
-
let
|
|
1004
|
-
|
|
1005
|
-
for (let
|
|
1006
|
-
for (const S of
|
|
1024
|
+
Be.sort(Ba);
|
|
1025
|
+
const l = z.expandedLane >= 0 ? Va : Ra;
|
|
1026
|
+
let u = 0, f = 0;
|
|
1027
|
+
Lt.fill(0);
|
|
1028
|
+
for (let d = 0; d < 2; d++)
|
|
1029
|
+
for (const S of Be) {
|
|
1007
1030
|
const A = Ee.get(S);
|
|
1008
1031
|
if (A === -1) continue;
|
|
1009
|
-
const m =
|
|
1010
|
-
if (
|
|
1011
|
-
const b =
|
|
1012
|
-
(A === 0 ||
|
|
1032
|
+
const m = xt(S);
|
|
1033
|
+
if (d === 0 && A >= 2 && Lt[m]) continue;
|
|
1034
|
+
const b = $e.get(S);
|
|
1035
|
+
(A === 0 || u === 0 || u + b <= l) && (u += b, f++, Lt[m]++, Ee.set(S, -1));
|
|
1013
1036
|
}
|
|
1014
|
-
for (const
|
|
1015
|
-
Ee.get(
|
|
1016
|
-
for (const
|
|
1017
|
-
Ee.get(
|
|
1037
|
+
for (const d of de)
|
|
1038
|
+
Ee.get(d) !== -1 && (de.delete(d), Ze.delete(d), a = !0);
|
|
1039
|
+
for (const d of Be)
|
|
1040
|
+
Ee.get(d) === -1 && !de.has(d) && (de.add(d), Ze.set(d, e), a = !0);
|
|
1018
1041
|
z.expandedRuns = f;
|
|
1019
1042
|
let c = 0;
|
|
1020
|
-
for (const
|
|
1021
|
-
for (const
|
|
1022
|
-
|
|
1023
|
-
z.collapsedRuns = c, Pe.length = 0,
|
|
1024
|
-
for (const
|
|
1025
|
-
if (!te(
|
|
1026
|
-
const S =
|
|
1027
|
-
|
|
1043
|
+
for (const d of z.clusters) d.runIds.length = 0;
|
|
1044
|
+
for (const d of Be)
|
|
1045
|
+
de.has(d) || (z.clusters[xt(d)].runIds.push(d), c++);
|
|
1046
|
+
z.collapsedRuns = c, Pe.length = 0, mt.clear();
|
|
1047
|
+
for (const d of h.instances.values()) {
|
|
1048
|
+
if (!te(d) || !de.has(d.run)) continue;
|
|
1049
|
+
const S = Ot(d, e) + (d.status === "thinking" ? 0.6 : 0) + (Oe.has(d.id) ? 0.4 : 0) + (e - d.bornAt < 3e3 ? 1 : 0) + (d.subagent ? 0 : 0.2);
|
|
1050
|
+
mt.set(d.id, S), Pe.push(d);
|
|
1028
1051
|
}
|
|
1029
|
-
Pe.sort((
|
|
1030
|
-
const M = Math.min(
|
|
1052
|
+
Pe.sort((d, S) => mt.get(S.id) - mt.get(d.id));
|
|
1053
|
+
const M = Math.min(Ca, Pe.length);
|
|
1031
1054
|
let o = Oe.size !== M;
|
|
1032
1055
|
if (!o)
|
|
1033
|
-
for (let
|
|
1056
|
+
for (let d = 0; d < M; d++) Oe.has(Pe[d].id) || (o = !0);
|
|
1034
1057
|
if (o) {
|
|
1035
1058
|
Oe.clear();
|
|
1036
|
-
for (let
|
|
1037
|
-
|
|
1059
|
+
for (let d = 0; d < M; d++) Oe.add(Pe[d].id);
|
|
1060
|
+
a = !0;
|
|
1038
1061
|
}
|
|
1039
|
-
Pe.length = 0,
|
|
1062
|
+
Pe.length = 0, a && (z.version++, je());
|
|
1040
1063
|
}
|
|
1041
|
-
function
|
|
1042
|
-
const e = performance.now(), t = z.clusters, n =
|
|
1064
|
+
function Za() {
|
|
1065
|
+
const e = performance.now(), t = z.clusters, n = Ja;
|
|
1043
1066
|
for (let r = 0; r < re; r++) {
|
|
1044
|
-
const
|
|
1045
|
-
n[r * 3] =
|
|
1046
|
-
for (const l of
|
|
1047
|
-
|
|
1067
|
+
const i = t[r];
|
|
1068
|
+
n[r * 3] = i.agents, n[r * 3 + 1] = i.thinking, n[r * 3 + 2] = i.runs, i.agents = i.thinking = i.tokens = 0;
|
|
1069
|
+
for (const l of Ga) i.types[l] = 0;
|
|
1070
|
+
Ut[r] = 0;
|
|
1048
1071
|
}
|
|
1049
1072
|
let s = 0;
|
|
1050
1073
|
for (const r of h.instances.values()) {
|
|
1051
|
-
if (
|
|
1074
|
+
if (de.has(r.run)) {
|
|
1052
1075
|
te(r) && s++;
|
|
1053
1076
|
continue;
|
|
1054
1077
|
}
|
|
1055
1078
|
if (!te(r)) continue;
|
|
1056
|
-
const
|
|
1057
|
-
|
|
1079
|
+
const i = t[qa(r)];
|
|
1080
|
+
i.agents++, i.tokens += r.tokens, i.types[r.type]++, r.status === "thinking" && i.thinking++, Ut[i.lane] += Ot(r, e);
|
|
1058
1081
|
}
|
|
1059
1082
|
z.expandedAgents = s;
|
|
1060
|
-
let
|
|
1083
|
+
let a = 0;
|
|
1061
1084
|
for (let r = 0; r < re; r++) {
|
|
1062
|
-
const
|
|
1063
|
-
|
|
1064
|
-
const l =
|
|
1065
|
-
l &&
|
|
1066
|
-
const
|
|
1067
|
-
|
|
1085
|
+
const i = t[r];
|
|
1086
|
+
i.runs = i.runIds.length;
|
|
1087
|
+
const l = i.runs > 0;
|
|
1088
|
+
l && a++;
|
|
1089
|
+
const u = i.agents ? Math.min(1, Ut[r] / i.agents * 0.9 + i.thinking / i.agents * 0.35) : 0;
|
|
1090
|
+
i.energy += (u - i.energy) * 0.08, (l !== i.active || n[r * 3] !== i.agents || n[r * 3 + 1] !== i.thinking || n[r * 3 + 2] !== i.runs) && i.version++, i.active = l;
|
|
1068
1091
|
}
|
|
1069
|
-
|
|
1092
|
+
a !== z.activeClusters && (z.activeClusters = a, je());
|
|
1070
1093
|
}
|
|
1071
|
-
const
|
|
1072
|
-
function
|
|
1073
|
-
if (e ===
|
|
1074
|
-
|
|
1094
|
+
const Ja = new Float64Array(re * 3), Ut = new Float64Array(re);
|
|
1095
|
+
function Ha(e = performance.now()) {
|
|
1096
|
+
if (e === Jn) return;
|
|
1097
|
+
Jn = e, h.selected !== Hn && (Hn = h.selected, Ge = !0);
|
|
1075
1098
|
const t = h.instances.size;
|
|
1076
|
-
t !==
|
|
1099
|
+
t !== jn && (!z.grouped || t < Js + 4) && (Ge = !0), jn = t, (Ge || e - Zn > za) && (Ge = !1, Zn = e, Ua(e)), z.grouped && Za();
|
|
1077
1100
|
}
|
|
1078
|
-
|
|
1079
|
-
const
|
|
1080
|
-
function
|
|
1081
|
-
return
|
|
1101
|
+
zt.fadeMs = (e) => z.crowded ? de.has(e.run) || !z.grouped ? Pa : Ia : Vs;
|
|
1102
|
+
const Sc = (e) => e === "graph_scout" || e === "records_scout" || e === "data_scout", et = (e, t) => dn(e, t) - 0.5, ja = (e) => e === 0 ? 0 : e % 2 ? (e + 1) / 2 : -e / 2, ue = { preset: Us, graphNatural: 1, graphRadius: 2.6, peripheryGap: 3.6 }, js = { planner: -1, researcher: 0, writer: 1, graph_scout: 0, records_scout: 0, data_scout: 0 };
|
|
1103
|
+
function Oc(e) {
|
|
1104
|
+
return js[e] * ue.preset.local.topGap * C.spread;
|
|
1082
1105
|
}
|
|
1083
|
-
const
|
|
1084
|
-
let
|
|
1085
|
-
const
|
|
1086
|
-
function
|
|
1106
|
+
const Rt = new y.Vector3(), Vt = new y.Vector3(), Zt = new y.Vector3(), gt = { a: 0, b: 0, angle: 0 }, tt = { a: 0, b: 0 }, Re = { n: 0, aspect: 1.6, hu: 2, hv: 2, hw: 2, hh: 2 }, Ve = [];
|
|
1107
|
+
let Jt = -1;
|
|
1108
|
+
const Xa = (e, t) => 1 - Math.exp(-e / t);
|
|
1109
|
+
function Ka(e, t, n) {
|
|
1087
1110
|
let s = (t - e) % (Math.PI * 2);
|
|
1088
1111
|
return s > Math.PI && (s -= Math.PI * 2), s < -Math.PI && (s += Math.PI * 2), e + s * n;
|
|
1089
1112
|
}
|
|
1090
|
-
function
|
|
1113
|
+
function Xs(e) {
|
|
1091
1114
|
const t = h.runs.get(e);
|
|
1092
1115
|
return {
|
|
1093
|
-
uid:
|
|
1116
|
+
uid: kt(),
|
|
1094
1117
|
id: e,
|
|
1095
1118
|
run: t,
|
|
1096
1119
|
index: 0,
|
|
@@ -1116,7 +1139,7 @@ function Zs(e) {
|
|
|
1116
1139
|
v1: 0
|
|
1117
1140
|
};
|
|
1118
1141
|
}
|
|
1119
|
-
function
|
|
1142
|
+
function Qn(e) {
|
|
1120
1143
|
let t = 0;
|
|
1121
1144
|
for (let n = !0; n; ) {
|
|
1122
1145
|
n = !1;
|
|
@@ -1128,13 +1151,13 @@ function Kn(e) {
|
|
|
1128
1151
|
}
|
|
1129
1152
|
return t;
|
|
1130
1153
|
}
|
|
1131
|
-
function
|
|
1154
|
+
function Qa(e) {
|
|
1132
1155
|
let t = g.runs.get(e.run);
|
|
1133
|
-
t || (t =
|
|
1156
|
+
t || (t = Xs(e.run), g.runs.set(e.run, t), g.runsVersion++);
|
|
1134
1157
|
const n = e.parent ? g.agents.get(e.parent) : void 0, s = e.subagent ? n ? n.depth + 1 : 1 : 0;
|
|
1135
|
-
let
|
|
1136
|
-
return s === 0 ?
|
|
1137
|
-
uid:
|
|
1158
|
+
let a;
|
|
1159
|
+
return s === 0 ? a = Qn((r) => r.depth === 0 && r.inst.run === e.run && r.inst.type === e.type) : a = Qn((r) => r.depth > 0 && r.inst.parent === e.parent), n && s > 0 && (n.kidsMax = Math.max(n.kidsMax, a + 1)), {
|
|
1160
|
+
uid: kt(),
|
|
1138
1161
|
id: e.id,
|
|
1139
1162
|
inst: e,
|
|
1140
1163
|
run: t,
|
|
@@ -1145,80 +1168,80 @@ function La(e) {
|
|
|
1145
1168
|
target: new y.Vector3(),
|
|
1146
1169
|
pos: new y.Vector3(),
|
|
1147
1170
|
live: new y.Vector3(),
|
|
1148
|
-
scale:
|
|
1171
|
+
scale: zs(e) * C.scale,
|
|
1149
1172
|
depth: s,
|
|
1150
|
-
sib:
|
|
1173
|
+
sib: a,
|
|
1151
1174
|
sibs: 1,
|
|
1152
1175
|
kidsMax: 0,
|
|
1153
1176
|
fresh: !0,
|
|
1154
1177
|
dim: un(e) ? 1 : 0
|
|
1155
1178
|
};
|
|
1156
1179
|
}
|
|
1157
|
-
const
|
|
1158
|
-
function
|
|
1180
|
+
const Ya = 0.6, _a = 16;
|
|
1181
|
+
function $a() {
|
|
1159
1182
|
let e = 0;
|
|
1160
1183
|
for (const n of h.instances.values()) {
|
|
1161
|
-
if (g.agents.has(n.id) || n.exitAt || !
|
|
1162
|
-
if (e >=
|
|
1184
|
+
if (g.agents.has(n.id) || n.exitAt || !Bt(n)) continue;
|
|
1185
|
+
if (e >= _a) break;
|
|
1163
1186
|
const s = n.parent ? h.instances.get(n.parent) : void 0;
|
|
1164
|
-
s && !s.exitAt && !g.agents.has(s.id) &&
|
|
1187
|
+
s && !s.exitAt && !g.agents.has(s.id) && Bt(s) || (g.agents.set(n.id, Qa(n)), g.agentsVersion++, e++);
|
|
1165
1188
|
}
|
|
1166
1189
|
for (const [n, s] of g.agents)
|
|
1167
|
-
(!h.instances.has(n) || !
|
|
1190
|
+
(!h.instances.has(n) || !Bt(s.inst)) && (g.agents.delete(n), g.agentsVersion++);
|
|
1168
1191
|
for (const n of g.runs.values()) n.members = 0;
|
|
1169
1192
|
for (const n of g.agents.values()) n.run.members++;
|
|
1170
1193
|
for (const n of h.runs.values())
|
|
1171
|
-
g.runs.has(n.id) || n.endedAt || !
|
|
1194
|
+
g.runs.has(n.id) || n.endedAt || !Xn(n.id) || (g.runs.set(n.id, Xs(n.id)), g.runsVersion++);
|
|
1172
1195
|
for (const [n, s] of g.runs) {
|
|
1173
|
-
const
|
|
1174
|
-
|
|
1196
|
+
const a = h.runs.get(n);
|
|
1197
|
+
a && !s.run && (s.run = a, s.color = a.color), !(s.members > 0) && (a && !a.endedAt && Xn(n) || (g.runs.delete(n), g.runsVersion++));
|
|
1175
1198
|
}
|
|
1176
1199
|
const t = performance.now();
|
|
1177
1200
|
for (const n of h.mcpServers.values()) {
|
|
1178
1201
|
let s = g.mcp.get(n.name);
|
|
1179
|
-
const
|
|
1180
|
-
if (s && (s.wanted =
|
|
1202
|
+
const a = Ur(n, t);
|
|
1203
|
+
if (s && (s.wanted = a), !(!a && !s) && (s || (s = { uid: kt(), name: n.name, srv: n, out: new y.Vector3(1, 0, 0), target: new y.Vector3(), pos: new y.Vector3(), backends: /* @__PURE__ */ new Map(), fresh: !0, wanted: !0, mix: 0 }, g.mcp.set(n.name, s), g.mcpVersion++), s.backends.size !== n.resources.size)) {
|
|
1181
1204
|
for (const r of n.resources.values())
|
|
1182
|
-
s.backends.has(r.name) || s.backends.set(r.name, { uid:
|
|
1205
|
+
s.backends.has(r.name) || s.backends.set(r.name, { uid: kt(), res: r, k: 0, n: 0, target: new y.Vector3(), pos: new y.Vector3(), fresh: !0, mix: 0 });
|
|
1183
1206
|
g.mcpVersion++;
|
|
1184
1207
|
}
|
|
1185
1208
|
}
|
|
1186
1209
|
}
|
|
1187
|
-
let
|
|
1188
|
-
function
|
|
1189
|
-
|
|
1210
|
+
let Yn = -1;
|
|
1211
|
+
function eo() {
|
|
1212
|
+
Yn === g.runsVersion && g.runOrder.length === g.runs.size || (Yn = g.runsVersion, g.runOrder = [...g.runs.values()].sort((e, t) => {
|
|
1190
1213
|
var n, s;
|
|
1191
1214
|
return (((n = e.run) == null ? void 0 : n.startedAt) ?? 0) - (((s = t.run) == null ? void 0 : s.startedAt) ?? 0) || (e.id < t.id ? -1 : 1);
|
|
1192
1215
|
}));
|
|
1193
1216
|
}
|
|
1194
|
-
function
|
|
1195
|
-
const t =
|
|
1217
|
+
function to(e) {
|
|
1218
|
+
const t = ue.preset.local, n = C.spread, s = e.inst;
|
|
1196
1219
|
if (e.depth === 0) {
|
|
1197
|
-
let l =
|
|
1198
|
-
e.sib && (l += (e.sib % 2 ? 1 : -1) * t.topGap * 0.5,
|
|
1220
|
+
let l = js[s.type] * t.topGap, u = 0;
|
|
1221
|
+
e.sib && (l += (e.sib % 2 ? 1 : -1) * t.topGap * 0.5, u -= Math.ceil(e.sib / 2) * t.fanLen * 0.55), e.u = (l + et(e.id, 31) * 0.5) * n, e.v = (u + et(e.id, 32) * 0.4) * n;
|
|
1199
1222
|
return;
|
|
1200
1223
|
}
|
|
1201
|
-
const
|
|
1202
|
-
if (!
|
|
1203
|
-
e.sibs = Math.max(1,
|
|
1204
|
-
const r = e.depth > 1 ? 0.75 : 1,
|
|
1224
|
+
const a = s.parent ? g.agents.get(s.parent) : void 0;
|
|
1225
|
+
if (!a) return;
|
|
1226
|
+
e.sibs = Math.max(1, a.kidsMax);
|
|
1227
|
+
const r = e.depth > 1 ? 0.75 : 1, i = (t.subShift ?? 0) * r;
|
|
1205
1228
|
if (t.fan === "stack")
|
|
1206
|
-
e.u =
|
|
1229
|
+
e.u = a.u + (i + ja(e.sib) * 0.35 + et(e.id, 31) * 0.4) * n, e.v = a.v + (t.fanLen + e.sib * t.stackGap) * r * n;
|
|
1207
1230
|
else {
|
|
1208
1231
|
const l = e.sib - (e.sibs - 1) / 2;
|
|
1209
|
-
e.u =
|
|
1232
|
+
e.u = a.u + (i + l * t.subGap * r + et(e.id, 31) * 0.45) * n, e.v = a.v + (t.fanLen * r + Math.abs(l) * 0.3 + et(e.id, 32) * 0.45) * n;
|
|
1210
1233
|
}
|
|
1211
1234
|
}
|
|
1212
|
-
function
|
|
1235
|
+
function no() {
|
|
1213
1236
|
var n;
|
|
1214
|
-
for (let s = 0; s < 6; s++) for (const
|
|
1215
|
-
const e =
|
|
1237
|
+
for (let s = 0; s < 6; s++) for (const a of g.agents.values()) (a.depth === s || s === 5 && a.depth >= 5) && to(a);
|
|
1238
|
+
const e = ue.preset.local.pad;
|
|
1216
1239
|
for (const s of g.runs.values()) s.u0 = 1 / 0;
|
|
1217
1240
|
for (const s of g.agents.values()) {
|
|
1218
|
-
const
|
|
1219
|
-
|
|
1241
|
+
const a = s.run, r = e * Math.max(0.7, s.scale);
|
|
1242
|
+
a.u0 === 1 / 0 ? (a.u0 = s.u - r, a.u1 = s.u + r, a.v0 = s.v - r, a.v1 = s.v + r) : (a.u0 = Math.min(a.u0, s.u - r), a.u1 = Math.max(a.u1, s.u + r), a.v0 = Math.min(a.v0, s.v - r), a.v1 = Math.max(a.v1, s.v + r));
|
|
1220
1243
|
}
|
|
1221
|
-
const t =
|
|
1244
|
+
const t = ue.preset.local.topGap * C.spread;
|
|
1222
1245
|
for (const s of g.runs.values())
|
|
1223
1246
|
(n = s.run) != null && n.hasSteps && s.u0 !== 1 / 0 && (s.u0 = Math.min(s.u0, -t - e), s.u1 = Math.max(s.u1, t + e));
|
|
1224
1247
|
for (const s of g.runs.values()) {
|
|
@@ -1230,159 +1253,159 @@ function ja() {
|
|
|
1230
1253
|
}
|
|
1231
1254
|
}
|
|
1232
1255
|
function An(e, t, n) {
|
|
1233
|
-
const s = Math.cos(e),
|
|
1234
|
-
ce(s,
|
|
1235
|
-
let r = -
|
|
1236
|
-
r < -1e-3 && (r = -r,
|
|
1256
|
+
const s = Math.cos(e), a = Math.sin(e);
|
|
1257
|
+
ce(s, a, t);
|
|
1258
|
+
let r = -a, i = s;
|
|
1259
|
+
r < -1e-3 && (r = -r, i = -i), ce(r, i, n);
|
|
1237
1260
|
}
|
|
1238
|
-
function
|
|
1239
|
-
return An(e.targetAngle,
|
|
1261
|
+
function so(e, t, n, s) {
|
|
1262
|
+
return An(e.targetAngle, Rt, Vt), s.copy(e.target).addScaledVector(Vt, t - e.tcu).addScaledVector(Rt, n - e.tcv);
|
|
1240
1263
|
}
|
|
1241
|
-
const
|
|
1242
|
-
function
|
|
1243
|
-
const e =
|
|
1264
|
+
const rn = (e) => e.x, nt = (e) => g.plane === "xy" ? e.y : -e.z;
|
|
1265
|
+
function ro() {
|
|
1266
|
+
const e = ue.preset, t = g.runOrder;
|
|
1244
1267
|
let n = 0, s = 0;
|
|
1245
|
-
for (const
|
|
1246
|
-
n = Math.max(n,
|
|
1268
|
+
for (const a of t)
|
|
1269
|
+
n = Math.max(n, a.hu), s = Math.max(s, a.hv);
|
|
1247
1270
|
Re.n = t.length, Re.aspect = C.aspect * (e.periphery === "sides" ? 0.72 : 1), Re.hu = n, Re.hv = s;
|
|
1248
|
-
for (let
|
|
1249
|
-
const r = t[
|
|
1250
|
-
r.index =
|
|
1271
|
+
for (let a = 0; a < t.length; a++) {
|
|
1272
|
+
const r = t[a];
|
|
1273
|
+
r.index = a, r.count = t.length, e.run(a, Re, gt), ce(gt.a, gt.b, r.target), r.targetAngle = gt.angle;
|
|
1251
1274
|
}
|
|
1252
1275
|
}
|
|
1253
|
-
let
|
|
1254
|
-
function
|
|
1255
|
-
const e =
|
|
1256
|
-
Math.abs(t -
|
|
1276
|
+
let wt = 1;
|
|
1277
|
+
function ao() {
|
|
1278
|
+
const e = ue.preset, t = Math.min(1.7, 1 / Math.max(0.35, C.foreshorten));
|
|
1279
|
+
Math.abs(t - wt) / wt > 0.1 && (wt = t);
|
|
1257
1280
|
let n = 0, s = 0;
|
|
1258
1281
|
for (const c of g.agents.values()) {
|
|
1259
|
-
const M =
|
|
1260
|
-
n = Math.max(n, Math.abs(
|
|
1282
|
+
const M = ue.preset.local.pad * Math.max(0.7, c.scale);
|
|
1283
|
+
n = Math.max(n, Math.abs(rn(c.target)) + M), s = Math.max(s, Math.abs(nt(c.target)) + M);
|
|
1261
1284
|
}
|
|
1262
1285
|
for (const c of g.runs.values())
|
|
1263
|
-
c.members || (n = Math.max(n, Math.abs(
|
|
1286
|
+
c.members || (n = Math.max(n, Math.abs(rn(c.target)) + c.hu), s = Math.max(s, Math.abs(nt(c.target)) + c.hv));
|
|
1264
1287
|
if (Re.hw = n, Re.hh = s, Ve.length = 0, z.grouped)
|
|
1265
|
-
for (let c = 0; c < re; c++)
|
|
1288
|
+
for (let c = 0; c < re; c++) sn(c).active && Ve.push(c);
|
|
1266
1289
|
for (let c = 0; c < Ve.length; c++) {
|
|
1267
1290
|
const M = Ve[c];
|
|
1268
|
-
e.cluster(M, c, Ve.length, Re,
|
|
1291
|
+
e.cluster(M, c, Ve.length, Re, tt), ce(tt.a, tt.b, g.clusterTarget[M]), n = Math.max(n, Math.abs(tt.a) + 2.4), s = Math.max(s, Math.abs(tt.b) + 2.4);
|
|
1269
1292
|
}
|
|
1270
1293
|
e.round && (n = s = Math.max(n, s));
|
|
1271
|
-
const
|
|
1272
|
-
(Math.abs(n -
|
|
1273
|
-
const r =
|
|
1274
|
-
|
|
1275
|
-
const f =
|
|
1294
|
+
const a = g.core;
|
|
1295
|
+
(Math.abs(n - a.thw) / Math.max(1, a.thw) > 0.08 || n < a.thw * 0.75) && (a.thw = n), (Math.abs(s - a.thh) / Math.max(1, a.thh) > 0.08 || s < a.thh * 0.75) && (a.thh = s), n = Math.max(2.5, a.thw), s = Math.max(2.5, a.thh);
|
|
1296
|
+
const r = ue.peripheryGap, i = g.graph, l = g.graphWanted && Pt(), u = ue.graphRadius;
|
|
1297
|
+
i.radius = u;
|
|
1298
|
+
const f = oo;
|
|
1276
1299
|
f.length = 0;
|
|
1277
1300
|
for (const c of g.mcp.values()) c.wanted && f.push(c);
|
|
1278
|
-
if (f.sort(
|
|
1301
|
+
if (f.sort(io), e.periphery === "rim") {
|
|
1279
1302
|
const c = Math.max(n, s) + r;
|
|
1280
|
-
l && ce(-(c +
|
|
1281
|
-
const M = l ?
|
|
1303
|
+
l && ce(-(c + u), 0, i.target);
|
|
1304
|
+
const M = l ? co : lo;
|
|
1282
1305
|
for (let o = 0; o < f.length; o++) {
|
|
1283
|
-
const
|
|
1284
|
-
ce(Math.cos(A), Math.sin(A),
|
|
1285
|
-
const b =
|
|
1306
|
+
const d = f[o], S = Math.floor(o / M.length), A = M[o % M.length] + S * 0.18, m = c + 1 + S * 2.6;
|
|
1307
|
+
ce(Math.cos(A), Math.sin(A), d.out), ce(Math.cos(A) * m, Math.sin(A) * m, d.target);
|
|
1308
|
+
const b = d.backends.size;
|
|
1286
1309
|
let v = 0;
|
|
1287
|
-
for (const
|
|
1288
|
-
|
|
1289
|
-
const T = m + 3.2,
|
|
1290
|
-
ce(Math.cos(
|
|
1310
|
+
for (const W of d.backends.values()) {
|
|
1311
|
+
W.k = v, W.n = b;
|
|
1312
|
+
const T = m + 3.2, R = A + (v - (b - 1) / 2) * (2.1 / T);
|
|
1313
|
+
ce(Math.cos(R) * T, Math.sin(R) * T, W.target), v++;
|
|
1291
1314
|
}
|
|
1292
1315
|
}
|
|
1293
1316
|
} else {
|
|
1294
1317
|
const c = C.aspect >= 0.85;
|
|
1295
|
-
l && (c ? ce(-(n + r +
|
|
1318
|
+
l && (c ? ce(-(n + r + u), 0, i.target) : ce(0, -(s + r + u), i.target)), Ht.length = 0, jt.length = 0;
|
|
1296
1319
|
for (let M = 0; M < f.length; M++)
|
|
1297
|
-
((l ? M < Math.max(3, Math.ceil(f.length * 0.6)) : M % 2 === 0) ?
|
|
1298
|
-
|
|
1320
|
+
((l ? M < Math.max(3, Math.ceil(f.length * 0.6)) : M % 2 === 0) ? jt : Ht).push(f[M]);
|
|
1321
|
+
_n(jt, 1, n + r, 0), _n(Ht, -1, n + r, l && c ? u * 2 + 3.5 : 0);
|
|
1299
1322
|
}
|
|
1300
|
-
l &&
|
|
1323
|
+
l && i.target.lengthSq() > 1e-6 && i.out.copy(i.target).normalize();
|
|
1301
1324
|
}
|
|
1302
|
-
const
|
|
1303
|
-
function
|
|
1325
|
+
const oo = [], Ht = [], jt = [], io = (e, t) => e.srv.slot - t.srv.slot, Ks = Math.PI / 180, co = [0, 35, -35, 70, -70, 110, -110, 145, -145].map((e) => e * Ks), lo = [0, 180, 35, -145, -35, 145, 70, -110, -70, 110].map((e) => e * Ks);
|
|
1326
|
+
function _n(e, t, n, s) {
|
|
1304
1327
|
if (!e.length) return;
|
|
1305
|
-
const
|
|
1328
|
+
const a = wt, r = (u) => Math.max(3, u.backends.size * 2.1 + 0.6) * a, i = s > 0 ? Math.ceil(e.length / 2) : e.length;
|
|
1306
1329
|
let l = 0;
|
|
1307
1330
|
if (s > 0) {
|
|
1308
1331
|
l = s / 2;
|
|
1309
|
-
for (let
|
|
1310
|
-
} else for (const
|
|
1311
|
-
for (let
|
|
1312
|
-
s > 0 &&
|
|
1313
|
-
const f = e[
|
|
1332
|
+
for (let u = 0; u < i; u++) l += r(e[u]);
|
|
1333
|
+
} else for (const u of e) l += r(u) / 2;
|
|
1334
|
+
for (let u = 0; u < e.length; u++) {
|
|
1335
|
+
s > 0 && u === i && (l = -s / 2);
|
|
1336
|
+
const f = e[u], c = r(f), M = l - c / 2;
|
|
1314
1337
|
ce(t, 0, f.out), ce(t * (n + 1), M, f.target);
|
|
1315
1338
|
const o = f.backends.size;
|
|
1316
|
-
let
|
|
1339
|
+
let d = 0;
|
|
1317
1340
|
for (const S of f.backends.values())
|
|
1318
|
-
S.k =
|
|
1341
|
+
S.k = d, S.n = o, ce(t * (n + 1 + 3.6), M + ((o - 1) / 2 - d) * 2.1 * a, S.target), d++;
|
|
1319
1342
|
l -= c;
|
|
1320
1343
|
}
|
|
1321
1344
|
}
|
|
1322
|
-
function
|
|
1323
|
-
const t =
|
|
1324
|
-
if (
|
|
1345
|
+
function uo(e = performance.now()) {
|
|
1346
|
+
const t = Jt < 0 ? 0.016 : Math.min(0.1, (e - Jt) / 1e3);
|
|
1347
|
+
if (Jt = e, !g.clusterPos.length)
|
|
1325
1348
|
for (let o = 0; o < re; o++)
|
|
1326
1349
|
g.clusterPos.push(new y.Vector3()), g.clusterTarget.push(new y.Vector3()), g.clusterFresh.push(!0);
|
|
1327
|
-
|
|
1350
|
+
$a(), eo();
|
|
1328
1351
|
let n = 0, s = 0;
|
|
1329
1352
|
for (const o of g.agents.values())
|
|
1330
1353
|
n += o.inst.subagent ? 0.5 : 1, o.inst.exitAt || s++;
|
|
1331
|
-
let
|
|
1354
|
+
let a = 0;
|
|
1332
1355
|
if (z.grouped)
|
|
1333
|
-
for (let o = 0; o < re; o++)
|
|
1356
|
+
for (let o = 0; o < re; o++) sn(o).active && a++;
|
|
1334
1357
|
let r = 0;
|
|
1335
1358
|
for (const o of g.mcp.values()) o.wanted && r++;
|
|
1336
|
-
|
|
1337
|
-
for (const o of g.agents.values()) o.scale =
|
|
1338
|
-
|
|
1339
|
-
for (const o of g.agents.values())
|
|
1340
|
-
|
|
1341
|
-
const
|
|
1359
|
+
oa(e, n + a * 1.5, g.agents.size + s * 1e3 + a * 1e6 + g.runs.size * 1e8 + r * 1e10 + (g.graphWanted ? 1e13 : 0));
|
|
1360
|
+
for (const o of g.agents.values()) o.scale = zs(o.inst) * C.scale;
|
|
1361
|
+
no(), ro();
|
|
1362
|
+
for (const o of g.agents.values()) so(o.run, o.u, o.v, o.target);
|
|
1363
|
+
ao();
|
|
1364
|
+
const i = Xa(t, 0.2);
|
|
1342
1365
|
for (const o of g.runs.values())
|
|
1343
|
-
o.fresh ? (o.origin.copy(o.target), o.angle = o.targetAngle, o.cu = o.tcu, o.cv = o.tcv, o.fresh = !1) : (o.origin.lerp(o.target,
|
|
1366
|
+
o.fresh ? (o.origin.copy(o.target), o.angle = o.targetAngle, o.cu = o.tcu, o.cv = o.tcv, o.fresh = !1) : (o.origin.lerp(o.target, i), o.angle = Ka(o.angle, o.targetAngle, i), o.cu += (o.tcu - o.cu) * i, o.cv += (o.tcv - o.cv) * i), An(o.angle, o.axis, o.side);
|
|
1344
1367
|
for (const o of g.agents.values()) {
|
|
1345
|
-
o.fresh ? (o.eu = o.u, o.ev = o.v, o.fresh = !1) : (o.eu += (o.u - o.eu) *
|
|
1346
|
-
const
|
|
1347
|
-
o.pos.copy(
|
|
1368
|
+
o.fresh ? (o.eu = o.u, o.ev = o.v, o.fresh = !1) : (o.eu += (o.u - o.eu) * i, o.ev += (o.v - o.ev) * i);
|
|
1369
|
+
const d = o.run;
|
|
1370
|
+
o.pos.copy(d.origin).addScaledVector(d.side, o.eu - d.cu).addScaledVector(d.axis, o.ev - d.cv), o.live.copy(o.pos);
|
|
1348
1371
|
const S = un(o.inst) ? 1 : 0;
|
|
1349
|
-
o.dim =
|
|
1372
|
+
o.dim = st ? S : o.dim + (S - o.dim) * Math.min(1, t / Ya);
|
|
1350
1373
|
}
|
|
1351
1374
|
for (const o of Ve)
|
|
1352
|
-
g.clusterFresh[o] ? (g.clusterPos[o].copy(g.clusterTarget[o]), g.clusterFresh[o] = !1) : g.clusterPos[o].lerp(g.clusterTarget[o],
|
|
1353
|
-
for (let o = 0; o < re; o++)
|
|
1375
|
+
g.clusterFresh[o] ? (g.clusterPos[o].copy(g.clusterTarget[o]), g.clusterFresh[o] = !1) : g.clusterPos[o].lerp(g.clusterTarget[o], i);
|
|
1376
|
+
for (let o = 0; o < re; o++) sn(o).active || (g.clusterFresh[o] = !0);
|
|
1354
1377
|
const l = g.core;
|
|
1355
|
-
l.hw += (Math.max(2.5, l.thw) - l.hw) *
|
|
1356
|
-
const
|
|
1378
|
+
l.hw += (Math.max(2.5, l.thw) - l.hw) * i, l.hh += (Math.max(2.5, l.thh) - l.hh) * i, l.r = Math.max(l.hw, l.hh);
|
|
1379
|
+
const u = Math.min(1, t / fo);
|
|
1357
1380
|
for (const o of g.mcp.values()) {
|
|
1358
|
-
o.fresh ? (o.pos.copy(o.target), o.fresh = !1) : o.pos.lerp(o.target,
|
|
1359
|
-
for (const
|
|
1360
|
-
|
|
1381
|
+
o.fresh ? (o.pos.copy(o.target), o.fresh = !1) : o.pos.lerp(o.target, i), o.mix = o.wanted ? Math.min(1, o.mix + u) : Math.max(0, o.mix - u);
|
|
1382
|
+
for (const d of o.backends.values())
|
|
1383
|
+
d.fresh ? (d.pos.copy(d.target), d.fresh = !1) : d.pos.lerp(d.target, i), d.mix = o.wanted ? Math.min(1, d.mix + u) : Math.min(d.mix, o.mix);
|
|
1361
1384
|
!o.wanted && o.mix <= 0 && (g.mcp.delete(o.name), g.mcpVersion++);
|
|
1362
1385
|
}
|
|
1363
|
-
const f = g.graph, c = g.graphWanted &&
|
|
1364
|
-
f.mix += (M - f.mix) * (c ? 1 :
|
|
1386
|
+
const f = g.graph, c = g.graphWanted && Pt(e), M = c ? Jr(e) : 0;
|
|
1387
|
+
f.mix += (M - f.mix) * (c ? 1 : i), f.fresh || f.mix < 0.01 ? (f.pos.copy(f.target), f.fresh = !c) : f.pos.lerp(f.target, i), f.natural = ue.graphNatural, f.scale = f.radius / Math.max(1e-3, f.natural) * Math.max(1e-3, f.mix);
|
|
1365
1388
|
}
|
|
1366
|
-
const
|
|
1367
|
-
function
|
|
1389
|
+
const fo = 0.9;
|
|
1390
|
+
function ho(e, t, n = 0) {
|
|
1368
1391
|
const s = g.plane === "xz" && n > 0;
|
|
1369
1392
|
for (const r of g.agents.values())
|
|
1370
|
-
e(r.target, t * r.scale), s && e(
|
|
1393
|
+
e(r.target, t * r.scale), s && e(Zt.copy(r.target).setY(r.target.y + n * r.scale), t * r.scale * 0.6);
|
|
1371
1394
|
for (const r of Ve) e(g.clusterTarget[r], 2.4);
|
|
1372
1395
|
for (const r of g.runs.values()) {
|
|
1373
|
-
r.members || e(r.target, r.hu), An(r.targetAngle,
|
|
1374
|
-
const
|
|
1375
|
-
ce(
|
|
1396
|
+
r.members || e(r.target, r.hu), An(r.targetAngle, Rt, Vt);
|
|
1397
|
+
const i = Math.abs(nt(Vt)) * r.hu + Math.abs(nt(Rt)) * r.hv;
|
|
1398
|
+
ce(rn(r.target), nt(r.target) + i + 1.4, Zt), e(Zt, 1.2);
|
|
1376
1399
|
}
|
|
1377
1400
|
for (const r of g.mcp.values())
|
|
1378
1401
|
if (r.wanted) {
|
|
1379
1402
|
e(r.target, 1.7);
|
|
1380
|
-
for (const
|
|
1403
|
+
for (const i of r.backends.values()) e(i.target, 1.4);
|
|
1381
1404
|
}
|
|
1382
|
-
const
|
|
1383
|
-
g.graphWanted &&
|
|
1405
|
+
const a = g.graph;
|
|
1406
|
+
g.graphWanted && Pt() && e(a.target, a.radius + 0.8);
|
|
1384
1407
|
}
|
|
1385
|
-
const hc = () => Ve, ro = "data:font/woff;base64,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", ao = "data:font/woff;base64,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", oo = { kitNoDim: !0 }, _n = { sans: ro, mono: ao }, $n = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~·›…—–ו", io = [
|
|
1408
|
+
const Ec = () => Ve, po = "data:font/woff;base64,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", mo = "data:font/woff;base64,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", go = { kitNoDim: !0 }, $n = { sans: po, mono: mo }, es = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~·›…—–ו", Ao = [
|
|
1386
1409
|
[32, 126],
|
|
1387
1410
|
[160, 255],
|
|
1388
1411
|
[305, 305],
|
|
@@ -1398,35 +1421,35 @@ const hc = () => Ve, ro = "data:font/woff;base64,d09GRgABAAAAAHo0AA8AAAABCagAAQA
|
|
|
1398
1421
|
[8595, 8595],
|
|
1399
1422
|
[8722, 8722],
|
|
1400
1423
|
[8725, 8725]
|
|
1401
|
-
],
|
|
1402
|
-
for (const [t, n] of
|
|
1424
|
+
], bo = (e) => {
|
|
1425
|
+
for (const [t, n] of Ao) if (e >= t && e <= n) return !0;
|
|
1403
1426
|
return !1;
|
|
1404
|
-
},
|
|
1405
|
-
function
|
|
1427
|
+
}, vo = { "▶": "›", "▸": "›", "→": "›", "⟶": "›", "←": "‹", "✓": "·", "✔": "·", "✕": "×", "✗": "×", "✖": "×", "⋯": "…" };
|
|
1428
|
+
function Qs(e) {
|
|
1406
1429
|
let t = "";
|
|
1407
1430
|
for (const n of e) {
|
|
1408
|
-
const s =
|
|
1409
|
-
s !== void 0 ? t += s :
|
|
1431
|
+
const s = vo[n];
|
|
1432
|
+
s !== void 0 ? t += s : bo(n.codePointAt(0)) && (t += n);
|
|
1410
1433
|
}
|
|
1411
1434
|
return t;
|
|
1412
1435
|
}
|
|
1413
|
-
const
|
|
1414
|
-
function
|
|
1415
|
-
const t =
|
|
1436
|
+
const At = /* @__PURE__ */ new Map();
|
|
1437
|
+
function Mo(e) {
|
|
1438
|
+
const t = At.get(e);
|
|
1416
1439
|
if (t !== void 0) return t;
|
|
1417
|
-
const n =
|
|
1418
|
-
return
|
|
1440
|
+
const n = Qs(e).replace(/\s+/g, " ").replace(/^[\s·›]+|[\s·›]+$/g, "");
|
|
1441
|
+
return At.size > 2e3 && At.clear(), At.set(e, n), n;
|
|
1419
1442
|
}
|
|
1420
|
-
const
|
|
1421
|
-
},
|
|
1443
|
+
const ts = (e, t) => t > 0 && e.length > t ? e.slice(0, Math.max(1, t - 1)).trimEnd() + "…" : e, ns = new y.PlaneGeometry(1, 1), bt = () => {
|
|
1444
|
+
}, ss = {
|
|
1422
1445
|
top: new y.MeshBasicMaterial({ color: 16777215, transparent: !0, depthTest: !1, depthWrite: !1, toneMapped: !1, fog: !1, side: y.DoubleSide }),
|
|
1423
1446
|
depth: new y.MeshBasicMaterial({ color: 16777215, transparent: !0, depthTest: !0, depthWrite: !1, toneMapped: !1, fog: !1, side: y.DoubleSide })
|
|
1424
|
-
},
|
|
1447
|
+
}, yo = (
|
|
1425
1448
|
/* glsl */
|
|
1426
1449
|
`
|
|
1427
1450
|
varying vec2 vUv;
|
|
1428
1451
|
void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }`
|
|
1429
|
-
),
|
|
1452
|
+
), xo = (
|
|
1430
1453
|
/* glsl */
|
|
1431
1454
|
`
|
|
1432
1455
|
uniform vec2 uSize; uniform float uRadius; uniform float uBorder; uniform float uBar; uniform float uUnder;
|
|
@@ -1447,49 +1470,54 @@ void main() {
|
|
|
1447
1470
|
if (a < 0.002) discard;
|
|
1448
1471
|
gl_FragColor = vec4(col, a);
|
|
1449
1472
|
}`
|
|
1450
|
-
),
|
|
1473
|
+
), rs = {
|
|
1451
1474
|
// border / bar / under in × font size; round in × plate height (0.5 = pill)
|
|
1452
1475
|
pill: { fillA: 0.52, edgeA: 0.6, border: 0.055, bar: 0, under: 0, round: 0.5 },
|
|
1453
1476
|
box: { fillA: 0.62, edgeA: 0.55, border: 0.055, bar: 0, under: 0, round: 0.14 },
|
|
1454
1477
|
bar: { fillA: 0.66, edgeA: 0.95, border: 0, bar: 0.14, under: 0, round: 0.06 },
|
|
1455
1478
|
underline: { fillA: 0.52, edgeA: 0.8, border: 0, bar: 0, under: 0.07, round: 0.06 },
|
|
1456
1479
|
none: { fillA: 0, edgeA: 0, border: 0, bar: 0, under: 0, round: 0 }
|
|
1457
|
-
},
|
|
1458
|
-
function
|
|
1480
|
+
}, Ys = new y.Color("#03050b"), Xt = new y.Color("#eef2f8"), as = new y.Color("#94a3b8");
|
|
1481
|
+
function vt(e, t, n) {
|
|
1459
1482
|
if (e == null) return { text: "", ranges: null, key: "" };
|
|
1460
1483
|
if (typeof e == "string") {
|
|
1461
|
-
const
|
|
1462
|
-
return { text:
|
|
1484
|
+
const i = Mo(t ? e.toUpperCase() : e);
|
|
1485
|
+
return { text: i, ranges: null, key: i };
|
|
1463
1486
|
}
|
|
1464
|
-
let s = "",
|
|
1487
|
+
let s = "", a = "";
|
|
1465
1488
|
const r = {};
|
|
1466
|
-
for (const
|
|
1467
|
-
let l =
|
|
1489
|
+
for (const i of e) {
|
|
1490
|
+
let l = Qs(t ? i.text.toUpperCase() : i.text);
|
|
1468
1491
|
if (s || (l = l.trimStart()), !l) continue;
|
|
1469
|
-
const
|
|
1470
|
-
|
|
1492
|
+
const u = i.color != null ? n.set(i.color).getHex() : -1;
|
|
1493
|
+
u >= 0 && (r[s.length] = u), a += `${l}${u}`, s += l;
|
|
1471
1494
|
}
|
|
1472
|
-
return { text: s.trimEnd(), ranges: r, key:
|
|
1495
|
+
return { text: s.trimEnd(), ranges: r, key: a };
|
|
1473
1496
|
}
|
|
1474
|
-
function
|
|
1497
|
+
function Rc(e, t, n = ["working…", "done"]) {
|
|
1475
1498
|
const s = e.status !== "started";
|
|
1476
1499
|
if (!e.hasSteps) return [{ text: s ? e.status === "failed" ? n[2] ?? "failed" : n[1] : n[0], color: t.base }];
|
|
1477
|
-
const
|
|
1478
|
-
return
|
|
1479
|
-
|
|
1480
|
-
const
|
|
1481
|
-
|
|
1482
|
-
}), i;
|
|
1483
|
-
}
|
|
1484
|
-
const
|
|
1485
|
-
function
|
|
1486
|
-
const s =
|
|
1487
|
-
return /* @__PURE__ */ p(
|
|
1488
|
-
}
|
|
1489
|
-
function
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1500
|
+
const a = [{ text: "hatchet · ", color: t.base }], { shown: r, more: i } = Es(e);
|
|
1501
|
+
return r.forEach((l, u) => {
|
|
1502
|
+
u && a.push({ text: " › ", color: t.base });
|
|
1503
|
+
const f = e.steps[l];
|
|
1504
|
+
a.push({ text: l, color: f === "running" ? t.current : f === "done" ? t.done : f === "failed" ? "#ff5d5d" : t.queued ?? ko(t.base) });
|
|
1505
|
+
}), i && a.push({ text: ` +${i}`, color: t.base }), a;
|
|
1506
|
+
}
|
|
1507
|
+
const wo = new y.Color(), ko = (e) => "#" + wo.set(e).lerp(Ys, 0.45).getHexString();
|
|
1508
|
+
function Vc({ prefix: e = "", suffix: t = "", ...n }) {
|
|
1509
|
+
const s = Xe();
|
|
1510
|
+
return /* @__PURE__ */ p(It, { declutter: "resource", ...n, text: e + s.graphLabel + t });
|
|
1511
|
+
}
|
|
1512
|
+
function Cc({ run: e, slot: t, prefix: n = "", ...s }) {
|
|
1513
|
+
Xe();
|
|
1514
|
+
const a = Vr(e, t);
|
|
1515
|
+
return a ? /* @__PURE__ */ p(It, { ...s, text: n + a }) : null;
|
|
1516
|
+
}
|
|
1517
|
+
function It(e) {
|
|
1518
|
+
return /* @__PURE__ */ p(Mr, { fallback: null, children: /* @__PURE__ */ p(Oo, { ...e }) });
|
|
1519
|
+
}
|
|
1520
|
+
const So = {
|
|
1493
1521
|
color: "#818cf8",
|
|
1494
1522
|
size: 0.24,
|
|
1495
1523
|
opacity: 1,
|
|
@@ -1511,18 +1539,18 @@ const go = {
|
|
|
1511
1539
|
leader: !1,
|
|
1512
1540
|
fit: !1
|
|
1513
1541
|
};
|
|
1514
|
-
function
|
|
1515
|
-
var
|
|
1516
|
-
const t = { ...
|
|
1542
|
+
function Oo(e) {
|
|
1543
|
+
var W, T;
|
|
1544
|
+
const t = { ...So, ...Eo(e) }, n = B(t);
|
|
1517
1545
|
n.current = t;
|
|
1518
|
-
const s = B(null),
|
|
1546
|
+
const s = B(null), a = B(null), r = B(null), i = B(null), l = B(null), u = B(null), f = B(null), c = ne(
|
|
1519
1547
|
() => ({
|
|
1520
1548
|
target: t.opacity,
|
|
1521
1549
|
cur: t.opacity,
|
|
1522
1550
|
emph: !1,
|
|
1523
1551
|
accent: new y.Color(t.color),
|
|
1524
|
-
textCol: new y.Color(t.textColor ??
|
|
1525
|
-
subCol: new y.Color(t.secondaryColor ??
|
|
1552
|
+
textCol: new y.Color(t.textColor ?? Xt),
|
|
1553
|
+
subCol: new y.Color(t.secondaryColor ?? as),
|
|
1526
1554
|
mainColor: new y.Color(),
|
|
1527
1555
|
subColor: new y.Color(),
|
|
1528
1556
|
tmp: new y.Color(),
|
|
@@ -1549,8 +1577,8 @@ function Ao(e) {
|
|
|
1549
1577
|
), M = ne(
|
|
1550
1578
|
() => ({
|
|
1551
1579
|
plate: new y.ShaderMaterial({
|
|
1552
|
-
vertexShader:
|
|
1553
|
-
fragmentShader:
|
|
1580
|
+
vertexShader: yo,
|
|
1581
|
+
fragmentShader: xo,
|
|
1554
1582
|
transparent: !0,
|
|
1555
1583
|
depthWrite: !1,
|
|
1556
1584
|
toneMapped: !1,
|
|
@@ -1560,7 +1588,7 @@ function Ao(e) {
|
|
|
1560
1588
|
uBorder: { value: 0 },
|
|
1561
1589
|
uBar: { value: 0 },
|
|
1562
1590
|
uUnder: { value: 0 },
|
|
1563
|
-
uFill: { value:
|
|
1591
|
+
uFill: { value: Ys.clone() },
|
|
1564
1592
|
uFillA: { value: 0.5 },
|
|
1565
1593
|
uEdge: { value: new y.Color() },
|
|
1566
1594
|
uEdgeA: { value: 0.5 },
|
|
@@ -1573,154 +1601,154 @@ function Ao(e) {
|
|
|
1573
1601
|
);
|
|
1574
1602
|
$(() => () => (M.plate.dispose(), M.leader.dispose()), [M]), M.plate.depthTest = t.depthTest, M.leader.depthTest = t.depthTest;
|
|
1575
1603
|
const o = ne(() => {
|
|
1576
|
-
const
|
|
1604
|
+
const R = () => n.current.secondarySize ?? n.current.size * 0.78, P = () => {
|
|
1577
1605
|
const O = n.current;
|
|
1578
1606
|
return O.maxWidth > 0 ? Math.max(4, Math.floor(O.maxWidth / (O.size * (O.font === "mono" ? 0.62 : 0.56) * (1 + O.letterSpacing)))) : 0;
|
|
1579
1607
|
};
|
|
1580
1608
|
return { applyColors: () => {
|
|
1581
|
-
const O = n.current, x = M.plate.uniforms, D =
|
|
1582
|
-
x.uEdge.value.copy(c.accent).lerp(
|
|
1609
|
+
const O = n.current, x = M.plate.uniforms, D = rs[O.plate];
|
|
1610
|
+
x.uEdge.value.copy(c.accent).lerp(Xt, c.emph ? 0.3 : 0), x.uEdgeA.value = Math.min(1, D.edgeA * (c.emph ? 1.45 : 1)), x.uFillA.value = D.fillA, M.leader.color.copy(c.accent).multiplyScalar(0.85);
|
|
1583
1611
|
const F = O.glow * (c.emph ? 1.12 : 0.95);
|
|
1584
1612
|
c.mainColor.copy(c.textCol).multiplyScalar(F), c.subColor.copy(c.subCol).multiplyScalar(F);
|
|
1585
1613
|
}, layout: () => {
|
|
1586
|
-
var he,
|
|
1587
|
-
const O =
|
|
1588
|
-
if (!O || !
|
|
1589
|
-
const x = n.current, D = x.size, F = (he = O.textRenderInfo) == null ? void 0 : he.blockBounds,
|
|
1614
|
+
var he, Ke, Le, Mn, yn;
|
|
1615
|
+
const O = u.current;
|
|
1616
|
+
if (!O || !i.current || !r.current) return;
|
|
1617
|
+
const x = n.current, D = x.size, F = (he = O.textRenderInfo) == null ? void 0 : he.blockBounds, N = c.hasSub ? (Le = (Ke = f.current) == null ? void 0 : Ke.textRenderInfo) == null ? void 0 : Le.blockBounds : void 0, X = F && O.text ? F[2] - F[0] : 0, j = N ? N[2] - N[0] : 0, K = D * 1.16, L = rs[x.plate], k = L.bar * D, G = x.plate === "none", H = G ? 0 : D * 0.28, Q = ((Mn = x.offset) == null ? void 0 : Mn[0]) ?? 0, q = ((yn = x.offset) == null ? void 0 : yn[1]) ?? 0;
|
|
1590
1618
|
let Y = 0, ee = 0, ge = 0, ke = 0, ae = 0;
|
|
1591
1619
|
for (let Se = 0; Se < 2; Se++) {
|
|
1592
|
-
const
|
|
1593
|
-
Se === 0 ? (c.W =
|
|
1620
|
+
const lt = Se === 0 && c.hasSub, mr = G ? 0 : D * (x.plate === "pill" && !lt ? 0.6 : 0.5), xn = lt ? Math.max(X, j) : X, wn = lt ? R() * 1.2 : 0, kn = lt ? D * 0.1 : 0, Qe = xn + mr * 2 + k, Ye = K + kn + wn + H * 2, Sn = Q + (x.anchorX === "left" ? Qe / 2 : x.anchorX === "right" ? -Qe / 2 : 0), On = q + (x.anchorY === "bottom" ? Ye / 2 : x.anchorY === "top" ? -Ye / 2 : 0);
|
|
1621
|
+
Se === 0 ? (c.W = Qe, c.H = Ye, c.bx = Sn, c.by = On) : (c.W1 = c.hasSub ? Qe : 0, c.H1 = Ye, c.bx1 = Sn, c.by1 = On), Se === 0 == !(c.hasSub && c.subOff) && (Y = Qe, ee = Ye, ge = xn, ke = wn, ae = kn);
|
|
1594
1622
|
}
|
|
1595
1623
|
const ie = M.plate.uniforms;
|
|
1596
|
-
ie.uSize.value.set(Y, ee), ie.uRadius.value = Math.min(ee * L.round, ee * 0.5), ie.uBorder.value = L.border * D, ie.uBar.value = k, ie.uUnder.value = L.under * D,
|
|
1624
|
+
ie.uSize.value.set(Y, ee), ie.uRadius.value = Math.min(ee * L.round, ee * 0.5), ie.uBorder.value = L.border * D, ie.uBar.value = k, ie.uUnder.value = L.under * D, i.current.scale.set(Math.max(Y, 1e-4), Math.max(ee, 1e-4), 1), i.current.visible = !G && ge > 0;
|
|
1597
1625
|
const Ce = x.textAlign === "left" ? -ge / 2 + k / 2 : x.textAlign === "right" ? ge / 2 + k / 2 : k / 2, U = ee / 2 - H - K / 2;
|
|
1598
|
-
O.position.set(Ce, U, 1e-3), f.current && (f.current.position.set(Ce, U - K / 2 - ae - ke / 2, 1e-3), f.current.visible = c.hasSub && !c.subOff), r.current.position.set(Q + (x.anchorX === "left" ? Y / 2 : x.anchorX === "right" ? -Y / 2 : 0),
|
|
1626
|
+
O.position.set(Ce, U, 1e-3), f.current && (f.current.position.set(Ce, U - K / 2 - ae - ke / 2, 1e-3), f.current.visible = c.hasSub && !c.subOff), r.current.position.set(Q + (x.anchorX === "left" ? Y / 2 : x.anchorX === "right" ? -Y / 2 : 0), q + (x.anchorY === "bottom" ? ee / 2 : x.anchorY === "top" ? -ee / 2 : 0), 0);
|
|
1599
1627
|
const se = l.current;
|
|
1600
1628
|
if (se) {
|
|
1601
|
-
const Se = Math.hypot(Q,
|
|
1602
|
-
se.visible = Se > 1e-3, se.position.set(Q / 2,
|
|
1629
|
+
const Se = Math.hypot(Q, q);
|
|
1630
|
+
se.visible = Se > 1e-3, se.position.set(Q / 2, q / 2, 0), se.rotation.z = Math.atan2(q, Q), se.scale.set(Math.max(Se, 1e-4), D * 0.05, 1);
|
|
1603
1631
|
}
|
|
1604
1632
|
}, setLines: (O, x) => {
|
|
1605
|
-
const D =
|
|
1633
|
+
const D = u.current, F = f.current;
|
|
1606
1634
|
if (!D) return;
|
|
1607
|
-
const
|
|
1608
|
-
if (L !== c.keyM && (c.keyM = L, D.text =
|
|
1635
|
+
const N = n.current, X = P(), j = vt(O, N.uppercase, c.tmp), K = vt(x, N.uppercase, c.tmp), L = `${j.key}|${X}`, k = `${K.key}|${X}`;
|
|
1636
|
+
if (L !== c.keyM && (c.keyM = L, D.text = ts(j.text, X), D.colorRanges = j.ranges, D.sync()), F && k !== c.keyS) {
|
|
1609
1637
|
c.keyS = k;
|
|
1610
|
-
const
|
|
1611
|
-
c.hasSub = !!
|
|
1638
|
+
const G = ts(K.text, X ? Math.round(X * N.size / R()) : 0);
|
|
1639
|
+
c.hasSub = !!G, F.visible = c.hasSub && !c.subOff, F.text = G, F.colorRanges = K.ranges, F.sync();
|
|
1612
1640
|
}
|
|
1613
1641
|
} };
|
|
1614
1642
|
}, [M, c]);
|
|
1615
1643
|
$(() => {
|
|
1616
|
-
const
|
|
1617
|
-
for (const w of
|
|
1644
|
+
const R = [u.current, f.current].filter(Boolean), P = () => o.layout();
|
|
1645
|
+
for (const w of R) w.addEventListener("synccomplete", P);
|
|
1618
1646
|
return o.applyColors(), o.setLines(n.current.text, n.current.secondary), o.layout(), () => {
|
|
1619
|
-
for (const w of
|
|
1647
|
+
for (const w of R) w.removeEventListener("synccomplete", P);
|
|
1620
1648
|
};
|
|
1621
1649
|
}, [o]);
|
|
1622
|
-
const
|
|
1623
|
-
$(() => o.setLines(n.current.text, n.current.secondary), [o,
|
|
1624
|
-
c.accent.set(n.current.color), c.textCol.set(n.current.textColor ??
|
|
1625
|
-
}, [o, c, t.color, t.textColor, t.secondaryColor, t.glow, t.plate]), $(() => void (c.target = t.opacity), [c, t.opacity]), $(() => o.layout(), [o, t.size, t.plate, t.anchorX, t.anchorY, t.textAlign, (
|
|
1650
|
+
const d = vt(t.text, t.uppercase, c.tmp).key, S = vt(t.secondary, t.uppercase, c.tmp).key;
|
|
1651
|
+
$(() => o.setLines(n.current.text, n.current.secondary), [o, d, S, t.uppercase, t.maxWidth, t.size]), $(() => {
|
|
1652
|
+
c.accent.set(n.current.color), c.textCol.set(n.current.textColor ?? Xt), c.subCol.set(n.current.secondaryColor ?? as), o.applyColors();
|
|
1653
|
+
}, [o, c, t.color, t.textColor, t.secondaryColor, t.glow, t.plate]), $(() => void (c.target = t.opacity), [c, t.opacity]), $(() => o.layout(), [o, t.size, t.plate, t.anchorX, t.anchorY, t.textAlign, (W = t.offset) == null ? void 0 : W[0], (T = t.offset) == null ? void 0 : T[1]]), yr(
|
|
1626
1654
|
t.ref,
|
|
1627
1655
|
() => ({
|
|
1628
1656
|
get object() {
|
|
1629
1657
|
return s.current;
|
|
1630
1658
|
},
|
|
1631
|
-
setOpacity(
|
|
1632
|
-
c.target =
|
|
1659
|
+
setOpacity(R, P = !1) {
|
|
1660
|
+
c.target = R, P && (c.cur = R);
|
|
1633
1661
|
},
|
|
1634
|
-
setText(
|
|
1635
|
-
o.setLines(
|
|
1662
|
+
setText(R, P) {
|
|
1663
|
+
o.setLines(R, P ?? null);
|
|
1636
1664
|
},
|
|
1637
|
-
setColor(
|
|
1638
|
-
c.tmp.set(
|
|
1665
|
+
setColor(R) {
|
|
1666
|
+
c.tmp.set(R), c.tmp.equals(c.accent) || (c.accent.copy(c.tmp), o.applyColors());
|
|
1639
1667
|
},
|
|
1640
|
-
setEmphasis(
|
|
1641
|
-
|
|
1668
|
+
setEmphasis(R) {
|
|
1669
|
+
R !== c.emph && (c.emph = R, o.applyColors());
|
|
1642
1670
|
}
|
|
1643
1671
|
}),
|
|
1644
1672
|
[o, c]
|
|
1645
1673
|
);
|
|
1646
|
-
const A =
|
|
1647
|
-
() => t.declutter === !1 ? null :
|
|
1674
|
+
const A = vs(qe), m = ne(
|
|
1675
|
+
() => t.declutter === !1 ? null : jr(t.declutter ?? A.kind, A.agent, t.size),
|
|
1648
1676
|
[t.declutter, A, t.size]
|
|
1649
1677
|
);
|
|
1650
1678
|
$(() => {
|
|
1651
1679
|
if (m)
|
|
1652
|
-
return
|
|
1653
|
-
}, [m]), ve(({ camera:
|
|
1654
|
-
const V = s.current,
|
|
1655
|
-
if (!V || !
|
|
1680
|
+
return Xr(m), () => Kr(m);
|
|
1681
|
+
}, [m]), ve(({ camera: R, size: P }, w) => {
|
|
1682
|
+
const V = s.current, I = a.current;
|
|
1683
|
+
if (!V || !I) return;
|
|
1656
1684
|
const O = n.current;
|
|
1657
1685
|
c.cur !== c.target && (O.fadeMs <= 0 ? c.cur = c.target : (c.cur += (c.target - c.cur) * Math.min(1, w * 1e3 / O.fadeMs), Math.abs(c.target - c.cur) < 4e-3 && (c.cur = c.target)));
|
|
1658
1686
|
const x = m;
|
|
1659
1687
|
if (x) {
|
|
1660
|
-
const
|
|
1661
|
-
c.dc += (
|
|
1688
|
+
const G = Z.active ? x.show : 1;
|
|
1689
|
+
c.dc += (G - c.dc) * Math.min(1, w / 0.12), Math.abs(G - c.dc) < 0.01 && (c.dc = G);
|
|
1662
1690
|
const H = Z.active ? x.subOff : !1;
|
|
1663
1691
|
H !== c.subOff && c.hasSub && (c.subOff = H, o.layout()), x.live = !1;
|
|
1664
1692
|
}
|
|
1665
1693
|
if (x && (x.drawn = !1), c.cur <= 4e-3 || !V.visible) {
|
|
1666
|
-
|
|
1694
|
+
I.visible = !1;
|
|
1667
1695
|
return;
|
|
1668
1696
|
}
|
|
1669
1697
|
V.getWorldPosition(c.wp), V.getWorldQuaternion(c.q);
|
|
1670
|
-
const D = c.wp.distanceTo(
|
|
1671
|
-
let
|
|
1672
|
-
const X =
|
|
1698
|
+
const D = c.wp.distanceTo(R.position), F = O.fit ? C.label : 1;
|
|
1699
|
+
let N = F;
|
|
1700
|
+
const X = R, j = R, K = X.isPerspectiveCamera ? 2 * D * Math.tan(y.MathUtils.degToRad(X.fov) / 2) / (X.zoom * P.height) : (j.top - j.bottom) / (j.zoom * P.height);
|
|
1673
1701
|
if (O.pxRange) {
|
|
1674
|
-
const
|
|
1675
|
-
|
|
1702
|
+
const G = O.size * F / Math.max(K, 1e-6), H = Z.pxk;
|
|
1703
|
+
N = y.MathUtils.clamp(G, O.pxRange[0] * H, O.pxRange[1] * H) / G * F;
|
|
1676
1704
|
}
|
|
1677
|
-
if (x && Z.due &&
|
|
1678
|
-
const
|
|
1679
|
-
x.x = H + c.bx *
|
|
1705
|
+
if (x && Z.due && os(V) && (c.ndc.copy(c.wp).project(R), c.ndc.z < 1 && c.ndc.z > -1)) {
|
|
1706
|
+
const G = N / Math.max(K, 1e-6), H = (c.ndc.x + 1) / 2 * P.width, Q = (1 - c.ndc.y) / 2 * P.height;
|
|
1707
|
+
x.x = H + c.bx * G, x.y = Q - c.by * G, x.w = c.W * G, x.h = c.H * G, x.x1 = H + c.bx1 * G, x.y1 = Q - c.by1 * G, x.w1 = c.W1 * G, x.h1 = c.H1 * G, x.live = x.w > 1 && x.x + x.w / 2 > 0 && x.x - x.w / 2 < P.width && x.y + x.h / 2 > 0 && x.y - x.h / 2 < P.height, x.clip = x.x - x.w / 2 < -2 || x.x + x.w / 2 > P.width + 2 || x.y - x.h / 2 < -2 || x.y + x.h / 2 > P.height + 2, x.ax = c.wp.x, x.ay = c.wp.y, x.az = c.wp.z, x.ox0 = x.x - x.w / 2 - H, x.ox1 = x.x + x.w / 2 - H, x.oy0 = x.y - x.h / 2 - Q, x.oy1 = x.y + x.h / 2 - Q, x.w > 1 && (x.seen = performance.now());
|
|
1680
1708
|
}
|
|
1681
1709
|
const L = A.agent, k = c.cur * c.dc * (L ? 1 - 0.55 * L.dim : 1) * (1 - O.depthFade * y.MathUtils.smoothstep(D, O.fadeRange[0], O.fadeRange[1]));
|
|
1682
1710
|
if (k <= 4e-3) {
|
|
1683
|
-
|
|
1711
|
+
I.visible = !1;
|
|
1684
1712
|
return;
|
|
1685
1713
|
}
|
|
1686
|
-
|
|
1714
|
+
I.visible = !0, x && (x.drawn = k > 0.05 && os(V.parent)), I.quaternion.copy(c.q.invert()).multiply(R.quaternion), I.scale.setScalar(N / (V.matrixWorld.getMaxScaleOnAxis() || 1)), M.plate.uniforms.uOpacity.value = k, M.leader.opacity = k * 0.65, u.current && (u.current.fillOpacity = k), f.current && (f.current.fillOpacity = k * 0.92);
|
|
1687
1715
|
});
|
|
1688
|
-
const b = t.depthTest ?
|
|
1689
|
-
return /* @__PURE__ */ p("group", { ref: s, position: t.position, visible: t.visible ?? !0, userData:
|
|
1690
|
-
t.leader && /* @__PURE__ */ p("mesh", { ref: l, geometry:
|
|
1691
|
-
/* @__PURE__ */
|
|
1716
|
+
const b = t.depthTest ? ss.depth : ss.top, v = !!t.onClick;
|
|
1717
|
+
return /* @__PURE__ */ p("group", { ref: s, position: t.position, visible: t.visible ?? !0, userData: go, children: /* @__PURE__ */ E("group", { ref: a, visible: !1, children: [
|
|
1718
|
+
t.leader && /* @__PURE__ */ p("mesh", { ref: l, geometry: ns, material: M.leader, renderOrder: t.renderOrder, raycast: bt }),
|
|
1719
|
+
/* @__PURE__ */ E("group", { ref: r, children: [
|
|
1692
1720
|
/* @__PURE__ */ p(
|
|
1693
1721
|
"mesh",
|
|
1694
1722
|
{
|
|
1695
|
-
ref:
|
|
1696
|
-
geometry:
|
|
1723
|
+
ref: i,
|
|
1724
|
+
geometry: ns,
|
|
1697
1725
|
material: M.plate,
|
|
1698
1726
|
renderOrder: t.renderOrder,
|
|
1699
|
-
raycast: v ? y.Mesh.prototype.raycast :
|
|
1727
|
+
raycast: v ? y.Mesh.prototype.raycast : bt,
|
|
1700
1728
|
onClick: t.onClick,
|
|
1701
1729
|
onPointerOver: v ? () => {
|
|
1702
|
-
var
|
|
1703
|
-
return document.body.style.cursor = "pointer", (
|
|
1730
|
+
var R;
|
|
1731
|
+
return document.body.style.cursor = "pointer", (R = t.onHover) == null ? void 0 : R.call(t, !0);
|
|
1704
1732
|
} : void 0,
|
|
1705
1733
|
onPointerOut: v ? () => {
|
|
1706
|
-
var
|
|
1707
|
-
return document.body.style.cursor = "", (
|
|
1734
|
+
var R;
|
|
1735
|
+
return document.body.style.cursor = "", (R = t.onHover) == null ? void 0 : R.call(t, !1);
|
|
1708
1736
|
} : void 0
|
|
1709
1737
|
}
|
|
1710
1738
|
),
|
|
1711
1739
|
/* @__PURE__ */ p(
|
|
1712
1740
|
En,
|
|
1713
1741
|
{
|
|
1714
|
-
ref:
|
|
1715
|
-
font:
|
|
1716
|
-
characters:
|
|
1742
|
+
ref: u,
|
|
1743
|
+
font: $n[t.font],
|
|
1744
|
+
characters: es,
|
|
1717
1745
|
fontSize: t.size,
|
|
1718
1746
|
letterSpacing: t.letterSpacing,
|
|
1719
1747
|
anchorX: t.textAlign,
|
|
1720
1748
|
anchorY: "middle",
|
|
1721
1749
|
material: b,
|
|
1722
1750
|
renderOrder: t.renderOrder + 1,
|
|
1723
|
-
raycast:
|
|
1751
|
+
raycast: bt,
|
|
1724
1752
|
color: c.mainColor,
|
|
1725
1753
|
children: ""
|
|
1726
1754
|
}
|
|
@@ -1729,15 +1757,15 @@ function Ao(e) {
|
|
|
1729
1757
|
En,
|
|
1730
1758
|
{
|
|
1731
1759
|
ref: f,
|
|
1732
|
-
font:
|
|
1733
|
-
characters:
|
|
1760
|
+
font: $n[t.font],
|
|
1761
|
+
characters: es,
|
|
1734
1762
|
fontSize: t.secondarySize ?? t.size * 0.78,
|
|
1735
1763
|
letterSpacing: t.letterSpacing,
|
|
1736
1764
|
anchorX: t.textAlign,
|
|
1737
1765
|
anchorY: "middle",
|
|
1738
1766
|
material: b,
|
|
1739
1767
|
renderOrder: t.renderOrder + 1,
|
|
1740
|
-
raycast:
|
|
1768
|
+
raycast: bt,
|
|
1741
1769
|
color: c.subColor,
|
|
1742
1770
|
visible: !1,
|
|
1743
1771
|
children: ""
|
|
@@ -1747,25 +1775,25 @@ function Ao(e) {
|
|
|
1747
1775
|
] })
|
|
1748
1776
|
] }) });
|
|
1749
1777
|
}
|
|
1750
|
-
function
|
|
1778
|
+
function os(e) {
|
|
1751
1779
|
for (; e; e = e.parent) if (!e.visible) return !1;
|
|
1752
1780
|
return !0;
|
|
1753
1781
|
}
|
|
1754
|
-
function
|
|
1782
|
+
function Eo(e) {
|
|
1755
1783
|
const t = {};
|
|
1756
1784
|
for (const n in e) e[n] !== void 0 && (t[n] = e[n]);
|
|
1757
1785
|
return t;
|
|
1758
1786
|
}
|
|
1759
|
-
const
|
|
1760
|
-
let
|
|
1761
|
-
function
|
|
1762
|
-
if (
|
|
1787
|
+
const Ue = 220, _s = ["planner", "researcher", "writer", "graph_scout", "records_scout", "data_scout"], Ro = Object.fromEntries(_s.map((e) => [e, new y.Color(We[e])]));
|
|
1788
|
+
let Mt = null;
|
|
1789
|
+
function Vo() {
|
|
1790
|
+
if (Mt) return Mt;
|
|
1763
1791
|
const e = document.createElement("canvas");
|
|
1764
1792
|
e.width = e.height = 128;
|
|
1765
1793
|
const t = e.getContext("2d"), n = t.createRadialGradient(64, 64, 0, 64, 64, 64);
|
|
1766
|
-
return n.addColorStop(0, "rgba(255,255,255,1)"), n.addColorStop(0.18, "rgba(255,255,255,0.55)"), n.addColorStop(0.5, "rgba(255,255,255,0.12)"), n.addColorStop(1, "rgba(255,255,255,0)"), t.fillStyle = n, t.fillRect(0, 0, 128, 128),
|
|
1794
|
+
return n.addColorStop(0, "rgba(255,255,255,1)"), n.addColorStop(0.18, "rgba(255,255,255,0.55)"), n.addColorStop(0.5, "rgba(255,255,255,0.12)"), n.addColorStop(1, "rgba(255,255,255,0)"), t.fillStyle = n, t.fillRect(0, 0, 128, 128), Mt = new y.CanvasTexture(e), Mt;
|
|
1767
1795
|
}
|
|
1768
|
-
const
|
|
1796
|
+
const Co = (
|
|
1769
1797
|
/* glsl */
|
|
1770
1798
|
`
|
|
1771
1799
|
attribute vec4 aSeed; // theta, phi(cos), radius 0..1, speed
|
|
@@ -1790,7 +1818,7 @@ const yo = (
|
|
|
1790
1818
|
vA = tw;
|
|
1791
1819
|
}
|
|
1792
1820
|
`
|
|
1793
|
-
),
|
|
1821
|
+
), To = (
|
|
1794
1822
|
/* glsl */
|
|
1795
1823
|
`
|
|
1796
1824
|
uniform float uOpacity;
|
|
@@ -1805,26 +1833,26 @@ const yo = (
|
|
|
1805
1833
|
}
|
|
1806
1834
|
`
|
|
1807
1835
|
);
|
|
1808
|
-
function
|
|
1809
|
-
const e = new y.BufferGeometry(), t = new Float32Array(
|
|
1810
|
-
for (let s = 0; s <
|
|
1836
|
+
function zo() {
|
|
1837
|
+
const e = new y.BufferGeometry(), t = new Float32Array(Ue * 3), n = new Float32Array(Ue * 4);
|
|
1838
|
+
for (let s = 0; s < Ue; s++)
|
|
1811
1839
|
n[s * 4] = s * 2.39996 + Math.random() * 0.3, n[s * 4 + 1] = 1 - 2 * (s * 0.618034 % 1), n[s * 4 + 2] = Math.pow(Math.random(), 0.45), n[s * 4 + 3] = (0.25 + Math.random() * 0.6) * (Math.random() < 0.5 ? -1 : 1);
|
|
1812
|
-
return e.setAttribute("position", new y.BufferAttribute(t, 3)), e.setAttribute("aSeed", new y.BufferAttribute(n, 4)), e.setAttribute("aColor", new y.BufferAttribute(new Float32Array(
|
|
1840
|
+
return e.setAttribute("position", new y.BufferAttribute(t, 3)), e.setAttribute("aSeed", new y.BufferAttribute(n, 4)), e.setAttribute("aColor", new y.BufferAttribute(new Float32Array(Ue * 3), 3)), e.setAttribute("aBright", new y.BufferAttribute(new Float32Array(Ue), 1)), e.setDrawRange(0, 0), e.boundingSphere = new y.Sphere(new y.Vector3(), 50), e;
|
|
1813
1841
|
}
|
|
1814
|
-
function
|
|
1815
|
-
const c = B(null), M = B(null), o = B(null),
|
|
1816
|
-
const w = (
|
|
1817
|
-
vertexShader:
|
|
1818
|
-
fragmentShader:
|
|
1842
|
+
function Po({ cluster: e, position: t, place: n, color: s, radius: a = 1.4, variant: r = "orb", pointSize: i = 1, labelBelow: l = 1.25, glowGain: u = 1, onClick: f }) {
|
|
1843
|
+
const c = B(null), M = B(null), o = B(null), d = B(null), S = B(null), A = B(null), m = B(null), b = ne(() => new y.Color(s ?? e.color), [s, e.color]), v = ne(() => ({ l1: "", l2: "", seen: -1, vis: 0, hover: 0, over: !1, r: a, pos: new y.Vector3(), c: new y.Color(), tokSeen: -1, thSeen: -1, fresh: !0 }), [a]), W = ne(zo, []), T = ne(() => {
|
|
1844
|
+
const w = (I) => new y.SpriteMaterial({ map: Vo(), color: "#000", blending: y.AdditiveBlending, depthWrite: !1, transparent: !0, toneMapped: !1, opacity: I }), V = new y.ShaderMaterial({
|
|
1845
|
+
vertexShader: Co,
|
|
1846
|
+
fragmentShader: To,
|
|
1819
1847
|
transparent: !0,
|
|
1820
1848
|
depthWrite: !1,
|
|
1821
1849
|
blending: y.AdditiveBlending,
|
|
1822
1850
|
toneMapped: !1,
|
|
1823
1851
|
uniforms: {
|
|
1824
1852
|
uTime: { value: 0 },
|
|
1825
|
-
uRadius: { value:
|
|
1853
|
+
uRadius: { value: a },
|
|
1826
1854
|
uEnergy: { value: 0 },
|
|
1827
|
-
uSize: { value: 0.16 *
|
|
1855
|
+
uSize: { value: 0.16 * a * i },
|
|
1828
1856
|
uFlat: { value: r === "stars" ? 0.55 : 0 },
|
|
1829
1857
|
uChaos: { value: r === "swarm" ? 1 : r === "stars" ? 0 : 0.25 },
|
|
1830
1858
|
uPix: { value: 1 },
|
|
@@ -1832,9 +1860,9 @@ function ko({ cluster: e, position: t, place: n, color: s, radius: i = 1.4, vari
|
|
|
1832
1860
|
}
|
|
1833
1861
|
});
|
|
1834
1862
|
return { core: w(1), hot: w(1), halo: w(1), points: V, hit: new y.MeshBasicMaterial({ visible: !1 }) };
|
|
1835
|
-
}, [
|
|
1836
|
-
ve(({ clock: w, gl: V, camera:
|
|
1837
|
-
var
|
|
1863
|
+
}, [a, i, r]);
|
|
1864
|
+
ve(({ clock: w, gl: V, camera: I }) => {
|
|
1865
|
+
var q, Y;
|
|
1838
1866
|
const O = e, x = w.elapsedTime, D = O.active && z.grouped ? 1 : 0;
|
|
1839
1867
|
v.vis += (D - v.vis) * (D ? 0.06 : 0.12), v.vis < 3e-3 && (v.vis = 0);
|
|
1840
1868
|
const F = v.vis > 0;
|
|
@@ -1843,45 +1871,45 @@ function ko({ cluster: e, position: t, place: n, color: s, radius: i = 1.4, vari
|
|
|
1843
1871
|
return;
|
|
1844
1872
|
}
|
|
1845
1873
|
c.current && (n ? n(O.lane, v.pos, x) : t && v.pos.set(t[0], t[1], t[2]), v.fresh ? (c.current.position.copy(v.pos), v.fresh = !1) : c.current.position.lerp(v.pos, 0.06));
|
|
1846
|
-
const
|
|
1874
|
+
const N = O.energy, X = 0.8 + 0.22 * Math.log2(1 + O.agents / 6);
|
|
1847
1875
|
v.hover += ((v.over ? 1 : 0) - v.hover) * 0.15;
|
|
1848
|
-
const j =
|
|
1849
|
-
k.uTime.value = x, k.uRadius.value = j, k.uEnergy.value =
|
|
1850
|
-
const
|
|
1851
|
-
k.uPix.value = V.domElement.height / (2 * Math.tan(
|
|
1852
|
-
const H =
|
|
1853
|
-
if (M.current && (M.current.scale.setScalar(j * 2.4 * L), T.core.color.copy(b).multiplyScalar((0.32 +
|
|
1876
|
+
const j = a * Math.min(1.7, X) * (0.6 + 0.4 * v.vis) * (1 + v.hover * 0.08), K = Math.sin(x * (1.1 + N * 2.6) + O.lane), L = 1 + K * (0.04 + N * 0.1), k = T.points.uniforms;
|
|
1877
|
+
k.uTime.value = x, k.uRadius.value = j, k.uEnergy.value = N;
|
|
1878
|
+
const G = I.fov ?? 50;
|
|
1879
|
+
k.uPix.value = V.domElement.height / (2 * Math.tan(G * Math.PI / 360)), k.uOpacity.value = v.vis;
|
|
1880
|
+
const H = u * v.vis;
|
|
1881
|
+
if (M.current && (M.current.scale.setScalar(j * 2.4 * L), T.core.color.copy(b).multiplyScalar((0.32 + N * 0.45 + v.hover * 0.2) * H)), o.current && (o.current.scale.setScalar(j * 0.9 * L), T.hot.color.copy(b).lerp(Io, 0.55).multiplyScalar((0.35 + N * 0.6) * H)), d.current && (d.current.scale.setScalar(j * 5.5 * (1 + K * 0.03)), T.halo.color.copy(b).multiplyScalar((0.07 + N * 0.08) * H)), (q = S.current) == null || q.scale.setScalar(j * 1.15), (Y = A.current) == null || Y.position.set(0, -j * l - 0.35, 0), O.version !== v.seen) {
|
|
1854
1882
|
v.seen = O.version;
|
|
1855
|
-
const ee = Math.min(
|
|
1883
|
+
const ee = Math.min(Ue, Math.max(18, O.agents * 2)), ge = W.getAttribute("aColor"), ke = W.getAttribute("aBright");
|
|
1856
1884
|
let ae = 0;
|
|
1857
1885
|
const ie = O.agents ? ee / O.agents : 1;
|
|
1858
|
-
for (const U of
|
|
1886
|
+
for (const U of _s) {
|
|
1859
1887
|
const se = Math.round(O.types[U] * ie);
|
|
1860
1888
|
for (let he = 0; he < se && ae < ee; he++, ae++)
|
|
1861
|
-
v.c.copy(
|
|
1889
|
+
v.c.copy(Ro[U]).lerp(b, 0.25), ge.setXYZ(ae, v.c.r, v.c.g, v.c.b);
|
|
1862
1890
|
}
|
|
1863
1891
|
for (; ae < ee; ae++) ge.setXYZ(ae, b.r, b.g, b.b);
|
|
1864
1892
|
const Ce = O.agents ? O.thinking / O.agents : 0;
|
|
1865
1893
|
for (let U = 0; U < ee; U++) ke.setX(U, U * 0.618034 % 1 < Ce ? 1 : 0);
|
|
1866
|
-
ge.needsUpdate = !0, ke.needsUpdate = !0,
|
|
1894
|
+
ge.needsUpdate = !0, ke.needsUpdate = !0, W.setDrawRange(0, ee), v.l1 = `${O.runs} run${O.runs === 1 ? "" : "s"} · ${O.agents} agent${O.agents === 1 ? "" : "s"}`;
|
|
1867
1895
|
}
|
|
1868
1896
|
const Q = Math.round(O.tokens / 1e3);
|
|
1869
1897
|
(Q !== v.tokSeen || O.thinking !== v.thSeen) && (v.tokSeen = Q, v.thSeen = O.thinking, v.l2 = `${O.thinking} thinking · ${Q >= 1e3 ? `${(Q / 1e3).toFixed(1)}M` : `${Q}k`} tok`), m.current && (m.current.setText(v.l1, v.l2), m.current.setEmphasis(v.over), D && m.current.setOpacity(Math.min(1, v.vis * 1.2), !0));
|
|
1870
1898
|
});
|
|
1871
|
-
const
|
|
1899
|
+
const R = (w) => {
|
|
1872
1900
|
var V;
|
|
1873
|
-
(V = w == null ? void 0 : w.stopPropagation) == null || V.call(w), (f ??
|
|
1901
|
+
(V = w == null ? void 0 : w.stopPropagation) == null || V.call(w), (f ?? Da)(e.lane);
|
|
1874
1902
|
}, P = (w) => {
|
|
1875
1903
|
v.over = w, document.body.style.cursor = w ? "pointer" : "";
|
|
1876
1904
|
};
|
|
1877
|
-
return /* @__PURE__ */
|
|
1878
|
-
/* @__PURE__ */ p("sprite", { ref:
|
|
1905
|
+
return /* @__PURE__ */ E("group", { ref: c, visible: !1, children: [
|
|
1906
|
+
/* @__PURE__ */ p("sprite", { ref: d, material: T.halo }),
|
|
1879
1907
|
/* @__PURE__ */ p("sprite", { ref: M, material: T.core }),
|
|
1880
1908
|
/* @__PURE__ */ p("sprite", { ref: o, material: T.hot }),
|
|
1881
|
-
/* @__PURE__ */ p("points", { geometry:
|
|
1882
|
-
/* @__PURE__ */ p("mesh", { ref: S, material: T.hit, onClick:
|
|
1909
|
+
/* @__PURE__ */ p("points", { geometry: W, material: T.points, frustumCulled: !1 }),
|
|
1910
|
+
/* @__PURE__ */ p("mesh", { ref: S, material: T.hit, onClick: R, onPointerOver: () => P(!0), onPointerOut: () => P(!1), children: /* @__PURE__ */ p("sphereGeometry", { args: [1, 12, 8] }) }),
|
|
1883
1911
|
/* @__PURE__ */ p("group", { ref: A, children: /* @__PURE__ */ p(
|
|
1884
|
-
|
|
1912
|
+
It,
|
|
1885
1913
|
{
|
|
1886
1914
|
ref: m,
|
|
1887
1915
|
text: "",
|
|
@@ -1892,17 +1920,17 @@ function ko({ cluster: e, position: t, place: n, color: s, radius: i = 1.4, vari
|
|
|
1892
1920
|
opacity: 0,
|
|
1893
1921
|
pxRange: [10, 14],
|
|
1894
1922
|
renderOrder: 28,
|
|
1895
|
-
onClick: (w) =>
|
|
1923
|
+
onClick: (w) => R(w),
|
|
1896
1924
|
onHover: (w) => P(w)
|
|
1897
1925
|
}
|
|
1898
1926
|
) })
|
|
1899
1927
|
] });
|
|
1900
1928
|
}
|
|
1901
|
-
const
|
|
1902
|
-
function
|
|
1903
|
-
return /* @__PURE__ */ p(ye, { children:
|
|
1929
|
+
const Io = new y.Color("#ffffff"), Go = Array.from({ length: re }, (e, t) => t);
|
|
1930
|
+
function Wo({ place: e, color: t, ...n }) {
|
|
1931
|
+
return /* @__PURE__ */ p(ye, { children: Go.map((s) => /* @__PURE__ */ p(Po, { cluster: z.clusters[s], place: e, color: typeof t == "function" ? t(s) : t, ...n }, s)) });
|
|
1904
1932
|
}
|
|
1905
|
-
const
|
|
1933
|
+
const No = 3, qo = [
|
|
1906
1934
|
"Why is churn rising for Acme Corp?",
|
|
1907
1935
|
"Root cause of payment latency incidents",
|
|
1908
1936
|
"Which region has the most incidents?",
|
|
@@ -1911,7 +1939,7 @@ const Ro = 3, Vo = [
|
|
|
1911
1939
|
"Which customers are at risk of downgrading?",
|
|
1912
1940
|
"Why did checkout conversion drop last week?",
|
|
1913
1941
|
"Compare onboarding time across regions"
|
|
1914
|
-
],
|
|
1942
|
+
], Kt = [
|
|
1915
1943
|
["Acme Corp", "Enterprise Plan", "Churn Q3"],
|
|
1916
1944
|
["Payments API", "Incident #4821", "p99 Latency"],
|
|
1917
1945
|
["EMEA", "Incident #4790", "On-call Team"],
|
|
@@ -1920,82 +1948,82 @@ const Ro = 3, Vo = [
|
|
|
1920
1948
|
["Umbrella Co", "Seat Downgrade", "Renewal 2026"],
|
|
1921
1949
|
["Checkout Funnel", "Conversion Rate", "Release 4.12"],
|
|
1922
1950
|
["APAC", "Onboarding Time", "Customer Success"]
|
|
1923
|
-
],
|
|
1951
|
+
], Do = {
|
|
1924
1952
|
analytics: [["Metrics API", "api"], ["Postgres", "db"]],
|
|
1925
1953
|
warehouse: [["Snowflake", "warehouse"], ["Spark cluster", "spark"]],
|
|
1926
1954
|
github: [["GitHub API", "api"]],
|
|
1927
1955
|
"google-drive": [["Drive storage", "storage"]],
|
|
1928
1956
|
slack: [["Slack API", "api"], ["Kafka events", "queue"]]
|
|
1929
|
-
}, Ae = (e) => e[Math.floor(Math.random() * e.length)],
|
|
1930
|
-
function
|
|
1931
|
-
const t = `run-${
|
|
1932
|
-
let
|
|
1957
|
+
}, Ae = (e) => e[Math.floor(Math.random() * e.length)], Fo = () => Math.random().toString(36).slice(2, 7);
|
|
1958
|
+
function Lo(e) {
|
|
1959
|
+
const t = `run-${Fo()}`, n = Ae(qo), s = () => Date.now();
|
|
1960
|
+
let a = 0;
|
|
1933
1961
|
const r = (w, V) => {
|
|
1934
|
-
|
|
1935
|
-
},
|
|
1962
|
+
a += w, e(a, V);
|
|
1963
|
+
}, i = (w, V, I) => r(250, () => ({ type: "spawn", run_id: t, id: w, agent: V, parent_id: I, ts: s() })), l = (w) => r(150, () => ({ type: "agent", run_id: t, id: w, status: "thinking", ts: s() })), u = (w, V = 120) => r(V, () => ({ type: "agent", run_id: t, id: w, status: "waiting", ts: s() })), f = (w, V) => r(V, () => ({ type: "llm", run_id: t, id: w, tokens_in: 1200 + Math.round(Math.random() * 3e3), tokens_out: 150 + Math.round(Math.random() * 700), latency_ms: 700 + Math.random() * 1800, ts: s() })), c = (w, V = 250) => r(V, () => ({ type: "exit", run_id: t, id: w, status: "done", ts: s() })), M = (w, V, I, O = 120) => r(O, () => ({ type: "message", run_id: t, from_id: w, to_id: V, text: I, ts: s() })), o = (w, V, I = 120) => r(I, () => [
|
|
1936
1964
|
{ type: "tool", run_id: t, id: w, tool: "Skill", args_preview: V, ts: s() },
|
|
1937
1965
|
{ type: "skill", run_id: t, id: w, name: V, status: "start", ts: s() }
|
|
1938
|
-
]),
|
|
1966
|
+
]), d = (w, V, I = 120) => r(I, () => ({ type: "skill", run_id: t, id: w, name: V, status: "end", ts: s() })), S = (w, V, I = 120) => r(I, () => ({ type: "step", run_id: t, step: w, status: V, ts: s() }));
|
|
1939
1967
|
r(0, () => ({ type: "run", run_id: t, status: "started", topic: n, workflow: "research_brief", ts: s() })), S("plan", "running", 300);
|
|
1940
1968
|
const A = `${t}:planner`;
|
|
1941
|
-
|
|
1969
|
+
i(A, "planner", null), l(A), f(A, 1500), f(A, 900), S("plan", "done", 300);
|
|
1942
1970
|
const m = `${t}:researcher`;
|
|
1943
|
-
S("research", "running", 200),
|
|
1971
|
+
S("research", "running", 200), i(m, "researcher", A), M(A, m, `3 questions on "${n}"`, 150), c(A, 200), l(m);
|
|
1944
1972
|
const b = Math.random() < 0.6 ? Ae(["deep-research", "search-first"]) : "";
|
|
1945
|
-
b && o(m, b, 200), f(m, 1200), b &&
|
|
1946
|
-
const v = 2 + Math.floor(Math.random() * 3),
|
|
1973
|
+
b && o(m, b, 200), f(m, 1200), b && d(m, b, 400);
|
|
1974
|
+
const v = 2 + Math.floor(Math.random() * 3), W = [];
|
|
1947
1975
|
for (let w = 0; w < v; w++) {
|
|
1948
|
-
const V = w % 2 === 0 ? "graph_scout" : "records_scout",
|
|
1949
|
-
|
|
1976
|
+
const V = w % 2 === 0 ? "graph_scout" : "records_scout", I = `${t}:${V}:${w}`;
|
|
1977
|
+
W.push(I), r(200, () => ({ type: "tool", run_id: t, id: m, tool: "task", args_preview: `${V}: angle ${w + 1} of "${n}"`, ts: s() })), i(I, V, m), M(m, I, `Investigate angle ${w + 1}`, 80);
|
|
1950
1978
|
}
|
|
1951
|
-
|
|
1952
|
-
const T =
|
|
1953
|
-
|
|
1954
|
-
let
|
|
1955
|
-
const O = (k,
|
|
1956
|
-
|
|
1957
|
-
}, x = Ae(
|
|
1979
|
+
u(m, 200);
|
|
1980
|
+
const T = a;
|
|
1981
|
+
W.forEach((w, V) => {
|
|
1982
|
+
let I = T + 200 + V * 220;
|
|
1983
|
+
const O = (k, G) => {
|
|
1984
|
+
I += k, e(I, G);
|
|
1985
|
+
}, x = Ae(Kt), D = w.includes("graph_scout");
|
|
1958
1986
|
O(0, () => ({ type: "agent", run_id: t, id: w, status: "thinking", ts: s() }));
|
|
1959
1987
|
const F = Math.random() < 0.45 ? Ae(D ? ["graph-query", "dataviz"] : ["xlsx", "pdf"]) : "";
|
|
1960
1988
|
F && (O(250, () => ({ type: "tool", run_id: t, id: w, tool: "Skill", args_preview: F, ts: s() })), O(0, () => ({ type: "skill", run_id: t, id: w, name: F, status: "start", ts: s() }))), O(500 + Math.random() * 500, () => ({ type: "tool", run_id: t, id: w, tool: D ? "graph_neighbors" : "search_records", args_preview: `"${x[0]}"`, ts: s() })), O(600, () => ({ type: "graph", run_id: t, id: w, op: "read", nodes: x, ts: s() })), O(700 + Math.random() * 900, () => ({ type: "llm", run_id: t, id: w, tokens_in: 1500 + Math.round(Math.random() * 2e3), tokens_out: 200 + Math.round(Math.random() * 400), latency_ms: 900 + Math.random() * 1200, ts: s() }));
|
|
1961
|
-
const [
|
|
1962
|
-
O(400, () => ({ type: "mcp", run_id: t, id: w, server:
|
|
1989
|
+
const [N, X] = Ae(D ? [["analytics", "query_metrics"], ["github", "search_code"]] : [["warehouse", "run_sql"], ["analytics", "list_incidents"], ["google-drive", "read_doc"]]), j = 600 + Math.random() * 1400, [K, L] = Ae(Do[N]);
|
|
1990
|
+
O(400, () => ({ type: "mcp", run_id: t, id: w, server: N, tool: X, phase: "call", resource: K, resource_kind: L, ts: s() })), O(j, () => ({ type: "mcp", run_id: t, id: w, server: N, tool: X, phase: "result", latency_ms: j, resource: K, resource_kind: L, ts: s() })), Math.random() < 0.7 && O(500, () => ({ type: "graph", run_id: t, id: w, op: "read", nodes: Ae(Kt), ts: s() })), F && O(300, () => ({ type: "skill", run_id: t, id: w, name: F, status: "end", ts: s() })), O(800 + Math.random() * 1200, () => ({ type: "message", run_id: t, from_id: w, to_id: m, text: `Found ${2 + Math.floor(Math.random() * 6)} linked records`, ts: s() })), O(200, () => ({ type: "exit", run_id: t, id: w, status: "done", ts: s() })), a = Math.max(a, I);
|
|
1963
1991
|
}), l(m), f(m, 1300), S("research", "done", 300);
|
|
1964
|
-
const
|
|
1965
|
-
S("write", "running", 200),
|
|
1992
|
+
const R = `${t}:writer`;
|
|
1993
|
+
S("write", "running", 200), i(R, "writer", m), M(m, R, "Findings merged - draft the brief", 120), c(m, 200), l(R);
|
|
1966
1994
|
const P = [Ae(["pptx", "docx", "pdf"]), "dataviz", "haiku"].slice(0, 2 + Math.floor(Math.random() * 2));
|
|
1967
|
-
return P.forEach((w, V) => o(
|
|
1995
|
+
return P.forEach((w, V) => o(R, w, V ? 500 : 150)), f(R, 1800), r(400, () => ({ type: "graph", run_id: t, id: R, op: "write", nodes: [`Brief: ${n}`, ...Ae(Kt).slice(0, 2)], ts: s() })), r(300, () => ({ type: "mcp", run_id: t, id: R, server: "slack", tool: "post_message", phase: "call", resource: "Slack API", resource_kind: "api", ts: s() })), r(700, () => ({ type: "mcp", run_id: t, id: R, server: "slack", tool: "post_message", phase: "result", latency_ms: 700, resource: "Slack API", resource_kind: "api", ts: s() })), P.forEach((w, V) => d(R, w, V ? 900 : 300)), S("write", "done", 400), r(150, () => ({ type: "final", run_id: t, text: `Brief on "${n}": linked accounts, incidents and metrics summarized with sources.`, ts: s() })), c(R, 100), r(200, () => ({ type: "run", run_id: t, status: "completed", topic: n, workflow: "research_brief", ts: s() })), a;
|
|
1968
1996
|
}
|
|
1969
|
-
function
|
|
1970
|
-
|
|
1997
|
+
function Bo() {
|
|
1998
|
+
Tn(!0);
|
|
1971
1999
|
let e = !1;
|
|
1972
2000
|
const t = [];
|
|
1973
2001
|
let n = 0;
|
|
1974
2002
|
const s = () => {
|
|
1975
2003
|
if (e) return;
|
|
1976
2004
|
n++;
|
|
1977
|
-
const
|
|
2005
|
+
const i = Lo((l, u) => {
|
|
1978
2006
|
t.push(
|
|
1979
2007
|
window.setTimeout(() => {
|
|
1980
2008
|
if (e) return;
|
|
1981
|
-
const f =
|
|
1982
|
-
(Array.isArray(f) ? f : [f]).forEach(
|
|
2009
|
+
const f = u(performance.now());
|
|
2010
|
+
(Array.isArray(f) ? f : [f]).forEach(Ts);
|
|
1983
2011
|
}, l)
|
|
1984
2012
|
);
|
|
1985
2013
|
});
|
|
1986
|
-
t.push(window.setTimeout(() => (n--,
|
|
1987
|
-
},
|
|
2014
|
+
t.push(window.setTimeout(() => (n--, a()), i + 300));
|
|
2015
|
+
}, a = () => {
|
|
1988
2016
|
if (!e)
|
|
1989
|
-
for (; n <
|
|
2017
|
+
for (; n < No; ) {
|
|
1990
2018
|
const r = 1500 + Math.random() * 3500;
|
|
1991
2019
|
n++, t.push(window.setTimeout(() => (n--, s()), r));
|
|
1992
2020
|
}
|
|
1993
2021
|
};
|
|
1994
|
-
return s(), t.push(window.setTimeout(
|
|
1995
|
-
e = !0, t.forEach(clearTimeout),
|
|
2022
|
+
return s(), t.push(window.setTimeout(a, 2500)), () => {
|
|
2023
|
+
e = !0, t.forEach(clearTimeout), Tn(!1);
|
|
1996
2024
|
};
|
|
1997
2025
|
}
|
|
1998
|
-
const
|
|
2026
|
+
const Je = ["Customer", "Account", "Incident", "Ticket", "Product", "Region", "Metric", "Team"], is = [0.24, 0.24, 0.22, 0.12, 0.06, 0.03, 0.05, 0.04], Qt = [
|
|
1999
2027
|
"Acme Corp",
|
|
2000
2028
|
"Globex",
|
|
2001
2029
|
"Initech",
|
|
@@ -2019,38 +2047,38 @@ const Ze = ["Customer", "Account", "Incident", "Ticket", "Product", "Region", "M
|
|
|
2019
2047
|
"Release 4.12",
|
|
2020
2048
|
"Renewal 2026"
|
|
2021
2049
|
];
|
|
2022
|
-
function
|
|
2023
|
-
const t = Array.from({ length: e }, (s,
|
|
2024
|
-
if (
|
|
2025
|
-
let r = Math.random(),
|
|
2026
|
-
for (;
|
|
2027
|
-
return { id: `n${
|
|
2050
|
+
function $s(e = 320) {
|
|
2051
|
+
const t = Array.from({ length: e }, (s, a) => {
|
|
2052
|
+
if (a < Qt.length) return { id: Qt[a], name: Qt[a], kind: Je[a % Je.length] };
|
|
2053
|
+
let r = Math.random(), i = 0;
|
|
2054
|
+
for (; i < is.length - 1 && (r -= is[i]) > 0; ) i++;
|
|
2055
|
+
return { id: `n${a}`, name: `${Je[i]} ${a}`, kind: Je[i] };
|
|
2028
2056
|
}), n = Array.from({ length: e }, () => ({ source: t[Math.floor(Math.random() * e)].id, target: t[Math.floor(Math.random() * e)].id }));
|
|
2029
2057
|
return { nodes: t, links: n };
|
|
2030
2058
|
}
|
|
2031
|
-
const
|
|
2032
|
-
class
|
|
2059
|
+
const an = { nodes: [], links: [] }, Uo = 400;
|
|
2060
|
+
class Zo {
|
|
2033
2061
|
constructor() {
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2062
|
+
_e(this, "nodes", []);
|
|
2063
|
+
_e(this, "links", []);
|
|
2064
|
+
_e(this, "seen", /* @__PURE__ */ new Set());
|
|
2065
|
+
_e(this, "linkSeen", /* @__PURE__ */ new Set());
|
|
2038
2066
|
}
|
|
2039
2067
|
/** add the event's nodes (+ chain links between them); true when anything new was added */
|
|
2040
2068
|
add(t) {
|
|
2041
2069
|
let n = !1;
|
|
2042
2070
|
const s = [];
|
|
2043
|
-
for (const
|
|
2044
|
-
const r = String(
|
|
2071
|
+
for (const a of t) {
|
|
2072
|
+
const r = String(a).trim();
|
|
2045
2073
|
if (!r) continue;
|
|
2046
|
-
const
|
|
2047
|
-
s.push(
|
|
2074
|
+
const i = r.toLowerCase();
|
|
2075
|
+
s.push(i), !(this.seen.has(i) || this.nodes.length >= Uo) && (this.seen.add(i), this.nodes.push({ id: i, name: r, kind: Je[Math.floor(dn(i, 3) * Je.length)] }), n = !0);
|
|
2048
2076
|
}
|
|
2049
|
-
for (let
|
|
2050
|
-
const r = s[
|
|
2051
|
-
if (r ===
|
|
2052
|
-
const l = r <
|
|
2053
|
-
this.linkSeen.has(l) || (this.linkSeen.add(l), this.links.push({ source: r, target:
|
|
2077
|
+
for (let a = 1; a < s.length; a++) {
|
|
2078
|
+
const r = s[a - 1], i = s[a];
|
|
2079
|
+
if (r === i || !this.seen.has(r) || !this.seen.has(i)) continue;
|
|
2080
|
+
const l = r < i ? `${r}|${i}` : `${i}|${r}`;
|
|
2081
|
+
this.linkSeen.has(l) || (this.linkSeen.add(l), this.links.push({ source: r, target: i }), n = !0);
|
|
2054
2082
|
}
|
|
2055
2083
|
return n;
|
|
2056
2084
|
}
|
|
@@ -2058,17 +2086,17 @@ class Io {
|
|
|
2058
2086
|
return { nodes: [...this.nodes], links: [...this.links] };
|
|
2059
2087
|
}
|
|
2060
2088
|
}
|
|
2061
|
-
function
|
|
2089
|
+
function ct(e) {
|
|
2062
2090
|
const t = {};
|
|
2063
2091
|
return e.token && (t.authorization = `Bearer ${e.token}`), e.scope && (t["x-agentglow-scope"] = e.scope), e.run && (t["x-agentglow-run"] = e.run), t;
|
|
2064
2092
|
}
|
|
2065
|
-
const
|
|
2093
|
+
const Jo = (e, t) => new Promise((n) => {
|
|
2066
2094
|
const s = window.setTimeout(n, e);
|
|
2067
2095
|
t.addEventListener("abort", () => (window.clearTimeout(s), n()), { once: !0 });
|
|
2068
2096
|
});
|
|
2069
|
-
function
|
|
2070
|
-
const
|
|
2071
|
-
let
|
|
2097
|
+
function Ho(e, t, n, s) {
|
|
2098
|
+
const a = new AbortController(), { signal: r } = a;
|
|
2099
|
+
let i = 2e3, l = 0;
|
|
2072
2100
|
return (async () => {
|
|
2073
2101
|
for (; !r.aborted; ) {
|
|
2074
2102
|
try {
|
|
@@ -2077,7 +2105,7 @@ function qo(e, t, n, s) {
|
|
|
2077
2105
|
if (!f.ok || !f.body) throw new Error(`stream ${f.status}`);
|
|
2078
2106
|
l = 0;
|
|
2079
2107
|
const c = f.body.pipeThrough(new TextDecoderStream()).getReader();
|
|
2080
|
-
let M = "", o = [],
|
|
2108
|
+
let M = "", o = [], d = "";
|
|
2081
2109
|
for (; ; ) {
|
|
2082
2110
|
const { value: S, done: A } = await c.read();
|
|
2083
2111
|
if (A) break;
|
|
@@ -2086,146 +2114,168 @@ function qo(e, t, n, s) {
|
|
|
2086
2114
|
M = m.pop() ?? "";
|
|
2087
2115
|
for (const b of m) {
|
|
2088
2116
|
if (b === "") {
|
|
2089
|
-
o.length && (
|
|
2090
|
-
`)), o = [],
|
|
2117
|
+
o.length && (d === "" || d === "message") && n(o.join(`
|
|
2118
|
+
`)), o = [], d = "";
|
|
2091
2119
|
continue;
|
|
2092
2120
|
}
|
|
2093
2121
|
if (b.startsWith(":")) continue;
|
|
2094
|
-
const v = b.indexOf(":"),
|
|
2122
|
+
const v = b.indexOf(":"), W = v < 0 ? b : b.slice(0, v);
|
|
2095
2123
|
let T = v < 0 ? "" : b.slice(v + 1);
|
|
2096
|
-
T.startsWith(" ") && (T = T.slice(1)),
|
|
2124
|
+
T.startsWith(" ") && (T = T.slice(1)), W === "data" ? o.push(T) : W === "event" ? d = T : W === "retry" && /^\d+$/.test(T) && (i = Number(T));
|
|
2097
2125
|
}
|
|
2098
2126
|
}
|
|
2099
2127
|
} catch {
|
|
2100
2128
|
if (r.aborted) return;
|
|
2101
2129
|
}
|
|
2102
|
-
const
|
|
2103
|
-
l = Math.min(l + 1, 6), await
|
|
2130
|
+
const u = Math.min(i * 2 ** l, 3e4) * (0.75 + Math.random() * 0.5);
|
|
2131
|
+
l = Math.min(l + 1, 6), await Jo(u, r);
|
|
2104
2132
|
}
|
|
2105
|
-
})(), () =>
|
|
2133
|
+
})(), () => a.abort();
|
|
2134
|
+
}
|
|
2135
|
+
let _ = null, on = !1;
|
|
2136
|
+
const Fe = /* @__PURE__ */ new Set(), Ie = () => Fe.forEach((e) => e());
|
|
2137
|
+
function Ct(e) {
|
|
2138
|
+
on !== e && (on = e, Ie());
|
|
2139
|
+
}
|
|
2140
|
+
const bn = [];
|
|
2141
|
+
let er = bn;
|
|
2142
|
+
function tr(e) {
|
|
2143
|
+
er = e.length ? e : bn, Ie();
|
|
2144
|
+
}
|
|
2145
|
+
function jo() {
|
|
2146
|
+
return it(
|
|
2147
|
+
(e) => (Fe.add(e), () => Fe.delete(e)),
|
|
2148
|
+
() => er,
|
|
2149
|
+
() => bn
|
|
2150
|
+
);
|
|
2106
2151
|
}
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2152
|
+
async function Xo(e, t) {
|
|
2153
|
+
try {
|
|
2154
|
+
const n = await fetch(`${e}/live/run`, { headers: { ...ct(t), accept: "application/json" }, signal: AbortSignal.timeout(5e3) }), s = n.ok ? await n.json() : {};
|
|
2155
|
+
return Array.isArray(s.workflows) ? s.workflows.filter((a) => a && typeof a.id == "string") : [];
|
|
2156
|
+
} catch {
|
|
2157
|
+
return [];
|
|
2158
|
+
}
|
|
2111
2159
|
}
|
|
2112
|
-
function
|
|
2113
|
-
return
|
|
2114
|
-
(e) => (
|
|
2115
|
-
() =>
|
|
2160
|
+
function Ko() {
|
|
2161
|
+
return it(
|
|
2162
|
+
(e) => (Fe.add(e), () => Fe.delete(e)),
|
|
2163
|
+
() => on,
|
|
2116
2164
|
() => !1
|
|
2117
2165
|
);
|
|
2118
2166
|
}
|
|
2119
|
-
const
|
|
2120
|
-
async function
|
|
2167
|
+
const nr = "unauthorized";
|
|
2168
|
+
async function Qo(e, t) {
|
|
2121
2169
|
try {
|
|
2122
|
-
const n = await fetch(`${e}/live/health`, { headers:
|
|
2123
|
-
return n.status === 401 || n.status === 403 ?
|
|
2170
|
+
const n = await fetch(`${e}/live/health`, { headers: ct(t), signal: AbortSignal.timeout(2500) });
|
|
2171
|
+
return n.status === 401 || n.status === 403 ? nr : n.ok ? await n.json().catch(() => ({})) ?? {} : null;
|
|
2124
2172
|
} catch {
|
|
2125
2173
|
return null;
|
|
2126
2174
|
}
|
|
2127
2175
|
}
|
|
2128
|
-
async function
|
|
2176
|
+
async function Yo(e, t, n) {
|
|
2129
2177
|
if (typeof n.run == "boolean") return n.run;
|
|
2130
2178
|
try {
|
|
2131
|
-
return (await fetch(`${e}/live/run`, { headers: { ...
|
|
2179
|
+
return (await fetch(`${e}/live/run`, { headers: { ...ct(t), accept: "application/json" }, signal: AbortSignal.timeout(2500) })).status === 405;
|
|
2132
2180
|
} catch {
|
|
2133
2181
|
return !1;
|
|
2134
2182
|
}
|
|
2135
2183
|
}
|
|
2136
|
-
function
|
|
2184
|
+
function _o(e, t) {
|
|
2137
2185
|
const n = () => {
|
|
2138
|
-
e.dead || (
|
|
2186
|
+
e.dead || (zn("sim"), e.stop = Bo(), Ie());
|
|
2139
2187
|
};
|
|
2140
2188
|
if (t) return n();
|
|
2141
|
-
const s = (
|
|
2142
|
-
if (!(e.served || !e.events.add(
|
|
2189
|
+
const s = (a) => {
|
|
2190
|
+
if (!(e.served || !e.events.add(a))) {
|
|
2143
2191
|
if (!e.galaxy.nodes.length) {
|
|
2144
|
-
e.galaxy = e.events.snapshot(),
|
|
2192
|
+
e.galaxy = e.events.snapshot(), Ie();
|
|
2145
2193
|
return;
|
|
2146
2194
|
}
|
|
2147
2195
|
e.growTimer || (e.growTimer = window.setTimeout(() => {
|
|
2148
|
-
e.growTimer = 0, !(e.dead || e.served) && (e.galaxy = e.events.snapshot(),
|
|
2196
|
+
e.growTimer = 0, !(e.dead || e.served) && (e.galaxy = e.events.snapshot(), Ie());
|
|
2149
2197
|
}, 700));
|
|
2150
2198
|
}
|
|
2151
2199
|
};
|
|
2152
2200
|
(async () => {
|
|
2153
|
-
const
|
|
2201
|
+
const a = await Qo(e.source, e.auth);
|
|
2154
2202
|
if (e.dead) return;
|
|
2155
2203
|
const r = () => {
|
|
2156
|
-
e.dead || (
|
|
2204
|
+
e.dead || (Ps(!0), Ct(!1));
|
|
2157
2205
|
};
|
|
2158
|
-
if (
|
|
2159
|
-
if (!
|
|
2160
|
-
return e.galaxy =
|
|
2161
|
-
|
|
2162
|
-
const
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2206
|
+
if (a === nr) return r();
|
|
2207
|
+
if (!a)
|
|
2208
|
+
return e.galaxy = $s(), n();
|
|
2209
|
+
zn("live");
|
|
2210
|
+
const i = ct(e.auth);
|
|
2211
|
+
Yo(e.source, e.auth, a).then((l) => {
|
|
2212
|
+
e.dead || (Ct(l), l && Xo(e.source, e.auth).then((u) => !e.dead && tr(u)));
|
|
2213
|
+
}), fetch(`${e.source}/live/graph`, { headers: i }).then((l) => l.status === 401 || l.status === 403 ? (r(), null) : l.ok ? l.json() : null).then((l) => {
|
|
2214
|
+
var u;
|
|
2215
|
+
!e.dead && ((u = l == null ? void 0 : l.nodes) != null && u.length) && (e.galaxy = l, e.served = !0, Fr(l.label ?? "FalkorDB · knowledge graph"), Ie());
|
|
2166
2216
|
}).catch(() => {
|
|
2167
|
-
}), e.stop =
|
|
2217
|
+
}), e.stop = Ho(`${e.source}/live/stream`, i, (l) => {
|
|
2168
2218
|
try {
|
|
2169
|
-
const
|
|
2170
|
-
|
|
2219
|
+
const u = JSON.parse(l), f = h.hasGraph;
|
|
2220
|
+
Ts(u), u.type === "graph" && Array.isArray(u.nodes) && (s(u.nodes), !f && h.hasGraph && Ie());
|
|
2171
2221
|
} catch {
|
|
2172
2222
|
}
|
|
2173
2223
|
}, r);
|
|
2174
2224
|
})();
|
|
2175
2225
|
}
|
|
2176
|
-
function
|
|
2226
|
+
function sr(e) {
|
|
2177
2227
|
var t;
|
|
2178
|
-
e.dead = !0, (t = e.stop) == null || t.call(e), e.growTimer && window.clearTimeout(e.growTimer), _ === e && (_ = null,
|
|
2228
|
+
e.dead = !0, (t = e.stop) == null || t.call(e), e.growTimer && window.clearTimeout(e.growTimer), _ === e && (_ = null, Ct(!1), tr([]));
|
|
2179
2229
|
}
|
|
2180
|
-
function
|
|
2230
|
+
function $o(e, t, n) {
|
|
2181
2231
|
const s = t ? "sim" : `live:${e}|${n.scope ?? ""}|${n.run ?? ""}|${n.token ?? ""}`;
|
|
2182
2232
|
if (_ && _.key === s && !_.dead)
|
|
2183
2233
|
return _.refs++, _;
|
|
2184
|
-
_ && ((_.source !== e || _.key === "sim" || s === "sim") && console.warn(`[agentglow] one data source per page: switching from "${_.source || _.key}" to "${e || s}"`),
|
|
2185
|
-
const
|
|
2186
|
-
return _ =
|
|
2234
|
+
_ && ((_.source !== e || _.key === "sim" || s === "sim") && console.warn(`[agentglow] one data source per page: switching from "${_.source || _.key}" to "${e || s}"`), sr(_)), Lr();
|
|
2235
|
+
const a = { key: s, source: e, auth: n, refs: 1, dead: !1, galaxy: t ? $s() : an, served: !1, events: new Zo(), growTimer: 0 };
|
|
2236
|
+
return _ = a, _o(a, t), a;
|
|
2187
2237
|
}
|
|
2188
|
-
function
|
|
2238
|
+
function ei(e) {
|
|
2189
2239
|
window.setTimeout(() => {
|
|
2190
|
-
--e.refs <= 0 &&
|
|
2240
|
+
--e.refs <= 0 && sr(e);
|
|
2191
2241
|
}, 0);
|
|
2192
2242
|
}
|
|
2193
|
-
async function
|
|
2194
|
-
const
|
|
2195
|
-
return (
|
|
2243
|
+
async function ti(e, t) {
|
|
2244
|
+
const n = (_ == null ? void 0 : _.source) ?? "", s = (_ == null ? void 0 : _.auth) ?? {}, a = { topic: e, ...s.scope ? { scope: s.scope } : {}, ...t ? { workflow: t } : {} }, r = await fetch(`${n}/live/run`, { method: "POST", headers: { ...ct(s), "content-type": "application/json" }, body: JSON.stringify(a) });
|
|
2245
|
+
return (r.status === 404 || r.status === 405) && Ct(!1), (r.status === 401 || r.status === 403) && Ps(!0), r.ok ? (await r.json().catch(() => ({}))).run_id ?? "started" : null;
|
|
2196
2246
|
}
|
|
2197
|
-
function
|
|
2198
|
-
const { source: e, sim: t, scope: n, run: s, token:
|
|
2247
|
+
function ni() {
|
|
2248
|
+
const { source: e, sim: t, scope: n, run: s, token: a } = ln(), [r, i] = le(an);
|
|
2199
2249
|
return $(() => {
|
|
2200
|
-
const l =
|
|
2201
|
-
return
|
|
2202
|
-
|
|
2250
|
+
const l = $o(e, t, { scope: n || void 0, run: s || void 0, token: a || void 0 }), u = () => i(h.hasGraph ? l.galaxy : an);
|
|
2251
|
+
return u(), Fe.add(u), () => {
|
|
2252
|
+
Fe.delete(u), ei(l);
|
|
2203
2253
|
};
|
|
2204
|
-
}, [e, t, n, s,
|
|
2254
|
+
}, [e, t, n, s, a]), r;
|
|
2205
2255
|
}
|
|
2206
|
-
function
|
|
2207
|
-
const n = e.nodes.findIndex((
|
|
2256
|
+
function Tc(e, t) {
|
|
2257
|
+
const n = e.nodes.findIndex((a) => a.name.toLowerCase() === t.toLowerCase());
|
|
2208
2258
|
if (n >= 0) return n;
|
|
2209
2259
|
let s = 7;
|
|
2210
|
-
for (const
|
|
2260
|
+
for (const a of t.toLowerCase()) s = s * 31 + a.charCodeAt(0) >>> 0;
|
|
2211
2261
|
return e.nodes.length ? s % e.nodes.length : 0;
|
|
2212
2262
|
}
|
|
2213
|
-
const
|
|
2214
|
-
function
|
|
2263
|
+
const si = kr;
|
|
2264
|
+
function ot(e) {
|
|
2215
2265
|
return e.replace("run-", "").slice(0, 6);
|
|
2216
2266
|
}
|
|
2217
2267
|
function oe(e) {
|
|
2218
2268
|
const t = h.instances.get(e) ?? h.archive.get(e);
|
|
2219
|
-
if (t) return `${t.name} · ${
|
|
2220
|
-
const [n, s,
|
|
2221
|
-
return `${s ?? e.slice(0, 6)}${
|
|
2269
|
+
if (t) return `${t.name} · ${ot(t.run)}`;
|
|
2270
|
+
const [n, s, a] = e.split(":");
|
|
2271
|
+
return `${s ?? e.slice(0, 6)}${a !== void 0 ? `#${Number(a) + 1}` : ""} · ${ot(n)}`;
|
|
2222
2272
|
}
|
|
2223
|
-
function
|
|
2273
|
+
function rr(e) {
|
|
2224
2274
|
switch (e.type) {
|
|
2225
2275
|
case "run":
|
|
2226
2276
|
return `run ${e.status} · ${e.topic}`;
|
|
2227
2277
|
case "step":
|
|
2228
|
-
return `step ${e.step} ${e.status} · ${
|
|
2278
|
+
return `step ${e.step} ${e.status} · ${ot(e.run_id)}`;
|
|
2229
2279
|
case "spawn":
|
|
2230
2280
|
return `spawned ${oe(e.id)}`;
|
|
2231
2281
|
case "exit":
|
|
@@ -2248,50 +2298,50 @@ function _s(e) {
|
|
|
2248
2298
|
case "skill":
|
|
2249
2299
|
return e.status === "start" ? `${oe(e.id)} · skill: ${e.name}` : `${oe(e.id)} · skill: ${e.name} done`;
|
|
2250
2300
|
case "final":
|
|
2251
|
-
return `final answer · ${
|
|
2301
|
+
return `final answer · ${ot(e.run_id)}`;
|
|
2252
2302
|
}
|
|
2253
2303
|
}
|
|
2254
|
-
const
|
|
2255
|
-
function
|
|
2304
|
+
const ri = "#f5b83d";
|
|
2305
|
+
function ai(e) {
|
|
2256
2306
|
var s;
|
|
2257
|
-
if (e.type === "skill") return
|
|
2307
|
+
if (e.type === "skill") return ri;
|
|
2258
2308
|
const t = "id" in e ? e.id : e.type === "message" ? e.from_id : null, n = t ? h.instances.get(t) : null;
|
|
2259
|
-
return n ?
|
|
2309
|
+
return n ? We[n.type] : e.type === "graph" ? "#c7d2fe" : e.type === "mcp" ? ((s = h.mcpServers.get(e.server)) == null ? void 0 : s.color) ?? "#94a3b8" : e.type === "run" || e.type === "step" ? "#fde68a" : "#c7d2fe";
|
|
2260
2310
|
}
|
|
2261
|
-
function
|
|
2262
|
-
const { hud: t } =
|
|
2311
|
+
function oi(e) {
|
|
2312
|
+
const { hud: t } = ln();
|
|
2263
2313
|
return $(() => {
|
|
2264
|
-
e.selected &&
|
|
2265
|
-
}, [e.selected]), t ? /* @__PURE__ */ p(
|
|
2314
|
+
e.selected && He(e.selected);
|
|
2315
|
+
}, [e.selected]), t ? /* @__PURE__ */ p(di, { ...e }) : /* @__PURE__ */ p(ye, { children: e.children });
|
|
2266
2316
|
}
|
|
2267
|
-
const
|
|
2268
|
-
function
|
|
2317
|
+
const cn = ["agents", "events", "selected"], Yt = { agents: "Agents", events: "Events", selected: "Selected" }, ii = 720, ar = "agentglow.hud.sidebar";
|
|
2318
|
+
function ci() {
|
|
2269
2319
|
try {
|
|
2270
|
-
const e = JSON.parse(localStorage.getItem(
|
|
2271
|
-
if (e &&
|
|
2320
|
+
const e = JSON.parse(localStorage.getItem(ar) ?? "null");
|
|
2321
|
+
if (e && cn.includes(e.tab)) return { collapsed: !!e.collapsed, tab: e.tab === "selected" ? "agents" : e.tab };
|
|
2272
2322
|
} catch {
|
|
2273
2323
|
}
|
|
2274
2324
|
return { collapsed: !1, tab: "agents" };
|
|
2275
2325
|
}
|
|
2276
|
-
function
|
|
2326
|
+
function li(e) {
|
|
2277
2327
|
try {
|
|
2278
|
-
localStorage.setItem(
|
|
2328
|
+
localStorage.setItem(ar, JSON.stringify(e));
|
|
2279
2329
|
} catch {
|
|
2280
2330
|
}
|
|
2281
2331
|
}
|
|
2282
|
-
const
|
|
2283
|
-
function
|
|
2284
|
-
const { embedded: r, scope:
|
|
2332
|
+
const ui = (e) => e >= 1e3 ? `${(e / 1e3).toFixed(1)}k` : `${e}`;
|
|
2333
|
+
function di({ title: e, subtitle: t, onClose: n, inset: s, children: a }) {
|
|
2334
|
+
const { embedded: r, scope: i, run: l } = ln(), u = Ko(), f = Xe(), [, c] = le(0), [M, o] = le(!1), [d, S] = le(ci), A = B(null), m = B(!1), b = B(null), v = B(null), W = B(null), T = B({ t0: performance.now(), head: null, at: performance.now(), done: !1 });
|
|
2285
2335
|
$(() => {
|
|
2286
|
-
const k = window.setInterval(() => c((
|
|
2336
|
+
const k = window.setInterval(() => c((G) => G + 1), 500);
|
|
2287
2337
|
return () => clearInterval(k);
|
|
2288
|
-
}, []),
|
|
2289
|
-
var
|
|
2290
|
-
const k = (
|
|
2291
|
-
k && k.clientWidth <
|
|
2338
|
+
}, []), xr(() => {
|
|
2339
|
+
var G;
|
|
2340
|
+
const k = (G = v.current) == null ? void 0 : G.closest(".scene-root");
|
|
2341
|
+
k && k.clientWidth < ii && (m.current = !0, S((H) => ({ ...H, collapsed: !0 })));
|
|
2292
2342
|
}, []);
|
|
2293
|
-
const
|
|
2294
|
-
S(k), m.current ||
|
|
2343
|
+
const R = (k) => {
|
|
2344
|
+
S(k), m.current || li(k);
|
|
2295
2345
|
}, P = f.selected;
|
|
2296
2346
|
$(() => {
|
|
2297
2347
|
P && S((k) => (k.tab !== "selected" && (A.current = k), { collapsed: !1, tab: "selected" }));
|
|
@@ -2299,62 +2349,62 @@ function ei({ title: e, subtitle: t, onClose: n, inset: s, children: i }) {
|
|
|
2299
2349
|
var Q;
|
|
2300
2350
|
const k = (Q = v.current) == null ? void 0 : Q.closest(".scene-root");
|
|
2301
2351
|
if (!k || typeof ResizeObserver > "u") return;
|
|
2302
|
-
let
|
|
2352
|
+
let G = 0;
|
|
2303
2353
|
const H = new ResizeObserver(() => {
|
|
2304
|
-
cancelAnimationFrame(
|
|
2354
|
+
cancelAnimationFrame(G), G = requestAnimationFrame(() => k.dispatchEvent(new Event(en)));
|
|
2305
2355
|
});
|
|
2306
2356
|
return b.current && H.observe(b.current), v.current && H.observe(v.current), () => {
|
|
2307
|
-
cancelAnimationFrame(
|
|
2357
|
+
cancelAnimationFrame(G), H.disconnect();
|
|
2308
2358
|
};
|
|
2309
2359
|
}, []);
|
|
2310
2360
|
const w = T.current;
|
|
2311
2361
|
if (!w.done) {
|
|
2312
|
-
const k = performance.now(),
|
|
2313
|
-
|
|
2362
|
+
const k = performance.now(), G = f.ticker[0] ?? null;
|
|
2363
|
+
G !== w.head && (w.head = G, w.at = k), G && k - w.at > 1e3 || k - w.t0 > 4e3 ? w.done = !0 : W.current = G;
|
|
2314
2364
|
}
|
|
2315
|
-
|
|
2316
|
-
const V =
|
|
2317
|
-
|
|
2318
|
-
const k = A.current ?? { collapsed:
|
|
2319
|
-
A.current = null,
|
|
2320
|
-
},
|
|
2321
|
-
return /* @__PURE__ */
|
|
2322
|
-
/* @__PURE__ */
|
|
2323
|
-
/* @__PURE__ */
|
|
2324
|
-
/* @__PURE__ */
|
|
2325
|
-
/* @__PURE__ */
|
|
2365
|
+
d.tab === "events" && !d.collapsed && (W.current = f.ticker[0] ?? null);
|
|
2366
|
+
const V = W.current ? f.ticker.indexOf(W.current) : -1, I = d.tab === "events" && !d.collapsed ? 0 : V >= 0 ? V : f.ticker.length, O = [...f.instances.values()].filter(te), x = [...f.runs.values()].filter((k) => k.status === "started"), D = f.stats.graphReads + f.stats.graphWrites, F = () => {
|
|
2367
|
+
He(null), n == null || n();
|
|
2368
|
+
const k = A.current ?? { collapsed: d.collapsed, tab: "agents" };
|
|
2369
|
+
A.current = null, R(k);
|
|
2370
|
+
}, N = (k) => R({ collapsed: !1, tab: k }), X = r ? "" : location.pathname.replace(/\/$/, "").slice(1), j = r ? "" : location.search, K = fn(f.selected), L = { agents: O.length ? `${O.length}` : "", events: I ? I >= 60 ? "60+" : `${I}` : "", selected: K ? "1" : "" };
|
|
2371
|
+
return /* @__PURE__ */ E(ye, { children: [
|
|
2372
|
+
/* @__PURE__ */ E("div", { ref: b, className: `hud-topwrap${d.collapsed ? " is-rail" : ""}`, children: [
|
|
2373
|
+
/* @__PURE__ */ E("header", { className: "hud hud-top", children: [
|
|
2374
|
+
/* @__PURE__ */ E("div", { className: "hud-bar", children: [
|
|
2375
|
+
/* @__PURE__ */ E("div", { className: "hud-title", children: [
|
|
2326
2376
|
/* @__PURE__ */ p("span", { className: "hud-dot" }),
|
|
2327
2377
|
e
|
|
2328
2378
|
] }),
|
|
2329
2379
|
f.mode === "sim" && /* @__PURE__ */ p("span", { className: "hud-badge", children: "sim" }),
|
|
2330
2380
|
f.mode === "live" && !f.unauthorized && /* @__PURE__ */ p("span", { className: "hud-badge hud-badge--live", children: "live" }),
|
|
2331
|
-
|
|
2332
|
-
l && /* @__PURE__ */ p(
|
|
2381
|
+
i && /* @__PURE__ */ p(ls, { label: "scope", value: i }),
|
|
2382
|
+
l && /* @__PURE__ */ p(ls, { label: "run", value: l }),
|
|
2333
2383
|
f.unauthorized && /* @__PURE__ */ p("span", { className: "hud-badge hud-badge--denied", role: "status", title: "The server answered 401: this token / scope is not allowed to watch these agents", children: "not authorized for this scope" }),
|
|
2334
2384
|
/* @__PURE__ */ p("button", { className: `hud-info${M ? " on" : ""}`, onClick: () => o((k) => !k), "aria-label": "What am I looking at?", "aria-expanded": M, title: "What am I looking at?", children: "i" }),
|
|
2335
|
-
f.mode === "live" &&
|
|
2336
|
-
!r && /* @__PURE__ */
|
|
2385
|
+
f.mode === "live" && u && /* @__PURE__ */ p(vi, {}),
|
|
2386
|
+
!r && /* @__PURE__ */ E("select", { className: "hud-theme", value: X, "aria-label": "Theme", onChange: (k) => location.href = `/${k.target.value}${j}`, children: [
|
|
2337
2387
|
/* @__PURE__ */ p("option", { value: "", children: "all themes" }),
|
|
2338
|
-
|
|
2388
|
+
si.map((k) => /* @__PURE__ */ p("option", { value: k, children: k }, k))
|
|
2339
2389
|
] }),
|
|
2340
|
-
/* @__PURE__ */
|
|
2341
|
-
/* @__PURE__ */
|
|
2390
|
+
/* @__PURE__ */ E("div", { className: "hud-stats", "aria-label": "Live totals", children: [
|
|
2391
|
+
/* @__PURE__ */ E("span", { className: "hud-stat", title: "active runs", children: [
|
|
2342
2392
|
/* @__PURE__ */ p("b", { children: x.length }),
|
|
2343
2393
|
" runs"
|
|
2344
2394
|
] }),
|
|
2345
|
-
/* @__PURE__ */
|
|
2395
|
+
/* @__PURE__ */ E("span", { className: "hud-stat", title: "agents alive", children: [
|
|
2346
2396
|
/* @__PURE__ */ p("b", { children: O.length }),
|
|
2347
2397
|
" agents"
|
|
2348
2398
|
] }),
|
|
2349
|
-
/* @__PURE__ */
|
|
2350
|
-
/* @__PURE__ */ p("b", { children:
|
|
2399
|
+
/* @__PURE__ */ E("span", { className: "hud-stat", title: "tokens", children: [
|
|
2400
|
+
/* @__PURE__ */ p("b", { children: ui(f.stats.tokens) }),
|
|
2351
2401
|
" tok"
|
|
2352
2402
|
] }),
|
|
2353
|
-
D > 0 && /* @__PURE__ */
|
|
2403
|
+
D > 0 && /* @__PURE__ */ E("span", { className: "hud-stat", title: `graph reads ${f.stats.graphReads} · writes ${f.stats.graphWrites}`, children: [
|
|
2354
2404
|
/* @__PURE__ */ p("b", { children: D }),
|
|
2355
2405
|
" graph"
|
|
2356
2406
|
] }),
|
|
2357
|
-
f.stats.mcpCalls > 0 && /* @__PURE__ */
|
|
2407
|
+
f.stats.mcpCalls > 0 && /* @__PURE__ */ E("span", { className: "hud-stat", title: "MCP calls", children: [
|
|
2358
2408
|
/* @__PURE__ */ p("b", { children: f.stats.mcpCalls }),
|
|
2359
2409
|
" MCP"
|
|
2360
2410
|
] })
|
|
@@ -2362,81 +2412,81 @@ function ei({ title: e, subtitle: t, onClose: n, inset: s, children: i }) {
|
|
|
2362
2412
|
] }),
|
|
2363
2413
|
M && /* @__PURE__ */ p("div", { className: "hud-sub", children: t })
|
|
2364
2414
|
] }),
|
|
2365
|
-
/* @__PURE__ */
|
|
2366
|
-
/* @__PURE__ */ p(
|
|
2415
|
+
/* @__PURE__ */ E("div", { className: "hud-dock", children: [
|
|
2416
|
+
/* @__PURE__ */ p(mi, {}),
|
|
2367
2417
|
s
|
|
2368
2418
|
] })
|
|
2369
2419
|
] }),
|
|
2370
|
-
/* @__PURE__ */
|
|
2371
|
-
|
|
2372
|
-
/* @__PURE__ */ p("button", { className: "hs-collapse", onClick: () =>
|
|
2373
|
-
|
|
2374
|
-
/* @__PURE__ */ p(
|
|
2420
|
+
/* @__PURE__ */ E("aside", { ref: v, className: `hud hud-side${d.collapsed ? " is-rail" : ""}`, "aria-label": "Agent sidebar", children: [
|
|
2421
|
+
d.collapsed ? /* @__PURE__ */ E("nav", { className: "hs-rail", children: [
|
|
2422
|
+
/* @__PURE__ */ p("button", { className: "hs-collapse", onClick: () => R({ ...d, collapsed: !1 }), "aria-label": "Expand sidebar", title: "Expand sidebar", children: "«" }),
|
|
2423
|
+
cn.map((k) => /* @__PURE__ */ E("button", { className: `hs-icon${d.tab === k ? " on" : ""}`, onClick: () => N(k), "aria-label": `${Yt[k]}${L[k] ? ` (${L[k]})` : ""}`, title: Yt[k], children: [
|
|
2424
|
+
/* @__PURE__ */ p(fi, { tab: k }),
|
|
2375
2425
|
L[k] && /* @__PURE__ */ p("em", { children: k === "selected" ? "" : L[k] })
|
|
2376
2426
|
] }, k))
|
|
2377
|
-
] }) : /* @__PURE__ */
|
|
2378
|
-
|
|
2379
|
-
|
|
2427
|
+
] }) : /* @__PURE__ */ E("div", { className: "hs-head", role: "tablist", "aria-label": "Sidebar", children: [
|
|
2428
|
+
cn.map((k) => /* @__PURE__ */ E("button", { role: "tab", "aria-selected": d.tab === k, className: d.tab === k ? "on" : "", onClick: () => N(k), children: [
|
|
2429
|
+
Yt[k],
|
|
2380
2430
|
L[k] && k !== "selected" && /* @__PURE__ */ p("em", { children: L[k] })
|
|
2381
2431
|
] }, k)),
|
|
2382
|
-
/* @__PURE__ */ p("button", { className: "hs-collapse", onClick: () =>
|
|
2432
|
+
/* @__PURE__ */ p("button", { className: "hs-collapse", onClick: () => R({ ...d, collapsed: !0 }), "aria-label": "Collapse sidebar", title: "Collapse sidebar", children: "»" })
|
|
2383
2433
|
] }),
|
|
2384
|
-
/* @__PURE__ */ p("div", { className: "hs-body", hidden:
|
|
2385
|
-
/* @__PURE__ */ p("div", { className: "hs-body", hidden:
|
|
2386
|
-
/* @__PURE__ */ p("div", { className: "hs-body", hidden:
|
|
2434
|
+
/* @__PURE__ */ p("div", { className: "hs-body", hidden: d.collapsed || d.tab !== "agents", children: /* @__PURE__ */ p(xi, {}) }),
|
|
2435
|
+
/* @__PURE__ */ p("div", { className: "hs-body", hidden: d.collapsed || d.tab !== "events", children: /* @__PURE__ */ p(pi, {}) }),
|
|
2436
|
+
/* @__PURE__ */ p("div", { className: "hs-body", hidden: d.collapsed || d.tab !== "selected", children: K ? /* @__PURE__ */ E(ye, { children: [
|
|
2387
2437
|
/* @__PURE__ */ p("div", { className: "ap-head", children: /* @__PURE__ */ p("button", { className: "ap-link", onClick: F, "aria-label": "Close agent inspector", children: "← back" }) }),
|
|
2388
|
-
/* @__PURE__ */ p(
|
|
2438
|
+
/* @__PURE__ */ p(wi, { i: K })
|
|
2389
2439
|
] }) : /* @__PURE__ */ p("p", { className: "hs-empty", children: "Click an agent in the scene, the Agents list or the Events log to inspect it." }) })
|
|
2390
2440
|
] }),
|
|
2391
|
-
|
|
2441
|
+
a
|
|
2392
2442
|
] });
|
|
2393
2443
|
}
|
|
2394
|
-
function
|
|
2444
|
+
function fi({ tab: e }) {
|
|
2395
2445
|
const t = { width: 16, height: 16, viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: 1.5, strokeLinecap: "round", "aria-hidden": !0 };
|
|
2396
|
-
return e === "agents" ? /* @__PURE__ */
|
|
2446
|
+
return e === "agents" ? /* @__PURE__ */ E("svg", { ...t, children: [
|
|
2397
2447
|
/* @__PURE__ */ p("circle", { cx: "5", cy: "5", r: "2.2" }),
|
|
2398
2448
|
/* @__PURE__ */ p("circle", { cx: "11.5", cy: "6.5", r: "1.8" }),
|
|
2399
2449
|
/* @__PURE__ */ p("circle", { cx: "6.5", cy: "11.5", r: "1.8" }),
|
|
2400
2450
|
/* @__PURE__ */ p("path", { d: "M6.8 6.3l3 0.6M5.4 7.2l0.7 2.4" })
|
|
2401
|
-
] }) : e === "events" ? /* @__PURE__ */
|
|
2451
|
+
] }) : e === "events" ? /* @__PURE__ */ E("svg", { ...t, children: [
|
|
2402
2452
|
/* @__PURE__ */ p("path", { d: "M5.5 4h8M5.5 8h8M5.5 12h6" }),
|
|
2403
2453
|
/* @__PURE__ */ p("circle", { cx: "2.5", cy: "4", r: "0.6", fill: "currentColor" }),
|
|
2404
2454
|
/* @__PURE__ */ p("circle", { cx: "2.5", cy: "8", r: "0.6", fill: "currentColor" }),
|
|
2405
2455
|
/* @__PURE__ */ p("circle", { cx: "2.5", cy: "12", r: "0.6", fill: "currentColor" })
|
|
2406
|
-
] }) : /* @__PURE__ */
|
|
2456
|
+
] }) : /* @__PURE__ */ E("svg", { ...t, children: [
|
|
2407
2457
|
/* @__PURE__ */ p("circle", { cx: "8", cy: "8", r: "5" }),
|
|
2408
2458
|
/* @__PURE__ */ p("circle", { cx: "8", cy: "8", r: "1.6", fill: "currentColor" }),
|
|
2409
2459
|
/* @__PURE__ */ p("path", { d: "M8 1v2M8 13v2M1 8h2M13 8h2" })
|
|
2410
2460
|
] });
|
|
2411
2461
|
}
|
|
2412
|
-
function
|
|
2462
|
+
function hi(e) {
|
|
2413
2463
|
const t = "id" in e ? e.id : e.type === "message" ? e.from_id : null;
|
|
2414
2464
|
return t && fn(t) ? t : null;
|
|
2415
2465
|
}
|
|
2416
|
-
function
|
|
2417
|
-
const e =
|
|
2466
|
+
function pi() {
|
|
2467
|
+
const e = Xe();
|
|
2418
2468
|
return e.ticker.length ? /* @__PURE__ */ p("ul", { className: "hs-events", children: e.ticker.map((t, n) => {
|
|
2419
|
-
const s =
|
|
2469
|
+
const s = hi(t), a = /* @__PURE__ */ E(ye, { children: [
|
|
2420
2470
|
/* @__PURE__ */ p("i", {}),
|
|
2421
2471
|
t.type === "skill" && /* @__PURE__ */ p("b", { className: "hs-skill", children: t.status === "start" ? "skill" : "skill done" }),
|
|
2422
|
-
/* @__PURE__ */ p("span", { children:
|
|
2472
|
+
/* @__PURE__ */ p("span", { children: rr(t) })
|
|
2423
2473
|
] });
|
|
2424
|
-
return /* @__PURE__ */ p("li", { className: t.type === "skill" ? "is-skill" : void 0, style: { "--c":
|
|
2474
|
+
return /* @__PURE__ */ p("li", { className: t.type === "skill" ? "is-skill" : void 0, style: { "--c": ai(t) }, children: s ? /* @__PURE__ */ p("button", { onClick: () => He(s), title: "Inspect agent", children: a }) : /* @__PURE__ */ p("div", { children: a }) }, `${t.ts}-${t.type}-${n}`);
|
|
2425
2475
|
}) }) : /* @__PURE__ */ p("p", { className: "hs-empty", children: "Waiting for events…" });
|
|
2426
2476
|
}
|
|
2427
|
-
function
|
|
2428
|
-
const e =
|
|
2429
|
-
return e.crowded ? e.showAll ? /* @__PURE__ */
|
|
2477
|
+
function mi() {
|
|
2478
|
+
const e = La();
|
|
2479
|
+
return e.crowded ? e.showAll ? /* @__PURE__ */ E("div", { className: "hud hud-lod", children: [
|
|
2430
2480
|
/* @__PURE__ */ p("i", {}),
|
|
2431
|
-
/* @__PURE__ */
|
|
2481
|
+
/* @__PURE__ */ E("span", { children: [
|
|
2432
2482
|
"showing all ",
|
|
2433
2483
|
/* @__PURE__ */ p("b", { children: e.alive }),
|
|
2434
2484
|
" agents"
|
|
2435
2485
|
] }),
|
|
2436
|
-
/* @__PURE__ */ p("button", { onClick: () =>
|
|
2437
|
-
] }) : e.activeClusters ? /* @__PURE__ */
|
|
2486
|
+
/* @__PURE__ */ p("button", { onClick: () => Kn(!1), children: "group" })
|
|
2487
|
+
] }) : e.activeClusters ? /* @__PURE__ */ E("div", { className: "hud hud-lod", children: [
|
|
2438
2488
|
/* @__PURE__ */ p("i", {}),
|
|
2439
|
-
/* @__PURE__ */
|
|
2489
|
+
/* @__PURE__ */ E("span", { children: [
|
|
2440
2490
|
"grouped: ",
|
|
2441
2491
|
/* @__PURE__ */ p("b", { children: e.collapsedRuns }),
|
|
2442
2492
|
" run",
|
|
@@ -2446,246 +2496,270 @@ function ri() {
|
|
|
2446
2496
|
" cluster",
|
|
2447
2497
|
e.activeClusters === 1 ? "" : "s"
|
|
2448
2498
|
] }),
|
|
2449
|
-
e.expandedLane >= 0 && /* @__PURE__ */ p("button", { onClick:
|
|
2450
|
-
/* @__PURE__ */ p("button", { onClick: () =>
|
|
2499
|
+
e.expandedLane >= 0 && /* @__PURE__ */ p("button", { onClick: Fa, children: "collapse" }),
|
|
2500
|
+
/* @__PURE__ */ p("button", { onClick: () => Kn(!0), children: "show all" })
|
|
2451
2501
|
] }) : null : null;
|
|
2452
2502
|
}
|
|
2453
|
-
const
|
|
2454
|
-
let
|
|
2455
|
-
function
|
|
2503
|
+
const cs = ["Why is churn rising for Acme Corp?", "Root cause of payment latency incidents", "Which region has the most incidents?", "Is Fraud Shield worth expanding to Globex?"];
|
|
2504
|
+
let gi = 0;
|
|
2505
|
+
function ls({ label: e, value: t }) {
|
|
2456
2506
|
const n = t.length > 18 ? `${t.slice(0, 16)}…` : t;
|
|
2457
|
-
return /* @__PURE__ */
|
|
2507
|
+
return /* @__PURE__ */ E("span", { className: "hud-badge hud-chip", title: `${e}: ${t}`, children: [
|
|
2458
2508
|
e,
|
|
2459
2509
|
": ",
|
|
2460
2510
|
/* @__PURE__ */ p("b", { children: n })
|
|
2461
2511
|
] });
|
|
2462
2512
|
}
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2475
|
-
|
|
2513
|
+
const or = "agentglow.hud.workflow";
|
|
2514
|
+
function Ai() {
|
|
2515
|
+
try {
|
|
2516
|
+
return localStorage.getItem(or) ?? "";
|
|
2517
|
+
} catch {
|
|
2518
|
+
return "";
|
|
2519
|
+
}
|
|
2520
|
+
}
|
|
2521
|
+
function bi(e) {
|
|
2522
|
+
try {
|
|
2523
|
+
localStorage.setItem(or, e);
|
|
2524
|
+
} catch {
|
|
2525
|
+
}
|
|
2526
|
+
}
|
|
2527
|
+
function vi() {
|
|
2528
|
+
const e = jo(), [t, n] = le(Ai), [s, a] = le(!1), [r, i] = le(""), l = e.find((c) => c.id === t) ?? e[0], u = async () => {
|
|
2529
|
+
const c = (l == null ? void 0 : l.topic) || cs[gi++ % cs.length];
|
|
2530
|
+
a(!0);
|
|
2531
|
+
try {
|
|
2532
|
+
i(await ti(c, l == null ? void 0 : l.id) ? `started · ${c}` : "failed to start"), window.setTimeout(() => i(""), 6e3);
|
|
2533
|
+
} finally {
|
|
2534
|
+
a(!1);
|
|
2535
|
+
}
|
|
2536
|
+
}, f = (c) => {
|
|
2537
|
+
n(c), bi(c);
|
|
2538
|
+
};
|
|
2539
|
+
return /* @__PURE__ */ E("div", { className: "hud-run", children: [
|
|
2540
|
+
e.length > 1 && /* @__PURE__ */ p("select", { value: l == null ? void 0 : l.id, onChange: (c) => f(c.target.value), disabled: s, "aria-label": "Workflow to run", title: l == null ? void 0 : l.topic, children: e.map((c) => /* @__PURE__ */ p("option", { value: c.id, children: c.label }, c.id)) }),
|
|
2541
|
+
/* @__PURE__ */ p("button", { onClick: u, disabled: s, title: (l == null ? void 0 : l.topic) || void 0, children: s ? "Starting…" : "▶ Run agents" }),
|
|
2542
|
+
r && /* @__PURE__ */ p("span", { children: r })
|
|
2476
2543
|
] });
|
|
2477
2544
|
}
|
|
2478
|
-
const
|
|
2479
|
-
function
|
|
2545
|
+
const Mi = ["all", "alive", "thinking", "waiting", "done"];
|
|
2546
|
+
function yi(e, t) {
|
|
2480
2547
|
return t === "all" ? !0 : t === "alive" ? te(e) : t === "done" ? !te(e) : te(e) && e.status === t;
|
|
2481
2548
|
}
|
|
2482
|
-
function
|
|
2549
|
+
function ir(e) {
|
|
2483
2550
|
const t = ((e.doneAt || e.exitAt || performance.now()) - e.bornAt) / 1e3;
|
|
2484
2551
|
return t < 60 ? `${t.toFixed(0)}s` : `${(t / 60).toFixed(1)}m`;
|
|
2485
2552
|
}
|
|
2486
|
-
function
|
|
2553
|
+
function _t(e) {
|
|
2487
2554
|
return !te(e) || !e.skill || e.skillEndAt ? "" : e.skill;
|
|
2488
2555
|
}
|
|
2489
|
-
function
|
|
2490
|
-
const e =
|
|
2556
|
+
function xi() {
|
|
2557
|
+
const e = Xe(), [t, n] = le(""), [s, a] = le(/* @__PURE__ */ new Set()), [r, i] = le("alive"), [l, u] = le(""), f = ne(() => [...e.instances.values(), ...[...e.archive.values()].reverse()], [e.instances.size, e.archive.size, e.ticker]), c = ne(() => {
|
|
2491
2558
|
var b;
|
|
2492
2559
|
const m = /* @__PURE__ */ new Map();
|
|
2493
2560
|
for (const v of f) m.set(v.run, ((b = e.runs.get(v.run)) == null ? void 0 : b.topic) ?? v.run);
|
|
2494
2561
|
return [...m];
|
|
2495
|
-
}, [f]), M = t.trim().toLowerCase(), o = f.filter((m) => s.size ? s.has(m.name) : !0).filter((m) =>
|
|
2562
|
+
}, [f]), M = t.trim().toLowerCase(), o = f.filter((m) => s.size ? s.has(m.name) : !0).filter((m) => yi(m, r)).filter((m) => l ? m.run === l : !0).filter((m) => {
|
|
2496
2563
|
var v;
|
|
2497
2564
|
if (!M) return !0;
|
|
2498
2565
|
const b = ((v = e.runs.get(m.run)) == null ? void 0 : v.topic) ?? "";
|
|
2499
2566
|
return `${m.id} ${m.name} ${b} ${[...m.nodes].join(" ")}`.toLowerCase().includes(M);
|
|
2500
|
-
}).sort((m, b) => +!te(m) - +!te(b) || +(b.status === "thinking") - +(m.status === "thinking") || b.bornAt - m.bornAt),
|
|
2567
|
+
}).sort((m, b) => +!te(m) - +!te(b) || +(b.status === "thinking") - +(m.status === "thinking") || b.bornAt - m.bornAt), d = o.slice(0, 150), S = ne(() => {
|
|
2501
2568
|
const m = /* @__PURE__ */ new Map();
|
|
2502
2569
|
for (const b of f) {
|
|
2503
|
-
const v = m.get(b.name) ?? { color:
|
|
2570
|
+
const v = m.get(b.name) ?? { color: We[b.type], alive: 0 };
|
|
2504
2571
|
te(b) && v.alive++, m.set(b.name, v);
|
|
2505
2572
|
}
|
|
2506
2573
|
return [...m].slice(0, 12);
|
|
2507
|
-
}, [f]), A = (m) =>
|
|
2574
|
+
}, [f]), A = (m) => a((b) => {
|
|
2508
2575
|
const v = new Set(b);
|
|
2509
2576
|
return v.has(m) ? v.delete(m) : v.add(m), v;
|
|
2510
2577
|
});
|
|
2511
|
-
return /* @__PURE__ */
|
|
2512
|
-
/* @__PURE__ */
|
|
2578
|
+
return /* @__PURE__ */ E(ye, { children: [
|
|
2579
|
+
/* @__PURE__ */ E("div", { className: "ap-searchrow", children: [
|
|
2513
2580
|
/* @__PURE__ */ p("input", { className: "ap-search", value: t, onChange: (m) => n(m.target.value), placeholder: "Search agent or run topic…", "aria-label": "Search agents" }),
|
|
2514
|
-
/* @__PURE__ */
|
|
2581
|
+
/* @__PURE__ */ E("span", { className: "ap-count", title: "matching / all agents", children: [
|
|
2515
2582
|
o.length,
|
|
2516
2583
|
o.length !== f.length ? ` / ${f.length}` : ""
|
|
2517
2584
|
] })
|
|
2518
2585
|
] }),
|
|
2519
|
-
/* @__PURE__ */ p("div", { className: "ap-chips", children: S.map(([m, b]) => /* @__PURE__ */
|
|
2586
|
+
/* @__PURE__ */ p("div", { className: "ap-chips", children: S.map(([m, b]) => /* @__PURE__ */ E("button", { className: s.has(m) ? "on" : "", "aria-pressed": s.has(m), style: { "--c": b.color }, onClick: () => A(m), children: [
|
|
2520
2587
|
/* @__PURE__ */ p("i", {}),
|
|
2521
2588
|
m,
|
|
2522
2589
|
/* @__PURE__ */ p("em", { children: b.alive || "" })
|
|
2523
2590
|
] }, m)) }),
|
|
2524
|
-
/* @__PURE__ */
|
|
2525
|
-
/* @__PURE__ */ p("div", { className: "ap-seg", children:
|
|
2526
|
-
/* @__PURE__ */
|
|
2591
|
+
/* @__PURE__ */ E("div", { className: "ap-row-filters", children: [
|
|
2592
|
+
/* @__PURE__ */ p("div", { className: "ap-seg", children: Mi.map((m) => /* @__PURE__ */ p("button", { className: r === m ? "on" : "", "aria-pressed": r === m, onClick: () => i(m), children: m }, m)) }),
|
|
2593
|
+
/* @__PURE__ */ E("select", { value: l, "aria-label": "Filter by run", onChange: (m) => u(m.target.value), children: [
|
|
2527
2594
|
/* @__PURE__ */ p("option", { value: "", children: "all runs" }),
|
|
2528
2595
|
c.map(([m, b]) => /* @__PURE__ */ p("option", { value: m, children: b }, m))
|
|
2529
2596
|
] })
|
|
2530
2597
|
] }),
|
|
2531
|
-
/* @__PURE__ */
|
|
2532
|
-
|
|
2598
|
+
/* @__PURE__ */ E("ul", { className: "ap-list", children: [
|
|
2599
|
+
d.map((m) => {
|
|
2533
2600
|
var b;
|
|
2534
|
-
return /* @__PURE__ */ p("li", { children: /* @__PURE__ */
|
|
2601
|
+
return /* @__PURE__ */ p("li", { children: /* @__PURE__ */ E("button", { onClick: () => He(m.id), style: { "--c": We[m.type] }, className: te(m) ? "" : "is-done", children: [
|
|
2535
2602
|
/* @__PURE__ */ p("i", { "data-status": te(m) ? m.status : "done" }),
|
|
2536
|
-
/* @__PURE__ */
|
|
2537
|
-
/* @__PURE__ */
|
|
2603
|
+
/* @__PURE__ */ E("span", { className: "ap-name", children: [
|
|
2604
|
+
/* @__PURE__ */ E("span", { className: "ap-title", children: [
|
|
2538
2605
|
oe(m.id),
|
|
2539
|
-
|
|
2606
|
+
_t(m) && /* @__PURE__ */ p("em", { className: "ap-skill", title: `using skill ${_t(m)}`, children: _t(m) })
|
|
2540
2607
|
] }),
|
|
2541
2608
|
/* @__PURE__ */ p("small", { children: ((b = e.runs.get(m.run)) == null ? void 0 : b.topic) ?? "finished run" })
|
|
2542
2609
|
] }),
|
|
2543
|
-
/* @__PURE__ */
|
|
2610
|
+
/* @__PURE__ */ E("span", { className: "ap-meta", children: [
|
|
2544
2611
|
/* @__PURE__ */ p("b", { children: m.status }),
|
|
2545
2612
|
(m.tokens / 1e3).toFixed(1),
|
|
2546
2613
|
"k · ",
|
|
2547
|
-
|
|
2614
|
+
ir(m)
|
|
2548
2615
|
] })
|
|
2549
2616
|
] }) }, m.id);
|
|
2550
2617
|
}),
|
|
2551
|
-
o.length >
|
|
2618
|
+
o.length > d.length && /* @__PURE__ */ E("li", { className: "ap-more", children: [
|
|
2552
2619
|
"+",
|
|
2553
|
-
o.length -
|
|
2620
|
+
o.length - d.length,
|
|
2554
2621
|
" more - refine the filter"
|
|
2555
2622
|
] }),
|
|
2556
2623
|
o.length === 0 && /* @__PURE__ */ p("li", { className: "ap-more", children: "No agents match." })
|
|
2557
2624
|
] })
|
|
2558
2625
|
] });
|
|
2559
2626
|
}
|
|
2560
|
-
function
|
|
2561
|
-
const t =
|
|
2562
|
-
return /* @__PURE__ */
|
|
2563
|
-
/* @__PURE__ */
|
|
2627
|
+
function wi({ i: e }) {
|
|
2628
|
+
const t = Xe(), n = t.runs.get(e.run), s = n != null && n.hasSteps ? Es(n) : null, a = fn(e.parent), r = [...t.instances.values(), ...t.archive.values()].filter((l) => l.parent === e.id), i = [...t.mcpPending.values()].filter((l) => l.instance === e.id);
|
|
2629
|
+
return /* @__PURE__ */ E("div", { className: "ap-detail", style: { "--c": We[e.type] }, children: [
|
|
2630
|
+
/* @__PURE__ */ E("h3", { children: [
|
|
2564
2631
|
/* @__PURE__ */ p("i", {}),
|
|
2565
2632
|
" ",
|
|
2566
2633
|
e.name,
|
|
2567
2634
|
" ",
|
|
2568
|
-
/* @__PURE__ */
|
|
2635
|
+
/* @__PURE__ */ E("small", { children: [
|
|
2569
2636
|
e.subagent ? "subagent" : "agent",
|
|
2570
2637
|
" · ",
|
|
2571
|
-
|
|
2638
|
+
ot(e.run)
|
|
2572
2639
|
] })
|
|
2573
2640
|
] }),
|
|
2574
|
-
/* @__PURE__ */
|
|
2641
|
+
/* @__PURE__ */ E("div", { className: "ap-status", "data-status": te(e) ? e.status : "done", children: [
|
|
2575
2642
|
te(e) ? e.status : `finished (${e.status})`,
|
|
2576
2643
|
" · alive ",
|
|
2577
|
-
|
|
2644
|
+
ir(e)
|
|
2578
2645
|
] }),
|
|
2579
|
-
/* @__PURE__ */
|
|
2580
|
-
/* @__PURE__ */
|
|
2646
|
+
/* @__PURE__ */ E("dl", { className: "ap-stats", children: [
|
|
2647
|
+
/* @__PURE__ */ E("div", { children: [
|
|
2581
2648
|
/* @__PURE__ */ p("dt", { children: "tokens" }),
|
|
2582
|
-
/* @__PURE__ */
|
|
2649
|
+
/* @__PURE__ */ E("dd", { children: [
|
|
2583
2650
|
(e.tokens / 1e3).toFixed(1),
|
|
2584
2651
|
"k"
|
|
2585
2652
|
] })
|
|
2586
2653
|
] }),
|
|
2587
|
-
/* @__PURE__ */
|
|
2654
|
+
/* @__PURE__ */ E("div", { children: [
|
|
2588
2655
|
/* @__PURE__ */ p("dt", { children: "LLM calls" }),
|
|
2589
2656
|
/* @__PURE__ */ p("dd", { children: e.llmCalls })
|
|
2590
2657
|
] }),
|
|
2591
|
-
/* @__PURE__ */
|
|
2658
|
+
/* @__PURE__ */ E("div", { children: [
|
|
2592
2659
|
/* @__PURE__ */ p("dt", { children: "tool calls" }),
|
|
2593
2660
|
/* @__PURE__ */ p("dd", { children: e.toolCalls })
|
|
2594
2661
|
] }),
|
|
2595
|
-
/* @__PURE__ */
|
|
2662
|
+
/* @__PURE__ */ E("div", { children: [
|
|
2596
2663
|
/* @__PURE__ */ p("dt", { children: "MCP calls" }),
|
|
2597
2664
|
/* @__PURE__ */ p("dd", { children: e.mcpCalls })
|
|
2598
2665
|
] })
|
|
2599
2666
|
] }),
|
|
2600
|
-
/* @__PURE__ */
|
|
2667
|
+
/* @__PURE__ */ E("section", { children: [
|
|
2601
2668
|
/* @__PURE__ */ p("h4", { children: "Run" }),
|
|
2602
2669
|
/* @__PURE__ */ p("p", { children: n ? n.topic : e.run }),
|
|
2603
|
-
|
|
2670
|
+
n && s && /* @__PURE__ */ E("div", { className: "ap-steps", children: [
|
|
2671
|
+
s.shown.map((l) => /* @__PURE__ */ p("span", { "data-status": n.steps[l], title: `${l}: ${n.steps[l]}`, children: l }, l)),
|
|
2672
|
+
s.more > 0 && /* @__PURE__ */ E("span", { title: n.stepOrder.slice(-s.more).map((l) => `${l}: ${n.steps[l]}`).join(`
|
|
2673
|
+
`), children: [
|
|
2674
|
+
"+",
|
|
2675
|
+
s.more
|
|
2676
|
+
] })
|
|
2677
|
+
] })
|
|
2604
2678
|
] }),
|
|
2605
|
-
(
|
|
2679
|
+
(a || r.length > 0) && /* @__PURE__ */ E("section", { children: [
|
|
2606
2680
|
/* @__PURE__ */ p("h4", { children: "Lineage" }),
|
|
2607
|
-
|
|
2681
|
+
a && /* @__PURE__ */ E("button", { className: "ap-chip-link", style: { "--c": We[a.type] }, onClick: () => He(a.id), children: [
|
|
2608
2682
|
"↑ spawned by ",
|
|
2609
|
-
oe(
|
|
2683
|
+
oe(a.id)
|
|
2610
2684
|
] }),
|
|
2611
|
-
|
|
2685
|
+
r.map((l) => /* @__PURE__ */ E("button", { className: "ap-chip-link", style: { "--c": We[l.type] }, onClick: () => He(l.id), children: [
|
|
2612
2686
|
"↓ ",
|
|
2613
|
-
oe(
|
|
2687
|
+
oe(l.id),
|
|
2614
2688
|
" ",
|
|
2615
|
-
un(
|
|
2616
|
-
] },
|
|
2689
|
+
un(l) ? "✓" : ""
|
|
2690
|
+
] }, l.id))
|
|
2617
2691
|
] }),
|
|
2618
|
-
e.skills.size > 0 && /* @__PURE__ */
|
|
2692
|
+
e.skills.size > 0 && /* @__PURE__ */ E("section", { children: [
|
|
2619
2693
|
/* @__PURE__ */ p("h4", { children: "Skills used" }),
|
|
2620
|
-
/* @__PURE__ */ p("div", { className: "ap-skills", children: [...e.skills].map(([
|
|
2621
|
-
|
|
2622
|
-
/* @__PURE__ */
|
|
2623
|
-
|
|
2694
|
+
/* @__PURE__ */ p("div", { className: "ap-skills", children: [...e.skills].map(([l, u]) => /* @__PURE__ */ E("span", { className: u.active && te(e) ? "on" : "", title: u.active && te(e) ? "in use now" : `used ${u.count}x`, children: [
|
|
2695
|
+
l,
|
|
2696
|
+
/* @__PURE__ */ E("em", { children: [
|
|
2697
|
+
u.count,
|
|
2624
2698
|
"x"
|
|
2625
2699
|
] })
|
|
2626
|
-
] },
|
|
2700
|
+
] }, l)) })
|
|
2627
2701
|
] }),
|
|
2628
|
-
|
|
2702
|
+
i.length > 0 && /* @__PURE__ */ E("section", { children: [
|
|
2629
2703
|
/* @__PURE__ */ p("h4", { children: "Waiting on MCP" }),
|
|
2630
|
-
|
|
2631
|
-
|
|
2704
|
+
i.map((l) => /* @__PURE__ */ E("p", { className: "ap-wait", children: [
|
|
2705
|
+
l.server,
|
|
2632
2706
|
".",
|
|
2633
|
-
|
|
2707
|
+
l.tool,
|
|
2634
2708
|
"() · ",
|
|
2635
|
-
|
|
2709
|
+
Nr(l).toFixed(1),
|
|
2636
2710
|
"s"
|
|
2637
|
-
] },
|
|
2711
|
+
] }, l.key))
|
|
2638
2712
|
] }),
|
|
2639
|
-
/* @__PURE__ */
|
|
2713
|
+
/* @__PURE__ */ E("section", { children: [
|
|
2640
2714
|
/* @__PURE__ */ p("h4", { children: "Activity" }),
|
|
2641
|
-
/* @__PURE__ */ p("ul", { className: "ap-events", children: e.recent.map((
|
|
2715
|
+
/* @__PURE__ */ p("ul", { className: "ap-events", children: e.recent.map((l, u) => /* @__PURE__ */ p("li", { children: rr(l) }, u)) })
|
|
2642
2716
|
] })
|
|
2643
2717
|
] });
|
|
2644
2718
|
}
|
|
2645
|
-
const
|
|
2646
|
-
function
|
|
2647
|
-
var c, M, o,
|
|
2648
|
-
const r = this.userData[
|
|
2649
|
-
if (!r || r.k <= 2e-3 || Array.isArray(
|
|
2650
|
-
const
|
|
2651
|
-
r.hasColor = !!((c =
|
|
2652
|
-
const
|
|
2653
|
-
r.op =
|
|
2654
|
-
}
|
|
2655
|
-
function
|
|
2656
|
-
var
|
|
2657
|
-
const r = this.userData[
|
|
2719
|
+
const ki = 0.7, us = 0.45, ds = 0.32, fs = new y.Color("#ef4444"), Tt = "__kitDim", Si = y.Object3D.prototype.onBeforeRender;
|
|
2720
|
+
function Oi(e, t, n, s, a) {
|
|
2721
|
+
var c, M, o, d;
|
|
2722
|
+
const r = this.userData[Tt];
|
|
2723
|
+
if (!r || r.k <= 2e-3 || Array.isArray(a)) return;
|
|
2724
|
+
const i = a, l = 1 - ki * r.k;
|
|
2725
|
+
r.hasColor = !!((c = i.color) != null && c.isColor), r.hasColor && (r.color.copy(i.color), i.color.multiplyScalar(l), r.failed && i.color.lerp(fs, ds * r.k * 0.6)), r.hasEmissive = !!((M = i.emissive) != null && M.isColor), r.hasEmissive && (r.emissive.copy(i.emissive), i.emissive.multiplyScalar(l), r.failed && i.emissive.lerp(fs, ds * r.k * 0.4), r.ei = i.emissiveIntensity ?? 1);
|
|
2726
|
+
const u = ((o = i.uniforms) == null ? void 0 : o.uOpacity) ?? ((d = i.uniforms) == null ? void 0 : d.opacity), f = !!u && typeof u.value == "number";
|
|
2727
|
+
r.op = i.opacity, f && (r.uop = u.value), i.transparent && (i.opacity = r.op * (1 - us * r.k)), f && (u.value = r.uop * (1 - us * r.k)), r.on = !0, e.state.useProgram(null);
|
|
2728
|
+
}
|
|
2729
|
+
function Ei(e, t, n, s, a) {
|
|
2730
|
+
var u, f;
|
|
2731
|
+
const r = this.userData[Tt];
|
|
2658
2732
|
if (!r || !r.on) return;
|
|
2659
2733
|
r.on = !1;
|
|
2660
|
-
const
|
|
2661
|
-
r.hasColor &&
|
|
2662
|
-
const l = ((
|
|
2734
|
+
const i = a;
|
|
2735
|
+
r.hasColor && i.color.copy(r.color), r.hasEmissive && (i.emissive.copy(r.emissive), i.emissiveIntensity = r.ei), i.opacity = r.op;
|
|
2736
|
+
const l = ((u = i.uniforms) == null ? void 0 : u.uOpacity) ?? ((f = i.uniforms) == null ? void 0 : f.opacity);
|
|
2663
2737
|
l && typeof l.value == "number" && (l.value = r.uop), e.state.useProgram(null);
|
|
2664
2738
|
}
|
|
2665
|
-
let
|
|
2666
|
-
function
|
|
2739
|
+
let cr = 0, lr = !1;
|
|
2740
|
+
function ur(e) {
|
|
2667
2741
|
if (e.userData.kitNoDim) return;
|
|
2668
2742
|
if (e.isMesh || e.isLine || e.isPoints || e.isSprite) {
|
|
2669
|
-
let s = e.userData[
|
|
2743
|
+
let s = e.userData[Tt];
|
|
2670
2744
|
if (!s) {
|
|
2671
|
-
if (e.onBeforeRender !==
|
|
2672
|
-
s = { k: 0, failed: !1, on: !1, color: new y.Color(), emissive: new y.Color(), hasColor: !1, hasEmissive: !1, ei: 1, op: 1, uop: 1 }, e.userData[
|
|
2745
|
+
if (e.onBeforeRender !== Si) return;
|
|
2746
|
+
s = { k: 0, failed: !1, on: !1, color: new y.Color(), emissive: new y.Color(), hasColor: !1, hasEmissive: !1, ei: 1, op: 1, uop: 1 }, e.userData[Tt] = s, e.onBeforeRender = Oi, e.onAfterRender = Ei;
|
|
2673
2747
|
}
|
|
2674
|
-
s.k =
|
|
2748
|
+
s.k = cr, s.failed = lr;
|
|
2675
2749
|
}
|
|
2676
2750
|
const n = e.children;
|
|
2677
|
-
for (let s = 0; s < n.length; s++)
|
|
2751
|
+
for (let s = 0; s < n.length; s++) ur(n[s]);
|
|
2678
2752
|
}
|
|
2679
|
-
function
|
|
2680
|
-
t <= 2e-3 && s <= 2e-3 || (
|
|
2753
|
+
function Ri(e, t, n, s) {
|
|
2754
|
+
t <= 2e-3 && s <= 2e-3 || (cr = t, lr = n, ur(e));
|
|
2681
2755
|
}
|
|
2682
|
-
const
|
|
2683
|
-
},
|
|
2756
|
+
const hs = "#f5b83d", dr = "#fde7b0", fr = "#c08a3a", pe = 3, Vi = 1.22, ps = 0.11, hr = 1.48, Ci = new y.PlaneGeometry(2, 2), Ti = () => {
|
|
2757
|
+
}, zi = (
|
|
2684
2758
|
/* glsl */
|
|
2685
2759
|
`
|
|
2686
2760
|
varying vec2 vP;
|
|
2687
|
-
void main() { vP = position.xy * ${
|
|
2688
|
-
),
|
|
2761
|
+
void main() { vP = position.xy * ${hr.toFixed(2)}; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }`
|
|
2762
|
+
), Pi = (
|
|
2689
2763
|
/* glsl */
|
|
2690
2764
|
`
|
|
2691
2765
|
uniform vec3 uColor; uniform vec3 uCore; uniform vec3 uMix; uniform vec3 uRad; uniform float uA; uniform float uOuter;
|
|
@@ -2730,18 +2804,18 @@ void main() {
|
|
|
2730
2804
|
gl_FragColor = vec4(col * alpha, 1.0);
|
|
2731
2805
|
}`
|
|
2732
2806
|
);
|
|
2733
|
-
function
|
|
2734
|
-
const [s,
|
|
2807
|
+
function Ii({ agent: e, radius: t, height: n }) {
|
|
2808
|
+
const [s, a] = le(() => !!e.inst.skill);
|
|
2735
2809
|
return ve(() => {
|
|
2736
|
-
!s && e.inst.skill &&
|
|
2737
|
-
}), s ? /* @__PURE__ */ p(
|
|
2738
|
-
}
|
|
2739
|
-
const
|
|
2740
|
-
{ text: "skill:", color:
|
|
2741
|
-
{ text: e, color:
|
|
2742
|
-
],
|
|
2743
|
-
function
|
|
2744
|
-
const s = B(null),
|
|
2810
|
+
!s && e.inst.skill && a(!0);
|
|
2811
|
+
}), s ? /* @__PURE__ */ p(qi, { agent: e, radius: t, height: n }) : null;
|
|
2812
|
+
}
|
|
2813
|
+
const Gi = (e) => [
|
|
2814
|
+
{ text: "skill:", color: fr },
|
|
2815
|
+
{ text: e, color: dr }
|
|
2816
|
+
], Wi = 1.75, Ni = 7, ms = new y.Vector3();
|
|
2817
|
+
function qi({ agent: e, radius: t, height: n }) {
|
|
2818
|
+
const s = B(null), a = B([]), r = B([]), i = e.depth > 0, l = i ? 0.16 : 0.2, u = ne(() => i ? [8.5, 11] : [9.5, 12.5], [i]), f = ne(() => {
|
|
2745
2819
|
const M = {
|
|
2746
2820
|
slots: Array.from({ length: pe }, () => ({ use: null, mix: 0 })),
|
|
2747
2821
|
pending: Array.from({ length: pe }, () => ""),
|
|
@@ -2749,13 +2823,13 @@ function Si({ agent: e, radius: t, height: n }) {
|
|
|
2749
2823
|
extra: 0,
|
|
2750
2824
|
shownExtra: -1,
|
|
2751
2825
|
extraMix: 0,
|
|
2752
|
-
visit: (o,
|
|
2826
|
+
visit: (o, d) => {
|
|
2753
2827
|
if (!(!o.active && Vn(o, M.now) <= 2e-3)) {
|
|
2754
2828
|
for (const S of M.slots) if (S.use === o) return;
|
|
2755
2829
|
for (let S = 0; S < pe; S++) {
|
|
2756
2830
|
const A = M.slots[S];
|
|
2757
2831
|
if (!A.use) {
|
|
2758
|
-
A.use = o, A.mix = 0, M.pending[S] =
|
|
2832
|
+
A.use = o, A.mix = 0, M.pending[S] = d;
|
|
2759
2833
|
return;
|
|
2760
2834
|
}
|
|
2761
2835
|
}
|
|
@@ -2766,15 +2840,15 @@ function Si({ agent: e, radius: t, height: n }) {
|
|
|
2766
2840
|
return M;
|
|
2767
2841
|
}, []), c = ne(
|
|
2768
2842
|
() => new y.ShaderMaterial({
|
|
2769
|
-
vertexShader:
|
|
2770
|
-
fragmentShader:
|
|
2843
|
+
vertexShader: zi,
|
|
2844
|
+
fragmentShader: Pi,
|
|
2771
2845
|
transparent: !0,
|
|
2772
2846
|
depthTest: !1,
|
|
2773
2847
|
depthWrite: !1,
|
|
2774
2848
|
blending: y.AdditiveBlending,
|
|
2775
2849
|
toneMapped: !1,
|
|
2776
2850
|
uniforms: {
|
|
2777
|
-
uColor: { value: new y.Color(
|
|
2851
|
+
uColor: { value: new y.Color(hs).multiplyScalar(0.82) },
|
|
2778
2852
|
uCore: { value: new y.Color("#ffe9b8").multiplyScalar(0.95) },
|
|
2779
2853
|
uMix: { value: new y.Vector3() },
|
|
2780
2854
|
uRad: { value: new y.Vector3(1, 1, 1) },
|
|
@@ -2786,54 +2860,54 @@ function Si({ agent: e, radius: t, height: n }) {
|
|
|
2786
2860
|
}),
|
|
2787
2861
|
[]
|
|
2788
2862
|
);
|
|
2789
|
-
return $(() => () => c.dispose(), [c]), ve(({ camera: M, clock: o, size:
|
|
2790
|
-
var
|
|
2863
|
+
return $(() => () => c.dispose(), [c]), ve(({ camera: M, clock: o, size: d }) => {
|
|
2864
|
+
var G, H, Q;
|
|
2791
2865
|
const S = s.current;
|
|
2792
2866
|
if (!S) return;
|
|
2793
|
-
const A = performance.now(), m = e.inst, b =
|
|
2867
|
+
const A = performance.now(), m = e.inst, b = Wr(m, A) * (1 - 0.5 * e.dim);
|
|
2794
2868
|
f.now = A;
|
|
2795
|
-
for (const
|
|
2796
|
-
|
|
2869
|
+
for (const q of f.slots)
|
|
2870
|
+
q.use && (q.mix = Vn(q.use, A), q.mix <= 2e-3 && !q.use.active && (q.use = null, q.mix = 0));
|
|
2797
2871
|
f.extra = 0, m.skills.forEach(f.visit);
|
|
2798
|
-
for (let
|
|
2799
|
-
const Y = f.pending[
|
|
2800
|
-
Y && (f.pending[
|
|
2872
|
+
for (let q = 0; q < pe; q++) {
|
|
2873
|
+
const Y = f.pending[q];
|
|
2874
|
+
Y && (f.pending[q] = "", (G = r.current[q]) == null || G.setText(Gi(Y)));
|
|
2801
2875
|
}
|
|
2802
2876
|
f.extraMix += ((f.extra > 0 ? 1 : 0) - f.extraMix) * 0.12, f.extra > 0 && f.extra !== f.shownExtra && (f.shownExtra = f.extra, (H = r.current[pe]) == null || H.setText(`+${f.extra} more`));
|
|
2803
|
-
const v = c.uniforms.uMix.value,
|
|
2804
|
-
let T = 0,
|
|
2805
|
-
for (let
|
|
2806
|
-
const Y = f.slots[
|
|
2807
|
-
v.setComponent(
|
|
2877
|
+
const v = c.uniforms.uMix.value, W = c.uniforms.uRad.value;
|
|
2878
|
+
let T = 0, R = 0;
|
|
2879
|
+
for (let q = 0; q < pe; q++) {
|
|
2880
|
+
const Y = f.slots[q].mix;
|
|
2881
|
+
v.setComponent(q, Y * b), W.setComponent(q, 1 + ps * T), T += Y, R = Math.max(R, Y);
|
|
2808
2882
|
}
|
|
2809
|
-
|
|
2810
|
-
const P =
|
|
2883
|
+
R *= b;
|
|
2884
|
+
const P = R > 3e-3;
|
|
2811
2885
|
S.visible = P;
|
|
2812
|
-
for (const
|
|
2886
|
+
for (const q of a.current) q && (q.visible = P);
|
|
2813
2887
|
if (!P) return;
|
|
2814
|
-
const w = 1 +
|
|
2815
|
-
S.position.copy(e.live), g.plane === "xz" && (S.position.y += n * V * 0.5), S.quaternion.copy(M.quaternion), S.scale.setScalar(
|
|
2888
|
+
const w = 1 + ps * Math.max(0, T - 1), V = e.scale, I = Math.max(t, n * 0.55) * V * Vi;
|
|
2889
|
+
S.position.copy(e.live), g.plane === "xz" && (S.position.y += n * V * 0.5), S.quaternion.copy(M.quaternion), S.scale.setScalar(I * hr);
|
|
2816
2890
|
const O = c.uniforms;
|
|
2817
|
-
O.uA.value =
|
|
2891
|
+
O.uA.value = R, O.uOuter.value = w;
|
|
2818
2892
|
const x = o.elapsedTime;
|
|
2819
|
-
O.uRot.value =
|
|
2820
|
-
const D = 0.86 + 0.14 *
|
|
2893
|
+
O.uRot.value = st ? 0 : x * 0.16, O.uPulse.value = st ? 1 : 0.82 + 0.18 * Math.sin(x * 1.7), ms.set(0, 1, 0).applyQuaternion(M.quaternion);
|
|
2894
|
+
const D = 0.86 + 0.14 * R, F = I * D * (w + 0.1) + 0.03, N = M, X = S.position.distanceTo(M.position) || 1, j = N.isPerspectiveCamera ? 2 * X * Math.tan(y.MathUtils.degToRad(N.fov) / 2) / (N.zoom * d.height) : 0.01, L = (y.MathUtils.clamp(l * C.label / Math.max(j, 1e-6), u[0] * Z.pxk, u[1] * Z.pxk) * Wi + Ni) * j;
|
|
2821
2895
|
let k = 0;
|
|
2822
|
-
for (let
|
|
2823
|
-
const Y =
|
|
2824
|
-
Y && Y.position.copy(S.position).addScaledVector(
|
|
2896
|
+
for (let q = 0; q <= pe; q++) {
|
|
2897
|
+
const Y = a.current[q], ee = q < pe ? f.slots[q].mix : f.extraMix;
|
|
2898
|
+
Y && Y.position.copy(S.position).addScaledVector(ms, F + k), (Q = r.current[q]) == null || Q.setOpacity(ee * b, !0), k += L * ee;
|
|
2825
2899
|
}
|
|
2826
|
-
}), /* @__PURE__ */
|
|
2827
|
-
/* @__PURE__ */ p("mesh", { ref: s, geometry:
|
|
2828
|
-
Array.from({ length: pe + 1 }, (M, o) => /* @__PURE__ */ p("group", { ref: (
|
|
2829
|
-
|
|
2900
|
+
}), /* @__PURE__ */ E(ye, { children: [
|
|
2901
|
+
/* @__PURE__ */ p("mesh", { ref: s, geometry: Ci, material: c, renderOrder: 22, raycast: Ti, visible: !1, frustumCulled: !1 }),
|
|
2902
|
+
Array.from({ length: pe + 1 }, (M, o) => /* @__PURE__ */ p("group", { ref: (d) => void (a.current[o] = d), visible: !1, children: /* @__PURE__ */ p(
|
|
2903
|
+
It,
|
|
2830
2904
|
{
|
|
2831
|
-
ref: (
|
|
2905
|
+
ref: (d) => void (r.current[o] = d),
|
|
2832
2906
|
text: "",
|
|
2833
|
-
color:
|
|
2834
|
-
textColor: o < pe ?
|
|
2907
|
+
color: hs,
|
|
2908
|
+
textColor: o < pe ? dr : fr,
|
|
2835
2909
|
size: o < pe ? l : l * 0.85,
|
|
2836
|
-
pxRange:
|
|
2910
|
+
pxRange: u,
|
|
2837
2911
|
anchorY: "bottom",
|
|
2838
2912
|
plate: o < pe ? "underline" : "none",
|
|
2839
2913
|
font: "mono",
|
|
@@ -2846,87 +2920,87 @@ function Si({ agent: e, radius: t, height: n }) {
|
|
|
2846
2920
|
) }, o))
|
|
2847
2921
|
] });
|
|
2848
2922
|
}
|
|
2849
|
-
const
|
|
2923
|
+
const pr = bs({ nodes: [], links: [] }), zc = () => vs(pr);
|
|
2850
2924
|
function vn(e, t) {
|
|
2851
|
-
const [n, s] =
|
|
2925
|
+
const [n, s] = le(() => ({ v: e(), value: t() })), a = B(n.v);
|
|
2852
2926
|
return ve(() => {
|
|
2853
2927
|
const r = e();
|
|
2854
|
-
r !==
|
|
2928
|
+
r !== a.current && (a.current = r, s({ v: r, value: t() }));
|
|
2855
2929
|
}), n.value;
|
|
2856
2930
|
}
|
|
2857
|
-
const
|
|
2858
|
-
function
|
|
2931
|
+
const Di = () => [...g.agents.values()], Fi = () => [...g.runs.values()], Li = () => [...g.mcp.values()], Bi = () => g.agentsVersion, Ui = () => g.runsVersion, Zi = () => g.mcpVersion, Ji = () => vn(Bi, Di), Hi = () => vn(Ui, Fi), ji = () => vn(Zi, Li);
|
|
2932
|
+
function Xi() {
|
|
2859
2933
|
return $(() => (Z.active++, () => void Z.active--), []), ve(({ size: e }) => {
|
|
2860
2934
|
const t = performance.now();
|
|
2861
|
-
|
|
2935
|
+
Gr(t), Ha(t), uo(t), ta(t, e.width, e.height);
|
|
2862
2936
|
}), null;
|
|
2863
2937
|
}
|
|
2864
|
-
const
|
|
2865
|
-
function
|
|
2938
|
+
const Ki = { kind: "run" }, Qi = { kind: "mcp" }, Yi = { kind: "backend" }, _i = { kind: "graph" }, $i = { kind: "cluster" };
|
|
2939
|
+
function ec({ agent: e, children: t }) {
|
|
2866
2940
|
const n = ne(() => ({ kind: e.depth > 0 ? "sub" : "agent", agent: e }), [e]);
|
|
2867
2941
|
return /* @__PURE__ */ p(qe.Provider, { value: n, children: t });
|
|
2868
2942
|
}
|
|
2869
|
-
function
|
|
2943
|
+
function tc({ agent: e, children: t }) {
|
|
2870
2944
|
const n = B(null), s = B(0);
|
|
2871
2945
|
return ve(() => {
|
|
2872
|
-
n.current && (
|
|
2946
|
+
n.current && (Ri(n.current, e.dim, e.inst.status === "failed", s.current), s.current = e.dim);
|
|
2873
2947
|
}), /* @__PURE__ */ p("group", { ref: n, children: t });
|
|
2874
2948
|
}
|
|
2875
|
-
function
|
|
2876
|
-
const
|
|
2877
|
-
return /* @__PURE__ */ p(ye, { children:
|
|
2878
|
-
/* @__PURE__ */
|
|
2949
|
+
function nc({ Agent: e, Edge: t, selected: n, onSelect: s, radius: a, height: r }) {
|
|
2950
|
+
const i = Ji();
|
|
2951
|
+
return /* @__PURE__ */ p(ye, { children: i.map((l) => /* @__PURE__ */ E(ec, { agent: l, children: [
|
|
2952
|
+
/* @__PURE__ */ E(tc, { agent: l, children: [
|
|
2879
2953
|
t && l.inst.parent && /* @__PURE__ */ p(t, { child: l }),
|
|
2880
2954
|
/* @__PURE__ */ p(e, { agent: l, selected: n === l.id, onSelect: s })
|
|
2881
2955
|
] }),
|
|
2882
|
-
/* @__PURE__ */ p(
|
|
2956
|
+
/* @__PURE__ */ p(Ii, { agent: l, radius: a, height: r })
|
|
2883
2957
|
] }, l.uid)) });
|
|
2884
2958
|
}
|
|
2885
|
-
function
|
|
2886
|
-
const t =
|
|
2887
|
-
return /* @__PURE__ */ p(qe.Provider, { value:
|
|
2959
|
+
function sc({ RunMarker: e }) {
|
|
2960
|
+
const t = Hi();
|
|
2961
|
+
return /* @__PURE__ */ p(qe.Provider, { value: Ki, children: t.map((n) => /* @__PURE__ */ p(e, { run: n }, n.uid)) });
|
|
2888
2962
|
}
|
|
2889
|
-
function
|
|
2890
|
-
const n =
|
|
2891
|
-
return /* @__PURE__ */ p(ye, { children: n.map((s) => /* @__PURE__ */
|
|
2892
|
-
/* @__PURE__ */ p(qe.Provider, { value:
|
|
2893
|
-
/* @__PURE__ */ p(qe.Provider, { value:
|
|
2963
|
+
function rc({ McpServer: e, Backend: t }) {
|
|
2964
|
+
const n = ji();
|
|
2965
|
+
return /* @__PURE__ */ p(ye, { children: n.map((s) => /* @__PURE__ */ E(wr, { children: [
|
|
2966
|
+
/* @__PURE__ */ p(qe.Provider, { value: Qi, children: e && /* @__PURE__ */ p(gs, { item: s, children: /* @__PURE__ */ p(e, { mcp: s }) }) }),
|
|
2967
|
+
/* @__PURE__ */ p(qe.Provider, { value: Yi, children: t && [...s.backends.values()].map((a) => /* @__PURE__ */ p(gs, { item: a, children: /* @__PURE__ */ p(t, { mcp: s, backend: a }) }, a.uid)) })
|
|
2894
2968
|
] }, s.uid)) });
|
|
2895
2969
|
}
|
|
2896
|
-
function
|
|
2970
|
+
function gs({ item: e, children: t }) {
|
|
2897
2971
|
const n = B(null), s = B(null);
|
|
2898
2972
|
return ve(() => {
|
|
2899
|
-
const
|
|
2900
|
-
if (!
|
|
2901
|
-
const
|
|
2902
|
-
|
|
2973
|
+
const a = n.current, r = s.current;
|
|
2974
|
+
if (!a || !r) return;
|
|
2975
|
+
const i = Math.min(1, Math.max(0, e.mix)), l = i * i * (3 - 2 * i);
|
|
2976
|
+
a.position.copy(e.pos), a.scale.setScalar(Math.max(1e-4, l)), r.position.copy(e.pos).negate(), a.visible = l > 2e-3;
|
|
2903
2977
|
}), /* @__PURE__ */ p("group", { ref: n, scale: 1e-4, visible: !1, children: /* @__PURE__ */ p("group", { ref: s, children: t }) });
|
|
2904
2978
|
}
|
|
2905
|
-
const
|
|
2906
|
-
function
|
|
2907
|
-
const s = (n == null ? void 0 : n[0]) ?? 0,
|
|
2979
|
+
const ac = Array.from({ length: re }, (e, t) => t);
|
|
2980
|
+
function oc({ cluster: e, Cluster: t, offset: n }) {
|
|
2981
|
+
const s = (n == null ? void 0 : n[0]) ?? 0, a = (n == null ? void 0 : n[1]) ?? 0, r = (n == null ? void 0 : n[2]) ?? 0, i = Ms((l, u) => {
|
|
2908
2982
|
const f = g.clusterPos[l];
|
|
2909
|
-
f ?
|
|
2910
|
-
}, [s,
|
|
2911
|
-
return t ? /* @__PURE__ */ p(ye, { children:
|
|
2983
|
+
f ? u.set(f.x + s, f.y + a, f.z + r) : u.set(s, a, r);
|
|
2984
|
+
}, [s, a, r]);
|
|
2985
|
+
return t ? /* @__PURE__ */ p(ye, { children: ac.map((l) => /* @__PURE__ */ p(t, { lane: l, cluster: z.clusters[l], pos: g.clusterPos[l] ?? new y.Vector3() }, l)) }) : /* @__PURE__ */ p(Wo, { place: i, ...e });
|
|
2912
2986
|
}
|
|
2913
|
-
function
|
|
2914
|
-
const s =
|
|
2987
|
+
function ic({ galaxy: e, Graph: t }) {
|
|
2988
|
+
const s = Hr() && e.nodes.length > 0;
|
|
2915
2989
|
g.graphWanted = s, $(
|
|
2916
2990
|
() => () => {
|
|
2917
2991
|
g.graphWanted = !1;
|
|
2918
2992
|
},
|
|
2919
2993
|
[]
|
|
2920
2994
|
);
|
|
2921
|
-
const
|
|
2995
|
+
const a = B(null);
|
|
2922
2996
|
return ve(() => {
|
|
2923
|
-
const r =
|
|
2997
|
+
const r = a.current;
|
|
2924
2998
|
if (!r) return;
|
|
2925
|
-
const
|
|
2926
|
-
r.position.copy(
|
|
2927
|
-
}), s ? /* @__PURE__ */ p("group", { ref:
|
|
2999
|
+
const i = g.graph;
|
|
3000
|
+
r.position.copy(i.pos), r.scale.setScalar(Math.max(1e-4, i.scale)), r.visible = i.mix > 2e-3;
|
|
3001
|
+
}), s ? /* @__PURE__ */ p("group", { ref: a, scale: 1e-4, visible: !1, children: /* @__PURE__ */ p(qe.Provider, { value: _i, children: /* @__PURE__ */ p(t, { galaxy: e }) }) }) : null;
|
|
2928
3002
|
}
|
|
2929
|
-
function
|
|
3003
|
+
function Pc({ children: e }) {
|
|
2930
3004
|
const t = B(null);
|
|
2931
3005
|
return ve(() => {
|
|
2932
3006
|
const n = t.current;
|
|
@@ -2935,30 +3009,30 @@ function bc({ children: e }) {
|
|
|
2935
3009
|
n.scale.setScalar(1 / s), n.position.copy(g.graph.pos).multiplyScalar(-1 / s);
|
|
2936
3010
|
}), /* @__PURE__ */ p("group", { ref: t, children: e });
|
|
2937
3011
|
}
|
|
2938
|
-
const
|
|
2939
|
-
function
|
|
3012
|
+
const cc = new y.Vector3();
|
|
3013
|
+
function Ic(e) {
|
|
2940
3014
|
var M, o;
|
|
2941
|
-
const t =
|
|
2942
|
-
|
|
2943
|
-
const
|
|
2944
|
-
ne(() =>
|
|
2945
|
-
for (const
|
|
2946
|
-
for (const
|
|
2947
|
-
for (const
|
|
3015
|
+
const t = ni(), [n, s] = le(null);
|
|
3016
|
+
ue.preset = typeof e.preset == "string" ? Oa[e.preset] : e.preset, ue.graphNatural = ((M = e.graph) == null ? void 0 : M.natural) ?? 1, ue.graphRadius = ((o = e.graph) == null ? void 0 : o.radius) ?? 2.6, ue.peripheryGap = e.peripheryGap ?? 3.6, g.plane = e.plane;
|
|
3017
|
+
const a = JSON.stringify(e.fit ?? {});
|
|
3018
|
+
ne(() => aa(e.fit ?? {}), [a]), $(() => {
|
|
3019
|
+
for (const d of g.agents.values()) d.fresh = !0;
|
|
3020
|
+
for (const d of g.runs.values()) d.fresh = !0;
|
|
3021
|
+
for (const d of g.mcp.values()) d.fresh = !0;
|
|
2948
3022
|
g.graph.fresh = !0;
|
|
2949
3023
|
}, []);
|
|
2950
3024
|
const r = B(e.extents);
|
|
2951
3025
|
r.current = e.extents;
|
|
2952
|
-
const
|
|
2953
|
-
(
|
|
3026
|
+
const i = e.agentRadius ?? 1.1, l = e.agentHeight ?? 0, u = Ms(
|
|
3027
|
+
(d) => {
|
|
2954
3028
|
var S;
|
|
2955
|
-
|
|
3029
|
+
ho(d, i, l), (S = r.current) == null || S.call(r, d);
|
|
2956
3030
|
},
|
|
2957
|
-
[
|
|
2958
|
-
), f = e.target ?? [0, 0, 0], c = ne(() => Object.fromEntries(Object.entries(e.controls ?? {}).filter(([,
|
|
2959
|
-
return /* @__PURE__ */
|
|
2960
|
-
/* @__PURE__ */
|
|
2961
|
-
|
|
3031
|
+
[i, l]
|
|
3032
|
+
), f = e.target ?? [0, 0, 0], c = ne(() => Object.fromEntries(Object.entries(e.controls ?? {}).filter(([, d]) => d !== void 0)), [e.controls]);
|
|
3033
|
+
return /* @__PURE__ */ E("div", { className: `scene-root${e.className ? ` ${e.className}` : ""}`, children: [
|
|
3034
|
+
/* @__PURE__ */ E(
|
|
3035
|
+
vr,
|
|
2962
3036
|
{
|
|
2963
3037
|
camera: { position: e.camera.position, fov: e.camera.fov ?? 46, near: e.camera.near ?? 0.1, far: e.camera.far ?? 600 },
|
|
2964
3038
|
dpr: [1, 2],
|
|
@@ -2966,18 +3040,18 @@ function vc(e) {
|
|
|
2966
3040
|
onPointerMissed: () => s(null),
|
|
2967
3041
|
children: [
|
|
2968
3042
|
e.bg && /* @__PURE__ */ p("color", { attach: "background", args: [e.bg] }),
|
|
2969
|
-
/* @__PURE__ */ p(
|
|
3043
|
+
/* @__PURE__ */ p(Xi, {}),
|
|
2970
3044
|
e.Background,
|
|
2971
|
-
/* @__PURE__ */ p(
|
|
2972
|
-
e.RunMarker && /* @__PURE__ */ p(
|
|
2973
|
-
e.GraphResource && /* @__PURE__ */ p(
|
|
2974
|
-
/* @__PURE__ */ p(
|
|
2975
|
-
/* @__PURE__ */ p(
|
|
2976
|
-
/* @__PURE__ */ p(qe.Provider, { value:
|
|
3045
|
+
/* @__PURE__ */ p(pr.Provider, { value: t, children: /* @__PURE__ */ E("group", { children: [
|
|
3046
|
+
e.RunMarker && /* @__PURE__ */ p(sc, { RunMarker: e.RunMarker }),
|
|
3047
|
+
e.GraphResource && /* @__PURE__ */ p(ic, { galaxy: t, Graph: e.GraphResource }),
|
|
3048
|
+
/* @__PURE__ */ p(rc, { McpServer: e.McpServer, Backend: e.Backend }),
|
|
3049
|
+
/* @__PURE__ */ p(nc, { Agent: e.Agent, Edge: e.Edge, selected: n, onSelect: s, radius: i, height: e.plane === "xz" ? l : 0 }),
|
|
3050
|
+
/* @__PURE__ */ p(qe.Provider, { value: $i, children: /* @__PURE__ */ p(oc, { cluster: e.cluster, Cluster: e.Cluster, offset: e.clusterOffset }) }),
|
|
2977
3051
|
e.children
|
|
2978
3052
|
] }) }),
|
|
2979
3053
|
/* @__PURE__ */ p(
|
|
2980
|
-
|
|
3054
|
+
br,
|
|
2981
3055
|
{
|
|
2982
3056
|
makeDefault: !0,
|
|
2983
3057
|
target: f,
|
|
@@ -2989,53 +3063,57 @@ function vc(e) {
|
|
|
2989
3063
|
...c
|
|
2990
3064
|
}
|
|
2991
3065
|
),
|
|
2992
|
-
/* @__PURE__ */ p(
|
|
3066
|
+
/* @__PURE__ */ p(ga, { points: u, origin: cc }),
|
|
2993
3067
|
e.PostFX
|
|
2994
3068
|
]
|
|
2995
3069
|
}
|
|
2996
3070
|
),
|
|
2997
|
-
/* @__PURE__ */ p(
|
|
3071
|
+
/* @__PURE__ */ p(oi, { title: e.title, subtitle: e.subtitle, selected: n, onClose: () => s(null), inset: e.hudInset, children: e.hudChildren })
|
|
2998
3072
|
] });
|
|
2999
3073
|
}
|
|
3000
3074
|
export {
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3075
|
+
Cc as A,
|
|
3076
|
+
Bs as B,
|
|
3077
|
+
Zs as C,
|
|
3078
|
+
te as D,
|
|
3079
|
+
Ec as E,
|
|
3080
|
+
wa as F,
|
|
3081
|
+
Vc as G,
|
|
3082
|
+
Vr as H,
|
|
3083
|
+
zs as I,
|
|
3084
|
+
Pc as J,
|
|
3085
|
+
yc as K,
|
|
3086
|
+
It as L,
|
|
3087
|
+
Cr as M,
|
|
3088
|
+
bc as N,
|
|
3089
|
+
Vs as O,
|
|
3090
|
+
$t as R,
|
|
3091
|
+
xs as S,
|
|
3092
|
+
We as T,
|
|
3093
|
+
gc as a,
|
|
3094
|
+
Bt as b,
|
|
3095
|
+
Ac as c,
|
|
3096
|
+
Nr as d,
|
|
3097
|
+
Ot as e,
|
|
3020
3098
|
C as f,
|
|
3021
3099
|
z as g,
|
|
3022
3100
|
dn as h,
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
|
|
3026
|
-
|
|
3027
|
-
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
|
|
3031
|
-
|
|
3032
|
-
|
|
3033
|
-
|
|
3034
|
-
|
|
3035
|
-
|
|
3036
|
-
|
|
3101
|
+
Sc as i,
|
|
3102
|
+
xc as j,
|
|
3103
|
+
Es as k,
|
|
3104
|
+
wc as l,
|
|
3105
|
+
Ic as m,
|
|
3106
|
+
g as n,
|
|
3107
|
+
Mc as o,
|
|
3108
|
+
Wr as p,
|
|
3109
|
+
Tc as q,
|
|
3110
|
+
st as r,
|
|
3111
|
+
kc as s,
|
|
3112
|
+
Rc as t,
|
|
3113
|
+
Xe as u,
|
|
3114
|
+
mc as v,
|
|
3037
3115
|
h as w,
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
|
|
3116
|
+
zc as x,
|
|
3117
|
+
vc as y,
|
|
3118
|
+
Oc as z
|
|
3041
3119
|
};
|