@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.
Files changed (36) hide show
  1. package/package.json +1 -1
  2. package/src/components/JobCard.jsx +1 -1
  3. package/src/components/JobDetail.jsx +45 -12
  4. package/src/components/JobTable.jsx +40 -1
  5. package/src/components/Layout.jsx +146 -22
  6. package/src/components/PageSubheader.jsx +75 -0
  7. package/src/components/UploadSeed.jsx +0 -70
  8. package/src/components/ui/Logo.jsx +16 -0
  9. package/src/core/config.js +145 -13
  10. package/src/core/file-io.js +12 -27
  11. package/src/core/orchestrator.js +92 -78
  12. package/src/core/pipeline-runner.js +13 -6
  13. package/src/core/status-writer.js +63 -52
  14. package/src/core/task-runner.js +61 -1
  15. package/src/llm/index.js +97 -40
  16. package/src/pages/Code.jsx +297 -0
  17. package/src/pages/PipelineDetail.jsx +47 -8
  18. package/src/pages/PromptPipelineDashboard.jsx +6 -53
  19. package/src/providers/deepseek.js +17 -1
  20. package/src/providers/openai.js +1 -1
  21. package/src/ui/client/adapters/job-adapter.js +26 -2
  22. package/src/ui/client/hooks/useJobDetailWithUpdates.js +0 -1
  23. package/src/ui/client/index.css +6 -0
  24. package/src/ui/client/index.html +1 -1
  25. package/src/ui/client/main.jsx +2 -0
  26. package/src/ui/dist/assets/{index-CxcrauYR.js → index-WgJUlSmE.js} +716 -307
  27. package/src/ui/dist/assets/style-x0V-5m8e.css +62 -0
  28. package/src/ui/dist/index.html +3 -3
  29. package/src/ui/job-reader.js +0 -108
  30. package/src/ui/server.js +54 -0
  31. package/src/ui/sse-enhancer.js +0 -1
  32. package/src/ui/transformers/list-transformer.js +32 -12
  33. package/src/ui/transformers/status-transformer.js +11 -11
  34. package/src/utils/token-cost-calculator.js +297 -0
  35. package/src/utils/ui.jsx +4 -4
  36. 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$8 = { asChild: { type: "boolean" } };
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$g = { 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$7 = ["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$d = { color: { type: "enum", values: o$7, default: void 0 } }, s$5 = { color: { type: "enum", values: o$7, default: "" } };
19208
- const o$6 = { highContrast: { type: "boolean", className: "rt-high-contrast", default: void 0 } };
19209
- const e$f = ["normal", "start", "end", "both"], r$c = { trim: { type: "enum", className: "rt-r-lt", values: e$f, responsive: true } };
19210
- const e$e = ["left", "center", "right"], t$6 = { align: { type: "enum", className: "rt-r-ta", values: e$e, responsive: true } };
19211
- const e$d = ["wrap", "nowrap", "pretty", "balance"], r$b = { wrap: { type: "enum", className: "rt-r-tw", values: e$d, responsive: true } };
19212
- const e$c = { truncate: { type: "boolean", className: "rt-truncate" } };
19213
- const e$b = ["light", "regular", "medium", "bold"], t$5 = { weight: { type: "enum", className: "rt-r-weight", values: e$b, 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$8, size: { type: "enum", className: "rt-r-size", values: a$9, default: "6", responsive: true }, ...t$5, ...t$6, ...r$c, ...e$c, ...r$b, ...r$d, ...o$6 };
19215
- const e$a = ["initial", "xs", "sm", "md", "lg", "xl"];
19216
- function e$9(n2, r2) {
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$3(e2) {
19220
- return typeof e2 == "object" && Object.keys(e2).some((s2) => e$a.includes(s2));
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$3(n2)) {
19230
+ if (i$4(n2)) {
19231
19231
  const i2 = n2;
19232
19232
  for (const o2 in i2) {
19233
- if (!e$9(i2, o2) || !e$a.includes(o2)) continue;
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$3(n2)) {
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$9(s2, i2) || !e$a.includes(i2)) continue;
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$3(s2) && (s2 = e2.default), a2[n2] = s2, "className" in e2 && e2.className) {
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$3(s2) && !u2) continue;
19290
- if (i$3(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") {
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$8 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9"], r$a = { m: { type: "enum | string", values: e$8, responsive: true, className: "rt-r-m", customProperties: ["--m"] }, mx: { type: "enum | string", values: e$8, responsive: true, className: "rt-r-mx", customProperties: ["--ml", "--mr"] }, my: { type: "enum | string", values: e$8, responsive: true, className: "rt-r-my", customProperties: ["--mt", "--mb"] }, mt: { type: "enum | string", values: e$8, responsive: true, className: "rt-r-mt", customProperties: ["--mt"] }, mr: { type: "enum | string", values: e$8, responsive: true, className: "rt-r-mr", customProperties: ["--mr"] }, mb: { type: "enum | string", values: e$8, responsive: true, className: "rt-r-mb", customProperties: ["--mb"] }, ml: { type: "enum | string", values: e$8, responsive: true, className: "rt-r-ml", customProperties: ["--ml"] } };
19309
- const r$9 = reactExports.forwardRef((p2, t2) => {
19310
- const { children: e2, className: s2, asChild: a2, as: n2 = "h1", color: i2, ...m2 } = v(p2, n$7, r$a);
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$9.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$8, size: { type: "enum", className: "rt-r-size", values: a$8, responsive: true }, ...t$5, ...t$6, ...r$c, ...e$c, ...r$b, ...r$d, ...o$6 };
19315
- const p$a = reactExports.forwardRef((t2, r2) => {
19316
- const { children: e2, className: s2, asChild: m2, as: a2 = "span", color: n2, ...P2 } = v(t2, n$6, r$a);
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$a.displayName = "Text";
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$7 = ["none", "small", "medium", "large", "full"], r$8 = { radius: { type: "enum", values: e$7, default: void 0 } };
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$6 = Slot;
19389
- const s$3 = ["div", "span"], o$5 = ["none", "inline", "inline-block", "block", "contents"], p$9 = { as: { type: "enum", values: s$3, default: "div" }, ...o$8, display: { type: "enum", className: "rt-r-display", values: o$5, responsive: true } };
19390
- const e$5 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], p$8 = { p: { type: "enum | string", className: "rt-r-p", customProperties: ["--p"], values: e$5, responsive: true }, px: { type: "enum | string", className: "rt-r-px", customProperties: ["--pl", "--pr"], values: e$5, responsive: true }, py: { type: "enum | string", className: "rt-r-py", customProperties: ["--pt", "--pb"], values: e$5, responsive: true }, pt: { type: "enum | string", className: "rt-r-pt", customProperties: ["--pt"], values: e$5, responsive: true }, pr: { type: "enum | string", className: "rt-r-pr", customProperties: ["--pr"], values: e$5, responsive: true }, pb: { type: "enum | string", className: "rt-r-pb", customProperties: ["--pb"], values: e$5, responsive: true }, pl: { type: "enum | string", className: "rt-r-pl", customProperties: ["--pl"], values: e$5, responsive: true } };
19391
- const r$7 = ["visible", "hidden", "clip", "scroll", "auto"], i$2 = ["static", "relative", "absolute", "fixed", "sticky"], e$4 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "-1", "-2", "-3", "-4", "-5", "-6", "-7", "-8", "-9"], p$7 = ["0", "1"], n$5 = ["0", "1"], u$3 = { ...p$8, ...t$7, ...e$g, position: { type: "enum", className: "rt-r-position", values: i$2, responsive: true }, inset: { type: "enum | string", className: "rt-r-inset", customProperties: ["--inset"], values: e$4, responsive: true }, top: { type: "enum | string", className: "rt-r-top", customProperties: ["--top"], values: e$4, responsive: true }, right: { type: "enum | string", className: "rt-r-right", customProperties: ["--right"], values: e$4, responsive: true }, bottom: { type: "enum | string", className: "rt-r-bottom", customProperties: ["--bottom"], values: e$4, responsive: true }, left: { type: "enum | string", className: "rt-r-left", customProperties: ["--left"], values: e$4, responsive: true }, overflow: { type: "enum", className: "rt-r-overflow", values: r$7, responsive: true }, overflowX: { type: "enum", className: "rt-r-ox", values: r$7, responsive: true }, overflowY: { type: "enum", className: "rt-r-oy", values: r$7, 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$7, 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$6 = reactExports.forwardRef((r2, s2) => {
19393
- const { className: t2, asChild: e2, as: m2 = "div", ...a2 } = v(r2, p$9, u$3, r$a);
19394
- return reactExports.createElement(e2 ? e$6 : m2, { ...a2, ref: s2, className: y("rt-Box", t2) });
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$6.displayName = "Box";
19397
- const t$4 = ["1", "2", "3", "4"], a$6 = ["classic", "solid", "soft", "surface", "outline", "ghost"], i$1 = { ...o$8, 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$6, ...r$8, loading: { type: "boolean", className: "rt-loading", default: false } };
19398
- const e$3 = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"], p$5 = { gap: { type: "enum | string", className: "rt-r-gap", customProperties: ["--gap"], values: e$3, responsive: true }, gapX: { type: "enum | string", className: "rt-r-cg", customProperties: ["--column-gap"], values: e$3, responsive: true }, gapY: { type: "enum | string", className: "rt-r-rg", customProperties: ["--row-gap"], values: e$3, responsive: true } };
19399
- const t$3 = ["div", "span"], p$4 = ["none", "inline-flex", "flex"], a$5 = ["row", "column", "row-reverse", "column-reverse"], o$4 = ["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$8, display: { type: "enum", className: "rt-r-display", values: p$4, responsive: true }, direction: { type: "enum", className: "rt-r-fd", values: a$5, responsive: true }, align: { type: "enum", className: "rt-r-ai", values: o$4, responsive: true }, justify: { type: "enum", className: "rt-r-jc", values: n$4, parseValue: f$4, responsive: true }, wrap: { type: "enum", className: "rt-r-fw", values: l$1, responsive: true }, ...p$5 };
19400
- function f$4(e2) {
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$3 = reactExports.forwardRef((r2, e2) => {
19404
- const { className: s2, asChild: t2, as: m2 = "div", ...l2 } = v(r2, u$2, u$3, r$a);
19405
- return reactExports.createElement(t2 ? e$6 : m2, { ...l2, ref: e2, className: y("rt-Flex", s2) });
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$3.displayName = "Flex";
19408
- const e$2 = ["1", "2", "3"], s$2 = { size: { type: "enum", className: "rt-r-size", values: e$2, default: "2", responsive: true }, loading: { type: "boolean", default: true } };
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$a);
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$3, { 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$3, { asChild: true, align: "center", justify: "center", position: "absolute", inset: "0" }, reactExports.createElement("span", null, r2))));
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$2(e2) {
19420
+ function p$3(e2) {
19421
19421
  return e2 === "3" ? "3" : "2";
19422
19422
  }
19423
- function r$6(e2) {
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$1.size.default } = t2, { className: a2, children: e2, asChild: m2, color: d2, radius: l2, disabled: s$22 = t2.loading, ...u2 } = v(t2, i$1, r$a), 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$3, { asChild: true, align: "center", justify: "center", position: "absolute", inset: "0" }, reactExports.createElement("span", null, reactExports.createElement(s$1, { size: s(i2, r$6) })))) : e2);
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$3 = reactExports.forwardRef(({ className: e2, ...n2 }, r2) => reactExports.createElement(n$3, { ...n2, ref: r2, className: y("rt-Button", e2) }));
19440
- o$3.displayName = "Button";
19441
- const t$2 = ["1", "2", "3"], r$5 = ["soft", "surface", "outline"], a$4 = { ...o$8, size: { type: "enum", className: "rt-r-size", values: t$2, default: "2", responsive: true }, variant: { type: "enum", className: "rt-variant", values: r$5, default: "soft" }, ...s$5, ...o$6 };
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$a), P2 = r2 ? Slot : "div";
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$a, { as: "p", size: s(r2, p$2), ...l2, asChild: false, ref: e2, className: y("rt-CalloutText", t2) });
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 e$1 = ["1", "2", "3", "4", "5"], r$4 = ["surface", "classic", "ghost"], a$2 = { ...o$8, size: { type: "enum", className: "rt-r-size", values: e$1, default: "1", responsive: true }, variant: { type: "enum", className: "rt-variant", values: r$4, default: "surface" } };
19455
- const o$2 = reactExports.forwardRef((p2, e2) => {
19456
- const { asChild: t2, className: s2, ...a2 } = v(p2, a$2, r$a), m2 = t2 ? Slot : "div";
19457
- return reactExports.createElement(m2, { ref: e2, ...a2, className: y("rt-reset", "rt-BaseCard", "rt-Card", s2) });
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
- o$2.displayName = "Card";
19460
- const r$3 = ["1", "2", "3"], t$1 = { ...o$8, size: { values: r$3, default: "1" }, ...r$8, scrollbars: { default: "both" } };
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$a.m.values;
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$8, size: { type: "enum", className: "rt-r-size", values: n$1, responsive: true }, ...t$5, ...r$c, ...e$c, ...r$b, underline: { type: "enum", className: "rt-underline", values: f$3, default: "auto" }, ...s$5, ...o$6 };
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$a, { ...m2, "data-accent-color": n2, ref: t2, asChild: true, className: y("rt-reset", "rt-Link", s2) }, i2 ? r2 : reactExports.createElement("a", null, r2));
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$d, ...o$6 };
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$8 };
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$a), w = g({ value: y$1, className: n.layout.className, propValues: n.layout.values });
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$a);
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$a);
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$a);
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.tasksStatus;
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.tasksStatus;
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$3 = [
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$3);
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$2 = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
20272
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$2);
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$1 = [
20280
- ["path", { d: "M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8", key: "5wwlr5" }],
20281
- [
20282
- "path",
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 House = createLucideIcon("house", __iconNode$1);
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, { variant: "info", "aria-label": "Running", children: "Running" });
20351
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { intent: "blue", "aria-label": "Running", children: "Running" });
20326
20352
  case "failed":
20327
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "error", "aria-label": "Failed", children: "Failed" });
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, { variant: "success", "aria-label": "Completed", children: "Completed" });
20356
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { intent: "green", "aria-label": "Completed", children: "Completed" });
20331
20357
  case "pending":
20332
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Badge, { variant: "default", "aria-label": "Pending", children: "Pending" });
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$6, { className: "p-6", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "2", className: "text-slate-600", children: "No jobs to show here yet." }) });
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$6, { children: /* @__PURE__ */ jsxRuntimeExports.jsxs(m$1, { radius: "none", children: [
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.title || job.name;
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$3, { direction: "column", gap: "1", children: [
20398
- /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "2", weight: "medium", className: "text-slate-900", children: jobTitle }),
20399
- /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "1", className: "text-slate-500", children: job.id })
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$3, { direction: "column", gap: "1", children: [
20402
- /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "2", className: "text-slate-900", children: job.pipelineLabel || job.pipeline || "—" }),
20403
- job.pipelineLabel && job.pipeline && /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "1", className: "text-slate-500", children: job.pipeline })
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$3, { direction: "column", gap: "1", children: [
20407
- /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "2", className: "text-slate-700", children: currentTaskName ? currentTaskName : job.status === "completed" ? "—" : job.current ?? "—" }),
20408
- currentTask && /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "1", className: "text-slate-500", children: [
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$3, { direction: "column", gap: "2", className: "w-32", children: [
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$a, { size: "1", className: "text-slate-500", children: [
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$a, { size: "2", className: "text-slate-700", children: [
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$3, { align: "center", gap: "1", children: [
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$a, { size: "2", className: "text-slate-700", children: fmtDuration(duration) })
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$3,
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$3,
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$6,
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 === "/") return true;
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
- return /* @__PURE__ */ jsxRuntimeExports.jsx(Provider, { delayDuration: 200, children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$6, { className: "min-h-screen bg-gray-1", children: [
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$6,
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$6,
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$3,
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$3, { align: "center", gap: "3", className: "min-w-0 flex-1", children: [
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$a, { size: "2", children: "Go back" }) })
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
- r$9,
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
- size: "5",
20747
- weight: "medium",
20748
- className: "text-gray-12 truncate",
20749
- children: title || "Prompt Pipeline"
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$3, { align: "center", gap: "6", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
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$3, { align: "center", gap: "2", children: [
20766
- /* @__PURE__ */ jsxRuntimeExports.jsx(House, { className: "h-4 w-4" }),
20767
- "Dashboard"
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
- actions && /* @__PURE__ */ jsxRuntimeExports.jsx(p$3, { align: "center", gap: "3", className: "shrink-0", children: actions })
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 py-6`,
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 handleSeedUploadSuccess = ({ jobName }) => {
20847
- if (seedUploadTimer) {
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$a, { size: "1", className: "text-gray-9", children: [
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(o$2, { className: "mb-6", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$3, { direction: "column", gap: "3", children: [
20874
- /* @__PURE__ */ jsxRuntimeExports.jsx(r$9, { size: "4", weight: "medium", className: "text-gray-12", children: "Upload Seed File" }),
20875
- seedUploadSuccess && /* @__PURE__ */ jsxRuntimeExports.jsx(p$6, { className: "rounded-md bg-green-50 p-3 border border-green-200", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$a, { size: "2", className: "text-green-800", children: [
20876
- "Job ",
20877
- /* @__PURE__ */ jsxRuntimeExports.jsx("strong", { children: seedUploadSuccess }),
20878
- " created successfully"
20879
- ] }) }),
20880
- /* @__PURE__ */ jsxRuntimeExports.jsx(UploadSeed, { onUploadSuccess: handleSeedUploadSuccess })
20881
- ] }) }),
20882
- error && /* @__PURE__ */ jsxRuntimeExports.jsx(p$6, { className: "mb-4 rounded-md bg-yellow-50 p-3 border border-yellow-200", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "2", className: "text-yellow-800", children: "Unable to load jobs from the server" }) }),
20883
- /* @__PURE__ */ jsxRuntimeExports.jsxs(m, { value: activeTab, onValueChange: setActiveTab, children: [
20884
- /* @__PURE__ */ jsxRuntimeExports.jsxs(b, { "aria-label": "Job filters", children: [
20885
- /* @__PURE__ */ jsxRuntimeExports.jsxs(P, { value: "current", children: [
20886
- "Current (",
20887
- currentCount,
20888
- ")"
20889
- ] }),
20890
- /* @__PURE__ */ jsxRuntimeExports.jsxs(P, { value: "errors", children: [
20891
- "Errors (",
20892
- errorCount,
20893
- ")"
20894
- ] }),
20895
- /* @__PURE__ */ jsxRuntimeExports.jsxs(P, { value: "complete", children: [
20896
- "Completed (",
20897
- completedCount,
20898
- ")"
20899
- ] })
20900
- ] }),
20901
- /* @__PURE__ */ jsxRuntimeExports.jsx(f, { value: "current", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
20902
- JobTable,
20903
- {
20904
- jobs: filteredJobs,
20905
- pipeline: null,
20906
- onOpenJob: openJob,
20907
- overallElapsed,
20908
- now
20909
- }
20910
- ) }),
20911
- /* @__PURE__ */ jsxRuntimeExports.jsx(f, { value: "errors", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
20912
- JobTable,
20913
- {
20914
- jobs: filteredJobs,
20915
- pipeline: null,
20916
- onOpenJob: openJob,
20917
- overallElapsed,
20918
- now
20919
- }
20920
- ) }),
20921
- /* @__PURE__ */ jsxRuntimeExports.jsx(f, { value: "complete", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
20922
- JobTable,
20923
- {
20924
- jobs: filteredJobs,
20925
- pipeline: null,
20926
- onOpenJob: openJob,
20927
- overallElapsed,
20928
- now
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(Layout, { title: "Pipeline Details", showBackButton: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$3, { align: "center", justify: "center", className: "min-h-64", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$6, { className: "text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "5", weight: "medium", color: "red", className: "mb-2", children: "No job ID provided" }) }) }) });
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(Layout, { title: "Pipeline Details", showBackButton: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$3, { align: "center", justify: "center", className: "min-h-64", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$6, { className: "text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "5", weight: "medium", className: "mb-2", children: "Loading job details..." }) }) }) });
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(Layout, { title: "Pipeline Details", showBackButton: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$3, { align: "center", justify: "center", className: "min-h-64", children: /* @__PURE__ */ jsxRuntimeExports.jsxs(p$6, { className: "text-center", children: [
22653
- /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "5", weight: "medium", color: "red", className: "mb-2", children: "Failed to load job details" }),
22654
- /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "2", color: "gray", className: "mt-2", children: error })
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(Layout, { title: "Pipeline Details", showBackButton: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$3, { align: "center", justify: "center", className: "min-h-64", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$6, { className: "text-center", children: /* @__PURE__ */ jsxRuntimeExports.jsx(p$a, { size: "5", weight: "medium", className: "mb-2", children: "Job not found" }) }) }) });
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 headerActions = /* @__PURE__ */ jsxRuntimeExports.jsxs(p$3, { align: "center", gap: "3", className: "shrink-0", children: [
22671
- /* @__PURE__ */ jsxRuntimeExports.jsxs(p$a, { size: "2", color: "gray", children: [
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.jsx(
22894
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
22678
22895
  Layout,
22679
22896
  {
22680
- title: job.name || "Pipeline Details",
22897
+ pageTitle,
22898
+ breadcrumbs,
22681
22899
  showBackButton: true,
22682
- actions: headerActions,
22683
- children: /* @__PURE__ */ jsxRuntimeExports.jsx(JobDetail, { job, pipeline })
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
  ) })