agentglow 0.2.12 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunks/KitScene-C_6JIRsN.js +4264 -0
- package/dist/chunks/index-Bp54n3io.js +48 -0
- package/dist/chunks/{index-iZBODPwI.js → index-C8H7LPMJ.js} +1 -1
- package/dist/chunks/{index-ueGnGU_X.js → index-CDuUwfpS.js} +1 -1
- package/dist/chunks/{index-BTFr1mn1.js → index-CXqvoWvI.js} +1 -1
- package/dist/chunks/{index-BM4W1tNM.js → index-CqpUvfPA.js} +1 -1
- package/dist/chunks/{index-Cj5cs1rS.js → index-TlqkewVz.js} +1 -1
- package/dist/index.js +1 -1
- package/dist/style.css +1 -1
- package/dist/types/AgentScene.d.ts +1 -1
- package/dist/types/world.d.ts +228 -0
- package/package.json +1 -1
- package/dist/chunks/KitScene-Cug87OSc.js +0 -3121
- package/dist/chunks/index-B0urBeRS.js +0 -48
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as s } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as b, useContext as v, useMemo as w, Suspense as S, lazy as A } from "react";
|
|
3
|
+
const m = (e) => (e ?? "").trim().replace(/\/+$/, "");
|
|
4
|
+
function C() {
|
|
5
|
+
var t, o;
|
|
6
|
+
const e = typeof location > "u" ? new URLSearchParams() : new URLSearchParams(location.search), n = (a) => e.has(a) && !["0", "false", "no"].includes(e.get(a).toLowerCase());
|
|
7
|
+
return {
|
|
8
|
+
source: m(e.get("source")),
|
|
9
|
+
sim: ((t = e.get("sim")) == null ? void 0 : t.toLowerCase()) === "hf" ? "hf" : n("sim"),
|
|
10
|
+
hud: e.get("hud") === null ? !0 : n("hud"),
|
|
11
|
+
embedded: !1,
|
|
12
|
+
run: ((o = e.get("run")) == null ? void 0 : o.trim()) || void 0
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
const d = b(null), E = d.Provider;
|
|
16
|
+
function F() {
|
|
17
|
+
return v(d) ?? C();
|
|
18
|
+
}
|
|
19
|
+
const L = ["neural", "constellation", "orbit", "atom", "flow"], T = {
|
|
20
|
+
orbit: { name: "Orbit", tagline: "Agents orbit a graph galaxy; runs are rings, MCP servers are satellites." },
|
|
21
|
+
neural: { name: "Neural", tagline: "A living brain: agents fire as neurons, messages pulse along synapses." },
|
|
22
|
+
flow: { name: "Flow", tagline: "A murmuration: agents condense as eddies out of the current." },
|
|
23
|
+
constellation: { name: "Constellation", tagline: "A night sky: agents are stars linked into constellations as they delegate." },
|
|
24
|
+
atom: { name: "Atom", tagline: "An atom: agents are electrons in shells, subagents jump orbits, LLM calls flash photons." }
|
|
25
|
+
}, M = {
|
|
26
|
+
orbit: () => import("./index-CqpUvfPA.js"),
|
|
27
|
+
neural: () => import("./index-C8H7LPMJ.js"),
|
|
28
|
+
flow: () => import("./index-TlqkewVz.js"),
|
|
29
|
+
constellation: () => import("./index-CXqvoWvI.js"),
|
|
30
|
+
atom: () => import("./index-CDuUwfpS.js")
|
|
31
|
+
}, g = /* @__PURE__ */ new Map();
|
|
32
|
+
function x(e) {
|
|
33
|
+
let n = g.get(e);
|
|
34
|
+
return n || g.set(e, n = A(M[e])), n;
|
|
35
|
+
}
|
|
36
|
+
function H({ theme: e = "neural", source: n = "", hud: t = !0, sim: o = !1, scope: a, run: r, token: l, style: f, className: i }) {
|
|
37
|
+
const c = L.includes(e) ? e : "neural", h = x(c), u = m(n), p = w(
|
|
38
|
+
() => ({ source: u, sim: o, hud: t, embedded: !0, scope: a || void 0, run: r || void 0, token: l || void 0 }),
|
|
39
|
+
[u, o, t, a, r, l]
|
|
40
|
+
);
|
|
41
|
+
return /* @__PURE__ */ s("div", { className: `agentglow-embed${i ? ` ${i}` : ""}`, style: f, "data-theme": c, children: /* @__PURE__ */ s(E, { value: p, children: /* @__PURE__ */ s(S, { fallback: null, children: /* @__PURE__ */ s(h, {}) }) }) });
|
|
42
|
+
}
|
|
43
|
+
export {
|
|
44
|
+
H as A,
|
|
45
|
+
L as T,
|
|
46
|
+
T as a,
|
|
47
|
+
F as u
|
|
48
|
+
};
|
|
@@ -7,7 +7,7 @@ import { EffectComposer as st, Bloom as it, Vignette as ct } from "@react-three/
|
|
|
7
7
|
import { useFrame as re, useThree as lt } from "@react-three/fiber";
|
|
8
8
|
import { useRef as z, useMemo as P, useEffect as ut, useState as $e } from "react";
|
|
9
9
|
import * as o from "three";
|
|
10
|
-
import { T as Xe, w as L, a as ge, f as Ee, p as pt, e as ft, s as dt, r as fe, L as be, l as mt, g as ht, b as We, K as gt, o as vt, q as wt, G as yt, t as bt, R as Mt, u as St, v as Ct, m as De, c as Ye, d as At, n as xt } from "./KitScene-
|
|
10
|
+
import { T as Xe, w as L, a as ge, f as Ee, p as pt, e as ft, s as dt, r as fe, L as be, l as mt, g as ht, b as We, K as gt, o as vt, q as wt, G as yt, t as bt, R as Mt, u as St, v as Ct, m as De, c as Ye, d as At, n as xt } from "./KitScene-C_6JIRsN.js";
|
|
11
11
|
const ee = (e) => e < 0 ? 0 : e > 1 ? 1 : e, Ie = (e) => 1 - Math.pow(1 - ee(e), 3), Me = (e) => (e = ee(e), e < 0.5 ? 4 * e * e * e : 1 - Math.pow(-2 * e + 2, 3) / 2), Rt = (e) => {
|
|
12
12
|
e = ee(e);
|
|
13
13
|
const r = 2.2;
|
|
@@ -6,7 +6,7 @@ import { EffectComposer as Vt, Bloom as zt, Vignette as Gt } from "@react-three/
|
|
|
6
6
|
import { useRef as R, useMemo as z, useEffect as Et, useState as Ft } from "react";
|
|
7
7
|
import * as t from "three";
|
|
8
8
|
import { useFrame as ve } from "@react-three/fiber";
|
|
9
|
-
import { T as bt, m as Mt, w as j, L as Ie, d as Rt, a as xe, c as ut, h as Ae, l as Bt, F as It, p as Ot, e as Tt, f as be, s as Lt, S as $e, y as _t, R as Nt, j as Ut, o as Me, u as Xt, E as Ht, v as Kt, K as jt, q as qt, G as Yt, t as Wt, n as $t } from "./KitScene-
|
|
9
|
+
import { T as bt, m as Mt, w as j, L as Ie, d as Rt, a as xe, c as ut, h as Ae, l as Bt, F as It, p as Ot, e as Tt, f as be, s as Lt, S as $e, y as _t, R as Nt, j as Ut, o as Me, u as Xt, E as Ht, v as Kt, K as jt, q as qt, G as Yt, t as Wt, n as $t } from "./KitScene-C_6JIRsN.js";
|
|
10
10
|
var wt;
|
|
11
11
|
const q = typeof window < "u" && !!((wt = window.matchMedia) != null && wt.call(window, "(prefers-reduced-motion: reduce)").matches), ft = new t.Color("#3db8ff"), Se = new t.Color("#9fdcff"), Xe = new t.Color("#ff4fa8"), pt = new t.Color("#ff9ccf"), ne = new t.Color(1, 1, 1), Fe = new t.Color("#ffc24a"), Dt = new t.Color("#ff2d55"), Zt = new t.Color("#3a4560"), ct = Object.fromEntries(Object.entries(bt).map(([e, r]) => [e, new t.Color(r)])), W = (e) => e < 0 ? 0 : e > 1 ? 1 : e, Ke = (e) => 1 - Math.pow(1 - W(e), 3), Be = (e) => (e = W(e), e < 0.5 ? 4 * e * e * e : 1 - Math.pow(-2 * e + 2, 3) / 2);
|
|
12
12
|
let Le = null;
|
|
@@ -4,7 +4,7 @@ var L = (e, n, r) => at(e, typeof n != "symbol" ? n + "" : n, r);
|
|
|
4
4
|
import { jsxs as q, Fragment as de, jsx as g } from "react/jsx-runtime";
|
|
5
5
|
import { EffectComposer as it, Bloom as ct, Vignette as lt } from "@react-three/postprocessing";
|
|
6
6
|
import * as t from "three";
|
|
7
|
-
import { T as We, h as X, K as ft, o as je, w as N, a as ce, x as ut, C as dt, L as ye, G as pt, t as ht, m as tt, c as qe, d as mt, D as Ye, R as vt, u as gt, v as bt, e as wt, s as yt, f as Ve, n as St } from "./KitScene-
|
|
7
|
+
import { T as We, h as X, K as ft, o as je, w as N, a as ce, x as ut, C as dt, L as ye, G as pt, t as ht, m as tt, c as qe, d as mt, D as Ye, R as vt, u as gt, v as bt, e as wt, s as yt, f as Ve, n as St } from "./KitScene-C_6JIRsN.js";
|
|
8
8
|
import { useThree as Re, useFrame as se } from "@react-three/fiber";
|
|
9
9
|
import { useMemo as P, useRef as T, useEffect as Mt } from "react";
|
|
10
10
|
var et;
|
|
@@ -4,7 +4,7 @@ import { EffectComposer as Ke, Bloom as Qe, Vignette as Je, Noise as et } from "
|
|
|
4
4
|
import { useFrame as N } from "@react-three/fiber";
|
|
5
5
|
import { useRef as A, useMemo as R, useEffect as tt, useState as De } from "react";
|
|
6
6
|
import * as e from "three";
|
|
7
|
-
import { h as oe, i as nt, T as le, f as ot, a as Z, p as rt, e as st, l as at, s as ct, L as ue, w as T, K as it, G as lt, m as Fe, b as Q, c as Re, d as ut, g as Me, S as ye, R as pt, j as ft, u as dt, k as mt, n as ht } from "./KitScene-
|
|
7
|
+
import { h as oe, i as nt, T as le, f as ot, a as Z, p as rt, e as st, l as at, s as ct, L as ue, w as T, K as it, G as lt, m as Fe, b as Q, c as Re, d as ut, g as Me, S as ye, R as pt, j as ft, u as dt, k as mt, n as ht } from "./KitScene-C_6JIRsN.js";
|
|
8
8
|
var Ye;
|
|
9
9
|
const F = typeof window < "u" && !!((Ye = window.matchMedia) != null && Ye.call(window, "(prefers-reduced-motion: reduce)").matches), _e = Math.PI * 2, Ge = [Math.PI * 0.5, Math.PI * 0.5 + _e / 3, Math.PI * 0.5 + _e * 2 / 3], Ve = nt, yt = (t) => (oe(t, 11) - 0.5) * 2.4, V = {
|
|
10
10
|
/** the galaxy's inner (tilted) group; its matrixWorld includes the kit's side placement + scale */
|
|
@@ -6,7 +6,7 @@ import { useFrame as nt, useThree as Me } from "@react-three/fiber";
|
|
|
6
6
|
import { EffectComposer as ye, Bloom as Ae, Vignette as be, Noise as we } from "@react-three/postprocessing";
|
|
7
7
|
import { useMemo as mt, useRef as V, useEffect as St } from "react";
|
|
8
8
|
import * as M from "three";
|
|
9
|
-
import { r as xe, w as W, m as Yt, K as Re, x as Se, f as st, o as Z, y as le, z as he, R as Ge, d as oe, p as ve, e as ze, j as Bt, c as Dt, T as fe, i as Ce, n as Ie, G as Pe, L as yt, u as Fe, S as Be, A as Oe, B as Ee, k as Te } from "./KitScene-
|
|
9
|
+
import { r as xe, w as W, m as Yt, K as Re, x as Se, f as st, o as Z, y as le, z as he, R as Ge, d as oe, p as ve, e as ze, j as Bt, c as Dt, T as fe, i as Ce, n as Ie, G as Pe, L as yt, u as Fe, S as Be, A as Oe, B as Ee, k as Te } from "./KitScene-C_6JIRsN.js";
|
|
10
10
|
const Ct = 32, It = new M.Vector3(), Ut = new M.Vector3(), wt = new M.Vector3(), xt = new M.Color(), _e = new M.Color(1, 1, 1);
|
|
11
11
|
function ke(f, e, a, r, s) {
|
|
12
12
|
let o = null;
|
package/dist/index.js
CHANGED
package/dist/style.css
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
.scene-root{position:fixed;top:0;right:0;bottom:0;left:0;background:#03050b;color:#e8edf5;font-family:Public Sans,system-ui,sans-serif;overflow:hidden}.scene-root canvas{display:block}.hud{position:absolute;z-index:10;background:#0a0e1a8c;border:1px solid rgba(148,163,255,.16);border-radius:14px;backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3);box-shadow:0 8px 32px #00000059,inset 0 1px #ffffff0a}.hud-topwrap{position:absolute;z-index:10;top:12px;left:12px;max-width:calc(100% - var(--hud-side, 320px) - 36px);display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;pointer-events:none}.hud-topwrap.is-rail{--hud-side: 40px}.hud-topwrap>*{pointer-events:auto}.hud-top{position:relative;padding:6px 8px 6px 12px;min-width:0}.hud-bar{display:flex;align-items:center;gap:4px 8px;flex-wrap:wrap}.hud-bar .hud-run{margin-top:0}.hud-info{all:unset;cursor:pointer;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font:italic 600 11px/1 Georgia,serif;color:#94a3b8;border:1px solid rgba(148,163,184,.35)}.hud-info:hover,.hud-info.on{color:#e2e8f0;border-color:#818cf8}.hud-theme{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#03050b8c url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%2394a3b8'/%3E%3C/svg%3E") no-repeat right 9px center;color:#cbd5e1;border:1px solid rgba(148,163,255,.22);border-radius:999px;font:inherit;font-size:11px;text-transform:uppercase;letter-spacing:.08em;padding:4px 24px 4px 10px;cursor:pointer;outline:none}.hud-theme:hover{border-color:#818cf8}.hud-title{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;letter-spacing:-.01em;white-space:nowrap}.hud-sub{margin:6px 0 2px;max-width:460px;font-size:12px;line-height:1.45;color:#94a3b8}.hud-dot{width:9px;height:9px;border-radius:50%;background:#22c55e;box-shadow:0 0 10px #22c55e;animation:hud-ping 1.6s ease-out infinite}@keyframes hud-ping{0%{box-shadow:0 0 #22c55eb3}to{box-shadow:0 0 0 10px #22c55e00}}.hud-badge{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;padding:2px 7px;border-radius:999px;background:#94a3b829;color:#cbd5e1}.hud-stats{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.hud-stat{font-size:11px;color:#94a3b8;padding:2px 8px;border-radius:999px;background:#03050b66;white-space:nowrap}.hud-stat b{color:#f1f5f9;font-weight:700;font-variant-numeric:tabular-nums}.scene-root :focus-visible{outline:2px solid #818cf8;outline-offset:2px}.hud-side{top:12px;right:12px;bottom:12px;width:320px;display:flex;flex-direction:column;padding:8px 10px 10px;font-size:13px;box-sizing:border-box;animation:hs-in .18s ease-out}.hud-side.is-rail{width:40px;padding:6px 0;align-items:center}@keyframes hs-in{0%{opacity:.4}}.hs-head{display:flex;align-items:center;gap:2px;padding-bottom:8px;margin:0 -2px 2px;border-bottom:1px solid rgba(148,163,255,.12)}.hs-head button{all:unset;cursor:pointer;display:flex;align-items:center;gap:5px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#94a3b8;padding:5px 9px;border-radius:999px}.hs-head button:hover{color:#e2e8f0}.hs-head button.on{color:#f1f5f9;background:#818cf838}.hs-head em,.hs-icon em{font-style:normal;font-size:10px;font-weight:700;font-variant-numeric:tabular-nums;color:#c7d2fe;letter-spacing:0}.hs-head .hs-collapse{margin-left:auto;font-size:14px;padding:2px 8px;letter-spacing:0}.hs-rail{display:flex;flex-direction:column;align-items:center;gap:6px}.hs-rail button{all:unset;cursor:pointer;position:relative;width:30px;height:30px;display:grid;place-items:center;border-radius:9px;color:#94a3b8}.hs-rail button:hover{color:#e2e8f0;background:#94a3ff1a}.hs-rail .hs-collapse{font-size:14px;margin-bottom:4px}.hs-icon em{position:absolute;top:-3px;right:-5px;min-width:14px;height:14px;padding:0 3px;box-sizing:border-box;border-radius:999px;display:grid;place-items:center;font-size:9px;background:#4f46e5;color:#eef2ff}.hs-icon em:empty{min-width:8px;width:8px;height:8px;padding:0;top:1px;right:1px;background:#22d3ee;box-shadow:0 0 8px #22d3ee}.hs-body{flex:1;min-height:0;display:flex;flex-direction:column}.hs-body[hidden]{display:none}.hs-empty{margin:14px 4px;font-size:12px;line-height:1.5;color:#64748b}.hs-events{list-style:none;margin:6px -4px 0;padding:0;overflow-y:auto;min-height:0;flex:1;font-size:11.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hs-events li>*{all:unset;box-sizing:border-box;width:100%;display:flex;gap:8px;align-items:baseline;padding:4px 6px;border-radius:7px;color:#cbd5e1;line-height:1.4}.hs-events li>button{cursor:pointer}.hs-events li>button:hover{background:#94a3ff1a;color:#f1f5f9}.hs-events i{flex:0 0 7px;height:7px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c);transform:translateY(-1px)}.hs-events span{min-width:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}.ap-head{display:flex;align-items:center;gap:8px;margin-top:6px}.ap-count{flex:none;color:#64748b;font-size:11px;font-variant-numeric:tabular-nums}.ap-link{all:unset;cursor:pointer;font-size:12px;color:#93c5fd}.ap-link:hover{color:#bfdbfe}.ap-searchrow{display:flex;align-items:center;gap:8px;margin-top:8px}.ap-search{flex:1;min-width:0;width:100%;box-sizing:border-box;background:#03050b99;border:1px solid rgba(148,163,255,.2);border-radius:8px;color:inherit;font:inherit;font-size:12px;padding:6px 9px;outline:none}.ap-search:focus{border-color:#818cf8}.ap-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.ap-chips button{all:unset;cursor:pointer;display:flex;align-items:center;gap:5px;font-size:11px;padding:3px 7px;border-radius:999px;border:1px solid rgba(148,163,255,.15);color:#cbd5e1}.ap-chips button.on{border-color:var(--c);background:color-mix(in srgb,var(--c) 18%,transparent);color:#f8fafc}.ap-chips i{width:8px;height:8px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.ap-chips em{font-style:normal;color:var(--c);font-weight:700;font-variant-numeric:tabular-nums}.ap-row-filters{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;align-items:center}.ap-seg{display:flex;border:1px solid rgba(148,163,255,.15);border-radius:8px;overflow:hidden}.ap-seg{flex:none}.ap-seg button{all:unset;cursor:pointer;font-size:11px;padding:3px 6px;color:#94a3b8;text-transform:capitalize}.ap-seg button.on{background:#818cf840;color:#f1f5f9}.ap-row-filters select{flex:1;min-width:64px;background:#03050b99;color:#cbd5e1;border:1px solid rgba(148,163,255,.15);border-radius:8px;font:inherit;font-size:11px;padding:3px 6px}.ap-list{list-style:none;margin:8px -4px 0;padding:0;overflow-y:auto;min-height:0;flex:1}.ap-list li button{all:unset;box-sizing:border-box;width:100%;cursor:pointer;display:flex;align-items:center;gap:8px;padding:6px;border-radius:8px}.ap-list li button:hover{background:#94a3ff1a}.ap-list li button.is-done{opacity:.55}.ap-list i{flex:0 0 9px;height:9px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.ap-list i[data-status=thinking]{animation:ap-pulse .9s ease-in-out infinite}.ap-list i[data-status=waiting]{opacity:.5}.ap-list i[data-status=done]{background:transparent;border:1.5px solid var(--c);box-shadow:none}@keyframes ap-pulse{50%{transform:scale(1.5)}}.ap-name{flex:1;min-width:0;display:flex;flex-direction:column;font-size:12px;color:#e2e8f0}.ap-name small{color:#64748b;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-meta{text-align:right;font-size:11px;color:#94a3b8;font-variant-numeric:tabular-nums;display:flex;flex-direction:column}.ap-meta b{color:var(--c);font-weight:600;text-transform:lowercase}.hs-events li.is-skill>*{background:#f5b83d12}.hs-skill{flex:0 0 auto;font-size:9.5px;font-weight:600;line-height:1.5;text-transform:uppercase;letter-spacing:.06em;color:#fcd581;padding:0 6px;border-radius:999px;border:1px solid rgba(245,184,61,.55);background:#f5b83d1f}.ap-title{display:flex;align-items:center;gap:6px;min-width:0}.ap-skill{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-size:9.5px;font-weight:600;color:#fcd581;padding:0 6px;border-radius:999px;border:1px solid rgba(245,184,61,.55);background:#f5b83d1f}.ap-skill:before{content:"skill:";color:#b8893a;font-weight:500}.hs-skill:before{content:"";display:inline-block;width:6px;height:6px;margin:0 4px 0 -1px;border:1px solid currentColor;border-radius:50%;vertical-align:0;box-shadow:0 0 4px #f5b83d99}.ap-skills{display:flex;flex-wrap:wrap;gap:4px}.ap-skills span{font-size:11px;color:#e2e8f0;padding:2px 8px;border-radius:999px;border:1px solid rgba(245,184,61,.35);background:#f5b83d0f;display:inline-flex;gap:5px;align-items:baseline}.ap-skills span.on{border-color:#f5b83d;background:#f5b83d2e;color:#fde7b0;box-shadow:0 0 10px #f5b83d40}.ap-skills em{font-style:normal;font-size:10px;color:#b8893a;font-variant-numeric:tabular-nums}.ap-more{padding:6px;color:#64748b;font-size:11px}.ap-detail{overflow-y:auto;min-height:0;margin-top:8px;flex:1}.ap-detail h3{margin:0;display:flex;align-items:center;gap:8px;font-size:15px;color:var(--c)}.ap-detail h3 i{width:11px;height:11px;border-radius:50%;background:var(--c);box-shadow:0 0 10px var(--c)}.ap-detail h3 small{color:#64748b;font-size:11px;font-weight:500}.ap-status{margin-top:3px;font-size:12px;color:#cbd5e1}.ap-status[data-status=thinking]{color:#fde68a}.ap-status[data-status=waiting]{color:#fcd34d}.ap-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(46px,1fr));gap:4px;margin:10px 0 4px}.ap-stats div{background:#03050b73;border-radius:8px;padding:6px;text-align:center}.ap-stats dt{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:#64748b}.ap-stats dd{margin:2px 0 0;font-size:15px;font-weight:700;color:#f1f5f9;font-variant-numeric:tabular-nums}.ap-detail section{margin-top:10px}.ap-detail h4{margin:0 0 4px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#64748b}.ap-detail p{margin:0;font-size:12px;color:#cbd5e1}.ap-steps{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.ap-steps span{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;text-transform:uppercase;letter-spacing:.06em;padding:2px 7px;border-radius:999px;border:1px solid #334155;color:#64748b}.ap-steps span[data-status=running]{border-color:#fbbf24;color:#fde68a}.ap-steps span[data-status=waiting]{border-color:#f59e0b;color:#fcd34d;background:#f59e0b24;animation:ap-wait-pulse 1.8s ease-in-out infinite}.ap-steps span[data-status=done]{border-color:#22c55e;color:#86efac}.ap-steps span[data-status=failed]{border-color:#ef4444;color:#fca5a5}.ap-chip-link{all:unset;cursor:pointer;display:block;font-size:12px;color:#e2e8f0;padding:3px 6px;border-left:2px solid var(--c);margin:2px 0;border-radius:0 6px 6px 0}.ap-chip-link:hover{background:#94a3ff1a}.ap-wait{color:#fbbf24!important;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.ap-nodes{line-height:1.5}.ap-chat{margin:0;padding:0;list-style:none;display:grid;gap:6px;font-size:12px;color:#e2e8f0;white-space:pre-wrap;overflow-wrap:anywhere;max-height:320px;overflow-y:auto}.ap-chat li[data-role=user]{color:#c7d2fe}.ap-chat li[data-role=agent]{padding-bottom:6px;border-bottom:1px solid rgba(148,163,255,.12)}.ap-chat b{font-weight:650}.ap-events{margin:0;padding-left:14px;display:grid;gap:3px;font-size:11px;color:#cbd5e1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hud-badge--live{background:#22c55e2e;color:#86efac}.hud-badge--denied{background:#f871712e;color:#fca5a5;text-transform:none;letter-spacing:.02em}.hud-chip{text-transform:none;letter-spacing:.02em;font-weight:500;background:#818cf829;color:#c7d2fe;white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}.hud-chip b{font-weight:650;color:#e0e7ff}.hud-run{display:flex;gap:6px;margin-top:8px;align-items:center;flex-wrap:wrap}.hud-run input{flex:1;min-width:160px;background:#03050b99;border:1px solid rgba(148,163,255,.2);border-radius:999px;color:inherit;font:inherit;font-size:12px;padding:6px 11px;outline:none}.hud-run button{border:0;border-radius:999px;padding:6px 13px;font:inherit;font-size:12px;font-weight:600;background:linear-gradient(135deg,#818cf8,#22d3ee);color:#03050b;cursor:pointer}.hud-run button:disabled{opacity:.5}.hud-run select{max-width:160px;min-width:0;background:#03050b99;color:#cbd5e1;border:1px solid rgba(148,163,255,.2);border-radius:999px;font:inherit;font-size:12px;padding:5px 9px;cursor:pointer}.hud-run span{font-size:11px;color:#86efac}.agentglow-embed{position:relative;overflow:hidden;width:100%;height:100%;min-height:320px;isolation:isolate}.agentglow-embed .scene-root{position:absolute;top:0;right:0;bottom:0;left:0}.lod-cluster-label{all:unset;box-sizing:border-box;display:grid;gap:1px;text-align:center;cursor:pointer;pointer-events:auto;font-size:12px;font-weight:600;color:#f8fafc;padding:4px 11px 5px;border-radius:12px;white-space:nowrap;background:#03050b9e;border:1px solid color-mix(in srgb,var(--c, #818cf8) 60%,transparent);text-shadow:0 0 10px var(--c, #818cf8);box-shadow:0 0 18px color-mix(in srgb,var(--c, #818cf8) 22%,transparent);transition:border-color .2s,background .2s}.lod-cluster-label:hover{background:color-mix(in srgb,var(--c, #818cf8) 22%,rgba(3,5,11,.7));border-color:var(--c, #818cf8)}.lod-cluster-label b{font-weight:700;letter-spacing:-.01em}.lod-cluster-label small{font-size:10px;font-weight:500;color:#94a3b8;text-shadow:none;font-variant-numeric:tabular-nums}.hud-dock{display:flex;align-items:center;gap:8px}.hud-dock:empty{display:none}.hud-dock>.hud{position:static}.hud-lod{padding:6px 8px 6px 12px;display:flex;align-items:center;gap:8px;font-size:12px;color:#cbd5e1;white-space:nowrap}.hud-lod span b{margin:0 1px}.hud-lod b{color:#f1f5f9;font-variant-numeric:tabular-nums}.hud-lod i{width:7px;height:7px;border-radius:50%;background:#a5b4fc;box-shadow:0 0 8px #a5b4fc}.hud-lod button{all:unset;cursor:pointer;font-size:11px;padding:3px 9px;border-radius:999px;border:1px solid rgba(148,163,255,.25);color:#c7d2fe}.hud-lod button:hover{background:#818cf833;color:#f8fafc}.scene-root{container:agscene / size}@container agscene (max-width: 719px){.scene-root .hud-top{padding:5px 7px 5px 10px}.scene-root .hud-title{font-size:13px}.scene-root .hud-theme{padding:3px 20px 3px 8px;font-size:10px;background-position:right 7px center}.scene-root .hud-stat:nth-child(n+3){display:none}.scene-root .hud-side:not(.is-rail){width:min(290px,calc(100% - 64px));padding:6px 8px 8px}.scene-root .hs-head button{padding:4px 6px;letter-spacing:.04em;font-size:10.5px}.scene-root .hs-head .hs-collapse{padding:2px 4px}.scene-root .ap-list li button{padding:4px 6px}.scene-root .hud-topwrap:not(.is-rail){--hud-side: min(290px, calc(100% - 64px) )}}@container agscene (max-height: 520px){.scene-root .hud-sub{max-height:4.5em;overflow:auto}}@keyframes ap-wait-pulse{50%{box-shadow:0 0 10px #f59e0b8c;border-color:#fbbf24}}@media(prefers-reduced-motion:reduce){.ap-steps span[data-status=waiting]{animation:none}}.flow-run{display:flex;flex-direction:column;align-items:center;gap:4px;pointer-events:none}.flow-run .scene-label{font-size:11px;max-width:220px;overflow:hidden;text-overflow:ellipsis}.flow-steps{display:flex;gap:3px;font:600 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.06em}.flow-steps span{padding:2px 5px;border-radius:999px;color:#64748b;background:#03050b8c;border:1px solid rgba(100,116,139,.35)}.flow-steps span[data-s=running]{color:#03050b;background:var(--c);border-color:var(--c);box-shadow:0 0 12px var(--c)}.flow-steps span[data-s=done]{color:var(--c);border-color:color-mix(in srgb,var(--c) 60%,transparent)}.flow-steps span[data-s=failed]{color:#fecaca;background:#7f1d1d}.flow-step{font:600 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.08em;color:color-mix(in srgb,var(--c) 70%,white);text-shadow:0 0 8px var(--c);opacity:.55;pointer-events:none;white-space:nowrap;transition:opacity .3s}.flow-step[data-s=running]{opacity:1}.flow-hint{font-size:10px;padding:1px 7px;opacity:.9}.flow-label-core{font-size:11px;letter-spacing:.04em}
|
|
1
|
+
.scene-root{position:fixed;top:0;right:0;bottom:0;left:0;background:#03050b;color:#e8edf5;font-family:Public Sans,system-ui,sans-serif;overflow:hidden}.scene-root canvas{display:block}.hud{position:absolute;z-index:10;background:#0a0e1a8c;border:1px solid rgba(148,163,255,.16);border-radius:14px;backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3);box-shadow:0 8px 32px #00000059,inset 0 1px #ffffff0a}.hud-topwrap{position:absolute;z-index:10;top:12px;left:12px;max-width:calc(100% - var(--hud-side, 320px) - 36px);display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;pointer-events:none}.hud-topwrap.is-rail{--hud-side: 40px}.hud-topwrap>*{pointer-events:auto}.hud-top{position:relative;padding:6px 8px 6px 12px;min-width:0}.hud-bar{display:flex;align-items:center;gap:4px 8px;flex-wrap:wrap}.hud-bar .hud-run{margin-top:0}.hud-info{all:unset;cursor:pointer;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font:italic 600 11px/1 Georgia,serif;color:#94a3b8;border:1px solid rgba(148,163,184,.35)}.hud-info:hover,.hud-info.on{color:#e2e8f0;border-color:#818cf8}.hud-theme{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#03050b8c url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='5'%3E%3Cpath d='M0 0l4 5 4-5z' fill='%2394a3b8'/%3E%3C/svg%3E") no-repeat right 9px center;color:#cbd5e1;border:1px solid rgba(148,163,255,.22);border-radius:999px;font:inherit;font-size:11px;text-transform:uppercase;letter-spacing:.08em;padding:4px 24px 4px 10px;cursor:pointer;outline:none}.hud-theme:hover{border-color:#818cf8}.hud-title{display:flex;align-items:center;gap:8px;font-weight:700;font-size:15px;letter-spacing:-.01em;white-space:nowrap}.hud-sub{margin:6px 0 2px;max-width:460px;font-size:12px;line-height:1.45;color:#94a3b8}.hud-dot{width:9px;height:9px;border-radius:50%;background:#22c55e;box-shadow:0 0 10px #22c55e;animation:hud-ping 1.6s ease-out infinite}@keyframes hud-ping{0%{box-shadow:0 0 #22c55eb3}to{box-shadow:0 0 0 10px #22c55e00}}.hud-badge{font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;padding:2px 7px;border-radius:999px;background:#94a3b829;color:#cbd5e1}.hud-stats{display:flex;flex-wrap:wrap;align-items:center;gap:4px}.hud-stat{font-size:11px;color:#94a3b8;padding:2px 8px;border-radius:999px;background:#03050b66;white-space:nowrap}.hud-stat b{color:#f1f5f9;font-weight:700;font-variant-numeric:tabular-nums}.hud-dec{--dc: 94, 234, 212;animation:hud-dec-pulse .7s ease-out}.hud-dec.is-deny{--dc: 251, 59, 92}@keyframes hud-dec-pulse{0%{background:rgba(var(--dc),.5);box-shadow:0 0 rgba(var(--dc),.7);color:#fff}35%{background:rgba(var(--dc),.28);box-shadow:0 0 0 5px rgba(var(--dc),0)}to{background:#03050b66;box-shadow:0 0 rgba(var(--dc),0)}}@media(prefers-reduced-motion:reduce){.hud-dec{animation:none}}.hud-dec-hv{display:inline-flex;align-items:center;gap:4px;color:#a7f3d0;background:#5eead41a}.hud-dec-hv.is-deny{color:#fecdd3;background:#fb3b5c24}.hud-spark{color:#5eead4;margin-left:2px}.hud-dec-hv.is-deny .hud-spark{color:#fb7185}.scene-root :focus-visible{outline:2px solid #818cf8;outline-offset:2px}.hud-side{top:12px;right:12px;bottom:12px;width:320px;display:flex;flex-direction:column;padding:8px 10px 10px;font-size:13px;box-sizing:border-box;animation:hs-in .18s ease-out}.hud-side.is-rail{width:40px;padding:6px 0;align-items:center}@keyframes hs-in{0%{opacity:.4}}.hs-head{display:flex;align-items:center;gap:2px;padding-bottom:8px;margin:0 -2px 2px;border-bottom:1px solid rgba(148,163,255,.12)}.hs-head button{all:unset;cursor:pointer;display:flex;align-items:center;gap:5px;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.08em;color:#94a3b8;padding:5px 9px;border-radius:999px}.hs-head button:hover{color:#e2e8f0}.hs-head button.on{color:#f1f5f9;background:#818cf838}.hs-head em,.hs-icon em{font-style:normal;font-size:10px;font-weight:700;font-variant-numeric:tabular-nums;color:#c7d2fe;letter-spacing:0}.hs-head .hs-collapse{margin-left:auto;font-size:14px;padding:2px 8px;letter-spacing:0}.hs-rail{display:flex;flex-direction:column;align-items:center;gap:6px}.hs-rail button{all:unset;cursor:pointer;position:relative;width:30px;height:30px;display:grid;place-items:center;border-radius:9px;color:#94a3b8}.hs-rail button:hover{color:#e2e8f0;background:#94a3ff1a}.hs-rail .hs-collapse{font-size:14px;margin-bottom:4px}.hs-icon em{position:absolute;top:-3px;right:-5px;min-width:14px;height:14px;padding:0 3px;box-sizing:border-box;border-radius:999px;display:grid;place-items:center;font-size:9px;background:#4f46e5;color:#eef2ff}.hs-icon em:empty{min-width:8px;width:8px;height:8px;padding:0;top:1px;right:1px;background:#22d3ee;box-shadow:0 0 8px #22d3ee}.hs-body{flex:1;min-height:0;display:flex;flex-direction:column}.hs-body[hidden]{display:none}.hs-empty{margin:14px 4px;font-size:12px;line-height:1.5;color:#64748b}.hs-events{list-style:none;margin:6px -4px 0;padding:0;overflow-y:auto;min-height:0;flex:1;font-size:11.5px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hs-events li>*{all:unset;box-sizing:border-box;width:100%;display:flex;gap:8px;align-items:baseline;padding:4px 6px;border-radius:7px;color:#cbd5e1;line-height:1.4}.hs-events li>button{cursor:pointer}.hs-events li>button:hover{background:#94a3ff1a;color:#f1f5f9}.hs-events i{flex:0 0 7px;height:7px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c);transform:translateY(-1px)}.hs-events span{min-width:0;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow-wrap:anywhere}.ap-head{display:flex;align-items:center;gap:8px;margin-top:6px}.ap-count{flex:none;color:#64748b;font-size:11px;font-variant-numeric:tabular-nums}.ap-link{all:unset;cursor:pointer;font-size:12px;color:#93c5fd}.ap-link:hover{color:#bfdbfe}.ap-searchrow{display:flex;align-items:center;gap:8px;margin-top:8px}.ap-search{flex:1;min-width:0;width:100%;box-sizing:border-box;background:#03050b99;border:1px solid rgba(148,163,255,.2);border-radius:8px;color:inherit;font:inherit;font-size:12px;padding:6px 9px;outline:none}.ap-search:focus{border-color:#818cf8}.ap-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}.ap-chips button{all:unset;cursor:pointer;display:flex;align-items:center;gap:5px;font-size:11px;padding:3px 7px;border-radius:999px;border:1px solid rgba(148,163,255,.15);color:#cbd5e1}.ap-chips button.on{border-color:var(--c);background:color-mix(in srgb,var(--c) 18%,transparent);color:#f8fafc}.ap-chips i{width:8px;height:8px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.ap-chips em{font-style:normal;color:var(--c);font-weight:700;font-variant-numeric:tabular-nums}.ap-row-filters{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;align-items:center}.ap-seg{display:flex;border:1px solid rgba(148,163,255,.15);border-radius:8px;overflow:hidden}.ap-seg{flex:none}.ap-seg button{all:unset;cursor:pointer;font-size:11px;padding:3px 6px;color:#94a3b8;text-transform:capitalize}.ap-seg button.on{background:#818cf840;color:#f1f5f9}.ap-row-filters select{flex:1;min-width:64px;background:#03050b99;color:#cbd5e1;border:1px solid rgba(148,163,255,.15);border-radius:8px;font:inherit;font-size:11px;padding:3px 6px}.ap-list{list-style:none;margin:8px -4px 0;padding:0;overflow-y:auto;min-height:0;flex:1}.ap-list li button{all:unset;box-sizing:border-box;width:100%;cursor:pointer;display:flex;align-items:center;gap:8px;padding:6px;border-radius:8px}.ap-list li button:hover{background:#94a3ff1a}.ap-list li button.is-done{opacity:.55}.ap-list i{flex:0 0 9px;height:9px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.ap-list i[data-status=thinking]{animation:ap-pulse .9s ease-in-out infinite}.ap-list i[data-status=waiting]{opacity:.5}.ap-list i[data-status=done]{background:transparent;border:1.5px solid var(--c);box-shadow:none}@keyframes ap-pulse{50%{transform:scale(1.5)}}.ap-name{flex:1;min-width:0;display:flex;flex-direction:column;font-size:12px;color:#e2e8f0}.ap-name small{color:#64748b;font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ap-meta{text-align:right;font-size:11px;color:#94a3b8;font-variant-numeric:tabular-nums;display:flex;flex-direction:column}.ap-meta b{color:var(--c);font-weight:600;text-transform:lowercase}.hs-events li.is-skill>*{background:#f5b83d12}.hs-skill{flex:0 0 auto;font-size:9.5px;font-weight:600;line-height:1.5;text-transform:uppercase;letter-spacing:.06em;color:#fcd581;padding:0 6px;border-radius:999px;border:1px solid rgba(245,184,61,.55);background:#f5b83d1f}.ap-title{display:flex;align-items:center;gap:6px;min-width:0}.ap-skill{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-style:normal;font-size:9.5px;font-weight:600;color:#fcd581;padding:0 6px;border-radius:999px;border:1px solid rgba(245,184,61,.55);background:#f5b83d1f}.ap-skill:before{content:"skill:";color:#b8893a;font-weight:500}.hs-skill:before{content:"";display:inline-block;width:6px;height:6px;margin:0 4px 0 -1px;border:1px solid currentColor;border-radius:50%;vertical-align:0;box-shadow:0 0 4px #f5b83d99}.hs-events li.is-dec>*{background:#5eead40d}.hs-events li.is-deny>*{background:#fb3b5c1f}.hs-dec{flex:0 0 auto;font-size:9.5px;font-weight:600;line-height:1.5;text-transform:uppercase;letter-spacing:.06em;color:var(--c);padding:0 6px;border-radius:3px;border:1px solid var(--c);background:#ffffff0a}.ap-decisions{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px}.ap-decisions li{display:flex;gap:6px;align-items:baseline;font-size:11px;color:#e2e8f0;padding:2px 6px;border-left:2px solid var(--c);background:#ffffff08}.ap-decisions li.is-deny{background:#fb3b5c1f}.ap-decisions li.is-strike span{text-decoration:line-through;color:#94a3b8}.ap-hv{font-size:11.5px;color:#e2e8f0;margin:0 0 4px;font-variant-numeric:tabular-nums}.ap-hv-bar{display:flex;height:6px;border-radius:3px;overflow:hidden;gap:1px;background:#ffffff0d}.ap-hv-bar span{flex-basis:0;min-width:2px}.ap-decisions b{flex:0 0 auto;font-size:9.5px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--c)}.ap-decisions span{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ap-decisions em{flex:0 0 auto;font-style:normal;font-size:10px;color:#94a3b8;font-variant-numeric:tabular-nums}.ap-skills{display:flex;flex-wrap:wrap;gap:4px}.ap-skills span{font-size:11px;color:#e2e8f0;padding:2px 8px;border-radius:999px;border:1px solid rgba(245,184,61,.35);background:#f5b83d0f;display:inline-flex;gap:5px;align-items:baseline}.ap-skills span.on{border-color:#f5b83d;background:#f5b83d2e;color:#fde7b0;box-shadow:0 0 10px #f5b83d40}.ap-skills em{font-style:normal;font-size:10px;color:#b8893a;font-variant-numeric:tabular-nums}.ap-more{padding:6px;color:#64748b;font-size:11px}.ap-detail{overflow-y:auto;min-height:0;margin-top:8px;flex:1}.ap-detail h3{margin:0;display:flex;align-items:center;gap:8px;font-size:15px;color:var(--c)}.ap-detail h3 i{width:11px;height:11px;border-radius:50%;background:var(--c);box-shadow:0 0 10px var(--c)}.ap-detail h3 small{color:#64748b;font-size:11px;font-weight:500}.ap-status{margin-top:3px;font-size:12px;color:#cbd5e1}.ap-status[data-status=thinking]{color:#fde68a}.ap-status[data-status=waiting]{color:#fcd34d}.ap-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(46px,1fr));gap:4px;margin:10px 0 4px}.ap-stats div{background:#03050b73;border-radius:8px;padding:6px;text-align:center}.ap-stats dt{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:#64748b}.ap-stats dd{margin:2px 0 0;font-size:15px;font-weight:700;color:#f1f5f9;font-variant-numeric:tabular-nums}.ap-detail section{margin-top:10px}.ap-detail h4{margin:0 0 4px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#64748b}.ap-detail p{margin:0;font-size:12px;color:#cbd5e1}.ap-steps{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.ap-steps span{max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:10px;text-transform:uppercase;letter-spacing:.06em;padding:2px 7px;border-radius:999px;border:1px solid #334155;color:#64748b}.ap-steps span[data-status=running]{border-color:#fbbf24;color:#fde68a}.ap-steps span[data-status=waiting]{border-color:#f59e0b;color:#fcd34d;background:#f59e0b24;animation:ap-wait-pulse 1.8s ease-in-out infinite}.ap-steps span[data-status=done]{border-color:#22c55e;color:#86efac}.ap-steps span[data-status=failed]{border-color:#ef4444;color:#fca5a5}.ap-chip-link{all:unset;cursor:pointer;display:block;font-size:12px;color:#e2e8f0;padding:3px 6px;border-left:2px solid var(--c);margin:2px 0;border-radius:0 6px 6px 0}.ap-chip-link:hover{background:#94a3ff1a}.ap-wait{color:#fbbf24!important;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.ap-nodes{line-height:1.5}.ap-chat{margin:0;padding:0;list-style:none;display:grid;gap:6px;font-size:12px;color:#e2e8f0;white-space:pre-wrap;overflow-wrap:anywhere;max-height:320px;overflow-y:auto}.ap-chat li[data-role=user]{color:#c7d2fe}.ap-chat li[data-role=agent]{padding-bottom:6px;border-bottom:1px solid rgba(148,163,255,.12)}.ap-chat b{font-weight:650}.ap-events{margin:0;padding-left:14px;display:grid;gap:3px;font-size:11px;color:#cbd5e1;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.hud-badge--live{background:#22c55e2e;color:#86efac}.hud-badge--denied{background:#f871712e;color:#fca5a5;text-transform:none;letter-spacing:.02em}.hud-chip{text-transform:none;letter-spacing:.02em;font-weight:500;background:#818cf829;color:#c7d2fe;white-space:nowrap;max-width:180px;overflow:hidden;text-overflow:ellipsis}.hud-chip b{font-weight:650;color:#e0e7ff}.hud-run{display:flex;gap:6px;margin-top:8px;align-items:center;flex-wrap:wrap}.hud-run input{flex:1;min-width:160px;background:#03050b99;border:1px solid rgba(148,163,255,.2);border-radius:999px;color:inherit;font:inherit;font-size:12px;padding:6px 11px;outline:none}.hud-run button{border:0;border-radius:999px;padding:6px 13px;font:inherit;font-size:12px;font-weight:600;background:linear-gradient(135deg,#818cf8,#22d3ee);color:#03050b;cursor:pointer}.hud-run button:disabled{opacity:.5}.hud-run select{max-width:160px;min-width:0;background:#03050b99;color:#cbd5e1;border:1px solid rgba(148,163,255,.2);border-radius:999px;font:inherit;font-size:12px;padding:5px 9px;cursor:pointer}.hud-run span{font-size:11px;color:#86efac}.agentglow-embed{position:relative;overflow:hidden;width:100%;height:100%;min-height:320px;isolation:isolate}.agentglow-embed .scene-root{position:absolute;top:0;right:0;bottom:0;left:0}.lod-cluster-label{all:unset;box-sizing:border-box;display:grid;gap:1px;text-align:center;cursor:pointer;pointer-events:auto;font-size:12px;font-weight:600;color:#f8fafc;padding:4px 11px 5px;border-radius:12px;white-space:nowrap;background:#03050b9e;border:1px solid color-mix(in srgb,var(--c, #818cf8) 60%,transparent);text-shadow:0 0 10px var(--c, #818cf8);box-shadow:0 0 18px color-mix(in srgb,var(--c, #818cf8) 22%,transparent);transition:border-color .2s,background .2s}.lod-cluster-label:hover{background:color-mix(in srgb,var(--c, #818cf8) 22%,rgba(3,5,11,.7));border-color:var(--c, #818cf8)}.lod-cluster-label b{font-weight:700;letter-spacing:-.01em}.lod-cluster-label small{font-size:10px;font-weight:500;color:#94a3b8;text-shadow:none;font-variant-numeric:tabular-nums}.hud-dock{display:flex;align-items:center;gap:8px}.hud-dock:empty{display:none}.hud-dock>.hud{position:static}.hud-lod{padding:6px 8px 6px 12px;display:flex;align-items:center;gap:8px;font-size:12px;color:#cbd5e1;white-space:nowrap}.hud-lod span b{margin:0 1px}.hud-lod b{color:#f1f5f9;font-variant-numeric:tabular-nums}.hud-lod i{width:7px;height:7px;border-radius:50%;background:#a5b4fc;box-shadow:0 0 8px #a5b4fc}.hud-lod button{all:unset;cursor:pointer;font-size:11px;padding:3px 9px;border-radius:999px;border:1px solid rgba(148,163,255,.25);color:#c7d2fe}.hud-lod button:hover{background:#818cf833;color:#f8fafc}.scene-root{container:agscene / size}@container agscene (max-width: 719px){.scene-root .hud-top{padding:5px 7px 5px 10px}.scene-root .hud-title{font-size:13px}.scene-root .hud-theme{padding:3px 20px 3px 8px;font-size:10px;background-position:right 7px center}.scene-root .hud-stat:nth-child(n+3){display:none}.scene-root .hud-side:not(.is-rail){width:min(290px,calc(100% - 64px));padding:6px 8px 8px}.scene-root .hs-head button{padding:4px 6px;letter-spacing:.04em;font-size:10.5px}.scene-root .hs-head .hs-collapse{padding:2px 4px}.scene-root .ap-list li button{padding:4px 6px}.scene-root .hud-topwrap:not(.is-rail){--hud-side: min(290px, calc(100% - 64px) )}}@container agscene (max-height: 520px){.scene-root .hud-sub{max-height:4.5em;overflow:auto}}@keyframes ap-wait-pulse{50%{box-shadow:0 0 10px #f59e0b8c;border-color:#fbbf24}}@media(prefers-reduced-motion:reduce){.ap-steps span[data-status=waiting]{animation:none}}.hud-approve{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:8px}.hud-approve button{border:1px solid transparent;border-radius:999px;padding:5px 13px;font:inherit;font-size:12px;font-weight:650;cursor:pointer}.hud-approve .ha-yes{background:linear-gradient(135deg,#34d399,#22d3ee);color:#03050b}.hud-approve .ha-no{background:#fb3b5c24;border-color:#fb718599;color:#fecdd3}.hud-approve .ha-yes:hover{filter:brightness(1.1)}.hud-approve .ha-no:hover{background:#fb3b5c47}.hud-approve span{font-size:11px;color:#94a3b8}.hud-approve[data-verdict=approved] span,.hud-approve[data-verdict=approving] span{color:#86efac}.hud-approve[data-verdict=rejected] span,.hud-approve[data-verdict=rejecting] span,.hud-approve[data-verdict=error] span{color:#fda4af}.hud-approve.is-compact{margin-top:0;flex:none;gap:4px}.hud-approve.is-compact button{padding:3px 9px;font-size:11px}.hud-approvals{left:12px;bottom:12px;z-index:9;width:max-content;max-width:min(460px,calc(100% - 356px));padding:8px 10px;font-size:12px;box-sizing:border-box;border-color:#f59e0b73;box-shadow:0 8px 32px #00000059,0 0 18px #f59e0b1f}.hud-approvals.is-rail{max-width:min(460px,calc(100% - 76px))}.hud-approvals h4{margin:0 0 6px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:#fcd34d;display:flex;gap:6px;align-items:baseline}.hud-approvals h4 em{font-style:normal;font-variant-numeric:tabular-nums;color:#fde68a}.hud-approvals ul{list-style:none;margin:0;padding:0;display:grid;gap:4px}.hud-approvals li{display:flex;align-items:center;gap:8px;min-width:0}.hud-approvals .ha-who{all:unset;cursor:pointer;flex:1;min-width:0;display:flex;align-items:baseline;gap:6px;padding:2px 4px;border-radius:6px}.hud-approvals .ha-who:hover{background:#94a3ff1a}.hud-approvals .ha-who i{flex:0 0 8px;height:8px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c);align-self:center}.hud-approvals .ha-who b{color:#e2e8f0;font-weight:650;white-space:nowrap}.hud-approvals .ha-who span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#fbbf24;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px}.hud-approvals p{margin:6px 0 0;font-size:11px;color:#64748b}@container agscene (max-width: 719px){.scene-root .hud-approvals{max-width:calc(100% - 76px);padding:6px 8px}.scene-root .hud-approvals .ha-who span{display:none}}.flow-run{display:flex;flex-direction:column;align-items:center;gap:4px;pointer-events:none}.flow-run .scene-label{font-size:11px;max-width:220px;overflow:hidden;text-overflow:ellipsis}.flow-steps{display:flex;gap:3px;font:600 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.06em}.flow-steps span{padding:2px 5px;border-radius:999px;color:#64748b;background:#03050b8c;border:1px solid rgba(100,116,139,.35)}.flow-steps span[data-s=running]{color:#03050b;background:var(--c);border-color:var(--c);box-shadow:0 0 12px var(--c)}.flow-steps span[data-s=done]{color:var(--c);border-color:color-mix(in srgb,var(--c) 60%,transparent)}.flow-steps span[data-s=failed]{color:#fecaca;background:#7f1d1d}.flow-step{font:600 9px/1 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.08em;color:color-mix(in srgb,var(--c) 70%,white);text-shadow:0 0 8px var(--c);opacity:.55;pointer-events:none;white-space:nowrap;transition:opacity .3s}.flow-step[data-s=running]{opacity:1}.flow-hint{font-size:10px;padding:1px 7px;opacity:.9}.flow-label-core{font-size:11px;letter-spacing:.04em}
|
|
@@ -9,7 +9,7 @@ export type AgentSceneProps = {
|
|
|
9
9
|
/** Show the HUD (counts, event ticker, agent panel). Default true. */
|
|
10
10
|
hud?: boolean;
|
|
11
11
|
/** Use the built-in simulator instead of a server. Default false (auto-fallback if the server is unreachable). */
|
|
12
|
-
sim?: boolean;
|
|
12
|
+
sim?: boolean | "hf";
|
|
13
13
|
/**
|
|
14
14
|
* Only show agents in this scope (e.g. a user or tenant id). Sent as the `X-AgentGlow-Scope` header, never in a URL.
|
|
15
15
|
* On a server that requires tokens the token decides the scope; this is then only a label (and the POST /live/run scope).
|
package/dist/types/world.d.ts
CHANGED
|
@@ -46,6 +46,8 @@ export type WorldEvent = {
|
|
|
46
46
|
id: string;
|
|
47
47
|
tokens_in: number;
|
|
48
48
|
tokens_out: number;
|
|
49
|
+
tokens_cached?: number;
|
|
50
|
+
tokens_cache_write?: number;
|
|
49
51
|
latency_ms: number;
|
|
50
52
|
ts: number;
|
|
51
53
|
} | {
|
|
@@ -88,6 +90,48 @@ export type WorldEvent = {
|
|
|
88
90
|
name: string;
|
|
89
91
|
status: "start" | "end";
|
|
90
92
|
ts: number;
|
|
93
|
+
} | {
|
|
94
|
+
type: "decision";
|
|
95
|
+
run_id: string;
|
|
96
|
+
id: string;
|
|
97
|
+
kind: DecisionKind;
|
|
98
|
+
question: string;
|
|
99
|
+
result: string;
|
|
100
|
+
p?: number;
|
|
101
|
+
options?: {
|
|
102
|
+
name: string;
|
|
103
|
+
p: number;
|
|
104
|
+
}[];
|
|
105
|
+
provider: string;
|
|
106
|
+
purpose?: string;
|
|
107
|
+
target?: string;
|
|
108
|
+
ms: number;
|
|
109
|
+
ts: number;
|
|
110
|
+
hv?: boolean;
|
|
111
|
+
why?: string;
|
|
112
|
+
} | {
|
|
113
|
+
type: "decision_stats";
|
|
114
|
+
run_id: string;
|
|
115
|
+
id: string;
|
|
116
|
+
window_ms: number;
|
|
117
|
+
n: number;
|
|
118
|
+
by_purpose: DecisionStatsByPurpose;
|
|
119
|
+
p50_ms: number;
|
|
120
|
+
p95_ms: number;
|
|
121
|
+
providers: Record<string, number>;
|
|
122
|
+
ts: number;
|
|
123
|
+
} | {
|
|
124
|
+
type: "order";
|
|
125
|
+
run_id: string;
|
|
126
|
+
id: string;
|
|
127
|
+
side: string;
|
|
128
|
+
qty: number;
|
|
129
|
+
price?: number;
|
|
130
|
+
status: OrderStatus;
|
|
131
|
+
instrument: string;
|
|
132
|
+
dry_run: boolean;
|
|
133
|
+
reason?: string;
|
|
134
|
+
ts: number;
|
|
91
135
|
} | {
|
|
92
136
|
type: "mcp_register";
|
|
93
137
|
run_id?: string;
|
|
@@ -109,6 +153,117 @@ export type WorldEvent = {
|
|
|
109
153
|
resource?: string;
|
|
110
154
|
resource_kind?: ResourceKind;
|
|
111
155
|
};
|
|
156
|
+
export type DecisionKind = "choice" | "score" | "noul";
|
|
157
|
+
export type DecisionStatsByPurpose = {
|
|
158
|
+
route?: {
|
|
159
|
+
n: number;
|
|
160
|
+
results: Record<string, number>;
|
|
161
|
+
};
|
|
162
|
+
guard?: {
|
|
163
|
+
n: number;
|
|
164
|
+
allow: number;
|
|
165
|
+
deny: number;
|
|
166
|
+
};
|
|
167
|
+
check?: {
|
|
168
|
+
n: number;
|
|
169
|
+
yes: number;
|
|
170
|
+
no: number;
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
export type OrderStatus = "would_place" | "placed" | "filled" | "rejected" | "cancelled";
|
|
174
|
+
/** One order on one agent; `at` = performance.now() when it arrived (its chip plays from there). */
|
|
175
|
+
export type OrderUse = Omit<Extract<WorldEvent, {
|
|
176
|
+
type: "order";
|
|
177
|
+
}>, "type" | "run_id" | "id"> & {
|
|
178
|
+
at: number;
|
|
179
|
+
};
|
|
180
|
+
export declare const ORDER_LIFE_MS = 1500;
|
|
181
|
+
/**
|
|
182
|
+
* High-volume decisions, per agent (from `decision_stats`): smoothed (EMA) so the halo and its label never flicker.
|
|
183
|
+
* `seg` = smoothed share of each outcome category, in HALO_CATS order.
|
|
184
|
+
*/
|
|
185
|
+
export type HvStats = {
|
|
186
|
+
at: number;
|
|
187
|
+
bump: number;
|
|
188
|
+
bumpDeny: boolean;
|
|
189
|
+
rate: number;
|
|
190
|
+
deny: number;
|
|
191
|
+
p50: number;
|
|
192
|
+
p95: number;
|
|
193
|
+
seg: number[];
|
|
194
|
+
provider: string;
|
|
195
|
+
n: number;
|
|
196
|
+
windows: number;
|
|
197
|
+
};
|
|
198
|
+
/** outcome categories of a decision halo arc: allow, deny, check yes, check no, route result slots 0..3, other */
|
|
199
|
+
export declare const HALO_CATS: readonly ["allow", "deny", "yes", "no", "r0", "r1", "r2", "r3", "other"];
|
|
200
|
+
export declare const HALO_COLORS: string[];
|
|
201
|
+
/** route result name -> accent slot 0..3 (first four names seen in this session; later ones are "other") */
|
|
202
|
+
export declare const routeSlots: Map<string, number>;
|
|
203
|
+
/** a halo fades out once its agent sent no stats for this long (ms), over HV_FADE_MS */
|
|
204
|
+
export declare const HV_QUIET_MS = 2500;
|
|
205
|
+
export declare const HV_FADE_MS = 1500;
|
|
206
|
+
/** 0..1 visibility of an agent's decision halo */
|
|
207
|
+
export declare function haloMix(h: HvStats | null, now?: number): number;
|
|
208
|
+
/** the agent is in high-volume mode now (recent decision_stats) */
|
|
209
|
+
export declare const hvActive: (i: Instance, now?: number) => boolean;
|
|
210
|
+
/** `jev 42/s · 3% deny · p50 38ms` */
|
|
211
|
+
export declare function haloText(h: HvStats): string;
|
|
212
|
+
/** One decision on one agent; `at` (performance.now()) = when its glyph starts (staggered so a burst reads one by one). */
|
|
213
|
+
export type DecisionUse = Omit<Extract<WorldEvent, {
|
|
214
|
+
type: "decision";
|
|
215
|
+
}>, "type" | "run_id" | "id"> & {
|
|
216
|
+
at: number;
|
|
217
|
+
/** high volume: not shown as a glyph (over the on-screen cap; it only flashed the halo) */
|
|
218
|
+
hidden?: boolean;
|
|
219
|
+
/** high volume: pre-empted by a more important glyph at this time (fades out fast) */
|
|
220
|
+
cut?: number;
|
|
221
|
+
};
|
|
222
|
+
/** Decision glyph timing (ms): snap in fast (much faster than LLM pulses / skill rings on purpose), then hold long
|
|
223
|
+
* enough to read on a video; a guard deny holds longer. */
|
|
224
|
+
export declare const DECISION_SNAP_MS = 150;
|
|
225
|
+
export declare const DECISION_HOLD_MS = 1800;
|
|
226
|
+
export declare const DECISION_LIFE_MS = 2400;
|
|
227
|
+
export declare const DENY_HOLD_MS = 2500;
|
|
228
|
+
export declare const DENY_LIFE_MS = 3100;
|
|
229
|
+
/** min gap between two glyph starts on one agent (a burst of decisions plays as a quick sequence) */
|
|
230
|
+
export declare const DECISION_STAGGER_MS = 220;
|
|
231
|
+
/** high-volume mode (`hv` decisions): short holds so glyphs don't pile up */
|
|
232
|
+
export declare const HV_HOLD_MS = 800;
|
|
233
|
+
export declare const HV_LIFE_MS = 1150;
|
|
234
|
+
/** how long a decision's glyph lives (ms) */
|
|
235
|
+
export declare const decisionLife: (d: {
|
|
236
|
+
kind: string;
|
|
237
|
+
result: string;
|
|
238
|
+
purpose?: string;
|
|
239
|
+
hv?: boolean;
|
|
240
|
+
}) => number;
|
|
241
|
+
/** 0..1 visibility of a decision glyph: snaps in (DECISION_SNAP_MS), holds, fades out by decisionLife(d). */
|
|
242
|
+
export declare function decisionMix(d: DecisionUse, now?: number): number;
|
|
243
|
+
/** a guardrail that said no (shown as a red X / shut gate) */
|
|
244
|
+
export declare const isDeny: (d: {
|
|
245
|
+
kind: string;
|
|
246
|
+
result: string;
|
|
247
|
+
purpose?: string;
|
|
248
|
+
}) => boolean;
|
|
249
|
+
export declare const pct: (p?: number) => string;
|
|
250
|
+
/** short text for a decision: `jev · route → haiku 92%`, `guard: deny rollback_deploy 97%` */
|
|
251
|
+
export declare function decisionText(d: {
|
|
252
|
+
kind: string;
|
|
253
|
+
question: string;
|
|
254
|
+
result: string;
|
|
255
|
+
p?: number;
|
|
256
|
+
provider: string;
|
|
257
|
+
purpose?: string;
|
|
258
|
+
target?: string;
|
|
259
|
+
}): string;
|
|
260
|
+
/** `YES 3 @ 42c`, `SELL 10 @ 101.5` (prices below 1 read as cents) */
|
|
261
|
+
export declare function orderText(o: {
|
|
262
|
+
side: string;
|
|
263
|
+
qty: number;
|
|
264
|
+
price?: number;
|
|
265
|
+
status?: string;
|
|
266
|
+
}): string;
|
|
112
267
|
/** What sits behind an MCP server (the server is a node; its backends are nodes too). */
|
|
113
268
|
export type ResourceKind = "db" | "warehouse" | "spark" | "api" | "storage" | "queue";
|
|
114
269
|
export declare const AGENT_TYPES: {
|
|
@@ -146,6 +301,7 @@ export type Instance = {
|
|
|
146
301
|
pulse: number;
|
|
147
302
|
pulseAt: number;
|
|
148
303
|
tokens: number;
|
|
304
|
+
tokensCached: number;
|
|
149
305
|
index: number;
|
|
150
306
|
recent: WorldEvent[];
|
|
151
307
|
llmCalls: number;
|
|
@@ -157,6 +313,14 @@ export type Instance = {
|
|
|
157
313
|
/** newest started skill ("" = none yet) and when the last active one ended (0 while one is active) */
|
|
158
314
|
skill: string;
|
|
159
315
|
skillEndAt: number;
|
|
316
|
+
/** recent decisions (newest last, capped); glyphs play from `at` */
|
|
317
|
+
decisions: DecisionUse[];
|
|
318
|
+
/** high-volume decision stats (null until its first `decision_stats`) */
|
|
319
|
+
hv: HvStats | null;
|
|
320
|
+
/** recent orders (newest last, capped) */
|
|
321
|
+
orders: OrderUse[];
|
|
322
|
+
/** the MCP server this agent called last (a guard deny flashes the agent's line to it) */
|
|
323
|
+
lastMcp?: string;
|
|
160
324
|
/** opt-in prompt capture: this agent's turns, oldest first (user prompt, then its reply), capped */
|
|
161
325
|
chat: {
|
|
162
326
|
role: "user" | "agent";
|
|
@@ -329,6 +493,8 @@ export declare const world: {
|
|
|
329
493
|
mcpResolved: (McpPending & {
|
|
330
494
|
resolvedAt: number;
|
|
331
495
|
})[];
|
|
496
|
+
/** MCP tool name -> the server it was last called on (a guard deny on that tool flashes the line to it) */
|
|
497
|
+
mcpTools: Map<string, string>;
|
|
332
498
|
ticker: WorldEvent[];
|
|
333
499
|
stats: {
|
|
334
500
|
runs: number;
|
|
@@ -339,6 +505,35 @@ export declare const world: {
|
|
|
339
505
|
graphReads: number;
|
|
340
506
|
graphWrites: number;
|
|
341
507
|
mcpCalls: number;
|
|
508
|
+
decisions: number;
|
|
509
|
+
decisionMs: number;
|
|
510
|
+
};
|
|
511
|
+
/** decisions per provider (jev / laya / llm ...): count + summed latency (HUD chip tooltip) */
|
|
512
|
+
decisionProviders: Map<string, {
|
|
513
|
+
n: number;
|
|
514
|
+
ms: number;
|
|
515
|
+
}>;
|
|
516
|
+
/** session-wide decision rate (HUD): last full second's rate, deny share, p50/p95, 60 s sparkline (per second) */
|
|
517
|
+
rate: {
|
|
518
|
+
perS: number;
|
|
519
|
+
deny: number;
|
|
520
|
+
p50: number;
|
|
521
|
+
p95: number;
|
|
522
|
+
spark: number[];
|
|
523
|
+
rollAt: number;
|
|
524
|
+
acc: {
|
|
525
|
+
n: number;
|
|
526
|
+
deny: number;
|
|
527
|
+
msN: number;
|
|
528
|
+
p50: number;
|
|
529
|
+
p95: number;
|
|
530
|
+
};
|
|
531
|
+
};
|
|
532
|
+
/** orders seen: total, paper (dry_run), rejected/cancelled */
|
|
533
|
+
orders: {
|
|
534
|
+
n: number;
|
|
535
|
+
paper: number;
|
|
536
|
+
rejected: number;
|
|
342
537
|
};
|
|
343
538
|
lastFinal: string;
|
|
344
539
|
simulated: boolean;
|
|
@@ -389,6 +584,8 @@ export declare function useWorld(): {
|
|
|
389
584
|
mcpResolved: (McpPending & {
|
|
390
585
|
resolvedAt: number;
|
|
391
586
|
})[];
|
|
587
|
+
/** MCP tool name -> the server it was last called on (a guard deny on that tool flashes the line to it) */
|
|
588
|
+
mcpTools: Map<string, string>;
|
|
392
589
|
ticker: WorldEvent[];
|
|
393
590
|
stats: {
|
|
394
591
|
runs: number;
|
|
@@ -399,6 +596,35 @@ export declare function useWorld(): {
|
|
|
399
596
|
graphReads: number;
|
|
400
597
|
graphWrites: number;
|
|
401
598
|
mcpCalls: number;
|
|
599
|
+
decisions: number;
|
|
600
|
+
decisionMs: number;
|
|
601
|
+
};
|
|
602
|
+
/** decisions per provider (jev / laya / llm ...): count + summed latency (HUD chip tooltip) */
|
|
603
|
+
decisionProviders: Map<string, {
|
|
604
|
+
n: number;
|
|
605
|
+
ms: number;
|
|
606
|
+
}>;
|
|
607
|
+
/** session-wide decision rate (HUD): last full second's rate, deny share, p50/p95, 60 s sparkline (per second) */
|
|
608
|
+
rate: {
|
|
609
|
+
perS: number;
|
|
610
|
+
deny: number;
|
|
611
|
+
p50: number;
|
|
612
|
+
p95: number;
|
|
613
|
+
spark: number[];
|
|
614
|
+
rollAt: number;
|
|
615
|
+
acc: {
|
|
616
|
+
n: number;
|
|
617
|
+
deny: number;
|
|
618
|
+
msN: number;
|
|
619
|
+
p50: number;
|
|
620
|
+
p95: number;
|
|
621
|
+
};
|
|
622
|
+
};
|
|
623
|
+
/** orders seen: total, paper (dry_run), rejected/cancelled */
|
|
624
|
+
orders: {
|
|
625
|
+
n: number;
|
|
626
|
+
paper: number;
|
|
627
|
+
rejected: number;
|
|
402
628
|
};
|
|
403
629
|
lastFinal: string;
|
|
404
630
|
simulated: boolean;
|
|
@@ -431,6 +657,8 @@ export declare function useWorld(): {
|
|
|
431
657
|
};
|
|
432
658
|
/** Stable pseudo-random 0..1 from a string (same id → same value, different ids → different values). */
|
|
433
659
|
export declare const hash01: (id: string, salt?: number) => number;
|
|
660
|
+
/** high volume: most individual decision glyphs on screen at once (all agents) */
|
|
661
|
+
export declare const HV_GLYPHS_MAX = 3;
|
|
434
662
|
export declare function apply(ev: WorldEvent): void;
|
|
435
663
|
export declare function tick(now?: number): void;
|
|
436
664
|
/** 0..1 visibility for an instance: grows in on spawn, fades out after exit. */
|