@tangle-network/charts 2.0.17 → 2.0.18
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/{AgentGraphCanvas-B74GN1o6.js → AgentGraphCanvas-C5Ee8Z6q.js} +61 -42
- package/dist/{elk-loader-CrLO557o.d.ts → elk-loader-uOcDmUG_.d.ts} +3 -3
- package/dist/{latest-events-iiWwpIck.js → latest-events-CmbyqEIe.js} +26 -29
- package/dist/react/agent-graph/index.d.ts +1 -1
- package/dist/react/agent-graph/index.js +6 -6
- package/dist/react/agent-graph/presentation.d.ts +1 -1
- package/dist/react/agent-graph.css +31 -5
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { D as statusMeta, O as createLucideIcon, T as RunStatusIcon } from "./flow-waterfall-model-DvrgPLGS.js";
|
|
2
|
-
import { a as LIVE_AGENT_CARD, c as AgentMark, d as Wrench, n as AGENT_CARD, o as buildAgentTopology, s as layoutAgents, t as LatestEvents } from "./latest-events-
|
|
2
|
+
import { a as LIVE_AGENT_CARD, c as AgentMark, d as Wrench, n as AGENT_CARD, o as buildAgentTopology, s as layoutAgents, t as LatestEvents } from "./latest-events-CmbyqEIe.js";
|
|
3
3
|
import { C as fmtCost, E as fmtTokenTotal, T as fmtEventTime, _ as syncAmbient, b as useMotionAllowed, g as ambientStyle, h as agentQuietActivity, i as SELECTION_OUTLINE, n as RESTING_SHADOW, o as useColorMode, r as edgeColor, t as RESTING_BORDER, u as shortModel, v as tokenMilliseconds, x as useRunNow, y as useAttention } from "./graph-style-fealnLLn.js";
|
|
4
4
|
import { t as MOTION_CONTROL } from "./motion-DILryczn.js";
|
|
5
5
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -116,13 +116,10 @@ function AgentCardView({ agent, selected, direction, now: fixed, onOpen, parentL
|
|
|
116
116
|
/* @__PURE__ */ jsxs("div", {
|
|
117
117
|
className: "flex min-w-0 items-center gap-2",
|
|
118
118
|
children: [
|
|
119
|
-
/* @__PURE__ */ jsx(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
layout: "tree",
|
|
124
|
-
size: 18
|
|
125
|
-
})
|
|
119
|
+
/* @__PURE__ */ jsx(AgentMark, {
|
|
120
|
+
agent,
|
|
121
|
+
layout: "tree",
|
|
122
|
+
size: 24
|
|
126
123
|
}),
|
|
127
124
|
/* @__PURE__ */ jsxs("span", {
|
|
128
125
|
className: "min-w-0 flex-1 truncate text-sm font-semibold leading-[18px]",
|
|
@@ -132,35 +129,50 @@ function AgentCardView({ agent, selected, direction, now: fixed, onOpen, parentL
|
|
|
132
129
|
}), agent.label]
|
|
133
130
|
}),
|
|
134
131
|
/* @__PURE__ */ jsx("span", {
|
|
135
|
-
className: "text-
|
|
132
|
+
className: "text-[13px] text-muted-foreground tabular-nums",
|
|
136
133
|
title: agent.costUsd == null ? "Cost not reported" : "Cost",
|
|
137
134
|
children: fmtCost(agent.costUsd ?? void 0) ?? "—"
|
|
138
135
|
})
|
|
139
136
|
]
|
|
140
137
|
}),
|
|
141
138
|
/* @__PURE__ */ jsx("p", {
|
|
142
|
-
|
|
143
|
-
|
|
139
|
+
"data-agent-identity": "",
|
|
140
|
+
className: "m-0 truncate text-[13px] leading-[18px] text-muted-foreground",
|
|
141
|
+
title: [agent.harness, agent.model].filter(Boolean).join(" · "),
|
|
142
|
+
children: [agent.harness, agent.model ? shortModel(agent.model) : null].filter(Boolean).join(" · ") || "Identity not recorded"
|
|
143
|
+
}),
|
|
144
|
+
agent.status === "failed" && /* @__PURE__ */ jsx("p", {
|
|
145
|
+
className: "m-0 line-clamp-2 text-[13px] leading-4",
|
|
146
|
+
children: agent.result ?? agent.turn ?? "Failure cause not recorded"
|
|
144
147
|
}),
|
|
145
148
|
/* @__PURE__ */ jsxs("div", {
|
|
146
|
-
className: "mt-auto flex items-center justify-between gap-1 text-
|
|
149
|
+
className: "mt-auto flex items-center justify-between gap-1 text-[13px]",
|
|
147
150
|
style: { color: quiet ? "var(--surface-warning-text)" : s.color },
|
|
148
|
-
children: [
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
},
|
|
162
|
-
|
|
163
|
-
|
|
151
|
+
children: [
|
|
152
|
+
/* @__PURE__ */ jsxs("span", {
|
|
153
|
+
className: "flex items-center gap-1",
|
|
154
|
+
children: [/* @__PURE__ */ jsx(StatusGlyph, {
|
|
155
|
+
status: agent.status,
|
|
156
|
+
size: 16
|
|
157
|
+
}), quiet?.label ?? s.label]
|
|
158
|
+
}),
|
|
159
|
+
/* @__PURE__ */ jsx("span", {
|
|
160
|
+
"data-agent-tokens": "",
|
|
161
|
+
title: agent.tokens == null ? "Tokens not recorded" : "Tokens",
|
|
162
|
+
className: "text-muted-foreground tabular-nums whitespace-nowrap",
|
|
163
|
+
children: fmtTokenTotal(agent.tokens) ?? "—"
|
|
164
|
+
}),
|
|
165
|
+
agent.status === "needs-you" && /* @__PURE__ */ jsx("button", {
|
|
166
|
+
type: "button",
|
|
167
|
+
className: "ag-live-respond nodrag nopan",
|
|
168
|
+
disabled: !onOpen,
|
|
169
|
+
onClick: (event) => {
|
|
170
|
+
event.stopPropagation();
|
|
171
|
+
onOpen?.();
|
|
172
|
+
},
|
|
173
|
+
children: "Respond"
|
|
174
|
+
})
|
|
175
|
+
]
|
|
164
176
|
})
|
|
165
177
|
]
|
|
166
178
|
});
|
|
@@ -174,14 +186,14 @@ function AgentCard({ data }) {
|
|
|
174
186
|
function AgentFrameBox({ data }) {
|
|
175
187
|
const { frame, direction } = data;
|
|
176
188
|
return /* @__PURE__ */ jsxs("div", {
|
|
177
|
-
className: "relative h-full w-full rounded-2xl border",
|
|
189
|
+
className: "ag-team-frame relative h-full w-full rounded-2xl border",
|
|
178
190
|
style: {
|
|
179
191
|
background: "color-mix(in srgb, hsl(var(--muted-foreground)) 7%, transparent)",
|
|
180
192
|
borderColor: "hsl(var(--foreground) / 0.08)"
|
|
181
193
|
},
|
|
182
194
|
children: [/* @__PURE__ */ jsx(Handles, { direction }), /* @__PURE__ */ jsxs("button", {
|
|
183
195
|
type: "button",
|
|
184
|
-
className:
|
|
196
|
+
className: `nodrag nopan absolute top-2 flex h-16 items-center justify-center gap-2 rounded text-sm text-muted-foreground hover:bg-muted focus-visible:outline ${data.groupParents ? "right-3 w-8 flex-col" : "left-3 right-3 justify-start"}`,
|
|
185
197
|
"aria-label": `${frame.collapsed ? "Expand" : "Collapse"} ${data.label} team`,
|
|
186
198
|
"aria-expanded": !frame.collapsed,
|
|
187
199
|
title: `${data.label} · ${frame.group.memberIds.length} agents`,
|
|
@@ -189,10 +201,14 @@ function AgentFrameBox({ data }) {
|
|
|
189
201
|
event.stopPropagation();
|
|
190
202
|
data.onToggle();
|
|
191
203
|
},
|
|
192
|
-
children: [
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
204
|
+
children: [
|
|
205
|
+
/* @__PURE__ */ jsx(ChevronDown, {
|
|
206
|
+
size: 16,
|
|
207
|
+
className: frame.collapsed ? "-rotate-90" : void 0
|
|
208
|
+
}),
|
|
209
|
+
!data.groupParents && /* @__PURE__ */ jsxs("strong", { children: [data.label, " team"] }),
|
|
210
|
+
/* @__PURE__ */ jsx("span", { children: frame.group.memberIds.length })
|
|
211
|
+
]
|
|
196
212
|
})]
|
|
197
213
|
});
|
|
198
214
|
}
|
|
@@ -528,7 +544,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
528
544
|
const columnRef = useRef(null);
|
|
529
545
|
if (canvas && !narrow && columnRef.current?.key !== columnKey) columnRef.current = {
|
|
530
546
|
key: columnKey,
|
|
531
|
-
columns: Math.max(1, Math.min(6, Math.floor((canvas.width - 32) / (card.width + 10))))
|
|
547
|
+
columns: Math.max(1, Math.min(6, Math.floor((canvas.width - 32 - (!live && direction === "LR" ? card.width + 70 : 0)) / (card.width + 10))))
|
|
532
548
|
};
|
|
533
549
|
const columns = columnRef.current?.columns ?? 1;
|
|
534
550
|
const layoutKey = JSON.stringify([
|
|
@@ -542,7 +558,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
542
558
|
useEffect(() => {
|
|
543
559
|
if (narrow) return;
|
|
544
560
|
let active = true;
|
|
545
|
-
layoutAgents(topology, direction, columns, card, collapsed).then((layout) => {
|
|
561
|
+
layoutAgents(topology, direction, columns, card, collapsed, live).then((layout) => {
|
|
546
562
|
if (active) setPlaced({
|
|
547
563
|
key: layoutKey,
|
|
548
564
|
layout
|
|
@@ -583,6 +599,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
583
599
|
data: {
|
|
584
600
|
frame,
|
|
585
601
|
direction,
|
|
602
|
+
groupParents: live,
|
|
586
603
|
label: byId.get(frame.group.parentId)?.label ?? "Agent",
|
|
587
604
|
onToggle: () => {
|
|
588
605
|
if (!frame.collapsed && selectedId && frame.group.memberIds.includes(selectedId)) onSelect?.(frame.group.parentId);
|
|
@@ -599,7 +616,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
599
616
|
const agent = byId.get(id);
|
|
600
617
|
const position = layout.positions.get(id);
|
|
601
618
|
if (!agent || !position) continue;
|
|
602
|
-
const selected = selectedId === id, owned = layout.frames.find((frame) => frame.group.parentId === id);
|
|
619
|
+
const selected = selectedId === id, owned = live && layout.frames.find((frame) => frame.group.parentId === id);
|
|
603
620
|
const width = owned ? owned.width - 64 : card.width, height = owned ? 64 : card.height;
|
|
604
621
|
const measured = rfRef.current?.getInternalNode(id)?.measured;
|
|
605
622
|
cards.push({
|
|
@@ -646,7 +663,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
646
663
|
const out = [];
|
|
647
664
|
const seen = /* @__PURE__ */ new Set();
|
|
648
665
|
for (const s of topology.spawns) {
|
|
649
|
-
const source = topology.groups.find((group) => group.parentId === s.from)?.id
|
|
666
|
+
const source = live && topology.groups.find((group) => group.parentId === s.from)?.id || s.from, target = topology.groupOf.get(s.to) ?? s.to;
|
|
650
667
|
if (source === target) continue;
|
|
651
668
|
const id = `spawn:${source}:${target}`;
|
|
652
669
|
if (seen.has(id)) continue;
|
|
@@ -720,7 +737,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
720
737
|
}, [narrow]);
|
|
721
738
|
const layoutIdentity = layout ? `${layoutKey}:${layout.columns}` : null;
|
|
722
739
|
const cameraKey = `${direction}:${topology.key}`;
|
|
723
|
-
const minZoom = layout && canvas ? Math.max(.02, Math.min(.2, (canvas.width - 32) / layout.width, (canvas.height - 32) / layout.height)) : .2;
|
|
740
|
+
const minZoom = !live ? 1 : layout && canvas ? Math.max(.02, Math.min(.2, (canvas.width - 32) / layout.width, (canvas.height - 32) / layout.height)) : .2;
|
|
724
741
|
useEffect(() => {
|
|
725
742
|
const inst = rfRef.current;
|
|
726
743
|
if (!ready || !inst || !layoutIdentity || !canvas) return;
|
|
@@ -888,7 +905,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
888
905
|
wrapperRef.current = el;
|
|
889
906
|
measureCanvas(el);
|
|
890
907
|
},
|
|
891
|
-
className: `agent-graph ag-live relative flex flex-col ${className ?? ""}`,
|
|
908
|
+
className: `agent-graph ag-live${live ? "" : " ag-topology"} relative flex flex-col ${className ?? ""}`,
|
|
892
909
|
tabIndex: -1,
|
|
893
910
|
onKeyDownCapture: (event) => {
|
|
894
911
|
if (event.target instanceof HTMLElement && event.target.closest("[data-agent-metrics]")) return;
|
|
@@ -949,7 +966,7 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
949
966
|
select(agent.id);
|
|
950
967
|
}
|
|
951
968
|
},
|
|
952
|
-
children: live
|
|
969
|
+
children: live ? /* @__PURE__ */ jsx(LiveAgentCardView, {
|
|
953
970
|
agent,
|
|
954
971
|
parentLabel: byId.get(parentOf.get(agent.id) ?? "")?.label,
|
|
955
972
|
selected: selectedId === agent.id,
|
|
@@ -1060,7 +1077,9 @@ function AgentGraphCanvas({ nodes, edges, selectedId, onSelect, direction = "TB"
|
|
|
1060
1077
|
position: "bottom-right",
|
|
1061
1078
|
fitViewOptions: {
|
|
1062
1079
|
padding: `${FIT_PADDING}px`,
|
|
1063
|
-
|
|
1080
|
+
minZoom,
|
|
1081
|
+
maxZoom: 1,
|
|
1082
|
+
nodes: live ? void 0 : topology.agentIds.slice(0, 2).map((id) => ({ id }))
|
|
1064
1083
|
}
|
|
1065
1084
|
})
|
|
1066
1085
|
]
|
|
@@ -67,8 +67,8 @@ interface AgentGraphEdge {
|
|
|
67
67
|
type AgentGraphDirection = "TB" | "LR";
|
|
68
68
|
/** Every agent card's size. Fixed, so a status or turn update never moves a card. */
|
|
69
69
|
declare const AGENT_CARD: {
|
|
70
|
-
readonly width:
|
|
71
|
-
readonly height:
|
|
70
|
+
readonly width: 232;
|
|
71
|
+
readonly height: 120;
|
|
72
72
|
};
|
|
73
73
|
/** A live card: room for the header, a two-line thinking line and the last three events. Fixed for the same reason. */
|
|
74
74
|
declare const LIVE_AGENT_CARD: {
|
|
@@ -125,7 +125,7 @@ interface AgentLayout {
|
|
|
125
125
|
height: number;
|
|
126
126
|
}
|
|
127
127
|
/** Lay the run out with every grid `columns` wide. */
|
|
128
|
-
declare function layoutAgents(topology: AgentTopology, direction: AgentGraphDirection, columns: number, card?: CardSize, collapsed?: ReadonlySet<string
|
|
128
|
+
declare function layoutAgents(topology: AgentTopology, direction: AgentGraphDirection, columns: number, card?: CardSize, collapsed?: ReadonlySet<string>, groupParents?: boolean): Promise<AgentLayout>;
|
|
129
129
|
//#endregion
|
|
130
130
|
//#region src/react/agent-graph/format.d.ts
|
|
131
131
|
/**
|
|
@@ -85,8 +85,8 @@ function ToolMark({ tool, label, size }) {
|
|
|
85
85
|
//#region src/react/agent-graph/agent-graph-layout.ts
|
|
86
86
|
/** Every agent card's size. Fixed, so a status or turn update never moves a card. */
|
|
87
87
|
const AGENT_CARD = {
|
|
88
|
-
width:
|
|
89
|
-
height:
|
|
88
|
+
width: 232,
|
|
89
|
+
height: 120
|
|
90
90
|
};
|
|
91
91
|
/** A live card: room for the header, a two-line thinking line and the last three events. Fixed for the same reason. */
|
|
92
92
|
const LIVE_AGENT_CARD = {
|
|
@@ -160,35 +160,29 @@ function gridSize(members, columns, card, collapsed = false) {
|
|
|
160
160
|
};
|
|
161
161
|
}
|
|
162
162
|
/** The boxes the layouter places: each ungrouped agent, and each grid as one block. */
|
|
163
|
-
function layoutUnits(topology, columns, card, collapsed) {
|
|
164
|
-
const
|
|
165
|
-
const
|
|
166
|
-
for (const id of topology.agentIds) if (!topology.groupOf.has(id) && !ownerGroup.has(id)) units.push({
|
|
163
|
+
function layoutUnits(topology, columns, card, collapsed, groupParents) {
|
|
164
|
+
const ownerGroup = new Map(groupParents ? topology.groups.map((group) => [group.parentId, group.id]) : []);
|
|
165
|
+
const units = topology.agentIds.filter((id) => !topology.groupOf.has(id) && !ownerGroup.has(id)).map((id) => ({
|
|
167
166
|
id,
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
});
|
|
167
|
+
...card
|
|
168
|
+
}));
|
|
169
|
+
units.push(...topology.groups.map((group) => ({
|
|
170
|
+
id: group.id,
|
|
171
|
+
...gridSize(group.memberIds.length, columns, card, collapsed.has(group.id))
|
|
172
|
+
})));
|
|
175
173
|
const unitOf = (id) => topology.groupOf.get(id) ?? ownerGroup.get(id) ?? id;
|
|
176
174
|
const seen = /* @__PURE__ */ new Set();
|
|
177
|
-
const links = [];
|
|
178
|
-
for (const s of topology.spawns) {
|
|
179
|
-
const from = unitOf(s.from);
|
|
180
|
-
const to = unitOf(s.to);
|
|
181
|
-
const key = `${from}\u0000${to}`;
|
|
182
|
-
if (from === to || seen.has(key)) continue;
|
|
183
|
-
seen.add(key);
|
|
184
|
-
links.push({
|
|
185
|
-
from,
|
|
186
|
-
to
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
175
|
return {
|
|
190
176
|
units,
|
|
191
|
-
links
|
|
177
|
+
links: topology.spawns.flatMap((spawn) => {
|
|
178
|
+
const from = unitOf(spawn.from), to = unitOf(spawn.to), key = `${from}\u0000${to}`;
|
|
179
|
+
if (from === to || seen.has(key)) return [];
|
|
180
|
+
seen.add(key);
|
|
181
|
+
return [{
|
|
182
|
+
from,
|
|
183
|
+
to
|
|
184
|
+
}];
|
|
185
|
+
})
|
|
192
186
|
};
|
|
193
187
|
}
|
|
194
188
|
async function placeWithElk(units, links, direction) {
|
|
@@ -271,8 +265,8 @@ function placeByDepth(units, links, direction) {
|
|
|
271
265
|
return at;
|
|
272
266
|
}
|
|
273
267
|
/** Lay the run out with every grid `columns` wide. */
|
|
274
|
-
async function layoutAgents(topology, direction, columns, card = AGENT_CARD, collapsed = /* @__PURE__ */ new Set()) {
|
|
275
|
-
const { units, links } = layoutUnits(topology, columns, card, collapsed);
|
|
268
|
+
async function layoutAgents(topology, direction, columns, card = AGENT_CARD, collapsed = /* @__PURE__ */ new Set(), groupParents = true) {
|
|
269
|
+
const { units, links } = layoutUnits(topology, columns, card, collapsed, groupParents);
|
|
276
270
|
const placed = await placeWithElk(units, links, direction) ?? placeByDepth(units, links, direction);
|
|
277
271
|
const positions = /* @__PURE__ */ new Map();
|
|
278
272
|
const frames = [];
|
|
@@ -301,9 +295,12 @@ async function layoutAgents(topology, direction, columns, card = AGENT_CARD, col
|
|
|
301
295
|
...size,
|
|
302
296
|
collapsed: closed
|
|
303
297
|
});
|
|
304
|
-
positions.set(g.parentId, {
|
|
298
|
+
positions.set(g.parentId, groupParents ? {
|
|
305
299
|
x: origin.x + FRAME_PAD,
|
|
306
300
|
y: origin.y + 8
|
|
301
|
+
} : {
|
|
302
|
+
...positions.get(g.parentId),
|
|
303
|
+
y: origin.y
|
|
307
304
|
});
|
|
308
305
|
if (closed) continue;
|
|
309
306
|
const cols = Math.max(1, Math.min(columns, g.memberIds.length));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as AGENT_CARD, B as AgentLeafGroup, C as shortModel, D as fmtEventTime, E as fmtDuration, F as AgentGraphEdgeKind, G as LIVE_AGENT_CARD, H as CardSize, I as AgentGraphEvent, K as buildAgentTopology, L as AgentGraphNode, M as AgentGraphActivity, N as AgentGraphDirection, O as fmtTokenTotal, P as AgentGraphEdge, R as AgentGraphStatus, S as parseActionPath, T as fmtCost, U as FRAME_CAPTION, V as AgentTopology, W as GRID_MIN_LEAVES, _ as useRunNow, a as RESTING_SHADOW, b as actionPathLabel, c as motionAllowed, d as agentQuietActivity, f as ambientStyle, g as useMotionAllowed, h as useAttention, i as RESTING_BORDER, j as AgentFrame, k as fmtTokens, l as useColorMode, m as tokenMilliseconds, n as GraphErrorBoundary, o as edgeColor, p as syncAmbient, q as layoutAgents, r as retryImport, s as SELECTION_OUTLINE, t as loadElk, u as activityTiming, v as ActionPathParts, w as clampPreview, x as humanizeIdentifier, y as LeadCase, z as AgentLayout } from "../../elk-loader-
|
|
1
|
+
import { A as AGENT_CARD, B as AgentLeafGroup, C as shortModel, D as fmtEventTime, E as fmtDuration, F as AgentGraphEdgeKind, G as LIVE_AGENT_CARD, H as CardSize, I as AgentGraphEvent, K as buildAgentTopology, L as AgentGraphNode, M as AgentGraphActivity, N as AgentGraphDirection, O as fmtTokenTotal, P as AgentGraphEdge, R as AgentGraphStatus, S as parseActionPath, T as fmtCost, U as FRAME_CAPTION, V as AgentTopology, W as GRID_MIN_LEAVES, _ as useRunNow, a as RESTING_SHADOW, b as actionPathLabel, c as motionAllowed, d as agentQuietActivity, f as ambientStyle, g as useMotionAllowed, h as useAttention, i as RESTING_BORDER, j as AgentFrame, k as fmtTokens, l as useColorMode, m as tokenMilliseconds, n as GraphErrorBoundary, o as edgeColor, p as syncAmbient, q as layoutAgents, r as retryImport, s as SELECTION_OUTLINE, t as loadElk, u as activityTiming, v as ActionPathParts, w as clampPreview, x as humanizeIdentifier, y as LeadCase, z as AgentLayout } from "../../elk-loader-uOcDmUG_.js";
|
|
2
2
|
import { ReactNode } from "react";
|
|
3
3
|
//#region src/react/agent-graph/agent-hub-layout.d.ts
|
|
4
4
|
/** A tool or service an agent calls: drawn as an outer node with its brand mark. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { D as statusMeta, E as runStatus, O as createLucideIcon, T as RunStatusIcon } from "../../flow-waterfall-model-DvrgPLGS.js";
|
|
2
|
-
import { a as LIVE_AGENT_CARD, c as AgentMark, i as GRID_MIN_LEAVES, l as GraphMarksProvider, n as AGENT_CARD, o as buildAgentTopology, r as FRAME_CAPTION, s as layoutAgents, t as LatestEvents, u as ToolMark } from "../../latest-events-
|
|
2
|
+
import { a as LIVE_AGENT_CARD, c as AgentMark, i as GRID_MIN_LEAVES, l as GraphMarksProvider, n as AGENT_CARD, o as buildAgentTopology, r as FRAME_CAPTION, s as layoutAgents, t as LatestEvents, u as ToolMark } from "../../latest-events-CmbyqEIe.js";
|
|
3
3
|
import { C as fmtCost, D as fmtTokens, E as fmtTokenTotal, S as clampPreview, T as fmtEventTime, _ as syncAmbient, a as motionAllowed, b as useMotionAllowed, c as humanizeIdentifier, d as loadElk, f as GraphErrorBoundary, g as ambientStyle, h as agentQuietActivity, i as SELECTION_OUTLINE, l as parseActionPath, m as activityTiming, n as RESTING_SHADOW, o as useColorMode, p as retryImport, r as edgeColor, s as actionPathLabel, t as RESTING_BORDER, u as shortModel, v as tokenMilliseconds, w as fmtDuration, x as useRunNow, y as useAttention } from "../../graph-style-fealnLLn.js";
|
|
4
4
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { Suspense, lazy, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
@@ -1122,7 +1122,7 @@ function AgentHubCanvas(props) {
|
|
|
1122
1122
|
* taking the pane down.
|
|
1123
1123
|
*/
|
|
1124
1124
|
function lazyCanvas() {
|
|
1125
|
-
return lazy(() => retryImport(() => import("../../AgentGraphCanvas-
|
|
1125
|
+
return lazy(() => retryImport(() => import("../../AgentGraphCanvas-C5Ee8Z6q.js").then((m) => ({ default: m.AgentGraphCanvas }))));
|
|
1126
1126
|
}
|
|
1127
1127
|
/** The agents as a list, for when the canvas cannot load. */
|
|
1128
1128
|
function AgentListFallback({ nodes, selectedId, onSelect, className, onRetry }) {
|
|
@@ -1131,12 +1131,12 @@ function AgentListFallback({ nodes, selectedId, onSelect, className, onRetry })
|
|
|
1131
1131
|
children: [/* @__PURE__ */ jsxs("div", {
|
|
1132
1132
|
className: "mb-1 flex items-center justify-between gap-2",
|
|
1133
1133
|
children: [/* @__PURE__ */ jsx("p", {
|
|
1134
|
-
className: "text-muted-foreground text-
|
|
1134
|
+
className: "text-muted-foreground text-[13px]",
|
|
1135
1135
|
children: "Couldn't draw the graph — showing the agents."
|
|
1136
1136
|
}), /* @__PURE__ */ jsx("button", {
|
|
1137
1137
|
type: "button",
|
|
1138
1138
|
onClick: onRetry,
|
|
1139
|
-
className: "shrink-0 rounded border border-border px-1.5 py-0.5 text-muted-foreground text-
|
|
1139
|
+
className: "shrink-0 rounded border border-border px-1.5 py-0.5 text-muted-foreground text-[13px] transition hover:text-foreground",
|
|
1140
1140
|
children: "Retry"
|
|
1141
1141
|
})]
|
|
1142
1142
|
}), /* @__PURE__ */ jsx("ul", {
|
|
@@ -1145,7 +1145,7 @@ function AgentListFallback({ nodes, selectedId, onSelect, className, onRetry })
|
|
|
1145
1145
|
type: "button",
|
|
1146
1146
|
"aria-pressed": selectedId === n.id,
|
|
1147
1147
|
onClick: () => onSelect?.(n.id),
|
|
1148
|
-
className: "flex w-full items-center justify-between gap-2 rounded px-2 py-1 text-left text-foreground text-
|
|
1148
|
+
className: "flex w-full items-center justify-between gap-2 rounded px-2 py-1 text-left text-foreground text-[13px] hover:bg-muted aria-pressed:bg-muted",
|
|
1149
1149
|
children: [/* @__PURE__ */ jsx("span", {
|
|
1150
1150
|
className: "truncate",
|
|
1151
1151
|
children: n.label
|
|
@@ -1174,7 +1174,7 @@ function AgentGraphTree(props) {
|
|
|
1174
1174
|
}),
|
|
1175
1175
|
children: /* @__PURE__ */ jsx(Suspense, {
|
|
1176
1176
|
fallback: /* @__PURE__ */ jsx("div", {
|
|
1177
|
-
className: `agent-graph flex items-center justify-center rounded-lg border border-border border-dashed text-muted-foreground text-
|
|
1177
|
+
className: `agent-graph flex items-center justify-center rounded-lg border border-border border-dashed text-muted-foreground text-[13px] ${props.className ?? ""}`,
|
|
1178
1178
|
children: "Loading graph…"
|
|
1179
1179
|
}),
|
|
1180
1180
|
children: /* @__PURE__ */ jsx(Canvas, { ...props })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as shortModel, D as fmtEventTime, E as fmtDuration, O as fmtTokenTotal, S as parseActionPath, T as fmtCost, _ as useRunNow, a as RESTING_SHADOW, b as actionPathLabel, c as motionAllowed, d as agentQuietActivity, f as ambientStyle, g as useMotionAllowed, h as useAttention, i as RESTING_BORDER, k as fmtTokens, l as useColorMode, m as tokenMilliseconds, n as GraphErrorBoundary, o as edgeColor, p as syncAmbient, r as retryImport, s as SELECTION_OUTLINE, t as loadElk, u as activityTiming, v as ActionPathParts, w as clampPreview, x as humanizeIdentifier, y as LeadCase } from "../../elk-loader-
|
|
1
|
+
import { C as shortModel, D as fmtEventTime, E as fmtDuration, O as fmtTokenTotal, S as parseActionPath, T as fmtCost, _ as useRunNow, a as RESTING_SHADOW, b as actionPathLabel, c as motionAllowed, d as agentQuietActivity, f as ambientStyle, g as useMotionAllowed, h as useAttention, i as RESTING_BORDER, k as fmtTokens, l as useColorMode, m as tokenMilliseconds, n as GraphErrorBoundary, o as edgeColor, p as syncAmbient, r as retryImport, s as SELECTION_OUTLINE, t as loadElk, u as activityTiming, v as ActionPathParts, w as clampPreview, x as humanizeIdentifier, y as LeadCase } from "../../elk-loader-uOcDmUG_.js";
|
|
2
2
|
//#region src/react/agent-graph/motion.d.ts
|
|
3
3
|
/** Brand owns complete duration/easing roles. Keep properties explicit. */
|
|
4
4
|
export declare const MOTION_CONTROL = "[transition:color_var(--motion-control),background-color_var(--motion-control),border-color_var(--motion-control),box-shadow_var(--motion-control),transform_var(--motion-control),scale_var(--motion-control),opacity_var(--motion-control)] motion-reduce:transition-none";
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
--radius-full: 999px;
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
|
-
@layer base {
|
|
26
|
+
@layer utilities.agent-graph-base {
|
|
27
27
|
@scope (.agent-graph, .ag-root, .ag-latest, [data-agent-metrics]) {
|
|
28
28
|
*, :scope:is(*), ::after, :scope:is(::after), ::before, :scope:is(::before), ::backdrop, :scope:is(::backdrop), ::file-selector-button, :scope:is(::file-selector-button) {
|
|
29
29
|
box-sizing: border-box;
|
|
@@ -173,7 +173,7 @@
|
|
|
173
173
|
}
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
|
-
@layer utilities {
|
|
176
|
+
@layer utilities.agent-graph-utilities {
|
|
177
177
|
@scope (.agent-graph, .ag-root, .ag-latest, [data-agent-metrics]) {
|
|
178
178
|
.pointer-events-auto, :scope:is(.pointer-events-auto) {
|
|
179
179
|
pointer-events: auto;
|
|
@@ -210,6 +210,9 @@
|
|
|
210
210
|
.right-3, :scope:is(.right-3) {
|
|
211
211
|
right: calc(var(--spacing) * 3);
|
|
212
212
|
}
|
|
213
|
+
.left-3, :scope:is(.left-3) {
|
|
214
|
+
left: calc(var(--spacing) * 3);
|
|
215
|
+
}
|
|
213
216
|
.container, :scope:is(.container) {
|
|
214
217
|
width: 100%;
|
|
215
218
|
@media (width >= 40rem) {
|
|
@@ -279,9 +282,6 @@
|
|
|
279
282
|
.min-h-0, :scope:is(.min-h-0) {
|
|
280
283
|
min-height: 0px;
|
|
281
284
|
}
|
|
282
|
-
.min-h-4, :scope:is(.min-h-4) {
|
|
283
|
-
min-height: calc(var(--spacing) * 4);
|
|
284
|
-
}
|
|
285
285
|
.min-h-10, :scope:is(.min-h-10) {
|
|
286
286
|
min-height: calc(var(--spacing) * 10);
|
|
287
287
|
}
|
|
@@ -336,6 +336,9 @@
|
|
|
336
336
|
.justify-center, :scope:is(.justify-center) {
|
|
337
337
|
justify-content: center;
|
|
338
338
|
}
|
|
339
|
+
.justify-start, :scope:is(.justify-start) {
|
|
340
|
+
justify-content: flex-start;
|
|
341
|
+
}
|
|
339
342
|
.gap-0\.5, :scope:is(.gap-0\.5) {
|
|
340
343
|
gap: calc(var(--spacing) * 0.5);
|
|
341
344
|
}
|
|
@@ -466,6 +469,9 @@
|
|
|
466
469
|
.text-\[10px\], :scope:is(.text-\[10px\]) {
|
|
467
470
|
font-size: 10px;
|
|
468
471
|
}
|
|
472
|
+
.text-\[13px\], :scope:is(.text-\[13px\]) {
|
|
473
|
+
font-size: 13px;
|
|
474
|
+
}
|
|
469
475
|
.leading-4, :scope:is(.leading-4) {
|
|
470
476
|
--tw-leading: calc(var(--spacing) * 4);
|
|
471
477
|
line-height: calc(var(--spacing) * 4);
|
|
@@ -1568,6 +1574,26 @@ svg.react-flow__connectionline {
|
|
|
1568
1574
|
min-width: 44px;
|
|
1569
1575
|
}
|
|
1570
1576
|
}
|
|
1577
|
+
.ag-topology {
|
|
1578
|
+
--ag-surface: hsl(var(--hsl-raised));
|
|
1579
|
+
--font-size-xs: 13px;
|
|
1580
|
+
--text-xs: 13px;
|
|
1581
|
+
}
|
|
1582
|
+
.ag-topology :is(.text-xs, .ag-parent-label) {
|
|
1583
|
+
font-size: 13px;
|
|
1584
|
+
}
|
|
1585
|
+
.ag-topology .ag-team-frame {
|
|
1586
|
+
background: hsl(var(--hsl-card)) !important;
|
|
1587
|
+
}
|
|
1588
|
+
.ag-topology .ag-agent-card {
|
|
1589
|
+
background: var(--ag-surface);
|
|
1590
|
+
}
|
|
1591
|
+
.ag-topology .ag-agent-card[data-selected] {
|
|
1592
|
+
background: hsl(var(--hsl-raised-2));
|
|
1593
|
+
}
|
|
1594
|
+
.ag-topology .react-flow__node-agentFrame .react-flow__handle-left {
|
|
1595
|
+
top: 40px;
|
|
1596
|
+
}
|
|
1571
1597
|
@property --tw-rotate-x {
|
|
1572
1598
|
syntax: "*";
|
|
1573
1599
|
inherits: false;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tangle-network/charts",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.18",
|
|
4
4
|
"description": "Static SVG and HTML figures for benchmarks and operational timing. Draws from producer data and refuses what it cannot draw honestly.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|