@oomol-lab/open-flow 0.1.0-beta.80 → 0.1.0-beta.82

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 (52) hide show
  1. package/README.md +35 -0
  2. package/dist/browser/{FlowCanvas-CrsiDHK8.js → FlowCanvas-Dew2fmoT.js} +55 -274
  3. package/dist/browser/{createResourceDialog-CS3u9ga9.js → createResourceDialog-bdOJa5Zk.js} +2 -1
  4. package/dist/browser/{exportPng-BOPfjeEi.js → exportPng-Cjdb6COo.js} +2 -2
  5. package/dist/browser/{flowChanges-pFjPHU5k.js → flowChanges-URBEd4DI.js} +2719 -78
  6. package/dist/browser/{flowWorkspace-CRlqc403.js → flowWorkspace-BlXx-yAn.js} +445 -2699
  7. package/dist/browser/{markdownContent-CAG_CQfH.js → markdownContent-D8G_oNOe.js} +18 -41
  8. package/dist/browser/{markdownContent-frwDfQQU.js → markdownContent-IS8xXDoc.js} +18 -40
  9. package/dist/browser/preview.css +88 -80
  10. package/dist/browser/preview.js +291 -188
  11. package/dist/browser/ui.css +8 -0
  12. package/dist/browser/{dist-CHwj9BhV.js → videoLink-NAWDmBtf.js} +35 -1
  13. package/dist/browser/workbench-contract.d.ts +6 -0
  14. package/dist/browser/workbench.css +259 -251
  15. package/dist/browser/workbench.d.ts +2 -0
  16. package/dist/browser/workbench.js +311 -143
  17. package/dist/browser/{ContentIcon-CMn0c-kl.js → wrapLayout-DZvW9dBs.js} +4397 -4152
  18. package/dist/command/index.js +43 -41
  19. package/dist/common/authoring.d.ts +1 -1
  20. package/dist/common/control-api-conformance.js +306 -2
  21. package/dist/common/control-api.d.ts +20 -0
  22. package/dist/common/control-api.js +306 -4
  23. package/dist/common/control-requests.d.ts +3 -5
  24. package/dist/common/control-requests.js +24 -10
  25. package/dist/common/flow-authoring.js +19 -3
  26. package/dist/common/flow-encoding.d.ts +1 -0
  27. package/dist/common/flow-encoding.js +167 -1
  28. package/dist/common/flow-semantics.js +44 -7
  29. package/dist/common/flow-workflowBundle.d.ts +27 -0
  30. package/dist/common/flow-workflowFile.d.ts +2 -0
  31. package/dist/common/flow-workflowReferences.d.ts +4 -0
  32. package/dist/common/mcp.d.ts +2 -0
  33. package/dist/common/mcp.js +312 -4
  34. package/dist/render/browser/licenses.md +4047 -0
  35. package/dist/render/browser/runtime.css +14877 -0
  36. package/dist/render/browser/runtime.js +266765 -0
  37. package/dist/render/common/png.d.ts +24 -0
  38. package/dist/render/node/index.d.ts +11 -0
  39. package/dist/render/node/index.js +9491 -0
  40. package/dist/render/node/licenses.md +75 -0
  41. package/package.json +12 -2
  42. package/src/connector/common/actionContract.ts +26 -0
  43. package/src/control/common/api.ts +50 -0
  44. package/src/control/common/flowDecoders.ts +2 -0
  45. package/src/control/common/mcp.ts +4 -4
  46. package/src/control/common/requests.ts +12 -1
  47. package/src/flow/common/edgeChanges.ts +9 -6
  48. package/src/flow/common/encoding.ts +1 -0
  49. package/src/flow/common/semantics.ts +11 -8
  50. package/src/flow/common/workflowBundle.ts +117 -0
  51. package/src/flow/common/workflowFile.ts +4 -0
  52. package/src/flow/common/workflowReferences.ts +20 -0
@@ -1,5 +1,5 @@
1
1
  import { a as __toCommonJS, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-CEgmsyvS.js";
2
- import { _ as val, a as toPlainObject, c as useLang, d as attachSetter, f as combine, g as strictEqual, h as readonlyVal, i as isString$1, l as useTranslate, m as derive, n as isBoolean$1, o as I18nProvider, p as compute, r as isPlainObject$2, s as useI18n, t as isArray$2, u as useVal } from "./dist-CHwj9BhV.js";
2
+ import { _ as readonlyVal, a as isPlainObject$2, c as I18nProvider, d as useTranslate, f as useVal, g as derive, h as compute, i as isBoolean$1, l as useI18n, m as combine, n as pasteVideoLink, o as isString$1, p as attachSetter, r as isArray$2, s as toPlainObject, u as useLang, v as strictEqual, y as val } from "./videoLink-NAWDmBtf.js";
3
3
  import * as m$4 from "react";
4
4
  import reactExports, { Children, Fragment, Suspense, createContext, createElement, forwardRef, isValidElement, lazy, memo, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
@@ -12644,7 +12644,7 @@ var CanvasStore = class {
12644
12644
  this.$$.changingDirection.set(false);
12645
12645
  }
12646
12646
  allLayoutNodes() {
12647
- return [...this.$.nodes.values()];
12647
+ return [...this.$.nodes.values(), ...this.$.commentNodes?.values() ?? []];
12648
12648
  }
12649
12649
  /** Deletes nodes programmatically, such as from a menu action. */
12650
12650
  async deleteNodes(nodes, skipConfirm) {
@@ -12669,7 +12669,7 @@ var CanvasStore = class {
12669
12669
  }
12670
12670
  doRelayout(availableWidth) {
12671
12671
  const selected = this.$.selectedNodes.value.length > 1 ? this.$.selectedNodes.value : [];
12672
- const nodes = selected.length > 0 ? selected.filter(NodeStore.is) : this.allLayoutNodes();
12672
+ const nodes = selected.length > 0 ? selected : this.allLayoutNodes();
12673
12673
  if (nodes.length === 0) return;
12674
12674
  let positions = this.layoutPositions(nodes, availableWidth);
12675
12675
  if (selected.length > 0) {
@@ -12691,9 +12691,10 @@ var CanvasStore = class {
12691
12691
  }
12692
12692
  layoutPositions(nodes, availableWidth) {
12693
12693
  const g = new ie.Graph().setDefaultEdgeLabel(() => ({}));
12694
+ const vertical = this.$.direction.value === "vertical";
12694
12695
  g.setGraph({
12695
- rankdir: this.$.direction.value === "vertical" ? "TB" : "LR",
12696
- ranksep: 80
12696
+ rankdir: vertical ? "TB" : "LR",
12697
+ ranksep: vertical ? 48 : 80
12697
12698
  });
12698
12699
  const singles = /* @__PURE__ */ new Set();
12699
12700
  for (const node of nodes) {
@@ -12714,6 +12715,7 @@ var CanvasStore = class {
12714
12715
  const constraints = [];
12715
12716
  const ordering = new ie.Graph();
12716
12717
  for (const node of nodes) {
12718
+ if (!NodeStore.is(node)) continue;
12717
12719
  const content = node.content$.value;
12718
12720
  if (content.kind !== "condition" && content.kind !== "approval" && content.kind !== "wait") continue;
12719
12721
  const targets = [...new Set(content.outputs.flatMap((port) => "handle" in port ? this.#connections.value.filter((edge) => edge.source === node.nodeId && edge.sourceHandle === `$branch:${port.handle}`).flatMap((edge) => {
@@ -43337,12 +43339,12 @@ function CommentNodeActions({ canvasStore, nodeStore }) {
43337
43339
  });
43338
43340
  }
43339
43341
  var CommentNodeContent_module_default = {
43340
- body: "CommentNodeContent_body_01471",
43341
- container: "CommentNodeContent_container_01471",
43342
- resizeButton: "CommentNodeContent_resizeButton_01471",
43343
- sourceCode: "CommentNodeContent_sourceCode_01471",
43344
- markdown: "CommentNodeContent_markdown_01471",
43345
- taskCheckbox: "CommentNodeContent_taskCheckbox_01471"
43342
+ body: "CommentNodeContent_body_7c741",
43343
+ container: "CommentNodeContent_container_7c741",
43344
+ resizeButton: "CommentNodeContent_resizeButton_7c741",
43345
+ sourceCode: "CommentNodeContent_sourceCode_7c741",
43346
+ markdown: "CommentNodeContent_markdown_7c741",
43347
+ taskCheckbox: "CommentNodeContent_taskCheckbox_7c741"
43346
43348
  };
43347
43349
  //#endregion
43348
43350
  //#region ../../node_modules/.bun/@base-ui+utils@0.2.8+b87d06724be9db7a/node_modules/@base-ui/utils/esm/useControlled.js
@@ -43972,13 +43974,13 @@ var Textarea = m$4.forwardRef(function Textarea({ className, ...props }, ref) {
43972
43974
  });
43973
43975
  });
43974
43976
  var markdownPreview_module_default = {
43975
- container: "markdownPreview_container_c03ca",
43976
- body: "markdownPreview_body_c03ca",
43977
- draggable: "markdownPreview_draggable_c03ca"
43977
+ container: "markdownPreview_container_2a1d9",
43978
+ body: "markdownPreview_body_2a1d9",
43979
+ draggable: "markdownPreview_draggable_2a1d9"
43978
43980
  };
43979
43981
  //#endregion
43980
43982
  //#region src/canvas/browser/preview/markdownPreview.tsx
43981
- var MarkdownContent$1 = lazy(() => import("./markdownContent-CAG_CQfH.js"));
43983
+ var MarkdownContent$1 = lazy(() => import("./markdownContent-D8G_oNOe.js"));
43982
43984
  var MarkdownPreview = /* @__PURE__ */ memo(({ dark, unstyled, components, contentClassName, content, draggable, onDoubleClick }) => {
43983
43985
  const [focus, setFocus] = useState(false);
43984
43986
  return /* @__PURE__ */ jsx("div", {
@@ -43987,8 +43989,9 @@ var MarkdownPreview = /* @__PURE__ */ memo(({ dark, unstyled, components, conten
43987
43989
  onFocus: () => setFocus(true),
43988
43990
  onBlur: () => setFocus(false),
43989
43991
  onDoubleClick,
43990
- children: /* @__PURE__ */ jsx("div", {
43992
+ children: /* @__PURE__ */ jsx(ScrollArea, {
43991
43993
  className: `${markdownPreview_module_default.body} markdown-body`,
43994
+ autoHide: "leave",
43992
43995
  children: /* @__PURE__ */ jsx(Suspense, {
43993
43996
  fallback: /* @__PURE__ */ jsx("span", {
43994
43997
  hidden: true,
@@ -44166,6 +44169,7 @@ function CommentNodeContent({ store }) {
44166
44169
  setComposing(false);
44167
44170
  },
44168
44171
  onChange: (event) => store.$$.content.set(event.target.value),
44172
+ onPaste: (event) => pasteVideoLink(event, t),
44169
44173
  onBlur: (event) => {
44170
44174
  setFocused(false);
44171
44175
  if (editable && !composing) store.saveContent(event.target.value);
@@ -46620,9 +46624,6 @@ function DropdownMenuSeparator({ className, ...props }) {
46620
46624
  });
46621
46625
  }
46622
46626
  //#endregion
46623
- //#region src/canvas/browser/nodeActions.tsx
46624
- var NodeHistoryContext = createContext(void 0);
46625
- //#endregion
46626
46627
  //#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/context-menu/root/ContextMenuRoot.js
46627
46628
  /**
46628
46629
  * A component that creates a context menu activated by right clicking or long pressing.
@@ -46889,16 +46890,7 @@ function NodeHeadContextMenu({ canvasStore, children }) {
46889
46890
  function useNodeMenuItems({ t, nodeStore, onDelete, editable }) {
46890
46891
  const skip = useVal(NodeStore.to(nodeStore)?.ignore);
46891
46892
  const { duplicateNode } = nodeStore;
46892
- const history = useContext(NodeHistoryContext)?.(nodeStore.nodeId);
46893
46893
  return coalesce([
46894
- history && {
46895
- ...history,
46896
- key: "$history",
46897
- icon: /* @__PURE__ */ jsx("i", {
46898
- "aria-hidden": "true",
46899
- className: "i-lucide-light:database"
46900
- })
46901
- },
46902
46894
  editable && duplicateNode && {
46903
46895
  label: t("nodeActions.duplicate"),
46904
46896
  key: "$duplicate",
@@ -62228,9 +62220,29 @@ strictObject({
62228
62220
  kind: literal("open-flow-workflow"),
62229
62221
  version: literal(1),
62230
62222
  name: string$1().optional(),
62223
+ icon: string$1().optional(),
62224
+ description: string$1().optional(),
62231
62225
  content: unknown(),
62232
62226
  presentation: record$3(string$1(), json$4()).optional()
62233
62227
  });
62228
+ //#endregion
62229
+ //#region src/flow/common/workflowBundle.ts
62230
+ var entries = array(strictObject({
62231
+ flowId: string$1().min(1),
62232
+ file: unknown()
62233
+ })).min(1);
62234
+ strictObject({
62235
+ kind: literal("open-flow-workflow-bundle"),
62236
+ version: literal(1),
62237
+ entryFlowId: string$1().min(1),
62238
+ workflows: entries
62239
+ });
62240
+ strictObject({
62241
+ version: literal(1),
62242
+ entryFlowId: string$1().min(1),
62243
+ workflows: entries,
62244
+ unavailableFlowIds: array(string$1().min(1))
62245
+ });
62234
62246
  new TextEncoder();
62235
62247
  //#endregion
62236
62248
  //#region ../../node_modules/.bun/@babel+parser@8.0.4/node_modules/@babel/parser/lib/index.js
@@ -63247,11 +63259,10 @@ var RevisionView = class {
63247
63259
  }
63248
63260
  };
63249
63261
  function revisionView(revision) {
63250
- let view = views.get(revision);
63251
- if (view == null) {
63252
- view = new RevisionView(revision);
63253
- views.set(revision, view);
63254
- }
63262
+ const cached = views.get(revision);
63263
+ if (cached) return cached;
63264
+ const view = new RevisionView(revision);
63265
+ views.set(revision, view);
63255
63266
  return view;
63256
63267
  }
63257
63268
  function connectorAccessReferences(document) {
@@ -64373,7 +64384,7 @@ function nodeDiagnosticCount(node, diagnostics) {
64373
64384
  return diagnostics.filter((diagnostic) => paths.some((path) => diagnostic.path.startsWith(path))).length;
64374
64385
  }
64375
64386
  function runProjection(revision, run, events) {
64376
- if (run?.flowId != revision.revision.flowId || run.revisionId != revision.revision.revisionId) return { nodes: /* @__PURE__ */ new Map() };
64387
+ if (run == null || revision.revision.flowId == null || revision.revision.revisionId == null || run.flowId != revision.revision.flowId || run.revisionId != revision.revision.revisionId) return { nodes: /* @__PURE__ */ new Map() };
64377
64388
  const active = run.status == "queued" || run.status == "starting" || run.status == "running" || run.status == "waiting";
64378
64389
  const nodes = /* @__PURE__ */ new Map();
64379
64390
  if ("waits" in run) for (const wait of run.waits) nodes.set(wait.nodeId, {
@@ -65468,7 +65479,7 @@ function TabsContent({ className, ...props }) {
65468
65479
  }
65469
65480
  //#endregion
65470
65481
  //#region src/workbench/browser/runtime/editor/commentInspector.tsx
65471
- var MarkdownContent = lazy(() => import("./markdownContent-CAG_CQfH.js"));
65482
+ var MarkdownContent = lazy(() => import("./markdownContent-D8G_oNOe.js"));
65472
65483
  /** A comment is presentation data; editing it does not require the canvas store. */
65473
65484
  function CommentInspector({ title, content, disabled = false, readOnly, dark, onSave }) {
65474
65485
  const t = useTranslate();
@@ -65510,14 +65521,16 @@ function CommentInspector({ title, content, disabled = false, readOnly, dark, on
65510
65521
  readOnly,
65511
65522
  value: draftContent,
65512
65523
  onChange: (event) => setDraftContent(event.target.value),
65524
+ onPaste: (event) => pasteVideoLink(event, t),
65513
65525
  onBlur: save
65514
65526
  })
65515
65527
  }),
65516
65528
  /* @__PURE__ */ jsx(TabsContent, {
65517
65529
  value: "preview",
65518
65530
  className: "flex min-h-0 flex-1 flex-col rounded-[var(--ui-control-radius,calc(var(--ui-radius)_+_2px))] border border-[var(--_open-flow-comment-border)] bg-[var(--_open-flow-comment-surface)] p-2",
65519
- children: /* @__PURE__ */ jsx("div", {
65520
- className: "min-h-0 flex-1 overflow-auto rounded-[var(--ui-control-radius,calc(var(--ui-radius)_+_2px))] border border-[color-mix(in_srgb,var(--_open-flow-comment-border)_45%,transparent)] bg-[var(--_open-flow-comment-content)] p-3",
65531
+ children: /* @__PURE__ */ jsx(ScrollArea, {
65532
+ autoHide: "leave",
65533
+ className: "min-h-0 flex-1 rounded-[var(--ui-control-radius,calc(var(--ui-radius)_+_2px))] border border-[color-mix(in_srgb,var(--_open-flow-comment-border)_45%,transparent)] bg-[var(--_open-flow-comment-content)] p-3",
65521
65534
  children: /* @__PURE__ */ jsx("div", {
65522
65535
  className: "markdown-body min-w-0",
65523
65536
  onDoubleClick: () => setSource(true),
@@ -99680,6 +99693,135 @@ function ConditionBranchesEditor({ value: configuration, disabled, readOnly, onC
99680
99693
  });
99681
99694
  }
99682
99695
  //#endregion
99696
+ //#region src/workbench/browser/runtime/editor/leinaBotSelect.tsx
99697
+ function LeinaBotSelect({ source, flowId, value, disabled, onChange }) {
99698
+ const t = useTranslate();
99699
+ const [attempt, setAttempt] = useState(0);
99700
+ const [state, setState] = useState();
99701
+ useEffect(() => {
99702
+ const controller = new AbortController();
99703
+ setState((previous) => ({
99704
+ flowId,
99705
+ source,
99706
+ loading: true,
99707
+ bots: previous?.flowId == flowId && previous.source == source ? previous.bots : void 0
99708
+ }));
99709
+ source.listLeinaBots(flowId, controller.signal).then((bots) => {
99710
+ if (!controller.signal.aborted) setState({
99711
+ flowId,
99712
+ source,
99713
+ bots,
99714
+ loading: false
99715
+ });
99716
+ }, (error) => {
99717
+ if (!controller.signal.aborted) setState((previous) => ({
99718
+ flowId,
99719
+ source,
99720
+ bots: previous?.flowId == flowId && previous.source == source ? previous.bots : void 0,
99721
+ loading: false,
99722
+ error: error instanceof Error ? error.message : t("contextPanel.loadFailed")
99723
+ }));
99724
+ });
99725
+ return () => controller.abort();
99726
+ }, [
99727
+ source,
99728
+ flowId,
99729
+ attempt,
99730
+ t
99731
+ ]);
99732
+ const current = state?.flowId == flowId && state.source == source ? state : void 0;
99733
+ const bots = current?.bots;
99734
+ const selected = typeof value == "string" && value.trim().length > 0 ? value : void 0;
99735
+ const missing = selected != null && bots != null && !bots.some((bot) => bot.leinaId == selected);
99736
+ const error = selected == null ? t("leina.select") : missing ? t("leina.unavailable", { id: selected }) : void 0;
99737
+ const selectedLabel = bots?.find((bot) => bot.leinaId == selected)?.name ?? (missing ? t("leina.unavailable", { id: selected }) : current?.error != null ? t("leina.loadFailed") : t("leina.loading"));
99738
+ const items = [...(bots ?? []).map((bot) => ({
99739
+ value: bot.leinaId,
99740
+ label: bot.name
99741
+ })), ...selected != null && !bots?.some((bot) => bot.leinaId == selected) ? [{
99742
+ value: selected,
99743
+ label: selectedLabel
99744
+ }] : []];
99745
+ return /* @__PURE__ */ jsx(ValueEditorFeedback, {
99746
+ error,
99747
+ children: (errorId) => /* @__PURE__ */ jsxs(Select$1, {
99748
+ items,
99749
+ value: selected ?? null,
99750
+ disabled,
99751
+ onOpenChange: (open) => {
99752
+ if (open) setAttempt((previous) => previous + 1);
99753
+ },
99754
+ onValueChange: (next) => {
99755
+ if (typeof next == "string" && bots?.some((bot) => bot.leinaId == next)) onChange(next);
99756
+ },
99757
+ children: [/* @__PURE__ */ jsx(SelectTrigger, {
99758
+ size: "field",
99759
+ className: "w-full",
99760
+ "data-field-control": true,
99761
+ "aria-label": t("leina.robot"),
99762
+ "aria-invalid": error != null || void 0,
99763
+ "aria-describedby": errorId,
99764
+ children: /* @__PURE__ */ jsx(SelectValue, {
99765
+ placeholder: t("leina.select"),
99766
+ children: selected == null ? void 0 : selectedLabel
99767
+ })
99768
+ }), /* @__PURE__ */ jsxs(SelectContent, {
99769
+ align: "start",
99770
+ alignItemWithTrigger: false,
99771
+ className: selectionMenuContentClass,
99772
+ children: [
99773
+ (current?.loading ?? true) && /* @__PURE__ */ jsx("span", {
99774
+ role: "status",
99775
+ className: "block px-1.5 py-1 text-xs leading-5 text-muted-foreground",
99776
+ children: t("leina.loading")
99777
+ }),
99778
+ bots?.map((bot) => /* @__PURE__ */ jsx(SelectItem, {
99779
+ value: bot.leinaId,
99780
+ className: selectionMenuItemClass,
99781
+ children: /* @__PURE__ */ jsx("span", {
99782
+ className: "truncate",
99783
+ children: bot.name
99784
+ })
99785
+ }, bot.leinaId)),
99786
+ missing && selected != null && /* @__PURE__ */ jsx(SelectItem, {
99787
+ value: selected,
99788
+ disabled: true,
99789
+ className: `mt-1 first-of-type:mt-0 min-h-7 rounded-[var(--ui-control-radius,var(--ui-radius))] py-1 text-xs leading-5 font-normal text-destructive`,
99790
+ children: t("leina.unavailable", { id: selected })
99791
+ }),
99792
+ current?.error != null && /* @__PURE__ */ jsxs("span", {
99793
+ role: "alert",
99794
+ className: "block px-1.5 py-1 text-xs leading-5 whitespace-normal break-words text-destructive",
99795
+ children: [
99796
+ t("leina.loadFailed"),
99797
+ " ",
99798
+ current.error
99799
+ ]
99800
+ }),
99801
+ bots?.length == 0 && !current?.loading && /* @__PURE__ */ jsx("span", {
99802
+ className: "block px-1.5 py-1 text-xs leading-5 whitespace-normal text-muted-foreground",
99803
+ children: t("leina.empty")
99804
+ })
99805
+ ]
99806
+ })]
99807
+ })
99808
+ });
99809
+ }
99810
+ //#endregion
99811
+ //#region src/workbench/browser/runtime/editor/connectorActionPresentation.tsx
99812
+ function connectorActionPresentation(actionId, t) {
99813
+ if (actionId != "leina.send_notification") return void 0;
99814
+ return {
99815
+ name: t("leina.notification"),
99816
+ fieldLabels: {
99817
+ leinaId: t("leina.robot"),
99818
+ message: t("leina.message"),
99819
+ subscription: t("leina.subscription")
99820
+ },
99821
+ renderInput: ({ handle, ...props }) => handle == "leinaId" ? /* @__PURE__ */ jsx(LeinaBotSelect, { ...props }, props.flowId) : void 0
99822
+ };
99823
+ }
99824
+ //#endregion
99683
99825
  //#region src/workbench/browser/runtime/editor/connectorInputPresentation.ts
99684
99826
  /** Groups Provider inputs for display without changing their saved definitions. */
99685
99827
  function presentConnectorInputs(inputs, t) {
@@ -103054,7 +103196,7 @@ var resources = {
103054
103196
  },
103055
103197
  leina: {
103056
103198
  "notification": "Leina notification",
103057
- "description": "Send a notification through a team robot.",
103199
+ "subscription": "Notification subscription",
103058
103200
  "message": "Notification content",
103059
103201
  "loading": "Loading robots…",
103060
103202
  "robot": "Robot",
@@ -103186,7 +103328,10 @@ var resources = {
103186
103328
  "discardTitle": "Discard changes?",
103187
103329
  "discardDescription": "Your Flow settings have not been saved.",
103188
103330
  "continueEditing": "Continue editing",
103189
- "discardChanges": "Discard changes"
103331
+ "discardChanges": "Discard changes",
103332
+ "icon": "Icon",
103333
+ "resetIcon": "Reset icon",
103334
+ "description": "Description"
103190
103335
  },
103191
103336
  flowState: {
103192
103337
  "title": "Persistent data",
@@ -103200,7 +103345,7 @@ var resources = {
103200
103345
  "clear": "Clear",
103201
103346
  "orphaned": "Outside the current view",
103202
103347
  "nearLimit": "Flow history is at least 80% full. Clear unused history.",
103203
- "history": "Usage",
103348
+ "usage": "Usage",
103204
103349
  "scope": "Scope",
103205
103350
  "refresh": "Refresh",
103206
103351
  "cancel": "Cancel",
@@ -103228,7 +103373,7 @@ var resources = {
103228
103373
  "pendingClear": "{{count}} pending; finish or cancel their Runs before clearing.",
103229
103374
  "clearBlocked": "This history has pending records. Finish or cancel their Runs, then refresh.",
103230
103375
  "clearSource": "Clear {{name}}",
103231
- "sourceHistory": "{{name}} history",
103376
+ "sourceUsage": "{{name}} usage",
103232
103377
  "confirmTitle": "Clear {{name}}?",
103233
103378
  "confirmValues": "This will clear {{count}} saved entries in {{scope}}. Subsequent Runs will no longer be able to read these values.",
103234
103379
  "confirmHistory": "This will clear {{count}} deduplication records in {{scope}}. These items may be processed again.",
@@ -103239,6 +103384,14 @@ var resources = {
103239
103384
  "loadFailed": "Unable to load",
103240
103385
  "valuesHelp": "{{name}}: Content explicitly saved by the workflow, available to later runs.",
103241
103386
  "historyHelp": "{{name}}: Item identifiers used to avoid processing duplicates."
103387
+ },
103388
+ workflowTransfer: {
103389
+ "includeDependencies": "Include referenced workflows",
103390
+ "workflowCount": "Workflows ({{count}})",
103391
+ "unavailable": "Unavailable workflows: {{count}}.",
103392
+ "export": "Export",
103393
+ "hostUnsupported": "This host does not support workflow bundle imports yet.",
103394
+ "unnamed": "Untitled workflow"
103242
103395
  }
103243
103396
  },
103244
103397
  "zh-CN": {
@@ -104423,7 +104576,7 @@ var resources = {
104423
104576
  },
104424
104577
  leina: {
104425
104578
  "notification": "Leina 通知",
104426
- "description": "选择团队机器人,发送通知。",
104579
+ "subscription": "通知订阅",
104427
104580
  "message": "通知内容",
104428
104581
  "loading": "正在加载机器人…",
104429
104582
  "robot": "机器人",
@@ -104555,7 +104708,10 @@ var resources = {
104555
104708
  "discardTitle": "放弃修改?",
104556
104709
  "discardDescription": "工作流设置的修改尚未保存。",
104557
104710
  "continueEditing": "继续编辑",
104558
- "discardChanges": "放弃修改"
104711
+ "discardChanges": "放弃修改",
104712
+ "icon": "图标",
104713
+ "resetIcon": "重置图标",
104714
+ "description": "描述"
104559
104715
  },
104560
104716
  flowState: {
104561
104717
  "title": "持久化数据",
@@ -104569,7 +104725,7 @@ var resources = {
104569
104725
  "clear": "清空",
104570
104726
  "orphaned": "当前视图外",
104571
104727
  "nearLimit": "该工作流的去重记录已使用至少 80%。请清理不再需要的记录。",
104572
- "history": "用量",
104728
+ "usage": "用量",
104573
104729
  "scope": "作用域",
104574
104730
  "refresh": "刷新",
104575
104731
  "cancel": "取消",
@@ -104597,7 +104753,7 @@ var resources = {
104597
104753
  "pendingClear": "{{count}} 条待提交,相关运行结束或取消后可清理。",
104598
104754
  "clearBlocked": "这些记录尚待提交。请等待相关运行结束或取消后再刷新。",
104599
104755
  "clearSource": "清空{{name}}",
104600
- "sourceHistory": "{{name}}的历史记录",
104756
+ "sourceUsage": "{{name}}用量",
104601
104757
  "confirmTitle": "清空「{{name}}」?",
104602
104758
  "confirmValues": "将清空{{scope}}环境保存的 {{count}} 条数据,后续运行将无法读取这些值。",
104603
104759
  "confirmHistory": "将清空{{scope}}环境的 {{count}} 条去重记录,这些条目之后可能再次被处理。",
@@ -104608,6 +104764,14 @@ var resources = {
104608
104764
  "loadFailed": "加载失败",
104609
104765
  "valuesHelp": "{{name}}:工作流主动保存的内容,后续运行可以继续读取。",
104610
104766
  "historyHelp": "{{name}}:条目的识别标记,用来避免重复处理。"
104767
+ },
104768
+ workflowTransfer: {
104769
+ "includeDependencies": "包含引用的工作流",
104770
+ "workflowCount": "{{count}} 个工作流",
104771
+ "unavailable": "{{count}} 个引用的工作流不可用。",
104772
+ "export": "导出",
104773
+ "hostUnsupported": "当前宿主尚不支持导入工作流包。",
104774
+ "unnamed": "未命名工作流"
104611
104775
  }
104612
104776
  },
104613
104777
  "zh-TW": {
@@ -105792,7 +105956,7 @@ var resources = {
105792
105956
  },
105793
105957
  leina: {
105794
105958
  "notification": "Leina 通知",
105795
- "description": "選擇團隊機器人,傳送通知。",
105959
+ "subscription": "通知訂閱",
105796
105960
  "message": "通知內容",
105797
105961
  "loading": "正在載入機器人…",
105798
105962
  "robot": "機器人",
@@ -105924,7 +106088,10 @@ var resources = {
105924
106088
  "discardTitle": "放棄變更?",
105925
106089
  "discardDescription": "工作流程設定的變更尚未儲存。",
105926
106090
  "continueEditing": "繼續編輯",
105927
- "discardChanges": "放棄變更"
106091
+ "discardChanges": "放棄變更",
106092
+ "icon": "圖示",
106093
+ "resetIcon": "重設圖示",
106094
+ "description": "說明"
105928
106095
  },
105929
106096
  flowState: {
105930
106097
  "title": "持久化資料",
@@ -105938,7 +106105,7 @@ var resources = {
105938
106105
  "clear": "清空",
105939
106106
  "orphaned": "目前檢視之外",
105940
106107
  "nearLimit": "此工作流的去重記錄已使用至少 80%。請清理不再需要的記錄。",
105941
- "history": "用量",
106108
+ "usage": "用量",
105942
106109
  "scope": "範圍",
105943
106110
  "refresh": "重新整理",
105944
106111
  "cancel": "取消",
@@ -105966,7 +106133,7 @@ var resources = {
105966
106133
  "pendingClear": "{{count}} 筆待提交,相關執行結束或取消後可清理。",
105967
106134
  "clearBlocked": "這些記錄尚待提交。請等待相關執行結束或取消後再重新整理。",
105968
106135
  "clearSource": "清空{{name}}",
105969
- "sourceHistory": "{{name}}的歷史記錄",
106136
+ "sourceUsage": "{{name}}用量",
105970
106137
  "confirmTitle": "清空「{{name}}」?",
105971
106138
  "confirmValues": "將清空{{scope}}環境儲存的 {{count}} 筆資料,後續執行將無法讀取這些值。",
105972
106139
  "confirmHistory": "將清空{{scope}}環境的 {{count}} 筆去重記錄,這些項目之後可能再次被處理。",
@@ -105977,6 +106144,14 @@ var resources = {
105977
106144
  "loadFailed": "載入失敗",
105978
106145
  "valuesHelp": "{{name}}:工作流主動儲存的內容,後續執行可以繼續讀取。",
105979
106146
  "historyHelp": "{{name}}:項目的識別標記,用來避免重複處理。"
106147
+ },
106148
+ workflowTransfer: {
106149
+ "includeDependencies": "包含參照的工作流程",
106150
+ "workflowCount": "{{count}} 個工作流程",
106151
+ "unavailable": "{{count}} 個參照的工作流程無法使用。",
106152
+ "export": "匯出",
106153
+ "hostUnsupported": "目前的宿主尚未支援匯入工作流程套件。",
106154
+ "unnamed": "未命名工作流程"
105980
106155
  }
105981
106156
  },
105982
106157
  "ja": {
@@ -107161,7 +107336,7 @@ var resources = {
107161
107336
  },
107162
107337
  leina: {
107163
107338
  "notification": "Leina 通知",
107164
- "description": "チームのロボットから通知を送信します。",
107339
+ "subscription": "通知サブスクリプション",
107165
107340
  "message": "通知内容",
107166
107341
  "loading": "ロボットを読み込み中…",
107167
107342
  "robot": "ロボット",
@@ -107293,7 +107468,10 @@ var resources = {
107293
107468
  "discardTitle": "変更を破棄しますか?",
107294
107469
  "discardDescription": "ワークフロー設定の変更は保存されていません。",
107295
107470
  "continueEditing": "編集を続ける",
107296
- "discardChanges": "変更を破棄"
107471
+ "discardChanges": "変更を破棄",
107472
+ "icon": "アイコン",
107473
+ "resetIcon": "アイコンをリセット",
107474
+ "description": "説明"
107297
107475
  },
107298
107476
  flowState: {
107299
107477
  "title": "永続データ",
@@ -107307,7 +107485,7 @@ var resources = {
107307
107485
  "clear": "消去",
107308
107486
  "orphaned": "現在のビューの外",
107309
107487
  "nearLimit": "フローの重複履歴が 80% 以上使用されています。不要な履歴を削除してください。",
107310
- "history": "使用量",
107488
+ "usage": "使用量",
107311
107489
  "scope": "スコープ",
107312
107490
  "refresh": "更新",
107313
107491
  "cancel": "キャンセル",
@@ -107335,7 +107513,7 @@ var resources = {
107335
107513
  "pendingClear": "{{count}} 件が確定待ちです。関連する実行の完了またはキャンセル後に消去できます。",
107336
107514
  "clearBlocked": "確定待ちの記録があります。関連する実行の完了またはキャンセル後に更新してください。",
107337
107515
  "clearSource": "{{name}}を消去",
107338
- "sourceHistory": "{{name}}の履歴",
107516
+ "sourceUsage": "{{name}}の使用量",
107339
107517
  "confirmTitle": "「{{name}}」を消去しますか?",
107340
107518
  "confirmValues": "{{scope}}環境の保存データ {{count}} 件を消去します。以降の実行ではこれらの値を読み取れなくなります。",
107341
107519
  "confirmHistory": "{{scope}}環境の重複排除記録 {{count}} 件を消去します。これらの項目が再処理される場合があります。",
@@ -107346,6 +107524,14 @@ var resources = {
107346
107524
  "loadFailed": "読み込みに失敗しました",
107347
107525
  "valuesHelp": "{{name}}:フローが明示的に保存し、後続の実行で読み取れる内容です。",
107348
107526
  "historyHelp": "{{name}}:同じ項目を繰り返し処理しないための識別情報です。"
107527
+ },
107528
+ workflowTransfer: {
107529
+ "includeDependencies": "参照先のワークフローを含める",
107530
+ "workflowCount": "ワークフロー({{count}} 件)",
107531
+ "unavailable": "参照先のワークフロー {{count}} 件を利用できません。",
107532
+ "export": "エクスポート",
107533
+ "hostUnsupported": "このホストはワークフローバンドルのインポートにまだ対応していません。",
107534
+ "unnamed": "無題のワークフロー"
107349
107535
  }
107350
107536
  },
107351
107537
  "ko": {
@@ -108530,7 +108716,7 @@ var resources = {
108530
108716
  },
108531
108717
  leina: {
108532
108718
  "notification": "Leina 알림",
108533
- "description": "팀 로봇을 통해 알림을 보냅니다.",
108719
+ "subscription": "알림 구독",
108534
108720
  "message": "알림 내용",
108535
108721
  "loading": "로봇 불러오는 중…",
108536
108722
  "robot": "로봇",
@@ -108662,7 +108848,10 @@ var resources = {
108662
108848
  "discardTitle": "변경 사항을 버릴까요?",
108663
108849
  "discardDescription": "워크플로 설정의 변경 사항이 저장되지 않았습니다.",
108664
108850
  "continueEditing": "계속 편집",
108665
- "discardChanges": "변경 사항 버리기"
108851
+ "discardChanges": "변경 사항 버리기",
108852
+ "icon": "아이콘",
108853
+ "resetIcon": "아이콘 초기화",
108854
+ "description": "설명"
108666
108855
  },
108667
108856
  flowState: {
108668
108857
  "title": "영구 데이터",
@@ -108676,7 +108865,7 @@ var resources = {
108676
108865
  "clear": "지우기",
108677
108866
  "orphaned": "현재 보기 외부",
108678
108867
  "nearLimit": "Flow 중복 기록이 80% 이상 찼습니다. 필요 없는 기록을 지우세요.",
108679
- "history": "사용량",
108868
+ "usage": "사용량",
108680
108869
  "scope": "범위",
108681
108870
  "refresh": "새로 고침",
108682
108871
  "cancel": "취소",
@@ -108704,7 +108893,7 @@ var resources = {
108704
108893
  "pendingClear": "{{count}}개 확정 대기 중. 관련 실행이 완료되거나 취소된 후 지울 수 있습니다.",
108705
108894
  "clearBlocked": "확정 대기 중인 기록이 있습니다. 관련 실행을 완료하거나 취소한 후 새로 고침하세요.",
108706
108895
  "clearSource": "{{name}} 지우기",
108707
- "sourceHistory": "{{name}} 기록",
108896
+ "sourceUsage": "{{name}} 사용량",
108708
108897
  "confirmTitle": "{{name}}을(를) 지울까요?",
108709
108898
  "confirmValues": "{{scope}} 환경에 저장된 데이터 {{count}}개를 지웁니다. 이후 실행에서 이 값을 읽을 수 없습니다.",
108710
108899
  "confirmHistory": "{{scope}} 환경의 중복 제거 기록 {{count}}개를 지웁니다. 해당 항목이 다시 처리될 수 있습니다.",
@@ -108715,6 +108904,14 @@ var resources = {
108715
108904
  "loadFailed": "불러오기 실패",
108716
108905
  "valuesHelp": "{{name}}: 워크플로가 직접 저장하여 이후 실행에서 읽을 수 있는 내용입니다.",
108717
108906
  "historyHelp": "{{name}}: 같은 항목을 반복 처리하지 않기 위한 식별 정보입니다."
108907
+ },
108908
+ workflowTransfer: {
108909
+ "includeDependencies": "참조된 워크플로 포함",
108910
+ "workflowCount": "워크플로 {{count}}개",
108911
+ "unavailable": "참조된 워크플로 {{count}}개를 사용할 수 없습니다.",
108912
+ "export": "내보내기",
108913
+ "hostUnsupported": "이 호스트는 아직 워크플로 번들 가져오기를 지원하지 않습니다.",
108914
+ "unnamed": "이름 없는 워크플로"
108718
108915
  }
108719
108916
  },
108720
108917
  "ru": {
@@ -109899,7 +110096,7 @@ var resources = {
109899
110096
  },
109900
110097
  leina: {
109901
110098
  "notification": "Уведомление Leina",
109902
- "description": "Отправьте уведомление через робота команды.",
110099
+ "subscription": "Подписка на уведомления",
109903
110100
  "message": "Текст уведомления",
109904
110101
  "loading": "Загрузка роботов…",
109905
110102
  "robot": "Робот",
@@ -110031,7 +110228,10 @@ var resources = {
110031
110228
  "discardTitle": "Отменить изменения?",
110032
110229
  "discardDescription": "Изменения настроек процесса не сохранены.",
110033
110230
  "continueEditing": "Продолжить редактирование",
110034
- "discardChanges": "Отменить изменения"
110231
+ "discardChanges": "Отменить изменения",
110232
+ "icon": "Значок",
110233
+ "resetIcon": "Сбросить значок",
110234
+ "description": "Описание"
110035
110235
  },
110036
110236
  flowState: {
110037
110237
  "title": "Постоянные данные",
@@ -110045,7 +110245,7 @@ var resources = {
110045
110245
  "clear": "Очистить",
110046
110246
  "orphaned": "Вне текущего представления",
110047
110247
  "nearLimit": "История Flow заполнена минимум на 80 %. Удалите ненужные записи.",
110048
- "history": "Использование",
110248
+ "usage": "Использование",
110049
110249
  "scope": "Область",
110050
110250
  "refresh": "Обновить",
110051
110251
  "cancel": "Отмена",
@@ -110073,7 +110273,7 @@ var resources = {
110073
110273
  "pendingClear": "Ожидают фиксации: {{count}}. Завершите или отмените связанные запуски перед очисткой.",
110074
110274
  "clearBlocked": "Есть записи, ожидающие фиксации. Завершите или отмените связанные запуски и обновите данные.",
110075
110275
  "clearSource": "Очистить {{name}}",
110076
- "sourceHistory": "История: {{name}}",
110276
+ "sourceUsage": "Использование: {{name}}",
110077
110277
  "confirmTitle": "Очистить «{{name}}»?",
110078
110278
  "confirmValues": "Будут удалены сохранённые записи ({{count}}) в среде «{{scope}}». Последующие запуски не смогут прочитать эти значения.",
110079
110279
  "confirmHistory": "Будут удалены записи дедупликации ({{count}}) в среде «{{scope}}». Эти элементы могут быть обработаны повторно.",
@@ -110084,6 +110284,14 @@ var resources = {
110084
110284
  "loadFailed": "Не удалось загрузить",
110085
110285
  "valuesHelp": "{{name}}: данные, явно сохранённые процессом для чтения в следующих запусках.",
110086
110286
  "historyHelp": "{{name}}: идентификаторы элементов, предотвращающие повторную обработку."
110287
+ },
110288
+ workflowTransfer: {
110289
+ "includeDependencies": "Включить связанные процессы",
110290
+ "workflowCount": "Процессы ({{count}})",
110291
+ "unavailable": "Связанные процессы недоступны: {{count}}.",
110292
+ "export": "Экспортировать",
110293
+ "hostUnsupported": "Этот хост пока не поддерживает импорт пакетов процессов.",
110294
+ "unnamed": "Процесс без названия"
110087
110295
  }
110088
110296
  },
110089
110297
  "fr": {
@@ -111268,7 +111476,7 @@ var resources = {
111268
111476
  },
111269
111477
  leina: {
111270
111478
  "notification": "Notification Leina",
111271
- "description": "Envoyez une notification via un robot de l’équipe.",
111479
+ "subscription": "Abonnement aux notifications",
111272
111480
  "message": "Contenu de la notification",
111273
111481
  "loading": "Chargement des robots…",
111274
111482
  "robot": "Robot",
@@ -111400,7 +111608,10 @@ var resources = {
111400
111608
  "discardTitle": "Ignorer les modifications ?",
111401
111609
  "discardDescription": "Les modifications des paramètres du workflow n’ont pas été enregistrées.",
111402
111610
  "continueEditing": "Continuer à modifier",
111403
- "discardChanges": "Ignorer les modifications"
111611
+ "discardChanges": "Ignorer les modifications",
111612
+ "icon": "Icône",
111613
+ "resetIcon": "Réinitialiser l’icône",
111614
+ "description": "Description"
111404
111615
  },
111405
111616
  flowState: {
111406
111617
  "title": "Données persistantes",
@@ -111414,7 +111625,7 @@ var resources = {
111414
111625
  "clear": "Effacer",
111415
111626
  "orphaned": "Hors de la vue actuelle",
111416
111627
  "nearLimit": "L’historique du Flow est rempli à au moins 80 %. Effacez les entrées inutiles.",
111417
- "history": "Utilisation",
111628
+ "usage": "Utilisation",
111418
111629
  "scope": "Portée",
111419
111630
  "refresh": "Actualiser",
111420
111631
  "cancel": "Annuler",
@@ -111442,7 +111653,7 @@ var resources = {
111442
111653
  "pendingClear": "{{count}} en attente de validation. Terminez ou annulez les exécutions concernées avant de vider.",
111443
111654
  "clearBlocked": "Des entrées sont en attente de validation. Terminez ou annulez les exécutions concernées, puis actualisez.",
111444
111655
  "clearSource": "Vider {{name}}",
111445
- "sourceHistory": "Historique de {{name}}",
111656
+ "sourceUsage": "Utilisation de {{name}}",
111446
111657
  "confirmTitle": "Vider « {{name}} » ?",
111447
111658
  "confirmValues": "Cela supprimera {{count}} entrées enregistrées en environnement {{scope}}. Les exécutions suivantes ne pourront plus lire ces valeurs.",
111448
111659
  "confirmHistory": "Cela supprimera {{count}} entrées de déduplication en environnement {{scope}}. Ces éléments pourront être traités à nouveau.",
@@ -111453,6 +111664,14 @@ var resources = {
111453
111664
  "loadFailed": "Chargement impossible",
111454
111665
  "valuesHelp": "{{name}} : contenu enregistré explicitement par le workflow, accessible aux exécutions suivantes.",
111455
111666
  "historyHelp": "{{name}} : identifiants des éléments utilisés pour éviter les traitements en double."
111667
+ },
111668
+ workflowTransfer: {
111669
+ "includeDependencies": "Inclure les workflows référencés",
111670
+ "workflowCount": "Workflows ({{count}})",
111671
+ "unavailable": "Workflows référencés indisponibles : {{count}}.",
111672
+ "export": "Exporter",
111673
+ "hostUnsupported": "Cet hôte ne prend pas encore en charge l’import de lots de workflows.",
111674
+ "unnamed": "Workflow sans nom"
111456
111675
  }
111457
111676
  }
111458
111677
  };
@@ -113813,7 +114032,7 @@ function FlowStateButton({ client, flowId, nodes, history, notify, onClose }) {
113813
114032
  children: [/* @__PURE__ */ jsx("i", {
113814
114033
  "aria-hidden": "true",
113815
114034
  className: "i-lucide-light:database"
113816
- }), t(space == null ? "flowState.title" : "flowState.history")]
114035
+ }), t(space == null ? "flowState.title" : "flowState.usage")]
113817
114036
  }), /* @__PURE__ */ jsxs(DialogContent, {
113818
114037
  ref: dialogRoot,
113819
114038
  container,
@@ -113822,7 +114041,7 @@ function FlowStateButton({ client, flowId, nodes, history, notify, onClose }) {
113822
114041
  children: [
113823
114042
  /* @__PURE__ */ jsx(DialogTitle, {
113824
114043
  className: "break-words pr-8",
113825
- children: space == null ? t("flowState.title") : t("flowState.sourceHistory", { name: sourceName(space, nodes, t) })
114044
+ children: space == null ? t("flowState.title") : t("flowState.sourceUsage", { name: sourceName(space, nodes, t) })
113826
114045
  }),
113827
114046
  /* @__PURE__ */ jsxs(Tabs, {
113828
114047
  value: scope,
@@ -114515,121 +114734,6 @@ function HttpRequestSection({ task, disabled, onSave, parameters, input }) {
114515
114734
  ] });
114516
114735
  }
114517
114736
  //#endregion
114518
- //#region src/workbench/browser/runtime/editor/leinaBotSelect.tsx
114519
- function LeinaBotSelect({ source, flowId, value, disabled, onChange }) {
114520
- const t = useTranslate();
114521
- const [attempt, setAttempt] = useState(0);
114522
- const [state, setState] = useState();
114523
- useEffect(() => {
114524
- const controller = new AbortController();
114525
- setState((previous) => ({
114526
- flowId,
114527
- source,
114528
- loading: true,
114529
- bots: previous?.flowId == flowId && previous.source == source ? previous.bots : void 0
114530
- }));
114531
- source.listLeinaBots(flowId, controller.signal).then((bots) => {
114532
- if (!controller.signal.aborted) setState({
114533
- flowId,
114534
- source,
114535
- bots,
114536
- loading: false
114537
- });
114538
- }, (error) => {
114539
- if (!controller.signal.aborted) setState((previous) => ({
114540
- flowId,
114541
- source,
114542
- bots: previous?.flowId == flowId && previous.source == source ? previous.bots : void 0,
114543
- loading: false,
114544
- error: error instanceof Error ? error.message : t("contextPanel.loadFailed")
114545
- }));
114546
- });
114547
- return () => controller.abort();
114548
- }, [
114549
- source,
114550
- flowId,
114551
- attempt,
114552
- t
114553
- ]);
114554
- const current = state?.flowId == flowId && state.source == source ? state : void 0;
114555
- const bots = current?.bots;
114556
- const selected = typeof value == "string" && value.trim().length > 0 ? value : void 0;
114557
- const missing = selected != null && bots != null && !bots.some((bot) => bot.leinaId == selected);
114558
- const error = selected == null ? t("leina.select") : missing ? t("leina.unavailable", { id: selected }) : void 0;
114559
- const selectedLabel = bots?.find((bot) => bot.leinaId == selected)?.name ?? (missing ? t("leina.unavailable", { id: selected }) : current?.error != null ? t("leina.loadFailed") : t("leina.loading"));
114560
- const items = [...(bots ?? []).map((bot) => ({
114561
- value: bot.leinaId,
114562
- label: bot.name
114563
- })), ...selected != null && !bots?.some((bot) => bot.leinaId == selected) ? [{
114564
- value: selected,
114565
- label: selectedLabel
114566
- }] : []];
114567
- return /* @__PURE__ */ jsx(ValueEditorFeedback, {
114568
- error,
114569
- children: (errorId) => /* @__PURE__ */ jsxs(Select$1, {
114570
- items,
114571
- value: selected ?? null,
114572
- disabled,
114573
- onOpenChange: (open) => {
114574
- if (open) setAttempt((previous) => previous + 1);
114575
- },
114576
- onValueChange: (next) => {
114577
- if (typeof next == "string" && bots?.some((bot) => bot.leinaId == next)) onChange(next);
114578
- },
114579
- children: [/* @__PURE__ */ jsx(SelectTrigger, {
114580
- size: "field",
114581
- className: "w-full",
114582
- "data-field-control": true,
114583
- "aria-label": t("leina.robot"),
114584
- "aria-invalid": error != null || void 0,
114585
- "aria-describedby": errorId,
114586
- children: /* @__PURE__ */ jsx(SelectValue, {
114587
- placeholder: t("leina.select"),
114588
- children: selected == null ? void 0 : selectedLabel
114589
- })
114590
- }), /* @__PURE__ */ jsxs(SelectContent, {
114591
- align: "start",
114592
- alignItemWithTrigger: false,
114593
- className: selectionMenuContentClass,
114594
- children: [
114595
- (current?.loading ?? true) && /* @__PURE__ */ jsx("span", {
114596
- role: "status",
114597
- className: "block px-1.5 py-1 text-xs leading-5 text-muted-foreground",
114598
- children: t("leina.loading")
114599
- }),
114600
- bots?.map((bot) => /* @__PURE__ */ jsx(SelectItem, {
114601
- value: bot.leinaId,
114602
- className: selectionMenuItemClass,
114603
- children: /* @__PURE__ */ jsx("span", {
114604
- className: "truncate",
114605
- children: bot.name
114606
- })
114607
- }, bot.leinaId)),
114608
- missing && selected != null && /* @__PURE__ */ jsx(SelectItem, {
114609
- value: selected,
114610
- disabled: true,
114611
- className: `mt-1 first-of-type:mt-0 min-h-7 rounded-[var(--ui-control-radius,var(--ui-radius))] py-1 text-xs leading-5 font-normal text-destructive`,
114612
- children: t("leina.unavailable", { id: selected })
114613
- }),
114614
- current?.error != null && /* @__PURE__ */ jsxs("span", {
114615
- role: "alert",
114616
- className: "block px-1.5 py-1 text-xs leading-5 whitespace-normal break-words text-destructive",
114617
- children: [
114618
- t("leina.loadFailed"),
114619
- " ",
114620
- current.error
114621
- ]
114622
- }),
114623
- bots?.length == 0 && !current?.loading && /* @__PURE__ */ jsx("span", {
114624
- className: "block px-1.5 py-1 text-xs leading-5 whitespace-normal text-muted-foreground",
114625
- children: t("leina.empty")
114626
- })
114627
- ]
114628
- })]
114629
- })
114630
- });
114631
- }
114632
- //#endregion
114633
114737
  //#region src/workbench/browser/runtime/editor/useTriggerConfigOptions.ts
114634
114738
  function useTriggerConfigOptions(store, nodeId, field, scope, enabled) {
114635
114739
  const [attempt, setAttempt] = useState(0);
@@ -117305,6 +117409,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
117305
117409
  const unconfiguredOpenApi = task != null && "executor" in task && task.executor.kind == "openapi" && !task.executor.path;
117306
117410
  const isLlm = task != null && "executor" in task && task.executor.kind == "llm";
117307
117411
  const connector = task != null && "executor" in task && task.executor.kind == "connector" ? task.executor : void 0;
117412
+ const connectorPresentation = connector == null ? void 0 : connectorActionPresentation(connector.action, t);
117308
117413
  const nodeId = selection?.kind == "task" ? selection.id : void 0;
117309
117414
  const workflowSettings = task != null && "executor" in task && task.executor.kind == "workflow" && selection != null ? {
117310
117415
  task,
@@ -117719,7 +117824,8 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
117719
117824
  return {
117720
117825
  definition,
117721
117826
  sourceOnly: isHttpRequest && definition.handle.startsWith("auth."),
117722
- editor: !readOnly && connectors != null && connector?.action == "leina.send_notification" && definition.handle == "leinaId" && mapping?.kind != "sources" ? /* @__PURE__ */ jsx(LeinaBotSelect, {
117827
+ editor: !readOnly && connectors != null && mapping?.kind != "sources" ? connectorPresentation?.renderInput({
117828
+ handle: definition.handle,
117723
117829
  source: connectors,
117724
117830
  flowId: revision.revision.flowId,
117725
117831
  value: inputValue(mapping, definition.value),
@@ -117727,7 +117833,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
117727
117833
  onChange: (value) => {
117728
117834
  store?.nodes.setInputValue(selection.id, definition.handle, value);
117729
117835
  }
117730
- }, revision.revision.flowId) : void 0,
117836
+ }) : void 0,
117731
117837
  value: inputValue(mapping, definition.value),
117732
117838
  onReset: definition.value !== void 0 && mapping != null ? () => void store?.nodes.resetInputs(selection.id, [definition.handle]) : void 0,
117733
117839
  connected: mapping?.kind === "sources" && binding?.kind !== "variable",
@@ -117740,10 +117846,7 @@ function NodeInspector({ onAddWorkflowOutputs, onAddResponseNode, webhookDeploym
117740
117846
  title: t(selection.kind === "outputs" ? "inspector.ports.outputsTitle" : "inspector.ports.inputsTitle"),
117741
117847
  titleIcon: selection.kind === "outputs" ? "output" : "input",
117742
117848
  entries,
117743
- fieldLabels: connector?.action == "leina.send_notification" ? {
117744
- leinaId: t("leina.robot"),
117745
- message: t("leina.message")
117746
- } : void 0,
117849
+ fieldLabels: connectorPresentation?.fieldLabels,
117747
117850
  onReset: () => {
117748
117851
  return store?.nodes.resetInputs(selection.id, entries.flatMap((entry) => "group" in entry ? [] : [entry.definition.handle]));
117749
117852
  },