@lumea-labs/orchestrator 0.1.0 → 0.1.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.
Files changed (38) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/orchestrator-document.d.ts +2 -2
  3. package/dist/orchestrator-document.js +2 -1
  4. package/dist/plan-detail.d.ts +6 -6
  5. package/dist/plan-detail.js +214 -156
  6. package/dist/plan-graph.d.ts +2 -2
  7. package/dist/plan-graph.js +178 -119
  8. package/dist/plan-node-detail.d.ts +4 -4
  9. package/dist/plan-node-detail.js +177 -125
  10. package/dist/plan-task-detail.d.ts +2 -2
  11. package/dist/plan-task-detail.js +282 -172
  12. package/dist/run-kanban-filter-menu.d.ts +3 -2
  13. package/dist/run-kanban-filter-menu.js +96 -77
  14. package/dist/run-kanban.d.ts +3 -3
  15. package/dist/run-kanban.js +93 -79
  16. package/dist/swarm-agent-badge.d.ts +2 -2
  17. package/dist/swarm-agent-badge.js +21 -18
  18. package/dist/swarm-run-activity.d.ts +2 -2
  19. package/dist/swarm-run-activity.js +150 -95
  20. package/dist/swarm-run-card.d.ts +2 -2
  21. package/dist/swarm-run-card.js +76 -55
  22. package/dist/swarm-run-detail.d.ts +2 -2
  23. package/dist/swarm-run-detail.js +415 -310
  24. package/dist/swarm-run-list.d.ts +2 -2
  25. package/dist/swarm-run-list.js +37 -27
  26. package/dist/swarm-run-row.d.ts +2 -2
  27. package/dist/swarm-run-row.js +82 -72
  28. package/dist/swarm-skeletons.d.ts +3 -3
  29. package/dist/swarm-skeletons.js +65 -16
  30. package/dist/swarm-status-bar.d.ts +2 -2
  31. package/dist/swarm-status-bar.js +62 -44
  32. package/dist/swarm-status-pill.d.ts +2 -2
  33. package/dist/swarm-status-pill.js +14 -11
  34. package/dist/swarm-timeline.d.ts +2 -2
  35. package/dist/swarm-timeline.js +284 -225
  36. package/dist/task-workspace-sidebar.d.ts +2 -2
  37. package/dist/task-workspace-sidebar.js +145 -113
  38. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
  import { SwarmRun, SwarmLabels } from './types.js';
4
4
 
@@ -17,6 +17,6 @@ interface SwarmRunListProps {
17
17
  labels?: Partial<SwarmLabels>;
18
18
  className?: string;
19
19
  }
20
- declare function SwarmRunList({ runs, now, groupBackground, activeId, renderAvatar, onCancel, onRetry, onOpen, emptyState, labels, className, }: SwarmRunListProps): react.JSX.Element;
20
+ declare function SwarmRunList({ runs, now, groupBackground, activeId, renderAvatar, onCancel, onRetry, onOpen, emptyState, labels, className, }: SwarmRunListProps): react_jsx_runtime.JSX.Element;
21
21
 
22
22
  export { SwarmRunList, type SwarmRunListProps };
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
3
  import { useMemo } from "react";
3
4
  import {
4
5
  defaultSwarmLabels
@@ -27,37 +28,19 @@ function SwarmRunList({
27
28
  return { foreground: fg, background: bg };
28
29
  }, [runs, groupBackground]);
29
30
  if (runs.length === 0) {
30
- return /* @__PURE__ */ React.createElement("div", { className: ["px-3 py-10 text-center", className || ""].join(" ") }, emptyState ?? /* @__PURE__ */ React.createElement("span", { className: "font-mono text-[11px] uppercase tracking-[0.16em] text-p-ink-3" }, L.noRuns));
31
+ return /* @__PURE__ */ jsx("div", { className: ["px-3 py-10 text-center", className || ""].join(" "), children: emptyState ?? /* @__PURE__ */ jsx("span", { className: "font-mono text-[11px] uppercase tracking-[0.16em] text-p-ink-3", children: L.noRuns }) });
31
32
  }
32
33
  const Section = ({
33
34
  label,
34
35
  list
35
- }) => /* @__PURE__ */ React.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-baseline gap-2 border-b border-p-line bg-p-bg/50 px-3 py-1.5" }, /* @__PURE__ */ React.createElement("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.22em] text-p-ink-3" }, label), /* @__PURE__ */ React.createElement("span", { className: "font-mono text-[10px] tabular-nums text-p-ink-3" }, String(list.length).padStart(2, "0"))), /* @__PURE__ */ React.createElement("div", { className: "flex flex-col" }, list.map((r) => /* @__PURE__ */ React.createElement(
36
- SwarmRunRow,
37
- {
38
- key: r.id,
39
- run: r,
40
- now,
41
- renderAvatar,
42
- onCancel,
43
- onRetry,
44
- onOpen,
45
- active: activeId === r.id,
46
- labels
47
- }
48
- ))));
49
- return /* @__PURE__ */ React.createElement(
50
- "div",
51
- {
52
- className: [
53
- "overflow-hidden rounded-xl border border-p-line bg-p-surface",
54
- className || ""
55
- ].join(" ")
56
- },
57
- groupBackground ? /* @__PURE__ */ React.createElement(React.Fragment, null, foreground.length > 0 ? /* @__PURE__ */ React.createElement(Section, { label: L.foregroundGroup, list: foreground }) : null, background.length > 0 ? /* @__PURE__ */ React.createElement(Section, { label: L.backgroundGroup, list: background }) : null) : /* @__PURE__ */ React.createElement("div", { className: "flex flex-col" }, runs.map((r) => /* @__PURE__ */ React.createElement(
36
+ }) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col", children: [
37
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2 border-b border-p-line bg-p-bg/50 px-3 py-1.5", children: [
38
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.22em] text-p-ink-3", children: label }),
39
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] tabular-nums text-p-ink-3", children: String(list.length).padStart(2, "0") })
40
+ ] }),
41
+ /* @__PURE__ */ jsx("div", { className: "flex flex-col", children: list.map((r) => /* @__PURE__ */ jsx(
58
42
  SwarmRunRow,
59
43
  {
60
- key: r.id,
61
44
  run: r,
62
45
  now,
63
46
  renderAvatar,
@@ -66,8 +49,35 @@ function SwarmRunList({
66
49
  onOpen,
67
50
  active: activeId === r.id,
68
51
  labels
69
- }
70
- )))
52
+ },
53
+ r.id
54
+ )) })
55
+ ] });
56
+ return /* @__PURE__ */ jsx(
57
+ "div",
58
+ {
59
+ className: [
60
+ "overflow-hidden rounded-xl border border-p-line bg-p-surface",
61
+ className || ""
62
+ ].join(" "),
63
+ children: groupBackground ? /* @__PURE__ */ jsxs(Fragment, { children: [
64
+ foreground.length > 0 ? /* @__PURE__ */ jsx(Section, { label: L.foregroundGroup, list: foreground }) : null,
65
+ background.length > 0 ? /* @__PURE__ */ jsx(Section, { label: L.backgroundGroup, list: background }) : null
66
+ ] }) : /* @__PURE__ */ jsx("div", { className: "flex flex-col", children: runs.map((r) => /* @__PURE__ */ jsx(
67
+ SwarmRunRow,
68
+ {
69
+ run: r,
70
+ now,
71
+ renderAvatar,
72
+ onCancel,
73
+ onRetry,
74
+ onOpen,
75
+ active: activeId === r.id,
76
+ labels
77
+ },
78
+ r.id
79
+ )) })
80
+ }
71
81
  );
72
82
  }
73
83
  export {
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
  import { SwarmRun, SwarmLabels } from './types.js';
4
4
 
@@ -17,6 +17,6 @@ interface SwarmRunRowProps {
17
17
  labels?: Partial<SwarmLabels>;
18
18
  className?: string;
19
19
  }
20
- declare function SwarmRunRow({ run, now, renderAvatar, onCancel, onRetry, onOpen, active, labels, className, }: SwarmRunRowProps): react.JSX.Element;
20
+ declare function SwarmRunRow({ run, now, renderAvatar, onCancel, onRetry, onOpen, active, labels, className, }: SwarmRunRowProps): react_jsx_runtime.JSX.Element;
21
21
 
22
22
  export { SwarmRunRow, type SwarmRunRowProps };
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
2
3
  import { RotateCcw, Square } from "lucide-react";
3
4
  import {
4
5
  defaultSwarmLabels
@@ -31,7 +32,7 @@ function SwarmRunRow({
31
32
  const showCancel = onCancel && isLive;
32
33
  const showRetry = onRetry && (run.status === "failed" || run.status === "cancelled");
33
34
  const glyph = run.agent.glyph || (run.agent.displayName || run.agent.name).charAt(0).toUpperCase();
34
- return /* @__PURE__ */ React.createElement(
35
+ return /* @__PURE__ */ jsxs(
35
36
  "div",
36
37
  {
37
38
  role: onOpen ? "button" : void 0,
@@ -47,77 +48,86 @@ function SwarmRunRow({
47
48
  "group relative flex items-center gap-3 border-b border-p-line/70 px-3 py-1.5 transition-colors",
48
49
  active ? "bg-p-warm" : onOpen ? "cursor-pointer hover:bg-p-warm/60" : "",
49
50
  className || ""
50
- ].join(" ")
51
- },
52
- /* @__PURE__ */ React.createElement("span", { className: "relative inline-flex size-2 shrink-0" }, /* @__PURE__ */ React.createElement(
53
- "span",
54
- {
55
- "aria-hidden": true,
56
- className: [
57
- "absolute inset-0 rounded-full",
58
- DOT[run.status],
59
- run.status === "running" ? "animate-ping opacity-60" : ""
60
- ].join(" ")
61
- }
62
- ), /* @__PURE__ */ React.createElement(
63
- "span",
64
- {
65
- "aria-hidden": true,
66
- className: ["relative inline-block size-2 rounded-full", DOT[run.status]].join(" ")
67
- }
68
- )),
69
- renderAvatar ? renderAvatar(run.agent) : /* @__PURE__ */ React.createElement(
70
- "span",
71
- {
72
- "aria-hidden": true,
73
- className: "grid size-[18px] shrink-0 place-items-center rounded font-display text-[10px] font-bold text-white",
74
- style: { background: run.agent.color || "#999" }
75
- },
76
- glyph
77
- ),
78
- /* @__PURE__ */ React.createElement("span", { className: "w-[68px] shrink-0 truncate font-mono text-[10.5px] font-bold uppercase tracking-[0.14em] text-p-ink" }, run.agent.displayName || run.agent.name),
79
- /* @__PURE__ */ React.createElement("span", { className: "min-w-0 flex-1 truncate font-body text-[12.5px] leading-tight text-p-ink" }, run.title),
80
- run.lastLog ? /* @__PURE__ */ React.createElement("span", { className: "hidden min-w-0 max-w-[28%] truncate font-mono text-[10.5px] text-p-ink-3 md:inline" }, run.lastLog) : null,
81
- /* @__PURE__ */ React.createElement("span", { className: "w-12 shrink-0 text-right font-mono text-[10.5px] tabular-nums text-p-ink-3" }, run.startedAt ? isLive ? L.startedAgo(elapsed) : L.duration(elapsed) : "\u2014"),
82
- /* @__PURE__ */ React.createElement("span", { className: "w-14 shrink-0 text-right" }, showCancel ? /* @__PURE__ */ React.createElement(
83
- "button",
84
- {
85
- type: "button",
86
- onClick: (e) => {
87
- e.stopPropagation();
88
- onCancel(run.id);
89
- },
90
- className: "inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-mono text-[10px] font-bold uppercase tracking-[0.12em] text-p-ink-3 opacity-0 transition-all cursor-pointer group-hover:opacity-100 hover:bg-p-surface hover:text-[#E63946]"
91
- },
92
- /* @__PURE__ */ React.createElement(Square, { className: "size-2.5" }),
93
- L.cancel
94
- ) : showRetry ? /* @__PURE__ */ React.createElement(
95
- "button",
96
- {
97
- type: "button",
98
- onClick: (e) => {
99
- e.stopPropagation();
100
- onRetry(run.id);
101
- },
102
- className: "inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-mono text-[10px] font-bold uppercase tracking-[0.12em] text-p-ink-3 opacity-0 transition-all cursor-pointer group-hover:opacity-100 hover:bg-p-surface hover:text-p-ink"
103
- },
104
- /* @__PURE__ */ React.createElement(RotateCcw, { className: "size-2.5" }),
105
- L.retry
106
- ) : null),
107
- run.progress !== void 0 && isLive ? /* @__PURE__ */ React.createElement(
108
- "span",
109
- {
110
- "aria-hidden": true,
111
- className: "absolute inset-x-0 bottom-0 h-px bg-p-warm"
112
- },
113
- /* @__PURE__ */ React.createElement(
114
- "span",
115
- {
116
- className: "block h-full bg-p-accent transition-[width] duration-500",
117
- style: { width: `${Math.max(0, Math.min(100, run.progress * 100))}%` }
118
- }
119
- )
120
- ) : null
51
+ ].join(" "),
52
+ children: [
53
+ /* @__PURE__ */ jsxs("span", { className: "relative inline-flex size-2 shrink-0", children: [
54
+ /* @__PURE__ */ jsx(
55
+ "span",
56
+ {
57
+ "aria-hidden": true,
58
+ className: [
59
+ "absolute inset-0 rounded-full",
60
+ DOT[run.status],
61
+ run.status === "running" ? "animate-ping opacity-60" : ""
62
+ ].join(" ")
63
+ }
64
+ ),
65
+ /* @__PURE__ */ jsx(
66
+ "span",
67
+ {
68
+ "aria-hidden": true,
69
+ className: ["relative inline-block size-2 rounded-full", DOT[run.status]].join(" ")
70
+ }
71
+ )
72
+ ] }),
73
+ renderAvatar ? renderAvatar(run.agent) : /* @__PURE__ */ jsx(
74
+ "span",
75
+ {
76
+ "aria-hidden": true,
77
+ className: "grid size-[18px] shrink-0 place-items-center rounded font-display text-[10px] font-bold text-white",
78
+ style: { background: run.agent.color || "#999" },
79
+ children: glyph
80
+ }
81
+ ),
82
+ /* @__PURE__ */ jsx("span", { className: "w-[68px] shrink-0 truncate font-mono text-[10.5px] font-bold uppercase tracking-[0.14em] text-p-ink", children: run.agent.displayName || run.agent.name }),
83
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-body text-[12.5px] leading-tight text-p-ink", children: run.title }),
84
+ run.lastLog ? /* @__PURE__ */ jsx("span", { className: "hidden min-w-0 max-w-[28%] truncate font-mono text-[10.5px] text-p-ink-3 md:inline", children: run.lastLog }) : null,
85
+ /* @__PURE__ */ jsx("span", { className: "w-12 shrink-0 text-right font-mono text-[10.5px] tabular-nums text-p-ink-3", children: run.startedAt ? isLive ? L.startedAgo(elapsed) : L.duration(elapsed) : "\u2014" }),
86
+ /* @__PURE__ */ jsx("span", { className: "w-14 shrink-0 text-right", children: showCancel ? /* @__PURE__ */ jsxs(
87
+ "button",
88
+ {
89
+ type: "button",
90
+ onClick: (e) => {
91
+ e.stopPropagation();
92
+ onCancel(run.id);
93
+ },
94
+ className: "inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-mono text-[10px] font-bold uppercase tracking-[0.12em] text-p-ink-3 opacity-0 transition-all cursor-pointer group-hover:opacity-100 hover:bg-p-surface hover:text-[#E63946]",
95
+ children: [
96
+ /* @__PURE__ */ jsx(Square, { className: "size-2.5" }),
97
+ L.cancel
98
+ ]
99
+ }
100
+ ) : showRetry ? /* @__PURE__ */ jsxs(
101
+ "button",
102
+ {
103
+ type: "button",
104
+ onClick: (e) => {
105
+ e.stopPropagation();
106
+ onRetry(run.id);
107
+ },
108
+ className: "inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-mono text-[10px] font-bold uppercase tracking-[0.12em] text-p-ink-3 opacity-0 transition-all cursor-pointer group-hover:opacity-100 hover:bg-p-surface hover:text-p-ink",
109
+ children: [
110
+ /* @__PURE__ */ jsx(RotateCcw, { className: "size-2.5" }),
111
+ L.retry
112
+ ]
113
+ }
114
+ ) : null }),
115
+ run.progress !== void 0 && isLive ? /* @__PURE__ */ jsx(
116
+ "span",
117
+ {
118
+ "aria-hidden": true,
119
+ className: "absolute inset-x-0 bottom-0 h-px bg-p-warm",
120
+ children: /* @__PURE__ */ jsx(
121
+ "span",
122
+ {
123
+ className: "block h-full bg-p-accent transition-[width] duration-500",
124
+ style: { width: `${Math.max(0, Math.min(100, run.progress * 100))}%` }
125
+ }
126
+ )
127
+ }
128
+ ) : null
129
+ ]
130
+ }
121
131
  );
122
132
  }
123
133
  export {
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
 
3
3
  /**
4
4
  * Skeleton loaders for orchestrator surfaces — mirror the layout of
@@ -17,12 +17,12 @@ interface SwarmRunDetailSkeletonProps {
17
17
  hideTools?: boolean;
18
18
  className?: string;
19
19
  }
20
- declare function SwarmRunDetailSkeleton({ variant, hideTools, className, }: SwarmRunDetailSkeletonProps): react.JSX.Element;
20
+ declare function SwarmRunDetailSkeleton({ variant, hideTools, className, }: SwarmRunDetailSkeletonProps): react_jsx_runtime.JSX.Element;
21
21
  interface SwarmRunActivityStreamSkeletonProps {
22
22
  /** How many event rows to fake. Default `4`. */
23
23
  count?: number;
24
24
  className?: string;
25
25
  }
26
- declare function SwarmRunActivityStreamSkeleton({ count, className, }: SwarmRunActivityStreamSkeletonProps): react.JSX.Element;
26
+ declare function SwarmRunActivityStreamSkeleton({ count, className, }: SwarmRunActivityStreamSkeletonProps): react_jsx_runtime.JSX.Element;
27
27
 
28
28
  export { SwarmRunActivityStreamSkeleton, type SwarmRunActivityStreamSkeletonProps, SwarmRunDetailSkeleton, type SwarmRunDetailSkeletonProps };
@@ -1,9 +1,10 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
1
2
  function Bone({
2
3
  width,
3
4
  height = 14,
4
5
  rounded
5
6
  }) {
6
- return /* @__PURE__ */ React.createElement(
7
+ return /* @__PURE__ */ jsx(
7
8
  "div",
8
9
  {
9
10
  className: "bg-p-warm animate-pulse",
@@ -20,7 +21,7 @@ function SwarmRunDetailSkeleton({
20
21
  hideTools = false,
21
22
  className
22
23
  }) {
23
- return /* @__PURE__ */ React.createElement(
24
+ return /* @__PURE__ */ jsxs(
24
25
  "section",
25
26
  {
26
27
  "aria-busy": true,
@@ -28,33 +29,67 @@ function SwarmRunDetailSkeleton({
28
29
  className: [
29
30
  "flex h-full min-h-0 flex-col overflow-hidden rounded-2xl border border-p-line bg-p-surface",
30
31
  className || ""
31
- ].join(" ")
32
- },
33
- /* @__PURE__ */ React.createElement("header", { className: "flex shrink-0 items-center gap-2 border-b border-p-line px-4 py-3" }, /* @__PURE__ */ React.createElement("div", { className: "size-6 shrink-0 rounded-md bg-p-warm animate-pulse" }), /* @__PURE__ */ React.createElement(Bone, { width: "9rem", height: 13 }), /* @__PURE__ */ React.createElement("span", { className: "ml-auto inline-flex items-center gap-1" }, /* @__PURE__ */ React.createElement(Bone, { width: 56, height: 20, rounded: 6 }), /* @__PURE__ */ React.createElement("div", { className: "size-7 rounded-md bg-p-warm animate-pulse" }))),
34
- /* @__PURE__ */ React.createElement("div", { className: "grid shrink-0 grid-cols-4 gap-3 border-b border-p-line px-4 py-3" }, Array.from({ length: 4 }, (_, i) => /* @__PURE__ */ React.createElement("div", { key: i, className: "flex flex-col gap-1.5" }, /* @__PURE__ */ React.createElement(Bone, { width: "3.5rem", height: 9 }), /* @__PURE__ */ React.createElement(Bone, { width: "4.5rem", height: 16 })))),
35
- /* @__PURE__ */ React.createElement("div", { className: "shrink-0 border-b border-p-line px-4 py-3" }, /* @__PURE__ */ React.createElement(Bone, { width: "2.5rem", height: 9 }), /* @__PURE__ */ React.createElement("div", { className: "mt-2 flex flex-col gap-1.5" }, /* @__PURE__ */ React.createElement(Bone, { width: "92%", height: 14 }), /* @__PURE__ */ React.createElement(Bone, { width: "74%", height: 14 }))),
36
- variant === "tabs" ? /* @__PURE__ */ React.createElement(TabsBodySkeleton, { hideTools }) : /* @__PURE__ */ React.createElement(FlatBodySkeleton, { hideTools })
32
+ ].join(" "),
33
+ children: [
34
+ /* @__PURE__ */ jsxs("header", { className: "flex shrink-0 items-center gap-2 border-b border-p-line px-4 py-3", children: [
35
+ /* @__PURE__ */ jsx("div", { className: "size-6 shrink-0 rounded-md bg-p-warm animate-pulse" }),
36
+ /* @__PURE__ */ jsx(Bone, { width: "9rem", height: 13 }),
37
+ /* @__PURE__ */ jsxs("span", { className: "ml-auto inline-flex items-center gap-1", children: [
38
+ /* @__PURE__ */ jsx(Bone, { width: 56, height: 20, rounded: 6 }),
39
+ /* @__PURE__ */ jsx("div", { className: "size-7 rounded-md bg-p-warm animate-pulse" })
40
+ ] })
41
+ ] }),
42
+ /* @__PURE__ */ jsx("div", { className: "grid shrink-0 grid-cols-4 gap-3 border-b border-p-line px-4 py-3", children: Array.from({ length: 4 }, (_, i) => /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1.5", children: [
43
+ /* @__PURE__ */ jsx(Bone, { width: "3.5rem", height: 9 }),
44
+ /* @__PURE__ */ jsx(Bone, { width: "4.5rem", height: 16 })
45
+ ] }, i)) }),
46
+ /* @__PURE__ */ jsxs("div", { className: "shrink-0 border-b border-p-line px-4 py-3", children: [
47
+ /* @__PURE__ */ jsx(Bone, { width: "2.5rem", height: 9 }),
48
+ /* @__PURE__ */ jsxs("div", { className: "mt-2 flex flex-col gap-1.5", children: [
49
+ /* @__PURE__ */ jsx(Bone, { width: "92%", height: 14 }),
50
+ /* @__PURE__ */ jsx(Bone, { width: "74%", height: 14 })
51
+ ] })
52
+ ] }),
53
+ variant === "tabs" ? /* @__PURE__ */ jsx(TabsBodySkeleton, { hideTools }) : /* @__PURE__ */ jsx(FlatBodySkeleton, { hideTools })
54
+ ]
55
+ }
37
56
  );
38
57
  }
39
58
  function TabsBodySkeleton({ hideTools }) {
40
59
  const tabCount = hideTools ? 2 : 3;
41
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: "flex shrink-0 items-center gap-1 border-b border-p-line px-3 py-2" }, Array.from({ length: tabCount }, (_, i) => /* @__PURE__ */ React.createElement(Bone, { key: i, width: "5rem", height: 20, rounded: 6 }))), /* @__PURE__ */ React.createElement("div", { className: "min-h-0 flex-1 overflow-hidden px-4 py-4" }, /* @__PURE__ */ React.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ React.createElement(Bone, { width: "88%" }), /* @__PURE__ */ React.createElement(Bone, { width: "76%" }), /* @__PURE__ */ React.createElement(Bone, { width: "92%" }), /* @__PURE__ */ React.createElement(Bone, { width: "60%" }), /* @__PURE__ */ React.createElement(Bone, { width: "80%" }))));
60
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
61
+ /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1 border-b border-p-line px-3 py-2", children: Array.from({ length: tabCount }, (_, i) => /* @__PURE__ */ jsx(Bone, { width: "5rem", height: 20, rounded: 6 }, i)) }),
62
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-hidden px-4 py-4", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
63
+ /* @__PURE__ */ jsx(Bone, { width: "88%" }),
64
+ /* @__PURE__ */ jsx(Bone, { width: "76%" }),
65
+ /* @__PURE__ */ jsx(Bone, { width: "92%" }),
66
+ /* @__PURE__ */ jsx(Bone, { width: "60%" }),
67
+ /* @__PURE__ */ jsx(Bone, { width: "80%" })
68
+ ] }) })
69
+ ] });
42
70
  }
43
71
  function FlatBodySkeleton({ hideTools }) {
44
- return /* @__PURE__ */ React.createElement("div", { className: "min-h-0 flex-1 overflow-y-auto px-4 py-4" }, /* @__PURE__ */ React.createElement(FlatSectionSkeleton, { lines: 3 }), !hideTools ? /* @__PURE__ */ React.createElement(FlatSectionSkeleton, { lines: 2, chips: true }) : null, /* @__PURE__ */ React.createElement(FlatSectionSkeleton, { lines: 4 }));
72
+ return /* @__PURE__ */ jsxs("div", { className: "min-h-0 flex-1 overflow-y-auto px-4 py-4", children: [
73
+ /* @__PURE__ */ jsx(FlatSectionSkeleton, { lines: 3 }),
74
+ !hideTools ? /* @__PURE__ */ jsx(FlatSectionSkeleton, { lines: 2, chips: true }) : null,
75
+ /* @__PURE__ */ jsx(FlatSectionSkeleton, { lines: 4 })
76
+ ] });
45
77
  }
46
78
  function FlatSectionSkeleton({
47
79
  lines,
48
80
  chips
49
81
  }) {
50
82
  const widths = ["88%", "76%", "92%", "60%", "82%"];
51
- return /* @__PURE__ */ React.createElement("div", { className: "border-b border-p-line/60 py-3 last:border-0" }, /* @__PURE__ */ React.createElement(Bone, { width: "3.5rem", height: 9 }), /* @__PURE__ */ React.createElement("div", { className: "mt-2 flex flex-col gap-1.5" }, chips ? /* @__PURE__ */ React.createElement("div", { className: "flex flex-wrap gap-1.5" }, Array.from({ length: lines * 2 }, (_, i) => /* @__PURE__ */ React.createElement(Bone, { key: i, width: "6rem", height: 22, rounded: 8 }))) : Array.from({ length: lines }, (_, i) => /* @__PURE__ */ React.createElement(Bone, { key: i, width: widths[i % widths.length] }))));
83
+ return /* @__PURE__ */ jsxs("div", { className: "border-b border-p-line/60 py-3 last:border-0", children: [
84
+ /* @__PURE__ */ jsx(Bone, { width: "3.5rem", height: 9 }),
85
+ /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-col gap-1.5", children: chips ? /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-1.5", children: Array.from({ length: lines * 2 }, (_, i) => /* @__PURE__ */ jsx(Bone, { width: "6rem", height: 22, rounded: 8 }, i)) }) : Array.from({ length: lines }, (_, i) => /* @__PURE__ */ jsx(Bone, { width: widths[i % widths.length] }, i)) })
86
+ ] });
52
87
  }
53
88
  function SwarmRunActivityStreamSkeleton({
54
89
  count = 4,
55
90
  className
56
91
  }) {
57
- return /* @__PURE__ */ React.createElement(
92
+ return /* @__PURE__ */ jsx(
58
93
  "ol",
59
94
  {
60
95
  "aria-busy": true,
@@ -62,15 +97,29 @@ function SwarmRunActivityStreamSkeleton({
62
97
  className: [
63
98
  "flex flex-col divide-y divide-p-line/60",
64
99
  className || ""
65
- ].join(" ")
66
- },
67
- Array.from({ length: count }, (_, i) => /* @__PURE__ */ React.createElement(ActivityRowSkeleton, { key: i, index: i }))
100
+ ].join(" "),
101
+ children: Array.from({ length: count }, (_, i) => /* @__PURE__ */ jsx(ActivityRowSkeleton, { index: i }, i))
102
+ }
68
103
  );
69
104
  }
70
105
  function ActivityRowSkeleton({ index }) {
71
106
  const bodyWidths = ["88%", "62%", "94%", "70%", "78%"];
72
107
  const showAgent = index % 2 === 0;
73
- return /* @__PURE__ */ React.createElement("li", { className: "grid grid-cols-[80px_24px_minmax(0,1fr)] items-start gap-3 py-3" }, /* @__PURE__ */ React.createElement(Bone, { width: "3.25rem", height: 9 }), /* @__PURE__ */ React.createElement("div", { className: "mt-1 size-5 rounded-full bg-p-warm animate-pulse" }), /* @__PURE__ */ React.createElement("div", { className: "min-w-0 flex flex-col gap-1.5" }, /* @__PURE__ */ React.createElement("div", { className: "flex items-baseline gap-2" }, /* @__PURE__ */ React.createElement(Bone, { width: "4.5rem", height: 9 }), showAgent ? /* @__PURE__ */ React.createElement("span", { className: "inline-flex items-center gap-1" }, /* @__PURE__ */ React.createElement("div", { className: "size-3.5 rounded-[3px] bg-p-warm animate-pulse" }), /* @__PURE__ */ React.createElement(Bone, { width: "4rem", height: 9 })) : null), /* @__PURE__ */ React.createElement(Bone, { width: bodyWidths[index % bodyWidths.length], height: 13 }), index % 3 === 0 ? /* @__PURE__ */ React.createElement(Bone, { width: "55%", height: 13 }) : null));
108
+ return /* @__PURE__ */ jsxs("li", { className: "grid grid-cols-[80px_24px_minmax(0,1fr)] items-start gap-3 py-3", children: [
109
+ /* @__PURE__ */ jsx(Bone, { width: "3.25rem", height: 9 }),
110
+ /* @__PURE__ */ jsx("div", { className: "mt-1 size-5 rounded-full bg-p-warm animate-pulse" }),
111
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex flex-col gap-1.5", children: [
112
+ /* @__PURE__ */ jsxs("div", { className: "flex items-baseline gap-2", children: [
113
+ /* @__PURE__ */ jsx(Bone, { width: "4.5rem", height: 9 }),
114
+ showAgent ? /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1", children: [
115
+ /* @__PURE__ */ jsx("div", { className: "size-3.5 rounded-[3px] bg-p-warm animate-pulse" }),
116
+ /* @__PURE__ */ jsx(Bone, { width: "4rem", height: 9 })
117
+ ] }) : null
118
+ ] }),
119
+ /* @__PURE__ */ jsx(Bone, { width: bodyWidths[index % bodyWidths.length], height: 13 }),
120
+ index % 3 === 0 ? /* @__PURE__ */ jsx(Bone, { width: "55%", height: 13 }) : null
121
+ ] })
122
+ ] });
74
123
  }
75
124
  export {
76
125
  SwarmRunActivityStreamSkeleton,
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
  import { SwarmCounts, SwarmLabels } from './types.js';
4
4
 
@@ -10,6 +10,6 @@ interface SwarmStatusBarProps {
10
10
  labels?: Partial<SwarmLabels>;
11
11
  className?: string;
12
12
  }
13
- declare function SwarmStatusBar({ counts, onCancelAll, onRetryFailed, trailing, labels, className, }: SwarmStatusBarProps): react.JSX.Element;
13
+ declare function SwarmStatusBar({ counts, onCancelAll, onRetryFailed, trailing, labels, className, }: SwarmStatusBarProps): react_jsx_runtime.JSX.Element;
14
14
 
15
15
  export { SwarmStatusBar, type SwarmStatusBarProps };
@@ -1,4 +1,5 @@
1
1
  "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
2
3
  import { RotateCcw, Square } from "lucide-react";
3
4
  import {
4
5
  defaultSwarmLabels
@@ -14,38 +15,48 @@ function SwarmStatusBar({
14
15
  const L = { ...defaultSwarmLabels, ...labels };
15
16
  const showCancelAll = onCancelAll && counts.running + counts.pending > 0;
16
17
  const showRetryFailed = onRetryFailed && counts.failed > 0;
17
- return /* @__PURE__ */ React.createElement(
18
+ return /* @__PURE__ */ jsxs(
18
19
  "div",
19
20
  {
20
21
  className: [
21
22
  "flex flex-wrap items-center gap-3 rounded-xl border border-p-line bg-p-surface px-4 py-2.5",
22
23
  className || ""
23
- ].join(" ")
24
- },
25
- /* @__PURE__ */ React.createElement(Stat, { label: L.running, value: counts.running, tone: "accent", pulse: counts.running > 0 }),
26
- /* @__PURE__ */ React.createElement("span", { className: "h-4 w-px bg-p-line" }),
27
- /* @__PURE__ */ React.createElement(Stat, { label: L.done, value: counts.done, tone: "green" }),
28
- /* @__PURE__ */ React.createElement("span", { className: "h-4 w-px bg-p-line" }),
29
- /* @__PURE__ */ React.createElement(Stat, { label: L.failed, value: counts.failed, tone: "red" }),
30
- /* @__PURE__ */ React.createElement("span", { className: "ml-auto inline-flex items-center gap-1.5" }, showCancelAll ? /* @__PURE__ */ React.createElement(
31
- "button",
32
- {
33
- type: "button",
34
- onClick: onCancelAll,
35
- className: "inline-flex items-center gap-1 rounded-md px-2 py-1 font-mono text-[10.5px] font-bold uppercase tracking-[0.16em] text-p-ink-3 transition-colors cursor-pointer hover:bg-p-warm hover:text-[#E63946]"
36
- },
37
- /* @__PURE__ */ React.createElement(Square, { className: "size-2.5" }),
38
- L.cancelAll
39
- ) : null, showRetryFailed ? /* @__PURE__ */ React.createElement(
40
- "button",
41
- {
42
- type: "button",
43
- onClick: onRetryFailed,
44
- className: "inline-flex items-center gap-1 rounded-md px-2 py-1 font-mono text-[10.5px] font-bold uppercase tracking-[0.16em] text-p-ink-3 transition-colors cursor-pointer hover:bg-p-warm hover:text-p-ink"
45
- },
46
- /* @__PURE__ */ React.createElement(RotateCcw, { className: "size-2.5" }),
47
- L.retryFailed
48
- ) : null, trailing)
24
+ ].join(" "),
25
+ children: [
26
+ /* @__PURE__ */ jsx(Stat, { label: L.running, value: counts.running, tone: "accent", pulse: counts.running > 0 }),
27
+ /* @__PURE__ */ jsx("span", { className: "h-4 w-px bg-p-line" }),
28
+ /* @__PURE__ */ jsx(Stat, { label: L.done, value: counts.done, tone: "green" }),
29
+ /* @__PURE__ */ jsx("span", { className: "h-4 w-px bg-p-line" }),
30
+ /* @__PURE__ */ jsx(Stat, { label: L.failed, value: counts.failed, tone: "red" }),
31
+ /* @__PURE__ */ jsxs("span", { className: "ml-auto inline-flex items-center gap-1.5", children: [
32
+ showCancelAll ? /* @__PURE__ */ jsxs(
33
+ "button",
34
+ {
35
+ type: "button",
36
+ onClick: onCancelAll,
37
+ className: "inline-flex items-center gap-1 rounded-md px-2 py-1 font-mono text-[10.5px] font-bold uppercase tracking-[0.16em] text-p-ink-3 transition-colors cursor-pointer hover:bg-p-warm hover:text-[#E63946]",
38
+ children: [
39
+ /* @__PURE__ */ jsx(Square, { className: "size-2.5" }),
40
+ L.cancelAll
41
+ ]
42
+ }
43
+ ) : null,
44
+ showRetryFailed ? /* @__PURE__ */ jsxs(
45
+ "button",
46
+ {
47
+ type: "button",
48
+ onClick: onRetryFailed,
49
+ className: "inline-flex items-center gap-1 rounded-md px-2 py-1 font-mono text-[10.5px] font-bold uppercase tracking-[0.16em] text-p-ink-3 transition-colors cursor-pointer hover:bg-p-warm hover:text-p-ink",
50
+ children: [
51
+ /* @__PURE__ */ jsx(RotateCcw, { className: "size-2.5" }),
52
+ L.retryFailed
53
+ ]
54
+ }
55
+ ) : null,
56
+ trailing
57
+ ] })
58
+ ]
59
+ }
49
60
  );
50
61
  }
51
62
  function Stat({
@@ -56,23 +67,30 @@ function Stat({
56
67
  }) {
57
68
  const fg = tone === "accent" ? "text-p-accent" : tone === "green" ? "text-p-green" : "text-[#E63946]";
58
69
  const dot = tone === "accent" ? "bg-p-accent" : tone === "green" ? "bg-p-green" : "bg-[#E63946]";
59
- return /* @__PURE__ */ React.createElement("span", { className: "inline-flex items-center gap-1.5" }, /* @__PURE__ */ React.createElement("span", { className: "relative inline-flex size-2 shrink-0" }, pulse ? /* @__PURE__ */ React.createElement(
60
- "span",
61
- {
62
- className: [
63
- "absolute inset-0 rounded-full opacity-60",
64
- dot,
65
- "animate-ping"
66
- ].join(" "),
67
- "aria-hidden": true
68
- }
69
- ) : null, /* @__PURE__ */ React.createElement(
70
- "span",
71
- {
72
- className: ["relative inline-block size-2 rounded-full", dot].join(" "),
73
- "aria-hidden": true
74
- }
75
- )), /* @__PURE__ */ React.createElement("span", { className: ["font-display text-[14px] font-bold tabular-nums", fg].join(" ") }, value), /* @__PURE__ */ React.createElement("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-p-ink-3" }, label));
70
+ return /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1.5", children: [
71
+ /* @__PURE__ */ jsxs("span", { className: "relative inline-flex size-2 shrink-0", children: [
72
+ pulse ? /* @__PURE__ */ jsx(
73
+ "span",
74
+ {
75
+ className: [
76
+ "absolute inset-0 rounded-full opacity-60",
77
+ dot,
78
+ "animate-ping"
79
+ ].join(" "),
80
+ "aria-hidden": true
81
+ }
82
+ ) : null,
83
+ /* @__PURE__ */ jsx(
84
+ "span",
85
+ {
86
+ className: ["relative inline-block size-2 rounded-full", dot].join(" "),
87
+ "aria-hidden": true
88
+ }
89
+ )
90
+ ] }),
91
+ /* @__PURE__ */ jsx("span", { className: ["font-display text-[14px] font-bold tabular-nums", fg].join(" "), children: value }),
92
+ /* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.18em] text-p-ink-3", children: label })
93
+ ] });
76
94
  }
77
95
  export {
78
96
  SwarmStatusBar
@@ -1,4 +1,4 @@
1
- import * as react from 'react';
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { SwarmRunStatus } from './types.js';
3
3
 
4
4
  interface SwarmStatusPillProps {
@@ -7,6 +7,6 @@ interface SwarmStatusPillProps {
7
7
  size?: "sm" | "md";
8
8
  className?: string;
9
9
  }
10
- declare function SwarmStatusPill({ status, label, size, className, }: SwarmStatusPillProps): react.JSX.Element;
10
+ declare function SwarmStatusPill({ status, label, size, className, }: SwarmStatusPillProps): react_jsx_runtime.JSX.Element;
11
11
 
12
12
  export { SwarmStatusPill, type SwarmStatusPillProps };