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

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 (71) hide show
  1. package/README.md +1 -0
  2. package/dist/browser/{ContentIcon-Cm1hbVzW.js → ContentIcon-VZQO8VZU.js} +8 -5
  3. package/dist/browser/{FlowCanvas-NzKtla_c.js → FlowCanvas-BNGDMaWr.js} +15 -3
  4. package/dist/browser/{createResourceDialog-BgdedQqu.js → createResourceDialog-BmtakfVg.js} +63 -57
  5. package/dist/browser/{dialog-aSElFFw2.js → dialog-BcFBfRB1.js} +84 -15
  6. package/dist/browser/{exportSvg-Dcz4HTo_.js → exportSvg-CG8hEUNk.js} +2 -2
  7. package/dist/browser/{flowChanges-NZyS7HSp.js → flowChanges-BGo_4Ypo.js} +5849 -10882
  8. package/dist/browser/{flowWorkspace-Bl0SDehy.js → flowWorkspace-BFHGev7s.js} +1025 -2607
  9. package/dist/browser/preview.css +112 -5
  10. package/dist/browser/preview.js +1630 -9295
  11. package/dist/browser/theme.css +4 -2
  12. package/dist/browser/{tooltip-3XMK9jkr.js → tooltip-BAWSUexx.js} +1 -1
  13. package/dist/browser/{typeScriptSession-C9sBGOKZ.js → typeScriptSession-CRoezJPN.js} +1 -1
  14. package/dist/browser/ui.css +111 -4
  15. package/dist/browser/ui.js +3 -2
  16. package/dist/browser/workbench.css +9906 -9778
  17. package/dist/browser/workbench.d.ts +6 -2
  18. package/dist/browser/workbench.js +838 -499
  19. package/dist/browser/{workbenchSelect-DBGP7Y4Z.js → workbenchSelect-CjK-xdm3.js} +2 -2
  20. package/dist/command/index.js +48 -48
  21. package/dist/common/authoring.d.ts +4 -4
  22. package/dist/common/authoringExamples.d.ts +3 -2
  23. package/dist/common/authoringSchema.d.ts +23 -4
  24. package/dist/common/control-api-conformance.js +162 -15
  25. package/dist/common/control-api-errors.d.ts +12 -0
  26. package/dist/common/control-api.d.ts +35 -2
  27. package/dist/common/control-api.js +187 -37
  28. package/dist/common/control-requests.d.ts +22 -3
  29. package/dist/common/control-requests.js +152 -14
  30. package/dist/common/engine-contract.d.ts +3 -2
  31. package/dist/common/flow-authoring.js +55 -7
  32. package/dist/common/flow-change-schema.d.ts +1 -1
  33. package/dist/common/flow-change.d.ts +2 -2
  34. package/dist/common/flow-change.js +56 -8
  35. package/dist/common/flow-encoding.js +55 -7
  36. package/dist/common/flow-semantics.js +91 -7
  37. package/dist/common/flow-state.d.ts +123 -0
  38. package/dist/common/flow-state.js +5852 -0
  39. package/dist/common/mcp.d.ts +96 -3
  40. package/dist/common/mcp.js +165 -13
  41. package/dist/common/run-events.js +1 -0
  42. package/dist/common/runtime-contract.d.ts +14 -0
  43. package/dist/common/runtime-contract.js +118 -5
  44. package/dist/common/scheduler-node-execution.d.ts +1 -0
  45. package/dist/common/scheduler.d.ts +1 -1
  46. package/dist/common/scheduler.js +52 -3
  47. package/dist/common/state-conformance.d.ts +16 -0
  48. package/dist/common/tags.d.ts +4 -0
  49. package/dist/index.d.ts +11 -0
  50. package/package.json +5 -1
  51. package/src/control/common/api.ts +84 -11
  52. package/src/control/common/authoring.ts +6 -1
  53. package/src/control/common/authoringExamples.ts +8 -0
  54. package/src/control/common/authoringSchema.ts +18 -12
  55. package/src/control/common/errors.ts +6 -0
  56. package/src/control/common/flowDecoders.ts +1 -0
  57. package/src/control/common/mcp.ts +16 -0
  58. package/src/control/common/requests.ts +10 -2
  59. package/src/control/common/tags.ts +20 -0
  60. package/src/execution/common/events.ts +3 -0
  61. package/src/execution/common/node-execution.ts +3 -0
  62. package/src/execution/common/scheduler.ts +2 -0
  63. package/src/flow/common/change.ts +2 -1
  64. package/src/flow/common/changeSchema.ts +11 -1
  65. package/src/flow/common/errorHandling.ts +1 -1
  66. package/src/flow/common/semantics.ts +20 -0
  67. package/src/runtime/common/engineContract.ts +6 -3
  68. package/src/runtime/common/runtime.ts +116 -0
  69. package/src/state/common/conformance.ts +86 -0
  70. package/src/state/common/state.ts +169 -0
  71. 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,76 @@ 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 dedupeConfigSchema = strictObject({
5789
+ field: string$1().default(""),
5790
+ mode: _enum(["new", "increasing"]).default("new"),
5791
+ space: _enum(["node", "flow"]).default("node")
5792
+ });
5793
+ var dedupeExecutorSchema = dedupeConfigSchema.extend({ kind: literal("dedupe") });
5794
+ var flowStateViewSchema = object({
5795
+ version: literal(1),
5796
+ scope: _enum(["draft", "live"]),
5797
+ limits: object({
5798
+ maxValueBytes: number().positive(),
5799
+ maxValues: number().int().positive(),
5800
+ maxSpaces: number().int().positive(),
5801
+ maxIdentities: number().positive(),
5802
+ maxRunWrites: number().positive()
5803
+ }),
5804
+ values: array(object({
5805
+ key: string$1(),
5806
+ size: number().nonnegative(),
5807
+ updatedAt: number(),
5808
+ value: json$3().optional()
5809
+ })),
5810
+ spaces: array(object({
5811
+ space: string$1(),
5812
+ mode: _enum(["new", "increasing"]),
5813
+ count: number().nonnegative(),
5814
+ watermark: union([
5815
+ string$1(),
5816
+ number(),
5817
+ _null()
5818
+ ]),
5819
+ updatedAt: number()
5820
+ }))
5821
+ });
5822
+ //#endregion
5771
5823
  //#region src/json-schema-subset/utils.ts
5772
5824
  var nextId = 0;
5773
5825
  function createId() {
@@ -9045,7 +9097,8 @@ var managedFields = object({
9045
9097
  flowId: text,
9046
9098
  revisionId: text
9047
9099
  }),
9048
- httpRequestExecutorSchema
9100
+ httpRequestExecutorSchema,
9101
+ dedupeExecutorSchema
9049
9102
  ])
9050
9103
  });
9051
9104
  var managed = managedFields.transform(limitDecisionTask);
@@ -9315,7 +9368,8 @@ var revision = object({
9315
9368
  literal(9),
9316
9369
  literal(10),
9317
9370
  literal(11),
9318
- literal(12)
9371
+ literal(12),
9372
+ literal(13)
9319
9373
  ]),
9320
9374
  document,
9321
9375
  modules: record$2(text, module)
@@ -9516,6 +9570,7 @@ array(union([...new Map(Object.entries(shapes).map(([kind, shape]) => [kind, sha
9516
9570
  ...shape
9517
9571
  })])).values()])).min(1);
9518
9572
  function checkModelVersion(content) {
9573
+ if (content.modelVersion < 13 && Object.values(content.document.graph.nodes).some((candidateNode) => candidateNode.kind === "task" && "executor" in candidateNode.task && candidateNode.task.executor.kind === "dedupe")) throw new Error("Deduplication requires Flow model v13.");
9519
9574
  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
9575
  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
9576
  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 +9639,7 @@ var type = _enum([
9584
9639
  "decision",
9585
9640
  "openapi",
9586
9641
  "http-request",
9642
+ "dedupe",
9587
9643
  "condition",
9588
9644
  "value",
9589
9645
  "wait",
@@ -9714,6 +9770,7 @@ var authoringConfigurations = {
9714
9770
  "connector": authoringDefinitionSchemas.connector.omit({ outputMode: true }).strict(),
9715
9771
  "openapi": authoringOpenApiSchema,
9716
9772
  "http-request": httpRequestConfigSchema,
9773
+ "dedupe": dedupeConfigSchema,
9717
9774
  "agent": authoringDefinitionSchemas.agent.omit({
9718
9775
  prompt: true,
9719
9776
  tools: true
@@ -9981,6 +10038,9 @@ var controlErrorCode = {
9981
10038
  triggerKeyInvalid: "trigger-key.invalid",
9982
10039
  triggerKeyNotFound: "trigger-key.not-found",
9983
10040
  triggerNotFound: "trigger.not-found",
10041
+ tagInvalid: "tag.invalid",
10042
+ tagConflict: "tag.conflict",
10043
+ tagNotFound: "tag.not-found",
9984
10044
  variableInvalid: "variable.invalid",
9985
10045
  variableLimitReached: "variable.limit-reached",
9986
10046
  variableNotFound: "variable.not-found"
@@ -10029,6 +10089,9 @@ var controlErrorMetadata = {
10029
10089
  [controlErrorCode.triggerKeyInvalid]: { status: 409 },
10030
10090
  [controlErrorCode.triggerKeyNotFound]: { status: 404 },
10031
10091
  [controlErrorCode.triggerNotFound]: { status: 404 },
10092
+ [controlErrorCode.tagInvalid]: { status: 400 },
10093
+ [controlErrorCode.tagConflict]: { status: 409 },
10094
+ [controlErrorCode.tagNotFound]: { status: 404 },
10032
10095
  [controlErrorCode.variableInvalid]: { status: 400 },
10033
10096
  [controlErrorCode.variableLimitReached]: { status: 409 },
10034
10097
  [controlErrorCode.variableNotFound]: { status: 404 }
@@ -11915,6 +11978,7 @@ function flow(value) {
11915
11978
  publicationId: string(target.publicationId),
11916
11979
  revisionId: string(target.revisionId)
11917
11980
  } },
11981
+ tagIds: source.tagIds === void 0 ? [] : strings(source.tagIds),
11918
11982
  createdAt: string(source.createdAt),
11919
11983
  ...source.connectorTeamId == null ? {} : { connectorTeamId: string(source.connectorTeamId) },
11920
11984
  draftRevisionId: string(source.draftRevisionId),
@@ -12360,6 +12424,33 @@ function randomId() {
12360
12424
  return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
12361
12425
  }
12362
12426
  //#endregion
12427
+ //#region src/control/common/tags.ts
12428
+ function normalizeFlowQuery(query = {}) {
12429
+ return {
12430
+ query: query.query?.trim().toLowerCase() ?? "",
12431
+ tagIds: [...new Set(query.tagIds ?? [])].toSorted(),
12432
+ untagged: query.untagged ?? false
12433
+ };
12434
+ }
12435
+ function decodeTag(value) {
12436
+ const source = record(value);
12437
+ if (source.version != 1) return invalidResponse();
12438
+ return {
12439
+ tagId: string(source.tagId),
12440
+ name: string(source.name),
12441
+ version: 1
12442
+ };
12443
+ }
12444
+ function decodeTagListItem(value) {
12445
+ const source = record(value);
12446
+ const referenceCount = integer(source.referenceCount);
12447
+ if (referenceCount < 0) return invalidResponse();
12448
+ return {
12449
+ ...decodeTag(source),
12450
+ referenceCount
12451
+ };
12452
+ }
12453
+ //#endregion
12363
12454
  //#region src/control/common/api.ts
12364
12455
  function isRunTerminalEvent(event) {
12365
12456
  return event?.kind == "run.completed" || event?.kind == "run.failed" || event?.kind == "run.canceled" || event?.kind == "run.indeterminate";
@@ -12466,7 +12557,7 @@ function decodeRunEvent(value) {
12466
12557
  switch (kind) {
12467
12558
  case "node.started": {
12468
12559
  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();
12560
+ if (nodeKind !== void 0 && nodeKind !== "approval" && nodeKind !== "condition" && nodeKind !== "connector" && nodeKind !== "javascript" && nodeKind !== "decision" && nodeKind !== "openapi" && nodeKind !== "http-request" && nodeKind !== "dedupe" && nodeKind !== "llm" && nodeKind !== "agent" && nodeKind !== "value" && nodeKind !== "outputs" && nodeKind !== "webhook-response" && nodeKind !== "workflow" && nodeKind !== "wait") return invalidResponse();
12470
12561
  return {
12471
12562
  ...base,
12472
12563
  kind,
@@ -12593,6 +12684,10 @@ var ControlClient = class {
12593
12684
  }
12594
12685
  async listFlows(options = {}) {
12595
12686
  const parameters = new URLSearchParams();
12687
+ const filter = normalizeFlowQuery(options);
12688
+ if (filter.query) parameters.set("query", filter.query);
12689
+ if (filter.tagIds.length) parameters.set("tagIds", filter.tagIds.join(","));
12690
+ if (filter.untagged) parameters.set("untagged", "true");
12596
12691
  if (options.cursor != null) parameters.set("cursor", options.cursor);
12597
12692
  if (options.limit != null) parameters.set("limit", String(options.limit));
12598
12693
  if (options.includeTotal != null) parameters.set("includeTotal", String(options.includeTotal));
@@ -12682,15 +12777,17 @@ var ControlClient = class {
12682
12777
  file,
12683
12778
  name: options.name,
12684
12779
  teamId: options.teamId,
12780
+ tagIds: options.tagIds,
12685
12781
  version: 1
12686
12782
  })
12687
12783
  }));
12688
12784
  }
12689
- async createFlow(name, idempotencyKey = `flow-${randomId()}`, teamId) {
12785
+ async createFlow(name, idempotencyKey = `flow-${randomId()}`, teamId, tagIds) {
12690
12786
  return flow(await this.request("/v1/flows", {
12691
12787
  body: JSON.stringify({
12692
12788
  name,
12693
12789
  ...teamId == null ? {} : { teamId },
12790
+ ...tagIds == null ? {} : { tagIds },
12694
12791
  version: 1
12695
12792
  }),
12696
12793
  headers: { "idempotency-key": idempotencyKey },
@@ -12725,15 +12822,68 @@ var ControlClient = class {
12725
12822
  if (source.version != 1 || !Array.isArray(source.listeners)) return invalidResponse();
12726
12823
  return source.listeners.map(errorListener);
12727
12824
  }
12728
- async renameFlow(flowId, name) {
12729
- return flow(await this.request(`/v1/flows/${segment(flowId)}`, {
12825
+ async listTags(signal) {
12826
+ const source = record(await this.request("/v1/tags", { signal }));
12827
+ if (source.version != 1 || !Array.isArray(source.tags)) return invalidResponse();
12828
+ return {
12829
+ tags: source.tags.map(decodeTagListItem),
12830
+ version: 1
12831
+ };
12832
+ }
12833
+ async createTag(name) {
12834
+ return decodeTag(await this.request("/v1/tags", {
12835
+ method: "POST",
12730
12836
  body: JSON.stringify({
12731
12837
  name,
12732
12838
  version: 1
12733
- }),
12734
- method: "PATCH"
12839
+ })
12735
12840
  }));
12736
12841
  }
12842
+ async renameTag(tagId, name) {
12843
+ return decodeTag(await this.request(`/v1/tags/${segment(tagId)}`, {
12844
+ method: "PATCH",
12845
+ body: JSON.stringify({
12846
+ name,
12847
+ version: 1
12848
+ })
12849
+ }));
12850
+ }
12851
+ async deleteTag(tagId) {
12852
+ if (record(await this.request(`/v1/tags/${segment(tagId)}`, { method: "DELETE" })).version != 1) invalidResponse();
12853
+ }
12854
+ async setFlowTags(flowId, tagIds) {
12855
+ return flow(await this.request(`/v1/flows/${segment(flowId)}/tags`, {
12856
+ method: "PUT",
12857
+ body: JSON.stringify({
12858
+ tagIds,
12859
+ version: 1
12860
+ })
12861
+ }));
12862
+ }
12863
+ async updateFlow(flowId, changes) {
12864
+ return flow(await this.request(`/v1/flows/${segment(flowId)}`, {
12865
+ method: "PATCH",
12866
+ body: JSON.stringify({
12867
+ ...changes,
12868
+ version: 1
12869
+ })
12870
+ }));
12871
+ }
12872
+ async getFlowState(flowId, scope, values = false) {
12873
+ const result = flowStateViewSchema.safeParse(await this.request(`/v1/flows/${segment(flowId)}/state?scope=${scope}&values=${values}`));
12874
+ return result.success && result.data.scope === scope ? result.data : invalidResponse();
12875
+ }
12876
+ async clearFlowState(flowId, scope, key) {
12877
+ const source = record(await this.request(`/v1/flows/${segment(flowId)}/state?scope=${scope}${key == null ? "" : `&key=${encodeURIComponent(key)}`}`, { method: "DELETE" }));
12878
+ if (source.version !== 1 || source.cleared !== true) invalidResponse();
12879
+ }
12880
+ async clearFlowDedupe(flowId, scope, space) {
12881
+ const source = record(await this.request(`/v1/flows/${segment(flowId)}/dedupe?scope=${scope}&space=${encodeURIComponent(space)}`, { method: "DELETE" }));
12882
+ if (source.version !== 1 || source.cleared !== true) invalidResponse();
12883
+ }
12884
+ async renameFlow(flowId, name) {
12885
+ return this.updateFlow(flowId, { name });
12886
+ }
12737
12887
  async deleteFlow(flowId) {
12738
12888
  return flow(await this.request(`/v1/flows/${segment(flowId)}`, { method: "DELETE" }));
12739
12889
  }
@@ -13249,4 +13399,4 @@ var ControlClient = class {
13249
13399
  }
13250
13400
  };
13251
13401
  //#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 };
13402
+ 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" | "dedupe" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "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" | "dedupe" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "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" | "dedupe" | "error" | "http-request" | "integration" | "llm" | "openapi" | "outputs" | "poll" | "start" | "value" | "wait" | "webhook" | "webhook-response" | "workflow" | undefined;
187
187
  action?: string | undefined;
188
188
  };
189
189
  loadOpenApiDocument: (value: unknown) => {
@@ -200,11 +200,30 @@ 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
+ version: 1;
211
+ };
212
+ saveTag: (value: unknown) => {
213
+ name: string;
214
+ version: 1;
215
+ };
216
+ setFlowTags: (value: unknown) => {
217
+ tagIds: string[];
218
+ version: 1;
219
+ };
220
+ updateFlow: (value: unknown) => {
221
+ name: string;
222
+ tagIds?: string[] | undefined;
223
+ version: 1;
224
+ } | {
225
+ name?: string | undefined;
226
+ tagIds: string[];
208
227
  version: 1;
209
228
  };
210
229
  renameFlow: (value: unknown) => {