@oomol-lab/open-flow 0.1.0-beta.76 → 0.1.0-beta.78

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 (74) hide show
  1. package/README.md +3 -0
  2. package/dist/browser/{ContentIcon-Cm1hbVzW.js → ContentIcon-CMn0c-kl.js} +99 -6
  3. package/dist/browser/{FlowCanvas-NzKtla_c.js → FlowCanvas-BQGBcfoL.js} +1709 -613
  4. package/dist/browser/{createResourceDialog-BgdedQqu.js → createResourceDialog-DCGxfKFM.js} +63 -57
  5. package/dist/browser/{dialog-aSElFFw2.js → dialog-WzR4CRFH.js} +76 -77
  6. package/dist/browser/{exportSvg-Dcz4HTo_.js → exportSvg-CYwyYiuH.js} +2 -2
  7. package/dist/browser/{flowChanges-NZyS7HSp.js → flowChanges-Bz4dbDN_.js} +6875 -11091
  8. package/dist/browser/{flowWorkspace-Bl0SDehy.js → flowWorkspace-BI6L6a4r.js} +1415 -3037
  9. package/dist/browser/licenses.md +1 -1
  10. package/dist/browser/preview.css +619 -462
  11. package/dist/browser/preview.js +9016 -14956
  12. package/dist/browser/theme.css +4 -2
  13. package/dist/browser/{tooltip-3XMK9jkr.js → tooltip-BDcVTNpu.js} +65 -2
  14. package/dist/browser/{typeScriptSession-C9sBGOKZ.js → typeScriptSession-CRoezJPN.js} +1 -1
  15. package/dist/browser/ui.css +112 -24
  16. package/dist/browser/ui.js +3 -2
  17. package/dist/browser/workbench.css +10020 -9842
  18. package/dist/browser/workbench.d.ts +5 -2
  19. package/dist/browser/workbench.js +2382 -2668
  20. package/dist/browser/{workbenchSelect-DBGP7Y4Z.js → workbenchSelect-DtAd0zc4.js} +2 -2
  21. package/dist/command/index.js +48 -48
  22. package/dist/common/authoring.d.ts +4 -4
  23. package/dist/common/authoringExamples.d.ts +3 -2
  24. package/dist/common/authoringSchema.d.ts +15 -4
  25. package/dist/common/control-api-conformance.js +155 -15
  26. package/dist/common/control-api-errors.d.ts +12 -0
  27. package/dist/common/control-api.d.ts +39 -2
  28. package/dist/common/control-api.js +180 -37
  29. package/dist/common/control-requests.d.ts +23 -3
  30. package/dist/common/control-requests.js +141 -14
  31. package/dist/common/engine-contract.d.ts +3 -2
  32. package/dist/common/flow-authoring.js +47 -7
  33. package/dist/common/flow-change-schema.d.ts +1 -1
  34. package/dist/common/flow-change.d.ts +2 -2
  35. package/dist/common/flow-change.js +48 -8
  36. package/dist/common/flow-encoding.js +47 -7
  37. package/dist/common/flow-semantics.js +86 -8
  38. package/dist/common/flow-state.d.ts +100 -0
  39. package/dist/common/flow-state.js +5794 -0
  40. package/dist/common/mcp.d.ts +96 -3
  41. package/dist/common/mcp.js +158 -13
  42. package/dist/common/run-events.js +19 -8
  43. package/dist/common/runtime-contract.d.ts +14 -0
  44. package/dist/common/runtime-contract.js +124 -17
  45. package/dist/common/runtime-nodejs-compat.js +11 -12
  46. package/dist/common/scheduler-node-execution.d.ts +1 -0
  47. package/dist/common/scheduler.d.ts +2 -1
  48. package/dist/common/scheduler.js +95 -40
  49. package/dist/common/state-conformance.d.ts +16 -0
  50. package/dist/common/tags.d.ts +4 -0
  51. package/dist/index.d.ts +11 -0
  52. package/package.json +5 -1
  53. package/src/control/common/api.ts +101 -11
  54. package/src/control/common/authoring.ts +7 -1
  55. package/src/control/common/authoringExamples.ts +9 -0
  56. package/src/control/common/authoringSchema.ts +18 -12
  57. package/src/control/common/errors.ts +6 -0
  58. package/src/control/common/flowDecoders.ts +1 -0
  59. package/src/control/common/mcp.ts +16 -0
  60. package/src/control/common/requests.ts +16 -2
  61. package/src/control/common/tags.ts +20 -0
  62. package/src/execution/common/events.ts +22 -7
  63. package/src/execution/common/node-execution.ts +3 -0
  64. package/src/execution/common/scheduler.ts +29 -13
  65. package/src/flow/common/change.ts +2 -1
  66. package/src/flow/common/changeSchema.ts +11 -1
  67. package/src/flow/common/errorHandling.ts +1 -1
  68. package/src/flow/common/semantics.ts +27 -1
  69. package/src/runtime/common/engineContract.ts +6 -3
  70. package/src/runtime/common/nodejsGuest.generated.json +11 -12
  71. package/src/runtime/common/runtime.ts +122 -7
  72. package/src/state/common/conformance.ts +81 -0
  73. package/src/state/common/state.ts +141 -0
  74. package/src/types/index.ts +11 -0
@@ -1,6 +1,6 @@
1
1
  //#region src/runtime/common/engineContract.ts
2
- /** v9 is a single contract: the Node compatibility builtins, `context.fetch`, and no `context.egress`. */
3
- var currentEngineContract = "open-flow-engine/v9";
2
+ /** v10 adds persistent Flow State to the published v9 Node compatibility and fetch contract. */
3
+ var currentEngineContract = "open-flow-engine/v10";
4
4
  /** The published v8 Node compatibility contract, retained for existing Publications and Runs. */
5
5
  var nodejsEngineContract = "open-flow-engine/v8/nodejs-compat-v1";
6
6
  var platformSource = (contract) => `export const engineContract = ${JSON.stringify(contract)}
@@ -45,13 +45,19 @@ var nodejsContract = {
45
45
  ].flatMap((name) => [name, `node:${name}`])),
46
46
  platformSource: platformSource(nodejsEngineContract)
47
47
  };
48
- var currentContract = {
48
+ var v9Contract = {
49
49
  ...nodejsContract,
50
50
  codeFetch: true,
51
+ platformSource: platformSource("open-flow-engine/v9")
52
+ };
53
+ var currentContract = {
54
+ ...v9Contract,
55
+ flowState: true,
51
56
  platformSource: platformSource(currentEngineContract)
52
57
  };
53
58
  function findEngineContract(contract) {
54
- if (contract == "open-flow-engine/v9") return currentContract;
59
+ if (contract == "open-flow-engine/v10") return currentContract;
60
+ if (contract == "open-flow-engine/v9") return v9Contract;
55
61
  if (contract == "open-flow-engine/v8") return v8Contract;
56
62
  if (contract == "open-flow-engine/v8/nodejs-compat-v1") return nodejsContract;
57
63
  if (contract == "open-flow-engine/v7" || contract == "open-flow-engine/v7/nodejs-compat-v1") return {
@@ -70,30 +76,6 @@ function findEngineContract(contract) {
70
76
  };
71
77
  }
72
78
  //#endregion
73
- //#region ../../node_modules/.bun/dequal@2.0.3/node_modules/dequal/lite/index.mjs
74
- var has = Object.prototype.hasOwnProperty;
75
- function dequal(foo, bar) {
76
- var ctor, len;
77
- if (foo === bar) return true;
78
- if (foo && bar && (ctor = foo.constructor) === bar.constructor) {
79
- if (ctor === Date) return foo.getTime() === bar.getTime();
80
- if (ctor === RegExp) return foo.toString() === bar.toString();
81
- if (ctor === Array) {
82
- if ((len = foo.length) === bar.length) while (len-- && dequal(foo[len], bar[len]));
83
- return len === -1;
84
- }
85
- if (!ctor || typeof foo === "object") {
86
- len = 0;
87
- for (ctor in foo) {
88
- if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
89
- if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;
90
- }
91
- return Object.keys(bar).length === len;
92
- }
93
- }
94
- return foo !== foo && bar !== bar;
95
- }
96
- //#endregion
97
79
  //#region ../../node_modules/.bun/zod@4.6.5/node_modules/zod/v4/core/util.js
98
80
  function getEnumValues(entries) {
99
81
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
@@ -5768,6 +5750,68 @@ function datetime(params) {
5768
5750
  return /* @__PURE__ */ _isoDateTime(ZodISODateTime, params);
5769
5751
  }
5770
5752
  //#endregion
5753
+ //#region ../../node_modules/.bun/dequal@2.0.3/node_modules/dequal/lite/index.mjs
5754
+ var has = Object.prototype.hasOwnProperty;
5755
+ function dequal(foo, bar) {
5756
+ var ctor, len;
5757
+ if (foo === bar) return true;
5758
+ if (foo && bar && (ctor = foo.constructor) === bar.constructor) {
5759
+ if (ctor === Date) return foo.getTime() === bar.getTime();
5760
+ if (ctor === RegExp) return foo.toString() === bar.toString();
5761
+ if (ctor === Array) {
5762
+ if ((len = foo.length) === bar.length) while (len-- && dequal(foo[len], bar[len]));
5763
+ return len === -1;
5764
+ }
5765
+ if (!ctor || typeof foo === "object") {
5766
+ len = 0;
5767
+ for (ctor in foo) {
5768
+ if (has.call(foo, ctor) && ++len && !has.call(bar, ctor)) return false;
5769
+ if (!(ctor in bar) || !dequal(foo[ctor], bar[ctor])) return false;
5770
+ }
5771
+ return Object.keys(bar).length === len;
5772
+ }
5773
+ }
5774
+ return foo !== foo && bar !== bar;
5775
+ }
5776
+ strictObject({
5777
+ scope: _enum(["draft", "live"]),
5778
+ values: boolean().optional()
5779
+ });
5780
+ strictObject({
5781
+ scope: _enum(["draft", "live"]),
5782
+ key: string$1().min(1).refine((key) => new TextEncoder().encode(key).length <= 256).optional()
5783
+ });
5784
+ strictObject({
5785
+ scope: _enum(["draft", "live"]),
5786
+ space: string$1().regex(/^(flow|node:.+)$/)
5787
+ });
5788
+ var skipDuplicatesConfigSchema = strictObject({ fields: array(string$1().refine((field) => field.length > 0 && field.split(".").every((part) => part.length > 0), "Use a nonempty dot-separated field path.")).refine((fields) => new Set(fields).size === fields.length, "Identity fields must be distinct.").default([]) });
5789
+ var skipDuplicatesExecutorSchema = skipDuplicatesConfigSchema.extend({ kind: literal("skip-duplicates") });
5790
+ var flowStateViewSchema = object({
5791
+ version: literal(1),
5792
+ scope: _enum(["draft", "live"]),
5793
+ limits: object({
5794
+ maxValueBytes: number().positive(),
5795
+ maxValues: number().int().positive(),
5796
+ maxSpaces: number().int().positive(),
5797
+ maxIdentities: number().positive(),
5798
+ maxRunWrites: number().positive()
5799
+ }),
5800
+ values: array(object({
5801
+ key: string$1(),
5802
+ size: number().nonnegative(),
5803
+ updatedAt: number(),
5804
+ value: json$3().optional()
5805
+ })),
5806
+ spaces: array(object({
5807
+ space: string$1(),
5808
+ count: number().nonnegative(),
5809
+ pendingCount: number().nonnegative(),
5810
+ reservedCount: number().nonnegative(),
5811
+ updatedAt: number()
5812
+ }))
5813
+ });
5814
+ //#endregion
5771
5815
  //#region src/json-schema-subset/utils.ts
5772
5816
  var nextId = 0;
5773
5817
  function createId() {
@@ -9045,7 +9089,8 @@ var managedFields = object({
9045
9089
  flowId: text,
9046
9090
  revisionId: text
9047
9091
  }),
9048
- httpRequestExecutorSchema
9092
+ httpRequestExecutorSchema,
9093
+ skipDuplicatesExecutorSchema
9049
9094
  ])
9050
9095
  });
9051
9096
  var managed = managedFields.transform(limitDecisionTask);
@@ -9315,7 +9360,8 @@ var revision = object({
9315
9360
  literal(9),
9316
9361
  literal(10),
9317
9362
  literal(11),
9318
- literal(12)
9363
+ literal(12),
9364
+ literal(13)
9319
9365
  ]),
9320
9366
  document,
9321
9367
  modules: record$2(text, module)
@@ -9516,6 +9562,7 @@ array(union([...new Map(Object.entries(shapes).map(([kind, shape]) => [kind, sha
9516
9562
  ...shape
9517
9563
  })])).values()])).min(1);
9518
9564
  function checkModelVersion(content) {
9565
+ if (content.modelVersion < 13 && Object.values(content.document.graph.nodes).some((candidateNode) => candidateNode.kind === "task" && "executor" in candidateNode.task && candidateNode.task.executor.kind === "skip-duplicates")) throw new Error("Skip Duplicates requires Flow model v13.");
9519
9566
  if (content.modelVersion < 12 && Object.values(content.document.graph.nodes).some((candidateNode) => candidateNode.kind == "task" && "moduleId" in candidateNode.task && candidateNode.task.capabilities?.some((item) => item.kind == "http"))) throw new TypeError("Code HTTP access requires Flow model version 12.");
9520
9567
  if (content.modelVersion < 11 && Object.values(content.document.graph.nodes).some((candidateNode) => candidateNode.kind == "task" && "executor" in candidateNode.task && candidateNode.task.executor.kind == "http-request")) throw new TypeError("HTTP Request requires Flow model version 11.");
9521
9568
  if (content.modelVersion < 11 && Object.values(content.document.graph.nodes).some((candidateNode) => candidateNode.kind == "task" && ("moduleId" in candidateNode.task ? candidateNode.task.capabilities?.some((item) => item.kind == "workflow") : candidateNode.task.executor.kind == "agent" && candidateNode.task.executor.tools.some((item) => item.kind == "workflow")))) throw new TypeError("Workflow tools require Flow model version 11.");
@@ -9584,6 +9631,7 @@ var type = _enum([
9584
9631
  "decision",
9585
9632
  "openapi",
9586
9633
  "http-request",
9634
+ "skip-duplicates",
9587
9635
  "condition",
9588
9636
  "value",
9589
9637
  "wait",
@@ -9714,6 +9762,7 @@ var authoringConfigurations = {
9714
9762
  "connector": authoringDefinitionSchemas.connector.omit({ outputMode: true }).strict(),
9715
9763
  "openapi": authoringOpenApiSchema,
9716
9764
  "http-request": httpRequestConfigSchema,
9765
+ "skip-duplicates": skipDuplicatesConfigSchema,
9717
9766
  "agent": authoringDefinitionSchemas.agent.omit({
9718
9767
  prompt: true,
9719
9768
  tools: true
@@ -9981,6 +10030,9 @@ var controlErrorCode = {
9981
10030
  triggerKeyInvalid: "trigger-key.invalid",
9982
10031
  triggerKeyNotFound: "trigger-key.not-found",
9983
10032
  triggerNotFound: "trigger.not-found",
10033
+ tagInvalid: "tag.invalid",
10034
+ tagConflict: "tag.conflict",
10035
+ tagNotFound: "tag.not-found",
9984
10036
  variableInvalid: "variable.invalid",
9985
10037
  variableLimitReached: "variable.limit-reached",
9986
10038
  variableNotFound: "variable.not-found"
@@ -10029,6 +10081,9 @@ var controlErrorMetadata = {
10029
10081
  [controlErrorCode.triggerKeyInvalid]: { status: 409 },
10030
10082
  [controlErrorCode.triggerKeyNotFound]: { status: 404 },
10031
10083
  [controlErrorCode.triggerNotFound]: { status: 404 },
10084
+ [controlErrorCode.tagInvalid]: { status: 400 },
10085
+ [controlErrorCode.tagConflict]: { status: 409 },
10086
+ [controlErrorCode.tagNotFound]: { status: 404 },
10032
10087
  [controlErrorCode.variableInvalid]: { status: 400 },
10033
10088
  [controlErrorCode.variableLimitReached]: { status: 409 },
10034
10089
  [controlErrorCode.variableNotFound]: { status: 404 }
@@ -11915,6 +11970,7 @@ function flow(value) {
11915
11970
  publicationId: string(target.publicationId),
11916
11971
  revisionId: string(target.revisionId)
11917
11972
  } },
11973
+ tagIds: source.tagIds === void 0 ? [] : strings(source.tagIds),
11918
11974
  createdAt: string(source.createdAt),
11919
11975
  ...source.connectorTeamId == null ? {} : { connectorTeamId: string(source.connectorTeamId) },
11920
11976
  draftRevisionId: string(source.draftRevisionId),
@@ -12360,6 +12416,33 @@ function randomId() {
12360
12416
  return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
12361
12417
  }
12362
12418
  //#endregion
12419
+ //#region src/control/common/tags.ts
12420
+ function normalizeFlowQuery(query = {}) {
12421
+ return {
12422
+ query: query.query?.trim().toLowerCase() ?? "",
12423
+ tagIds: [...new Set(query.tagIds ?? [])].toSorted(),
12424
+ untagged: query.untagged ?? false
12425
+ };
12426
+ }
12427
+ function decodeTag(value) {
12428
+ const source = record(value);
12429
+ if (source.version != 1) return invalidResponse();
12430
+ return {
12431
+ tagId: string(source.tagId),
12432
+ name: string(source.name),
12433
+ version: 1
12434
+ };
12435
+ }
12436
+ function decodeTagListItem(value) {
12437
+ const source = record(value);
12438
+ const referenceCount = integer(source.referenceCount);
12439
+ if (referenceCount < 0) return invalidResponse();
12440
+ return {
12441
+ ...decodeTag(source),
12442
+ referenceCount
12443
+ };
12444
+ }
12445
+ //#endregion
12363
12446
  //#region src/control/common/api.ts
12364
12447
  function isRunTerminalEvent(event) {
12365
12448
  return event?.kind == "run.completed" || event?.kind == "run.failed" || event?.kind == "run.canceled" || event?.kind == "run.indeterminate";
@@ -12466,7 +12549,7 @@ function decodeRunEvent(value) {
12466
12549
  switch (kind) {
12467
12550
  case "node.started": {
12468
12551
  const nodeKind = payload.nodeKind;
12469
- if (nodeKind !== void 0 && nodeKind !== "approval" && nodeKind !== "condition" && nodeKind !== "connector" && nodeKind !== "javascript" && nodeKind !== "decision" && nodeKind !== "openapi" && nodeKind !== "http-request" && nodeKind !== "llm" && nodeKind !== "agent" && nodeKind !== "value" && nodeKind !== "outputs" && nodeKind !== "webhook-response" && nodeKind !== "workflow" && nodeKind !== "wait") return invalidResponse();
12552
+ if (nodeKind !== void 0 && nodeKind !== "approval" && nodeKind !== "condition" && nodeKind !== "connector" && nodeKind !== "javascript" && nodeKind !== "decision" && nodeKind !== "openapi" && nodeKind !== "http-request" && nodeKind !== "skip-duplicates" && nodeKind !== "llm" && nodeKind !== "agent" && nodeKind !== "value" && nodeKind !== "outputs" && nodeKind !== "webhook-response" && nodeKind !== "workflow" && nodeKind !== "wait") return invalidResponse();
12470
12553
  return {
12471
12554
  ...base,
12472
12555
  kind,
@@ -12593,6 +12676,10 @@ var ControlClient = class {
12593
12676
  }
12594
12677
  async listFlows(options = {}) {
12595
12678
  const parameters = new URLSearchParams();
12679
+ const filter = normalizeFlowQuery(options);
12680
+ if (filter.query) parameters.set("query", filter.query);
12681
+ if (filter.tagIds.length) parameters.set("tagIds", filter.tagIds.join(","));
12682
+ if (filter.untagged) parameters.set("untagged", "true");
12596
12683
  if (options.cursor != null) parameters.set("cursor", options.cursor);
12597
12684
  if (options.limit != null) parameters.set("limit", String(options.limit));
12598
12685
  if (options.includeTotal != null) parameters.set("includeTotal", String(options.includeTotal));
@@ -12682,15 +12769,18 @@ var ControlClient = class {
12682
12769
  file,
12683
12770
  name: options.name,
12684
12771
  teamId: options.teamId,
12772
+ tagIds: options.tagIds,
12685
12773
  version: 1
12686
12774
  })
12687
12775
  }));
12688
12776
  }
12689
- async createFlow(name, idempotencyKey = `flow-${randomId()}`, teamId) {
12777
+ async createFlow(name, idempotencyKey = `flow-${randomId()}`, teamId, tagIds, initialPresentation) {
12690
12778
  return flow(await this.request("/v1/flows", {
12691
12779
  body: JSON.stringify({
12692
12780
  name,
12693
12781
  ...teamId == null ? {} : { teamId },
12782
+ ...tagIds == null ? {} : { tagIds },
12783
+ ...initialPresentation == null ? {} : { presentation: initialPresentation },
12694
12784
  version: 1
12695
12785
  }),
12696
12786
  headers: { "idempotency-key": idempotencyKey },
@@ -12725,15 +12815,68 @@ var ControlClient = class {
12725
12815
  if (source.version != 1 || !Array.isArray(source.listeners)) return invalidResponse();
12726
12816
  return source.listeners.map(errorListener);
12727
12817
  }
12728
- async renameFlow(flowId, name) {
12729
- return flow(await this.request(`/v1/flows/${segment(flowId)}`, {
12818
+ async listTags(signal) {
12819
+ const source = record(await this.request("/v1/tags", { signal }));
12820
+ if (source.version != 1 || !Array.isArray(source.tags)) return invalidResponse();
12821
+ return {
12822
+ tags: source.tags.map(decodeTagListItem),
12823
+ version: 1
12824
+ };
12825
+ }
12826
+ async createTag(name) {
12827
+ return decodeTag(await this.request("/v1/tags", {
12828
+ method: "POST",
12730
12829
  body: JSON.stringify({
12731
12830
  name,
12732
12831
  version: 1
12733
- }),
12734
- method: "PATCH"
12832
+ })
12833
+ }));
12834
+ }
12835
+ async renameTag(tagId, name) {
12836
+ return decodeTag(await this.request(`/v1/tags/${segment(tagId)}`, {
12837
+ method: "PATCH",
12838
+ body: JSON.stringify({
12839
+ name,
12840
+ version: 1
12841
+ })
12842
+ }));
12843
+ }
12844
+ async deleteTag(tagId) {
12845
+ if (record(await this.request(`/v1/tags/${segment(tagId)}`, { method: "DELETE" })).version != 1) invalidResponse();
12846
+ }
12847
+ async setFlowTags(flowId, tagIds) {
12848
+ return flow(await this.request(`/v1/flows/${segment(flowId)}/tags`, {
12849
+ method: "PUT",
12850
+ body: JSON.stringify({
12851
+ tagIds,
12852
+ version: 1
12853
+ })
12854
+ }));
12855
+ }
12856
+ async updateFlow(flowId, changes) {
12857
+ return flow(await this.request(`/v1/flows/${segment(flowId)}`, {
12858
+ method: "PATCH",
12859
+ body: JSON.stringify({
12860
+ ...changes,
12861
+ version: 1
12862
+ })
12735
12863
  }));
12736
12864
  }
12865
+ async getFlowState(flowId, scope, values = false) {
12866
+ const result = flowStateViewSchema.safeParse(await this.request(`/v1/flows/${segment(flowId)}/state?scope=${scope}&values=${values}`));
12867
+ return result.success && result.data.scope === scope ? result.data : invalidResponse();
12868
+ }
12869
+ async clearFlowState(flowId, scope, key) {
12870
+ const source = record(await this.request(`/v1/flows/${segment(flowId)}/state?scope=${scope}${key == null ? "" : `&key=${encodeURIComponent(key)}`}`, { method: "DELETE" }));
12871
+ if (source.version !== 1 || source.cleared !== true) invalidResponse();
12872
+ }
12873
+ async clearFlowDedupe(flowId, scope, space) {
12874
+ const source = record(await this.request(`/v1/flows/${segment(flowId)}/dedupe?scope=${scope}&space=${encodeURIComponent(space)}`, { method: "DELETE" }));
12875
+ if (source.version !== 1 || source.cleared !== true) invalidResponse();
12876
+ }
12877
+ async renameFlow(flowId, name) {
12878
+ return this.updateFlow(flowId, { name });
12879
+ }
12737
12880
  async deleteFlow(flowId) {
12738
12881
  return flow(await this.request(`/v1/flows/${segment(flowId)}`, { method: "DELETE" }));
12739
12882
  }
@@ -13249,4 +13392,4 @@ var ControlClient = class {
13249
13392
  }
13250
13393
  };
13251
13394
  //#endregion
13252
- export { ApiError, ControlClient, actionSummary, controlErrorCode, controlErrorMetadata, connectorAccess as decodeConnectorAccess, connectorAccessSnapshot as decodeConnectorAccessSnapshot, decodeEventSource, decodeEventSources, decodeResultList, decodeResultRead, decodeRunEvent, decodeTriggerCatalog, flowInputDefinitions, flowInspection, inspectFlowDraft, isRunTerminalEvent, liveEntries, nodeDetails, parseProviderAccessSource, parseResultQuery, providerAccessBindingId, providerIconAppearance, readResult, searchTriggerKeys };
13395
+ export { ApiError, ControlClient, actionSummary, controlErrorCode, controlErrorMetadata, connectorAccess as decodeConnectorAccess, connectorAccessSnapshot as decodeConnectorAccessSnapshot, decodeEventSource, decodeEventSources, decodeResultList, decodeResultRead, decodeRunEvent, decodeTriggerCatalog, flowInputDefinitions, flowInspection, inspectFlowDraft, isRunTerminalEvent, liveEntries, nodeDetails, normalizeFlowQuery, parseProviderAccessSource, parseResultQuery, providerAccessBindingId, providerIconAppearance, readResult, searchTriggerKeys };
@@ -35,7 +35,7 @@ export declare const controlRequests: {
35
35
  edits: ({
36
36
  op: "node.add";
37
37
  as: string;
38
- type: "agent" | "approval" | "code" | "condition" | "connector" | "cron" | "decision" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "start" | "value" | "wait" | "webhook" | "webhook-response" | "workflow";
38
+ type: "agent" | "approval" | "code" | "condition" | "connector" | "cron" | "decision" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "skip-duplicates" | "start" | "value" | "wait" | "webhook" | "webhook-response" | "workflow";
39
39
  name: string;
40
40
  onError?: "error" | "stop" | undefined;
41
41
  retry?: {
@@ -178,12 +178,12 @@ export declare const controlRequests: {
178
178
  authoringSearch: (value: unknown) => {
179
179
  revision?: string | undefined;
180
180
  query: string;
181
- type?: "agent" | "approval" | "code" | "condition" | "connector" | "cron" | "decision" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "start" | "value" | "wait" | "webhook" | "webhook-response" | "workflow" | undefined;
181
+ type?: "agent" | "approval" | "code" | "condition" | "connector" | "cron" | "decision" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "skip-duplicates" | "start" | "value" | "wait" | "webhook" | "webhook-response" | "workflow" | undefined;
182
182
  offset: number;
183
183
  limit: number;
184
184
  };
185
185
  authoringSchema: (value: unknown) => {
186
- type?: "agent" | "approval" | "code" | "condition" | "connector" | "cron" | "decision" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "start" | "value" | "wait" | "webhook" | "webhook-response" | "workflow" | undefined;
186
+ type?: "agent" | "approval" | "code" | "condition" | "connector" | "cron" | "decision" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "skip-duplicates" | "start" | "value" | "wait" | "webhook" | "webhook-response" | "workflow" | undefined;
187
187
  action?: string | undefined;
188
188
  };
189
189
  loadOpenApiDocument: (value: unknown) => {
@@ -200,11 +200,31 @@ export declare const controlRequests: {
200
200
  file: JsonValue;
201
201
  name?: string | undefined;
202
202
  teamId?: string | undefined;
203
+ tagIds?: string[] | undefined;
203
204
  version: 1;
204
205
  };
205
206
  createFlow: (value: unknown) => {
206
207
  name: string;
207
208
  teamId?: string | undefined;
209
+ tagIds?: string[] | undefined;
210
+ presentation?: Record<string, JsonValue> | undefined;
211
+ version: 1;
212
+ };
213
+ saveTag: (value: unknown) => {
214
+ name: string;
215
+ version: 1;
216
+ };
217
+ setFlowTags: (value: unknown) => {
218
+ tagIds: string[];
219
+ version: 1;
220
+ };
221
+ updateFlow: (value: unknown) => {
222
+ name: string;
223
+ tagIds?: string[] | undefined;
224
+ version: 1;
225
+ } | {
226
+ name?: string | undefined;
227
+ tagIds: string[];
208
228
  version: 1;
209
229
  };
210
230
  renameFlow: (value: unknown) => {