agentglow 0.1.0 → 0.2.1
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/README.md +38 -3
- package/dist/chunks/KitScene-C3SZiKL5.js +2793 -0
- package/dist/chunks/index--dwzdFRh.js +753 -0
- package/dist/chunks/index-B2PGx_wt.js +1010 -0
- package/dist/chunks/index-BZOG_CQS.js +838 -0
- package/dist/chunks/index-BfGluv59.js +784 -0
- package/dist/chunks/index-Bm4te7Ug.js +980 -0
- package/dist/chunks/index-Bqv_wy49.js +889 -0
- package/dist/chunks/index-Bsmr7FwH.js +763 -0
- package/dist/chunks/index-Bw31uayO.js +792 -0
- package/dist/chunks/index-C4F16M9q.js +887 -0
- package/dist/chunks/index-CRRHsMqy.js +68 -0
- package/dist/chunks/index-CS8eZTr_.js +818 -0
- package/dist/chunks/index-CdzGoWrn.js +1086 -0
- package/dist/chunks/index-CvDEulcq.js +492 -0
- package/dist/chunks/index-DXBfdHew.js +1143 -0
- package/dist/chunks/index-DdCs_ye9.js +605 -0
- package/dist/chunks/index-_KrED-np.js +677 -0
- package/dist/index.js +1 -1
- package/dist/style.css +1 -1
- package/dist/types/AgentScene.d.ts +14 -1
- package/dist/types/world.d.ts +69 -0
- package/package.json +1 -1
- package/dist/chunks/ClusterBall-CPsd6JvJ.js +0 -1489
- package/dist/chunks/index-0Bqa57T_.js +0 -786
- package/dist/chunks/index-4JCQqMml.js +0 -831
- package/dist/chunks/index-55W5crSg.js +0 -63
- package/dist/chunks/index-78lWZCrQ.js +0 -984
- package/dist/chunks/index-Bv6_kdaq.js +0 -768
- package/dist/chunks/index-Cgb5ir1r.js +0 -688
- package/dist/chunks/index-CqVCWpP7.js +0 -796
- package/dist/chunks/index-D1O5v601.js +0 -1065
- package/dist/chunks/index-DOoA9htC.js +0 -1181
- package/dist/chunks/index-K__sPGRy.js +0 -1134
- package/dist/chunks/index-N0zWN8NS.js +0 -857
- package/dist/chunks/index-NiYqQci9.js +0 -936
- package/dist/chunks/index-PQRnbPiJ.js +0 -565
- package/dist/chunks/index-VOXn1m-Q.js +0 -848
- package/dist/chunks/index-o4vs5msj.js +0 -837
- package/dist/chunks/index-yos7IepY.js +0 -890
- package/dist/chunks/spread-CWdeDFd9.js +0 -35
|
@@ -1,1489 +0,0 @@
|
|
|
1
|
-
import { jsx as u, Fragment as Ge, jsxs as A } from "react/jsx-runtime";
|
|
2
|
-
import { useSyncExternalStore as Ke, useState as X, useEffect as Y, useMemo as L, Suspense as Nt, useRef as Z, useImperativeHandle as Ut } from "react";
|
|
3
|
-
import { u as Ye, T as Ft } from "./index-55W5crSg.js";
|
|
4
|
-
import { useFrame as St } from "@react-three/fiber";
|
|
5
|
-
import * as b from "three";
|
|
6
|
-
import { Text as at } from "@react-three/drei";
|
|
7
|
-
const xt = [
|
|
8
|
-
{ type: "planner", label: "Planner", color: "#a78bfa" },
|
|
9
|
-
{ type: "researcher", label: "Researcher", color: "#fbbf24" },
|
|
10
|
-
{ type: "graph_scout", label: "Graph Scout", color: "#22d3ee" },
|
|
11
|
-
{ type: "records_scout", label: "Records Scout", color: "#f472b6" },
|
|
12
|
-
{ type: "data_scout", label: "Data Scout", color: "#fb7185" },
|
|
13
|
-
{ type: "writer", label: "Writer", color: "#4ade80" }
|
|
14
|
-
], ce = Object.fromEntries(xt.map((e) => [e.type, e.color]));
|
|
15
|
-
Object.fromEntries(xt.map((e) => [e.type, e.label]));
|
|
16
|
-
const _e = ["plan", "research", "write"], Ze = ["#818cf8", "#f472b6", "#34d399", "#fb923c", "#38bdf8", "#e879f9"], ps = {
|
|
17
|
-
Customer: "#f59e0b",
|
|
18
|
-
Account: "#38bdf8",
|
|
19
|
-
Incident: "#22c55e",
|
|
20
|
-
Ticket: "#a78bfa",
|
|
21
|
-
Product: "#f472b6",
|
|
22
|
-
Region: "#ef4444",
|
|
23
|
-
Metric: "#facc15",
|
|
24
|
-
Team: "#2dd4bf",
|
|
25
|
-
Business: "#f59e0b",
|
|
26
|
-
Address: "#38bdf8",
|
|
27
|
-
Resolution: "#22c55e",
|
|
28
|
-
Meeting: "#a78bfa",
|
|
29
|
-
Hearing: "#f472b6",
|
|
30
|
-
Agency: "#ef4444",
|
|
31
|
-
Topic: "#facc15",
|
|
32
|
-
Committee: "#2dd4bf"
|
|
33
|
-
}, ot = {
|
|
34
|
-
warehouse: "#f97316",
|
|
35
|
-
search: "#22d3ee",
|
|
36
|
-
github: "#e5e7eb",
|
|
37
|
-
slack: "#e879f9",
|
|
38
|
-
"google-drive": "#facc15",
|
|
39
|
-
analytics: "#06b6d4"
|
|
40
|
-
}, wt = 2500, Dt = 6e3, Be = { fadeMs: (e) => wt }, hs = (e) => Be.fadeMs(e), i = {
|
|
41
|
-
runs: /* @__PURE__ */ new Map(),
|
|
42
|
-
instances: /* @__PURE__ */ new Map(),
|
|
43
|
-
comets: [],
|
|
44
|
-
flares: [],
|
|
45
|
-
mcpServers: /* @__PURE__ */ new Map(),
|
|
46
|
-
mcpCalls: [],
|
|
47
|
-
/** in-flight MCP calls keyed `${instance}|${server}|${tool}`; resolvedAt kept briefly for a "snap back" effect */
|
|
48
|
-
mcpPending: /* @__PURE__ */ new Map(),
|
|
49
|
-
mcpResolved: [],
|
|
50
|
-
ticker: [],
|
|
51
|
-
stats: { runs: 0, spawned: 0, llmCalls: 0, tokens: 0, toolCalls: 0, graphReads: 0, graphWrites: 0, mcpCalls: 0 },
|
|
52
|
-
lastFinal: "",
|
|
53
|
-
simulated: !1,
|
|
54
|
-
mode: "connecting",
|
|
55
|
-
/** label for the graph/memory structure: names the DB only when the server provides a real graph */
|
|
56
|
-
graphLabel: "knowledge graph",
|
|
57
|
-
focus: null,
|
|
58
|
-
// instance id most recently active
|
|
59
|
-
focusAt: 0,
|
|
60
|
-
/** exited instances kept for the agent panel after their shape fades (newest last, capped) */
|
|
61
|
-
archive: /* @__PURE__ */ new Map(),
|
|
62
|
-
/** instance selected in the agent panel or by clicking a shape */
|
|
63
|
-
selected: null
|
|
64
|
-
}, jt = 500;
|
|
65
|
-
let Je = 0, Ot = 0;
|
|
66
|
-
const He = /* @__PURE__ */ new Set(), Ae = () => {
|
|
67
|
-
Ot++, He.forEach((e) => e());
|
|
68
|
-
};
|
|
69
|
-
function Ie() {
|
|
70
|
-
return Ke(
|
|
71
|
-
(e) => (He.add(e), () => He.delete(e)),
|
|
72
|
-
() => Ot
|
|
73
|
-
), i;
|
|
74
|
-
}
|
|
75
|
-
const Ht = (e, t = 0) => {
|
|
76
|
-
let n = 2166136261 ^ t;
|
|
77
|
-
for (let o = 0; o < e.length; o++) n = Math.imul(n ^ e.charCodeAt(o), 16777619);
|
|
78
|
-
return (n >>> 0) % 10007 / 10007;
|
|
79
|
-
};
|
|
80
|
-
function Xt() {
|
|
81
|
-
const e = new Set([...i.runs.values()].map((o) => o.slot)), t = [0, 1, 2, 3, 4, 5].filter((o) => !e.has(o));
|
|
82
|
-
if (t.length) return t[Math.floor(Math.random() * t.length)];
|
|
83
|
-
let n = 6;
|
|
84
|
-
for (; e.has(n); ) n++;
|
|
85
|
-
return n;
|
|
86
|
-
}
|
|
87
|
-
function Vt(e) {
|
|
88
|
-
var o;
|
|
89
|
-
const t = performance.now();
|
|
90
|
-
switch (e.type !== "mcp_register" && (i.ticker = [e, ...i.ticker].slice(0, 60)), e.type) {
|
|
91
|
-
case "run": {
|
|
92
|
-
if (e.status === "started") {
|
|
93
|
-
const s = Xt();
|
|
94
|
-
i.runs.set(e.run_id, {
|
|
95
|
-
id: e.run_id,
|
|
96
|
-
topic: e.topic,
|
|
97
|
-
workflow: e.workflow,
|
|
98
|
-
color: Ze[s % Ze.length],
|
|
99
|
-
slot: s,
|
|
100
|
-
status: "started",
|
|
101
|
-
steps: { plan: "queued", research: "queued", write: "queued" },
|
|
102
|
-
hasSteps: !1,
|
|
103
|
-
startedAt: t,
|
|
104
|
-
endedAt: 0,
|
|
105
|
-
handoffAt: 0,
|
|
106
|
-
handoffFrom: "plan",
|
|
107
|
-
handoffTo: "plan",
|
|
108
|
-
final: ""
|
|
109
|
-
}), i.stats.runs++;
|
|
110
|
-
} else {
|
|
111
|
-
const s = i.runs.get(e.run_id);
|
|
112
|
-
s && (s.status = e.status, s.endedAt = t);
|
|
113
|
-
}
|
|
114
|
-
break;
|
|
115
|
-
}
|
|
116
|
-
case "step": {
|
|
117
|
-
const s = i.runs.get(e.run_id);
|
|
118
|
-
if (!s) break;
|
|
119
|
-
s.hasSteps = !0;
|
|
120
|
-
const r = _e.find((a) => s.steps[a] === "running");
|
|
121
|
-
s.steps[e.step] = e.status, e.status === "running" && r && r !== e.step && (s.handoffAt = t, s.handoffFrom = r, s.handoffTo = e.step);
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
case "spawn": {
|
|
125
|
-
const s = e.subagent ?? e.agent.endsWith("_scout"), r = [...i.instances.values()].filter((a) => a.run === e.run_id).length;
|
|
126
|
-
i.instances.set(e.id, {
|
|
127
|
-
id: e.id,
|
|
128
|
-
run: e.run_id,
|
|
129
|
-
type: Kt(e.agent, s),
|
|
130
|
-
name: e.agent,
|
|
131
|
-
parent: e.parent_id,
|
|
132
|
-
status: "spawning",
|
|
133
|
-
subagent: s,
|
|
134
|
-
bornAt: t,
|
|
135
|
-
exitAt: 0,
|
|
136
|
-
pulse: 0.8,
|
|
137
|
-
pulseAt: t,
|
|
138
|
-
tokens: 0,
|
|
139
|
-
index: r,
|
|
140
|
-
recent: [],
|
|
141
|
-
llmCalls: 0,
|
|
142
|
-
toolCalls: 0,
|
|
143
|
-
mcpCalls: 0,
|
|
144
|
-
nodes: /* @__PURE__ */ new Set()
|
|
145
|
-
}), i.stats.spawned++, i.focus = e.id, i.focusAt = t;
|
|
146
|
-
break;
|
|
147
|
-
}
|
|
148
|
-
case "exit": {
|
|
149
|
-
const s = i.instances.get(e.id);
|
|
150
|
-
s && (s.status = e.status, s.exitAt = t);
|
|
151
|
-
for (const [r, a] of i.mcpPending) a.instance === e.id && i.mcpPending.delete(r);
|
|
152
|
-
break;
|
|
153
|
-
}
|
|
154
|
-
case "agent": {
|
|
155
|
-
const s = i.instances.get(e.id);
|
|
156
|
-
s && (s.status = e.status), e.status === "thinking" && (i.focus = e.id, i.focusAt = t);
|
|
157
|
-
break;
|
|
158
|
-
}
|
|
159
|
-
case "llm": {
|
|
160
|
-
const s = i.instances.get(e.id);
|
|
161
|
-
s && (s.pulse = Math.min(2.5, 0.6 + (e.tokens_in + e.tokens_out) / 1500), s.pulseAt = t, s.tokens += e.tokens_in + e.tokens_out, s.llmCalls++), i.stats.llmCalls++, i.stats.tokens += e.tokens_in + e.tokens_out;
|
|
162
|
-
break;
|
|
163
|
-
}
|
|
164
|
-
case "message":
|
|
165
|
-
i.comets.push({ id: ++Je, run: e.run_id, from: e.from_id, to: e.to_id, start: t, dur: 1300, text: e.text }), i.focus = e.to_id, i.focusAt = t;
|
|
166
|
-
break;
|
|
167
|
-
case "tool": {
|
|
168
|
-
i.stats.toolCalls++;
|
|
169
|
-
const s = i.instances.get(e.id);
|
|
170
|
-
s && (s.pulse = Math.max(s.pulse, 0.5), s.pulseAt = t, s.toolCalls++);
|
|
171
|
-
break;
|
|
172
|
-
}
|
|
173
|
-
case "graph":
|
|
174
|
-
(o = i.instances.get(e.id)) != null && o.nodes && e.nodes.forEach((s) => i.instances.get(e.id).nodes.add(s));
|
|
175
|
-
for (const s of e.nodes.slice(0, 20)) i.flares.push({ id: ++Je, run: e.run_id, instance: e.id, node: s, op: e.op, start: t });
|
|
176
|
-
e.op === "read" ? i.stats.graphReads += e.nodes.length : i.stats.graphWrites += e.nodes.length;
|
|
177
|
-
break;
|
|
178
|
-
case "mcp_register": {
|
|
179
|
-
let s = i.mcpServers.get(e.server);
|
|
180
|
-
s || (s = { name: e.server, color: ot[e.server] ?? "#94a3b8", slot: i.mcpServers.size, activeAt: 0, calls: 0, inflight: 0, resources: /* @__PURE__ */ new Map() }, i.mcpServers.set(e.server, s));
|
|
181
|
-
for (const r of e.resources) s.resources.has(r.name) || s.resources.set(r.name, { name: r.name, kind: r.kind, activeAt: 0, inflight: 0, calls: 0 });
|
|
182
|
-
break;
|
|
183
|
-
}
|
|
184
|
-
case "mcp": {
|
|
185
|
-
let s = i.mcpServers.get(e.server);
|
|
186
|
-
s || (s = { name: e.server, color: ot[e.server] ?? "#94a3b8", slot: i.mcpServers.size, activeAt: t, calls: 0, inflight: 0, resources: /* @__PURE__ */ new Map() }, i.mcpServers.set(e.server, s)), s.activeAt = t;
|
|
187
|
-
let r;
|
|
188
|
-
if (e.resource && (r = s.resources.get(e.resource), r || (r = { name: e.resource, kind: e.resource_kind ?? "api", activeAt: t, inflight: 0, calls: 0 }, s.resources.set(e.resource, r)), r.activeAt = t, e.phase === "call" ? (r.inflight++, r.calls++) : r.inflight = Math.max(0, r.inflight - 1)), e.phase === "call") {
|
|
189
|
-
const v = i.instances.get(e.id);
|
|
190
|
-
v && v.mcpCalls++, s.calls++, s.inflight++, i.stats.mcpCalls++;
|
|
191
|
-
} else s.inflight = Math.max(0, s.inflight - 1);
|
|
192
|
-
i.mcpCalls.push({ id: ++Je, run: e.run_id, instance: e.id, server: e.server, tool: e.tool, resource: e.resource, phase: e.phase, start: t, dur: 900 });
|
|
193
|
-
const a = `${e.id}|${e.server}|${e.tool}`;
|
|
194
|
-
if (e.phase === "call") i.mcpPending.set(a, { key: a, run: e.run_id, instance: e.id, server: e.server, tool: e.tool, resource: e.resource, since: t });
|
|
195
|
-
else {
|
|
196
|
-
const v = i.mcpPending.get(a);
|
|
197
|
-
v && i.mcpResolved.push({ ...v, resolvedAt: t }), i.mcpPending.delete(a);
|
|
198
|
-
}
|
|
199
|
-
break;
|
|
200
|
-
}
|
|
201
|
-
case "final": {
|
|
202
|
-
const s = i.runs.get(e.run_id);
|
|
203
|
-
s && (s.final = e.text), i.lastFinal = e.text;
|
|
204
|
-
break;
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
const n = "id" in e ? e.id : e.type === "message" ? e.from_id : null;
|
|
208
|
-
if (n) {
|
|
209
|
-
const s = i.instances.get(n);
|
|
210
|
-
s && (s.recent = [e, ...s.recent].slice(0, 40));
|
|
211
|
-
}
|
|
212
|
-
Ae();
|
|
213
|
-
}
|
|
214
|
-
const Ne = /* @__PURE__ */ new Set();
|
|
215
|
-
function As(e = performance.now()) {
|
|
216
|
-
let t = !1;
|
|
217
|
-
Ne.clear();
|
|
218
|
-
for (const [r, a] of i.instances)
|
|
219
|
-
Ne.add(a.run), a.exitAt && e - a.exitAt > Be.fadeMs(a) && (i.instances.delete(r), i.archive.set(r, a), i.archive.size > jt && i.archive.delete(i.archive.keys().next().value), t = !0);
|
|
220
|
-
for (const [r, a] of i.runs)
|
|
221
|
-
a.endedAt && e - a.endedAt > Dt && !Ne.has(r) && (i.runs.delete(r), t = !0);
|
|
222
|
-
const n = i.comets.length;
|
|
223
|
-
i.comets = i.comets.filter((r) => e - r.start < r.dur + 250), i.mcpResolved = i.mcpResolved.filter((r) => e - r.resolvedAt < 700);
|
|
224
|
-
const o = i.mcpCalls.length;
|
|
225
|
-
i.mcpCalls = i.mcpCalls.filter((r) => e - r.start < r.dur + 250);
|
|
226
|
-
const s = i.flares.length;
|
|
227
|
-
i.flares = i.flares.filter((r) => e - r.start < 2600), (t || n !== i.comets.length || s !== i.flares.length || o !== i.mcpCalls.length) && Ae();
|
|
228
|
-
}
|
|
229
|
-
function ms(e, t = performance.now()) {
|
|
230
|
-
const n = Math.min(1, (t - e.bornAt) / 600), o = 1 - Math.pow(1 - n, 3);
|
|
231
|
-
return e.exitAt ? o * Math.max(0, 1 - (t - e.exitAt) / Be.fadeMs(e)) : o;
|
|
232
|
-
}
|
|
233
|
-
function zt(e, t = performance.now()) {
|
|
234
|
-
return e.pulse * Math.exp(-((t - e.pulseAt) / 1e3) * 2.2);
|
|
235
|
-
}
|
|
236
|
-
function Lt(e, t = performance.now()) {
|
|
237
|
-
return (t - e.since) / 1e3;
|
|
238
|
-
}
|
|
239
|
-
const Qt = /* @__PURE__ */ new Set(["planner", "researcher", "graph_scout", "records_scout", "data_scout", "writer"]);
|
|
240
|
-
function Kt(e, t) {
|
|
241
|
-
if (Qt.has(e)) return e;
|
|
242
|
-
const n = e.toLowerCase();
|
|
243
|
-
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";
|
|
244
|
-
}
|
|
245
|
-
function gs(e) {
|
|
246
|
-
return e.subagent ? 0.6 : 1.35;
|
|
247
|
-
}
|
|
248
|
-
function Et(e) {
|
|
249
|
-
if (e)
|
|
250
|
-
return i.instances.get(e) ?? i.archive.get(e);
|
|
251
|
-
}
|
|
252
|
-
function xe(e) {
|
|
253
|
-
i.selected !== e && (i.selected = e, Ae());
|
|
254
|
-
}
|
|
255
|
-
function ct(e) {
|
|
256
|
-
i.simulated = e, Ae();
|
|
257
|
-
}
|
|
258
|
-
function Yt(e) {
|
|
259
|
-
i.graphLabel !== e && (i.graphLabel = e, Ae());
|
|
260
|
-
}
|
|
261
|
-
function lt(e) {
|
|
262
|
-
i.mode = e, i.simulated = e === "sim", Ae();
|
|
263
|
-
}
|
|
264
|
-
const _t = 3, $t = [
|
|
265
|
-
"Why is churn rising for Acme Corp?",
|
|
266
|
-
"Root cause of payment latency incidents",
|
|
267
|
-
"Which region has the most incidents?",
|
|
268
|
-
"Is Fraud Shield worth expanding to Globex?",
|
|
269
|
-
"Summarize Q3 support escalations",
|
|
270
|
-
"Which customers are at risk of downgrading?",
|
|
271
|
-
"Why did checkout conversion drop last week?",
|
|
272
|
-
"Compare onboarding time across regions"
|
|
273
|
-
], Ue = [
|
|
274
|
-
["Acme Corp", "Enterprise Plan", "Churn Q3"],
|
|
275
|
-
["Payments API", "Incident #4821", "p99 Latency"],
|
|
276
|
-
["EMEA", "Incident #4790", "On-call Team"],
|
|
277
|
-
["Fraud Shield", "Globex", "Chargeback Rate"],
|
|
278
|
-
["Support Escalations", "Ticket #9917", "Initech"],
|
|
279
|
-
["Umbrella Co", "Seat Downgrade", "Renewal 2026"],
|
|
280
|
-
["Checkout Funnel", "Conversion Rate", "Release 4.12"],
|
|
281
|
-
["APAC", "Onboarding Time", "Customer Success"]
|
|
282
|
-
], en = {
|
|
283
|
-
analytics: [["Metrics API", "api"], ["Postgres", "db"]],
|
|
284
|
-
warehouse: [["Snowflake", "warehouse"], ["Spark cluster", "spark"]],
|
|
285
|
-
github: [["GitHub API", "api"]],
|
|
286
|
-
"google-drive": [["Drive storage", "storage"]],
|
|
287
|
-
slack: [["Slack API", "api"], ["Kafka events", "queue"]]
|
|
288
|
-
}, re = (e) => e[Math.floor(Math.random() * e.length)], tn = () => Math.random().toString(36).slice(2, 7);
|
|
289
|
-
function nn(e) {
|
|
290
|
-
const t = `run-${tn()}`, n = re($t), o = () => Date.now();
|
|
291
|
-
let s = 0;
|
|
292
|
-
const r = (f, c) => {
|
|
293
|
-
s += f, e(s, c);
|
|
294
|
-
}, a = (f, c, m) => r(250, () => ({ type: "spawn", run_id: t, id: f, agent: c, parent_id: m, ts: o() })), v = (f) => r(150, () => ({ type: "agent", run_id: t, id: f, status: "thinking", ts: o() })), x = (f, c = 120) => r(c, () => ({ type: "agent", run_id: t, id: f, status: "waiting", ts: o() })), z = (f, c) => r(c, () => ({ type: "llm", run_id: t, id: f, tokens_in: 1200 + Math.round(Math.random() * 3e3), tokens_out: 150 + Math.round(Math.random() * 700), latency_ms: 700 + Math.random() * 1800, ts: o() })), d = (f, c = 250) => r(c, () => ({ type: "exit", run_id: t, id: f, status: "done", ts: o() })), w = (f, c, m, k = 120) => r(k, () => ({ type: "message", run_id: t, from_id: f, to_id: c, text: m, ts: o() })), M = (f, c, m = 120) => r(m, () => ({ type: "step", run_id: t, step: f, status: c, ts: o() }));
|
|
295
|
-
r(0, () => ({ type: "run", run_id: t, status: "started", topic: n, workflow: "research_brief", ts: o() })), M("plan", "running", 300);
|
|
296
|
-
const l = `${t}:planner`;
|
|
297
|
-
a(l, "planner", null), v(l), z(l, 1500), z(l, 900), M("plan", "done", 300);
|
|
298
|
-
const y = `${t}:researcher`;
|
|
299
|
-
M("research", "running", 200), a(y, "researcher", l), w(l, y, `3 questions on "${n}"`, 150), d(l, 200), v(y), z(y, 1200);
|
|
300
|
-
const T = 2 + Math.floor(Math.random() * 3), q = [];
|
|
301
|
-
for (let f = 0; f < T; f++) {
|
|
302
|
-
const c = f % 2 === 0 ? "graph_scout" : "records_scout", m = `${t}:${c}:${f}`;
|
|
303
|
-
q.push(m), r(200, () => ({ type: "tool", run_id: t, id: y, tool: "task", args_preview: `${c}: angle ${f + 1} of "${n}"`, ts: o() })), a(m, c, y), w(y, m, `Investigate angle ${f + 1}`, 80);
|
|
304
|
-
}
|
|
305
|
-
x(y, 200);
|
|
306
|
-
const E = s;
|
|
307
|
-
q.forEach((f, c) => {
|
|
308
|
-
let m = E + 200 + c * 220;
|
|
309
|
-
const k = (P, G) => {
|
|
310
|
-
m += P, e(m, G);
|
|
311
|
-
}, V = re(Ue), S = f.includes("graph_scout");
|
|
312
|
-
k(0, () => ({ type: "agent", run_id: t, id: f, status: "thinking", ts: o() })), k(500 + Math.random() * 500, () => ({ type: "tool", run_id: t, id: f, tool: S ? "graph_neighbors" : "search_records", args_preview: `"${V[0]}"`, ts: o() })), k(600, () => ({ type: "graph", run_id: t, id: f, op: "read", nodes: V, ts: o() })), k(700 + Math.random() * 900, () => ({ type: "llm", run_id: t, id: f, tokens_in: 1500 + Math.round(Math.random() * 2e3), tokens_out: 200 + Math.round(Math.random() * 400), latency_ms: 900 + Math.random() * 1200, ts: o() }));
|
|
313
|
-
const [O, g] = re(S ? [["analytics", "query_metrics"], ["github", "search_code"]] : [["warehouse", "run_sql"], ["analytics", "list_incidents"], ["google-drive", "read_doc"]]), C = 600 + Math.random() * 1400, [R, W] = re(en[O]);
|
|
314
|
-
k(400, () => ({ type: "mcp", run_id: t, id: f, server: O, tool: g, phase: "call", resource: R, resource_kind: W, ts: o() })), k(C, () => ({ type: "mcp", run_id: t, id: f, server: O, tool: g, phase: "result", latency_ms: C, resource: R, resource_kind: W, ts: o() })), Math.random() < 0.7 && k(500, () => ({ type: "graph", run_id: t, id: f, op: "read", nodes: re(Ue), ts: o() })), k(800 + Math.random() * 1200, () => ({ type: "message", run_id: t, from_id: f, to_id: y, text: `Found ${2 + Math.floor(Math.random() * 6)} linked records`, ts: o() })), k(200, () => ({ type: "exit", run_id: t, id: f, status: "done", ts: o() })), s = Math.max(s, m);
|
|
315
|
-
}), v(y), z(y, 1300), M("research", "done", 300);
|
|
316
|
-
const h = `${t}:writer`;
|
|
317
|
-
return M("write", "running", 200), a(h, "writer", y), w(y, h, "Findings merged - draft the brief", 120), d(y, 200), v(h), z(h, 1800), r(400, () => ({ type: "graph", run_id: t, id: h, op: "write", nodes: [`Brief: ${n}`, ...re(Ue).slice(0, 2)], ts: o() })), r(300, () => ({ type: "mcp", run_id: t, id: h, server: "slack", tool: "post_message", phase: "call", resource: "Slack API", resource_kind: "api", ts: o() })), r(700, () => ({ type: "mcp", run_id: t, id: h, server: "slack", tool: "post_message", phase: "result", latency_ms: 700, resource: "Slack API", resource_kind: "api", ts: o() })), M("write", "done", 400), r(150, () => ({ type: "final", run_id: t, text: `Brief on "${n}": linked accounts, incidents and metrics summarized with sources.`, ts: o() })), d(h, 100), r(200, () => ({ type: "run", run_id: t, status: "completed", topic: n, workflow: "research_brief", ts: o() })), s;
|
|
318
|
-
}
|
|
319
|
-
function sn() {
|
|
320
|
-
ct(!0);
|
|
321
|
-
let e = !1;
|
|
322
|
-
const t = [];
|
|
323
|
-
let n = 0;
|
|
324
|
-
const o = () => {
|
|
325
|
-
if (e) return;
|
|
326
|
-
n++;
|
|
327
|
-
const a = nn((v, x) => {
|
|
328
|
-
t.push(
|
|
329
|
-
window.setTimeout(() => {
|
|
330
|
-
if (e) return;
|
|
331
|
-
const z = x(performance.now());
|
|
332
|
-
(Array.isArray(z) ? z : [z]).forEach(Vt);
|
|
333
|
-
}, v)
|
|
334
|
-
);
|
|
335
|
-
});
|
|
336
|
-
t.push(window.setTimeout(() => (n--, s()), a + 300));
|
|
337
|
-
}, s = () => {
|
|
338
|
-
if (!e)
|
|
339
|
-
for (; n < _t; ) {
|
|
340
|
-
const r = 1500 + Math.random() * 3500;
|
|
341
|
-
n++, t.push(window.setTimeout(() => (n--, o()), r));
|
|
342
|
-
}
|
|
343
|
-
};
|
|
344
|
-
return o(), t.push(window.setTimeout(s, 2500)), () => {
|
|
345
|
-
e = !0, t.forEach(clearTimeout), ct(!1);
|
|
346
|
-
};
|
|
347
|
-
}
|
|
348
|
-
const ze = ["Customer", "Account", "Incident", "Ticket", "Product", "Region", "Metric", "Team"], it = [0.24, 0.24, 0.22, 0.12, 0.06, 0.03, 0.05, 0.04], Fe = [
|
|
349
|
-
"Acme Corp",
|
|
350
|
-
"Globex",
|
|
351
|
-
"Initech",
|
|
352
|
-
"Umbrella Co",
|
|
353
|
-
"Payments API",
|
|
354
|
-
"Fraud Shield",
|
|
355
|
-
"Checkout Funnel",
|
|
356
|
-
"Enterprise Plan",
|
|
357
|
-
"Incident #4821",
|
|
358
|
-
"Incident #4790",
|
|
359
|
-
"Ticket #9917",
|
|
360
|
-
"EMEA",
|
|
361
|
-
"APAC",
|
|
362
|
-
"North America",
|
|
363
|
-
"p99 Latency",
|
|
364
|
-
"Churn Q3",
|
|
365
|
-
"Conversion Rate",
|
|
366
|
-
"Chargeback Rate",
|
|
367
|
-
"On-call Team",
|
|
368
|
-
"Customer Success",
|
|
369
|
-
"Release 4.12",
|
|
370
|
-
"Renewal 2026"
|
|
371
|
-
];
|
|
372
|
-
function rn(e = 320) {
|
|
373
|
-
const t = Array.from({ length: e }, (o, s) => {
|
|
374
|
-
if (s < Fe.length) return { id: Fe[s], name: Fe[s], kind: ze[s % ze.length] };
|
|
375
|
-
let r = Math.random(), a = 0;
|
|
376
|
-
for (; a < it.length - 1 && (r -= it[a]) > 0; ) a++;
|
|
377
|
-
return { id: `n${s}`, name: `${ze[a]} ${s}`, kind: ze[a] };
|
|
378
|
-
}), n = Array.from({ length: e }, () => ({ source: t[Math.floor(Math.random() * e)].id, target: t[Math.floor(Math.random() * e)].id }));
|
|
379
|
-
return { nodes: t, links: n };
|
|
380
|
-
}
|
|
381
|
-
let I = null, Xe = !1;
|
|
382
|
-
const we = /* @__PURE__ */ new Set(), Ct = () => we.forEach((e) => e());
|
|
383
|
-
function $e(e) {
|
|
384
|
-
Xe !== e && (Xe = e, Ct());
|
|
385
|
-
}
|
|
386
|
-
function an() {
|
|
387
|
-
return Ke(
|
|
388
|
-
(e) => (we.add(e), () => we.delete(e)),
|
|
389
|
-
() => Xe,
|
|
390
|
-
() => !1
|
|
391
|
-
);
|
|
392
|
-
}
|
|
393
|
-
async function on(e) {
|
|
394
|
-
try {
|
|
395
|
-
const t = await fetch(`${e}/live/health`, { signal: AbortSignal.timeout(2500) });
|
|
396
|
-
return t.ok ? await t.json().catch(() => ({})) ?? {} : null;
|
|
397
|
-
} catch {
|
|
398
|
-
return null;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
async function cn(e, t) {
|
|
402
|
-
if (typeof t.run == "boolean") return t.run;
|
|
403
|
-
try {
|
|
404
|
-
return (await fetch(`${e}/live/run`, { headers: { accept: "application/json" }, signal: AbortSignal.timeout(2500) })).status === 405;
|
|
405
|
-
} catch {
|
|
406
|
-
return !1;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
function ln(e, t) {
|
|
410
|
-
const n = () => {
|
|
411
|
-
e.dead || (lt("sim"), e.stop = sn());
|
|
412
|
-
};
|
|
413
|
-
if (t) return n();
|
|
414
|
-
(async () => {
|
|
415
|
-
const o = await on(e.source);
|
|
416
|
-
if (e.dead) return;
|
|
417
|
-
if (!o) return n();
|
|
418
|
-
lt("live"), cn(e.source, o).then((r) => !e.dead && $e(r)), fetch(`${e.source}/live/graph`).then((r) => r.ok ? r.json() : null).then((r) => {
|
|
419
|
-
var a;
|
|
420
|
-
!e.dead && ((a = r == null ? void 0 : r.nodes) != null && a.length) && (e.galaxy = r, Yt(r.label ?? "FalkorDB · knowledge graph"), Ct());
|
|
421
|
-
}).catch(() => {
|
|
422
|
-
});
|
|
423
|
-
const s = new EventSource(`${e.source}/live/stream`);
|
|
424
|
-
s.onmessage = (r) => {
|
|
425
|
-
try {
|
|
426
|
-
Vt(JSON.parse(r.data));
|
|
427
|
-
} catch {
|
|
428
|
-
}
|
|
429
|
-
}, e.stop = () => s.close();
|
|
430
|
-
})();
|
|
431
|
-
}
|
|
432
|
-
function qt(e) {
|
|
433
|
-
var t;
|
|
434
|
-
e.dead = !0, (t = e.stop) == null || t.call(e), I === e && (I = null, $e(!1));
|
|
435
|
-
}
|
|
436
|
-
function un(e, t) {
|
|
437
|
-
const n = t ? "sim" : `live:${e}`;
|
|
438
|
-
if (I && I.key === n && !I.dead)
|
|
439
|
-
return I.refs++, I;
|
|
440
|
-
I && (console.warn(`[agentglow] one data source per page: switching from "${I.key}" to "${n}"`), qt(I));
|
|
441
|
-
const o = { key: n, source: e, refs: 1, dead: !1, galaxy: null };
|
|
442
|
-
return I = o, ln(o, t), o;
|
|
443
|
-
}
|
|
444
|
-
function dn(e) {
|
|
445
|
-
window.setTimeout(() => {
|
|
446
|
-
--e.refs <= 0 && qt(e);
|
|
447
|
-
}, 0);
|
|
448
|
-
}
|
|
449
|
-
async function fn(e) {
|
|
450
|
-
const t = (I == null ? void 0 : I.source) ?? "", n = await fetch(`${t}/live/run`, { method: "POST", headers: { "content-type": "application/json" }, body: JSON.stringify({ topic: e }) });
|
|
451
|
-
return (n.status === 404 || n.status === 405) && $e(!1), n.ok ? (await n.json().catch(() => ({}))).run_id ?? "started" : null;
|
|
452
|
-
}
|
|
453
|
-
function ys() {
|
|
454
|
-
const { source: e, sim: t } = Ye(), [n] = X(rn), [o, s] = X(n);
|
|
455
|
-
return Y(() => {
|
|
456
|
-
const r = un(e, t), a = () => s(r.galaxy ?? n);
|
|
457
|
-
return a(), we.add(a), () => {
|
|
458
|
-
we.delete(a), dn(r);
|
|
459
|
-
};
|
|
460
|
-
}, [e, t, n]), o;
|
|
461
|
-
}
|
|
462
|
-
function bs(e, t) {
|
|
463
|
-
const n = e.nodes.findIndex((s) => s.name.toLowerCase() === t.toLowerCase());
|
|
464
|
-
if (n >= 0) return n;
|
|
465
|
-
let o = 7;
|
|
466
|
-
for (const s of t.toLowerCase()) o = o * 31 + s.charCodeAt(0) >>> 0;
|
|
467
|
-
return o % e.nodes.length;
|
|
468
|
-
}
|
|
469
|
-
const F = 6, Tt = 12, pn = 9, Le = 10, hn = 12, An = 6, mn = 8e3, gn = 250, yn = 1500, bn = 300, vn = ["planner", "researcher", "graph_scout", "records_scout", "data_scout", "writer"], Mn = (e) => ({
|
|
470
|
-
lane: e,
|
|
471
|
-
active: !1,
|
|
472
|
-
runs: 0,
|
|
473
|
-
agents: 0,
|
|
474
|
-
thinking: 0,
|
|
475
|
-
tokens: 0,
|
|
476
|
-
energy: 0,
|
|
477
|
-
color: Ze[e % Ze.length],
|
|
478
|
-
types: { planner: 0, researcher: 0, graph_scout: 0, records_scout: 0, data_scout: 0, writer: 0 },
|
|
479
|
-
version: 0,
|
|
480
|
-
runIds: []
|
|
481
|
-
}), p = {
|
|
482
|
-
/** grouping in effect (crowded and not "show all") */
|
|
483
|
-
grouped: !1,
|
|
484
|
-
/** crowded per hysteresis, regardless of "show all" (HUD offers "group" again) */
|
|
485
|
-
crowded: !1,
|
|
486
|
-
/** user asked to see everything */
|
|
487
|
-
showAll: !1,
|
|
488
|
-
/** lane the user expanded by clicking its cluster (-1 = none) */
|
|
489
|
-
expandedLane: -1,
|
|
490
|
-
/** bumps whenever which instances/runs are expanded or labeled changes (re-filter your lists) */
|
|
491
|
-
version: 0,
|
|
492
|
-
alive: 0,
|
|
493
|
-
expandedAgents: 0,
|
|
494
|
-
expandedRuns: 0,
|
|
495
|
-
collapsedRuns: 0,
|
|
496
|
-
activeClusters: 0,
|
|
497
|
-
/** smoothed size multiplier for agents (1 when not grouped) */
|
|
498
|
-
scale: 1,
|
|
499
|
-
clusters: Array.from({ length: F }, (e, t) => Mn(t)),
|
|
500
|
-
/** expanded runs per lane (themes nudge a lane's cluster aside when its lane also shows expanded runs) */
|
|
501
|
-
laneExpanded: new Uint16Array(F)
|
|
502
|
-
}, B = /* @__PURE__ */ new Set(), fe = /* @__PURE__ */ new Map(), ee = /* @__PURE__ */ new Set(), ve = /* @__PURE__ */ new Map(), Ee = /* @__PURE__ */ new Map(), ue = [], te = /* @__PURE__ */ new Map(), pe = /* @__PURE__ */ new Map(), ae = [], Me = [], Pe = /* @__PURE__ */ new Map(), ke = new Uint16Array(F), Ce = /* @__PURE__ */ new Map();
|
|
503
|
-
let ut = -1e9, dt = -1, oe = !0, ft = null, pt = -1;
|
|
504
|
-
const Qe = /* @__PURE__ */ new Set();
|
|
505
|
-
let Rt = 0;
|
|
506
|
-
const he = () => {
|
|
507
|
-
Rt++, Qe.forEach((e) => e());
|
|
508
|
-
}, Wt = (e) => (e % F + F) % F;
|
|
509
|
-
function Se(e) {
|
|
510
|
-
const t = i.runs.get(e);
|
|
511
|
-
return t ? Wt(t.slot) : Math.floor(Ht(e, 77) * F) % F;
|
|
512
|
-
}
|
|
513
|
-
const kn = (e) => Se(e.run);
|
|
514
|
-
function vs(e) {
|
|
515
|
-
if (!p.grouped) return !0;
|
|
516
|
-
const t = typeof e == "string" ? i.instances.get(e) : e;
|
|
517
|
-
return t ? B.has(t.run) : !1;
|
|
518
|
-
}
|
|
519
|
-
function Ms(e) {
|
|
520
|
-
return !p.grouped || B.has(e);
|
|
521
|
-
}
|
|
522
|
-
function ks(e) {
|
|
523
|
-
return p.grouped ? e === i.selected || ee.has(e) : !0;
|
|
524
|
-
}
|
|
525
|
-
function Ss() {
|
|
526
|
-
return p.scale;
|
|
527
|
-
}
|
|
528
|
-
function xs(e) {
|
|
529
|
-
return p.grouped ? Pe.get(e) ?? 0 : 0;
|
|
530
|
-
}
|
|
531
|
-
function Sn(e) {
|
|
532
|
-
p.expandedLane = Wt(e), p.showAll = !1, fe.clear(), oe = !0, he();
|
|
533
|
-
}
|
|
534
|
-
function xn() {
|
|
535
|
-
p.expandedLane = -1, fe.clear(), oe = !0, he();
|
|
536
|
-
}
|
|
537
|
-
function ht(e) {
|
|
538
|
-
p.showAll = e, e && (p.expandedLane = -1), oe = !0, he();
|
|
539
|
-
}
|
|
540
|
-
function wn() {
|
|
541
|
-
return Ke(
|
|
542
|
-
(e) => (Qe.add(e), () => Qe.delete(e)),
|
|
543
|
-
() => Rt
|
|
544
|
-
), p;
|
|
545
|
-
}
|
|
546
|
-
const On = (e, t) => (pe.get(e) ?? 0) - (pe.get(t) ?? 0) || (e < t ? -1 : 1), Vn = (e, t) => te.get(e) - te.get(t) || pe.get(t) - pe.get(e);
|
|
547
|
-
function zn(e) {
|
|
548
|
-
ve.clear(), Ee.clear();
|
|
549
|
-
let t = 0;
|
|
550
|
-
for (const l of i.instances.values())
|
|
551
|
-
ve.set(l.run, (ve.get(l.run) ?? 0) + 1), l.exitAt || (t++, Ee.set(l.run, (Ee.get(l.run) ?? 0) + 1));
|
|
552
|
-
p.alive = t;
|
|
553
|
-
const n = p.crowded;
|
|
554
|
-
!p.crowded && t > Tt ? p.crowded = !0 : p.crowded && t < pn && (p.crowded = !1), !p.crowded && n && (p.showAll = !1, p.expandedLane = -1);
|
|
555
|
-
const o = p.crowded && !p.showAll;
|
|
556
|
-
let s = o !== p.grouped;
|
|
557
|
-
if (p.grouped = o, !o) {
|
|
558
|
-
(B.size || ee.size) && (s = !0), B.clear(), fe.clear(), ee.clear(), Pe.clear(), p.laneExpanded.fill(0), p.expandedAgents = t, p.expandedRuns = i.runs.size, p.collapsedRuns = 0, p.activeClusters = 0;
|
|
559
|
-
for (const l of p.clusters) l.active && (l.active = !1, l.runIds.length = 0, l.version++);
|
|
560
|
-
s && p.version++, (s || n !== p.crowded) && he();
|
|
561
|
-
return;
|
|
562
|
-
}
|
|
563
|
-
const r = i.selected ? i.instances.get(i.selected) : void 0, a = (r == null ? void 0 : r.run) ?? null;
|
|
564
|
-
ue.length = 0, te.clear(), pe.clear();
|
|
565
|
-
for (const [l, y] of ve) {
|
|
566
|
-
if (y <= 0) continue;
|
|
567
|
-
const T = i.runs.get(l), q = Se(l), E = B.has(l) && e - (fe.get(l) ?? 0) < mn, h = l === a ? 0 : p.expandedLane === q ? 1 : E ? 2 : (Ee.get(l) ?? 0) > 0 ? 3 : 4;
|
|
568
|
-
te.set(l, h), pe.set(l, (T == null ? void 0 : T.startedAt) ?? 0), ue.push(l);
|
|
569
|
-
}
|
|
570
|
-
ue.sort(Vn);
|
|
571
|
-
const v = p.expandedLane >= 0 ? hn : Le;
|
|
572
|
-
let x = 0, z = 0;
|
|
573
|
-
ke.fill(0);
|
|
574
|
-
for (let l = 0; l < 2; l++)
|
|
575
|
-
for (const y of ue) {
|
|
576
|
-
const T = te.get(y);
|
|
577
|
-
if (T === -1) continue;
|
|
578
|
-
const q = Se(y);
|
|
579
|
-
if (l === 0 && T >= 2 && ke[q]) continue;
|
|
580
|
-
const E = ve.get(y);
|
|
581
|
-
(T === 0 || x === 0 || x + E <= v) && (x += E, z++, ke[q]++, te.set(y, -1));
|
|
582
|
-
}
|
|
583
|
-
for (const l of B)
|
|
584
|
-
te.get(l) !== -1 && (B.delete(l), fe.delete(l), s = !0);
|
|
585
|
-
for (const l of ue)
|
|
586
|
-
te.get(l) === -1 && !B.has(l) && (B.add(l), fe.set(l, e), s = !0);
|
|
587
|
-
Me.length = 0;
|
|
588
|
-
for (const l of B) Me.push(l);
|
|
589
|
-
Me.sort(On), ke.fill(0), Pe.clear();
|
|
590
|
-
for (const l of Me) {
|
|
591
|
-
const y = Se(l);
|
|
592
|
-
Pe.set(l, ke[y]++);
|
|
593
|
-
}
|
|
594
|
-
Me.length = 0, p.expandedRuns = z;
|
|
595
|
-
let d = 0;
|
|
596
|
-
for (const l of p.clusters) l.runIds.length = 0;
|
|
597
|
-
p.laneExpanded.fill(0);
|
|
598
|
-
for (const l of ue) {
|
|
599
|
-
const y = Se(l);
|
|
600
|
-
if (B.has(l)) {
|
|
601
|
-
p.laneExpanded[y]++;
|
|
602
|
-
continue;
|
|
603
|
-
}
|
|
604
|
-
p.clusters[y].runIds.push(l), d++;
|
|
605
|
-
}
|
|
606
|
-
p.collapsedRuns = d, ae.length = 0, Ce.clear();
|
|
607
|
-
for (const l of i.instances.values()) {
|
|
608
|
-
if (l.exitAt || !B.has(l.run)) continue;
|
|
609
|
-
const y = zt(l, e) + (l.status === "thinking" ? 0.6 : 0) + (ee.has(l.id) ? 0.4 : 0) + (e - l.bornAt < 3e3 ? 1 : 0) + (l.subagent ? 0 : 0.2);
|
|
610
|
-
Ce.set(l.id, y), ae.push(l);
|
|
611
|
-
}
|
|
612
|
-
ae.sort((l, y) => Ce.get(y.id) - Ce.get(l.id));
|
|
613
|
-
const w = Math.min(An, ae.length);
|
|
614
|
-
let M = ee.size !== w;
|
|
615
|
-
if (!M)
|
|
616
|
-
for (let l = 0; l < w; l++) ee.has(ae[l].id) || (M = !0);
|
|
617
|
-
if (M) {
|
|
618
|
-
ee.clear();
|
|
619
|
-
for (let l = 0; l < w; l++) ee.add(ae[l].id);
|
|
620
|
-
s = !0;
|
|
621
|
-
}
|
|
622
|
-
ae.length = 0, s && (p.version++, he());
|
|
623
|
-
}
|
|
624
|
-
function En() {
|
|
625
|
-
const e = performance.now(), t = p.clusters, n = Cn;
|
|
626
|
-
for (let r = 0; r < F; r++) {
|
|
627
|
-
const a = t[r];
|
|
628
|
-
n[r * 3] = a.agents, n[r * 3 + 1] = a.thinking, n[r * 3 + 2] = a.runs, a.agents = a.thinking = a.tokens = 0;
|
|
629
|
-
for (const v of vn) a.types[v] = 0;
|
|
630
|
-
De[r] = 0;
|
|
631
|
-
}
|
|
632
|
-
let o = 0;
|
|
633
|
-
for (const r of i.instances.values()) {
|
|
634
|
-
if (B.has(r.run)) {
|
|
635
|
-
r.exitAt || o++;
|
|
636
|
-
continue;
|
|
637
|
-
}
|
|
638
|
-
if (r.exitAt) continue;
|
|
639
|
-
const a = t[kn(r)];
|
|
640
|
-
a.agents++, a.tokens += r.tokens, a.types[r.type]++, r.status === "thinking" && a.thinking++, De[a.lane] += zt(r, e);
|
|
641
|
-
}
|
|
642
|
-
p.expandedAgents = o;
|
|
643
|
-
let s = 0;
|
|
644
|
-
for (let r = 0; r < F; r++) {
|
|
645
|
-
const a = t[r];
|
|
646
|
-
a.runs = a.runIds.length;
|
|
647
|
-
const v = a.runs > 0;
|
|
648
|
-
v && s++;
|
|
649
|
-
const x = a.agents ? Math.min(1, De[r] / a.agents * 0.9 + a.thinking / a.agents * 0.35) : 0;
|
|
650
|
-
a.energy += (x - a.energy) * 0.08, (v !== a.active || n[r * 3] !== a.agents || n[r * 3 + 1] !== a.thinking || n[r * 3 + 2] !== a.runs) && a.version++, a.active = v;
|
|
651
|
-
}
|
|
652
|
-
s !== p.activeClusters && (p.activeClusters = s, he());
|
|
653
|
-
}
|
|
654
|
-
const Cn = new Float64Array(F * 3), De = new Float64Array(F);
|
|
655
|
-
function ws(e = performance.now()) {
|
|
656
|
-
if (e === dt) return;
|
|
657
|
-
dt = e, i.selected !== ft && (ft = i.selected, oe = !0);
|
|
658
|
-
const t = i.instances.size;
|
|
659
|
-
t !== pt && (!p.grouped || t < Tt + 4) && (oe = !0), pt = t, (oe || e - ut > gn) && (oe = !1, ut = e, zn(e)), p.grouped && En();
|
|
660
|
-
const n = p.grouped ? Math.max(0.6, Math.min(1, Math.sqrt(Le / Math.max(Le, p.expandedAgents + p.activeClusters * 1.5)))) : 1;
|
|
661
|
-
p.scale += (n - p.scale) * 0.05, Math.abs(n - p.scale) < 1e-3 && (p.scale = n);
|
|
662
|
-
}
|
|
663
|
-
Be.fadeMs = (e) => p.crowded ? B.has(e.run) || !p.grouped ? yn : bn : wt;
|
|
664
|
-
const qn = Ft;
|
|
665
|
-
function Oe(e) {
|
|
666
|
-
return e.replace("run-", "").slice(0, 6);
|
|
667
|
-
}
|
|
668
|
-
function U(e) {
|
|
669
|
-
const t = i.instances.get(e) ?? i.archive.get(e);
|
|
670
|
-
if (t) return `${t.name} · ${Oe(t.run)}`;
|
|
671
|
-
const [n, o, s] = e.split(":");
|
|
672
|
-
return `${o ?? e.slice(0, 6)}${s !== void 0 ? `#${Number(s) + 1}` : ""} · ${Oe(n)}`;
|
|
673
|
-
}
|
|
674
|
-
function Pt(e) {
|
|
675
|
-
switch (e.type) {
|
|
676
|
-
case "run":
|
|
677
|
-
return `run ${e.status} · ${e.topic}`;
|
|
678
|
-
case "step":
|
|
679
|
-
return `step ${e.step} ${e.status} · ${Oe(e.run_id)}`;
|
|
680
|
-
case "spawn":
|
|
681
|
-
return `spawned ${U(e.id)}`;
|
|
682
|
-
case "exit":
|
|
683
|
-
return `${U(e.id)} ${e.status}`;
|
|
684
|
-
case "agent":
|
|
685
|
-
return `${U(e.id)} ${e.status}`;
|
|
686
|
-
case "llm":
|
|
687
|
-
return e.tokens_in || e.tokens_out ? `${U(e.id)} · LLM ${e.tokens_in}→${e.tokens_out} tok` : `${U(e.id)} · thinking…`;
|
|
688
|
-
// no usage (e.g. Claude Code hooks): no fake 0→0
|
|
689
|
-
case "message":
|
|
690
|
-
return `${U(e.from_id)} → ${U(e.to_id)}: ${e.text}`;
|
|
691
|
-
case "tool":
|
|
692
|
-
return `${U(e.id)} · ${e.tool}(${e.args_preview})`;
|
|
693
|
-
case "graph":
|
|
694
|
-
return `${U(e.id)} ${e.op === "read" ? "read" : "WROTE"} graph: ${e.nodes.slice(0, 2).join(", ")}`;
|
|
695
|
-
case "mcp":
|
|
696
|
-
return e.phase === "call" ? `${U(e.id)} → mcp ${e.server}.${e.tool}()${e.resource ? ` → ${e.resource}` : ""}` : `mcp ${e.server}.${e.tool} returned${e.latency_ms ? ` · ${Math.round(e.latency_ms)}ms` : ""}`;
|
|
697
|
-
case "mcp_register":
|
|
698
|
-
return `mcp server ${e.server} online`;
|
|
699
|
-
case "final":
|
|
700
|
-
return `final answer · ${Oe(e.run_id)}`;
|
|
701
|
-
}
|
|
702
|
-
}
|
|
703
|
-
function Tn(e) {
|
|
704
|
-
var o;
|
|
705
|
-
const t = "id" in e ? e.id : e.type === "message" ? e.from_id : null, n = t ? i.instances.get(t) : null;
|
|
706
|
-
return n ? ce[n.type] : e.type === "graph" ? "#c7d2fe" : e.type === "mcp" ? ((o = i.mcpServers.get(e.server)) == null ? void 0 : o.color) ?? "#94a3b8" : e.type === "run" || e.type === "step" ? "#fde68a" : "#c7d2fe";
|
|
707
|
-
}
|
|
708
|
-
function Os(e) {
|
|
709
|
-
const { hud: t } = Ye();
|
|
710
|
-
return Y(() => {
|
|
711
|
-
e.selected && xe(e.selected);
|
|
712
|
-
}, [e.selected]), t ? /* @__PURE__ */ u(Rn, { ...e }) : /* @__PURE__ */ u(Ge, { children: e.children });
|
|
713
|
-
}
|
|
714
|
-
function Rn({ title: e, subtitle: t, onClose: n, children: o }) {
|
|
715
|
-
const { embedded: s } = Ye(), r = an(), a = Ie(), [, v] = X(0);
|
|
716
|
-
Y(() => {
|
|
717
|
-
const l = window.setInterval(() => v((y) => y + 1), 500);
|
|
718
|
-
return () => clearInterval(l);
|
|
719
|
-
}, []);
|
|
720
|
-
const x = [...a.instances.values()].filter((l) => !l.exitAt), z = [...a.runs.values()].filter((l) => l.status === "started"), d = () => {
|
|
721
|
-
xe(null), n == null || n();
|
|
722
|
-
}, w = s ? "" : location.pathname.replace(/\/$/, "").slice(1), M = s ? "" : location.search;
|
|
723
|
-
return /* @__PURE__ */ A(Ge, { children: [
|
|
724
|
-
/* @__PURE__ */ A("header", { className: "hud hud-top", children: [
|
|
725
|
-
/* @__PURE__ */ A("div", { className: "hud-title", children: [
|
|
726
|
-
/* @__PURE__ */ u("span", { className: "hud-dot" }),
|
|
727
|
-
e,
|
|
728
|
-
a.mode === "sim" && /* @__PURE__ */ u("span", { className: "hud-badge", children: "simulated" }),
|
|
729
|
-
a.mode === "live" && /* @__PURE__ */ u("span", { className: "hud-badge hud-badge--live", children: "live" })
|
|
730
|
-
] }),
|
|
731
|
-
/* @__PURE__ */ u("div", { className: "hud-sub", children: t }),
|
|
732
|
-
a.mode === "live" && r && /* @__PURE__ */ u(Zn, {}),
|
|
733
|
-
!s && /* @__PURE__ */ A("nav", { className: "hud-nav", children: [
|
|
734
|
-
/* @__PURE__ */ u("a", { href: `/${M}`, children: "all" }),
|
|
735
|
-
qn.map((l) => /* @__PURE__ */ u("a", { href: `/${l}${M}`, "aria-current": l === w ? "page" : void 0, children: l }, l))
|
|
736
|
-
] })
|
|
737
|
-
] }),
|
|
738
|
-
/* @__PURE__ */ A("aside", { className: "hud hud-counts", children: [
|
|
739
|
-
/* @__PURE__ */ A("div", { children: [
|
|
740
|
-
/* @__PURE__ */ u("b", { children: z.length }),
|
|
741
|
-
"runs"
|
|
742
|
-
] }),
|
|
743
|
-
/* @__PURE__ */ A("div", { children: [
|
|
744
|
-
/* @__PURE__ */ u("b", { children: x.length }),
|
|
745
|
-
"agents alive"
|
|
746
|
-
] }),
|
|
747
|
-
/* @__PURE__ */ A("div", { children: [
|
|
748
|
-
/* @__PURE__ */ u("b", { children: x.filter((l) => l.status === "thinking").length }),
|
|
749
|
-
"thinking"
|
|
750
|
-
] }),
|
|
751
|
-
/* @__PURE__ */ A("div", { children: [
|
|
752
|
-
/* @__PURE__ */ A("b", { children: [
|
|
753
|
-
(a.stats.tokens / 1e3).toFixed(1),
|
|
754
|
-
"k"
|
|
755
|
-
] }),
|
|
756
|
-
"tokens"
|
|
757
|
-
] }),
|
|
758
|
-
/* @__PURE__ */ A("div", { children: [
|
|
759
|
-
/* @__PURE__ */ u("b", { children: a.stats.graphReads }),
|
|
760
|
-
"graph reads"
|
|
761
|
-
] }),
|
|
762
|
-
/* @__PURE__ */ A("div", { children: [
|
|
763
|
-
/* @__PURE__ */ u("b", { children: a.stats.graphWrites }),
|
|
764
|
-
"graph writes"
|
|
765
|
-
] }),
|
|
766
|
-
/* @__PURE__ */ A("div", { children: [
|
|
767
|
-
/* @__PURE__ */ u("b", { children: a.stats.mcpCalls }),
|
|
768
|
-
"mcp calls"
|
|
769
|
-
] })
|
|
770
|
-
] }),
|
|
771
|
-
/* @__PURE__ */ u(Wn, {}),
|
|
772
|
-
/* @__PURE__ */ u(In, { onClose: d }),
|
|
773
|
-
/* @__PURE__ */ u("aside", { className: "hud hud-ticker", children: a.ticker.slice(0, 9).map((l, y) => /* @__PURE__ */ A("div", { className: "hud-tick", style: { "--c": Tn(l), opacity: 1 - y * 0.09 }, children: [
|
|
774
|
-
/* @__PURE__ */ u("i", {}),
|
|
775
|
-
/* @__PURE__ */ u("span", { children: Pt(l) })
|
|
776
|
-
] }, `${l.ts}-${y}`)) }),
|
|
777
|
-
o
|
|
778
|
-
] });
|
|
779
|
-
}
|
|
780
|
-
function Wn() {
|
|
781
|
-
const e = wn();
|
|
782
|
-
return e.crowded ? e.showAll ? /* @__PURE__ */ A("div", { className: "hud hud-lod", children: [
|
|
783
|
-
/* @__PURE__ */ u("i", {}),
|
|
784
|
-
"showing all ",
|
|
785
|
-
/* @__PURE__ */ u("b", { children: e.alive }),
|
|
786
|
-
" agents",
|
|
787
|
-
/* @__PURE__ */ u("button", { onClick: () => ht(!1), children: "group" })
|
|
788
|
-
] }) : e.activeClusters ? /* @__PURE__ */ A("div", { className: "hud hud-lod", children: [
|
|
789
|
-
/* @__PURE__ */ u("i", {}),
|
|
790
|
-
"grouped: ",
|
|
791
|
-
/* @__PURE__ */ u("b", { children: e.collapsedRuns }),
|
|
792
|
-
" runs in ",
|
|
793
|
-
/* @__PURE__ */ u("b", { children: e.activeClusters }),
|
|
794
|
-
" cluster",
|
|
795
|
-
e.activeClusters === 1 ? "" : "s",
|
|
796
|
-
e.expandedLane >= 0 && /* @__PURE__ */ u("button", { onClick: xn, children: "collapse" }),
|
|
797
|
-
/* @__PURE__ */ u("button", { onClick: () => ht(!0), children: "show all" })
|
|
798
|
-
] }) : null : null;
|
|
799
|
-
}
|
|
800
|
-
const At = ["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?"];
|
|
801
|
-
let Pn = 0;
|
|
802
|
-
function Zn() {
|
|
803
|
-
const [e, t] = X(!1), [n, o] = X("");
|
|
804
|
-
return /* @__PURE__ */ A("div", { className: "hud-run", children: [
|
|
805
|
-
/* @__PURE__ */ u("button", { onClick: async () => {
|
|
806
|
-
const r = At[Pn++ % At.length];
|
|
807
|
-
t(!0);
|
|
808
|
-
try {
|
|
809
|
-
o(await fn(r) ? `started · ${r}` : "failed to start"), window.setTimeout(() => o(""), 6e3);
|
|
810
|
-
} finally {
|
|
811
|
-
t(!1);
|
|
812
|
-
}
|
|
813
|
-
}, disabled: e, children: e ? "Starting…" : "▶ Run agents" }),
|
|
814
|
-
n && /* @__PURE__ */ u("span", { children: n })
|
|
815
|
-
] });
|
|
816
|
-
}
|
|
817
|
-
const Gn = ["all", "alive", "thinking", "waiting", "done"];
|
|
818
|
-
function Bn(e, t) {
|
|
819
|
-
return t === "all" ? !0 : t === "alive" ? !e.exitAt : t === "done" ? !!e.exitAt : !e.exitAt && e.status === t;
|
|
820
|
-
}
|
|
821
|
-
function Zt(e) {
|
|
822
|
-
const t = ((e.exitAt || performance.now()) - e.bornAt) / 1e3;
|
|
823
|
-
return t < 60 ? `${t.toFixed(0)}s` : `${(t / 60).toFixed(1)}m`;
|
|
824
|
-
}
|
|
825
|
-
function In({ onClose: e }) {
|
|
826
|
-
const t = Ie(), [n, o] = X(""), [s, r] = X(/* @__PURE__ */ new Set()), [a, v] = X("alive"), [x, z] = X(""), [d, w] = X(!0), M = L(() => [...t.instances.values(), ...[...t.archive.values()].reverse()], [t.instances.size, t.archive.size, t.ticker]), l = L(() => {
|
|
827
|
-
var m;
|
|
828
|
-
const c = /* @__PURE__ */ new Map();
|
|
829
|
-
for (const k of M) c.set(k.run, ((m = t.runs.get(k.run)) == null ? void 0 : m.topic) ?? k.run);
|
|
830
|
-
return [...c];
|
|
831
|
-
}, [M]), y = n.trim().toLowerCase(), T = M.filter((c) => s.size ? s.has(c.name) : !0).filter((c) => Bn(c, a)).filter((c) => x ? c.run === x : !0).filter((c) => {
|
|
832
|
-
var k;
|
|
833
|
-
if (!y) return !0;
|
|
834
|
-
const m = ((k = t.runs.get(c.run)) == null ? void 0 : k.topic) ?? "";
|
|
835
|
-
return `${c.id} ${c.name} ${m} ${[...c.nodes].join(" ")}`.toLowerCase().includes(y);
|
|
836
|
-
}).sort((c, m) => +!!c.exitAt - +!!m.exitAt || +(m.status === "thinking") - +(c.status === "thinking") || m.bornAt - c.bornAt), q = T.slice(0, 150), E = Et(t.selected), h = L(() => {
|
|
837
|
-
const c = /* @__PURE__ */ new Map();
|
|
838
|
-
for (const m of M) {
|
|
839
|
-
const k = c.get(m.name) ?? { color: ce[m.type], alive: 0 };
|
|
840
|
-
m.exitAt || k.alive++, c.set(m.name, k);
|
|
841
|
-
}
|
|
842
|
-
return [...c].slice(0, 12);
|
|
843
|
-
}, [M]), f = (c) => r((m) => {
|
|
844
|
-
const k = new Set(m);
|
|
845
|
-
return k.has(c) ? k.delete(c) : k.add(c), k;
|
|
846
|
-
});
|
|
847
|
-
return /* @__PURE__ */ A("aside", { className: `hud hud-agents${d ? "" : " is-collapsed"}`, children: [
|
|
848
|
-
/* @__PURE__ */ A("div", { className: "ap-head", children: [
|
|
849
|
-
/* @__PURE__ */ u("strong", { children: E ? "Agent" : "Agents" }),
|
|
850
|
-
/* @__PURE__ */ u("span", { className: "ap-count", children: E ? "" : `${T.length}${T.length !== M.length ? ` / ${M.length}` : ""}` }),
|
|
851
|
-
E && /* @__PURE__ */ u("button", { className: "ap-link", onClick: e, children: "← all agents" }),
|
|
852
|
-
/* @__PURE__ */ u("button", { className: "ap-toggle", onClick: () => w((c) => !c), "aria-label": d ? "Collapse" : "Expand", children: d ? "–" : "+" })
|
|
853
|
-
] }),
|
|
854
|
-
d && !E && /* @__PURE__ */ A(Ge, { children: [
|
|
855
|
-
/* @__PURE__ */ u("input", { className: "ap-search", value: n, onChange: (c) => o(c.target.value), placeholder: "Search agent, run topic, graph node…" }),
|
|
856
|
-
/* @__PURE__ */ u("div", { className: "ap-chips", children: h.map(([c, m]) => /* @__PURE__ */ A("button", { className: s.has(c) ? "on" : "", style: { "--c": m.color }, onClick: () => f(c), children: [
|
|
857
|
-
/* @__PURE__ */ u("i", {}),
|
|
858
|
-
c,
|
|
859
|
-
/* @__PURE__ */ u("em", { children: m.alive || "" })
|
|
860
|
-
] }, c)) }),
|
|
861
|
-
/* @__PURE__ */ A("div", { className: "ap-row-filters", children: [
|
|
862
|
-
/* @__PURE__ */ u("div", { className: "ap-seg", children: Gn.map((c) => /* @__PURE__ */ u("button", { className: a === c ? "on" : "", onClick: () => v(c), children: c }, c)) }),
|
|
863
|
-
/* @__PURE__ */ A("select", { value: x, onChange: (c) => z(c.target.value), children: [
|
|
864
|
-
/* @__PURE__ */ u("option", { value: "", children: "all runs" }),
|
|
865
|
-
l.map(([c, m]) => /* @__PURE__ */ u("option", { value: c, children: m }, c))
|
|
866
|
-
] })
|
|
867
|
-
] }),
|
|
868
|
-
/* @__PURE__ */ A("ul", { className: "ap-list", children: [
|
|
869
|
-
q.map((c) => {
|
|
870
|
-
var m;
|
|
871
|
-
return /* @__PURE__ */ u("li", { children: /* @__PURE__ */ A("button", { onClick: () => xe(c.id), style: { "--c": ce[c.type] }, className: c.exitAt ? "is-done" : "", children: [
|
|
872
|
-
/* @__PURE__ */ u("i", { "data-status": c.exitAt ? "done" : c.status }),
|
|
873
|
-
/* @__PURE__ */ A("span", { className: "ap-name", children: [
|
|
874
|
-
U(c.id),
|
|
875
|
-
/* @__PURE__ */ u("small", { children: ((m = t.runs.get(c.run)) == null ? void 0 : m.topic) ?? "finished run" })
|
|
876
|
-
] }),
|
|
877
|
-
/* @__PURE__ */ A("span", { className: "ap-meta", children: [
|
|
878
|
-
/* @__PURE__ */ u("b", { children: (c.exitAt, c.status) }),
|
|
879
|
-
(c.tokens / 1e3).toFixed(1),
|
|
880
|
-
"k · ",
|
|
881
|
-
Zt(c)
|
|
882
|
-
] })
|
|
883
|
-
] }) }, c.id);
|
|
884
|
-
}),
|
|
885
|
-
T.length > q.length && /* @__PURE__ */ A("li", { className: "ap-more", children: [
|
|
886
|
-
"+",
|
|
887
|
-
T.length - q.length,
|
|
888
|
-
" more - refine the filter"
|
|
889
|
-
] }),
|
|
890
|
-
T.length === 0 && /* @__PURE__ */ u("li", { className: "ap-more", children: "No agents match." })
|
|
891
|
-
] })
|
|
892
|
-
] }),
|
|
893
|
-
d && E && /* @__PURE__ */ u(Jn, { i: E })
|
|
894
|
-
] });
|
|
895
|
-
}
|
|
896
|
-
function Jn({ i: e }) {
|
|
897
|
-
const t = Ie(), n = t.runs.get(e.run), o = Et(e.parent), s = [...t.instances.values(), ...t.archive.values()].filter((a) => a.parent === e.id), r = [...t.mcpPending.values()].filter((a) => a.instance === e.id);
|
|
898
|
-
return /* @__PURE__ */ A("div", { className: "ap-detail", style: { "--c": ce[e.type] }, children: [
|
|
899
|
-
/* @__PURE__ */ A("h3", { children: [
|
|
900
|
-
/* @__PURE__ */ u("i", {}),
|
|
901
|
-
" ",
|
|
902
|
-
e.name,
|
|
903
|
-
" ",
|
|
904
|
-
/* @__PURE__ */ A("small", { children: [
|
|
905
|
-
e.subagent ? "subagent" : "agent",
|
|
906
|
-
" · ",
|
|
907
|
-
Oe(e.run)
|
|
908
|
-
] })
|
|
909
|
-
] }),
|
|
910
|
-
/* @__PURE__ */ A("div", { className: "ap-status", "data-status": e.exitAt ? "done" : e.status, children: [
|
|
911
|
-
e.exitAt ? `finished (${e.status})` : e.status,
|
|
912
|
-
" · alive ",
|
|
913
|
-
Zt(e)
|
|
914
|
-
] }),
|
|
915
|
-
/* @__PURE__ */ A("dl", { className: "ap-stats", children: [
|
|
916
|
-
/* @__PURE__ */ A("div", { children: [
|
|
917
|
-
/* @__PURE__ */ u("dt", { children: "tokens" }),
|
|
918
|
-
/* @__PURE__ */ A("dd", { children: [
|
|
919
|
-
(e.tokens / 1e3).toFixed(1),
|
|
920
|
-
"k"
|
|
921
|
-
] })
|
|
922
|
-
] }),
|
|
923
|
-
/* @__PURE__ */ A("div", { children: [
|
|
924
|
-
/* @__PURE__ */ u("dt", { children: "LLM calls" }),
|
|
925
|
-
/* @__PURE__ */ u("dd", { children: e.llmCalls })
|
|
926
|
-
] }),
|
|
927
|
-
/* @__PURE__ */ A("div", { children: [
|
|
928
|
-
/* @__PURE__ */ u("dt", { children: "tool calls" }),
|
|
929
|
-
/* @__PURE__ */ u("dd", { children: e.toolCalls })
|
|
930
|
-
] }),
|
|
931
|
-
/* @__PURE__ */ A("div", { children: [
|
|
932
|
-
/* @__PURE__ */ u("dt", { children: "MCP calls" }),
|
|
933
|
-
/* @__PURE__ */ u("dd", { children: e.mcpCalls })
|
|
934
|
-
] }),
|
|
935
|
-
/* @__PURE__ */ A("div", { children: [
|
|
936
|
-
/* @__PURE__ */ u("dt", { children: "graph nodes" }),
|
|
937
|
-
/* @__PURE__ */ u("dd", { children: e.nodes.size })
|
|
938
|
-
] })
|
|
939
|
-
] }),
|
|
940
|
-
/* @__PURE__ */ A("section", { children: [
|
|
941
|
-
/* @__PURE__ */ u("h4", { children: "Run" }),
|
|
942
|
-
/* @__PURE__ */ u("p", { children: n ? n.topic : e.run }),
|
|
943
|
-
n && /* @__PURE__ */ u("div", { className: "ap-steps", children: _e.map((a) => /* @__PURE__ */ u("span", { "data-status": n.steps[a], children: a }, a)) })
|
|
944
|
-
] }),
|
|
945
|
-
(o || s.length > 0) && /* @__PURE__ */ A("section", { children: [
|
|
946
|
-
/* @__PURE__ */ u("h4", { children: "Lineage" }),
|
|
947
|
-
o && /* @__PURE__ */ A("button", { className: "ap-chip-link", style: { "--c": ce[o.type] }, onClick: () => xe(o.id), children: [
|
|
948
|
-
"↑ spawned by ",
|
|
949
|
-
U(o.id)
|
|
950
|
-
] }),
|
|
951
|
-
s.map((a) => /* @__PURE__ */ A("button", { className: "ap-chip-link", style: { "--c": ce[a.type] }, onClick: () => xe(a.id), children: [
|
|
952
|
-
"↓ ",
|
|
953
|
-
U(a.id),
|
|
954
|
-
" ",
|
|
955
|
-
a.exitAt ? "✓" : ""
|
|
956
|
-
] }, a.id))
|
|
957
|
-
] }),
|
|
958
|
-
r.length > 0 && /* @__PURE__ */ A("section", { children: [
|
|
959
|
-
/* @__PURE__ */ u("h4", { children: "Waiting on MCP" }),
|
|
960
|
-
r.map((a) => /* @__PURE__ */ A("p", { className: "ap-wait", children: [
|
|
961
|
-
a.server,
|
|
962
|
-
".",
|
|
963
|
-
a.tool,
|
|
964
|
-
"() · ",
|
|
965
|
-
Lt(a).toFixed(1),
|
|
966
|
-
"s"
|
|
967
|
-
] }, a.key))
|
|
968
|
-
] }),
|
|
969
|
-
e.nodes.size > 0 && /* @__PURE__ */ A("section", { children: [
|
|
970
|
-
/* @__PURE__ */ u("h4", { children: "Graph nodes touched" }),
|
|
971
|
-
/* @__PURE__ */ u("p", { className: "ap-nodes", children: [...e.nodes].slice(0, 24).join(" · ") })
|
|
972
|
-
] }),
|
|
973
|
-
/* @__PURE__ */ A("section", { children: [
|
|
974
|
-
/* @__PURE__ */ u("h4", { children: "Activity" }),
|
|
975
|
-
/* @__PURE__ */ u("ul", { className: "ap-events", children: e.recent.map((a, v) => /* @__PURE__ */ u("li", { children: Pt(a) }, v)) })
|
|
976
|
-
] })
|
|
977
|
-
] });
|
|
978
|
-
}
|
|
979
|
-
const Nn = "data:font/woff;base64,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", Un = "data:font/woff;base64,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", mt = { sans: Nn, mono: Un }, gt = " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~·›…—–ו", Fn = [
|
|
980
|
-
[32, 126],
|
|
981
|
-
[160, 255],
|
|
982
|
-
[305, 305],
|
|
983
|
-
[338, 339],
|
|
984
|
-
[699, 700],
|
|
985
|
-
[710, 710],
|
|
986
|
-
[730, 730],
|
|
987
|
-
[732, 732],
|
|
988
|
-
[8192, 8303],
|
|
989
|
-
[8364, 8364],
|
|
990
|
-
[8482, 8482],
|
|
991
|
-
[8593, 8593],
|
|
992
|
-
[8595, 8595],
|
|
993
|
-
[8722, 8722],
|
|
994
|
-
[8725, 8725]
|
|
995
|
-
], Dn = (e) => {
|
|
996
|
-
for (const [t, n] of Fn) if (e >= t && e <= n) return !0;
|
|
997
|
-
return !1;
|
|
998
|
-
}, jn = { "▶": "›", "▸": "›", "→": "›", "⟶": "›", "←": "‹", "✓": "·", "✔": "·", "✕": "×", "✗": "×", "✖": "×", "⋯": "…" };
|
|
999
|
-
function Gt(e) {
|
|
1000
|
-
let t = "";
|
|
1001
|
-
for (const n of e) {
|
|
1002
|
-
const o = jn[n];
|
|
1003
|
-
o !== void 0 ? t += o : Dn(n.codePointAt(0)) && (t += n);
|
|
1004
|
-
}
|
|
1005
|
-
return t;
|
|
1006
|
-
}
|
|
1007
|
-
const qe = /* @__PURE__ */ new Map();
|
|
1008
|
-
function Hn(e) {
|
|
1009
|
-
const t = qe.get(e);
|
|
1010
|
-
if (t !== void 0) return t;
|
|
1011
|
-
const n = Gt(e).replace(/\s+/g, " ").replace(/^[\s·›]+|[\s·›]+$/g, "");
|
|
1012
|
-
return qe.size > 2e3 && qe.clear(), qe.set(e, n), n;
|
|
1013
|
-
}
|
|
1014
|
-
const yt = (e, t) => t > 0 && e.length > t ? e.slice(0, Math.max(1, t - 1)).trimEnd() + "…" : e, bt = new b.PlaneGeometry(1, 1), Te = () => {
|
|
1015
|
-
}, vt = {
|
|
1016
|
-
top: new b.MeshBasicMaterial({ color: 16777215, transparent: !0, depthTest: !1, depthWrite: !1, toneMapped: !1, side: b.DoubleSide }),
|
|
1017
|
-
depth: new b.MeshBasicMaterial({ color: 16777215, transparent: !0, depthTest: !0, depthWrite: !1, toneMapped: !1, side: b.DoubleSide })
|
|
1018
|
-
}, Xn = (
|
|
1019
|
-
/* glsl */
|
|
1020
|
-
`
|
|
1021
|
-
varying vec2 vUv;
|
|
1022
|
-
void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); }`
|
|
1023
|
-
), Ln = (
|
|
1024
|
-
/* glsl */
|
|
1025
|
-
`
|
|
1026
|
-
uniform vec2 uSize; uniform float uRadius; uniform float uBorder; uniform float uBar; uniform float uUnder;
|
|
1027
|
-
uniform vec3 uFill; uniform float uFillA; uniform vec3 uEdge; uniform float uEdgeA; uniform float uOpacity;
|
|
1028
|
-
varying vec2 vUv;
|
|
1029
|
-
float sdBox(vec2 p, vec2 b, float r) { vec2 q = abs(p) - b + r; return length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - r; }
|
|
1030
|
-
void main() {
|
|
1031
|
-
vec2 p = (vUv - 0.5) * uSize;
|
|
1032
|
-
float d = sdBox(p, uSize * 0.5, uRadius);
|
|
1033
|
-
float aa = fwidth(d) * 0.75;
|
|
1034
|
-
float inside = 1.0 - smoothstep(-aa, aa, d);
|
|
1035
|
-
float ring = inside * smoothstep(-uBorder - aa, -uBorder + aa, d) * step(0.00001, uBorder);
|
|
1036
|
-
float bar = inside * (1.0 - smoothstep(-aa, aa, p.x + uSize.x * 0.5 - uBar)) * step(0.00001, uBar);
|
|
1037
|
-
float under = inside * (1.0 - smoothstep(-aa, aa, p.y + uSize.y * 0.5 - uUnder)) * step(0.00001, uUnder);
|
|
1038
|
-
float e = max(max(ring, bar), under);
|
|
1039
|
-
vec3 col = mix(uFill, uEdge, e);
|
|
1040
|
-
float a = max(inside * uFillA, e * uEdgeA) * uOpacity;
|
|
1041
|
-
if (a < 0.002) discard;
|
|
1042
|
-
gl_FragColor = vec4(col, a);
|
|
1043
|
-
}`
|
|
1044
|
-
), Mt = {
|
|
1045
|
-
// border / bar / under in × font size; round in × plate height (0.5 = pill)
|
|
1046
|
-
pill: { fillA: 0.52, edgeA: 0.6, border: 0.055, bar: 0, under: 0, round: 0.5 },
|
|
1047
|
-
box: { fillA: 0.62, edgeA: 0.55, border: 0.055, bar: 0, under: 0, round: 0.14 },
|
|
1048
|
-
bar: { fillA: 0.66, edgeA: 0.95, border: 0, bar: 0.14, under: 0, round: 0.06 },
|
|
1049
|
-
underline: { fillA: 0.52, edgeA: 0.8, border: 0, bar: 0, under: 0.07, round: 0.06 },
|
|
1050
|
-
none: { fillA: 0, edgeA: 0, border: 0, bar: 0, under: 0, round: 0 }
|
|
1051
|
-
}, Bt = new b.Color("#03050b"), je = new b.Color("#eef2f8"), kt = new b.Color("#94a3b8");
|
|
1052
|
-
function Re(e, t, n) {
|
|
1053
|
-
if (e == null) return { text: "", ranges: null, key: "" };
|
|
1054
|
-
if (typeof e == "string") {
|
|
1055
|
-
const a = Hn(t ? e.toUpperCase() : e);
|
|
1056
|
-
return { text: a, ranges: null, key: a };
|
|
1057
|
-
}
|
|
1058
|
-
let o = "", s = "";
|
|
1059
|
-
const r = {};
|
|
1060
|
-
for (const a of e) {
|
|
1061
|
-
let v = Gt(t ? a.text.toUpperCase() : a.text);
|
|
1062
|
-
if (o || (v = v.trimStart()), !v) continue;
|
|
1063
|
-
const x = a.color != null ? n.set(a.color).getHex() : -1;
|
|
1064
|
-
x >= 0 && (r[o.length] = x), s += `${v}${x}`, o += v;
|
|
1065
|
-
}
|
|
1066
|
-
return { text: o.trimEnd(), ranges: r, key: s };
|
|
1067
|
-
}
|
|
1068
|
-
function Vs(e, t, n = ["working…", "done"]) {
|
|
1069
|
-
const o = e.status !== "started";
|
|
1070
|
-
if (!e.hasSteps) return [{ text: o ? e.status === "failed" ? n[2] ?? "failed" : n[1] : n[0], color: t.base }];
|
|
1071
|
-
const s = [{ text: "hatchet · ", color: t.base }];
|
|
1072
|
-
return _e.forEach((r, a) => {
|
|
1073
|
-
a && s.push({ text: " › ", color: t.base });
|
|
1074
|
-
const v = e.steps[r];
|
|
1075
|
-
s.push({ text: r, color: v === "running" ? t.current : v === "done" ? t.done : v === "failed" ? "#ff5d5d" : t.queued ?? Kn(t.base) });
|
|
1076
|
-
}), s;
|
|
1077
|
-
}
|
|
1078
|
-
const Qn = new b.Color(), Kn = (e) => "#" + Qn.set(e).lerp(Bt, 0.45).getHexString();
|
|
1079
|
-
function zs({ prefix: e = "", suffix: t = "", ...n }) {
|
|
1080
|
-
const o = Ie();
|
|
1081
|
-
return /* @__PURE__ */ u(It, { ...n, text: e + o.graphLabel + t });
|
|
1082
|
-
}
|
|
1083
|
-
function It(e) {
|
|
1084
|
-
return /* @__PURE__ */ u(Nt, { fallback: null, children: /* @__PURE__ */ u(_n, { ...e }) });
|
|
1085
|
-
}
|
|
1086
|
-
const Yn = {
|
|
1087
|
-
color: "#818cf8",
|
|
1088
|
-
size: 0.24,
|
|
1089
|
-
opacity: 1,
|
|
1090
|
-
maxWidth: 0,
|
|
1091
|
-
anchorX: "center",
|
|
1092
|
-
anchorY: "middle",
|
|
1093
|
-
textAlign: "center",
|
|
1094
|
-
plate: "pill",
|
|
1095
|
-
font: "sans",
|
|
1096
|
-
uppercase: !1,
|
|
1097
|
-
letterSpacing: 0,
|
|
1098
|
-
depthTest: !1,
|
|
1099
|
-
depthFade: 0.22,
|
|
1100
|
-
fadeRange: [14, 80],
|
|
1101
|
-
renderOrder: 20,
|
|
1102
|
-
fadeMs: 0,
|
|
1103
|
-
pxRange: [7.5, 15],
|
|
1104
|
-
glow: 1,
|
|
1105
|
-
leader: !1
|
|
1106
|
-
};
|
|
1107
|
-
function _n(e) {
|
|
1108
|
-
var E, h;
|
|
1109
|
-
const t = { ...Yn, ...$n(e) }, n = Z(t);
|
|
1110
|
-
n.current = t;
|
|
1111
|
-
const o = Z(null), s = Z(null), r = Z(null), a = Z(null), v = Z(null), x = Z(null), z = Z(null), d = L(
|
|
1112
|
-
() => ({
|
|
1113
|
-
target: t.opacity,
|
|
1114
|
-
cur: t.opacity,
|
|
1115
|
-
emph: !1,
|
|
1116
|
-
accent: new b.Color(t.color),
|
|
1117
|
-
textCol: new b.Color(t.textColor ?? je),
|
|
1118
|
-
subCol: new b.Color(t.secondaryColor ?? kt),
|
|
1119
|
-
mainColor: new b.Color(),
|
|
1120
|
-
subColor: new b.Color(),
|
|
1121
|
-
tmp: new b.Color(),
|
|
1122
|
-
wp: new b.Vector3(),
|
|
1123
|
-
q: new b.Quaternion(),
|
|
1124
|
-
hasSub: !1,
|
|
1125
|
-
keyM: "\0",
|
|
1126
|
-
keyS: "\0"
|
|
1127
|
-
}),
|
|
1128
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1129
|
-
[]
|
|
1130
|
-
), w = L(
|
|
1131
|
-
() => ({
|
|
1132
|
-
plate: new b.ShaderMaterial({
|
|
1133
|
-
vertexShader: Xn,
|
|
1134
|
-
fragmentShader: Ln,
|
|
1135
|
-
transparent: !0,
|
|
1136
|
-
depthWrite: !1,
|
|
1137
|
-
toneMapped: !1,
|
|
1138
|
-
uniforms: {
|
|
1139
|
-
uSize: { value: new b.Vector2(1, 1) },
|
|
1140
|
-
uRadius: { value: 0.1 },
|
|
1141
|
-
uBorder: { value: 0 },
|
|
1142
|
-
uBar: { value: 0 },
|
|
1143
|
-
uUnder: { value: 0 },
|
|
1144
|
-
uFill: { value: Bt.clone() },
|
|
1145
|
-
uFillA: { value: 0.5 },
|
|
1146
|
-
uEdge: { value: new b.Color() },
|
|
1147
|
-
uEdgeA: { value: 0.5 },
|
|
1148
|
-
uOpacity: { value: 1 }
|
|
1149
|
-
}
|
|
1150
|
-
}),
|
|
1151
|
-
leader: new b.MeshBasicMaterial({ transparent: !0, depthWrite: !1, toneMapped: !1 })
|
|
1152
|
-
}),
|
|
1153
|
-
[]
|
|
1154
|
-
);
|
|
1155
|
-
Y(() => () => (w.plate.dispose(), w.leader.dispose()), [w]), w.plate.depthTest = t.depthTest, w.leader.depthTest = t.depthTest;
|
|
1156
|
-
const M = L(() => {
|
|
1157
|
-
const f = () => n.current.secondarySize ?? n.current.size * 0.78, c = () => {
|
|
1158
|
-
const S = n.current;
|
|
1159
|
-
return S.maxWidth > 0 ? Math.max(4, Math.floor(S.maxWidth / (S.size * (S.font === "mono" ? 0.62 : 0.56) * (1 + S.letterSpacing)))) : 0;
|
|
1160
|
-
};
|
|
1161
|
-
return { applyColors: () => {
|
|
1162
|
-
const S = n.current, O = w.plate.uniforms, g = Mt[S.plate];
|
|
1163
|
-
O.uEdge.value.copy(d.accent).lerp(je, d.emph ? 0.3 : 0), O.uEdgeA.value = Math.min(1, g.edgeA * (d.emph ? 1.45 : 1)), O.uFillA.value = g.fillA, w.leader.color.copy(d.accent).multiplyScalar(0.85);
|
|
1164
|
-
const C = S.glow * (d.emph ? 1.12 : 0.95);
|
|
1165
|
-
d.mainColor.copy(d.textCol).multiplyScalar(C), d.subColor.copy(d.subCol).multiplyScalar(C);
|
|
1166
|
-
}, layout: () => {
|
|
1167
|
-
var Ve, be, et, tt, nt, st;
|
|
1168
|
-
const S = x.current;
|
|
1169
|
-
if (!S || !a.current || !r.current) return;
|
|
1170
|
-
const O = n.current, g = O.size, C = (Ve = S.textRenderInfo) == null ? void 0 : Ve.blockBounds, R = d.hasSub ? (et = (be = z.current) == null ? void 0 : be.textRenderInfo) == null ? void 0 : et.blockBounds : void 0, W = C && S.text ? C[2] - C[0] : 0, P = R ? R[2] - R[0] : 0, G = g * 1.16, D = d.hasSub ? f() * 1.2 : 0, _ = d.hasSub ? g * 0.1 : 0, H = Mt[O.plate], j = H.bar * g, me = O.plate === "none", ge = me ? 0 : g * (O.plate === "pill" && !d.hasSub ? 0.6 : 0.5), $ = me ? 0 : g * 0.28, ne = Math.max(W, P), se = ne + ge * 2 + j, J = G + _ + D + $ * 2, Q = w.plate.uniforms;
|
|
1171
|
-
Q.uSize.value.set(se, J), Q.uRadius.value = Math.min(J * H.round, J * 0.5), Q.uBorder.value = H.border * g, Q.uBar.value = j, Q.uUnder.value = H.under * g, a.current.scale.set(Math.max(se, 1e-4), Math.max(J, 1e-4), 1), a.current.visible = !me && ne > 0;
|
|
1172
|
-
const ye = O.textAlign === "left" ? -ne / 2 + j / 2 : O.textAlign === "right" ? ne / 2 + j / 2 : j / 2, K = J / 2 - $ - G / 2;
|
|
1173
|
-
S.position.set(ye, K, 1e-3), (tt = z.current) == null || tt.position.set(ye, K - G / 2 - _ - D / 2, 1e-3);
|
|
1174
|
-
const le = ((nt = O.offset) == null ? void 0 : nt[0]) ?? 0, ie = ((st = O.offset) == null ? void 0 : st[1]) ?? 0;
|
|
1175
|
-
r.current.position.set(le + (O.anchorX === "left" ? se / 2 : O.anchorX === "right" ? -se / 2 : 0), ie + (O.anchorY === "bottom" ? J / 2 : O.anchorY === "top" ? -J / 2 : 0), 0);
|
|
1176
|
-
const N = v.current;
|
|
1177
|
-
if (N) {
|
|
1178
|
-
const rt = Math.hypot(le, ie);
|
|
1179
|
-
N.visible = rt > 1e-3, N.position.set(le / 2, ie / 2, 0), N.rotation.z = Math.atan2(ie, le), N.scale.set(Math.max(rt, 1e-4), g * 0.05, 1);
|
|
1180
|
-
}
|
|
1181
|
-
}, setLines: (S, O) => {
|
|
1182
|
-
const g = x.current, C = z.current;
|
|
1183
|
-
if (!g) return;
|
|
1184
|
-
const R = n.current, W = c(), P = Re(S, R.uppercase, d.tmp), G = Re(O, R.uppercase, d.tmp), D = `${P.key}|${W}`, _ = `${G.key}|${W}`;
|
|
1185
|
-
if (D !== d.keyM && (d.keyM = D, g.text = yt(P.text, W), g.colorRanges = P.ranges, g.sync()), C && _ !== d.keyS) {
|
|
1186
|
-
d.keyS = _;
|
|
1187
|
-
const H = yt(G.text, W ? Math.round(W * R.size / f()) : 0);
|
|
1188
|
-
d.hasSub = !!H, C.visible = d.hasSub, C.text = H, C.colorRanges = G.ranges, C.sync();
|
|
1189
|
-
}
|
|
1190
|
-
} };
|
|
1191
|
-
}, [w, d]);
|
|
1192
|
-
Y(() => {
|
|
1193
|
-
const f = [x.current, z.current].filter(Boolean), c = () => M.layout();
|
|
1194
|
-
for (const m of f) m.addEventListener("synccomplete", c);
|
|
1195
|
-
return M.applyColors(), M.setLines(n.current.text, n.current.secondary), M.layout(), () => {
|
|
1196
|
-
for (const m of f) m.removeEventListener("synccomplete", c);
|
|
1197
|
-
};
|
|
1198
|
-
}, [M]);
|
|
1199
|
-
const l = Re(t.text, t.uppercase, d.tmp).key, y = Re(t.secondary, t.uppercase, d.tmp).key;
|
|
1200
|
-
Y(() => M.setLines(n.current.text, n.current.secondary), [M, l, y, t.uppercase, t.maxWidth, t.size]), Y(() => {
|
|
1201
|
-
d.accent.set(n.current.color), d.textCol.set(n.current.textColor ?? je), d.subCol.set(n.current.secondaryColor ?? kt), M.applyColors();
|
|
1202
|
-
}, [M, d, t.color, t.textColor, t.secondaryColor, t.glow, t.plate]), Y(() => void (d.target = t.opacity), [d, t.opacity]), Y(() => M.layout(), [M, t.size, t.plate, t.anchorX, t.anchorY, t.textAlign, (E = t.offset) == null ? void 0 : E[0], (h = t.offset) == null ? void 0 : h[1]]), Ut(
|
|
1203
|
-
t.ref,
|
|
1204
|
-
() => ({
|
|
1205
|
-
get object() {
|
|
1206
|
-
return o.current;
|
|
1207
|
-
},
|
|
1208
|
-
setOpacity(f, c = !1) {
|
|
1209
|
-
d.target = f, c && (d.cur = f);
|
|
1210
|
-
},
|
|
1211
|
-
setText(f, c) {
|
|
1212
|
-
M.setLines(f, c ?? null);
|
|
1213
|
-
},
|
|
1214
|
-
setColor(f) {
|
|
1215
|
-
d.tmp.set(f), d.tmp.equals(d.accent) || (d.accent.copy(d.tmp), M.applyColors());
|
|
1216
|
-
},
|
|
1217
|
-
setEmphasis(f) {
|
|
1218
|
-
f !== d.emph && (d.emph = f, M.applyColors());
|
|
1219
|
-
}
|
|
1220
|
-
}),
|
|
1221
|
-
[M, d]
|
|
1222
|
-
), St(({ camera: f, size: c }, m) => {
|
|
1223
|
-
const k = o.current, V = s.current;
|
|
1224
|
-
if (!k || !V) return;
|
|
1225
|
-
const S = n.current;
|
|
1226
|
-
if (d.cur !== d.target && (S.fadeMs <= 0 ? d.cur = d.target : (d.cur += (d.target - d.cur) * Math.min(1, m * 1e3 / S.fadeMs), Math.abs(d.target - d.cur) < 4e-3 && (d.cur = d.target))), d.cur <= 4e-3 || !k.visible) {
|
|
1227
|
-
V.visible = !1;
|
|
1228
|
-
return;
|
|
1229
|
-
}
|
|
1230
|
-
V.visible = !0, k.getWorldPosition(d.wp), k.getWorldQuaternion(d.q), V.quaternion.copy(d.q.invert()).multiply(f.quaternion);
|
|
1231
|
-
const O = d.wp.distanceTo(f.position);
|
|
1232
|
-
let g = 1;
|
|
1233
|
-
if (S.pxRange) {
|
|
1234
|
-
const R = f, W = f, P = R.isPerspectiveCamera ? 2 * O * Math.tan(b.MathUtils.degToRad(R.fov) / 2) / (R.zoom * c.height) : (W.top - W.bottom) / (W.zoom * c.height), G = S.size / Math.max(P, 1e-6);
|
|
1235
|
-
g = b.MathUtils.clamp(G, S.pxRange[0], S.pxRange[1]) / G;
|
|
1236
|
-
}
|
|
1237
|
-
V.scale.setScalar(g / (k.matrixWorld.getMaxScaleOnAxis() || 1));
|
|
1238
|
-
const C = d.cur * (1 - S.depthFade * b.MathUtils.smoothstep(O, S.fadeRange[0], S.fadeRange[1]));
|
|
1239
|
-
w.plate.uniforms.uOpacity.value = C, w.leader.opacity = C * 0.65, x.current && (x.current.fillOpacity = C), z.current && (z.current.fillOpacity = C * 0.92);
|
|
1240
|
-
});
|
|
1241
|
-
const T = t.depthTest ? vt.depth : vt.top, q = !!t.onClick;
|
|
1242
|
-
return /* @__PURE__ */ u("group", { ref: o, position: t.position, visible: t.visible ?? !0, children: /* @__PURE__ */ A("group", { ref: s, visible: !1, children: [
|
|
1243
|
-
t.leader && /* @__PURE__ */ u("mesh", { ref: v, geometry: bt, material: w.leader, renderOrder: t.renderOrder, raycast: Te }),
|
|
1244
|
-
/* @__PURE__ */ A("group", { ref: r, children: [
|
|
1245
|
-
/* @__PURE__ */ u(
|
|
1246
|
-
"mesh",
|
|
1247
|
-
{
|
|
1248
|
-
ref: a,
|
|
1249
|
-
geometry: bt,
|
|
1250
|
-
material: w.plate,
|
|
1251
|
-
renderOrder: t.renderOrder,
|
|
1252
|
-
raycast: q ? b.Mesh.prototype.raycast : Te,
|
|
1253
|
-
onClick: t.onClick,
|
|
1254
|
-
onPointerOver: q ? () => {
|
|
1255
|
-
var f;
|
|
1256
|
-
return document.body.style.cursor = "pointer", (f = t.onHover) == null ? void 0 : f.call(t, !0);
|
|
1257
|
-
} : void 0,
|
|
1258
|
-
onPointerOut: q ? () => {
|
|
1259
|
-
var f;
|
|
1260
|
-
return document.body.style.cursor = "", (f = t.onHover) == null ? void 0 : f.call(t, !1);
|
|
1261
|
-
} : void 0
|
|
1262
|
-
}
|
|
1263
|
-
),
|
|
1264
|
-
/* @__PURE__ */ u(
|
|
1265
|
-
at,
|
|
1266
|
-
{
|
|
1267
|
-
ref: x,
|
|
1268
|
-
font: mt[t.font],
|
|
1269
|
-
characters: gt,
|
|
1270
|
-
fontSize: t.size,
|
|
1271
|
-
letterSpacing: t.letterSpacing,
|
|
1272
|
-
anchorX: t.textAlign,
|
|
1273
|
-
anchorY: "middle",
|
|
1274
|
-
material: T,
|
|
1275
|
-
renderOrder: t.renderOrder + 1,
|
|
1276
|
-
raycast: Te,
|
|
1277
|
-
color: d.mainColor,
|
|
1278
|
-
children: ""
|
|
1279
|
-
}
|
|
1280
|
-
),
|
|
1281
|
-
/* @__PURE__ */ u(
|
|
1282
|
-
at,
|
|
1283
|
-
{
|
|
1284
|
-
ref: z,
|
|
1285
|
-
font: mt[t.font],
|
|
1286
|
-
characters: gt,
|
|
1287
|
-
fontSize: t.secondarySize ?? t.size * 0.78,
|
|
1288
|
-
letterSpacing: t.letterSpacing,
|
|
1289
|
-
anchorX: t.textAlign,
|
|
1290
|
-
anchorY: "middle",
|
|
1291
|
-
material: T,
|
|
1292
|
-
renderOrder: t.renderOrder + 1,
|
|
1293
|
-
raycast: Te,
|
|
1294
|
-
color: d.subColor,
|
|
1295
|
-
visible: !1,
|
|
1296
|
-
children: ""
|
|
1297
|
-
}
|
|
1298
|
-
),
|
|
1299
|
-
t.children
|
|
1300
|
-
] })
|
|
1301
|
-
] }) });
|
|
1302
|
-
}
|
|
1303
|
-
function $n(e) {
|
|
1304
|
-
const t = {};
|
|
1305
|
-
for (const n in e) e[n] !== void 0 && (t[n] = e[n]);
|
|
1306
|
-
return t;
|
|
1307
|
-
}
|
|
1308
|
-
const de = 220, Jt = ["planner", "researcher", "writer", "graph_scout", "records_scout", "data_scout"], es = Object.fromEntries(Jt.map((e) => [e, new b.Color(ce[e])]));
|
|
1309
|
-
let We = null;
|
|
1310
|
-
function ts() {
|
|
1311
|
-
if (We) return We;
|
|
1312
|
-
const e = document.createElement("canvas");
|
|
1313
|
-
e.width = e.height = 128;
|
|
1314
|
-
const t = e.getContext("2d"), n = t.createRadialGradient(64, 64, 0, 64, 64, 64);
|
|
1315
|
-
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), We = new b.CanvasTexture(e), We;
|
|
1316
|
-
}
|
|
1317
|
-
const ns = (
|
|
1318
|
-
/* glsl */
|
|
1319
|
-
`
|
|
1320
|
-
attribute vec4 aSeed; // theta, phi(cos), radius 0..1, speed
|
|
1321
|
-
attribute vec3 aColor;
|
|
1322
|
-
attribute float aBright;
|
|
1323
|
-
uniform float uTime, uRadius, uEnergy, uSize, uFlat, uChaos, uPix;
|
|
1324
|
-
varying vec3 vColor;
|
|
1325
|
-
varying float vA;
|
|
1326
|
-
void main() {
|
|
1327
|
-
float th = aSeed.x + uTime * aSeed.w * (0.35 + uEnergy * 0.9);
|
|
1328
|
-
float cp = aSeed.y;
|
|
1329
|
-
float sp = sqrt(max(0.0, 1.0 - cp * cp));
|
|
1330
|
-
float r = uRadius * (0.35 + 0.65 * aSeed.z) * (1.0 + 0.06 * sin(uTime * 1.7 + aSeed.x * 7.0) * (0.4 + uEnergy));
|
|
1331
|
-
vec3 p = vec3(cos(th) * sp, cp * (1.0 - uFlat), sin(th) * sp) * r;
|
|
1332
|
-
// swarm: drift on a lissajous so the school churns
|
|
1333
|
-
p += uChaos * uRadius * 0.22 * vec3(sin(uTime * 0.9 * aSeed.w + aSeed.x * 3.0), sin(uTime * 1.1 + aSeed.z * 9.0), cos(uTime * 0.7 * aSeed.w + aSeed.y * 5.0));
|
|
1334
|
-
vec4 mv = modelViewMatrix * vec4(p, 1.0);
|
|
1335
|
-
gl_Position = projectionMatrix * mv;
|
|
1336
|
-
float tw = 0.75 + 0.25 * sin(uTime * (2.0 + aSeed.w * 3.0) + aSeed.x * 11.0);
|
|
1337
|
-
gl_PointSize = uSize * uPix * (0.7 + 0.6 * aSeed.z) * (1.0 + aBright * 0.6) * tw / max(0.5, -mv.z);
|
|
1338
|
-
vColor = aColor * (0.55 + aBright * 0.9 + uEnergy * 0.5);
|
|
1339
|
-
vA = tw;
|
|
1340
|
-
}
|
|
1341
|
-
`
|
|
1342
|
-
), ss = (
|
|
1343
|
-
/* glsl */
|
|
1344
|
-
`
|
|
1345
|
-
uniform float uOpacity;
|
|
1346
|
-
varying vec3 vColor;
|
|
1347
|
-
varying float vA;
|
|
1348
|
-
void main() {
|
|
1349
|
-
vec2 d = gl_PointCoord - 0.5;
|
|
1350
|
-
float r = length(d);
|
|
1351
|
-
float a = smoothstep(0.5, 0.0, r);
|
|
1352
|
-
a *= a;
|
|
1353
|
-
gl_FragColor = vec4(vColor * a * vA * uOpacity, 1.0);
|
|
1354
|
-
}
|
|
1355
|
-
`
|
|
1356
|
-
);
|
|
1357
|
-
function rs() {
|
|
1358
|
-
const e = new b.BufferGeometry(), t = new Float32Array(de * 3), n = new Float32Array(de * 4);
|
|
1359
|
-
for (let o = 0; o < de; o++)
|
|
1360
|
-
n[o * 4] = o * 2.39996 + Math.random() * 0.3, n[o * 4 + 1] = 1 - 2 * (o * 0.618034 % 1), n[o * 4 + 2] = Math.pow(Math.random(), 0.45), n[o * 4 + 3] = (0.25 + Math.random() * 0.6) * (Math.random() < 0.5 ? -1 : 1);
|
|
1361
|
-
return e.setAttribute("position", new b.BufferAttribute(t, 3)), e.setAttribute("aSeed", new b.BufferAttribute(n, 4)), e.setAttribute("aColor", new b.BufferAttribute(new Float32Array(de * 3), 3)), e.setAttribute("aBright", new b.BufferAttribute(new Float32Array(de), 1)), e.setDrawRange(0, 0), e.boundingSphere = new b.Sphere(new b.Vector3(), 50), e;
|
|
1362
|
-
}
|
|
1363
|
-
function as({ cluster: e, position: t, place: n, color: o, radius: s = 1.4, variant: r = "orb", pointSize: a = 1, labelBelow: v = 1.25, glowGain: x = 1, onClick: z }) {
|
|
1364
|
-
const d = Z(null), w = Z(null), M = Z(null), l = Z(null), y = Z(null), T = Z(null), q = Z(null), E = L(() => new b.Color(o ?? e.color), [o, e.color]), h = L(() => ({ l1: "", l2: "", seen: -1, vis: 0, hover: 0, over: !1, r: s, pos: new b.Vector3(), c: new b.Color(), tokSeen: -1, thSeen: -1, fresh: !0 }), [s]), f = L(rs, []), c = L(() => {
|
|
1365
|
-
const V = (O) => new b.SpriteMaterial({ map: ts(), color: "#000", blending: b.AdditiveBlending, depthWrite: !1, transparent: !0, toneMapped: !1, opacity: O }), S = new b.ShaderMaterial({
|
|
1366
|
-
vertexShader: ns,
|
|
1367
|
-
fragmentShader: ss,
|
|
1368
|
-
transparent: !0,
|
|
1369
|
-
depthWrite: !1,
|
|
1370
|
-
blending: b.AdditiveBlending,
|
|
1371
|
-
toneMapped: !1,
|
|
1372
|
-
uniforms: {
|
|
1373
|
-
uTime: { value: 0 },
|
|
1374
|
-
uRadius: { value: s },
|
|
1375
|
-
uEnergy: { value: 0 },
|
|
1376
|
-
uSize: { value: 0.16 * s * a },
|
|
1377
|
-
uFlat: { value: r === "stars" ? 0.55 : 0 },
|
|
1378
|
-
uChaos: { value: r === "swarm" ? 1 : r === "stars" ? 0 : 0.25 },
|
|
1379
|
-
uPix: { value: 1 },
|
|
1380
|
-
uOpacity: { value: 0 }
|
|
1381
|
-
}
|
|
1382
|
-
});
|
|
1383
|
-
return { core: V(1), hot: V(1), halo: V(1), points: S, hit: new b.MeshBasicMaterial({ visible: !1 }) };
|
|
1384
|
-
}, [s, a, r]);
|
|
1385
|
-
St(({ clock: V, gl: S, camera: O }) => {
|
|
1386
|
-
var ne, se;
|
|
1387
|
-
const g = e, C = V.elapsedTime, R = g.active && p.grouped ? 1 : 0;
|
|
1388
|
-
h.vis += (R - h.vis) * (R ? 0.06 : 0.12), h.vis < 3e-3 && (h.vis = 0);
|
|
1389
|
-
const W = h.vis > 0;
|
|
1390
|
-
if (d.current && (d.current.visible = W), q.current && !(W && R) && q.current.setOpacity(0, !0), !W) {
|
|
1391
|
-
h.fresh = !0;
|
|
1392
|
-
return;
|
|
1393
|
-
}
|
|
1394
|
-
d.current && (n ? n(g.lane, h.pos, C) : t && h.pos.set(t[0], t[1], t[2]), h.fresh ? (d.current.position.copy(h.pos), h.fresh = !1) : d.current.position.lerp(h.pos, 0.06));
|
|
1395
|
-
const P = g.energy, G = 0.8 + 0.22 * Math.log2(1 + g.agents / 6);
|
|
1396
|
-
h.hover += ((h.over ? 1 : 0) - h.hover) * 0.15;
|
|
1397
|
-
const D = s * Math.min(1.7, G) * (0.6 + 0.4 * h.vis) * (1 + h.hover * 0.08), _ = Math.sin(C * (1.1 + P * 2.6) + g.lane), H = 1 + _ * (0.04 + P * 0.1), j = c.points.uniforms;
|
|
1398
|
-
j.uTime.value = C, j.uRadius.value = D, j.uEnergy.value = P;
|
|
1399
|
-
const me = O.fov ?? 50;
|
|
1400
|
-
j.uPix.value = S.domElement.height / (2 * Math.tan(me * Math.PI / 360)), j.uOpacity.value = h.vis;
|
|
1401
|
-
const ge = x * h.vis;
|
|
1402
|
-
if (w.current && (w.current.scale.setScalar(D * 2.4 * H), c.core.color.copy(E).multiplyScalar((0.32 + P * 0.45 + h.hover * 0.2) * ge)), M.current && (M.current.scale.setScalar(D * 0.9 * H), c.hot.color.copy(E).lerp(os, 0.55).multiplyScalar((0.35 + P * 0.6) * ge)), l.current && (l.current.scale.setScalar(D * 5.5 * (1 + _ * 0.03)), c.halo.color.copy(E).multiplyScalar((0.07 + P * 0.08) * ge)), (ne = y.current) == null || ne.scale.setScalar(D * 1.15), (se = T.current) == null || se.position.set(0, -D * v - 0.35, 0), g.version !== h.seen) {
|
|
1403
|
-
h.seen = g.version;
|
|
1404
|
-
const J = Math.min(de, Math.max(18, g.agents * 2)), Q = f.getAttribute("aColor"), ye = f.getAttribute("aBright");
|
|
1405
|
-
let K = 0;
|
|
1406
|
-
const le = g.agents ? J / g.agents : 1;
|
|
1407
|
-
for (const N of Jt) {
|
|
1408
|
-
const Ve = Math.round(g.types[N] * le);
|
|
1409
|
-
for (let be = 0; be < Ve && K < J; be++, K++)
|
|
1410
|
-
h.c.copy(es[N]).lerp(E, 0.25), Q.setXYZ(K, h.c.r, h.c.g, h.c.b);
|
|
1411
|
-
}
|
|
1412
|
-
for (; K < J; K++) Q.setXYZ(K, E.r, E.g, E.b);
|
|
1413
|
-
const ie = g.agents ? g.thinking / g.agents : 0;
|
|
1414
|
-
for (let N = 0; N < J; N++) ye.setX(N, N * 0.618034 % 1 < ie ? 1 : 0);
|
|
1415
|
-
Q.needsUpdate = !0, ye.needsUpdate = !0, f.setDrawRange(0, J), h.l1 = `${g.runs} run${g.runs === 1 ? "" : "s"} · ${g.agents} agent${g.agents === 1 ? "" : "s"}`;
|
|
1416
|
-
}
|
|
1417
|
-
const $ = Math.round(g.tokens / 1e3);
|
|
1418
|
-
($ !== h.tokSeen || g.thinking !== h.thSeen) && (h.tokSeen = $, h.thSeen = g.thinking, h.l2 = `${g.thinking} thinking · ${$ >= 1e3 ? `${($ / 1e3).toFixed(1)}M` : `${$}k`} tok`), q.current && (q.current.setText(h.l1, h.l2), q.current.setEmphasis(h.over), R && q.current.setOpacity(Math.min(1, h.vis * 1.2), !0));
|
|
1419
|
-
});
|
|
1420
|
-
const m = (V) => {
|
|
1421
|
-
var S;
|
|
1422
|
-
(S = V == null ? void 0 : V.stopPropagation) == null || S.call(V), (z ?? Sn)(e.lane);
|
|
1423
|
-
}, k = (V) => {
|
|
1424
|
-
h.over = V, document.body.style.cursor = V ? "pointer" : "";
|
|
1425
|
-
};
|
|
1426
|
-
return /* @__PURE__ */ A("group", { ref: d, visible: !1, children: [
|
|
1427
|
-
/* @__PURE__ */ u("sprite", { ref: l, material: c.halo }),
|
|
1428
|
-
/* @__PURE__ */ u("sprite", { ref: w, material: c.core }),
|
|
1429
|
-
/* @__PURE__ */ u("sprite", { ref: M, material: c.hot }),
|
|
1430
|
-
/* @__PURE__ */ u("points", { geometry: f, material: c.points, frustumCulled: !1 }),
|
|
1431
|
-
/* @__PURE__ */ u("mesh", { ref: y, material: c.hit, onClick: m, onPointerOver: () => k(!0), onPointerOut: () => k(!1), children: /* @__PURE__ */ u("sphereGeometry", { args: [1, 12, 8] }) }),
|
|
1432
|
-
/* @__PURE__ */ u("group", { ref: T, children: /* @__PURE__ */ u(
|
|
1433
|
-
It,
|
|
1434
|
-
{
|
|
1435
|
-
ref: q,
|
|
1436
|
-
text: "",
|
|
1437
|
-
secondary: "",
|
|
1438
|
-
color: o ?? e.color,
|
|
1439
|
-
plate: "box",
|
|
1440
|
-
size: 0.36,
|
|
1441
|
-
opacity: 0,
|
|
1442
|
-
pxRange: [10, 14],
|
|
1443
|
-
renderOrder: 28,
|
|
1444
|
-
onClick: (V) => m(V),
|
|
1445
|
-
onHover: (V) => k(V)
|
|
1446
|
-
}
|
|
1447
|
-
) })
|
|
1448
|
-
] });
|
|
1449
|
-
}
|
|
1450
|
-
const os = new b.Color("#ffffff"), cs = Array.from({ length: F }, (e, t) => t);
|
|
1451
|
-
function Es({ place: e, ...t }) {
|
|
1452
|
-
return /* @__PURE__ */ u(Ge, { children: cs.map((n) => /* @__PURE__ */ u(as, { cluster: p.clusters[n], place: e, ...t }, n)) });
|
|
1453
|
-
}
|
|
1454
|
-
export {
|
|
1455
|
-
Es as C,
|
|
1456
|
-
wt as F,
|
|
1457
|
-
zs as G,
|
|
1458
|
-
Os as H,
|
|
1459
|
-
ps as K,
|
|
1460
|
-
It as L,
|
|
1461
|
-
ot as M,
|
|
1462
|
-
Dt as R,
|
|
1463
|
-
_e as S,
|
|
1464
|
-
ce as T,
|
|
1465
|
-
hs as a,
|
|
1466
|
-
Ss as b,
|
|
1467
|
-
Lt as c,
|
|
1468
|
-
Ms as d,
|
|
1469
|
-
zt as e,
|
|
1470
|
-
ys as f,
|
|
1471
|
-
ws as g,
|
|
1472
|
-
Ht as h,
|
|
1473
|
-
vs as i,
|
|
1474
|
-
xs as j,
|
|
1475
|
-
Vs as k,
|
|
1476
|
-
p as l,
|
|
1477
|
-
Se as m,
|
|
1478
|
-
bs as n,
|
|
1479
|
-
Wt as o,
|
|
1480
|
-
ms as p,
|
|
1481
|
-
F as q,
|
|
1482
|
-
gs as r,
|
|
1483
|
-
ks as s,
|
|
1484
|
-
As as t,
|
|
1485
|
-
Ie as u,
|
|
1486
|
-
as as v,
|
|
1487
|
-
i as w,
|
|
1488
|
-
Et as x
|
|
1489
|
-
};
|