@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.
- package/dist/index.d.ts +1 -0
- package/dist/orchestrator-document.d.ts +2 -2
- package/dist/orchestrator-document.js +2 -1
- package/dist/plan-detail.d.ts +6 -6
- package/dist/plan-detail.js +214 -156
- package/dist/plan-graph.d.ts +2 -2
- package/dist/plan-graph.js +178 -119
- package/dist/plan-node-detail.d.ts +4 -4
- package/dist/plan-node-detail.js +177 -125
- package/dist/plan-task-detail.d.ts +2 -2
- package/dist/plan-task-detail.js +282 -172
- package/dist/run-kanban-filter-menu.d.ts +3 -2
- package/dist/run-kanban-filter-menu.js +96 -77
- package/dist/run-kanban.d.ts +3 -3
- package/dist/run-kanban.js +93 -79
- package/dist/swarm-agent-badge.d.ts +2 -2
- package/dist/swarm-agent-badge.js +21 -18
- package/dist/swarm-run-activity.d.ts +2 -2
- package/dist/swarm-run-activity.js +150 -95
- package/dist/swarm-run-card.d.ts +2 -2
- package/dist/swarm-run-card.js +76 -55
- package/dist/swarm-run-detail.d.ts +2 -2
- package/dist/swarm-run-detail.js +415 -310
- package/dist/swarm-run-list.d.ts +2 -2
- package/dist/swarm-run-list.js +37 -27
- package/dist/swarm-run-row.d.ts +2 -2
- package/dist/swarm-run-row.js +82 -72
- package/dist/swarm-skeletons.d.ts +3 -3
- package/dist/swarm-skeletons.js +65 -16
- package/dist/swarm-status-bar.d.ts +2 -2
- package/dist/swarm-status-bar.js +62 -44
- package/dist/swarm-status-pill.d.ts +2 -2
- package/dist/swarm-status-pill.js +14 -11
- package/dist/swarm-timeline.d.ts +2 -2
- package/dist/swarm-timeline.js +284 -225
- package/dist/task-workspace-sidebar.d.ts +2 -2
- package/dist/task-workspace-sidebar.js +145 -113
- package/package.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
import { useEffect, useRef, useState } from "react";
|
|
3
4
|
import { createPortal } from "react-dom";
|
|
4
5
|
import { Check, ChevronDown, Filter } from "lucide-react";
|
|
@@ -62,90 +63,108 @@ function RunKanbanFilterMenu({
|
|
|
62
63
|
};
|
|
63
64
|
const setAll = () => onChange(new Set(allKeys));
|
|
64
65
|
const clearAll = () => onChange(/* @__PURE__ */ new Set());
|
|
65
|
-
return /* @__PURE__ */
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
ref: triggerRef,
|
|
69
|
-
type: "button",
|
|
70
|
-
onClick: () => setOpen((v) => !v),
|
|
71
|
-
"aria-haspopup": "menu",
|
|
72
|
-
"aria-expanded": open,
|
|
73
|
-
className: [
|
|
74
|
-
"inline-flex items-center gap-1.5 rounded-md border border-p-line bg-p-surface px-2.5 py-1 font-mono text-[10.5px] font-bold uppercase tracking-[0.16em] text-p-ink-2 transition-colors cursor-pointer hover:border-p-ink-3 hover:text-p-ink",
|
|
75
|
-
open ? "border-p-ink-3 text-p-ink" : "",
|
|
76
|
-
className || ""
|
|
77
|
-
].join(" ")
|
|
78
|
-
},
|
|
79
|
-
/* @__PURE__ */ React.createElement(Filter, { className: "size-3" }),
|
|
80
|
-
/* @__PURE__ */ React.createElement("span", null, triggerLabel),
|
|
81
|
-
/* @__PURE__ */ React.createElement("span", { className: "rounded-full bg-p-warm px-1.5 py-px font-mono text-[9.5px] tabular-nums text-p-ink" }, visibleCount, /* @__PURE__ */ React.createElement("span", { className: "text-p-ink-3" }, "/", allKeys.length)),
|
|
82
|
-
/* @__PURE__ */ React.createElement(
|
|
83
|
-
ChevronDown,
|
|
66
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
67
|
+
/* @__PURE__ */ jsxs(
|
|
68
|
+
"button",
|
|
84
69
|
{
|
|
70
|
+
ref: triggerRef,
|
|
71
|
+
type: "button",
|
|
72
|
+
onClick: () => setOpen((v) => !v),
|
|
73
|
+
"aria-haspopup": "menu",
|
|
74
|
+
"aria-expanded": open,
|
|
85
75
|
className: [
|
|
86
|
-
"
|
|
87
|
-
open ? "
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
{
|
|
103
|
-
type: "button",
|
|
104
|
-
onClick: allOn ? clearAll : setAll,
|
|
105
|
-
className: "font-mono text-[9.5px] font-bold uppercase tracking-[0.16em] text-p-ink-3 transition-colors cursor-pointer hover:text-p-ink"
|
|
106
|
-
},
|
|
107
|
-
allOn ? "clear" : "all"
|
|
108
|
-
)),
|
|
109
|
-
/* @__PURE__ */ React.createElement("ul", { className: "max-h-[280px] overflow-y-auto py-1" }, visibleLanes.map((lane) => {
|
|
110
|
-
const active = value.has(lane.key);
|
|
111
|
-
return /* @__PURE__ */ React.createElement("li", { key: lane.key }, /* @__PURE__ */ React.createElement(
|
|
112
|
-
"button",
|
|
113
|
-
{
|
|
114
|
-
type: "button",
|
|
115
|
-
role: "menuitemcheckbox",
|
|
116
|
-
"aria-checked": active,
|
|
117
|
-
onClick: () => toggle(lane.key),
|
|
118
|
-
className: "flex w-full items-center gap-2 border-0 bg-transparent px-2.5 py-1.5 text-left transition-colors cursor-pointer hover:bg-p-warm"
|
|
119
|
-
},
|
|
120
|
-
/* @__PURE__ */ React.createElement(
|
|
121
|
-
"span",
|
|
122
|
-
{
|
|
123
|
-
"aria-hidden": true,
|
|
124
|
-
className: [
|
|
125
|
-
"grid size-4 shrink-0 place-items-center rounded border",
|
|
126
|
-
active ? "border-p-ink bg-p-ink text-p-bg" : "border-p-line bg-p-surface text-transparent"
|
|
127
|
-
].join(" ")
|
|
128
|
-
},
|
|
129
|
-
/* @__PURE__ */ React.createElement(Check, { className: "size-3" })
|
|
130
|
-
),
|
|
131
|
-
lane.dotClassName ? /* @__PURE__ */ React.createElement(
|
|
132
|
-
"span",
|
|
76
|
+
"inline-flex items-center gap-1.5 rounded-md border border-p-line bg-p-surface px-2.5 py-1 font-mono text-[10.5px] font-bold uppercase tracking-[0.16em] text-p-ink-2 transition-colors cursor-pointer hover:border-p-ink-3 hover:text-p-ink",
|
|
77
|
+
open ? "border-p-ink-3 text-p-ink" : "",
|
|
78
|
+
className || ""
|
|
79
|
+
].join(" "),
|
|
80
|
+
children: [
|
|
81
|
+
/* @__PURE__ */ jsx(Filter, { className: "size-3" }),
|
|
82
|
+
/* @__PURE__ */ jsx("span", { children: triggerLabel }),
|
|
83
|
+
/* @__PURE__ */ jsxs("span", { className: "rounded-full bg-p-warm px-1.5 py-px font-mono text-[9.5px] tabular-nums text-p-ink", children: [
|
|
84
|
+
visibleCount,
|
|
85
|
+
/* @__PURE__ */ jsxs("span", { className: "text-p-ink-3", children: [
|
|
86
|
+
"/",
|
|
87
|
+
allKeys.length
|
|
88
|
+
] })
|
|
89
|
+
] }),
|
|
90
|
+
/* @__PURE__ */ jsx(
|
|
91
|
+
ChevronDown,
|
|
133
92
|
{
|
|
134
|
-
"aria-hidden": true,
|
|
135
93
|
className: [
|
|
136
|
-
"size-
|
|
137
|
-
|
|
138
|
-
active ? "" : "opacity-50"
|
|
94
|
+
"size-3 transition-transform",
|
|
95
|
+
open ? "rotate-180" : ""
|
|
139
96
|
].join(" ")
|
|
140
97
|
}
|
|
141
|
-
)
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
));
|
|
145
|
-
}))
|
|
98
|
+
)
|
|
99
|
+
]
|
|
100
|
+
}
|
|
146
101
|
),
|
|
147
|
-
document
|
|
148
|
-
|
|
102
|
+
open && pos && typeof document !== "undefined" ? createPortal(
|
|
103
|
+
/* @__PURE__ */ jsxs(
|
|
104
|
+
"div",
|
|
105
|
+
{
|
|
106
|
+
id: "run-kanban-filter-menu",
|
|
107
|
+
role: "menu",
|
|
108
|
+
style: { left: pos.left, top: pos.top, width: 220 },
|
|
109
|
+
className: "fixed z-[120] overflow-hidden rounded-md border border-p-line bg-p-surface shadow-[0_12px_40px_-16px_rgba(0,0,0,0.25)]",
|
|
110
|
+
children: [
|
|
111
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between border-b border-p-line px-2.5 py-1.5", children: [
|
|
112
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[9.5px] font-bold uppercase tracking-[0.18em] text-p-ink-3", children: "show lanes" }),
|
|
113
|
+
/* @__PURE__ */ jsx(
|
|
114
|
+
"button",
|
|
115
|
+
{
|
|
116
|
+
type: "button",
|
|
117
|
+
onClick: allOn ? clearAll : setAll,
|
|
118
|
+
className: "font-mono text-[9.5px] font-bold uppercase tracking-[0.16em] text-p-ink-3 transition-colors cursor-pointer hover:text-p-ink",
|
|
119
|
+
children: allOn ? "clear" : "all"
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
] }),
|
|
123
|
+
/* @__PURE__ */ jsx("ul", { className: "max-h-[280px] overflow-y-auto py-1", children: visibleLanes.map((lane) => {
|
|
124
|
+
const active = value.has(lane.key);
|
|
125
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs(
|
|
126
|
+
"button",
|
|
127
|
+
{
|
|
128
|
+
type: "button",
|
|
129
|
+
role: "menuitemcheckbox",
|
|
130
|
+
"aria-checked": active,
|
|
131
|
+
onClick: () => toggle(lane.key),
|
|
132
|
+
className: "flex w-full items-center gap-2 border-0 bg-transparent px-2.5 py-1.5 text-left transition-colors cursor-pointer hover:bg-p-warm",
|
|
133
|
+
children: [
|
|
134
|
+
/* @__PURE__ */ jsx(
|
|
135
|
+
"span",
|
|
136
|
+
{
|
|
137
|
+
"aria-hidden": true,
|
|
138
|
+
className: [
|
|
139
|
+
"grid size-4 shrink-0 place-items-center rounded border",
|
|
140
|
+
active ? "border-p-ink bg-p-ink text-p-bg" : "border-p-line bg-p-surface text-transparent"
|
|
141
|
+
].join(" "),
|
|
142
|
+
children: /* @__PURE__ */ jsx(Check, { className: "size-3" })
|
|
143
|
+
}
|
|
144
|
+
),
|
|
145
|
+
lane.dotClassName ? /* @__PURE__ */ jsx(
|
|
146
|
+
"span",
|
|
147
|
+
{
|
|
148
|
+
"aria-hidden": true,
|
|
149
|
+
className: [
|
|
150
|
+
"size-1.5 shrink-0 rounded-full",
|
|
151
|
+
lane.dotClassName,
|
|
152
|
+
active ? "" : "opacity-50"
|
|
153
|
+
].join(" ")
|
|
154
|
+
}
|
|
155
|
+
) : null,
|
|
156
|
+
/* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate font-body text-[12.5px] text-p-ink", children: lane.label }),
|
|
157
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] tabular-nums text-p-ink-3", children: lane.count })
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
) }, lane.key);
|
|
161
|
+
}) })
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
),
|
|
165
|
+
document.body
|
|
166
|
+
) : null
|
|
167
|
+
] });
|
|
149
168
|
}
|
|
150
169
|
export {
|
|
151
170
|
RunKanbanFilterMenu
|
package/dist/run-kanban.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { RunKanbanLabels } from './plan-types.js';
|
|
4
4
|
import { SwarmRun, SwarmRunStatus, SwarmLabels } from './types.js';
|
|
@@ -55,7 +55,7 @@ interface RunKanbanFiltersProps {
|
|
|
55
55
|
* checkmark dot. Click toggles the lane's visibility in the kanban.
|
|
56
56
|
* Pure UI; the consumer holds the visibility set.
|
|
57
57
|
*/
|
|
58
|
-
declare function RunKanbanFilters({ lanes, value, onChange, hideEmpty, className, }: RunKanbanFiltersProps):
|
|
59
|
-
declare function RunKanban({ runs, groupBy, now, renderAvatar, onCancel, onRetry, onOpen, statusOrder, visibleKeys, labels, swarmLabels, className, }: RunKanbanProps):
|
|
58
|
+
declare function RunKanbanFilters({ lanes, value, onChange, hideEmpty, className, }: RunKanbanFiltersProps): react_jsx_runtime.JSX.Element;
|
|
59
|
+
declare function RunKanban({ runs, groupBy, now, renderAvatar, onCancel, onRetry, onOpen, statusOrder, visibleKeys, labels, swarmLabels, className, }: RunKanbanProps): react_jsx_runtime.JSX.Element;
|
|
60
60
|
|
|
61
61
|
export { RunKanban, RunKanbanFilters, type RunKanbanFiltersProps, type RunKanbanGroupBy, type RunKanbanLaneSummary, type RunKanbanProps, summariseRunKanbanLanes };
|
package/dist/run-kanban.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
import { useMemo } from "react";
|
|
3
4
|
import {
|
|
4
5
|
defaultRunKanbanLabels
|
|
@@ -55,52 +56,56 @@ function RunKanbanFilters({
|
|
|
55
56
|
onChange(next);
|
|
56
57
|
};
|
|
57
58
|
const allVisible = visibleLanes.every((l) => value.has(l.key));
|
|
58
|
-
return /* @__PURE__ */
|
|
59
|
+
return /* @__PURE__ */ jsxs(
|
|
59
60
|
"div",
|
|
60
61
|
{
|
|
61
62
|
className: [
|
|
62
63
|
"flex flex-wrap items-center gap-1.5",
|
|
63
64
|
className || ""
|
|
64
|
-
].join(" ")
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
{
|
|
69
|
-
type: "button",
|
|
70
|
-
onClick: () => onChange(allVisible ? /* @__PURE__ */ new Set() : new Set(visibleLanes.map((l) => l.key))),
|
|
71
|
-
className: "inline-flex items-center gap-1 rounded-full border border-p-line bg-p-surface px-2 py-1 font-mono text-[9.5px] font-bold uppercase tracking-[0.16em] text-p-ink-3 transition-colors cursor-pointer hover:border-p-ink-3 hover:text-p-ink"
|
|
72
|
-
},
|
|
73
|
-
allVisible ? "clear" : "all"
|
|
74
|
-
),
|
|
75
|
-
visibleLanes.map((lane) => {
|
|
76
|
-
const active = value.has(lane.key);
|
|
77
|
-
return /* @__PURE__ */ React.createElement(
|
|
78
|
-
"button",
|
|
79
|
-
{
|
|
80
|
-
key: lane.key,
|
|
81
|
-
type: "button",
|
|
82
|
-
onClick: () => toggle(lane.key),
|
|
83
|
-
"aria-pressed": active,
|
|
84
|
-
className: [
|
|
85
|
-
"inline-flex items-center gap-1.5 rounded-full border px-2 py-1 font-mono text-[10px] font-bold uppercase tracking-[0.14em] transition-colors cursor-pointer",
|
|
86
|
-
active ? "border-p-ink/20 bg-p-warm text-p-ink" : "border-p-line bg-p-surface text-p-ink-3 hover:border-p-ink-3 hover:text-p-ink"
|
|
87
|
-
].join(" ")
|
|
88
|
-
},
|
|
89
|
-
lane.dotClassName ? /* @__PURE__ */ React.createElement(
|
|
90
|
-
"span",
|
|
65
|
+
].join(" "),
|
|
66
|
+
children: [
|
|
67
|
+
/* @__PURE__ */ jsx(
|
|
68
|
+
"button",
|
|
91
69
|
{
|
|
92
|
-
"
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
active ? "" : "opacity-60"
|
|
97
|
-
].join(" ")
|
|
70
|
+
type: "button",
|
|
71
|
+
onClick: () => onChange(allVisible ? /* @__PURE__ */ new Set() : new Set(visibleLanes.map((l) => l.key))),
|
|
72
|
+
className: "inline-flex items-center gap-1 rounded-full border border-p-line bg-p-surface px-2 py-1 font-mono text-[9.5px] font-bold uppercase tracking-[0.16em] text-p-ink-3 transition-colors cursor-pointer hover:border-p-ink-3 hover:text-p-ink",
|
|
73
|
+
children: allVisible ? "clear" : "all"
|
|
98
74
|
}
|
|
99
|
-
)
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
75
|
+
),
|
|
76
|
+
visibleLanes.map((lane) => {
|
|
77
|
+
const active = value.has(lane.key);
|
|
78
|
+
return /* @__PURE__ */ jsxs(
|
|
79
|
+
"button",
|
|
80
|
+
{
|
|
81
|
+
type: "button",
|
|
82
|
+
onClick: () => toggle(lane.key),
|
|
83
|
+
"aria-pressed": active,
|
|
84
|
+
className: [
|
|
85
|
+
"inline-flex items-center gap-1.5 rounded-full border px-2 py-1 font-mono text-[10px] font-bold uppercase tracking-[0.14em] transition-colors cursor-pointer",
|
|
86
|
+
active ? "border-p-ink/20 bg-p-warm text-p-ink" : "border-p-line bg-p-surface text-p-ink-3 hover:border-p-ink-3 hover:text-p-ink"
|
|
87
|
+
].join(" "),
|
|
88
|
+
children: [
|
|
89
|
+
lane.dotClassName ? /* @__PURE__ */ jsx(
|
|
90
|
+
"span",
|
|
91
|
+
{
|
|
92
|
+
"aria-hidden": true,
|
|
93
|
+
className: [
|
|
94
|
+
"size-1.5 rounded-full",
|
|
95
|
+
lane.dotClassName,
|
|
96
|
+
active ? "" : "opacity-60"
|
|
97
|
+
].join(" ")
|
|
98
|
+
}
|
|
99
|
+
) : null,
|
|
100
|
+
/* @__PURE__ */ jsx("span", { children: lane.label }),
|
|
101
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums opacity-70", children: lane.count })
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
lane.key
|
|
105
|
+
);
|
|
106
|
+
})
|
|
107
|
+
]
|
|
108
|
+
}
|
|
104
109
|
);
|
|
105
110
|
}
|
|
106
111
|
const DEFAULT_STATUS_ORDER = [
|
|
@@ -164,7 +169,7 @@ function RunKanban({
|
|
|
164
169
|
}));
|
|
165
170
|
}, [runs, groupBy, statusOrder, L.scheduled, L.pending, L.running, L.done, L.failed, L.cancelled]);
|
|
166
171
|
const renderedLanes = visibleKeys ? lanes.filter((l) => visibleKeys.has(l.key)) : lanes;
|
|
167
|
-
return /* @__PURE__ */
|
|
172
|
+
return /* @__PURE__ */ jsx(
|
|
168
173
|
"div",
|
|
169
174
|
{
|
|
170
175
|
className: [
|
|
@@ -173,22 +178,22 @@ function RunKanban({
|
|
|
173
178
|
// control) and in normal flow (the parent caps the height).
|
|
174
179
|
"flex h-full min-h-0 gap-3 overflow-x-auto pb-2",
|
|
175
180
|
className || ""
|
|
176
|
-
].join(" ")
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
181
|
+
].join(" "),
|
|
182
|
+
children: renderedLanes.map((lane) => /* @__PURE__ */ jsx(
|
|
183
|
+
KanbanLane,
|
|
184
|
+
{
|
|
185
|
+
lane,
|
|
186
|
+
now,
|
|
187
|
+
renderAvatar,
|
|
188
|
+
onCancel,
|
|
189
|
+
onRetry,
|
|
190
|
+
onOpen,
|
|
191
|
+
emptyLabel: L.emptyLane,
|
|
192
|
+
swarmLabels
|
|
193
|
+
},
|
|
194
|
+
lane.key
|
|
195
|
+
))
|
|
196
|
+
}
|
|
192
197
|
);
|
|
193
198
|
}
|
|
194
199
|
function KanbanLane({
|
|
@@ -203,29 +208,38 @@ function KanbanLane({
|
|
|
203
208
|
}) {
|
|
204
209
|
const merged = { ...defaultSwarmLabels, ...swarmLabels };
|
|
205
210
|
const dot = lane.dotClassName ?? (lane.runs[0]?.agent.color ? "" : "bg-p-ink-3");
|
|
206
|
-
return /* @__PURE__ */
|
|
207
|
-
"
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
211
|
+
return /* @__PURE__ */ jsxs("section", { className: "flex h-full min-h-0 w-[280px] shrink-0 flex-col rounded-2xl border border-p-line bg-p-bg/60", children: [
|
|
212
|
+
/* @__PURE__ */ jsxs("header", { className: "flex shrink-0 items-center justify-between gap-2 px-3 py-2", children: [
|
|
213
|
+
/* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-2", children: [
|
|
214
|
+
lane.dotClassName ? /* @__PURE__ */ jsx(
|
|
215
|
+
"span",
|
|
216
|
+
{
|
|
217
|
+
"aria-hidden": true,
|
|
218
|
+
className: [
|
|
219
|
+
"size-1.5 rounded-full",
|
|
220
|
+
dot,
|
|
221
|
+
lane.status === "running" ? "animate-pulse" : ""
|
|
222
|
+
].join(" ")
|
|
223
|
+
}
|
|
224
|
+
) : null,
|
|
225
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] font-bold uppercase tracking-[0.22em] text-p-ink-2", children: lane.label })
|
|
226
|
+
] }),
|
|
227
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] tabular-nums text-p-ink-3", children: String(lane.runs.length).padStart(2, "0") })
|
|
228
|
+
] }),
|
|
229
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto px-2 pb-2", children: lane.runs.length === 0 ? /* @__PURE__ */ jsx("span", { className: "px-2 py-6 text-center font-mono text-[10.5px] uppercase tracking-[0.16em] text-p-ink-3", children: emptyLabel }) : lane.runs.map((r) => /* @__PURE__ */ jsx(
|
|
230
|
+
SwarmRunCard,
|
|
231
|
+
{
|
|
232
|
+
run: r,
|
|
233
|
+
now,
|
|
234
|
+
renderAvatar,
|
|
235
|
+
onCancel,
|
|
236
|
+
onRetry,
|
|
237
|
+
onOpen,
|
|
238
|
+
labels: merged
|
|
239
|
+
},
|
|
240
|
+
r.id
|
|
241
|
+
)) })
|
|
242
|
+
] });
|
|
229
243
|
}
|
|
230
244
|
export {
|
|
231
245
|
RunKanban,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { SwarmAgentRef } from './types.js';
|
|
4
4
|
|
|
@@ -10,6 +10,6 @@ interface SwarmAgentBadgeProps {
|
|
|
10
10
|
showName?: boolean;
|
|
11
11
|
className?: string;
|
|
12
12
|
}
|
|
13
|
-
declare function SwarmAgentBadge({ agent, avatar, size, showName, className, }: SwarmAgentBadgeProps):
|
|
13
|
+
declare function SwarmAgentBadge({ agent, avatar, size, showName, className, }: SwarmAgentBadgeProps): react_jsx_runtime.JSX.Element;
|
|
14
14
|
|
|
15
15
|
export { SwarmAgentBadge, type SwarmAgentBadgeProps };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
function SwarmAgentBadge({
|
|
3
4
|
agent,
|
|
4
5
|
avatar,
|
|
@@ -9,29 +10,31 @@ function SwarmAgentBadge({
|
|
|
9
10
|
const px = size === "sm" ? 18 : 22;
|
|
10
11
|
const txt = size === "sm" ? "text-[11px]" : "text-[12px]";
|
|
11
12
|
const glyph = agent.glyph || (agent.displayName || agent.name).charAt(0).toUpperCase();
|
|
12
|
-
return /* @__PURE__ */
|
|
13
|
+
return /* @__PURE__ */ jsxs(
|
|
13
14
|
"span",
|
|
14
15
|
{
|
|
15
16
|
className: [
|
|
16
17
|
"inline-flex items-center gap-2",
|
|
17
18
|
className || ""
|
|
18
|
-
].join(" ")
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
19
|
+
].join(" "),
|
|
20
|
+
children: [
|
|
21
|
+
avatar ?? /* @__PURE__ */ jsx(
|
|
22
|
+
"span",
|
|
23
|
+
{
|
|
24
|
+
"aria-hidden": true,
|
|
25
|
+
className: "grid shrink-0 place-items-center rounded font-display font-bold text-white",
|
|
26
|
+
style: {
|
|
27
|
+
width: px,
|
|
28
|
+
height: px,
|
|
29
|
+
background: agent.color || "#999",
|
|
30
|
+
fontSize: px <= 18 ? 10 : 11
|
|
31
|
+
},
|
|
32
|
+
children: glyph
|
|
33
|
+
}
|
|
34
|
+
),
|
|
35
|
+
showName ? /* @__PURE__ */ jsx("span", { className: [txt, "font-semibold text-p-ink truncate"].join(" "), children: agent.displayName || agent.name }) : null
|
|
36
|
+
]
|
|
37
|
+
}
|
|
35
38
|
);
|
|
36
39
|
}
|
|
37
40
|
export {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { ReactNode } from 'react';
|
|
3
3
|
import { SwarmRunEvent, SwarmRunActivity, SwarmAgentRef, SwarmRun } from './types.js';
|
|
4
4
|
|
|
@@ -34,6 +34,6 @@ interface SwarmRunActivityStreamProps {
|
|
|
34
34
|
emptyLabel?: string;
|
|
35
35
|
className?: string;
|
|
36
36
|
}
|
|
37
|
-
declare function SwarmRunActivityStream({ events, agents, renderToolCall, renderMarkdown, renderEvent, peek, emptyLabel, className, }: SwarmRunActivityStreamProps):
|
|
37
|
+
declare function SwarmRunActivityStream({ events, agents, renderToolCall, renderMarkdown, renderEvent, peek, emptyLabel, className, }: SwarmRunActivityStreamProps): react_jsx_runtime.JSX.Element;
|
|
38
38
|
|
|
39
39
|
export { type BuildSwarmRunActivityOptions, SwarmRunActivityStream, type SwarmRunActivityStreamProps, buildSwarmRunActivity };
|