@ryanfw/prompt-orchestration-pipeline 0.4.0 → 0.6.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/package.json +1 -1
- package/src/components/JobCard.jsx +1 -1
- package/src/components/JobDetail.jsx +45 -12
- package/src/components/JobTable.jsx +40 -1
- package/src/components/Layout.jsx +146 -22
- package/src/components/PageSubheader.jsx +75 -0
- package/src/components/UploadSeed.jsx +0 -70
- package/src/components/ui/Logo.jsx +16 -0
- package/src/core/config.js +145 -13
- package/src/core/file-io.js +12 -27
- package/src/core/orchestrator.js +92 -78
- package/src/core/pipeline-runner.js +13 -6
- package/src/core/status-writer.js +63 -52
- package/src/core/task-runner.js +61 -1
- package/src/llm/index.js +97 -40
- package/src/pages/Code.jsx +297 -0
- package/src/pages/PipelineDetail.jsx +47 -8
- package/src/pages/PromptPipelineDashboard.jsx +6 -53
- package/src/providers/deepseek.js +17 -1
- package/src/providers/openai.js +1 -1
- package/src/ui/client/adapters/job-adapter.js +26 -2
- package/src/ui/client/hooks/useJobDetailWithUpdates.js +0 -1
- package/src/ui/client/index.css +6 -0
- package/src/ui/client/index.html +1 -1
- package/src/ui/client/main.jsx +2 -0
- package/src/ui/dist/assets/{index-CxcrauYR.js → index-WgJUlSmE.js} +716 -307
- package/src/ui/dist/assets/style-x0V-5m8e.css +62 -0
- package/src/ui/dist/index.html +3 -3
- package/src/ui/job-reader.js +0 -108
- package/src/ui/server.js +54 -0
- package/src/ui/sse-enhancer.js +0 -1
- package/src/ui/transformers/list-transformer.js +32 -12
- package/src/ui/transformers/status-transformer.js +11 -11
- package/src/utils/token-cost-calculator.js +297 -0
- package/src/utils/ui.jsx +4 -4
- package/src/ui/dist/assets/style-D6K_oQ12.css +0 -62
|
@@ -19201,23 +19201,23 @@ function requireClassnames() {
|
|
|
19201
19201
|
}
|
|
19202
19202
|
var classnamesExports = requireClassnames();
|
|
19203
19203
|
const y = /* @__PURE__ */ getDefaultExportFromCjs(classnamesExports);
|
|
19204
|
-
const o$
|
|
19204
|
+
const o$7 = { asChild: { type: "boolean" } };
|
|
19205
19205
|
const t$7 = { width: { type: "string", className: "rt-r-w", customProperties: ["--width"], responsive: true }, minWidth: { type: "string", className: "rt-r-min-w", customProperties: ["--min-width"], responsive: true }, maxWidth: { type: "string", className: "rt-r-max-w", customProperties: ["--max-width"], responsive: true } };
|
|
19206
|
-
const e$
|
|
19207
|
-
const o$
|
|
19208
|
-
const o$
|
|
19209
|
-
const e$
|
|
19210
|
-
const e$
|
|
19211
|
-
const e$
|
|
19212
|
-
const e$
|
|
19213
|
-
const e$
|
|
19214
|
-
const m$6 = ["h1", "h2", "h3", "h4", "h5", "h6"], a$9 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"], n$7 = { as: { type: "enum", values: m$6, default: "h1" }, ...o$
|
|
19215
|
-
const e$
|
|
19216
|
-
function e$
|
|
19206
|
+
const e$f = { height: { type: "string", className: "rt-r-h", customProperties: ["--height"], responsive: true }, minHeight: { type: "string", className: "rt-r-min-h", customProperties: ["--min-height"], responsive: true }, maxHeight: { type: "string", className: "rt-r-max-h", customProperties: ["--max-height"], responsive: true } };
|
|
19207
|
+
const o$6 = ["gray", "gold", "bronze", "brown", "yellow", "amber", "orange", "tomato", "red", "ruby", "crimson", "pink", "plum", "purple", "violet", "iris", "indigo", "blue", "cyan", "teal", "jade", "green", "grass", "lime", "mint", "sky"], r$c = { color: { type: "enum", values: o$6, default: void 0 } }, s$5 = { color: { type: "enum", values: o$6, default: "" } };
|
|
19208
|
+
const o$5 = { highContrast: { type: "boolean", className: "rt-high-contrast", default: void 0 } };
|
|
19209
|
+
const e$e = ["normal", "start", "end", "both"], r$b = { trim: { type: "enum", className: "rt-r-lt", values: e$e, responsive: true } };
|
|
19210
|
+
const e$d = ["left", "center", "right"], t$6 = { align: { type: "enum", className: "rt-r-ta", values: e$d, responsive: true } };
|
|
19211
|
+
const e$c = ["wrap", "nowrap", "pretty", "balance"], r$a = { wrap: { type: "enum", className: "rt-r-tw", values: e$c, responsive: true } };
|
|
19212
|
+
const e$b = { truncate: { type: "boolean", className: "rt-truncate" } };
|
|
19213
|
+
const e$a = ["light", "regular", "medium", "bold"], t$5 = { weight: { type: "enum", className: "rt-r-weight", values: e$a, responsive: true } };
|
|
19214
|
+
const m$6 = ["h1", "h2", "h3", "h4", "h5", "h6"], a$9 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"], n$7 = { as: { type: "enum", values: m$6, default: "h1" }, ...o$7, size: { type: "enum", className: "rt-r-size", values: a$9, default: "6", responsive: true }, ...t$5, ...t$6, ...r$b, ...e$b, ...r$a, ...r$c, ...o$5 };
|
|
19215
|
+
const e$9 = ["initial", "xs", "sm", "md", "lg", "xl"];
|
|
19216
|
+
function e$8(n2, r2) {
|
|
19217
19217
|
return Object.prototype.hasOwnProperty.call(n2, r2);
|
|
19218
19218
|
}
|
|
19219
|
-
function i$
|
|
19220
|
-
return typeof e2 == "object" && Object.keys(e2).some((s2) => e$
|
|
19219
|
+
function i$4(e2) {
|
|
19220
|
+
return typeof e2 == "object" && Object.keys(e2).some((s2) => e$9.includes(s2));
|
|
19221
19221
|
}
|
|
19222
19222
|
function R$2({ className: r2, customProperties: n2, ...t2 }) {
|
|
19223
19223
|
const p2 = g({ allowArbitraryValues: true, className: r2, ...t2 }), e2 = m$5({ customProperties: n2, ...t2 });
|
|
@@ -19227,10 +19227,10 @@ function g({ allowArbitraryValues: r2, value: n2, className: t2, propValues: p2,
|
|
|
19227
19227
|
const s2 = [];
|
|
19228
19228
|
if (n2) {
|
|
19229
19229
|
if (typeof n2 == "string" && p2.includes(n2)) return l$3(t2, n2, e2);
|
|
19230
|
-
if (i$
|
|
19230
|
+
if (i$4(n2)) {
|
|
19231
19231
|
const i2 = n2;
|
|
19232
19232
|
for (const o2 in i2) {
|
|
19233
|
-
if (!e$
|
|
19233
|
+
if (!e$8(i2, o2) || !e$9.includes(o2)) continue;
|
|
19234
19234
|
const u2 = i2[o2];
|
|
19235
19235
|
if (u2 !== void 0) {
|
|
19236
19236
|
if (p2.includes(u2)) {
|
|
@@ -19254,10 +19254,10 @@ function l$3(r2, n2, t2) {
|
|
|
19254
19254
|
function m$5({ customProperties: r2, value: n2, propValues: t2, parseValue: p2 = (e2) => e2 }) {
|
|
19255
19255
|
let e2 = {};
|
|
19256
19256
|
if (!(!n2 || typeof n2 == "string" && t2.includes(n2))) {
|
|
19257
|
-
if (typeof n2 == "string" && (e2 = Object.fromEntries(r2.map((s2) => [s2, n2]))), i$
|
|
19257
|
+
if (typeof n2 == "string" && (e2 = Object.fromEntries(r2.map((s2) => [s2, n2]))), i$4(n2)) {
|
|
19258
19258
|
const s2 = n2;
|
|
19259
19259
|
for (const i2 in s2) {
|
|
19260
|
-
if (!e$
|
|
19260
|
+
if (!e$8(s2, i2) || !e$9.includes(i2)) continue;
|
|
19261
19261
|
const o2 = s2[i2];
|
|
19262
19262
|
if (!t2.includes(o2)) for (const u2 of r2) e2 = { [i2 === "initial" ? u2 : `${u2}-${i2}`]: o2, ...e2 };
|
|
19263
19263
|
}
|
|
@@ -19283,11 +19283,11 @@ function v(r2, ...m2) {
|
|
|
19283
19283
|
for (const n2 in f2) {
|
|
19284
19284
|
let s2 = a2[n2];
|
|
19285
19285
|
const e2 = f2[n2];
|
|
19286
|
-
if (e2.default !== void 0 && s2 === void 0 && (s2 = e2.default), e2.type === "enum" && ![e2.default, ...e2.values].includes(s2) && !i$
|
|
19286
|
+
if (e2.default !== void 0 && s2 === void 0 && (s2 = e2.default), e2.type === "enum" && ![e2.default, ...e2.values].includes(s2) && !i$4(s2) && (s2 = e2.default), a2[n2] = s2, "className" in e2 && e2.className) {
|
|
19287
19287
|
delete a2[n2];
|
|
19288
19288
|
const u2 = "responsive" in e2;
|
|
19289
|
-
if (!s2 || i$
|
|
19290
|
-
if (i$
|
|
19289
|
+
if (!s2 || i$4(s2) && !u2) continue;
|
|
19290
|
+
if (i$4(s2) && (e2.default !== void 0 && s2.initial === void 0 && (s2.initial = e2.default), e2.type === "enum" && ([e2.default, ...e2.values].includes(s2.initial) || (s2.initial = e2.default))), e2.type === "enum") {
|
|
19291
19291
|
const i2 = g({ allowArbitraryValues: false, value: s2, className: e2.className, propValues: e2.values, parseValue: e2.parseValue });
|
|
19292
19292
|
t2 = y(t2, i2);
|
|
19293
19293
|
continue;
|
|
@@ -19305,18 +19305,18 @@ function v(r2, ...m2) {
|
|
|
19305
19305
|
}
|
|
19306
19306
|
return a2.className = y(t2, r2.className), a2.style = l$2(l2, r2.style), a2;
|
|
19307
19307
|
}
|
|
19308
|
-
const e$
|
|
19309
|
-
const r$
|
|
19310
|
-
const { children: e2, className: s2, asChild: a2, as: n2 = "h1", color: i2, ...m2 } = v(p2, n$7, r$
|
|
19308
|
+
const e$7 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9"], r$9 = { m: { type: "enum | string", values: e$7, responsive: true, className: "rt-r-m", customProperties: ["--m"] }, mx: { type: "enum | string", values: e$7, responsive: true, className: "rt-r-mx", customProperties: ["--ml", "--mr"] }, my: { type: "enum | string", values: e$7, responsive: true, className: "rt-r-my", customProperties: ["--mt", "--mb"] }, mt: { type: "enum | string", values: e$7, responsive: true, className: "rt-r-mt", customProperties: ["--mt"] }, mr: { type: "enum | string", values: e$7, responsive: true, className: "rt-r-mr", customProperties: ["--mr"] }, mb: { type: "enum | string", values: e$7, responsive: true, className: "rt-r-mb", customProperties: ["--mb"] }, ml: { type: "enum | string", values: e$7, responsive: true, className: "rt-r-ml", customProperties: ["--ml"] } };
|
|
19309
|
+
const r$8 = reactExports.forwardRef((p2, t2) => {
|
|
19310
|
+
const { children: e2, className: s2, asChild: a2, as: n2 = "h1", color: i2, ...m2 } = v(p2, n$7, r$9);
|
|
19311
19311
|
return reactExports.createElement(Slot, { "data-accent-color": i2, ...m2, ref: t2, className: y("rt-Heading", s2) }, a2 ? e2 : reactExports.createElement(n2, null, e2));
|
|
19312
19312
|
});
|
|
19313
|
-
r$
|
|
19314
|
-
const m$4 = ["span", "div", "label", "p"], a$8 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"], n$6 = { as: { type: "enum", values: m$4, default: "span" }, ...o$
|
|
19315
|
-
const p$
|
|
19316
|
-
const { children: e2, className: s2, asChild: m2, as: a2 = "span", color: n2, ...P2 } = v(t2, n$6, r$
|
|
19313
|
+
r$8.displayName = "Heading";
|
|
19314
|
+
const m$4 = ["span", "div", "label", "p"], a$8 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"], n$6 = { as: { type: "enum", values: m$4, default: "span" }, ...o$7, size: { type: "enum", className: "rt-r-size", values: a$8, responsive: true }, ...t$5, ...t$6, ...r$b, ...e$b, ...r$a, ...r$c, ...o$5 };
|
|
19315
|
+
const p$b = reactExports.forwardRef((t2, r2) => {
|
|
19316
|
+
const { children: e2, className: s2, asChild: m2, as: a2 = "span", color: n2, ...P2 } = v(t2, n$6, r$9);
|
|
19317
19317
|
return reactExports.createElement(Slot, { "data-accent-color": n2, ...P2, ref: r2, className: y("rt-Text", s2) }, m2 ? e2 : reactExports.createElement(a2, null, e2));
|
|
19318
19318
|
});
|
|
19319
|
-
p$
|
|
19319
|
+
p$b.displayName = "Text";
|
|
19320
19320
|
function a$7(e2) {
|
|
19321
19321
|
switch (e2) {
|
|
19322
19322
|
case "tomato":
|
|
@@ -19353,7 +19353,7 @@ function a$7(e2) {
|
|
|
19353
19353
|
return "gray";
|
|
19354
19354
|
}
|
|
19355
19355
|
}
|
|
19356
|
-
const e$
|
|
19356
|
+
const e$6 = ["none", "small", "medium", "large", "full"], r$7 = { radius: { type: "enum", values: e$6, default: void 0 } };
|
|
19357
19357
|
const s$4 = { hasBackground: { default: true }, appearance: { default: "inherit" }, accentColor: { default: "indigo" }, grayColor: { default: "auto" }, panelBackground: { default: "translucent" }, radius: { default: "medium" }, scaling: { default: "100%" } };
|
|
19358
19358
|
const d$3 = () => {
|
|
19359
19359
|
}, P$2 = reactExports.createContext(void 0);
|
|
@@ -19385,42 +19385,42 @@ function d$2(i2, e2) {
|
|
|
19385
19385
|
const t2 = reactExports.Children.only(c2);
|
|
19386
19386
|
return reactExports.cloneElement(t2, { children: typeof e2 == "function" ? e2(t2.props.children) : e2 });
|
|
19387
19387
|
}
|
|
19388
|
-
const e$
|
|
19389
|
-
const s$3 = ["div", "span"], o$
|
|
19390
|
-
const e$
|
|
19391
|
-
const r$
|
|
19392
|
-
const p$
|
|
19393
|
-
const { className: t2, asChild: e2, as: m2 = "div", ...a2 } = v(r2, p$
|
|
19394
|
-
return reactExports.createElement(e2 ? e$
|
|
19388
|
+
const e$5 = Slot;
|
|
19389
|
+
const s$3 = ["div", "span"], o$4 = ["none", "inline", "inline-block", "block", "contents"], p$a = { as: { type: "enum", values: s$3, default: "div" }, ...o$7, display: { type: "enum", className: "rt-r-display", values: o$4, responsive: true } };
|
|
19390
|
+
const e$4 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], p$9 = { p: { type: "enum | string", className: "rt-r-p", customProperties: ["--p"], values: e$4, responsive: true }, px: { type: "enum | string", className: "rt-r-px", customProperties: ["--pl", "--pr"], values: e$4, responsive: true }, py: { type: "enum | string", className: "rt-r-py", customProperties: ["--pt", "--pb"], values: e$4, responsive: true }, pt: { type: "enum | string", className: "rt-r-pt", customProperties: ["--pt"], values: e$4, responsive: true }, pr: { type: "enum | string", className: "rt-r-pr", customProperties: ["--pr"], values: e$4, responsive: true }, pb: { type: "enum | string", className: "rt-r-pb", customProperties: ["--pb"], values: e$4, responsive: true }, pl: { type: "enum | string", className: "rt-r-pl", customProperties: ["--pl"], values: e$4, responsive: true } };
|
|
19391
|
+
const r$6 = ["visible", "hidden", "clip", "scroll", "auto"], i$3 = ["static", "relative", "absolute", "fixed", "sticky"], e$3 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9"], p$8 = ["0", "1"], n$5 = ["0", "1"], u$3 = { ...p$9, ...t$7, ...e$f, position: { type: "enum", className: "rt-r-position", values: i$3, responsive: true }, inset: { type: "enum | string", className: "rt-r-inset", customProperties: ["--inset"], values: e$3, responsive: true }, top: { type: "enum | string", className: "rt-r-top", customProperties: ["--top"], values: e$3, responsive: true }, right: { type: "enum | string", className: "rt-r-right", customProperties: ["--right"], values: e$3, responsive: true }, bottom: { type: "enum | string", className: "rt-r-bottom", customProperties: ["--bottom"], values: e$3, responsive: true }, left: { type: "enum | string", className: "rt-r-left", customProperties: ["--left"], values: e$3, responsive: true }, overflow: { type: "enum", className: "rt-r-overflow", values: r$6, responsive: true }, overflowX: { type: "enum", className: "rt-r-ox", values: r$6, responsive: true }, overflowY: { type: "enum", className: "rt-r-oy", values: r$6, responsive: true }, flexBasis: { type: "string", className: "rt-r-fb", customProperties: ["--flex-basis"], responsive: true }, flexShrink: { type: "enum | string", className: "rt-r-fs", customProperties: ["--flex-shrink"], values: p$8, responsive: true }, flexGrow: { type: "enum | string", className: "rt-r-fg", customProperties: ["--flex-grow"], values: n$5, responsive: true }, gridArea: { type: "string", className: "rt-r-ga", customProperties: ["--grid-area"], responsive: true }, gridColumn: { type: "string", className: "rt-r-gc", customProperties: ["--grid-column"], responsive: true }, gridColumnStart: { type: "string", className: "rt-r-gcs", customProperties: ["--grid-column-start"], responsive: true }, gridColumnEnd: { type: "string", className: "rt-r-gce", customProperties: ["--grid-column-end"], responsive: true }, gridRow: { type: "string", className: "rt-r-gr", customProperties: ["--grid-row"], responsive: true }, gridRowStart: { type: "string", className: "rt-r-grs", customProperties: ["--grid-row-start"], responsive: true }, gridRowEnd: { type: "string", className: "rt-r-gre", customProperties: ["--grid-row-end"], responsive: true } };
|
|
19392
|
+
const p$7 = reactExports.forwardRef((r2, s2) => {
|
|
19393
|
+
const { className: t2, asChild: e2, as: m2 = "div", ...a2 } = v(r2, p$a, u$3, r$9);
|
|
19394
|
+
return reactExports.createElement(e2 ? e$5 : m2, { ...a2, ref: s2, className: y("rt-Box", t2) });
|
|
19395
19395
|
});
|
|
19396
|
-
p$
|
|
19397
|
-
const t$4 = ["1", "2", "3", "4"], a$6 = ["classic", "solid", "soft", "surface", "outline", "ghost"], i$
|
|
19398
|
-
const e$
|
|
19399
|
-
const t$3 = ["div", "span"], p$
|
|
19400
|
-
function f$
|
|
19396
|
+
p$7.displayName = "Box";
|
|
19397
|
+
const t$4 = ["1", "2", "3", "4"], a$6 = ["classic", "solid", "soft", "surface", "outline", "ghost"], i$2 = { ...o$7, size: { type: "enum", className: "rt-r-size", values: t$4, default: "2", responsive: true }, variant: { type: "enum", className: "rt-variant", values: a$6, default: "solid" }, ...s$5, ...o$5, ...r$7, loading: { type: "boolean", className: "rt-loading", default: false } };
|
|
19398
|
+
const e$2 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], p$6 = { gap: { type: "enum | string", className: "rt-r-gap", customProperties: ["--gap"], values: e$2, responsive: true }, gapX: { type: "enum | string", className: "rt-r-cg", customProperties: ["--column-gap"], values: e$2, responsive: true }, gapY: { type: "enum | string", className: "rt-r-rg", customProperties: ["--row-gap"], values: e$2, responsive: true } };
|
|
19399
|
+
const t$3 = ["div", "span"], p$5 = ["none", "inline-flex", "flex"], a$5 = ["row", "column", "row-reverse", "column-reverse"], o$3 = ["start", "center", "end", "baseline", "stretch"], n$4 = ["start", "center", "end", "between"], l$1 = ["nowrap", "wrap", "wrap-reverse"], u$2 = { as: { type: "enum", values: t$3, default: "div" }, ...o$7, display: { type: "enum", className: "rt-r-display", values: p$5, responsive: true }, direction: { type: "enum", className: "rt-r-fd", values: a$5, responsive: true }, align: { type: "enum", className: "rt-r-ai", values: o$3, responsive: true }, justify: { type: "enum", className: "rt-r-jc", values: n$4, parseValue: f$5, responsive: true }, wrap: { type: "enum", className: "rt-r-fw", values: l$1, responsive: true }, ...p$6 };
|
|
19400
|
+
function f$5(e2) {
|
|
19401
19401
|
return e2 === "between" ? "space-between" : e2;
|
|
19402
19402
|
}
|
|
19403
|
-
const p$
|
|
19404
|
-
const { className: s2, asChild: t2, as: m2 = "div", ...l2 } = v(r2, u$2, u$3, r$
|
|
19405
|
-
return reactExports.createElement(t2 ? e$
|
|
19403
|
+
const p$4 = reactExports.forwardRef((r2, e2) => {
|
|
19404
|
+
const { className: s2, asChild: t2, as: m2 = "div", ...l2 } = v(r2, u$2, u$3, r$9);
|
|
19405
|
+
return reactExports.createElement(t2 ? e$5 : m2, { ...l2, ref: e2, className: y("rt-Flex", s2) });
|
|
19406
19406
|
});
|
|
19407
|
-
p$
|
|
19408
|
-
const e$
|
|
19407
|
+
p$4.displayName = "Flex";
|
|
19408
|
+
const e$1 = ["1", "2", "3"], s$2 = { size: { type: "enum", className: "rt-r-size", values: e$1, default: "2", responsive: true }, loading: { type: "boolean", default: true } };
|
|
19409
19409
|
const s$1 = reactExports.forwardRef((i2, o2) => {
|
|
19410
|
-
const { className: a2, children: e2, loading: t2, ...m2 } = v(i2, s$2, r$
|
|
19410
|
+
const { className: a2, children: e2, loading: t2, ...m2 } = v(i2, s$2, r$9);
|
|
19411
19411
|
if (!t2) return e2;
|
|
19412
19412
|
const r2 = reactExports.createElement("span", { ...m2, ref: o2, className: y("rt-Spinner", a2) }, reactExports.createElement("span", { className: "rt-SpinnerLeaf" }), reactExports.createElement("span", { className: "rt-SpinnerLeaf" }), reactExports.createElement("span", { className: "rt-SpinnerLeaf" }), reactExports.createElement("span", { className: "rt-SpinnerLeaf" }), reactExports.createElement("span", { className: "rt-SpinnerLeaf" }), reactExports.createElement("span", { className: "rt-SpinnerLeaf" }), reactExports.createElement("span", { className: "rt-SpinnerLeaf" }), reactExports.createElement("span", { className: "rt-SpinnerLeaf" }));
|
|
19413
|
-
return e2 === void 0 ? r2 : reactExports.createElement(p$
|
|
19413
|
+
return e2 === void 0 ? r2 : reactExports.createElement(p$4, { asChild: true, position: "relative", align: "center", justify: "center" }, reactExports.createElement("span", null, reactExports.createElement("span", { "aria-hidden": true, style: { display: "contents", visibility: "hidden" }, inert: void 0 }, e2), reactExports.createElement(p$4, { asChild: true, align: "center", justify: "center", position: "absolute", inset: "0" }, reactExports.createElement("span", null, r2))));
|
|
19414
19414
|
});
|
|
19415
19415
|
s$1.displayName = "Spinner";
|
|
19416
19416
|
const d$1 = Root$3;
|
|
19417
19417
|
function s(e2, t2) {
|
|
19418
19418
|
if (e2 !== void 0) return typeof e2 == "string" ? t2(e2) : Object.fromEntries(Object.entries(e2).map(([n2, o2]) => [n2, t2(o2)]));
|
|
19419
19419
|
}
|
|
19420
|
-
function p$
|
|
19420
|
+
function p$3(e2) {
|
|
19421
19421
|
return e2 === "3" ? "3" : "2";
|
|
19422
19422
|
}
|
|
19423
|
-
function r$
|
|
19423
|
+
function r$5(e2) {
|
|
19424
19424
|
switch (e2) {
|
|
19425
19425
|
case "1":
|
|
19426
19426
|
return "1";
|
|
@@ -19432,15 +19432,15 @@ function r$6(e2) {
|
|
|
19432
19432
|
}
|
|
19433
19433
|
}
|
|
19434
19434
|
const n$3 = reactExports.forwardRef((t2, p2) => {
|
|
19435
|
-
const { size: i2 = i$
|
|
19436
|
-
return reactExports.createElement(f2, { "data-disabled": s$22 || void 0, "data-accent-color": d2, "data-radius": l2, ...u2, ref: p2, className: y("rt-reset", "rt-BaseButton", a2), disabled: s$22 }, t2.loading ? reactExports.createElement(reactExports.Fragment, null, reactExports.createElement("span", { style: { display: "contents", visibility: "hidden" }, "aria-hidden": true }, e2), reactExports.createElement(d$1, null, e2), reactExports.createElement(p$
|
|
19435
|
+
const { size: i2 = i$2.size.default } = t2, { className: a2, children: e2, asChild: m2, color: d2, radius: l2, disabled: s$22 = t2.loading, ...u2 } = v(t2, i$2, r$9), f2 = m2 ? Slot : "button";
|
|
19436
|
+
return reactExports.createElement(f2, { "data-disabled": s$22 || void 0, "data-accent-color": d2, "data-radius": l2, ...u2, ref: p2, className: y("rt-reset", "rt-BaseButton", a2), disabled: s$22 }, t2.loading ? reactExports.createElement(reactExports.Fragment, null, reactExports.createElement("span", { style: { display: "contents", visibility: "hidden" }, "aria-hidden": true }, e2), reactExports.createElement(d$1, null, e2), reactExports.createElement(p$4, { asChild: true, align: "center", justify: "center", position: "absolute", inset: "0" }, reactExports.createElement("span", null, reactExports.createElement(s$1, { size: s(i2, r$5) })))) : e2);
|
|
19437
19437
|
});
|
|
19438
19438
|
n$3.displayName = "BaseButton";
|
|
19439
|
-
const o$
|
|
19440
|
-
o$
|
|
19441
|
-
const t$2 = ["1", "2", "3"], r$
|
|
19439
|
+
const o$2 = reactExports.forwardRef(({ className: e2, ...n2 }, r2) => reactExports.createElement(n$3, { ...n2, ref: r2, className: y("rt-Button", e2) }));
|
|
19440
|
+
o$2.displayName = "Button";
|
|
19441
|
+
const t$2 = ["1", "2", "3"], r$4 = ["soft", "surface", "outline"], a$4 = { ...o$7, size: { type: "enum", className: "rt-r-size", values: t$2, default: "2", responsive: true }, variant: { type: "enum", className: "rt-variant", values: r$4, default: "soft" }, ...s$5, ...o$5 };
|
|
19442
19442
|
const a$3 = reactExports.createContext({}), n$2 = reactExports.forwardRef((t2, l2) => {
|
|
19443
|
-
const { size: e2 = a$4.size.default } = t2, { asChild: r2, children: C, className: i2, color: c2, ...f2 } = v(t2, a$4, r$
|
|
19443
|
+
const { size: e2 = a$4.size.default } = t2, { asChild: r2, children: C, className: i2, color: c2, ...f2 } = v(t2, a$4, r$9), P2 = r2 ? Slot : "div";
|
|
19444
19444
|
return reactExports.createElement(P2, { "data-accent-color": c2, ...f2, className: y("rt-CalloutRoot", i2), ref: l2 }, reactExports.createElement(a$3.Provider, { value: reactExports.useMemo(() => ({ size: e2 }), [e2]) }, C));
|
|
19445
19445
|
});
|
|
19446
19446
|
n$2.displayName = "Callout.Root";
|
|
@@ -19448,21 +19448,21 @@ const m$3 = reactExports.forwardRef(({ className: t2, ...l2 }, e2) => reactExpor
|
|
|
19448
19448
|
m$3.displayName = "Callout.Icon";
|
|
19449
19449
|
const u$1 = reactExports.forwardRef(({ className: t2, ...l2 }, e2) => {
|
|
19450
19450
|
const { size: r2 } = reactExports.useContext(a$3);
|
|
19451
|
-
return reactExports.createElement(p$
|
|
19451
|
+
return reactExports.createElement(p$b, { as: "p", size: s(r2, p$3), ...l2, asChild: false, ref: e2, className: y("rt-CalloutText", t2) });
|
|
19452
19452
|
});
|
|
19453
19453
|
u$1.displayName = "Callout.Text";
|
|
19454
|
-
const
|
|
19455
|
-
const
|
|
19456
|
-
const { asChild:
|
|
19457
|
-
return reactExports.createElement(
|
|
19454
|
+
const a$2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"], i$1 = ["solid", "soft", "outline", "ghost"], f$4 = { ...o$7, size: { type: "enum", className: "rt-r-size", values: a$2, responsive: true }, variant: { type: "enum", className: "rt-variant", values: i$1, default: "soft" }, ...t$5, ...s$5, ...o$5, ...e$b, ...r$a };
|
|
19455
|
+
const p$2 = reactExports.forwardRef((o2, t2) => {
|
|
19456
|
+
const { asChild: s2, className: m2, color: e2, ...d2 } = v(o2, f$4, r$9), n2 = o2.variant === "ghost" ? e2 || void 0 : e2, a2 = s2 ? Slot : "code";
|
|
19457
|
+
return reactExports.createElement(a2, { "data-accent-color": n2, ...d2, ref: t2, className: y("rt-reset", "rt-Code", m2) });
|
|
19458
19458
|
});
|
|
19459
|
-
|
|
19460
|
-
const r$3 = ["1", "2", "3"], t$1 = { ...o$
|
|
19459
|
+
p$2.displayName = "Code";
|
|
19460
|
+
const r$3 = ["1", "2", "3"], t$1 = { ...o$7, size: { values: r$3, default: "1" }, ...r$7, scrollbars: { default: "both" } };
|
|
19461
19461
|
function a$1(r2) {
|
|
19462
19462
|
const { m: t2, mx: m2, my: o2, mt: p2, mr: n2, mb: s2, ml: e2, ...i2 } = r2;
|
|
19463
19463
|
return { m: t2, mx: m2, my: o2, mt: p2, mr: n2, mb: s2, ml: e2, rest: i2 };
|
|
19464
19464
|
}
|
|
19465
|
-
const r$2 = r$
|
|
19465
|
+
const r$2 = r$9.m.values;
|
|
19466
19466
|
function S(s2) {
|
|
19467
19467
|
const [e2, t2] = R$2({ className: "rt-r-m", customProperties: ["--margin"], propValues: r$2, value: s2.m }), [a2, o2] = R$2({ className: "rt-r-mx", customProperties: ["--margin-left", "--margin-right"], propValues: r$2, value: s2.mx }), [l2, i2] = R$2({ className: "rt-r-my", customProperties: ["--margin-top", "--margin-bottom"], propValues: r$2, value: s2.my }), [p2, u2] = R$2({ className: "rt-r-mt", customProperties: ["--margin-top"], propValues: r$2, value: s2.mt }), [n2, c2] = R$2({ className: "rt-r-mr", customProperties: ["--margin-right"], propValues: r$2, value: s2.mr }), [g2, P2] = R$2({ className: "rt-r-mb", customProperties: ["--margin-bottom"], propValues: r$2, value: s2.mb }), [N2, C] = R$2({ className: "rt-r-ml", customProperties: ["--margin-left"], propValues: r$2, value: s2.ml });
|
|
19468
19468
|
return [y(e2, a2, l2, p2, n2, g2, N2), l$2(t2, o2, i2, u2, c2, P2, C)];
|
|
@@ -19472,23 +19472,23 @@ const c$1 = reactExports.forwardRef((n2, S$1) => {
|
|
|
19472
19472
|
return reactExports.createElement(Root, { type: t2, scrollHideDelay: N2, className: y("rt-ScrollAreaRoot", u2, y$1), style: l$2(A2, v2), asChild: a2 }, d$2({ asChild: a2, children: d2 }, (g$1) => reactExports.createElement(reactExports.Fragment, null, reactExports.createElement(Viewport, { ...b2, ref: S$1, className: "rt-ScrollAreaViewport" }, g$1), reactExports.createElement("div", { className: "rt-ScrollAreaViewportFocusRing" }), l2 !== "vertical" ? reactExports.createElement(Scrollbar, { "data-radius": p2, orientation: "horizontal", className: y("rt-ScrollAreaScrollbar", g({ className: "rt-r-size", value: i2, propValues: t$1.size.values })) }, reactExports.createElement(Thumb, { className: "rt-ScrollAreaThumb" })) : null, l2 !== "horizontal" ? reactExports.createElement(Scrollbar, { "data-radius": p2, orientation: "vertical", className: y("rt-ScrollAreaScrollbar", g({ className: "rt-r-size", value: i2, propValues: t$1.size.values })) }, reactExports.createElement(Thumb, { className: "rt-ScrollAreaThumb" })) : null, l2 === "both" ? reactExports.createElement(Corner, { className: "rt-ScrollAreaCorner" }) : null)));
|
|
19473
19473
|
});
|
|
19474
19474
|
c$1.displayName = "ScrollArea";
|
|
19475
|
-
const n$1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"], f$3 = ["auto", "always", "hover", "none"], m$2 = { ...o$
|
|
19475
|
+
const n$1 = ["1", "2", "3", "4", "5", "6", "7", "8", "9"], f$3 = ["auto", "always", "hover", "none"], m$2 = { ...o$7, size: { type: "enum", className: "rt-r-size", values: n$1, responsive: true }, ...t$5, ...r$b, ...e$b, ...r$a, underline: { type: "enum", className: "rt-underline", values: f$3, default: "auto" }, ...s$5, ...o$5 };
|
|
19476
19476
|
const e = reactExports.forwardRef((p2, t2) => {
|
|
19477
19477
|
const { children: r2, className: s2, color: n2, asChild: i2, ...m2 } = v(p2, m$2);
|
|
19478
|
-
return reactExports.createElement(p$
|
|
19478
|
+
return reactExports.createElement(p$b, { ...m2, "data-accent-color": n2, ref: t2, asChild: true, className: y("rt-reset", "rt-Link", s2) }, i2 ? r2 : reactExports.createElement("a", null, r2));
|
|
19479
19479
|
});
|
|
19480
19480
|
e.displayName = "Link";
|
|
19481
|
-
const r$1 = ["1", "2"], t = ["nowrap", "wrap", "wrap-reverse"], o$1 = ["start", "center", "end"], p$1 = { size: { type: "enum", className: "rt-r-size", values: r$1, default: "2", responsive: true }, wrap: { type: "enum", className: "rt-r-fw", values: t, responsive: true }, justify: { type: "enum", className: "rt-r-jc", values: o$1, responsive: true }, ...r$
|
|
19481
|
+
const r$1 = ["1", "2"], t = ["nowrap", "wrap", "wrap-reverse"], o$1 = ["start", "center", "end"], p$1 = { size: { type: "enum", className: "rt-r-size", values: r$1, default: "2", responsive: true }, wrap: { type: "enum", className: "rt-r-fw", values: t, responsive: true }, justify: { type: "enum", className: "rt-r-jc", values: o$1, responsive: true }, ...r$c, ...o$5 };
|
|
19482
19482
|
const r = ["1", "2", "3"], a = ["surface", "ghost"], o = ["auto", "fixed"], n = { size: { type: "enum", className: "rt-r-size", values: r, default: "2", responsive: true }, variant: { type: "enum", className: "rt-variant", values: a, default: "ghost" }, layout: { type: "enum", className: "rt-r-tl", values: o, responsive: true } }, i = ["start", "center", "end", "baseline"], u = { align: { type: "enum", className: "rt-r-va", values: i, parseValue: l, responsive: true } };
|
|
19483
19483
|
function l(e2) {
|
|
19484
19484
|
return { baseline: "baseline", start: "top", center: "middle", end: "bottom" }[e2];
|
|
19485
19485
|
}
|
|
19486
|
-
const p = ["start", "center", "end"], f$2 = { justify: { type: "enum", className: "rt-r-ta", values: p, parseValue: c, responsive: true }, ...t$7, ...p$
|
|
19486
|
+
const p = ["start", "center", "end"], f$2 = { justify: { type: "enum", className: "rt-r-ta", values: p, parseValue: c, responsive: true }, ...t$7, ...p$9 };
|
|
19487
19487
|
function c(e2) {
|
|
19488
19488
|
return { start: "left", center: "center", end: "right" }[e2];
|
|
19489
19489
|
}
|
|
19490
19490
|
const m$1 = reactExports.forwardRef((o2, l2) => {
|
|
19491
|
-
const { layout: a2, ...r2 } = n, { className: C, children: c2, layout: y$1, ...i2 } = v(o2, r2, r$
|
|
19491
|
+
const { layout: a2, ...r2 } = n, { className: C, children: c2, layout: y$1, ...i2 } = v(o2, r2, r$9), w = g({ value: y$1, className: n.layout.className, propValues: n.layout.values });
|
|
19492
19492
|
return reactExports.createElement("div", { ref: l2, className: y("rt-TableRoot", C), ...i2 }, reactExports.createElement(c$1, null, reactExports.createElement("table", { className: y("rt-TableRootTable", w) }, c2)));
|
|
19493
19493
|
});
|
|
19494
19494
|
m$1.displayName = "Table.Root";
|
|
@@ -19517,12 +19517,12 @@ const R = reactExports.forwardRef((o2, l2) => {
|
|
|
19517
19517
|
});
|
|
19518
19518
|
R.displayName = "Table.RowHeaderCell";
|
|
19519
19519
|
const m = reactExports.forwardRef((t2, o2) => {
|
|
19520
|
-
const { className: r2, ...e2 } = v(t2, r$
|
|
19520
|
+
const { className: r2, ...e2 } = v(t2, r$9);
|
|
19521
19521
|
return reactExports.createElement(Root2, { ...e2, ref: o2, className: y("rt-TabsRoot", r2) });
|
|
19522
19522
|
});
|
|
19523
19523
|
m.displayName = "Tabs.Root";
|
|
19524
19524
|
const b = reactExports.forwardRef((t2, o2) => {
|
|
19525
|
-
const { className: r2, color: e2, ...n2 } = v(t2, p$1, r$
|
|
19525
|
+
const { className: r2, color: e2, ...n2 } = v(t2, p$1, r$9);
|
|
19526
19526
|
return reactExports.createElement(List, { "data-accent-color": e2, ...n2, asChild: false, ref: o2, className: y("rt-BaseTabList", "rt-TabsList", r2) });
|
|
19527
19527
|
});
|
|
19528
19528
|
b.displayName = "Tabs.List";
|
|
@@ -19532,7 +19532,7 @@ const P = reactExports.forwardRef((t2, o2) => {
|
|
|
19532
19532
|
});
|
|
19533
19533
|
P.displayName = "Tabs.Trigger";
|
|
19534
19534
|
const f = reactExports.forwardRef((t2, o2) => {
|
|
19535
|
-
const { className: r2, ...e2 } = v(t2, r$
|
|
19535
|
+
const { className: r2, ...e2 } = v(t2, r$9);
|
|
19536
19536
|
return reactExports.createElement(Content, { ...e2, ref: o2, className: y("rt-TabsContent", r2) });
|
|
19537
19537
|
});
|
|
19538
19538
|
f.displayName = "Tabs.Content";
|
|
@@ -19945,7 +19945,9 @@ function normalizeTasks(rawTasks) {
|
|
|
19945
19945
|
logs: [],
|
|
19946
19946
|
tmp: []
|
|
19947
19947
|
},
|
|
19948
|
-
artifacts: Array.isArray(t2 && t2.artifacts) ? t2.artifacts.slice() : void 0
|
|
19948
|
+
artifacts: Array.isArray(t2 && t2.artifacts) ? t2.artifacts.slice() : void 0,
|
|
19949
|
+
// Preserve tokenUsage if present
|
|
19950
|
+
...t2 && t2.tokenUsage ? { tokenUsage: t2.tokenUsage } : {}
|
|
19949
19951
|
};
|
|
19950
19952
|
tasks[name] = taskObj;
|
|
19951
19953
|
});
|
|
@@ -19967,7 +19969,9 @@ function normalizeTasks(rawTasks) {
|
|
|
19967
19969
|
// Preserve stage metadata for DAG visualization
|
|
19968
19970
|
...typeof t2?.currentStage === "string" && t2.currentStage.length > 0 ? { currentStage: t2.currentStage } : {},
|
|
19969
19971
|
...typeof t2?.failedStage === "string" && t2.failedStage.length > 0 ? { failedStage: t2.failedStage } : {},
|
|
19970
|
-
artifacts: Array.isArray(t2 && t2.artifacts) ? t2.artifacts.slice() : void 0
|
|
19972
|
+
artifacts: Array.isArray(t2 && t2.artifacts) ? t2.artifacts.slice() : void 0,
|
|
19973
|
+
// Preserve tokenUsage if present
|
|
19974
|
+
...t2 && t2.tokenUsage ? { tokenUsage: t2.tokenUsage } : {}
|
|
19971
19975
|
};
|
|
19972
19976
|
});
|
|
19973
19977
|
return { tasks, warnings };
|
|
@@ -19996,7 +20000,7 @@ function computeJobSummaryStats(tasks) {
|
|
|
19996
20000
|
function adaptJobSummary(apiJob) {
|
|
19997
20001
|
const id = apiJob.jobId;
|
|
19998
20002
|
const name = apiJob.title || "";
|
|
19999
|
-
const rawTasks = apiJob.
|
|
20003
|
+
const rawTasks = apiJob.tasks;
|
|
20000
20004
|
const location = apiJob.location;
|
|
20001
20005
|
const current = apiJob.current;
|
|
20002
20006
|
const currentStage = apiJob.currentStage;
|
|
@@ -20022,13 +20026,25 @@ function adaptJobSummary(apiJob) {
|
|
|
20022
20026
|
const { pipeline, pipelineLabel } = derivePipelineMetadata(apiJob);
|
|
20023
20027
|
if (pipeline != null) job.pipeline = pipeline;
|
|
20024
20028
|
if (pipelineLabel != null) job.pipelineLabel = pipelineLabel;
|
|
20029
|
+
if (apiJob.costsSummary) {
|
|
20030
|
+
job.costsSummary = {
|
|
20031
|
+
totalTokens: apiJob.costsSummary.totalTokens || 0,
|
|
20032
|
+
totalInputTokens: apiJob.costsSummary.totalInputTokens || 0,
|
|
20033
|
+
totalOutputTokens: apiJob.costsSummary.totalOutputTokens || 0,
|
|
20034
|
+
totalCost: apiJob.costsSummary.totalCost || 0,
|
|
20035
|
+
totalInputCost: apiJob.costsSummary.totalInputCost || 0,
|
|
20036
|
+
totalOutputCost: apiJob.costsSummary.totalOutputCost || 0
|
|
20037
|
+
};
|
|
20038
|
+
job.totalCost = job.costsSummary.totalCost;
|
|
20039
|
+
job.totalTokens = job.costsSummary.totalTokens;
|
|
20040
|
+
}
|
|
20025
20041
|
if (warnings.length > 0) job.__warnings = warnings;
|
|
20026
20042
|
return job;
|
|
20027
20043
|
}
|
|
20028
20044
|
function adaptJobDetail(apiDetail) {
|
|
20029
20045
|
const id = apiDetail.jobId;
|
|
20030
20046
|
const name = apiDetail.title || "";
|
|
20031
|
-
const rawTasks = apiDetail.
|
|
20047
|
+
const rawTasks = apiDetail.tasks;
|
|
20032
20048
|
const location = apiDetail.location;
|
|
20033
20049
|
const current = apiDetail.current;
|
|
20034
20050
|
const currentStage = apiDetail.currentStage;
|
|
@@ -20054,6 +20070,9 @@ function adaptJobDetail(apiDetail) {
|
|
|
20054
20070
|
const { pipeline, pipelineLabel } = derivePipelineMetadata(apiDetail);
|
|
20055
20071
|
if (pipeline != null) detail.pipeline = pipeline;
|
|
20056
20072
|
if (pipelineLabel != null) detail.pipelineLabel = pipelineLabel;
|
|
20073
|
+
if (apiDetail.costs) {
|
|
20074
|
+
detail.costs = apiDetail.costs;
|
|
20075
|
+
}
|
|
20057
20076
|
if (warnings.length > 0) detail.__warnings = warnings;
|
|
20058
20077
|
return detail;
|
|
20059
20078
|
}
|
|
@@ -20257,49 +20276,56 @@ const createLucideIcon = (iconName, iconNode) => {
|
|
|
20257
20276
|
* This source code is licensed under the ISC license.
|
|
20258
20277
|
* See the LICENSE file in the root directory of this source tree.
|
|
20259
20278
|
*/
|
|
20260
|
-
const __iconNode$
|
|
20279
|
+
const __iconNode$4 = [
|
|
20261
20280
|
["path", { d: "m12 19-7-7 7-7", key: "1l729n" }],
|
|
20262
20281
|
["path", { d: "M19 12H5", key: "x3x0zl" }]
|
|
20263
20282
|
];
|
|
20264
|
-
const ArrowLeft = createLucideIcon("arrow-left", __iconNode$
|
|
20283
|
+
const ArrowLeft = createLucideIcon("arrow-left", __iconNode$4);
|
|
20265
20284
|
/**
|
|
20266
20285
|
* @license lucide-react v0.544.0 - ISC
|
|
20267
20286
|
*
|
|
20268
20287
|
* This source code is licensed under the ISC license.
|
|
20269
20288
|
* See the LICENSE file in the root directory of this source tree.
|
|
20270
20289
|
*/
|
|
20271
|
-
const __iconNode$
|
|
20272
|
-
const ChevronRight = createLucideIcon("chevron-right", __iconNode$
|
|
20290
|
+
const __iconNode$3 = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
20291
|
+
const ChevronRight = createLucideIcon("chevron-right", __iconNode$3);
|
|
20273
20292
|
/**
|
|
20274
20293
|
* @license lucide-react v0.544.0 - ISC
|
|
20275
20294
|
*
|
|
20276
20295
|
* This source code is licensed under the ISC license.
|
|
20277
20296
|
* See the LICENSE file in the root directory of this source tree.
|
|
20278
20297
|
*/
|
|
20279
|
-
const __iconNode$
|
|
20280
|
-
["path", { d: "
|
|
20281
|
-
[
|
|
20282
|
-
|
|
20283
|
-
{
|
|
20284
|
-
d: "M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z",
|
|
20285
|
-
key: "r6nss1"
|
|
20286
|
-
}
|
|
20287
|
-
]
|
|
20298
|
+
const __iconNode$2 = [
|
|
20299
|
+
["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
|
|
20300
|
+
["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
|
|
20301
|
+
["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
|
|
20288
20302
|
];
|
|
20289
|
-
const
|
|
20303
|
+
const CodeXml = createLucideIcon("code-xml", __iconNode$2);
|
|
20290
20304
|
/**
|
|
20291
20305
|
* @license lucide-react v0.544.0 - ISC
|
|
20292
20306
|
*
|
|
20293
20307
|
* This source code is licensed under the ISC license.
|
|
20294
20308
|
* See the LICENSE file in the root directory of this source tree.
|
|
20295
20309
|
*/
|
|
20296
|
-
const __iconNode = [
|
|
20310
|
+
const __iconNode$1 = [
|
|
20297
20311
|
["path", { d: "M10 2h4", key: "n1abiw" }],
|
|
20298
20312
|
["path", { d: "M12 14v-4", key: "1evpnu" }],
|
|
20299
20313
|
["path", { d: "M4 13a8 8 0 0 1 8-7 8 8 0 1 1-5.3 14L4 17.6", key: "1ts96g" }],
|
|
20300
20314
|
["path", { d: "M9 17H4v5", key: "8t5av" }]
|
|
20301
20315
|
];
|
|
20302
|
-
const TimerReset = createLucideIcon("timer-reset", __iconNode);
|
|
20316
|
+
const TimerReset = createLucideIcon("timer-reset", __iconNode$1);
|
|
20317
|
+
/**
|
|
20318
|
+
* @license lucide-react v0.544.0 - ISC
|
|
20319
|
+
*
|
|
20320
|
+
* This source code is licensed under the ISC license.
|
|
20321
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
20322
|
+
*/
|
|
20323
|
+
const __iconNode = [
|
|
20324
|
+
["path", { d: "M12 3v12", key: "1x0j5s" }],
|
|
20325
|
+
["path", { d: "m17 8-5-5-5 5", key: "7q97r8" }],
|
|
20326
|
+
["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }]
|
|
20327
|
+
];
|
|
20328
|
+
const Upload = createLucideIcon("upload", __iconNode);
|
|
20303
20329
|
const countCompleted = (job) => {
|
|
20304
20330
|
const list = Array.isArray(job?.tasks) ? job.tasks : Object.values(job?.tasks || {});
|
|
20305
20331
|
return list.filter((t2) => t2?.state === "done" || t2?.state === "completed").length;
|
|
@@ -20322,14 +20348,14 @@ function Badge({ children, intent = "gray", className = "", ...props }) {
|
|
|
20322
20348
|
const statusBadge = (status) => {
|
|
20323
20349
|
switch (status) {
|
|
20324
20350
|
case "running":
|
|
20325
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, {
|
|
20351
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { intent: "blue", "aria-label": "Running", children: "Running" });
|
|
20326
20352
|
case "failed":
|
|
20327
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, {
|
|
20353
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { intent: "red", "aria-label": "Failed", children: "Failed" });
|
|
20328
20354
|
case "completed":
|
|
20329
20355
|
case "complete":
|
|
20330
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, {
|
|
20356
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { intent: "green", "aria-label": "Completed", children: "Completed" });
|
|
20331
20357
|
case "pending":
|
|
20332
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, {
|
|
20358
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { intent: "gray", "aria-label": "Pending", children: "Pending" });
|
|
20333
20359
|
default:
|
|
20334
20360
|
return null;
|
|
20335
20361
|
}
|
|
@@ -20346,6 +20372,20 @@ const progressClasses = (status) => {
|
|
|
20346
20372
|
return "bg-muted [&>div]:bg-muted-foreground";
|
|
20347
20373
|
}
|
|
20348
20374
|
};
|
|
20375
|
+
function formatCurrency4$1(x) {
|
|
20376
|
+
if (typeof x !== "number" || x === 0) return "$0.0000";
|
|
20377
|
+
const formatted = x.toFixed(4);
|
|
20378
|
+
return `$${formatted.replace(/\.?0+$/, "")}`;
|
|
20379
|
+
}
|
|
20380
|
+
function formatTokensCompact$1(n2) {
|
|
20381
|
+
if (typeof n2 !== "number" || n2 === 0) return "0 tok";
|
|
20382
|
+
if (n2 >= 1e6) {
|
|
20383
|
+
return `${(n2 / 1e6).toFixed(1).replace(/\.0$/, "")}M tok`;
|
|
20384
|
+
} else if (n2 >= 1e3) {
|
|
20385
|
+
return `${(n2 / 1e3).toFixed(1).replace(/\.0$/, "")}k tok`;
|
|
20386
|
+
}
|
|
20387
|
+
return `${n2} tok`;
|
|
20388
|
+
}
|
|
20349
20389
|
function JobTable({
|
|
20350
20390
|
jobs,
|
|
20351
20391
|
pipeline,
|
|
@@ -20354,9 +20394,9 @@ function JobTable({
|
|
|
20354
20394
|
now
|
|
20355
20395
|
}) {
|
|
20356
20396
|
if (jobs.length === 0) {
|
|
20357
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20397
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { className: "p-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", className: "text-slate-600", children: "No jobs to show here yet." }) });
|
|
20358
20398
|
}
|
|
20359
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20399
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(m$1, { radius: "none", children: [
|
|
20360
20400
|
/* @__PURE__ */ jsxRuntimeExports.jsx(d, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(P$1, { children: [
|
|
20361
20401
|
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Job Name" }),
|
|
20362
20402
|
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Pipeline" }),
|
|
@@ -20364,11 +20404,12 @@ function JobTable({
|
|
|
20364
20404
|
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Current Task" }),
|
|
20365
20405
|
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Progress" }),
|
|
20366
20406
|
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Tasks" }),
|
|
20407
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Cost" }),
|
|
20367
20408
|
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Duration" }),
|
|
20368
20409
|
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { className: "w-12" })
|
|
20369
20410
|
] }) }),
|
|
20370
20411
|
/* @__PURE__ */ jsxRuntimeExports.jsx(b$1, { children: jobs.map((job) => {
|
|
20371
|
-
const jobTitle = job.
|
|
20412
|
+
const jobTitle = job.name;
|
|
20372
20413
|
const taskById = Array.isArray(job.tasks) ? Object.fromEntries(
|
|
20373
20414
|
(job.tasks || []).map((t2) => {
|
|
20374
20415
|
if (typeof t2 === "string") return [t2, { id: t2, name: t2 }];
|
|
@@ -20383,6 +20424,9 @@ function JobTable({
|
|
|
20383
20424
|
const duration = overallElapsed(job);
|
|
20384
20425
|
const currentTaskName = currentTask ? currentTask.name ?? currentTask.id ?? job.current : void 0;
|
|
20385
20426
|
const currentTaskConfig = job.current && (currentTask?.config || pipeline?.taskConfig?.[job.current]) || {};
|
|
20427
|
+
const costsSummary = job.costsSummary || {};
|
|
20428
|
+
const totalCost = job.totalCost || costsSummary.totalCost || 0;
|
|
20429
|
+
const totalTokens = job.totalTokens || costsSummary.totalTokens || 0;
|
|
20386
20430
|
const hasValidId = Boolean(job.id);
|
|
20387
20431
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
20388
20432
|
P$1,
|
|
@@ -20394,24 +20438,24 @@ function JobTable({
|
|
|
20394
20438
|
"aria-label": hasValidId ? `Open ${jobTitle}` : `${jobTitle} - No valid job ID, cannot open details`,
|
|
20395
20439
|
title: hasValidId ? void 0 : "This job cannot be opened because it lacks a valid ID",
|
|
20396
20440
|
children: [
|
|
20397
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20398
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20399
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20441
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { direction: "column", gap: "1", children: [
|
|
20442
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", weight: "medium", className: "text-slate-900", children: jobTitle }),
|
|
20443
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "1", className: "text-slate-500", children: job.id })
|
|
20400
20444
|
] }) }),
|
|
20401
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20402
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20403
|
-
job.pipelineLabel && job.pipeline && /* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20445
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { direction: "column", gap: "1", children: [
|
|
20446
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", className: "text-slate-900", children: job.pipelineLabel || job.pipeline || "—" }),
|
|
20447
|
+
job.pipelineLabel && job.pipeline && /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "1", className: "text-slate-500", children: job.pipeline })
|
|
20404
20448
|
] }) }),
|
|
20405
20449
|
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: statusBadge(job.status) }),
|
|
20406
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20407
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20408
|
-
currentTask && /* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20450
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { direction: "column", gap: "1", children: [
|
|
20451
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", className: "text-slate-700", children: currentTaskName ? currentTaskName : job.status === "completed" ? "—" : job.current ?? "—" }),
|
|
20452
|
+
currentTask && /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "1", className: "text-slate-500", children: [
|
|
20409
20453
|
currentTaskConfig?.model || currentTask?.model,
|
|
20410
20454
|
currentTaskConfig?.temperature != null || currentTask?.temperature != null ? `temp ${currentTaskConfig?.temperature ?? currentTask?.temperature}` : null,
|
|
20411
20455
|
currentElapsedMs > 0 ? fmtDuration(currentElapsedMs) : null
|
|
20412
20456
|
].filter(Boolean).join(" · ") })
|
|
20413
20457
|
] }) }),
|
|
20414
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20458
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { direction: "column", gap: "2", className: "w-32", children: [
|
|
20415
20459
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20416
20460
|
Progress,
|
|
20417
20461
|
{
|
|
@@ -20420,22 +20464,26 @@ function JobTable({
|
|
|
20420
20464
|
"aria-label": `Progress ${progress}%`
|
|
20421
20465
|
}
|
|
20422
20466
|
),
|
|
20423
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20467
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$b, { size: "1", className: "text-slate-500", children: [
|
|
20424
20468
|
progress,
|
|
20425
20469
|
"%"
|
|
20426
20470
|
] })
|
|
20427
20471
|
] }) }),
|
|
20428
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20472
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$b, { size: "2", className: "text-slate-700", children: [
|
|
20429
20473
|
totalCompleted,
|
|
20430
20474
|
" of ",
|
|
20431
20475
|
totalTasks
|
|
20432
20476
|
] }) }),
|
|
20433
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20477
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { direction: "column", gap: "1", children: [
|
|
20478
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", className: "text-slate-700", children: totalCost > 0 ? formatCurrency4$1(totalCost) : "—" }),
|
|
20479
|
+
totalTokens > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "1", className: "text-slate-500", children: formatTokensCompact$1(totalTokens) })
|
|
20480
|
+
] }) }),
|
|
20481
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { align: "center", gap: "1", children: [
|
|
20434
20482
|
/* @__PURE__ */ jsxRuntimeExports.jsx(TimerReset, { className: "h-3 w-3 text-slate-500" }),
|
|
20435
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20483
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", className: "text-slate-700", children: fmtDuration(duration) })
|
|
20436
20484
|
] }) }),
|
|
20437
20485
|
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20438
|
-
o$
|
|
20486
|
+
o$2,
|
|
20439
20487
|
{
|
|
20440
20488
|
variant: "ghost",
|
|
20441
20489
|
size: "1",
|
|
@@ -20462,7 +20510,7 @@ function Button({
|
|
|
20462
20510
|
const color = variant === "destructive" ? "red" : void 0;
|
|
20463
20511
|
const combinedClassName = `transition-colors duration-200 ${className}`;
|
|
20464
20512
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20465
|
-
o$
|
|
20513
|
+
o$2,
|
|
20466
20514
|
{
|
|
20467
20515
|
variant: radixVariant,
|
|
20468
20516
|
size: radixSize,
|
|
@@ -20472,6 +20520,78 @@ function Button({
|
|
|
20472
20520
|
}
|
|
20473
20521
|
);
|
|
20474
20522
|
}
|
|
20523
|
+
const Logo = () => /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20524
|
+
"svg",
|
|
20525
|
+
{
|
|
20526
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
20527
|
+
width: "100%",
|
|
20528
|
+
height: "100%",
|
|
20529
|
+
viewBox: "0 0 1200 1200",
|
|
20530
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20531
|
+
"path",
|
|
20532
|
+
{
|
|
20533
|
+
fill: "#009966",
|
|
20534
|
+
d: "M406.13 988.31c-17.297 75.047-84.562 131.11-164.86 131.11-93.375 0-169.18-75.797-169.18-169.18s75.797-169.18 169.18-169.18 169.18 75.797 169.18 169.18v1.266h447.74v-167.9H671.63c-14.859 0-29.062-5.906-39.562-16.406s-16.406-24.703-16.406-39.562v-37.312h-317.16c-10.312 0-18.656-8.344-18.656-18.656V355.78h-147.94c-14.859 0-29.062-5.906-39.562-16.406s-16.406-24.75-16.406-39.562v-111.94c0-14.859 5.906-29.109 16.406-39.562 10.5-10.5 24.75-16.406 39.562-16.406h391.78c14.859 0 29.062 5.906 39.562 16.406s16.406 24.75 16.406 39.562v37.312h202.4c9.281-84.609 81.094-150.52 168.14-150.52 93.375 0 169.18 75.797 169.18 169.18s-75.797 169.18-169.18 169.18c-87.047 0-158.86-65.906-168.14-150.52h-202.4v37.312c0 14.859-5.906 29.062-16.406 39.562s-24.75 16.406-39.562 16.406h-206.53v297.24h298.5v-37.312c0-14.859 5.906-29.062 16.406-39.562s24.703-16.406 39.562-16.406h392.63c14.859 0 29.062 5.906 39.562 16.406s16.406 24.703 16.406 39.562v111.94c0 14.859-5.906 29.062-16.406 39.562s-24.75 16.406-39.562 16.406h-168.74v186.56c0 10.312-8.344 18.656-18.656 18.656h-466.4c-1.5 0-2.906-.187-4.312-.516zM225.19 262.45h18.656c10.312 0 18.656-8.344 18.656-18.656s-8.344-18.656-18.656-18.656H225.19c-10.312 0-18.656 8.344-18.656 18.656s8.344 18.656 18.656 18.656zm186.56 0h18.656c10.312 0 18.656-8.344 18.656-18.656s-8.344-18.656-18.656-18.656H411.75c-10.312 0-18.656 8.344-18.656 18.656s8.344 18.656 18.656 18.656zm-93.281 0h18.656c10.312 0 18.656-8.344 18.656-18.656s-8.344-18.656-18.656-18.656h-18.656c-10.312 0-18.656 8.344-18.656 18.656s8.344 18.656 18.656 18.656zm616.18 0h85.5c10.312 0 18.656-8.344 18.656-18.656s-8.344-18.656-18.656-18.656h-85.5l29.062-22.594c8.109-6.328 9.609-18.047 3.281-26.156s-18.047-9.609-26.156-3.281l-71.953 55.969a18.61 18.61 0 0 0 0 29.438l71.953 55.969c8.109 6.328 19.875 4.875 26.156-3.281 6.328-8.109 4.875-19.875-3.281-26.203l-29.062-22.594zm-779.95 696.66l50.391 50.391c7.266 7.313 19.078 7.313 26.391 0l100.73-100.73c7.266-7.266 7.266-19.078 0-26.391-7.266-7.266-19.078-7.266-26.391 0l-87.562 87.562-37.172-37.172c-7.266-7.266-19.078-7.266-26.391 0-7.266 7.266-7.266 19.078 0 26.391zm797.21-268.78h18.656c10.312 0 18.656-8.344 18.656-18.656s-8.344-18.656-18.656-18.656h-18.656c-10.312 0-18.656 8.344-18.656 18.656s8.344 18.656 18.656 18.656zm-186.56 0h18.656c10.312 0 18.656-8.344 18.656-18.656s-8.344-18.656-18.656-18.656h-18.656c-10.312 0-18.656 8.344-18.656 18.656s8.344 18.656 18.656 18.656zm93.281 0h18.656c10.312 0 18.656-8.344 18.656-18.656s-8.344-18.656-18.656-18.656H858.63c-10.312 0-18.656 8.344-18.656 18.656s8.344 18.656 18.656 18.656z",
|
|
20535
|
+
fillRule: "evenodd"
|
|
20536
|
+
}
|
|
20537
|
+
)
|
|
20538
|
+
}
|
|
20539
|
+
);
|
|
20540
|
+
function PageSubheader({
|
|
20541
|
+
breadcrumbs = [],
|
|
20542
|
+
children,
|
|
20543
|
+
maxWidth = "max-w-7xl"
|
|
20544
|
+
}) {
|
|
20545
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20546
|
+
p$7,
|
|
20547
|
+
{
|
|
20548
|
+
role: "region",
|
|
20549
|
+
"aria-label": "Page header",
|
|
20550
|
+
className: "border-b border-gray-300 bg-gray-1/60 backdrop-blur supports-[backdrop-filter]:bg-gray-1/40 mb-4",
|
|
20551
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
20552
|
+
p$4,
|
|
20553
|
+
{
|
|
20554
|
+
align: "center",
|
|
20555
|
+
justify: "between",
|
|
20556
|
+
className: `mx-auto w-full ${maxWidth} px-1.5 py-3`,
|
|
20557
|
+
gap: "4",
|
|
20558
|
+
wrap: "wrap",
|
|
20559
|
+
children: [
|
|
20560
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$4, { align: "center", gap: "3", className: "min-w-0 flex-1", children: breadcrumbs.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx("nav", { "aria-label": "Breadcrumb", className: "shrink-0", children: /* @__PURE__ */ jsxRuntimeExports.jsx("ol", { className: "flex items-center gap-2 text-sm text-gray-11", children: breadcrumbs.map((crumb, index2) => {
|
|
20561
|
+
const isLast = index2 === breadcrumbs.length - 1;
|
|
20562
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(React.Fragment, { children: [
|
|
20563
|
+
index2 > 0 && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20564
|
+
ChevronRight,
|
|
20565
|
+
{
|
|
20566
|
+
className: "h-4 w-4 text-gray-9",
|
|
20567
|
+
"aria-hidden": "true"
|
|
20568
|
+
}
|
|
20569
|
+
),
|
|
20570
|
+
crumb.href ? /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20571
|
+
Link,
|
|
20572
|
+
{
|
|
20573
|
+
to: crumb.href,
|
|
20574
|
+
className: "hover:text-gray-12 transition-colors underline-offset-4 hover:underline",
|
|
20575
|
+
children: crumb.label
|
|
20576
|
+
}
|
|
20577
|
+
) : /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20578
|
+
p$b,
|
|
20579
|
+
{
|
|
20580
|
+
as: "span",
|
|
20581
|
+
"aria-current": isLast ? "page" : void 0,
|
|
20582
|
+
className: isLast ? "text-gray-12 font-medium" : "",
|
|
20583
|
+
children: crumb.label
|
|
20584
|
+
}
|
|
20585
|
+
)
|
|
20586
|
+
] }, index2);
|
|
20587
|
+
}) }) }) }),
|
|
20588
|
+
children && /* @__PURE__ */ jsxRuntimeExports.jsx(p$4, { align: "center", gap: "3", className: "shrink-0", children })
|
|
20589
|
+
]
|
|
20590
|
+
}
|
|
20591
|
+
)
|
|
20592
|
+
}
|
|
20593
|
+
);
|
|
20594
|
+
}
|
|
20475
20595
|
const normalizeUploadError = (err) => {
|
|
20476
20596
|
if (!err) return "Upload failed";
|
|
20477
20597
|
if (typeof err === "string") return err;
|
|
@@ -20484,20 +20604,7 @@ const normalizeUploadError = (err) => {
|
|
|
20484
20604
|
};
|
|
20485
20605
|
function UploadSeed({ onUploadSuccess }) {
|
|
20486
20606
|
const fileInputRef = React.useRef(null);
|
|
20487
|
-
const [showSample, setShowSample] = reactExports.useState(false);
|
|
20488
20607
|
const [error, setError] = reactExports.useState(null);
|
|
20489
|
-
const sampleSeed = {
|
|
20490
|
-
name: "some-name",
|
|
20491
|
-
pipeline: "content-generation",
|
|
20492
|
-
data: {
|
|
20493
|
-
type: "some-type",
|
|
20494
|
-
contentType: "blog-post",
|
|
20495
|
-
targetAudience: "software-developers",
|
|
20496
|
-
tone: "professional-yet-accessible",
|
|
20497
|
-
length: "1500-2000 words",
|
|
20498
|
-
outputFormat: "blog-post"
|
|
20499
|
-
}
|
|
20500
|
-
};
|
|
20501
20608
|
const handleFileChange = async (event) => {
|
|
20502
20609
|
const files = event.target.files;
|
|
20503
20610
|
if (!files || files.length === 0) return;
|
|
@@ -20558,7 +20665,7 @@ function UploadSeed({ onUploadSuccess }) {
|
|
|
20558
20665
|
};
|
|
20559
20666
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { "data-testid": "upload-seed", className: "space-y-3", children: [
|
|
20560
20667
|
error && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20561
|
-
p$
|
|
20668
|
+
p$7,
|
|
20562
20669
|
{
|
|
20563
20670
|
role: "alert",
|
|
20564
20671
|
"data-testid": "upload-error",
|
|
@@ -20631,63 +20738,14 @@ function UploadSeed({ onUploadSuccess }) {
|
|
|
20631
20738
|
onChange: handleFileChange,
|
|
20632
20739
|
"data-testid": "file-input"
|
|
20633
20740
|
}
|
|
20634
|
-
)
|
|
20635
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "border border-gray-200 rounded-lg overflow-hidden", children: [
|
|
20636
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
20637
|
-
"button",
|
|
20638
|
-
{
|
|
20639
|
-
type: "button",
|
|
20640
|
-
onClick: () => setShowSample(!showSample),
|
|
20641
|
-
className: "w-full px-4 py-3 text-left bg-gray-50 hover:bg-gray-100 transition-colors flex items-center justify-between",
|
|
20642
|
-
"aria-expanded": showSample,
|
|
20643
|
-
"data-testid": "sample-toggle",
|
|
20644
|
-
children: [
|
|
20645
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-medium text-gray-700", children: "Need help? View sample seed file structure" }),
|
|
20646
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20647
|
-
"svg",
|
|
20648
|
-
{
|
|
20649
|
-
className: `w-4 h-4 text-gray-500 transition-transform ${showSample ? "rotate-180" : ""}`,
|
|
20650
|
-
fill: "none",
|
|
20651
|
-
viewBox: "0 0 24 24",
|
|
20652
|
-
stroke: "currentColor",
|
|
20653
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20654
|
-
"path",
|
|
20655
|
-
{
|
|
20656
|
-
strokeLinecap: "round",
|
|
20657
|
-
strokeLinejoin: "round",
|
|
20658
|
-
strokeWidth: 2,
|
|
20659
|
-
d: "M19 9l-7 7-7-7"
|
|
20660
|
-
}
|
|
20661
|
-
)
|
|
20662
|
-
}
|
|
20663
|
-
)
|
|
20664
|
-
]
|
|
20665
|
-
}
|
|
20666
|
-
),
|
|
20667
|
-
showSample && /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "p-4 bg-white border-t border-gray-200", children: [
|
|
20668
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex items-center justify-between mb-2", children: [
|
|
20669
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("p", { className: "text-xs text-gray-600", children: "Use this structure as a reference for your seed file:" }),
|
|
20670
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20671
|
-
"button",
|
|
20672
|
-
{
|
|
20673
|
-
type: "button",
|
|
20674
|
-
onClick: () => navigator.clipboard.writeText(
|
|
20675
|
-
JSON.stringify(sampleSeed, null, 2)
|
|
20676
|
-
),
|
|
20677
|
-
className: "text-xs bg-blue-100 text-blue-700 px-2 py-1 rounded hover:bg-blue-200 transition-colors",
|
|
20678
|
-
"data-testid": "copy-sample",
|
|
20679
|
-
children: "Copy"
|
|
20680
|
-
}
|
|
20681
|
-
)
|
|
20682
|
-
] }),
|
|
20683
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "text-xs bg-gray-50 p-3 rounded overflow-auto max-h-60", children: JSON.stringify(sampleSeed, null, 2) })
|
|
20684
|
-
] })
|
|
20685
|
-
] })
|
|
20741
|
+
)
|
|
20686
20742
|
] });
|
|
20687
20743
|
}
|
|
20688
20744
|
function Layout({
|
|
20689
20745
|
children,
|
|
20690
20746
|
title,
|
|
20747
|
+
pageTitle,
|
|
20748
|
+
breadcrumbs,
|
|
20691
20749
|
actions,
|
|
20692
20750
|
showBackButton = false,
|
|
20693
20751
|
backTo = "/",
|
|
@@ -20695,16 +20753,51 @@ function Layout({
|
|
|
20695
20753
|
}) {
|
|
20696
20754
|
const navigate = useNavigate();
|
|
20697
20755
|
const location = useLocation();
|
|
20756
|
+
const [isUploadOpen, setIsUploadOpen] = reactExports.useState(false);
|
|
20757
|
+
const [seedUploadSuccess, setSeedUploadSuccess] = reactExports.useState(null);
|
|
20758
|
+
const [seedUploadTimer, setSeedUploadTimer] = reactExports.useState(null);
|
|
20759
|
+
const uploadPanelRef = reactExports.useRef(null);
|
|
20698
20760
|
const isActivePath = (path) => {
|
|
20699
|
-
if (location.pathname
|
|
20761
|
+
if (location.pathname.startsWith(path)) return true;
|
|
20700
20762
|
return false;
|
|
20701
20763
|
};
|
|
20702
20764
|
const handleBack = () => {
|
|
20703
20765
|
navigate(backTo);
|
|
20704
20766
|
};
|
|
20705
|
-
|
|
20767
|
+
const toggleUploadPanel = () => {
|
|
20768
|
+
setIsUploadOpen(!isUploadOpen);
|
|
20769
|
+
};
|
|
20770
|
+
const handleSeedUploadSuccess = ({ jobName }) => {
|
|
20771
|
+
if (seedUploadTimer) {
|
|
20772
|
+
clearTimeout(seedUploadTimer);
|
|
20773
|
+
}
|
|
20774
|
+
setSeedUploadSuccess(jobName);
|
|
20775
|
+
const timer = setTimeout(() => {
|
|
20776
|
+
setSeedUploadSuccess(null);
|
|
20777
|
+
setSeedUploadTimer(null);
|
|
20778
|
+
}, 5e3);
|
|
20779
|
+
setSeedUploadTimer(timer);
|
|
20780
|
+
};
|
|
20781
|
+
reactExports.useEffect(() => {
|
|
20782
|
+
return () => {
|
|
20783
|
+
if (seedUploadTimer) {
|
|
20784
|
+
clearTimeout(seedUploadTimer);
|
|
20785
|
+
}
|
|
20786
|
+
};
|
|
20787
|
+
}, [seedUploadTimer]);
|
|
20788
|
+
reactExports.useEffect(() => {
|
|
20789
|
+
if (isUploadOpen && uploadPanelRef.current) {
|
|
20790
|
+
const uploadArea = uploadPanelRef.current.querySelector(
|
|
20791
|
+
'[data-testid="upload-area"]'
|
|
20792
|
+
);
|
|
20793
|
+
if (uploadArea) {
|
|
20794
|
+
uploadArea.focus();
|
|
20795
|
+
}
|
|
20796
|
+
}
|
|
20797
|
+
}, [isUploadOpen]);
|
|
20798
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(Provider, { delayDuration: 200, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$7, { className: "min-h-screen bg-gray-1", children: [
|
|
20706
20799
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20707
|
-
p$
|
|
20800
|
+
p$7,
|
|
20708
20801
|
{
|
|
20709
20802
|
as: "a",
|
|
20710
20803
|
href: "#main-content",
|
|
@@ -20713,19 +20806,19 @@ function Layout({
|
|
|
20713
20806
|
}
|
|
20714
20807
|
),
|
|
20715
20808
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20716
|
-
p$
|
|
20809
|
+
p$7,
|
|
20717
20810
|
{
|
|
20718
20811
|
role: "banner",
|
|
20719
20812
|
className: "sticky top-0 z-20 border-b border-gray-300 bg-gray-1/80 backdrop-blur supports-[backdrop-filter]:bg-gray-1/60",
|
|
20720
20813
|
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
20721
|
-
p$
|
|
20814
|
+
p$4,
|
|
20722
20815
|
{
|
|
20723
20816
|
align: "center",
|
|
20724
20817
|
justify: "between",
|
|
20725
20818
|
className: `mx-auto w-full ${maxWidth} px-4 sm:px-6 lg:px-8 py-4`,
|
|
20726
20819
|
gap: "4",
|
|
20727
20820
|
children: [
|
|
20728
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20821
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { align: "center", className: "min-w-0 flex-1", children: [
|
|
20729
20822
|
showBackButton && /* @__PURE__ */ jsxRuntimeExports.jsxs(Root3, { delayDuration: 200, children: [
|
|
20730
20823
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20731
20824
|
Button,
|
|
@@ -20738,15 +20831,44 @@ function Layout({
|
|
|
20738
20831
|
children: /* @__PURE__ */ jsxRuntimeExports.jsx(ArrowLeft, { className: "h-4 w-4" })
|
|
20739
20832
|
}
|
|
20740
20833
|
) }),
|
|
20741
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Content2, { side: "bottom", sideOffset: 5, children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20834
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Content2, { side: "bottom", sideOffset: 5, children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", children: "Go back" }) })
|
|
20742
20835
|
] }),
|
|
20743
20836
|
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20744
|
-
|
|
20837
|
+
p$7,
|
|
20838
|
+
{
|
|
20839
|
+
asChild: true,
|
|
20840
|
+
className: "shrink-0",
|
|
20841
|
+
style: { width: "80px", height: "60px" },
|
|
20842
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20843
|
+
Link,
|
|
20844
|
+
{
|
|
20845
|
+
to: "/",
|
|
20846
|
+
"aria-label": "Go to homepage",
|
|
20847
|
+
className: "rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-blue-500",
|
|
20848
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(Logo, {})
|
|
20849
|
+
}
|
|
20850
|
+
)
|
|
20851
|
+
}
|
|
20852
|
+
),
|
|
20853
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20854
|
+
p$7,
|
|
20745
20855
|
{
|
|
20746
|
-
|
|
20747
|
-
|
|
20748
|
-
|
|
20749
|
-
children:
|
|
20856
|
+
asChild: true,
|
|
20857
|
+
className: "shrink-0 cursor-pointer hover:bg-gray-3 rounded p-1 -m-1 transition-colors",
|
|
20858
|
+
onClick: () => navigate("/"),
|
|
20859
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20860
|
+
r$8,
|
|
20861
|
+
{
|
|
20862
|
+
size: "6",
|
|
20863
|
+
weight: "medium",
|
|
20864
|
+
className: "text-gray-12 truncate",
|
|
20865
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
|
|
20866
|
+
"Prompt",
|
|
20867
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
|
|
20868
|
+
"Pipeline"
|
|
20869
|
+
] })
|
|
20870
|
+
}
|
|
20871
|
+
)
|
|
20750
20872
|
}
|
|
20751
20873
|
)
|
|
20752
20874
|
] }),
|
|
@@ -20756,21 +20878,66 @@ function Layout({
|
|
|
20756
20878
|
role: "navigation",
|
|
20757
20879
|
"aria-label": "Main navigation",
|
|
20758
20880
|
className: "hidden md:flex",
|
|
20759
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$
|
|
20881
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$4, { align: "center", gap: "6", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20760
20882
|
e,
|
|
20761
20883
|
{
|
|
20762
|
-
href: "/",
|
|
20763
|
-
className: `text-sm font-medium transition-colors hover:text-blue-600 ${isActivePath() ? "text-blue-600" : "text-gray-11 hover:text-gray-12"}`,
|
|
20764
|
-
"aria-current": isActivePath() ? "page" : void 0,
|
|
20765
|
-
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
20766
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20767
|
-
"
|
|
20884
|
+
href: "/code",
|
|
20885
|
+
className: `text-sm font-medium transition-colors hover:text-blue-600 ${isActivePath("/code") ? "text-blue-600" : "text-gray-11 hover:text-gray-12"}`,
|
|
20886
|
+
"aria-current": isActivePath("/code") ? "page" : void 0,
|
|
20887
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { align: "center", gap: "2", children: [
|
|
20888
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(CodeXml, { className: "h-4 w-4" }),
|
|
20889
|
+
"Help"
|
|
20768
20890
|
] })
|
|
20769
20891
|
}
|
|
20770
20892
|
) })
|
|
20771
20893
|
}
|
|
20772
20894
|
),
|
|
20773
|
-
|
|
20895
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { align: "center", gap: "3", className: "shrink-0", children: [
|
|
20896
|
+
actions,
|
|
20897
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(Root3, { delayDuration: 200, children: [
|
|
20898
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Trigger, { asChild: true, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
20899
|
+
Button,
|
|
20900
|
+
{
|
|
20901
|
+
size: "sm",
|
|
20902
|
+
variant: "default",
|
|
20903
|
+
onClick: toggleUploadPanel,
|
|
20904
|
+
"aria-controls": "layout-upload-panel",
|
|
20905
|
+
"aria-expanded": isUploadOpen,
|
|
20906
|
+
children: [
|
|
20907
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Upload, { className: "h-4 w-4" }),
|
|
20908
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", className: "ml-2", children: "Upload Seed" })
|
|
20909
|
+
]
|
|
20910
|
+
}
|
|
20911
|
+
) }),
|
|
20912
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Content2, { side: "bottom", sideOffset: 5, children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", children: "Upload seed file" }) })
|
|
20913
|
+
] })
|
|
20914
|
+
] })
|
|
20915
|
+
]
|
|
20916
|
+
}
|
|
20917
|
+
)
|
|
20918
|
+
}
|
|
20919
|
+
),
|
|
20920
|
+
isUploadOpen && /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20921
|
+
p$7,
|
|
20922
|
+
{
|
|
20923
|
+
id: "layout-upload-panel",
|
|
20924
|
+
ref: uploadPanelRef,
|
|
20925
|
+
role: "region",
|
|
20926
|
+
"aria-label": "Upload seed file",
|
|
20927
|
+
className: "bg-blue-50",
|
|
20928
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
20929
|
+
p$4,
|
|
20930
|
+
{
|
|
20931
|
+
direction: "column",
|
|
20932
|
+
gap: "3",
|
|
20933
|
+
className: `mx-auto w-full ${maxWidth} px-4 sm:px-6 lg:px-8 py-4`,
|
|
20934
|
+
children: [
|
|
20935
|
+
seedUploadSuccess && /* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { className: "rounded-md bg-green-50 p-3 border border-green-200", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$b, { size: "2", className: "text-green-800", children: [
|
|
20936
|
+
"Job ",
|
|
20937
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: seedUploadSuccess }),
|
|
20938
|
+
" created successfully"
|
|
20939
|
+
] }) }),
|
|
20940
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(UploadSeed, { onUploadSuccess: handleSeedUploadSuccess })
|
|
20774
20941
|
]
|
|
20775
20942
|
}
|
|
20776
20943
|
)
|
|
@@ -20781,7 +20948,7 @@ function Layout({
|
|
|
20781
20948
|
{
|
|
20782
20949
|
id: "main-content",
|
|
20783
20950
|
role: "main",
|
|
20784
|
-
className: `mx-auto w-full ${maxWidth} px-4 sm:px-6 lg:px-8
|
|
20951
|
+
className: `mx-auto w-full ${maxWidth} px-4 sm:px-6 lg:px-8`,
|
|
20785
20952
|
children
|
|
20786
20953
|
}
|
|
20787
20954
|
)
|
|
@@ -20799,8 +20966,6 @@ function PromptPipelineDashboard({ isConnected }) {
|
|
|
20799
20966
|
return src.map(adaptJobSummary);
|
|
20800
20967
|
}, [apiJobs, error]);
|
|
20801
20968
|
const [activeTab, setActiveTab] = reactExports.useState("current");
|
|
20802
|
-
const [seedUploadSuccess, setSeedUploadSuccess] = reactExports.useState(null);
|
|
20803
|
-
const [seedUploadTimer, setSeedUploadTimer] = reactExports.useState(null);
|
|
20804
20969
|
const now = useTicker(1e4);
|
|
20805
20970
|
const errorCount = reactExports.useMemo(
|
|
20806
20971
|
() => jobs.filter((j) => j.status === "failed").length,
|
|
@@ -20843,92 +21008,73 @@ function PromptPipelineDashboard({ isConnected }) {
|
|
|
20843
21008
|
console.warn(`Cannot open job "${job.name}" - no valid job ID available`);
|
|
20844
21009
|
}
|
|
20845
21010
|
};
|
|
20846
|
-
const
|
|
20847
|
-
|
|
20848
|
-
clearTimeout(seedUploadTimer);
|
|
20849
|
-
}
|
|
20850
|
-
setSeedUploadSuccess(jobName);
|
|
20851
|
-
const timer = setTimeout(() => {
|
|
20852
|
-
setSeedUploadSuccess(null);
|
|
20853
|
-
setSeedUploadTimer(null);
|
|
20854
|
-
}, 5e3);
|
|
20855
|
-
setSeedUploadTimer(timer);
|
|
20856
|
-
};
|
|
20857
|
-
reactExports.useEffect(() => {
|
|
20858
|
-
return () => {
|
|
20859
|
-
if (seedUploadTimer) {
|
|
20860
|
-
clearTimeout(seedUploadTimer);
|
|
20861
|
-
}
|
|
20862
|
-
};
|
|
20863
|
-
}, [seedUploadTimer]);
|
|
20864
|
-
const headerActions = runningJobs.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(p$3, { align: "center", gap: "2", className: "text-gray-11", children: [
|
|
20865
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "1", weight: "medium", children: "Overall Progress" }),
|
|
21011
|
+
const headerActions = runningJobs.length > 0 && /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { align: "center", gap: "2", className: "text-gray-11", children: [
|
|
21012
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "1", weight: "medium", children: "Overall Progress" }),
|
|
20866
21013
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Progress, { value: aggregateProgress, className: "w-20" }),
|
|
20867
|
-
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$
|
|
21014
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$b, { size: "1", className: "text-gray-9", children: [
|
|
20868
21015
|
aggregateProgress,
|
|
20869
21016
|
"%"
|
|
20870
21017
|
] })
|
|
20871
21018
|
] });
|
|
20872
21019
|
return /* @__PURE__ */ jsxRuntimeExports.jsxs(Layout, { title: "Prompt Pipeline", actions: headerActions, children: [
|
|
20873
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
20874
|
-
|
|
20875
|
-
|
|
20876
|
-
|
|
20877
|
-
|
|
20878
|
-
|
|
20879
|
-
|
|
20880
|
-
|
|
20881
|
-
|
|
20882
|
-
|
|
20883
|
-
|
|
20884
|
-
|
|
20885
|
-
|
|
20886
|
-
|
|
20887
|
-
|
|
20888
|
-
|
|
20889
|
-
|
|
20890
|
-
|
|
20891
|
-
|
|
20892
|
-
|
|
20893
|
-
|
|
20894
|
-
|
|
20895
|
-
|
|
20896
|
-
|
|
20897
|
-
|
|
20898
|
-
"
|
|
20899
|
-
|
|
20900
|
-
|
|
20901
|
-
|
|
20902
|
-
|
|
20903
|
-
|
|
20904
|
-
|
|
20905
|
-
|
|
20906
|
-
|
|
20907
|
-
|
|
20908
|
-
|
|
20909
|
-
|
|
20910
|
-
|
|
20911
|
-
|
|
20912
|
-
|
|
20913
|
-
|
|
20914
|
-
|
|
20915
|
-
|
|
20916
|
-
|
|
20917
|
-
|
|
20918
|
-
|
|
20919
|
-
|
|
20920
|
-
|
|
20921
|
-
|
|
20922
|
-
|
|
20923
|
-
|
|
20924
|
-
|
|
20925
|
-
|
|
20926
|
-
|
|
20927
|
-
|
|
20928
|
-
|
|
20929
|
-
|
|
20930
|
-
|
|
20931
|
-
] })
|
|
21020
|
+
error && /* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { className: "mb-4 rounded-md bg-yellow-50 p-3 border border-yellow-200", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", className: "text-yellow-800", children: "Unable to load jobs from the server" }) }),
|
|
21021
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
21022
|
+
m,
|
|
21023
|
+
{
|
|
21024
|
+
value: activeTab,
|
|
21025
|
+
onValueChange: setActiveTab,
|
|
21026
|
+
className: "mt-4",
|
|
21027
|
+
children: [
|
|
21028
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(b, { "aria-label": "Job filters", children: [
|
|
21029
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(P, { value: "current", children: [
|
|
21030
|
+
"Current (",
|
|
21031
|
+
currentCount,
|
|
21032
|
+
")"
|
|
21033
|
+
] }),
|
|
21034
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(P, { value: "errors", children: [
|
|
21035
|
+
"Errors (",
|
|
21036
|
+
errorCount,
|
|
21037
|
+
")"
|
|
21038
|
+
] }),
|
|
21039
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(P, { value: "complete", children: [
|
|
21040
|
+
"Completed (",
|
|
21041
|
+
completedCount,
|
|
21042
|
+
")"
|
|
21043
|
+
] })
|
|
21044
|
+
] }),
|
|
21045
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f, { value: "current", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
21046
|
+
JobTable,
|
|
21047
|
+
{
|
|
21048
|
+
jobs: filteredJobs,
|
|
21049
|
+
pipeline: null,
|
|
21050
|
+
onOpenJob: openJob,
|
|
21051
|
+
overallElapsed,
|
|
21052
|
+
now
|
|
21053
|
+
}
|
|
21054
|
+
) }),
|
|
21055
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f, { value: "errors", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
21056
|
+
JobTable,
|
|
21057
|
+
{
|
|
21058
|
+
jobs: filteredJobs,
|
|
21059
|
+
pipeline: null,
|
|
21060
|
+
onOpenJob: openJob,
|
|
21061
|
+
overallElapsed,
|
|
21062
|
+
now
|
|
21063
|
+
}
|
|
21064
|
+
) }),
|
|
21065
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f, { value: "complete", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
21066
|
+
JobTable,
|
|
21067
|
+
{
|
|
21068
|
+
jobs: filteredJobs,
|
|
21069
|
+
pipeline: null,
|
|
21070
|
+
onOpenJob: openJob,
|
|
21071
|
+
overallElapsed,
|
|
21072
|
+
now
|
|
21073
|
+
}
|
|
21074
|
+
) })
|
|
21075
|
+
]
|
|
21076
|
+
}
|
|
21077
|
+
)
|
|
20932
21078
|
] });
|
|
20933
21079
|
}
|
|
20934
21080
|
function TaskFilePane({
|
|
@@ -22038,16 +22184,25 @@ function computeActiveIndex(items) {
|
|
|
22038
22184
|
if (lastDoneIndex !== -1) return lastDoneIndex;
|
|
22039
22185
|
return 0;
|
|
22040
22186
|
}
|
|
22187
|
+
function formatCurrency4(x) {
|
|
22188
|
+
if (typeof x !== "number" || x === 0) return "$0.0000";
|
|
22189
|
+
const formatted = x.toFixed(4);
|
|
22190
|
+
return `$${formatted.replace(/\.?0+$/, "")}`;
|
|
22191
|
+
}
|
|
22192
|
+
function formatTokensCompact(n2) {
|
|
22193
|
+
if (typeof n2 !== "number" || n2 === 0) return "0 tok";
|
|
22194
|
+
if (n2 >= 1e6) {
|
|
22195
|
+
return `${(n2 / 1e6).toFixed(1).replace(/\.0$/, "")}M tokens`;
|
|
22196
|
+
} else if (n2 >= 1e3) {
|
|
22197
|
+
return `${(n2 / 1e3).toFixed(1).replace(/\.0$/, "")}k tokens`;
|
|
22198
|
+
}
|
|
22199
|
+
return `${n2} tokens`;
|
|
22200
|
+
}
|
|
22041
22201
|
function JobDetail({ job, pipeline, onClose, onResume }) {
|
|
22042
22202
|
const now = useTicker(1e3);
|
|
22043
22203
|
const [resumeFrom, setResumeFrom] = reactExports.useState(
|
|
22044
22204
|
pipeline?.tasks?.[0] ? typeof pipeline.tasks[0] === "string" ? pipeline.tasks[0] : pipeline.tasks[0].id ?? pipeline.tasks[0].name ?? "" : ""
|
|
22045
22205
|
);
|
|
22046
|
-
reactExports.useEffect(() => {
|
|
22047
|
-
setResumeFrom(
|
|
22048
|
-
pipeline?.tasks?.[0] ? typeof pipeline.tasks[0] === "string" ? pipeline.tasks[0] : pipeline.tasks[0].id ?? pipeline.tasks[0].name ?? "" : ""
|
|
22049
|
-
);
|
|
22050
|
-
}, [job.id, pipeline?.tasks?.length]);
|
|
22051
22206
|
const taskById = React.useMemo(() => {
|
|
22052
22207
|
const tasks = job?.tasks;
|
|
22053
22208
|
let result;
|
|
@@ -22067,6 +22222,11 @@ function JobDetail({ job, pipeline, onClose, onResume }) {
|
|
|
22067
22222
|
}
|
|
22068
22223
|
return result;
|
|
22069
22224
|
}, [job?.tasks]);
|
|
22225
|
+
reactExports.useEffect(() => {
|
|
22226
|
+
setResumeFrom(
|
|
22227
|
+
pipeline?.tasks?.[0] ? typeof pipeline.tasks[0] === "string" ? pipeline.tasks[0] : pipeline.tasks[0].id ?? pipeline.tasks[0].name ?? "" : ""
|
|
22228
|
+
);
|
|
22229
|
+
}, [job.id, pipeline?.tasks?.length]);
|
|
22070
22230
|
const computedPipeline = React.useMemo(() => {
|
|
22071
22231
|
let result;
|
|
22072
22232
|
if (pipeline?.tasks) {
|
|
@@ -22115,8 +22275,15 @@ function JobDetail({ job, pipeline, onClose, onResume }) {
|
|
|
22115
22275
|
subtitleParts.push(fmtDuration(durationMs));
|
|
22116
22276
|
}
|
|
22117
22277
|
}
|
|
22278
|
+
const taskBreakdown = job?.costs?.taskBreakdown?.[item.id]?.summary || {};
|
|
22279
|
+
if (taskBreakdown.totalTokens > 0) {
|
|
22280
|
+
subtitleParts.push(formatTokensCompact(taskBreakdown.totalTokens));
|
|
22281
|
+
}
|
|
22282
|
+
if (taskBreakdown.totalCost > 0) {
|
|
22283
|
+
subtitleParts.push(formatCurrency4(taskBreakdown.totalCost));
|
|
22284
|
+
}
|
|
22118
22285
|
const errorMsg = task?.error?.message;
|
|
22119
|
-
const body = item.status === "failed" && errorMsg ? errorMsg : null;
|
|
22286
|
+
const body = (item.status === "failed" || item.status === "error") && errorMsg ? errorMsg : null;
|
|
22120
22287
|
const resultItem = {
|
|
22121
22288
|
...item,
|
|
22122
22289
|
title: typeof item.id === "string" ? item.id : item.id?.name || item.id?.id || `Task ${item.id}`,
|
|
@@ -22138,6 +22305,7 @@ function JobDetail({ job, pipeline, onClose, onResume }) {
|
|
|
22138
22305
|
},
|
|
22139
22306
|
[job]
|
|
22140
22307
|
);
|
|
22308
|
+
console.log("dagItems", dagItems);
|
|
22141
22309
|
return /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "flex h-full flex-col", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22142
22310
|
DAGGrid,
|
|
22143
22311
|
{
|
|
@@ -22325,8 +22493,7 @@ function useJobDetailWithUpdates(jobId) {
|
|
|
22325
22493
|
logger.log("Refetch job data preview:", {
|
|
22326
22494
|
status: jobData?.status,
|
|
22327
22495
|
hasTasks: !!jobData?.tasks,
|
|
22328
|
-
taskKeys: jobData?.tasks ? Object.keys(jobData.tasks) : []
|
|
22329
|
-
hasTasksStatus: !!jobData?.tasksStatus
|
|
22496
|
+
taskKeys: jobData?.tasks ? Object.keys(jobData.tasks) : []
|
|
22330
22497
|
});
|
|
22331
22498
|
if (mountedRef.current) {
|
|
22332
22499
|
logger.log("Refetch successful, updating data");
|
|
@@ -22642,20 +22809,64 @@ function useJobDetailWithUpdates(jobId) {
|
|
|
22642
22809
|
function PipelineDetail() {
|
|
22643
22810
|
const { jobId } = useParams();
|
|
22644
22811
|
if (jobId === void 0 || jobId === null) {
|
|
22645
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22812
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22813
|
+
Layout,
|
|
22814
|
+
{
|
|
22815
|
+
pageTitle: "Pipeline Details",
|
|
22816
|
+
breadcrumbs: [
|
|
22817
|
+
{ label: "Home", href: "/" },
|
|
22818
|
+
{ label: "Pipeline Details" }
|
|
22819
|
+
],
|
|
22820
|
+
showBackButton: true,
|
|
22821
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$4, { align: "center", justify: "center", className: "min-h-64", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { className: "text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "5", weight: "medium", color: "red", className: "mb-2", children: "No job ID provided" }) }) })
|
|
22822
|
+
}
|
|
22823
|
+
);
|
|
22646
22824
|
}
|
|
22647
22825
|
const { data: job, loading, error } = useJobDetailWithUpdates(jobId);
|
|
22648
22826
|
if (loading) {
|
|
22649
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22827
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22828
|
+
Layout,
|
|
22829
|
+
{
|
|
22830
|
+
pageTitle: "Pipeline Details",
|
|
22831
|
+
breadcrumbs: [
|
|
22832
|
+
{ label: "Home", href: "/" },
|
|
22833
|
+
{ label: "Pipeline Details" }
|
|
22834
|
+
],
|
|
22835
|
+
showBackButton: true,
|
|
22836
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$4, { align: "center", justify: "center", className: "min-h-64", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { className: "text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "5", weight: "medium", className: "mb-2", children: "Loading job details..." }) }) })
|
|
22837
|
+
}
|
|
22838
|
+
);
|
|
22650
22839
|
}
|
|
22651
22840
|
if (error) {
|
|
22652
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22653
|
-
|
|
22654
|
-
|
|
22655
|
-
|
|
22841
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22842
|
+
Layout,
|
|
22843
|
+
{
|
|
22844
|
+
pageTitle: "Pipeline Details",
|
|
22845
|
+
breadcrumbs: [
|
|
22846
|
+
{ label: "Home", href: "/" },
|
|
22847
|
+
{ label: "Pipeline Details" }
|
|
22848
|
+
],
|
|
22849
|
+
showBackButton: true,
|
|
22850
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$4, { align: "center", justify: "center", className: "min-h-64", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$7, { className: "text-center", children: [
|
|
22851
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "5", weight: "medium", color: "red", className: "mb-2", children: "Failed to load job details" }),
|
|
22852
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "2", color: "gray", className: "mt-2", children: error })
|
|
22853
|
+
] }) })
|
|
22854
|
+
}
|
|
22855
|
+
);
|
|
22656
22856
|
}
|
|
22657
22857
|
if (!job) {
|
|
22658
|
-
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22858
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22859
|
+
Layout,
|
|
22860
|
+
{
|
|
22861
|
+
pageTitle: "Pipeline Details",
|
|
22862
|
+
breadcrumbs: [
|
|
22863
|
+
{ label: "Home", href: "/" },
|
|
22864
|
+
{ label: "Pipeline Details" }
|
|
22865
|
+
],
|
|
22866
|
+
showBackButton: true,
|
|
22867
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$4, { align: "center", justify: "center", className: "min-h-64", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { className: "text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { size: "5", weight: "medium", className: "mb-2", children: "Job not found" }) }) })
|
|
22868
|
+
}
|
|
22869
|
+
);
|
|
22659
22870
|
}
|
|
22660
22871
|
const pipeline = job?.pipeline || (() => {
|
|
22661
22872
|
if (!job?.tasks) return { tasks: [] };
|
|
@@ -22667,23 +22878,220 @@ function PipelineDetail() {
|
|
|
22667
22878
|
}
|
|
22668
22879
|
return { tasks: pipelineTasks };
|
|
22669
22880
|
})();
|
|
22670
|
-
const
|
|
22671
|
-
|
|
22881
|
+
const pageTitle = job.name || "Pipeline Details";
|
|
22882
|
+
const breadcrumbs = [
|
|
22883
|
+
{ label: "Home", href: "/" },
|
|
22884
|
+
{ label: "Pipeline Details" },
|
|
22885
|
+
...job.name ? [{ label: job.name }] : []
|
|
22886
|
+
];
|
|
22887
|
+
const subheaderRightContent = /* @__PURE__ */ jsxRuntimeExports.jsxs(p$4, { align: "center", gap: "3", className: "shrink-0", children: [
|
|
22888
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$b, { size: "2", color: "gray", children: [
|
|
22672
22889
|
"ID: ",
|
|
22673
22890
|
job.id || jobId
|
|
22674
22891
|
] }),
|
|
22675
22892
|
statusBadge(job.status)
|
|
22676
22893
|
] });
|
|
22677
|
-
return /* @__PURE__ */ jsxRuntimeExports.
|
|
22894
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(
|
|
22678
22895
|
Layout,
|
|
22679
22896
|
{
|
|
22680
|
-
|
|
22897
|
+
pageTitle,
|
|
22898
|
+
breadcrumbs,
|
|
22681
22899
|
showBackButton: true,
|
|
22682
|
-
|
|
22683
|
-
|
|
22900
|
+
children: [
|
|
22901
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(PageSubheader, { breadcrumbs, maxWidth: "max-w-7xl", children: subheaderRightContent }),
|
|
22902
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(JobDetail, { job, pipeline })
|
|
22903
|
+
]
|
|
22684
22904
|
}
|
|
22685
22905
|
);
|
|
22686
22906
|
}
|
|
22907
|
+
const ioFunctions = [
|
|
22908
|
+
{
|
|
22909
|
+
name: "writeArtifact",
|
|
22910
|
+
description: "Write an artifact file",
|
|
22911
|
+
params: 'name: string, content: string, options?: { mode?: "replace"|"append"=replace }',
|
|
22912
|
+
returns: "Promise<string>",
|
|
22913
|
+
notes: "Writes to {workDir}/files/artifacts; updates tasks-status.json"
|
|
22914
|
+
},
|
|
22915
|
+
{
|
|
22916
|
+
name: "writeLog",
|
|
22917
|
+
description: "Write a log file",
|
|
22918
|
+
params: 'name: string, content: string, options?: { mode?: "append"|"replace"=append }',
|
|
22919
|
+
returns: "Promise<string>",
|
|
22920
|
+
notes: "Writes to {workDir}/files/logs; default append; updates tasks-status.json"
|
|
22921
|
+
},
|
|
22922
|
+
{
|
|
22923
|
+
name: "writeTmp",
|
|
22924
|
+
description: "Write a temporary file",
|
|
22925
|
+
params: 'name: string, content: string, options?: { mode?: "replace"|"append"=replace }',
|
|
22926
|
+
returns: "Promise<string>",
|
|
22927
|
+
notes: "Writes to {workDir}/files/tmp; updates tasks-status.json"
|
|
22928
|
+
},
|
|
22929
|
+
{
|
|
22930
|
+
name: "readArtifact",
|
|
22931
|
+
description: "Read an artifact file",
|
|
22932
|
+
params: "name: string",
|
|
22933
|
+
returns: "Promise<string>",
|
|
22934
|
+
notes: "Reads from {workDir}/files/artifacts"
|
|
22935
|
+
},
|
|
22936
|
+
{
|
|
22937
|
+
name: "readLog",
|
|
22938
|
+
description: "Read a log file",
|
|
22939
|
+
params: "name: string",
|
|
22940
|
+
returns: "Promise<string>",
|
|
22941
|
+
notes: "Reads from {workDir}/files/logs"
|
|
22942
|
+
},
|
|
22943
|
+
{
|
|
22944
|
+
name: "readTmp",
|
|
22945
|
+
description: "Read a temporary file",
|
|
22946
|
+
params: "name: string",
|
|
22947
|
+
returns: "Promise<string>",
|
|
22948
|
+
notes: "Reads from {workDir}/files/tmp"
|
|
22949
|
+
},
|
|
22950
|
+
{
|
|
22951
|
+
name: "getTaskDir",
|
|
22952
|
+
description: "Get the task directory path",
|
|
22953
|
+
params: "",
|
|
22954
|
+
returns: "string",
|
|
22955
|
+
notes: "Returns {workDir}/tasks/{taskName}"
|
|
22956
|
+
},
|
|
22957
|
+
{
|
|
22958
|
+
name: "getCurrentStage",
|
|
22959
|
+
description: "Get the current stage name",
|
|
22960
|
+
params: "",
|
|
22961
|
+
returns: "string",
|
|
22962
|
+
notes: "Calls injected getStage()"
|
|
22963
|
+
}
|
|
22964
|
+
];
|
|
22965
|
+
const sampleSeed = {
|
|
22966
|
+
name: "some-name",
|
|
22967
|
+
pipeline: "content-generation",
|
|
22968
|
+
data: {
|
|
22969
|
+
type: "some-type",
|
|
22970
|
+
contentType: "blog-post",
|
|
22971
|
+
targetAudience: "software-developers",
|
|
22972
|
+
tone: "professional-yet-accessible",
|
|
22973
|
+
length: "1500-2000 words",
|
|
22974
|
+
outputFormat: "blog-post"
|
|
22975
|
+
}
|
|
22976
|
+
};
|
|
22977
|
+
function CodePage() {
|
|
22978
|
+
const [llmFunctions, setLlmFunctions] = reactExports.useState(null);
|
|
22979
|
+
reactExports.useEffect(() => {
|
|
22980
|
+
fetch("/api/llm/functions").then((res) => res.json()).then(setLlmFunctions).catch(console.error);
|
|
22981
|
+
}, []);
|
|
22982
|
+
const breadcrumbs = [{ label: "Home", href: "/" }, { label: "Code" }];
|
|
22983
|
+
const handleCopySeed = () => {
|
|
22984
|
+
navigator.clipboard.writeText(JSON.stringify(sampleSeed, null, 2));
|
|
22985
|
+
};
|
|
22986
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsxs(Layout, { children: [
|
|
22987
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(PageSubheader, { breadcrumbs }),
|
|
22988
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$7, { children: [
|
|
22989
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$7, { mb: "8", children: [
|
|
22990
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(r$8, { size: "6", mb: "4", children: "Seed File Example" }),
|
|
22991
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { as: "p", mb: "3", size: "2", children: "A seed file is a JSON object used to start a new pipeline job. It defines the job name, the pipeline to run, and any contextual data the pipeline requires to begin." }),
|
|
22992
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { as: "p", mb: "3", size: "2", weight: "bold", children: "Required fields:" }),
|
|
22993
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("ul", { className: "list-disc list-inside mb-4 space-y-1", children: [
|
|
22994
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "text-sm text-gray-700", children: [
|
|
22995
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { as: "span", weight: "bold", children: "name" }),
|
|
22996
|
+
" ",
|
|
22997
|
+
"(string): Human-friendly title; non-empty, printable only, ≤120 chars; must be unique."
|
|
22998
|
+
] }),
|
|
22999
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "text-sm text-gray-700", children: [
|
|
23000
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { as: "span", weight: "bold", children: "pipeline" }),
|
|
23001
|
+
" ",
|
|
23002
|
+
"(string): Pipeline slug defined in your registry (e.g., content-generation)."
|
|
23003
|
+
] }),
|
|
23004
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs("li", { className: "text-sm text-gray-700", children: [
|
|
23005
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$b, { as: "span", weight: "bold", children: "data" }),
|
|
23006
|
+
" ",
|
|
23007
|
+
"(object): Required but flexible; include any arbitrary keys your pipeline tasks expect."
|
|
23008
|
+
] })
|
|
23009
|
+
] }),
|
|
23010
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { mb: "3", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
23011
|
+
Button,
|
|
23012
|
+
{
|
|
23013
|
+
size: "1",
|
|
23014
|
+
onClick: handleCopySeed,
|
|
23015
|
+
"data-testid": "copy-seed-example",
|
|
23016
|
+
children: "Copy"
|
|
23017
|
+
}
|
|
23018
|
+
) }),
|
|
23019
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("pre", { className: "text-xs bg-gray-50 p-3 rounded overflow-auto max-h-60 border border-gray-200", children: JSON.stringify(sampleSeed, null, 2) })
|
|
23020
|
+
] }),
|
|
23021
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(r$8, { size: "6", mb: "4", children: "Pipeline Task IO API" }),
|
|
23022
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { overflowX: "auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(m$1, { children: [
|
|
23023
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(d, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(P$1, { children: [
|
|
23024
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Function" }),
|
|
23025
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Parameters" }),
|
|
23026
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Returns" }),
|
|
23027
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Notes" })
|
|
23028
|
+
] }) }),
|
|
23029
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(b$1, { children: ioFunctions.map((fn) => /* @__PURE__ */ jsxRuntimeExports.jsxs(P$1, { children: [
|
|
23030
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(R, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$2, { size: "3", children: [
|
|
23031
|
+
"io.",
|
|
23032
|
+
fn.name
|
|
23033
|
+
] }) }),
|
|
23034
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: fn.params || "—" }) }),
|
|
23035
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: fn.returns }) }),
|
|
23036
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(T, { children: [
|
|
23037
|
+
fn.description,
|
|
23038
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx("br", {}),
|
|
23039
|
+
fn.notes
|
|
23040
|
+
] })
|
|
23041
|
+
] }, fn.name)) })
|
|
23042
|
+
] }) }),
|
|
23043
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(r$8, { size: "6", mt: "8", mb: "4", children: "Pipeline Task LLM API" }),
|
|
23044
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$7, { mb: "4", children: [
|
|
23045
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(r$8, { size: "4", mb: "2", children: "Arguments" }),
|
|
23046
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", mb: "4", children: `{
|
|
23047
|
+
messages: Array<{role: "system"|"user"|"assistant", content: string }>,
|
|
23048
|
+
temperature?: number,
|
|
23049
|
+
maxTokens?: number,
|
|
23050
|
+
responseFormat?: "json" | { type: "json_object" | { type: "json_schema", name: string, json_schema: object } },
|
|
23051
|
+
stop?: string | string[],
|
|
23052
|
+
topP?: number,
|
|
23053
|
+
frequencyPenalty?: number,
|
|
23054
|
+
presencePenalty?: number,
|
|
23055
|
+
tools?: Array<{type: "function", function: object}>,
|
|
23056
|
+
toolChoice?: "auto" | "required" | { type: "function", function: { name: string } },
|
|
23057
|
+
seed?: number,
|
|
23058
|
+
provider?: string,
|
|
23059
|
+
model?: string,
|
|
23060
|
+
metadata?: object,
|
|
23061
|
+
maxRetries?: number
|
|
23062
|
+
}` }),
|
|
23063
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(r$8, { size: "4", mb: "2", children: "Returns" }),
|
|
23064
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: `Promise<{ content: any, usage?: object, raw?: any }>` })
|
|
23065
|
+
] }),
|
|
23066
|
+
llmFunctions && /* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { overflowX: "auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(m$1, { children: [
|
|
23067
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(d, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(P$1, { children: [
|
|
23068
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Function" }),
|
|
23069
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Model" })
|
|
23070
|
+
] }) }),
|
|
23071
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(b$1, { children: Object.entries(llmFunctions).map(
|
|
23072
|
+
([provider, functions]) => functions.map((fn) => /* @__PURE__ */ jsxRuntimeExports.jsxs(P$1, { children: [
|
|
23073
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(R, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: fn.fullPath }) }),
|
|
23074
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(T, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: fn.model }) })
|
|
23075
|
+
] }, fn.fullPath))
|
|
23076
|
+
) })
|
|
23077
|
+
] }) }),
|
|
23078
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(r$8, { size: "6", mt: "8", mb: "4", children: "Environment Configuration" }),
|
|
23079
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(p$7, { mb: "4", children: [
|
|
23080
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(r$8, { size: "4", mb: "2", children: "Example .env Configuration" }),
|
|
23081
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(p$7, { overflowX: "auto", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(m$1, { children: [
|
|
23082
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(d, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(P$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(f$1, { children: "Environment Variable" }) }) }),
|
|
23083
|
+
/* @__PURE__ */ jsxRuntimeExports.jsxs(b$1, { children: [
|
|
23084
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(P$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(R, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: "OPENAI_API_KEY=" }) }) }),
|
|
23085
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(P$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(R, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: "DEEPSEEK_API_KEY=" }) }) }),
|
|
23086
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(P$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(R, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: "GEMINI_API_KEY=" }) }) }),
|
|
23087
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(P$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(R, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: "ANTHROPIC_API_KEY=" }) }) }),
|
|
23088
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(P$1, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(R, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$2, { size: "3", children: "Z_API_KEY=" }) }) })
|
|
23089
|
+
] })
|
|
23090
|
+
] }) })
|
|
23091
|
+
] })
|
|
23092
|
+
] })
|
|
23093
|
+
] });
|
|
23094
|
+
}
|
|
22687
23095
|
ReactDOM.createRoot(document.getElementById("root")).render(
|
|
22688
23096
|
/* @__PURE__ */ jsxRuntimeExports.jsx(React.StrictMode, { children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
22689
23097
|
R$1,
|
|
@@ -22695,7 +23103,8 @@ ReactDOM.createRoot(document.getElementById("root")).render(
|
|
|
22695
23103
|
radius: "full",
|
|
22696
23104
|
children: /* @__PURE__ */ jsxRuntimeExports.jsx(BrowserRouter, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(Routes, { children: [
|
|
22697
23105
|
/* @__PURE__ */ jsxRuntimeExports.jsx(Route, { path: "/", element: /* @__PURE__ */ jsxRuntimeExports.jsx(PromptPipelineDashboard, {}) }),
|
|
22698
|
-
/* @__PURE__ */ jsxRuntimeExports.jsx(Route, { path: "/pipeline/:jobId", element: /* @__PURE__ */ jsxRuntimeExports.jsx(PipelineDetail, {}) })
|
|
23106
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Route, { path: "/pipeline/:jobId", element: /* @__PURE__ */ jsxRuntimeExports.jsx(PipelineDetail, {}) }),
|
|
23107
|
+
/* @__PURE__ */ jsxRuntimeExports.jsx(Route, { path: "/code", element: /* @__PURE__ */ jsxRuntimeExports.jsx(CodePage, {}) })
|
|
22699
23108
|
] }) })
|
|
22700
23109
|
}
|
|
22701
23110
|
) })
|