@burdenoff/fluidgrids-fe-sdk 2026.1113.7 → 2026.1113.9

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 (66) hide show
  1. package/dist/{AiStudioPage-DZ0YBcTL.js → AiStudioPage-D9vovsZE.js} +4 -4
  2. package/dist/{ApprovalInboxPage-CbkmOXaq.js → ApprovalInboxPage-DVoqdqwA.js} +1 -1
  3. package/dist/{DataSinkDashboardPage-231cS9dt.js → DataSinkDashboardPage-CXb1uNau.js} +1 -1
  4. package/dist/{ExecutionDetailPage-CoRLOiiZ.js → ExecutionDetailPage-BuU66VvK.js} +29 -17
  5. package/dist/{ExecutionsListDocument-CzdLPpj5.js → ExecutionStatsDocument-6ixNZnBV.js} +1 -346
  6. package/dist/{ExecutionsListPage-Dr0Ychbr.js → ExecutionsListPage-DMAOPJCa.js} +8 -5
  7. package/dist/{FluidGridsProvider-DQP7gPxN.js → FluidGridsProvider-BOBuK7kj.js} +481 -32
  8. package/dist/{HistoryPage-C99YGv7V.js → HistoryPage-DUcPEycb.js} +1 -1
  9. package/dist/{InsightsPage-ySywDcp_.js → InsightsPage-C3FjaLKN.js} +1 -1
  10. package/dist/{PaidTemplateConfirm-CI6TDivO.js → PaidTemplateConfirm-Dop_rxCQ.js} +1 -1
  11. package/dist/{QuotaExhaustedDialog-nlnRlQ2i.js → QuotaExhaustedDialog-CijT1MyD.js} +1 -1
  12. package/dist/{SettingsPage-tKzJkG-L.js → SettingsPage-C4G9OlJV.js} +3 -3
  13. package/dist/{TemplateCard-UnjAFsS4.js → TemplateCard-7rE1VAIC.js} +2 -2
  14. package/dist/{TemplatePreview-WiRz3SCv.js → TemplatePreview-CSA9W-e1.js} +4 -4
  15. package/dist/{TemplatesPage-Z2LDGg3g.js → TemplatesPage-C_trA48U.js} +7 -7
  16. package/dist/TranslationBridge-Bd4aJKMs.d.ts +11 -0
  17. package/dist/{WorkflowBuilder-CQWz7dXc.js → WorkflowBuilder-CkoZDS1_.js} +3 -3
  18. package/dist/{WorkflowBuilder-BdnCh2hB.js → WorkflowBuilder-DZWmp9Vg.js} +5 -5
  19. package/dist/{WorkflowSearchRedirect-DoiDmeyL.js → WorkflowSearchRedirect-DQj9_HqI.js} +1 -1
  20. package/dist/{WorkflowsList-C86YEuZZ.js → WorkflowsList-BOTt7lX5.js} +5 -5
  21. package/dist/agent-tools.d.ts +1 -1
  22. package/dist/agent-tools.js +2 -2
  23. package/dist/{agentTools-BQbgd_wK.js → agentTools-CSoCNDRx.js} +1 -1
  24. package/dist/{askAboutBridge-BV8m95kk.js → askAboutBridge-kpcjcR9Y.js} +8 -1
  25. package/dist/assistant.js +1 -1
  26. package/dist/{canvasNoteTools-Cp3UPIM8.js → canvasNoteTools-DTc3EKvg.js} +2 -2
  27. package/dist/{constants-XdvUxeWK.d.ts → constants-svpG-QrV.d.ts} +1 -9
  28. package/dist/entities-I_0kio3q.js +38 -0
  29. package/dist/executions.js +2 -2
  30. package/dist/{flow-builder-CJ00qt1Z.js → flow-builder-CYlYHdhf.js} +125 -24
  31. package/dist/history.js +1 -1
  32. package/dist/{index-Df6NgmmH.d.ts → index-8Ai8teoo.d.ts} +1 -1
  33. package/dist/{index-CHeY7_A1.d.ts → index-BZCX9eJJ.d.ts} +13 -0
  34. package/dist/index.d.ts +4 -3
  35. package/dist/index.js +33 -32
  36. package/dist/{marksStore-DGCXjTmZ.js → marksStore-a9oIMMot.js} +25 -1
  37. package/dist/{node-detail-view-DtZe2ggI.js → node-detail-view-N6n3qegt.js} +4 -4
  38. package/dist/{node-editor-tab-body-CFprr94T.js → node-editor-tab-body-CivWI2hg.js} +2 -2
  39. package/dist/observability.d.ts +1 -1
  40. package/dist/observability.js +2 -2
  41. package/dist/{popover-DuaVzhfH.js → popover-a8WKNgPP.js} +2 -2
  42. package/dist/proactive.d.ts +66 -0
  43. package/dist/proactive.js +237 -0
  44. package/dist/{quick-config-panel-CmL27iO-.js → quick-config-panel-DABEVJR9.js} +3 -3
  45. package/dist/{run-display-BycKYSU0.js → run-display-UjLAoYqQ.js} +38 -3
  46. package/dist/{schedule-panel-DIUNqU9B.js → schedule-panel--u7WXnaC.js} +4 -4
  47. package/dist/settings.js +1 -1
  48. package/dist/{sidebar-node-editor-C_mhVSxd.js → sidebar-node-editor-BHqtoMC5.js} +3 -3
  49. package/dist/templates.js +2 -2
  50. package/dist/{uiMarkTools-DZ6akjQK.js → uiMarkTools-B2581Qg-.js} +1 -1
  51. package/dist/{useWorkflowProposal-UtJYycLv.js → use-workflow-tests-BUzndyWO.js} +4 -3265
  52. package/dist/{useAgentDefinitions-CKZ7oDZD.js → useAgentDefinitions-DykIYrep.js} +2 -2
  53. package/dist/{useDurableParity-BUSM-z_7.js → useDurableParity-sS0LIJ_l.js} +1 -1
  54. package/dist/{useExecutions-DSZisQHk.js → useExecutions-GgjDOgcd.js} +2 -2
  55. package/dist/{useGlobalStoreClient-CXPqlK1M.js → useGlobalStoreClient-BfmKmeIx.js} +1 -1
  56. package/dist/{useObservability-n7Qdc8Xg.js → useObservability-AMDVk_hX.js} +1 -1
  57. package/dist/{useRunHistory-Bxs6LrME.js → useRunHistory-gnqIoJnZ.js} +1 -1
  58. package/dist/{useWorkflowCodeExport-Bj4QY-xY.js → useWorkflowCodeExport-DrcfDTcD.js} +1 -1
  59. package/dist/useWorkflowProposal-B9vXLKef.js +3280 -0
  60. package/dist/{useWorkflows-BY5b8r9n.js → useWorkflows-DSZUrK_o.js} +1 -1
  61. package/dist/workflow-builder.js +4 -4
  62. package/dist/workflow-host.d.ts +2 -1
  63. package/dist/workflow-pages.d.ts +1 -1
  64. package/dist/workflow-pages.js +14 -14
  65. package/dist/workflows-list.js +1 -1
  66. package/package.json +7 -3
@@ -13,7 +13,8 @@ import { a as emitOperationErrorEvent, i as emitFluidGridsEvent, o as emitRunCom
13
13
  import { i as emitRunStarted, n as emitRunFailed, r as emitRunLimitHit, s as emitWorkflowCreated } from "./fluidgridsEvents-Dm5CaHtr.js";
14
14
  import { a as collectExtensions, n as QUOTA_EXHAUSTED_CODE, o as errorCodesOf, r as RUNS_QUOTA_NAME, s as findQuotaRefusal } from "./quota-Cdt8yz7N.js";
15
15
  import { c as setFluidGridsConfig, l as validateTrustedOrigin, o as resetFluidGridsConfig, r as getFluidGridsConfig, s as resetFluidGridsExecutionState } from "./config-X97zrIvn.js";
16
- import { n as useFgAskable } from "./askAboutBridge-BV8m95kk.js";
16
+ import { r as useFgAskable } from "./askAboutBridge-kpcjcR9Y.js";
17
+ import { i as readableNodeType } from "./run-display-UjLAoYqQ.js";
17
18
  import { t as provideNodeRegistryRefresh } from "./node-registry-refresh-s3okf83X.js";
18
19
  import { createContext, memo, useCallback, useContext, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
19
20
  import { useNavigate, useParams } from "react-router";
@@ -1561,6 +1562,351 @@ const ExecutionDetailDocument = {
1561
1562
  }]
1562
1563
  };
1563
1564
 
1565
+ // src/generated/documents/wspace/ExecutionsListDocument.ts
1566
+ const ExecutionsListDocument = {
1567
+ "kind": "Document",
1568
+ "definitions": [{
1569
+ "kind": "OperationDefinition",
1570
+ "operation": "query",
1571
+ "name": {
1572
+ "kind": "Name",
1573
+ "value": "ExecutionsList"
1574
+ },
1575
+ "variableDefinitions": [{
1576
+ "kind": "VariableDefinition",
1577
+ "variable": {
1578
+ "kind": "Variable",
1579
+ "name": {
1580
+ "kind": "Name",
1581
+ "value": "input"
1582
+ }
1583
+ },
1584
+ "type": {
1585
+ "kind": "NonNullType",
1586
+ "type": {
1587
+ "kind": "NamedType",
1588
+ "name": {
1589
+ "kind": "Name",
1590
+ "value": "ListWorkflowRunsInput"
1591
+ }
1592
+ }
1593
+ },
1594
+ "directives": []
1595
+ }],
1596
+ "directives": [],
1597
+ "selectionSet": {
1598
+ "kind": "SelectionSet",
1599
+ "selections": [{
1600
+ "kind": "Field",
1601
+ "name": {
1602
+ "kind": "Name",
1603
+ "value": "workflowRuns"
1604
+ },
1605
+ "arguments": [{
1606
+ "kind": "Argument",
1607
+ "name": {
1608
+ "kind": "Name",
1609
+ "value": "input"
1610
+ },
1611
+ "value": {
1612
+ "kind": "Variable",
1613
+ "name": {
1614
+ "kind": "Name",
1615
+ "value": "input"
1616
+ }
1617
+ }
1618
+ }],
1619
+ "directives": [],
1620
+ "selectionSet": {
1621
+ "kind": "SelectionSet",
1622
+ "selections": [
1623
+ {
1624
+ "kind": "Field",
1625
+ "name": {
1626
+ "kind": "Name",
1627
+ "value": "items"
1628
+ },
1629
+ "arguments": [],
1630
+ "directives": [],
1631
+ "selectionSet": {
1632
+ "kind": "SelectionSet",
1633
+ "selections": [
1634
+ {
1635
+ "kind": "Field",
1636
+ "name": {
1637
+ "kind": "Name",
1638
+ "value": "id"
1639
+ },
1640
+ "arguments": [],
1641
+ "directives": []
1642
+ },
1643
+ {
1644
+ "kind": "Field",
1645
+ "name": {
1646
+ "kind": "Name",
1647
+ "value": "workflowId"
1648
+ },
1649
+ "arguments": [],
1650
+ "directives": []
1651
+ },
1652
+ {
1653
+ "kind": "Field",
1654
+ "name": {
1655
+ "kind": "Name",
1656
+ "value": "workflowKey"
1657
+ },
1658
+ "arguments": [],
1659
+ "directives": []
1660
+ },
1661
+ {
1662
+ "kind": "Field",
1663
+ "name": {
1664
+ "kind": "Name",
1665
+ "value": "version"
1666
+ },
1667
+ "arguments": [],
1668
+ "directives": []
1669
+ },
1670
+ {
1671
+ "kind": "Field",
1672
+ "name": {
1673
+ "kind": "Name",
1674
+ "value": "triggerNodeId"
1675
+ },
1676
+ "arguments": [],
1677
+ "directives": []
1678
+ },
1679
+ {
1680
+ "kind": "Field",
1681
+ "name": {
1682
+ "kind": "Name",
1683
+ "value": "triggerData"
1684
+ },
1685
+ "arguments": [],
1686
+ "directives": []
1687
+ },
1688
+ {
1689
+ "kind": "Field",
1690
+ "name": {
1691
+ "kind": "Name",
1692
+ "value": "status"
1693
+ },
1694
+ "arguments": [],
1695
+ "directives": []
1696
+ },
1697
+ {
1698
+ "kind": "Field",
1699
+ "name": {
1700
+ "kind": "Name",
1701
+ "value": "mode"
1702
+ },
1703
+ "arguments": [],
1704
+ "directives": []
1705
+ },
1706
+ {
1707
+ "kind": "Field",
1708
+ "name": {
1709
+ "kind": "Name",
1710
+ "value": "context"
1711
+ },
1712
+ "arguments": [],
1713
+ "directives": []
1714
+ },
1715
+ {
1716
+ "kind": "Field",
1717
+ "name": {
1718
+ "kind": "Name",
1719
+ "value": "triggeredById"
1720
+ },
1721
+ "arguments": [],
1722
+ "directives": []
1723
+ },
1724
+ {
1725
+ "kind": "Field",
1726
+ "name": {
1727
+ "kind": "Name",
1728
+ "value": "parentRunId"
1729
+ },
1730
+ "arguments": [],
1731
+ "directives": []
1732
+ },
1733
+ {
1734
+ "kind": "Field",
1735
+ "name": {
1736
+ "kind": "Name",
1737
+ "value": "createdAt"
1738
+ },
1739
+ "arguments": [],
1740
+ "directives": []
1741
+ },
1742
+ {
1743
+ "kind": "Field",
1744
+ "name": {
1745
+ "kind": "Name",
1746
+ "value": "updatedAt"
1747
+ },
1748
+ "arguments": [],
1749
+ "directives": []
1750
+ },
1751
+ {
1752
+ "kind": "Field",
1753
+ "name": {
1754
+ "kind": "Name",
1755
+ "value": "startedAt"
1756
+ },
1757
+ "arguments": [],
1758
+ "directives": []
1759
+ },
1760
+ {
1761
+ "kind": "Field",
1762
+ "name": {
1763
+ "kind": "Name",
1764
+ "value": "completedAt"
1765
+ },
1766
+ "arguments": [],
1767
+ "directives": []
1768
+ },
1769
+ {
1770
+ "kind": "Field",
1771
+ "name": {
1772
+ "kind": "Name",
1773
+ "value": "duration"
1774
+ },
1775
+ "arguments": [],
1776
+ "directives": []
1777
+ },
1778
+ {
1779
+ "kind": "Field",
1780
+ "name": {
1781
+ "kind": "Name",
1782
+ "value": "errorMessage"
1783
+ },
1784
+ "arguments": [],
1785
+ "directives": []
1786
+ },
1787
+ {
1788
+ "kind": "Field",
1789
+ "name": {
1790
+ "kind": "Name",
1791
+ "value": "errorType"
1792
+ },
1793
+ "arguments": [],
1794
+ "directives": []
1795
+ },
1796
+ {
1797
+ "kind": "Field",
1798
+ "name": {
1799
+ "kind": "Name",
1800
+ "value": "totalNodes"
1801
+ },
1802
+ "arguments": [],
1803
+ "directives": []
1804
+ },
1805
+ {
1806
+ "kind": "Field",
1807
+ "name": {
1808
+ "kind": "Name",
1809
+ "value": "completedNodes"
1810
+ },
1811
+ "arguments": [],
1812
+ "directives": []
1813
+ },
1814
+ {
1815
+ "kind": "Field",
1816
+ "name": {
1817
+ "kind": "Name",
1818
+ "value": "failedNodes"
1819
+ },
1820
+ "arguments": [],
1821
+ "directives": []
1822
+ },
1823
+ {
1824
+ "kind": "Field",
1825
+ "name": {
1826
+ "kind": "Name",
1827
+ "value": "skippedNodes"
1828
+ },
1829
+ "arguments": [],
1830
+ "directives": []
1831
+ },
1832
+ {
1833
+ "kind": "Field",
1834
+ "name": {
1835
+ "kind": "Name",
1836
+ "value": "progress"
1837
+ },
1838
+ "arguments": [],
1839
+ "directives": []
1840
+ },
1841
+ {
1842
+ "kind": "Field",
1843
+ "name": {
1844
+ "kind": "Name",
1845
+ "value": "workflow"
1846
+ },
1847
+ "arguments": [],
1848
+ "directives": [],
1849
+ "selectionSet": {
1850
+ "kind": "SelectionSet",
1851
+ "selections": [
1852
+ {
1853
+ "kind": "Field",
1854
+ "name": {
1855
+ "kind": "Name",
1856
+ "value": "id"
1857
+ },
1858
+ "arguments": [],
1859
+ "directives": []
1860
+ },
1861
+ {
1862
+ "kind": "Field",
1863
+ "name": {
1864
+ "kind": "Name",
1865
+ "value": "name"
1866
+ },
1867
+ "arguments": [],
1868
+ "directives": []
1869
+ },
1870
+ {
1871
+ "kind": "Field",
1872
+ "name": {
1873
+ "kind": "Name",
1874
+ "value": "description"
1875
+ },
1876
+ "arguments": [],
1877
+ "directives": []
1878
+ }
1879
+ ]
1880
+ }
1881
+ }
1882
+ ]
1883
+ }
1884
+ },
1885
+ {
1886
+ "kind": "Field",
1887
+ "name": {
1888
+ "kind": "Name",
1889
+ "value": "total"
1890
+ },
1891
+ "arguments": [],
1892
+ "directives": []
1893
+ },
1894
+ {
1895
+ "kind": "Field",
1896
+ "name": {
1897
+ "kind": "Name",
1898
+ "value": "hasMore"
1899
+ },
1900
+ "arguments": [],
1901
+ "directives": []
1902
+ }
1903
+ ]
1904
+ }
1905
+ }]
1906
+ }
1907
+ }]
1908
+ };
1909
+
1564
1910
  // src/generated/documents/wspace/CreateWorkflowDefinitionDocument.ts
1565
1911
  const CreateWorkflowDefinitionDocument = {
1566
1912
  "kind": "Document",
@@ -9078,6 +9424,16 @@ function describeCanvasStep(step) {
9078
9424
  label: "Last run error",
9079
9425
  value: step.runError.trim()
9080
9426
  });
9427
+ const failed = step.latestFailedRun;
9428
+ if (failed?.errorMessage?.trim()) facts.push({
9429
+ label: "Workflow's latest failed run",
9430
+ value: [
9431
+ failed.at ? `${failed.at}:` : "",
9432
+ failed.errorType?.trim() ? `${failed.errorType.trim()}:` : "",
9433
+ failed.errorMessage.trim(),
9434
+ `(run ${failed.runId})`
9435
+ ].filter(Boolean).join(" ")
9436
+ });
9081
9437
  if (step.connections && step.connections.length > 0) facts.push({
9082
9438
  label: "Connections picked",
9083
9439
  value: step.connections.join(", ")
@@ -9110,12 +9466,13 @@ function record(value) {
9110
9466
  /**
9111
9467
  * The facts `describeCanvasStep` reads, from the builder's own state. The name
9112
9468
  * is the registry's title, or, when the type is not in the registry (an
9113
- * uninstalled store node), the node's saved manifest name, as the card shows.
9469
+ * uninstalled store node, or a catalogue still loading), the node's saved
9470
+ * manifest name, else the type read as a name (`internal:code` → "Code").
9114
9471
  */
9115
9472
  function canvasStepFactsOf(step) {
9116
9473
  const data = step.data ?? {};
9117
9474
  const savedName = record(data.nodeData)?.name;
9118
- const appName = (step.registryTitle === step.type && typeof savedName === "string" ? savedName : step.registryTitle) || step.id;
9475
+ const appName = (Boolean(step.type) && step.registryTitle === step.type ? typeof savedName === "string" && savedName.trim() ? savedName : readableNodeType(step.registryTitle) : step.registryTitle) || step.id;
9119
9476
  const connections = record(data.args)?.connections;
9120
9477
  const runError = [...step.execution.logs].reverse().find((log) => log.nodeId === step.id && log.status === "failed")?.error ?? null;
9121
9478
  return {
@@ -9140,7 +9497,8 @@ function canvasStepFactsOf(step) {
9140
9497
  value: step.state[param.name]
9141
9498
  })),
9142
9499
  ...step.execution.nodeStatuses[step.id] ? { runStatus: step.execution.nodeStatuses[step.id] } : {},
9143
- runError
9500
+ runError,
9501
+ ...step.latestFailedRun ? { latestFailedRun: step.latestFailedRun } : {}
9144
9502
  };
9145
9503
  }
9146
9504
  function runFacts(run) {
@@ -9151,10 +9509,13 @@ function runFacts(run) {
9151
9509
  label: "Run status",
9152
9510
  value: run.status
9153
9511
  }];
9154
- if (run.workflowKey) facts.push({
9155
- label: "Workflow",
9156
- value: run.version !== void 0 ? `${run.workflowKey} v${run.version}` : run.workflowKey
9157
- });
9512
+ if (run.workflowKey) {
9513
+ const key = run.version !== void 0 ? `${run.workflowKey} v${run.version}` : run.workflowKey;
9514
+ facts.push({
9515
+ label: "Workflow",
9516
+ value: run.workflowName?.trim() ? `${run.workflowName.trim()} (${key})` : key
9517
+ });
9518
+ }
9158
9519
  return facts;
9159
9520
  }
9160
9521
  /** One step of a run, on the run's page. */
@@ -9193,6 +9554,11 @@ function describeRunStep(step) {
9193
9554
  /** The error a whole run ended with, on the run's page. */
9194
9555
  function describeRunError(run) {
9195
9556
  const facts = [];
9557
+ const stoppedAt = run.stoppedAt?.trim();
9558
+ if (stoppedAt) facts.push({
9559
+ label: "Stopped at step",
9560
+ value: stoppedAt
9561
+ });
9196
9562
  if (run.errorType?.trim()) facts.push({
9197
9563
  label: "Error type",
9198
9564
  value: run.errorType.trim()
@@ -9208,11 +9574,90 @@ function describeRunError(run) {
9208
9574
  facts.push(...runFacts(run));
9209
9575
  return {
9210
9576
  kind: "run error",
9211
- label: "Run error",
9577
+ label: stoppedAt ? `Run error at ${stoppedAt}` : "Run error",
9212
9578
  id: run.runId,
9213
9579
  facts
9214
9580
  };
9215
9581
  }
9582
+ /**
9583
+ * ★ BOFF-13267: the run as a whole (its title and summary on the run's page):
9584
+ * its error when it failed, otherwise what it is and how it went.
9585
+ */
9586
+ function describeRun(run) {
9587
+ if (run.errorMessage?.trim() || run.stoppedAt?.trim()) return describeRunError(run);
9588
+ return {
9589
+ kind: "run",
9590
+ label: run.workflowName?.trim() || "This run",
9591
+ id: run.runId,
9592
+ facts: runFacts(run)
9593
+ };
9594
+ }
9595
+
9596
+ // src/askAbout/latestFailedRun.ts
9597
+ /**
9598
+ * ★ BOFF-13267: the saved workflow's latest failed run, for "Ask AI about this"
9599
+ * on a canvas step. The canvas only knows test runs started on it; without the
9600
+ * workflow's real failures the assistant guessed why a step fails (prod
9601
+ * testing, 2026-11-13).
9602
+ *
9603
+ * One small query (limit 1) when a saved workflow opens in the builder, and
9604
+ * only where the assistant can be asked (see `useFgAskAboutAvailable`). The
9605
+ * describer reads it synchronously at the moment the person asks; until it
9606
+ * arrives, or when it fails, the step is described without it.
9607
+ */
9608
+ /** workflowKey → its latest failed run (null: it has none). Session memory only. */
9609
+ const latest = /* @__PURE__ */ new Map();
9610
+ const loading = /* @__PURE__ */ new Map();
9611
+ /** What is known for `workflowKey`: undefined while not loaded yet. */
9612
+ function latestFailedRunFor(workflowKey) {
9613
+ return workflowKey ? latest.get(workflowKey) : void 0;
9614
+ }
9615
+ const text = (value) => typeof value === "string" && value.trim() ? value : null;
9616
+ /** The first row of a `workflowRuns` page, read defensively. */
9617
+ function latestFailedRunOf(rows) {
9618
+ const row = Array.isArray(rows) ? rows[0] : void 0;
9619
+ const runId = text(row?.id);
9620
+ if (!row || !runId) return null;
9621
+ return {
9622
+ runId,
9623
+ at: text(row.startedAt) ?? text(row.createdAt),
9624
+ errorType: text(row.errorType),
9625
+ errorMessage: text(row.errorMessage)
9626
+ };
9627
+ }
9628
+ const fetchFailedRuns = async (workflowKey) => {
9629
+ return (await getFluidGridsClient().query({
9630
+ query: ExecutionsListDocument,
9631
+ variables: { input: {
9632
+ workflowKey,
9633
+ status: "FAILED",
9634
+ limit: 1
9635
+ } },
9636
+ fetchPolicy: "network-only"
9637
+ })).data?.workflowRuns?.items;
9638
+ };
9639
+ /**
9640
+ * Loads (or reloads) `workflowKey`'s latest failed run. Concurrent calls share
9641
+ * one request; a failure leaves what was known before.
9642
+ */
9643
+ function loadLatestFailedRun(workflowKey, fetcher = fetchFailedRuns) {
9644
+ const pending = loading.get(workflowKey);
9645
+ if (pending) return pending;
9646
+ const request = fetcher(workflowKey).then((rows) => {
9647
+ latest.set(workflowKey, latestFailedRunOf(rows));
9648
+ }).catch(() => void 0).finally(() => {
9649
+ loading.delete(workflowKey);
9650
+ });
9651
+ loading.set(workflowKey, request);
9652
+ return request;
9653
+ }
9654
+ /** Loads the open workflow's latest failed run once it is saved and askable. */
9655
+ function useLatestFailedRun(workflowKey, enabled) {
9656
+ useEffect(() => {
9657
+ if (!enabled || !workflowKey) return;
9658
+ loadLatestFailedRun(workflowKey);
9659
+ }, [enabled, workflowKey]);
9660
+ }
9216
9661
 
9217
9662
  // src/builder/components/flow-builder/components/blocks/nodes/node/node.tsx
9218
9663
  /**
@@ -9680,33 +10125,37 @@ const getNodeMetadata = (value) => {
9680
10125
  id,
9681
10126
  value?.type
9682
10127
  ]);
9683
- const describeStep = useCallback(() => describeCanvasStep(canvasStepFactsOf({
9684
- id,
9685
- type: value?.type,
9686
- data,
9687
- registryTitle: meta.title,
9688
- trigger: isNodeTrigger({
9689
- type: value?.type,
9690
- data
9691
- }),
9692
- missingSettings: missingParameters,
9693
- missingConnection: missingCredentials,
9694
- params: nodeParamsOf({
10128
+ const describeStep = useCallback(() => {
10129
+ const { execution, workflow } = useFlowStore.getState();
10130
+ return describeCanvasStep(canvasStepFactsOf({
9695
10131
  id,
9696
10132
  type: value?.type,
9697
- data
9698
- }),
9699
- state: nodeStateOf({
9700
- id,
9701
- data
9702
- }),
9703
- execution: useFlowStore.getState().execution
9704
- })), [
10133
+ data,
10134
+ registryTitle: getNodeDetail(value?.type).title,
10135
+ trigger: isNodeTrigger({
10136
+ type: value?.type,
10137
+ data
10138
+ }),
10139
+ missingSettings: missingParameters,
10140
+ missingConnection: missingCredentials,
10141
+ params: nodeParamsOf({
10142
+ id,
10143
+ type: value?.type,
10144
+ data
10145
+ }),
10146
+ state: nodeStateOf({
10147
+ id,
10148
+ data
10149
+ }),
10150
+ execution,
10151
+ latestFailedRun: latestFailedRunFor(workflow.workflowKey || void 0)
10152
+ }));
10153
+ }, [
9705
10154
  data,
9706
10155
  id,
9707
- meta.title,
9708
10156
  missingCredentials,
9709
- missingParameters
10157
+ missingParameters,
10158
+ value?.type
9710
10159
  ]);
9711
10160
  const askable = useFgAskable(describeStep);
9712
10161
  const askableRef = useCallback((element) => askable(element?.closest(".react-flow__node") ?? element), [askable]);
@@ -10932,4 +11381,4 @@ function useFluidGridsContext() {
10932
11381
  return context;
10933
11382
  }
10934
11383
 
10935
- export { missingRequiredParameters as $, parseParameterValue as $t, workflowParameterIssues as A, ExecuteStepDocument as An, shouldReleaseForIdle as At, resolveUiSpec as B, AUTOSAVE_RETRY_DELAYS_MS as Bt, describeRunStep as C, BuilderRunNodeDetailsDocument as Cn, bannerOf as Ct, useInsertNode as D, CreateWorkflowDefinitionDocument as Dn, phaseAfterAcquire as Dt, createConfiguredNode as E, CreateWorkflowVersionDocument as En, leaseCallSequence as Et, nodeTitle as F, replaceAdapterConnections as Fn, sessionBeforeReload as Ft, resolveLoadOptionsSpec as G, resettledBaseline as Gt, isStringOptionList as H, codeBuildIdOf as Ht, optionText as I, getNodeDetail as In, rememberOwnStatusChange as It, casesFromRules as J, useNodeExecution as Jt, ConditionTreeBuilder as K, saveFailureActionOf as Kt, paramsFromOperation as L, buildStickyNode as Ln, rememberRevision as Lt, coerceNumber as M, isOptionalAdapter as Mn, EDIT_SESSION_ID as Mt, fixedParameterState as N, matchesAdapterProvider as Nn, forgetSessionForReload as Nt, MissingParametersDialog as O, ExecutionDetailDocument as On, phaseAfterTakeOver as Ot, nodeSubtitle as P, newConnectionProviderKey as Pn, rememberSessionForReload as Pt, boundFieldsOf as Q, formatParameterValue as Qt, selectedOperationOf as R, loadMarkdown as Rn, revisionOf as Rt, describeRunError as S, BuilderRunStatusDocument as Sn, useEditLeaseStore as St, buildOperationSeed as T, SaveWorkflowDraftDocument as Tn, leaseCallQueue as Tt, optionListText as U, findSaveConflict as Ut, stripSubmitActions as V, canAutosave as Vt, optionListValues as W, inAppLeaveTarget as Wt, parseMappingValue as X, nodeStateDurationMs as Xt, FieldTree as Y, formatElapsedMs as Yt, latestNodeLog as Z, runDurationMs as Zt, registryNodeData as _, signalPayloadCard as _n, refusalOfQuota as _t, NODES_METADATA as a, openRunQuotaUpgradePrompt as an, editingLeaseLocked as at, fetchAllNodeEndpointConfigs as b, NodeEndpointConfigsDocument as bn, workflowSaveQueue as bt, ensureInstalledNodeTypesLoaded as c, clearCodeWorkflowDefinitionCache as cn, touchesSavedFields as ct, ensureRegistryNodeTypesLoaded as d, canSignalRun as dn, useFlowValidator as dt, structuredParameterType as en, useGuardedNavigate as et, isNodeConfigsInitialized as f, declaredSignals as fn, useSaveWorkflow as ft, registerWorkflowNodeTypes as g, runSignalTargets as gn, createThenOpen as gt, registerNodeManifests as h, payloadFromCardValues as hn, classifyCreateRefusal as ht, AVAILABLE_NODES as i, useFluidGridsAnalytics as in, editStateFor as it, asRecord as j, connectionsForAdapter as jn, tickAction as jt, useRunGuard as k, RunFromNodeDocument as kn, releasesOnClose as kt, ensureNodeConfigsLoaded as l, loadDefinitionJson as ln, watchLeavingLosesChanges as lt, refetchStoreNodes as m, parseRawSignalPayload as mn, builderPathOf as mt, FluidGridsProvider as n, resolveNodeOperation as nn, autosaveAllowedFor as nt, NODE_CONFIGS as o, useCanvasEdges as on, leavingLosesChanges as ot, onNodeTypesUpdate as p, durableInterfaceOf as pn, blankWorkflowCreateInput as pt, SwitchRulesEditor as q, workflowFingerprint as qt, useFluidGridsContext as r, isParamVisible as rn, departingSave as rt, NODE_TYPES as s, useNodeRegistryRevision as sn, savedEverythingBeforeLeaving as st, FluidGridsContext as t, fieldsFromValue as tn, useManualSave as tt, ensureNodeTypesLoaded as u, useCodeWorkflowInterface as un, isFlowComplete as ut, scheduleNodePaletteLoad as v, NodePaletteEntriesDocument as vn, saveIndicatorOf as vt, SENSITIVE_PARAM as w, TriggerWorkflowDocument as wn, isLocked as wt, getNodeMetadata as x, EventRegistrationsDocument as xn, useEditLeaseLocked as xt, GetMyNodeInstallationsDocument as y, NodeManifestsDocument as yn, useSaveStatusStore as yt, useNodeConfig as z, useMarkdownRenderer as zn, AUTOSAVE_DEBOUNCE_MS as zt };
11384
+ export { latestNodeLog as $, runDurationMs as $t, MissingParametersDialog as A, ExecutionsListDocument as An, phaseAfterTakeOver as At, selectedOperationOf as B, buildStickyNode as Bn, revisionOf as Bt, describeRun as C, EventRegistrationsDocument as Cn, useEditLeaseLocked as Ct, buildOperationSeed as D, SaveWorkflowDraftDocument as Dn, leaseCallQueue as Dt, SENSITIVE_PARAM as E, TriggerWorkflowDocument as En, isLocked as Et, fixedParameterState as F, isOptionalAdapter as Fn, forgetSessionForReload as Ft, optionListText as G, findSaveConflict as Gt, resolveUiSpec as H, useMarkdownRenderer as Hn, AUTOSAVE_RETRY_DELAYS_MS as Ht, nodeSubtitle as I, matchesAdapterProvider as In, rememberSessionForReload as It, ConditionTreeBuilder as J, saveFailureActionOf as Jt, optionListValues as K, inAppLeaveTarget as Kt, nodeTitle as L, newConnectionProviderKey as Ln, sessionBeforeReload as Lt, workflowParameterIssues as M, RunFromNodeDocument as Mn, shouldReleaseForIdle as Mt, asRecord as N, ExecuteStepDocument as Nn, tickAction as Nt, createConfiguredNode as O, CreateWorkflowVersionDocument as On, leaseCallSequence as Ot, coerceNumber as P, connectionsForAdapter as Pn, EDIT_SESSION_ID as Pt, parseMappingValue as Q, nodeStateDurationMs as Qt, optionText as R, replaceAdapterConnections as Rn, rememberOwnStatusChange as Rt, useLatestFailedRun as S, NodeEndpointConfigsDocument as Sn, workflowSaveQueue as St, describeRunStep as T, BuilderRunNodeDetailsDocument as Tn, bannerOf as Tt, stripSubmitActions as U, canAutosave as Ut, useNodeConfig as V, loadMarkdown as Vn, AUTOSAVE_DEBOUNCE_MS as Vt, isStringOptionList as W, codeBuildIdOf as Wt, casesFromRules as X, useNodeExecution as Xt, SwitchRulesEditor as Y, workflowFingerprint as Yt, FieldTree as Z, formatElapsedMs as Zt, registryNodeData as _, payloadFromCardValues as _n, classifyCreateRefusal as _t, NODES_METADATA as a, isParamVisible as an, departingSave as at, fetchAllNodeEndpointConfigs as b, NodePaletteEntriesDocument as bn, saveIndicatorOf as bt, ensureInstalledNodeTypesLoaded as c, useCanvasEdges as cn, leavingLosesChanges as ct, ensureRegistryNodeTypesLoaded as d, loadDefinitionJson as dn, watchLeavingLosesChanges as dt, formatParameterValue as en, boundFieldsOf as et, isNodeConfigsInitialized as f, useCodeWorkflowInterface as fn, isFlowComplete as ft, registerWorkflowNodeTypes as g, parseRawSignalPayload as gn, builderPathOf as gt, registerNodeManifests as h, durableInterfaceOf as hn, blankWorkflowCreateInput as ht, AVAILABLE_NODES as i, resolveNodeOperation as in, autosaveAllowedFor as it, useRunGuard as j, ExecutionDetailDocument as jn, releasesOnClose as jt, useInsertNode as k, CreateWorkflowDefinitionDocument as kn, phaseAfterAcquire as kt, ensureNodeConfigsLoaded as l, useNodeRegistryRevision as ln, savedEverythingBeforeLeaving as lt, refetchStoreNodes as m, declaredSignals as mn, useSaveWorkflow as mt, FluidGridsProvider as n, structuredParameterType as nn, useGuardedNavigate as nt, NODE_CONFIGS as o, useFluidGridsAnalytics as on, editStateFor as ot, onNodeTypesUpdate as p, canSignalRun as pn, useFlowValidator as pt, resolveLoadOptionsSpec as q, resettledBaseline as qt, useFluidGridsContext as r, fieldsFromValue as rn, useManualSave as rt, NODE_TYPES as s, openRunQuotaUpgradePrompt as sn, editingLeaseLocked as st, FluidGridsContext as t, parseParameterValue as tn, missingRequiredParameters as tt, ensureNodeTypesLoaded as u, clearCodeWorkflowDefinitionCache as un, touchesSavedFields as ut, scheduleNodePaletteLoad as v, runSignalTargets as vn, createThenOpen as vt, describeRunError as w, BuilderRunStatusDocument as wn, useEditLeaseStore as wt, getNodeMetadata as x, NodeManifestsDocument as xn, useSaveStatusStore as xt, GetMyNodeInstallationsDocument as y, signalPayloadCard as yn, refusalOfQuota as yt, paramsFromOperation as z, getNodeDetail as zn, rememberRevision as zt };
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
- import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-BY5b8r9n.js";
3
+ import { d as useRestoreWorkflowVersion, h as useWorkflowDefinitions } from "./useWorkflows-DSZUrK_o.js";
4
4
  import { t as VersionDiffDialog } from "./VersionDiffDialog-D9W5Fm56.js";
5
5
  import { c as versionsOfWorkflow } from "./VersionLifecycleBar-DuphLOT0.js";
6
6
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
@@ -3,7 +3,7 @@ import { t as __exportAll } from "./rolldown-runtime-hDbaFkMy.js";
3
3
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
4
4
  import { n as useNavigationV2 } from "./useNavigationV2-C2WeqN7d.js";
5
5
  import { t as TechnicalDetails } from "./TechnicalDetails-r5JXr1jZ.js";
6
- import { o as useRunReplayActions, r as useInsightsData } from "./useObservability-n7Qdc8Xg.js";
6
+ import { o as useRunReplayActions, r as useInsightsData } from "./useObservability-AMDVk_hX.js";
7
7
  import { a as getTopFailingNodes, i as getFailureBreakdown, l as rankedFailingWorkflows, n as formatDuration, o as getTopFailingWorkflows, s as percentage, u as summarySuccessRate } from "./utils-C0dtnN4R.js";
8
8
  import { n as FailureTriagePanel } from "./FailureTriagePanel-DA91XKVj.js";
9
9
  import { c as useContinuousOptimisationEnabled } from "./feature-flags-B_b8PJ6Z.js";
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
- import { n as formatTemplatePrice } from "./TemplateCard-UnjAFsS4.js";
3
+ import { n as formatTemplatePrice } from "./TemplateCard-7rE1VAIC.js";
4
4
  import { t as ConfirmActionDialog } from "./ConfirmActionDialog-D9Pir3bc.js";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
 
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
3
- import { in as useFluidGridsAnalytics } from "./FluidGridsProvider-DQP7gPxN.js";
3
+ import { on as useFluidGridsAnalytics } from "./FluidGridsProvider-BOBuK7kj.js";
4
4
  import { c as emitWorkflowLimitHit, o as emitUpgradeClicked } from "./fluidgridsEvents-Dm5CaHtr.js";
5
5
  import { i as WORKFLOWS_QUOTA_NAME } from "./quota-Cdt8yz7N.js";
6
6
  import { useEffect, useRef } from "react";
@@ -12,10 +12,10 @@ import { M as saveCodecServerSettings, _ as fetchPauseRules, a as createPauseRul
12
12
  import { i as NativeSelect, o as StatusPill, t as FieldError, u as useResource } from "./shared-C0LCTtyh.js";
13
13
  import { OI as WorkflowSearchAttributeType } from "./graphql-types-C5Tr6508.js";
14
14
  import { A as useFlowStore } from "./node-operation-selection-BGj5YwAS.js";
15
- import { Ut as findSaveConflict, yt as useSaveStatusStore } from "./FluidGridsProvider-DQP7gPxN.js";
16
- import { a as useLogStreamDestinations, i as useLogStreamDestinationActions } from "./useObservability-n7Qdc8Xg.js";
15
+ import { Gt as findSaveConflict, xt as useSaveStatusStore } from "./FluidGridsProvider-BOBuK7kj.js";
16
+ import { a as useLogStreamDestinations, i as useLogStreamDestinationActions } from "./useObservability-AMDVk_hX.js";
17
17
  import { n as useConnections } from "./useConnections-BlB0gbOB.js";
18
- import { Nt as useUpdateWorkflowDefinitionMutation, Rt as useWorkflowDefinitionQuery, Vt as useWorkflowDefinitionsQuery, n as useAgentDefinitions } from "./useAgentDefinitions-CKZ7oDZD.js";
18
+ import { Nt as useUpdateWorkflowDefinitionMutation, Rt as useWorkflowDefinitionQuery, Vt as useWorkflowDefinitionsQuery, n as useAgentDefinitions } from "./useAgentDefinitions-DykIYrep.js";
19
19
  import { a as formToInput$2, i as emptyAgentForm, n as agentToForm, o as grantDays, r as describeRule, t as AgentFormError } from "./agent-form-D0uLvzx4.js";
20
20
  import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
21
21
  import { n as getGlobalStoreClient } from "./global-client-DP_Wxe5t.js";
@@ -3,7 +3,7 @@ import { r as getFluidGridsConfig } from "./config-X97zrIvn.js";
3
3
  import { o as throwIfResultError } from "./errors-xPZ-IbQd.js";
4
4
  import { n as getFluidGridsClient } from "./client-Ctl4jmY3.js";
5
5
  import { n as getGlobalStoreClient } from "./global-client-DP_Wxe5t.js";
6
- import { c as ensureInstalledNodeTypesLoaded, d as ensureRegistryNodeTypesLoaded, i as AVAILABLE_NODES, in as useFluidGridsAnalytics, o as NODE_CONFIGS, t as FluidGridsContext, y as GetMyNodeInstallationsDocument } from "./FluidGridsProvider-DQP7gPxN.js";
6
+ import { c as ensureInstalledNodeTypesLoaded, d as ensureRegistryNodeTypesLoaded, i as AVAILABLE_NODES, o as NODE_CONFIGS, on as useFluidGridsAnalytics, t as FluidGridsContext, y as GetMyNodeInstallationsDocument } from "./FluidGridsProvider-BOBuK7kj.js";
7
7
  import { r as useTr } from "./TranslationBridge-Da-TPgQm.js";
8
8
  import { o as isNodeTypeHiddenFromPalette } from "./durable-nodes-DXCCQYWD.js";
9
9
  import { h as usePhaseDFlags } from "./feature-flags-B_b8PJ6Z.js";
@@ -13,7 +13,7 @@ import { n as InstallWorkflowNodeDocument } from "./global-operations-7pvXw_j9.j
13
13
  import { t as cn } from "./cn-QqidFIgr.js";
14
14
  import { t as Button } from "./button-DG7y_FVJ.js";
15
15
  import { i as SdkPermissionButton, t as FLUIDGRIDS_PERMISSIONS } from "./constants-dcxg6zG6.js";
16
- import { t as useGlobalStoreClient } from "./useGlobalStoreClient-CXPqlK1M.js";
16
+ import { t as useGlobalStoreClient } from "./useGlobalStoreClient-BfmKmeIx.js";
17
17
  import { r as templateInstallSource } from "./template-code-CobAYaeH.js";
18
18
  import { t as Badge } from "./badge-CXfPhoMH.js";
19
19
  import { t as templatePreview } from "./template-preview-C01KV277.js";