@agimon-ai/po-workflow 0.0.0-alpha.2 → 0.0.0-alpha.21

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.
@@ -129,7 +129,7 @@ function formatRunDuration(elapsedMs) {
129
129
  //#region src/extensions/workspaces/sessions/(frontend)/_lib/workflowActivity.ts
130
130
  const PAUSED_STATES = /* @__PURE__ */ new Set(["paused", "pause_requested"]);
131
131
  function workflowRunIdentity(run) {
132
- return `${run.workspace}/${run.runKey}`;
132
+ return `${run.workspace}/${run.routeKey ?? run.runKey}`;
133
133
  }
134
134
  /** Whether the session runs this workflow itself; a record from an older hub names no owner and means the viewer. */
135
135
  function ownsRun(run, sessionId) {
@@ -276,16 +276,16 @@ const TONE_DOT = {
276
276
  skipped: "muted"
277
277
  };
278
278
  const TONE_DETAIL = {
279
- running: "text-doom-dim",
280
- paused: "text-doom-yellow",
281
- failed: "text-doom-red",
282
- done: "text-doom-dim",
283
- skipped: "text-doom-dim"
279
+ running: "text-po-dim",
280
+ paused: "text-po-yellow",
281
+ failed: "text-po-red",
282
+ done: "text-po-dim",
283
+ skipped: "text-po-dim"
284
284
  };
285
285
  const GROUP_LABEL = {
286
- running: "text-doom-yellow",
287
- failed: "text-doom-red",
288
- successful: "text-doom-green"
286
+ running: "text-po-yellow",
287
+ failed: "text-po-red",
288
+ successful: "text-po-green"
289
289
  };
290
290
  /**
291
291
  * The workflows group's body in the activity dock: every run this session
@@ -308,13 +308,13 @@ function WorkflowsActivitySection({ sessionId, openSession }) {
308
308
  className: "flex flex-wrap items-center gap-x-4 gap-y-1",
309
309
  children: [/* @__PURE__ */ jsx("p", {
310
310
  "data-testid": "activity-summary-workflows",
311
- className: "text-sm text-doom-dim",
311
+ className: "text-sm text-po-dim",
312
312
  children: "Idle"
313
313
  }), /* @__PURE__ */ jsxs(Button, {
314
314
  variant: "link",
315
315
  size: "sm",
316
316
  "data-testid": "activity-workflow-launch",
317
- className: "h-auto gap-1 px-0 text-doom-green",
317
+ className: "h-auto gap-1 px-0 text-po-green",
318
318
  onClick: () => {
319
319
  if (sessionId === null) return;
320
320
  openCatalog(sessionId);
@@ -341,7 +341,7 @@ function WorkflowsActivitySection({ sessionId, openSession }) {
341
341
  }
342
342
  if (sessionId !== null) focusRun(sessionId, row.identity);
343
343
  },
344
- className: "min-w-0 gap-0.5 rounded-md px-1 py-1 hover:bg-doom-panel",
344
+ className: "min-w-0 gap-0.5 rounded-md px-1 py-1 hover:bg-po-panel",
345
345
  children: [/* @__PURE__ */ jsxs("span", {
346
346
  className: "flex min-w-0 items-center gap-1.5",
347
347
  children: [
@@ -350,11 +350,11 @@ function WorkflowsActivitySection({ sessionId, openSession }) {
350
350
  pulse: row.tone === "running"
351
351
  }),
352
352
  /* @__PURE__ */ jsx("span", {
353
- className: `min-w-0 flex-1 truncate text-base font-semibold ${row.tone === "running" || row.tone === "paused" ? "text-doom-hi" : "text-doom-dim"}`,
353
+ className: `min-w-0 flex-1 truncate text-base font-semibold ${row.tone === "running" || row.tone === "paused" ? "text-po-hi" : "text-po-dim"}`,
354
354
  children: row.name
355
355
  }),
356
356
  /* @__PURE__ */ jsx("span", {
357
- className: "shrink-0 text-sm text-doom-dim",
357
+ className: "shrink-0 text-sm text-po-dim",
358
358
  children: row.elapsed
359
359
  })
360
360
  ]
@@ -381,15 +381,15 @@ function WorkflowsActivitySection({ sessionId, openSession }) {
381
381
  ...current,
382
382
  [group.name]: !open
383
383
  })),
384
- className: "justify-start gap-1.5 rounded-md px-1 py-0.5 hover:bg-doom-panel",
384
+ className: "justify-start gap-1.5 rounded-md px-1 py-0.5 hover:bg-po-panel",
385
385
  children: [
386
- open ? /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-2.5 w-2.5 text-doom-faint" }) : /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-2.5 w-2.5 text-doom-faint" }),
386
+ open ? /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-2.5 w-2.5 text-po-faint" }) : /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-2.5 w-2.5 text-po-faint" }),
387
387
  /* @__PURE__ */ jsx("span", {
388
388
  className: `inline-block text-sm font-semibold first-letter:uppercase ${GROUP_LABEL[group.name]}`,
389
389
  children: group.name
390
390
  }),
391
391
  /* @__PURE__ */ jsx("span", {
392
- className: "text-2xs text-doom-faint",
392
+ className: "text-2xs text-po-faint",
393
393
  children: group.rows.length
394
394
  })
395
395
  ]
@@ -397,7 +397,7 @@ function WorkflowsActivitySection({ sessionId, openSession }) {
397
397
  className: "flex flex-col gap-0.5 pl-2",
398
398
  children: group.rows.map((row) => /* @__PURE__ */ jsx(RunRow, { row }, row.identity))
399
399
  }) : /* @__PURE__ */ jsxs("span", {
400
- className: "truncate pl-5 text-sm text-doom-dim",
400
+ className: "truncate pl-5 text-sm text-po-dim",
401
401
  children: [group.rows.slice(0, 2).map((row) => row.name).join(", "), group.rows.length > 2 ? `, and ${group.rows.length - 2} more` : ""]
402
402
  })]
403
403
  }, group.name);
@@ -948,15 +948,15 @@ function WorkflowToolMessage({ toolName, args, result, running, isError }) {
948
948
  className: "flex min-w-0 flex-1 items-center gap-2",
949
949
  children: [
950
950
  /* @__PURE__ */ jsx("span", {
951
- className: "font-semibold text-doom-hi",
951
+ className: "font-semibold text-po-hi",
952
952
  children: summary.action
953
953
  }),
954
954
  summary.target ? /* @__PURE__ */ jsx("span", {
955
- className: "min-w-0 truncate text-doom-dim",
955
+ className: "min-w-0 truncate text-po-dim",
956
956
  children: summary.target
957
957
  }) : null,
958
958
  summary.metadata.map((value) => /* @__PURE__ */ jsxs("span", {
959
- className: "shrink-0 text-doom-dim",
959
+ className: "shrink-0 text-po-dim",
960
960
  children: ["· ", value]
961
961
  }, value))
962
962
  ]
@@ -1020,7 +1020,7 @@ var _lib_default = {
1020
1020
  message: WorkflowToolMessage
1021
1021
  }],
1022
1022
  leaderBindings: [{
1023
- id: "doom-workflow.catalog",
1023
+ id: "po-workflow.catalog",
1024
1024
  path: [WORKFLOWS_GROUP, {
1025
1025
  key: "l",
1026
1026
  label: "launch",
@@ -1030,7 +1030,7 @@ var _lib_default = {
1030
1030
  if (context.sessionId !== null) openCatalog(context.sessionId);
1031
1031
  }
1032
1032
  }, {
1033
- id: "doom-workflow.toggle",
1033
+ id: "po-workflow.toggle",
1034
1034
  path: [WORKFLOWS_GROUP, {
1035
1035
  key: "e",
1036
1036
  label: "toggle",
@@ -1418,19 +1418,19 @@ function formatWhen(iso) {
1418
1418
  const STATE_GLYPH = {
1419
1419
  written: {
1420
1420
  glyph: "✓",
1421
- className: "text-doom-green"
1421
+ className: "text-po-green"
1422
1422
  },
1423
1423
  empty: {
1424
1424
  glyph: "○",
1425
- className: "text-doom-yellow"
1425
+ className: "text-po-yellow"
1426
1426
  },
1427
1427
  pending: {
1428
1428
  glyph: "○",
1429
- className: "text-doom-faint"
1429
+ className: "text-po-faint"
1430
1430
  },
1431
1431
  unreadable: {
1432
1432
  glyph: "!",
1433
- className: "text-doom-red"
1433
+ className: "text-po-red"
1434
1434
  }
1435
1435
  };
1436
1436
  function parseDelimited(text, delimiter) {
@@ -1467,13 +1467,13 @@ function DelimitedPreview({ text, delimiter }) {
1467
1467
  "data-testid": "artifact-table",
1468
1468
  className: "min-w-full border-collapse font-mono text-sm",
1469
1469
  children: [/* @__PURE__ */ jsx("thead", {
1470
- className: "sticky top-0 bg-doom-panel text-doom-hi",
1470
+ className: "sticky top-0 bg-po-panel text-po-hi",
1471
1471
  children: /* @__PURE__ */ jsx("tr", { children: head.map((cell, index) => /* @__PURE__ */ jsx("th", {
1472
- className: "border border-doom-border px-2 py-1.5 text-left font-semibold",
1472
+ className: "border border-po-border px-2 py-1.5 text-left font-semibold",
1473
1473
  children: cell
1474
1474
  }, index)) })
1475
1475
  }), /* @__PURE__ */ jsx("tbody", { children: body.map((cells, rowIndex) => /* @__PURE__ */ jsx("tr", { children: cells.map((cell, cellIndex) => /* @__PURE__ */ jsx("td", {
1476
- className: "border border-doom-border px-2 py-1 align-top text-doom-text",
1476
+ className: "border border-po-border px-2 py-1 align-top text-po-text",
1477
1477
  children: cell
1478
1478
  }, cellIndex)) }, rowIndex)) })]
1479
1479
  })
@@ -1525,11 +1525,11 @@ function ArtifactPreview({ content, rawUrl, raw }) {
1525
1525
  });
1526
1526
  if (mimeType === "text/markdown") return raw ? /* @__PURE__ */ jsx("pre", {
1527
1527
  "data-testid": "artifact-raw",
1528
- className: "whitespace-pre-wrap break-words font-mono text-sm leading-snug text-doom-text",
1528
+ className: "whitespace-pre-wrap break-words font-mono text-sm leading-snug text-po-text",
1529
1529
  children: text
1530
1530
  }) : /* @__PURE__ */ jsx("div", {
1531
1531
  "data-testid": "artifact-markdown",
1532
- className: "max-w-5xl text-base text-doom-text",
1532
+ className: "max-w-5xl text-base text-po-text",
1533
1533
  children: /* @__PURE__ */ jsx(Markdown, { text })
1534
1534
  });
1535
1535
  if (mimeType === "application/json") {
@@ -1538,7 +1538,7 @@ function ArtifactPreview({ content, rawUrl, raw }) {
1538
1538
  formatted = JSON.stringify(JSON.parse(text), null, 2);
1539
1539
  } catch {}
1540
1540
  return /* @__PURE__ */ jsx("pre", {
1541
- className: "whitespace-pre-wrap break-words font-mono text-sm leading-snug text-doom-text",
1541
+ className: "whitespace-pre-wrap break-words font-mono text-sm leading-snug text-po-text",
1542
1542
  children: formatted
1543
1543
  });
1544
1544
  }
@@ -1584,7 +1584,7 @@ function ArtifactPreview({ content, rawUrl, raw }) {
1584
1584
  children: /* @__PURE__ */ jsx("track", { kind: "captions" })
1585
1585
  });
1586
1586
  if (content.text !== void 0) return /* @__PURE__ */ jsx("pre", {
1587
- className: "whitespace-pre-wrap break-words font-mono text-sm leading-snug text-doom-text",
1587
+ className: "whitespace-pre-wrap break-words font-mono text-sm leading-snug text-po-text",
1588
1588
  children: text
1589
1589
  });
1590
1590
  return /* @__PURE__ */ jsx(EmptyState, {
@@ -1595,12 +1595,12 @@ function ArtifactPreview({ content, rawUrl, raw }) {
1595
1595
  /** One artifact, read-only, in its own tab. */
1596
1596
  function artifactTab(run, path) {
1597
1597
  return {
1598
- id: `${TAB_ID_PREFIX$1}${run.workspace}-${run.runKey}-${path}`.replace(/[^\w-]+/g, "-"),
1598
+ id: `${TAB_ID_PREFIX$1}${run.workspace}-${run.routeKey ?? run.runKey}-${path}`.replace(/[^\w-]+/g, "-"),
1599
1599
  label: path.split("/").pop() ?? path,
1600
1600
  panel: (props) => /* @__PURE__ */ jsx(ArtifactViewerPanel, {
1601
1601
  ...props,
1602
1602
  workspace: run.workspace,
1603
- runKey: run.runKey,
1603
+ runKey: run.routeKey ?? run.runKey,
1604
1604
  path
1605
1605
  })
1606
1606
  };
@@ -1650,7 +1650,7 @@ function ArtifactViewerPanel({ workspace, runKey, path, sessionId }) {
1650
1650
  className: "flex items-center gap-2.5 pb-3",
1651
1651
  children: [
1652
1652
  /* @__PURE__ */ jsx("span", {
1653
- className: "truncate text-base font-semibold text-doom-hi",
1653
+ className: "truncate text-base font-semibold text-po-hi",
1654
1654
  children: path
1655
1655
  }),
1656
1656
  /* @__PURE__ */ jsx(Badge, {
@@ -1658,7 +1658,7 @@ function ArtifactViewerPanel({ workspace, runKey, path, sessionId }) {
1658
1658
  children: mimeType ?? "artifact"
1659
1659
  }),
1660
1660
  /* @__PURE__ */ jsx("span", {
1661
- className: "text-sm text-doom-dim",
1661
+ className: "text-sm text-po-dim",
1662
1662
  children: content === void 0 ? "" : `${formatSize(content.size)} · written ${formatWhen(content.modifiedAt)}`
1663
1663
  }),
1664
1664
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1" }),
@@ -1699,13 +1699,13 @@ function ArtifactViewerPanel({ workspace, runKey, path, sessionId }) {
1699
1699
  ]
1700
1700
  }),
1701
1701
  /* @__PURE__ */ jsx("div", {
1702
- className: "min-h-0 flex-1 overflow-auto rounded-md border border-doom-border bg-doom-deep p-4",
1702
+ className: "min-h-0 flex-1 overflow-auto rounded-md border border-po-border bg-po-deep p-4",
1703
1703
  children: error !== void 0 ? /* @__PURE__ */ jsx("span", {
1704
1704
  "data-testid": "artifact-error",
1705
- className: "text-base text-doom-yellow",
1705
+ className: "text-base text-po-yellow",
1706
1706
  children: error
1707
1707
  }) : content === void 0 ? /* @__PURE__ */ jsx("span", {
1708
- className: "text-sm text-doom-dim",
1708
+ className: "text-sm text-po-dim",
1709
1709
  children: "loading preview"
1710
1710
  }) : /* @__PURE__ */ jsx(ArtifactPreview, {
1711
1711
  content,
@@ -1714,7 +1714,7 @@ function ArtifactViewerPanel({ workspace, runKey, path, sessionId }) {
1714
1714
  })
1715
1715
  }),
1716
1716
  content?.truncated === true ? /* @__PURE__ */ jsxs("span", {
1717
- className: "pt-2 text-sm text-doom-dim",
1717
+ className: "pt-2 text-sm text-po-dim",
1718
1718
  children: [
1719
1719
  "this preview shows the first ",
1720
1720
  formatSize(content.text?.length),
@@ -1734,7 +1734,7 @@ function ArtifactsPane({ run, sessionId, onOpen }) {
1734
1734
  const read = () => {
1735
1735
  if (reading) return;
1736
1736
  reading = true;
1737
- fetchArtifacts(run.workspace, run.runKey, sessionId).then((result) => {
1737
+ fetchArtifacts(run.workspace, run.routeKey ?? run.runKey, sessionId).then((result) => {
1738
1738
  if (!live) return;
1739
1739
  if ("error" in result) {
1740
1740
  setError(result.error);
@@ -1755,15 +1755,16 @@ function ArtifactsPane({ run, sessionId, onOpen }) {
1755
1755
  }, [
1756
1756
  run.workspace,
1757
1757
  run.runKey,
1758
+ run.routeKey,
1758
1759
  run.stage,
1759
1760
  sessionId
1760
1761
  ]);
1761
1762
  return /* @__PURE__ */ jsx(ArtifactList, {
1762
1763
  listing,
1763
1764
  error,
1764
- onLoadDirectory: (directory) => fetchArtifacts(run.workspace, run.runKey, sessionId, directory),
1765
+ onLoadDirectory: (directory) => fetchArtifacts(run.workspace, run.routeKey ?? run.runKey, sessionId, directory),
1765
1766
  onOpen,
1766
- onOpenDirectory: () => openRunDirectory(run.workspace, run.runKey, sessionId)
1767
+ onOpenDirectory: () => openRunDirectory(run.workspace, run.routeKey ?? run.runKey, sessionId)
1767
1768
  });
1768
1769
  }
1769
1770
  /** Directory-first file tree with declared output metadata and lazy folder reads. */
@@ -1854,7 +1855,7 @@ function ArtifactList({ listing, error, onOpen, onOpenDirectory, onLoadDirectory
1854
1855
  disabled: !openable,
1855
1856
  "aria-expanded": entry.kind === "directory" ? expanded.has(entry.path) : void 0,
1856
1857
  onClick: () => entry.kind === "directory" ? void toggle(entry) : onOpen(entry.path),
1857
- className: `flex flex-col gap-0.5 px-3 py-1.5 text-left ${openable ? "cursor-pointer hover:bg-doom-panel" : "cursor-default"}`,
1858
+ className: `flex flex-col gap-0.5 px-3 py-1.5 text-left ${openable ? "cursor-pointer hover:bg-po-panel" : "cursor-default"}`,
1858
1859
  children: [/* @__PURE__ */ jsxs("span", {
1859
1860
  className: "flex min-w-0 items-center gap-2",
1860
1861
  children: [
@@ -1864,16 +1865,16 @@ function ArtifactList({ listing, error, onOpen, onOpenDirectory, onLoadDirectory
1864
1865
  }),
1865
1866
  /* @__PURE__ */ jsxs("span", {
1866
1867
  title: entry.path,
1867
- className: `min-w-0 flex-1 truncate text-base font-semibold ${entry.state === "pending" ? "text-doom-dim" : "text-doom-hi"}`,
1868
+ className: `min-w-0 flex-1 truncate text-base font-semibold ${entry.state === "pending" ? "text-po-dim" : "text-po-hi"}`,
1868
1869
  children: [entry.path.split("/").pop(), entry.kind === "directory" ? "/" : ""]
1869
1870
  }),
1870
1871
  /* @__PURE__ */ jsx("span", {
1871
- className: "shrink-0 text-sm text-doom-dim",
1872
+ className: "shrink-0 text-sm text-po-dim",
1872
1873
  children: entry.state === "pending" ? "pending" : entry.kind === "directory" ? "" : [formatSize(entry.size), formatWhen(entry.modifiedAt)].filter(Boolean).join(" · ")
1873
1874
  })
1874
1875
  ]
1875
1876
  }), entry.declared || entry.producedBy.length > 0 || entry.description !== "" ? /* @__PURE__ */ jsxs("span", {
1876
- className: "flex min-w-0 items-center gap-1 pl-5 text-sm text-doom-dim",
1877
+ className: "flex min-w-0 items-center gap-1 pl-5 text-sm text-po-dim",
1877
1878
  children: [
1878
1879
  entry.declared ? /* @__PURE__ */ jsx(Badge, {
1879
1880
  size: "xs",
@@ -1902,15 +1903,15 @@ function ArtifactList({ listing, error, onOpen, onOpenDirectory, onLoadDirectory
1902
1903
  }).sort((left, right) => Number(right.kind === "directory") - Number(left.kind === "directory") || left.path.localeCompare(right.path)).map((entry) => /* @__PURE__ */ jsxs("div", {
1903
1904
  className: "flex flex-col",
1904
1905
  children: [renderRow(entry), entry.kind === "directory" && expanded.has(entry.path) ? /* @__PURE__ */ jsxs("div", {
1905
- className: "ml-3 border-l border-doom-border pl-1",
1906
+ className: "ml-3 border-l border-po-border pl-1",
1906
1907
  children: [
1907
1908
  loading.has(entry.path) ? /* @__PURE__ */ jsx("span", {
1908
- className: "px-3 text-sm text-doom-dim",
1909
+ className: "px-3 text-sm text-po-dim",
1909
1910
  children: "loading…"
1910
1911
  }) : null,
1911
1912
  folderErrors[entry.path] ? /* @__PURE__ */ jsx("span", {
1912
1913
  role: "alert",
1913
- className: "px-3 text-base text-doom-yellow",
1914
+ className: "px-3 text-base text-po-yellow",
1914
1915
  children: folderErrors[entry.path]
1915
1916
  }) : null,
1916
1917
  renderChildren(entry.path)
@@ -1932,13 +1933,13 @@ function ArtifactList({ listing, error, onOpen, onOpenDirectory, onLoadDirectory
1932
1933
  title: "nothing in the run directory yet"
1933
1934
  }) : null,
1934
1935
  listing?.description ? /* @__PURE__ */ jsx("span", {
1935
- className: "px-3 py-2 text-sm text-doom-dim",
1936
+ className: "px-3 py-2 text-sm text-po-dim",
1936
1937
  children: listing.description
1937
1938
  }) : null,
1938
1939
  renderChildren(""),
1939
1940
  openError === void 0 ? null : /* @__PURE__ */ jsx("span", {
1940
1941
  role: "alert",
1941
- className: "px-3 text-base text-doom-yellow",
1942
+ className: "px-3 text-base text-po-yellow",
1942
1943
  children: openError
1943
1944
  }),
1944
1945
  listing === void 0 ? null : /* @__PURE__ */ jsx("button", {
@@ -1948,7 +1949,7 @@ function ArtifactList({ listing, error, onOpen, onOpenDirectory, onLoadDirectory
1948
1949
  title: `${listing.runDir} (open in Finder)`,
1949
1950
  disabled: opening || onOpenDirectory === void 0,
1950
1951
  onClick: () => void openDirectory(),
1951
- className: "truncate px-3 py-2 text-left text-base text-doom-dim hover:text-doom-hi disabled:cursor-default",
1952
+ className: "truncate px-3 py-2 text-left text-base text-po-dim hover:text-po-hi disabled:cursor-default",
1952
1953
  children: listing.runDir
1953
1954
  })
1954
1955
  ]
@@ -2001,7 +2002,7 @@ function StepSteerComposer({ run, sessionId, step }) {
2001
2002
  setSending(true);
2002
2003
  setError(void 0);
2003
2004
  try {
2004
- const result = await steerStep(run.workspace, run.runKey, message, sessionId, step);
2005
+ const result = await steerStep(run.workspace, run.routeKey ?? run.runKey, message, sessionId, step);
2005
2006
  if ("error" in result) {
2006
2007
  setError(result.error);
2007
2008
  return;
@@ -2015,15 +2016,15 @@ function StepSteerComposer({ run, sessionId, step }) {
2015
2016
  };
2016
2017
  return /* @__PURE__ */ jsx("form", {
2017
2018
  "data-testid": "step-steer-composer",
2018
- className: "shrink-0 border-t border-doom-border-soft bg-doom-rail px-3 pt-3 pb-2.5",
2019
+ className: "shrink-0 border-t border-po-border-soft bg-po-rail px-3 pt-3 pb-2.5",
2019
2020
  onSubmit: (event) => void submit(event),
2020
2021
  children: /* @__PURE__ */ jsxs("div", {
2021
- className: "rounded-lg border border-doom-border bg-doom-deep transition-colors focus-within:border-doom-blue/60",
2022
+ className: "rounded-lg border border-po-border bg-po-deep transition-colors focus-within:border-po-blue/60",
2022
2023
  children: [
2023
2024
  /* @__PURE__ */ jsxs("div", {
2024
2025
  className: "flex min-w-0 items-start gap-2.5 px-3.5 pt-3",
2025
2026
  children: [/* @__PURE__ */ jsx("span", {
2026
- className: "mt-[3px] shrink-0 select-none text-base leading-none text-doom-green",
2027
+ className: "mt-[3px] shrink-0 select-none text-base leading-none text-po-green",
2027
2028
  children: ">"
2028
2029
  }), /* @__PURE__ */ jsx(Textarea, {
2029
2030
  variant: "bare",
@@ -2040,7 +2041,7 @@ function StepSteerComposer({ run, sessionId, step }) {
2040
2041
  error === void 0 ? null : /* @__PURE__ */ jsx("p", {
2041
2042
  role: "alert",
2042
2043
  "data-testid": "step-steer-error",
2043
- className: "px-3.5 pt-2 text-base text-doom-red",
2044
+ className: "px-3.5 pt-2 text-base text-po-red",
2044
2045
  children: error
2045
2046
  }),
2046
2047
  /* @__PURE__ */ jsxs("div", {
@@ -2049,7 +2050,7 @@ function StepSteerComposer({ run, sessionId, step }) {
2049
2050
  /* @__PURE__ */ jsx("span", {
2050
2051
  role: "status",
2051
2052
  "data-testid": "step-steer-hint",
2052
- className: "min-w-0 truncate text-sm text-doom-dim",
2053
+ className: "min-w-0 truncate text-sm text-po-dim",
2053
2054
  children: "guidance reaches this step while it is still working"
2054
2055
  }),
2055
2056
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1" }),
@@ -2090,13 +2091,13 @@ const CTRL_A_CODE = 64;
2090
2091
  function stepTerminalTab(run, job, step) {
2091
2092
  const target = {
2092
2093
  workspace: run.workspace,
2093
- runKey: run.runKey,
2094
+ runKey: run.routeKey ?? run.runKey,
2094
2095
  job,
2095
2096
  ...step === void 0 ? {} : { step }
2096
2097
  };
2097
2098
  const label = step ?? job;
2098
2099
  return {
2099
- id: `${TAB_ID_PREFIX}${run.workspace}-${run.runKey}-${job}${step === void 0 ? "" : `-${step}`}`.replace(/[^\w-]+/g, "-"),
2100
+ id: `${TAB_ID_PREFIX}${run.workspace}-${run.routeKey ?? run.runKey}-${job}${step === void 0 ? "" : `-${step}`}`.replace(/[^\w-]+/g, "-"),
2100
2101
  label: `${run.displayName} › ${label}`,
2101
2102
  panel: (props) => /* @__PURE__ */ jsx(StepTerminalPanel, {
2102
2103
  ...props,
@@ -2138,22 +2139,22 @@ function StepHeader({ run, target, children }) {
2138
2139
  className: "flex items-center gap-2.5 pb-3",
2139
2140
  children: [
2140
2141
  /* @__PURE__ */ jsx("span", {
2141
- className: "shrink-0 truncate text-base font-semibold text-doom-hi",
2142
+ className: "shrink-0 truncate text-base font-semibold text-po-hi",
2142
2143
  children: run?.displayName ?? target.runKey
2143
2144
  }),
2144
2145
  /* @__PURE__ */ jsx("span", {
2145
- className: "text-xs text-doom-faint",
2146
+ className: "text-xs text-po-faint",
2146
2147
  children: "›"
2147
2148
  }),
2148
2149
  /* @__PURE__ */ jsx("span", {
2149
- className: "shrink-0 truncate text-base font-semibold text-doom-hi",
2150
+ className: "shrink-0 truncate text-base font-semibold text-po-hi",
2150
2151
  children: target.job
2151
2152
  }),
2152
2153
  target.step === void 0 ? null : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
2153
- className: "text-xs text-doom-faint",
2154
+ className: "text-xs text-po-faint",
2154
2155
  children: "›"
2155
2156
  }), /* @__PURE__ */ jsx("span", {
2156
- className: "min-w-0 truncate text-base text-doom-text",
2157
+ className: "min-w-0 truncate text-base text-po-text",
2157
2158
  children: target.step
2158
2159
  })] }),
2159
2160
  run === void 0 ? null : /* @__PURE__ */ jsx(StatusBadge, {
@@ -2175,7 +2176,7 @@ function StepHeader({ run, target, children }) {
2175
2176
  */
2176
2177
  function StepTerminalPanel(props) {
2177
2178
  const { sessionId, target, renderSessionTranscript } = props;
2178
- const run = useStore(workflows.store, (state) => workflows.select(state, sessionId).runs).find((candidate) => candidate.workspace === target.workspace && candidate.runKey === target.runKey);
2179
+ const run = useStore(workflows.store, (state) => workflows.select(state, sessionId).runs).find((candidate) => candidate.workspace === target.workspace && (candidate.routeKey ?? candidate.runKey) === target.runKey);
2179
2180
  const sessionRef = stepSessionRef(run, target);
2180
2181
  if (sessionRef !== void 0 && renderSessionTranscript !== void 0) return /* @__PURE__ */ jsxs("div", {
2181
2182
  "data-testid": "step-conversation-panel",
@@ -2335,7 +2336,7 @@ function StepTerminal({ sessionId, target, run }) {
2335
2336
  size: "xs",
2336
2337
  tone: held ? "blue" : "neutral",
2337
2338
  "data-testid": "step-terminal-control",
2338
- className: held ? "border-doom-blue/60 bg-doom-tint-blue text-doom-hi" : "",
2339
+ className: held ? "border-po-blue/60 bg-po-tint-blue text-po-hi" : "",
2339
2340
  children: held ? "keyboard yours" : "watching"
2340
2341
  }), writable ? /* @__PURE__ */ jsx(Button, {
2341
2342
  variant: held ? "outline" : "primary",
@@ -2348,11 +2349,15 @@ function StepTerminal({ sessionId, target, run }) {
2348
2349
  /* @__PURE__ */ jsxs("div", {
2349
2350
  ref: screenRef,
2350
2351
  "data-testid": "step-terminal-screen",
2352
+ role: "textbox",
2353
+ "aria-label": "Workflow terminal",
2354
+ "aria-multiline": "true",
2355
+ "aria-readonly": token === void 0,
2351
2356
  tabIndex: 0,
2352
2357
  onKeyDown,
2353
- className: `min-h-0 flex-1 overflow-y-auto rounded-md border bg-doom-deep px-4 py-3 font-mono text-sm leading-tight text-doom-text outline-none ${held ? "border-doom-blue/60" : "border-doom-border"}`,
2358
+ className: `min-h-0 flex-1 overflow-y-auto rounded-md border bg-po-deep px-4 py-3 font-mono text-sm leading-tight text-po-text outline-none ${held ? "border-po-blue/60" : "border-po-border"}`,
2354
2359
  children: [lines.length === 0 ? /* @__PURE__ */ jsx("span", {
2355
- className: "text-sm text-doom-dim",
2360
+ className: "text-sm text-po-dim",
2356
2361
  children: capabilities?.readable === false ? capabilities.reason ?? "This run has no terminal to read." : "waiting for the run to paint…"
2357
2362
  }) : lines.map((line, index) => /* @__PURE__ */ jsx(ScreenLine, { line }, index)), held && !ended ? /* @__PURE__ */ jsx(StreamCursor, { className: "mt-0.5 h-[12px] w-1.5" }) : null]
2358
2363
  }),
@@ -2361,18 +2366,18 @@ function StepTerminal({ sessionId, target, run }) {
2361
2366
  children: [
2362
2367
  /* @__PURE__ */ jsx("span", {
2363
2368
  "data-testid": "step-terminal-hint",
2364
- className: "text-sm text-doom-dim",
2369
+ className: "text-sm text-po-dim",
2365
2370
  children: held ? "keys go to the run · ctrl-c and ctrl-d pass through · esc releases the keyboard" : capabilities?.writable === false ? capabilities.reason ?? "this run cannot be typed into" : "read-only until you take control · the run keeps going either way"
2366
2371
  }),
2367
2372
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1" }),
2368
2373
  ended ? /* @__PURE__ */ jsx("span", {
2369
2374
  "data-testid": "step-terminal-ended",
2370
- className: "text-sm text-doom-dim",
2375
+ className: "text-sm text-po-dim",
2371
2376
  children: "the run has settled; this is its last screen"
2372
2377
  }) : null,
2373
2378
  notice === void 0 ? null : /* @__PURE__ */ jsx("span", {
2374
2379
  "data-testid": "step-terminal-notice",
2375
- className: "text-sm text-doom-yellow",
2380
+ className: "text-sm text-po-yellow",
2376
2381
  children: notice
2377
2382
  })
2378
2383
  ]
@@ -2385,35 +2390,35 @@ function StepTerminal({ sessionId, target, run }) {
2385
2390
  const STATE_ICON = {
2386
2391
  pending: {
2387
2392
  glyph: "○",
2388
- className: "text-doom-faint"
2393
+ className: "text-po-faint"
2389
2394
  },
2390
2395
  running: {
2391
2396
  glyph: "●",
2392
- className: "text-doom-blue"
2397
+ className: "text-po-blue"
2393
2398
  },
2394
2399
  resumed: {
2395
2400
  glyph: "●",
2396
- className: "text-doom-blue"
2401
+ className: "text-po-blue"
2397
2402
  },
2398
2403
  completed: {
2399
2404
  glyph: "✓",
2400
- className: "text-doom-green"
2405
+ className: "text-po-green"
2401
2406
  },
2402
2407
  failed: {
2403
2408
  glyph: "✕",
2404
- className: "text-doom-red"
2409
+ className: "text-po-red"
2405
2410
  },
2406
2411
  skipped: {
2407
2412
  glyph: "↷",
2408
- className: "text-doom-faint"
2413
+ className: "text-po-faint"
2409
2414
  },
2410
2415
  pause_requested: {
2411
2416
  glyph: "!",
2412
- className: "text-doom-yellow"
2417
+ className: "text-po-yellow"
2413
2418
  },
2414
2419
  paused: {
2415
2420
  glyph: "!",
2416
- className: "text-doom-yellow"
2421
+ className: "text-po-yellow"
2417
2422
  }
2418
2423
  };
2419
2424
  const ACTIVE_STATES = /* @__PURE__ */ new Set([
@@ -2509,35 +2514,35 @@ function WorkflowPicker({ runs, selected, onSelect, className }) {
2509
2514
  variant: "outline",
2510
2515
  size: "sm",
2511
2516
  "data-testid": "workflow-picker",
2512
- className: cn("h-8 w-full max-w-[360px] justify-start border-doom-border bg-doom-deep px-2.5", className),
2517
+ className: cn("h-8 w-full max-w-[360px] justify-start border-po-border bg-po-deep px-2.5", className),
2513
2518
  children: [
2514
- /* @__PURE__ */ jsx(SearchIcon, { className: "h-3 w-3 shrink-0 text-doom-faint" }),
2519
+ /* @__PURE__ */ jsx(SearchIcon, { className: "h-3 w-3 shrink-0 text-po-faint" }),
2515
2520
  /* @__PURE__ */ jsx("span", {
2516
- className: "min-w-0 flex-1 truncate text-left text-base font-semibold text-doom-hi",
2521
+ className: "min-w-0 flex-1 truncate text-left text-base font-semibold text-po-hi",
2517
2522
  children: selected.displayName
2518
2523
  }),
2519
2524
  /* @__PURE__ */ jsxs("span", {
2520
- className: "shrink-0 text-sm font-normal text-doom-dim",
2525
+ className: "shrink-0 text-sm font-normal text-po-dim",
2521
2526
  children: [runs.length, " workflows"]
2522
2527
  }),
2523
- /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-3 w-3 shrink-0 text-doom-dim" })
2528
+ /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-3 w-3 shrink-0 text-po-dim" })
2524
2529
  ]
2525
2530
  })
2526
2531
  }), /* @__PURE__ */ jsxs(PopoverContent, {
2527
2532
  side: "bottom",
2528
2533
  align: "start",
2529
2534
  "data-testid": "workflow-picker-popover",
2530
- className: "w-[440px] border-doom-edge-blue",
2535
+ className: "w-[440px] border-po-edge-blue",
2531
2536
  children: [
2532
2537
  /* @__PURE__ */ jsxs(PopoverHeader, { children: [/* @__PURE__ */ jsx(SectionLabel, {
2533
- className: "text-doom-blue",
2538
+ className: "text-po-blue",
2534
2539
  children: "workflow"
2535
2540
  }), /* @__PURE__ */ jsx("span", {
2536
- className: "truncate text-sm text-doom-dim",
2541
+ className: "truncate text-sm text-po-dim",
2537
2542
  children: selected.displayName
2538
2543
  })] }),
2539
2544
  /* @__PURE__ */ jsx("div", {
2540
- className: "border-b border-doom-border-soft p-1.5",
2545
+ className: "border-b border-po-border-soft p-1.5",
2541
2546
  children: /* @__PURE__ */ jsx(Input, {
2542
2547
  autoFocus: true,
2543
2548
  "data-testid": "workflow-picker-search",
@@ -2566,19 +2571,19 @@ function WorkflowPicker({ runs, selected, onSelect, className }) {
2566
2571
  onSelect(run);
2567
2572
  setOpen(false);
2568
2573
  },
2569
- className: cn("w-full gap-2.5 py-1.5 transition-colors hover:bg-doom-deep focus-visible:bg-doom-deep", active && "bg-doom-tint-blue hover:brightness-125"),
2574
+ className: cn("w-full gap-2.5 py-1.5 transition-colors hover:bg-po-deep focus-visible:bg-po-deep", active && "bg-po-tint-blue hover:brightness-125"),
2570
2575
  children: [
2571
2576
  /* @__PURE__ */ jsx("span", {
2572
- className: "w-14 shrink-0 truncate text-sm text-doom-dim",
2577
+ className: "w-14 shrink-0 truncate text-sm text-po-dim",
2573
2578
  children: runState(run)
2574
2579
  }),
2575
2580
  /* @__PURE__ */ jsx(OptionLabel, {
2576
2581
  density: "compact",
2577
- className: active ? "text-doom-blue" : "text-doom-hi",
2582
+ className: active ? "text-po-blue" : "text-po-hi",
2578
2583
  children: run.displayName
2579
2584
  }),
2580
2585
  /* @__PURE__ */ jsx("span", {
2581
- className: "max-w-[40%] truncate text-sm text-doom-dim",
2586
+ className: "max-w-[40%] truncate text-sm text-po-dim",
2582
2587
  children: [run.position?.job, run.position?.step].filter(Boolean).join(" · ")
2583
2588
  }),
2584
2589
  /* @__PURE__ */ jsx(Dot, {
@@ -2602,7 +2607,7 @@ function WorkflowPicker({ runs, selected, onSelect, className }) {
2602
2607
  "data-testid": `workflow-filter-${candidate}`,
2603
2608
  "data-current": current,
2604
2609
  onClick: () => setFilter(candidate),
2605
- className: cn(current && "bg-doom-blue/25 font-semibold text-doom-blue hover:bg-doom-blue/25"),
2610
+ className: cn(current && "bg-po-blue/25 font-semibold text-po-blue hover:bg-po-blue/25"),
2606
2611
  children: candidate
2607
2612
  }, candidate);
2608
2613
  })]
@@ -2621,7 +2626,7 @@ function StepRow({ step, now, selected, onSelect }) {
2621
2626
  "data-step-status": step.status,
2622
2627
  "data-active": selected,
2623
2628
  onClick: onSelect,
2624
- className: cn("flex w-full cursor-pointer flex-col gap-0.5 rounded px-2 py-1.5 text-left enabled:hover:bg-doom-deep disabled:cursor-default", selected && "bg-doom-tint-blue ring-1 ring-inset ring-doom-blue/40"),
2629
+ className: cn("flex w-full cursor-pointer flex-col gap-0.5 rounded px-2 py-1.5 text-left enabled:hover:bg-po-deep disabled:cursor-default", selected && "bg-po-tint-blue ring-1 ring-inset ring-po-blue/40"),
2625
2630
  children: [/* @__PURE__ */ jsxs("span", {
2626
2631
  className: "flex items-center gap-2",
2627
2632
  children: [
@@ -2630,23 +2635,23 @@ function StepRow({ step, now, selected, onSelect }) {
2630
2635
  children: icon.glyph
2631
2636
  }),
2632
2637
  /* @__PURE__ */ jsx("span", {
2633
- className: cn("min-w-0 flex-1 truncate text-base font-medium", step.status === "failed" ? "text-doom-red" : "text-doom-text"),
2638
+ className: cn("min-w-0 flex-1 truncate text-base font-medium", step.status === "failed" ? "text-po-red" : "text-po-text"),
2634
2639
  children: step.name
2635
2640
  }),
2636
2641
  step.group === void 0 ? null : /* @__PURE__ */ jsxs("span", {
2637
2642
  "data-testid": `step-group-${step.name}`,
2638
- className: "max-w-24 shrink-0 truncate text-sm text-doom-dim",
2643
+ className: "max-w-24 shrink-0 truncate text-sm text-po-dim",
2639
2644
  children: ["∥ ", step.group]
2640
2645
  }),
2641
2646
  /* @__PURE__ */ jsx("span", {
2642
- className: "shrink-0 text-sm text-doom-dim",
2647
+ className: "shrink-0 text-sm text-po-dim",
2643
2648
  children: step.status === "pending" ? "pending" : spanDuration(step.startedAt, step.endedAt, now) ?? ""
2644
2649
  })
2645
2650
  ]
2646
2651
  }), step.reason === void 0 ? null : /* @__PURE__ */ jsx("span", {
2647
2652
  "data-testid": `step-reason-${step.name}`,
2648
2653
  title: step.reason,
2649
- className: cn("truncate pl-5 text-sm", step.status === "failed" ? "text-doom-red" : "text-doom-dim"),
2654
+ className: cn("truncate pl-5 text-sm", step.status === "failed" ? "text-po-red" : "text-po-dim"),
2650
2655
  children: step.reason
2651
2656
  })]
2652
2657
  });
@@ -2657,7 +2662,7 @@ function DeleteWorkflowDialog({ run, sessionId, onClose, onDeleted }) {
2657
2662
  const confirm = () => {
2658
2663
  setDeleting(true);
2659
2664
  setError(void 0);
2660
- deleteWorkflowRun(run.workspace, run.runKey, sessionId).then((result) => {
2665
+ deleteWorkflowRun(run.workspace, run.routeKey ?? run.runKey, sessionId).then((result) => {
2661
2666
  if ("error" in result) {
2662
2667
  setDeleting(false);
2663
2668
  setError(result.error);
@@ -2681,12 +2686,12 @@ function DeleteWorkflowDialog({ run, sessionId, onClose, onDeleted }) {
2681
2686
  "?"
2682
2687
  ] }) }), /* @__PURE__ */ jsxs(DialogBody, { children: [
2683
2688
  /* @__PURE__ */ jsx("p", {
2684
- className: "text-sm leading-relaxed text-doom-dim",
2689
+ className: "text-sm leading-relaxed text-po-dim",
2685
2690
  children: "This permanently removes the workflow run, including its logs and artifacts. This action cannot be undone."
2686
2691
  }),
2687
2692
  error === void 0 ? null : /* @__PURE__ */ jsx("p", {
2688
2693
  "data-testid": "delete-workflow-error",
2689
- className: "text-base text-doom-red",
2694
+ className: "text-base text-po-red",
2690
2695
  children: error
2691
2696
  }),
2692
2697
  /* @__PURE__ */ jsxs(DialogFooter, { children: [
@@ -2720,17 +2725,17 @@ function StopWorkflowButton({ run, sessionId }) {
2720
2725
  const stop = () => {
2721
2726
  setStopping(true);
2722
2727
  setError(void 0);
2723
- stopWorkflowRun(run.workspace, run.runKey, sessionId).then((result) => {
2728
+ stopWorkflowRun(run.workspace, run.routeKey ?? run.runKey, sessionId).then((result) => {
2724
2729
  if (!("error" in result)) return;
2725
2730
  setStopping(false);
2726
2731
  setError(result.error);
2727
2732
  });
2728
2733
  };
2729
2734
  return /* @__PURE__ */ jsxs("div", {
2730
- className: "flex shrink-0 flex-col gap-1 border-t border-doom-border-soft p-1.5",
2735
+ className: "flex shrink-0 flex-col gap-1 border-t border-po-border-soft p-1.5",
2731
2736
  children: [error === void 0 ? null : /* @__PURE__ */ jsx("span", {
2732
2737
  "data-testid": "stop-workflow-error",
2733
- className: "px-1 text-base text-doom-red",
2738
+ className: "px-1 text-base text-po-red",
2734
2739
  children: error
2735
2740
  }), /* @__PURE__ */ jsx(Button, {
2736
2741
  variant: "danger-outline",
@@ -2768,12 +2773,12 @@ function SectionHeading({ label, meta }) {
2768
2773
  className: "flex items-center px-4 pb-1 pt-3",
2769
2774
  children: [
2770
2775
  /* @__PURE__ */ jsx("span", {
2771
- className: "text-lg font-semibold text-doom-hi",
2776
+ className: "text-lg font-semibold text-po-hi",
2772
2777
  children: label
2773
2778
  }),
2774
2779
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1" }),
2775
2780
  meta === void 0 ? null : /* @__PURE__ */ jsx("span", {
2776
- className: "text-sm text-doom-dim",
2781
+ className: "text-sm text-po-dim",
2777
2782
  children: meta
2778
2783
  })
2779
2784
  ]
@@ -2785,7 +2790,7 @@ function RunHeader({ run, runs, now, onSelectRun }) {
2785
2790
  const elapsed = spanDuration(run.startedAt, run.finishedAt, now);
2786
2791
  return /* @__PURE__ */ jsxs("div", {
2787
2792
  "data-testid": "workflow-dock-run",
2788
- className: "flex shrink-0 flex-col gap-1.5 border-b border-doom-border px-4 py-3",
2793
+ className: "flex shrink-0 flex-col gap-1.5 border-b border-po-border px-4 py-3",
2789
2794
  children: [
2790
2795
  /* @__PURE__ */ jsxs("div", {
2791
2796
  className: "flex min-w-0 items-center gap-2",
@@ -2796,7 +2801,7 @@ function RunHeader({ run, runs, now, onSelectRun }) {
2796
2801
  }),
2797
2802
  /* @__PURE__ */ jsx("span", {
2798
2803
  title: run.displayName,
2799
- className: "min-w-0 flex-1 truncate text-base font-semibold text-doom-hi",
2804
+ className: "min-w-0 flex-1 truncate text-base font-semibold text-po-hi",
2800
2805
  children: run.displayName
2801
2806
  }),
2802
2807
  /* @__PURE__ */ jsx(StatusBadge, {
@@ -2809,7 +2814,7 @@ function RunHeader({ run, runs, now, onSelectRun }) {
2809
2814
  ]
2810
2815
  }),
2811
2816
  /* @__PURE__ */ jsxs("div", {
2812
- className: "flex min-w-0 items-center gap-1.5 text-sm text-doom-dim",
2817
+ className: "flex min-w-0 items-center gap-1.5 text-sm text-po-dim",
2813
2818
  children: [/* @__PURE__ */ jsx("span", {
2814
2819
  title: where,
2815
2820
  className: "min-w-0 flex-1 truncate",
@@ -2835,7 +2840,7 @@ function AttentionBanner({ run }) {
2835
2840
  return /* @__PURE__ */ jsxs("div", {
2836
2841
  "data-testid": "workflow-dock-attention",
2837
2842
  "data-attention": attention.kind,
2838
- className: cn("mx-3 mt-3 flex flex-col gap-1 rounded-md border px-3 py-2", paused ? "border-doom-edge-yellow bg-doom-tint-yellow/40" : "border-doom-edge-red bg-doom-tint-red/40"),
2843
+ className: cn("mx-3 mt-3 flex flex-col gap-1 rounded-md border px-3 py-2", paused ? "border-po-edge-yellow bg-po-tint-yellow/40" : "border-po-edge-red bg-po-tint-red/40"),
2839
2844
  children: [
2840
2845
  /* @__PURE__ */ jsxs("div", {
2841
2846
  className: "flex items-center gap-2",
@@ -2844,16 +2849,16 @@ function AttentionBanner({ run }) {
2844
2849
  tone: paused ? "running" : "error",
2845
2850
  children: attention.kind
2846
2851
  }), /* @__PURE__ */ jsx("span", {
2847
- className: "min-w-0 flex-1 text-sm text-doom-dim",
2852
+ className: "min-w-0 flex-1 text-sm text-po-dim",
2848
2853
  children: paused ? "waiting to be resumed" : "needs a look"
2849
2854
  })]
2850
2855
  }),
2851
2856
  /* @__PURE__ */ jsx("span", {
2852
- className: "break-words text-base text-doom-text",
2857
+ className: "break-words text-base text-po-text",
2853
2858
  children: attention.text
2854
2859
  }),
2855
2860
  /* @__PURE__ */ jsx("span", {
2856
- className: "text-sm text-doom-dim",
2861
+ className: "text-sm text-po-dim",
2857
2862
  children: paused ? "ask the agent in this conversation to resume it" : "ask the agent in this conversation to diagnose or recover it"
2858
2863
  })
2859
2864
  ]
@@ -2877,7 +2882,7 @@ function ActiveNow({ run, now, onOpenStep }) {
2877
2882
  "data-testid": `workflow-dock-active-${step.name}`,
2878
2883
  title: `open ${step.name}`,
2879
2884
  onClick: () => onOpenStep(job, step.name),
2880
- className: "flex w-full cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-left hover:bg-doom-panel",
2885
+ className: "flex w-full cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-left hover:bg-po-panel",
2881
2886
  children: [
2882
2887
  /* @__PURE__ */ jsx(Dot, {
2883
2888
  tone: paused ? "yellow" : "blue",
@@ -2886,15 +2891,15 @@ function ActiveNow({ run, now, onOpenStep }) {
2886
2891
  /* @__PURE__ */ jsxs("span", {
2887
2892
  className: "flex min-w-0 flex-1 flex-col",
2888
2893
  children: [/* @__PURE__ */ jsx("span", {
2889
- className: "truncate text-base font-semibold text-doom-hi",
2894
+ className: "truncate text-base font-semibold text-po-hi",
2890
2895
  children: step.name
2891
2896
  }), /* @__PURE__ */ jsxs("span", {
2892
- className: "truncate text-sm text-doom-dim",
2897
+ className: "truncate text-sm text-po-dim",
2893
2898
  children: [job, step.group === void 0 ? "" : ` · ∥ ${step.group}`]
2894
2899
  })]
2895
2900
  }),
2896
2901
  /* @__PURE__ */ jsx("span", {
2897
- className: "shrink-0 text-sm text-doom-dim",
2902
+ className: "shrink-0 text-sm text-po-dim",
2898
2903
  children: spanDuration(step.startedAt, step.endedAt, now) ?? ""
2899
2904
  })
2900
2905
  ]
@@ -2933,24 +2938,24 @@ function JobTree({ run, now, onOpenStep }) {
2933
2938
  ...current,
2934
2939
  [job.name]: !open
2935
2940
  })),
2936
- className: "flex w-full cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-left hover:bg-doom-panel",
2941
+ className: "flex w-full cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-left hover:bg-po-panel",
2937
2942
  children: [
2938
- open ? /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-2.5 w-2.5 shrink-0 text-doom-faint" }) : /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-2.5 w-2.5 shrink-0 text-doom-faint" }),
2943
+ open ? /* @__PURE__ */ jsx(ChevronDownIcon, { className: "h-2.5 w-2.5 shrink-0 text-po-faint" }) : /* @__PURE__ */ jsx(ChevronRightIcon, { className: "h-2.5 w-2.5 shrink-0 text-po-faint" }),
2939
2944
  /* @__PURE__ */ jsx("span", {
2940
2945
  className: `w-3 shrink-0 text-xs ${icon.className}`,
2941
2946
  children: icon.glyph
2942
2947
  }),
2943
2948
  /* @__PURE__ */ jsx("span", {
2944
- className: cn("min-w-0 flex-1 truncate text-base font-semibold", job.status === "failed" ? "text-doom-red" : "text-doom-hi"),
2949
+ className: cn("min-w-0 flex-1 truncate text-base font-semibold", job.status === "failed" ? "text-po-red" : "text-po-hi"),
2945
2950
  children: job.name
2946
2951
  }),
2947
2952
  /* @__PURE__ */ jsx("span", {
2948
- className: "shrink-0 text-sm text-doom-dim",
2953
+ className: "shrink-0 text-sm text-po-dim",
2949
2954
  children: job.status === "pending" ? "pending" : open || job.steps.length === 0 ? spanDuration(job.startedAt, job.endedAt, now) ?? "" : `${finished}/${job.steps.length} steps`
2950
2955
  })
2951
2956
  ]
2952
2957
  }), open && job.steps.length > 0 ? /* @__PURE__ */ jsx("div", {
2953
- className: "ml-4 flex flex-col gap-0.5 border-l border-doom-border-soft pl-1",
2958
+ className: "ml-4 flex flex-col gap-0.5 border-l border-po-border-soft pl-1",
2954
2959
  children: job.steps.map((step) => /* @__PURE__ */ jsx(StepRow, {
2955
2960
  step,
2956
2961
  now,
@@ -3007,11 +3012,11 @@ function WorkflowDockView({ runs, run, now, sessionId, onSelectRun, onOpenStep,
3007
3012
  run,
3008
3013
  sessionId
3009
3014
  }, workflowRunIdentity(run)), /* @__PURE__ */ jsx("p", {
3010
- className: "px-3 pb-2 text-sm text-doom-dim",
3015
+ className: "px-3 pb-2 text-sm text-po-dim",
3011
3016
  children: "this session runs the workflow; removing or restarting it stops the run"
3012
3017
  })]
3013
3018
  }) : /* @__PURE__ */ jsx("div", {
3014
- className: "flex shrink-0 border-t border-doom-border-soft p-1.5",
3019
+ className: "flex shrink-0 border-t border-po-border-soft p-1.5",
3015
3020
  children: /* @__PURE__ */ jsx(Button, {
3016
3021
  variant: "danger-outline",
3017
3022
  size: "xs",
@@ -3169,7 +3174,7 @@ const BOOLEAN_TYPE = "boolean";
3169
3174
  const BOOLEAN_VALUES = ["true", "false"];
3170
3175
  function FieldLabel({ children }) {
3171
3176
  return /* @__PURE__ */ jsx("span", {
3172
- className: "text-base font-medium text-doom-text",
3177
+ className: "text-base font-medium text-po-text",
3173
3178
  children
3174
3179
  });
3175
3180
  }
@@ -3186,9 +3191,9 @@ function InputField({ input, value, onChange }) {
3186
3191
  "data-testid": `launch-input-${input.name}`,
3187
3192
  children: [
3188
3193
  /* @__PURE__ */ jsxs("span", {
3189
- className: "min-w-0 truncate text-base font-medium text-doom-text sm:w-28 sm:shrink-0",
3194
+ className: "min-w-0 truncate text-base font-medium text-po-text sm:w-28 sm:shrink-0",
3190
3195
  children: [input.name, input.required === true ? /* @__PURE__ */ jsx("span", {
3191
- className: "text-doom-yellow",
3196
+ className: "text-po-yellow",
3192
3197
  children: " *"
3193
3198
  }) : null]
3194
3199
  }),
@@ -3209,7 +3214,7 @@ function InputField({ input, value, onChange }) {
3209
3214
  }, option)) })]
3210
3215
  }),
3211
3216
  /* @__PURE__ */ jsx("span", {
3212
- className: "min-w-0 truncate text-sm text-doom-dim sm:w-40 sm:shrink-0",
3217
+ className: "min-w-0 truncate text-sm text-po-dim sm:w-40 sm:shrink-0",
3213
3218
  children: hint
3214
3219
  })
3215
3220
  ]
@@ -3234,7 +3239,7 @@ function PickField({ label, testId, options, value, hint, onChange }) {
3234
3239
  }, option)) })]
3235
3240
  }),
3236
3241
  /* @__PURE__ */ jsx("span", {
3237
- className: "text-sm text-doom-dim",
3242
+ className: "text-sm text-po-dim",
3238
3243
  children: hint
3239
3244
  })
3240
3245
  ]
@@ -3285,7 +3290,7 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3285
3290
  className: "flex min-w-0 flex-col items-start gap-1 sm:flex-row sm:items-center sm:gap-2.5",
3286
3291
  children: [
3287
3292
  /* @__PURE__ */ jsx("span", {
3288
- className: "text-sm text-doom-dim",
3293
+ className: "text-sm text-po-dim",
3289
3294
  children: "launch workflow"
3290
3295
  }),
3291
3296
  /* @__PURE__ */ jsx(DialogTitle, {
@@ -3301,7 +3306,7 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3301
3306
  ]
3302
3307
  }) }), /* @__PURE__ */ jsxs(DialogBody, { children: [
3303
3308
  /* @__PURE__ */ jsx("p", {
3304
- className: "text-sm leading-relaxed text-doom-dim",
3309
+ className: "text-sm leading-relaxed text-po-dim",
3305
3310
  children: workflow.description || "This workflow declares no description."
3306
3311
  }),
3307
3312
  /* @__PURE__ */ jsxs("div", {
@@ -3318,7 +3323,7 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3318
3323
  onKeyDown: onPromptKeyDown
3319
3324
  }),
3320
3325
  /* @__PURE__ */ jsx("span", {
3321
- className: "text-sm text-doom-dim",
3326
+ className: "text-sm text-po-dim",
3322
3327
  children: "enter launches · shift+enter for a new line"
3323
3328
  })
3324
3329
  ]
@@ -3328,7 +3333,7 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3328
3333
  children: [/* @__PURE__ */ jsxs("div", {
3329
3334
  className: "flex items-center gap-2",
3330
3335
  children: [/* @__PURE__ */ jsx(FieldLabel, { children: "Inputs" }), /* @__PURE__ */ jsxs("span", {
3331
- className: "text-sm text-doom-dim",
3336
+ className: "text-sm text-po-dim",
3332
3337
  children: [
3333
3338
  "workflow_dispatch · ",
3334
3339
  workflow.inputs.length,
@@ -3352,7 +3357,7 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3352
3357
  children: [
3353
3358
  /* @__PURE__ */ jsx(FieldLabel, { children: "Runner" }),
3354
3359
  workflow.runners === void 0 || workflow.runners.length === 0 ? /* @__PURE__ */ jsx("span", {
3355
- className: "flex h-7 items-center text-base text-doom-dim",
3360
+ className: "flex h-7 items-center text-base text-po-dim",
3356
3361
  children: "whatever the workflow resolves"
3357
3362
  }) : /* @__PURE__ */ jsxs(Select, {
3358
3363
  value: runner,
@@ -3367,7 +3372,7 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3367
3372
  }, choice)) })]
3368
3373
  }),
3369
3374
  /* @__PURE__ */ jsx("span", {
3370
- className: "text-sm text-doom-dim",
3375
+ className: "text-sm text-po-dim",
3371
3376
  children: workflow.runners === void 0 ? "no runner map declared" : "the runners every step agrees on"
3372
3377
  })
3373
3378
  ]
@@ -3393,11 +3398,11 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3393
3398
  children: [
3394
3399
  /* @__PURE__ */ jsx(FieldLabel, { children: "Jobs" }),
3395
3400
  /* @__PURE__ */ jsx("span", {
3396
- className: "flex h-7 items-center text-base text-doom-dim",
3401
+ className: "flex h-7 items-center text-base text-po-dim",
3397
3402
  children: workflow.jobs.map((job) => job.name).join(" → ") || "none declared"
3398
3403
  }),
3399
3404
  /* @__PURE__ */ jsx("span", {
3400
- className: "text-sm text-doom-dim",
3405
+ className: "text-sm text-po-dim",
3401
3406
  children: "in the order the file declares them"
3402
3407
  })
3403
3408
  ]
@@ -3407,11 +3412,11 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3407
3412
  children: [
3408
3413
  /* @__PURE__ */ jsx(FieldLabel, { children: "Cwd" }),
3409
3414
  /* @__PURE__ */ jsx("span", {
3410
- className: "flex h-7 items-center font-mono text-sm text-doom-dim",
3415
+ className: "flex h-7 items-center font-mono text-sm text-po-dim",
3411
3416
  children: cwd
3412
3417
  }),
3413
3418
  /* @__PURE__ */ jsx("span", {
3414
- className: "text-sm text-doom-dim",
3419
+ className: "text-sm text-po-dim",
3415
3420
  children: "the session's directory"
3416
3421
  })
3417
3422
  ]
@@ -3419,23 +3424,23 @@ function LaunchWorkflowDialog({ sessionId, workflow, cwd, initialPrompt, send, o
3419
3424
  ]
3420
3425
  }),
3421
3426
  /* @__PURE__ */ jsxs("div", {
3422
- className: "flex flex-col gap-1 rounded-md border border-doom-border bg-doom-deep px-3 py-2",
3427
+ className: "flex flex-col gap-1 rounded-md border border-po-border bg-po-deep px-3 py-2",
3423
3428
  children: [/* @__PURE__ */ jsx(FieldLabel, { children: "Sent to the session" }), /* @__PURE__ */ jsx("pre", {
3424
3429
  "data-testid": "launch-line",
3425
- className: "whitespace-pre-wrap break-words font-mono text-sm text-doom-green",
3430
+ className: "whitespace-pre-wrap break-words font-mono text-sm text-po-green",
3426
3431
  children: line
3427
3432
  })]
3428
3433
  }),
3429
3434
  problems.length === 0 ? null : /* @__PURE__ */ jsx("p", {
3430
3435
  "data-testid": "launch-problems",
3431
- className: "text-base text-doom-yellow",
3436
+ className: "text-base text-po-yellow",
3432
3437
  children: problems.join(" ")
3433
3438
  }),
3434
3439
  /* @__PURE__ */ jsxs(DialogFooter, {
3435
3440
  className: "flex-wrap sm:flex-nowrap",
3436
3441
  children: [
3437
3442
  /* @__PURE__ */ jsx("span", {
3438
- className: "w-full text-sm text-doom-dim sm:w-auto",
3443
+ className: "w-full text-sm text-po-dim sm:w-auto",
3439
3444
  children: "the run appears on the board as soon as it starts"
3440
3445
  }),
3441
3446
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1" }),
@@ -3479,10 +3484,10 @@ function Detail({ workflow }) {
3479
3484
  children: rows.map(([label, value]) => /* @__PURE__ */ jsxs("div", {
3480
3485
  className: "flex gap-2",
3481
3486
  children: [/* @__PURE__ */ jsx("dt", {
3482
- className: "w-16 shrink-0 text-doom-dim",
3487
+ className: "w-16 shrink-0 text-po-dim",
3483
3488
  children: label
3484
3489
  }), /* @__PURE__ */ jsx("dd", {
3485
- className: "min-w-0 break-words text-doom-dim",
3490
+ className: "min-w-0 break-words text-po-dim",
3486
3491
  children: value
3487
3492
  })]
3488
3493
  }, label))
@@ -3498,13 +3503,13 @@ function WorkflowRow({ workflow, selected, inspected, onSelect, onLaunch, onInsp
3498
3503
  "data-selected": selected,
3499
3504
  onClick: onSelect,
3500
3505
  onDoubleClick: onLaunch,
3501
- className: `flex cursor-pointer flex-col gap-1 border-l-2 px-4 py-2 ${selected ? "border-doom-blue bg-doom-panel" : "border-transparent hover:bg-doom-panel/60"}`,
3506
+ className: `flex cursor-pointer flex-col gap-1 border-l-2 px-4 py-2 ${selected ? "border-po-blue bg-po-panel" : "border-transparent hover:bg-po-panel/60"}`,
3502
3507
  children: [
3503
3508
  /* @__PURE__ */ jsxs("div", {
3504
3509
  className: "flex min-w-0 items-center gap-2",
3505
3510
  children: [
3506
3511
  /* @__PURE__ */ jsx("span", {
3507
- className: "truncate text-base font-semibold text-doom-hi",
3512
+ className: "truncate text-base font-semibold text-po-hi",
3508
3513
  children: workflow.name
3509
3514
  }),
3510
3515
  workflow.tags.map((tag) => /* @__PURE__ */ jsx(Badge, {
@@ -3514,17 +3519,17 @@ function WorkflowRow({ workflow, selected, inspected, onSelect, onLaunch, onInsp
3514
3519
  }, tag)),
3515
3520
  /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1" }),
3516
3521
  /* @__PURE__ */ jsx("span", {
3517
- className: `shrink-0 text-sm ${workflow.error === void 0 ? "text-doom-cyan" : "text-doom-red"}`,
3522
+ className: `shrink-0 text-sm ${workflow.error === void 0 ? "text-po-cyan" : "text-po-red"}`,
3518
3523
  children: workflow.error === void 0 ? `${jobs} job${jobs === 1 ? "" : "s"}` : "needs fixing"
3519
3524
  })
3520
3525
  ]
3521
3526
  }),
3522
3527
  /* @__PURE__ */ jsx("span", {
3523
- className: "truncate text-sm text-doom-dim",
3528
+ className: "truncate text-sm text-po-dim",
3524
3529
  children: workflow.description || workflow.relativePath
3525
3530
  }),
3526
3531
  workflow.error === void 0 ? /* @__PURE__ */ jsxs("span", {
3527
- className: "truncate text-sm text-doom-dim",
3532
+ className: "truncate text-sm text-po-dim",
3528
3533
  children: [
3529
3534
  workflow.inputs.length,
3530
3535
  " input",
@@ -3535,7 +3540,7 @@ function WorkflowRow({ workflow, selected, inspected, onSelect, onLaunch, onInsp
3535
3540
  workflow.artifacts.length > 0 ? ` · ${workflow.artifacts.length} artifacts` : ""
3536
3541
  ]
3537
3542
  }) : /* @__PURE__ */ jsx("span", {
3538
- className: "truncate text-base text-doom-red",
3543
+ className: "truncate text-base text-po-red",
3539
3544
  children: workflow.error
3540
3545
  }),
3541
3546
  selected ? /* @__PURE__ */ jsxs("div", {
@@ -3555,7 +3560,7 @@ function WorkflowRow({ workflow, selected, inspected, onSelect, onLaunch, onInsp
3555
3560
  variant: "link",
3556
3561
  size: "xs",
3557
3562
  "data-testid": `catalog-inspect-${workflow.name}`,
3558
- className: "px-0 text-doom-dim",
3563
+ className: "px-0 text-po-dim",
3559
3564
  onClick: (event) => {
3560
3565
  event.stopPropagation();
3561
3566
  onInspect();
@@ -3607,13 +3612,13 @@ function WorkflowCatalogDrawer({ sessionId, onClose, onLaunch }) {
3607
3612
  "data-testid": "workflow-catalog-drawer",
3608
3613
  tabIndex: 0,
3609
3614
  onKeyDown,
3610
- className: "flex w-[min(440px,calc(100vw-24px))] max-w-full shrink-0 flex-col overflow-hidden border-l border-doom-border bg-doom-rail outline-none",
3615
+ className: "flex w-[min(440px,calc(100vw-24px))] max-w-full shrink-0 flex-col overflow-hidden border-l border-po-border bg-po-rail outline-none",
3611
3616
  children: [
3612
3617
  /* @__PURE__ */ jsxs("div", {
3613
- className: "flex h-11 shrink-0 items-center gap-2.5 border-b border-doom-border px-4",
3618
+ className: "flex h-11 shrink-0 items-center gap-2.5 border-b border-po-border px-4",
3614
3619
  children: [
3615
3620
  /* @__PURE__ */ jsx("span", {
3616
- className: "text-lg font-semibold text-doom-hi",
3621
+ className: "text-lg font-semibold text-po-hi",
3617
3622
  children: "workflow catalog"
3618
3623
  }),
3619
3624
  /* @__PURE__ */ jsxs(Badge, {
@@ -3652,7 +3657,7 @@ function WorkflowCatalogDrawer({ sessionId, onClose, onLaunch }) {
3652
3657
  className: "flex min-h-0 flex-1 flex-col overflow-y-auto pb-2",
3653
3658
  children: [shown.length === 0 ? /* @__PURE__ */ jsx("p", {
3654
3659
  "data-testid": "catalog-empty",
3655
- className: "px-4 py-3 text-sm text-doom-dim",
3660
+ className: "px-4 py-3 text-sm text-po-dim",
3656
3661
  children: state.warning ?? (state.workflows.length === 0 ? "no workflows found for this session; add one under automations/workflows" : "nothing matches the filter")
3657
3662
  }) : null, shown.map((workflow) => /* @__PURE__ */ jsx(WorkflowRow, {
3658
3663
  workflow,
@@ -3664,12 +3669,12 @@ function WorkflowCatalogDrawer({ sessionId, onClose, onLaunch }) {
3664
3669
  }, workflow.path))]
3665
3670
  }),
3666
3671
  /* @__PURE__ */ jsxs("div", {
3667
- className: "flex h-8 shrink-0 items-center justify-between border-t border-doom-border-soft bg-doom-deep px-4",
3672
+ className: "flex h-8 shrink-0 items-center justify-between border-t border-po-border-soft bg-po-deep px-4",
3668
3673
  children: [/* @__PURE__ */ jsx("span", {
3669
- className: "shrink-0 text-sm text-doom-dim",
3674
+ className: "shrink-0 text-sm text-po-dim",
3670
3675
  children: "↑↓ choose · enter launch · i inspect · esc close"
3671
3676
  }), /* @__PURE__ */ jsx("span", {
3672
- className: "min-w-0 truncate font-mono text-sm text-doom-dim",
3677
+ className: "min-w-0 truncate font-mono text-sm text-po-dim",
3673
3678
  children: state.cwd
3674
3679
  })]
3675
3680
  })