@oomol-lab/open-flow 0.1.0-beta.66 → 0.1.0-beta.68

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 (44) hide show
  1. package/dist/browser/ContentIcon-Sx9bywU-.js +11861 -0
  2. package/dist/browser/FlowCanvas-CXpaeurx.js +22721 -0
  3. package/dist/browser/{createResourceDialog-C-Si_cYs.js → createResourceDialog-BKmimKA_.js} +3 -2
  4. package/dist/browser/dialog-ZmfcwuMS.js +8785 -0
  5. package/dist/browser/event-sources.d.ts +4 -1
  6. package/dist/browser/exportSvg-D4CqCcx2.js +659 -0
  7. package/dist/browser/flow-authoring-node.d.ts +2 -0
  8. package/dist/browser/flow-authoring.js +6 -5
  9. package/dist/browser/flow-change.js +6 -5
  10. package/dist/browser/{flowChanges-T4_R5p1f.js → flowChanges-B5tZMcGr.js} +3440 -15004
  11. package/dist/browser/{flowRunInputEditorStore-DJqmR6Qh.js → flowRunInputEditorStore-ys1-w9GW.js} +2 -1
  12. package/dist/browser/{flowWorkspace-C0J5C0oM.js → flowWorkspace-zFBFtZPo.js} +1232 -23701
  13. package/dist/browser/languages-gYzoQqCi.js +68 -0
  14. package/dist/browser/licenses.md +24 -0
  15. package/dist/browser/preview.css +125 -55
  16. package/dist/browser/preview.js +16256 -15986
  17. package/dist/browser/theme.css +1 -0
  18. package/dist/browser/{icons-BD3m0RQq.js → tooltip-CJjYs_2I.js} +280 -9041
  19. package/dist/browser/ui.css +38 -4
  20. package/dist/browser/{value-BADHeZ9I.js → value-BbFQZZ_V.js} +1 -68
  21. package/dist/browser/workbench-contract.d.ts +1 -1
  22. package/dist/browser/workbench.css +2907 -2871
  23. package/dist/browser/workbench.d.ts +0 -1
  24. package/dist/browser/workbench.js +760 -461
  25. package/dist/browser/{workbenchSelect-B-PFpF_Q.js → workbenchSelect-CChdgugI.js} +2 -1
  26. package/dist/command/index.js +25 -25
  27. package/dist/common/authoringExamples.d.ts +2 -2
  28. package/dist/common/control-api-conformance.js +57 -12
  29. package/dist/common/control-api.d.ts +12 -2
  30. package/dist/common/control-api.js +41 -8
  31. package/dist/common/control-requests.js +7 -6
  32. package/dist/common/decision.js +5 -4
  33. package/dist/common/flow-encoding.js +7 -4
  34. package/dist/common/flow-semantics.js +11 -8
  35. package/dist/common/integration-trigger.js +5 -4
  36. package/dist/common/mcp.js +42 -9
  37. package/dist/common/openapi.js +5 -4
  38. package/dist/common/poll-trigger.js +5 -4
  39. package/dist/common/scheduler.js +5 -4
  40. package/dist/common/webhook-trigger.js +5 -4
  41. package/dist/common/workflow.js +5 -4
  42. package/package.json +1 -1
  43. package/skills/open-flow/SKILL.md +9 -0
  44. package/skills/open-flow/references/flow-authoring.md +2 -0
@@ -6037,6 +6037,7 @@ function webhookSupportsBody(method) {
6037
6037
  return method !== "GET";
6038
6038
  }
6039
6039
  var text = string$1();
6040
+ var actionConnection = text.describe("Account selection: omit while unconfigured; use an account ID to select it; use \"\" to explicitly defer configuration. Deferred Actions fail if called; deferred Agent tools are excluded from the callable tool set. Not supported by Triggers.");
6040
6041
  var json$3 = json$4();
6041
6042
  var strings$1 = array(text);
6042
6043
  var port$1 = object({
@@ -6092,7 +6093,7 @@ var capability = union([
6092
6093
  mode: literal("independent"),
6093
6094
  actions: array(strictObject({
6094
6095
  action: text,
6095
- connectionId: text.optional()
6096
+ connectionId: actionConnection.optional()
6096
6097
  }))
6097
6098
  }),
6098
6099
  strictObject({
@@ -6152,7 +6153,7 @@ var managedFields = object({
6152
6153
  object({
6153
6154
  kind: literal("connector"),
6154
6155
  action: text,
6155
- connectionId: text.optional(),
6156
+ connectionId: actionConnection.optional(),
6156
6157
  outputMode: literal("value").optional()
6157
6158
  }),
6158
6159
  object({
@@ -6192,13 +6193,13 @@ var managedFields = object({
6192
6193
  name: text,
6193
6194
  description: text,
6194
6195
  action: text,
6195
- connectionId: text.optional(),
6196
+ connectionId: actionConnection.optional(),
6196
6197
  approval: boolean(),
6197
6198
  inputs: array(input.extend({ source: agentInput }))
6198
6199
  })),
6199
6200
  notification: object({
6200
6201
  action: text,
6201
- connectionId: text.optional(),
6202
+ connectionId: actionConnection.optional(),
6202
6203
  inputDefinitions: array(input),
6203
6204
  messageHandle: text,
6204
6205
  inputs: record$2(text, agentValue)
@@ -11093,6 +11094,15 @@ function flow$1(value) {
11093
11094
  version: 1
11094
11095
  };
11095
11096
  }
11097
+ function flowListItem(value) {
11098
+ const source = record(value);
11099
+ const referenceCount = integer(source.referenceCount);
11100
+ if (referenceCount < 0) return invalidResponse();
11101
+ return {
11102
+ ...flow$1(source),
11103
+ referenceCount
11104
+ };
11105
+ }
11096
11106
  function flowPage(value) {
11097
11107
  const source = record(value);
11098
11108
  if (source.version != 1 || !Array.isArray(source.flows)) return invalidResponse();
@@ -11102,7 +11112,7 @@ function flowPage(value) {
11102
11112
  if (total != null && !Number.isSafeInteger(total)) return invalidResponse();
11103
11113
  return {
11104
11114
  ...nextCursor == null ? {} : { nextCursor },
11105
- flows: source.flows.map(flow$1),
11115
+ flows: source.flows.map(flowListItem),
11106
11116
  ...total == null ? {} : { total },
11107
11117
  version: 1
11108
11118
  };
@@ -11292,6 +11302,21 @@ function workflowIdentity(value) {
11292
11302
  executionId: string(ref.executionId)
11293
11303
  };
11294
11304
  }
11305
+ function runInitiator(value) {
11306
+ const source = record(value);
11307
+ if (![
11308
+ "workbench",
11309
+ "cli",
11310
+ "mcp",
11311
+ "api",
11312
+ "trigger",
11313
+ "workflow"
11314
+ ].includes(source.channel)) return invalidResponse();
11315
+ return {
11316
+ channel: source.channel,
11317
+ ...source.actorId === void 0 ? {} : { actorId: string(source.actorId) }
11318
+ };
11319
+ }
11295
11320
  function runDetails(value) {
11296
11321
  const source = record(value);
11297
11322
  const summary = run$1(source);
@@ -11313,6 +11338,7 @@ function runDetails(value) {
11313
11338
  if (source.calls !== void 0 && !Array.isArray(source.calls)) return invalidResponse();
11314
11339
  const details = {
11315
11340
  ...summary,
11341
+ ...source.initiator === void 0 ? {} : { initiator: runInitiator(source.initiator) },
11316
11342
  ...errorHandling(source),
11317
11343
  ...source.triggerNodeId === void 0 ? {} : { triggerNodeId: string(source.triggerNodeId) },
11318
11344
  ...source.caller === void 0 ? {} : { caller: workflowIdentity(source.caller) },
@@ -11690,7 +11716,8 @@ function operationKey(operation) {
11690
11716
  return `${operation}-${randomId()}`;
11691
11717
  }
11692
11718
  var ControlClient = class {
11693
- constructor(requestControl) {
11719
+ constructor(requestControl, channel = "api") {
11720
+ this.channel = channel;
11694
11721
  this.requestControl = requestControl;
11695
11722
  }
11696
11723
  async loadOpenApiDocument(url, signal) {
@@ -12210,7 +12237,10 @@ var ControlClient = class {
12210
12237
  trigger: options.trigger,
12211
12238
  version: 2
12212
12239
  }),
12213
- headers: { "idempotency-key": options.idempotencyKey ?? operationKey("run") },
12240
+ headers: {
12241
+ "idempotency-key": options.idempotencyKey ?? operationKey("run"),
12242
+ "x-open-flow-client": this.channel
12243
+ },
12214
12244
  method: "POST"
12215
12245
  }));
12216
12246
  return created.source == "draft" ? created : invalidResponse();
@@ -12223,7 +12253,10 @@ var ControlClient = class {
12223
12253
  publicationId,
12224
12254
  version: 2
12225
12255
  }),
12226
- headers: { "idempotency-key": options.idempotencyKey ?? operationKey("run") },
12256
+ headers: {
12257
+ "idempotency-key": options.idempotencyKey ?? operationKey("run"),
12258
+ "x-open-flow-client": this.channel
12259
+ },
12227
12260
  method: "POST"
12228
12261
  }));
12229
12262
  return created.source == "live" ? created : invalidResponse();
@@ -12565,7 +12598,7 @@ var mutationKey = id.max(256).describe("Stable identity for this mutation. Retry
12565
12598
  var pageLimit = int().min(1).max(100).default(50);
12566
12599
  var flow = id.describe("Exact Flow ID returned by flow_list or flow_create.");
12567
12600
  var run = id.describe("Exact Run ID returned by flow_run or run_list.");
12568
- var mcpInstructions = "Use flow_list, flow_read and flow_search to inspect root workflows. Read node type schemas with flow_schema. Use flow_edit with the observed baseRevision and a stable requestId. Node edits affect only the selected node. Text edits require exactly one match. Execution edges and input sources are independent. Legacy Subflow content is unsupported. Edits can save incomplete drafts; inspect returned diagnostics and use flow_check before running. Use flow_check before flow_run. Select an explicit Trigger node ID and fixed revision or publication. A new Flow has no Trigger until you add one. Before adding a Feishu Trigger, use event_source_list and compare its Connection IDs with connector_connections in the Flow scope. If no source is available, create and verify one in Workbench. Use flow_publish to publish a fixed Revision, then poll flow_publish_status until succeeded or failed. Use flow_live to inspect current online entries after publication. Use flow_set_enabled to enable or disable the observed Live publication. flow_run returns an accepted Run, not its final result. Find Runs with run_list, poll run_get and use run_result after terminal. Resolve a waiting Run only with an explicit run_resolve_wait action allowed by run_get. Use run_results and run_result_read to inspect stored Agent tool results; these are separate from the terminal Run result. Retry flow_edit with identical arguments and the same requestId. Retry flow_create, flow_import, flow_publish and flow_run only with identical arguments and the same idempotencyKey; a new key can execute the Flow again. Canvas commands are transient broadcasts without execution confirmation; never automatically retry flow_canvas because pan is relative. Other mutations use the same resource identity and arguments when retrying. Cancel a Run explicitly with run_cancel. Use nextCursor and nextAfter to read subsequent pages. Connector-backed deployments may require a Team; inspect connector_teams before creating a Flow.";
12601
+ var mcpInstructions = "Keep generated Flow and node names short enough to scan on the canvas. Aim for 2–4 English words or 4–8 Chinese characters, using the user's language unless the workflow has an established naming language. Name a Flow by its main purpose and a node by its action and object, such as \"AI Trend Digest\", \"Fetch trends\", \"Verify sources\", or \"发布文章\". Keep only qualifiers needed to distinguish similar nodes. Put detailed behavior in descriptions; avoid sentences, repeated workflow context, and obscure abbreviations. Preserve names explicitly supplied by the user, and do not rename unrelated existing nodes. Use flow_list, flow_read and flow_search to inspect root workflows. Read node type schemas with flow_schema. Use flow_edit with the observed baseRevision and a stable requestId. Node edits affect only the selected node. Text edits require exactly one match. Execution edges and input sources are independent. Legacy Subflow content is unsupported. Edits can save incomplete drafts; inspect returned diagnostics and use flow_check before running. Use flow_check before flow_run. Select an explicit Trigger node ID and fixed revision or publication. A new Flow has no Trigger until you add one. Before adding a Feishu Trigger, use event_source_list and compare its Connection IDs with connector_connections in the Flow scope. If no source is available, create and verify one in Workbench. Use flow_publish to publish a fixed Revision, then poll flow_publish_status until succeeded or failed. Use flow_live to inspect current online entries after publication. Use flow_set_enabled to enable or disable the observed Live publication. flow_run returns an accepted Run, not its final result. Find Runs with run_list, poll run_get and use run_result after terminal. Resolve a waiting Run only with an explicit run_resolve_wait action allowed by run_get. Use run_results and run_result_read to inspect stored Agent tool results; these are separate from the terminal Run result. Retry flow_edit with identical arguments and the same requestId. Retry flow_create, flow_import, flow_publish and flow_run only with identical arguments and the same idempotencyKey; a new key can execute the Flow again. Canvas commands are transient broadcasts without execution confirmation; never automatically retry flow_canvas because pan is relative. Other mutations use the same resource identity and arguments when retrying. Cancel a Run explicitly with run_cancel. Use nextCursor and nextAfter to read subsequent pages. Connector-backed deployments may require a Team; inspect connector_teams before creating a Flow.";
12569
12602
  function tool(description, schema, readOnly, idempotent = true) {
12570
12603
  return {
12571
12604
  description,
@@ -6687,6 +6687,7 @@ var webhookMethods = [
6687
6687
  "DELETE"
6688
6688
  ];
6689
6689
  var text = string();
6690
+ var actionConnection = text.describe("Account selection: omit while unconfigured; use an account ID to select it; use \"\" to explicitly defer configuration. Deferred Actions fail if called; deferred Agent tools are excluded from the callable tool set. Not supported by Triggers.");
6690
6691
  var json = json$1();
6691
6692
  var strings = array(text);
6692
6693
  var port = object$1({
@@ -6742,7 +6743,7 @@ var capability = union([
6742
6743
  mode: literal("independent"),
6743
6744
  actions: array(strictObject({
6744
6745
  action: text,
6745
- connectionId: text.optional()
6746
+ connectionId: actionConnection.optional()
6746
6747
  }))
6747
6748
  }),
6748
6749
  strictObject({
@@ -6802,7 +6803,7 @@ var managedFields = object$1({
6802
6803
  object$1({
6803
6804
  kind: literal("connector"),
6804
6805
  action: text,
6805
- connectionId: text.optional(),
6806
+ connectionId: actionConnection.optional(),
6806
6807
  outputMode: literal("value").optional()
6807
6808
  }),
6808
6809
  object$1({
@@ -6842,13 +6843,13 @@ var managedFields = object$1({
6842
6843
  name: text,
6843
6844
  description: text,
6844
6845
  action: text,
6845
- connectionId: text.optional(),
6846
+ connectionId: actionConnection.optional(),
6846
6847
  approval: boolean(),
6847
6848
  inputs: array(input.extend({ source: agentInput }))
6848
6849
  })),
6849
6850
  notification: object$1({
6850
6851
  action: text,
6851
- connectionId: text.optional(),
6852
+ connectionId: actionConnection.optional(),
6852
6853
  inputDefinitions: array(input),
6853
6854
  messageHandle: text,
6854
6855
  inputs: record$1(text, agentValue)
@@ -6694,6 +6694,7 @@ var webhookMethods = [
6694
6694
  "DELETE"
6695
6695
  ];
6696
6696
  var text = string();
6697
+ var actionConnection = text.describe("Account selection: omit while unconfigured; use an account ID to select it; use \"\" to explicitly defer configuration. Deferred Actions fail if called; deferred Agent tools are excluded from the callable tool set. Not supported by Triggers.");
6697
6698
  var json = json$1();
6698
6699
  var strings = array(text);
6699
6700
  var port = object({
@@ -6749,7 +6750,7 @@ var capability = union([
6749
6750
  mode: literal("independent"),
6750
6751
  actions: array(strictObject({
6751
6752
  action: text,
6752
- connectionId: text.optional()
6753
+ connectionId: actionConnection.optional()
6753
6754
  }))
6754
6755
  }),
6755
6756
  strictObject({
@@ -6809,7 +6810,7 @@ var managedFields = object({
6809
6810
  object({
6810
6811
  kind: literal("connector"),
6811
6812
  action: text,
6812
- connectionId: text.optional(),
6813
+ connectionId: actionConnection.optional(),
6813
6814
  outputMode: literal("value").optional()
6814
6815
  }),
6815
6816
  object({
@@ -6849,13 +6850,13 @@ var managedFields = object({
6849
6850
  name: text,
6850
6851
  description: text,
6851
6852
  action: text,
6852
- connectionId: text.optional(),
6853
+ connectionId: actionConnection.optional(),
6853
6854
  approval: boolean(),
6854
6855
  inputs: array(input.extend({ source: agentInput }))
6855
6856
  })),
6856
6857
  notification: object({
6857
6858
  action: text,
6858
- connectionId: text.optional(),
6859
+ connectionId: actionConnection.optional(),
6859
6860
  inputDefinitions: array(input),
6860
6861
  messageHandle: text,
6861
6862
  inputs: record$1(text, agentValue)
@@ -9496,6 +9496,7 @@ function webhookSupportsBody(method) {
9496
9496
  return method !== "GET";
9497
9497
  }
9498
9498
  var text = string();
9499
+ var actionConnection = text.describe("Account selection: omit while unconfigured; use an account ID to select it; use \"\" to explicitly defer configuration. Deferred Actions fail if called; deferred Agent tools are excluded from the callable tool set. Not supported by Triggers.");
9499
9500
  var json = json$1();
9500
9501
  var strings = array(text);
9501
9502
  var port = object({
@@ -9551,7 +9552,7 @@ var capability = union([
9551
9552
  mode: literal("independent"),
9552
9553
  actions: array(strictObject({
9553
9554
  action: text,
9554
- connectionId: text.optional()
9555
+ connectionId: actionConnection.optional()
9555
9556
  }))
9556
9557
  }),
9557
9558
  strictObject({
@@ -9611,7 +9612,7 @@ var managedFields = object({
9611
9612
  object({
9612
9613
  kind: literal("connector"),
9613
9614
  action: text,
9614
- connectionId: text.optional(),
9615
+ connectionId: actionConnection.optional(),
9615
9616
  outputMode: literal("value").optional()
9616
9617
  }),
9617
9618
  object({
@@ -9651,13 +9652,13 @@ var managedFields = object({
9651
9652
  name: text,
9652
9653
  description: text,
9653
9654
  action: text,
9654
- connectionId: text.optional(),
9655
+ connectionId: actionConnection.optional(),
9655
9656
  approval: boolean(),
9656
9657
  inputs: array(input.extend({ source: agentInput$1 }))
9657
9658
  })),
9658
9659
  notification: object({
9659
9660
  action: text,
9660
- connectionId: text.optional(),
9661
+ connectionId: actionConnection.optional(),
9661
9662
  inputDefinitions: array(input),
9662
9663
  messageHandle: text,
9663
9664
  inputs: record$1(text, agentValue)
@@ -5810,6 +5810,7 @@ function webhookSupportsBody(method) {
5810
5810
  return method !== "GET";
5811
5811
  }
5812
5812
  var text = string();
5813
+ var actionConnection = text.describe("Account selection: omit while unconfigured; use an account ID to select it; use \"\" to explicitly defer configuration. Deferred Actions fail if called; deferred Agent tools are excluded from the callable tool set. Not supported by Triggers.");
5813
5814
  var json = json$1();
5814
5815
  var strings = array(text);
5815
5816
  var port = object({
@@ -5865,7 +5866,7 @@ var capability = union([
5865
5866
  mode: literal("independent"),
5866
5867
  actions: array(strictObject({
5867
5868
  action: text,
5868
- connectionId: text.optional()
5869
+ connectionId: actionConnection.optional()
5869
5870
  }))
5870
5871
  }),
5871
5872
  strictObject({
@@ -5925,7 +5926,7 @@ var managedFields = object({
5925
5926
  object({
5926
5927
  kind: literal("connector"),
5927
5928
  action: text,
5928
- connectionId: text.optional(),
5929
+ connectionId: actionConnection.optional(),
5929
5930
  outputMode: literal("value").optional()
5930
5931
  }),
5931
5932
  object({
@@ -5965,13 +5966,13 @@ var managedFields = object({
5965
5966
  name: text,
5966
5967
  description: text,
5967
5968
  action: text,
5968
- connectionId: text.optional(),
5969
+ connectionId: actionConnection.optional(),
5969
5970
  approval: boolean(),
5970
5971
  inputs: array(input.extend({ source: agentInput }))
5971
5972
  })),
5972
5973
  notification: object({
5973
5974
  action: text,
5974
- connectionId: text.optional(),
5975
+ connectionId: actionConnection.optional(),
5975
5976
  inputDefinitions: array(input),
5976
5977
  messageHandle: text,
5977
5978
  inputs: record$1(text, agentValue)
@@ -6687,6 +6687,7 @@ var webhookMethods = [
6687
6687
  "DELETE"
6688
6688
  ];
6689
6689
  var text = string();
6690
+ var actionConnection = text.describe("Account selection: omit while unconfigured; use an account ID to select it; use \"\" to explicitly defer configuration. Deferred Actions fail if called; deferred Agent tools are excluded from the callable tool set. Not supported by Triggers.");
6690
6691
  var json = json$1();
6691
6692
  var strings = array(text);
6692
6693
  var port = object({
@@ -6742,7 +6743,7 @@ var capability = union([
6742
6743
  mode: literal("independent"),
6743
6744
  actions: array(strictObject({
6744
6745
  action: text,
6745
- connectionId: text.optional()
6746
+ connectionId: actionConnection.optional()
6746
6747
  }))
6747
6748
  }),
6748
6749
  strictObject({
@@ -6802,7 +6803,7 @@ var managedFields = object({
6802
6803
  object({
6803
6804
  kind: literal("connector"),
6804
6805
  action: text,
6805
- connectionId: text.optional(),
6806
+ connectionId: actionConnection.optional(),
6806
6807
  outputMode: literal("value").optional()
6807
6808
  }),
6808
6809
  object({
@@ -6842,13 +6843,13 @@ var managedFields = object({
6842
6843
  name: text,
6843
6844
  description: text,
6844
6845
  action: text,
6845
- connectionId: text.optional(),
6846
+ connectionId: actionConnection.optional(),
6846
6847
  approval: boolean(),
6847
6848
  inputs: array(input.extend({ source: agentInput }))
6848
6849
  })),
6849
6850
  notification: object({
6850
6851
  action: text,
6851
- connectionId: text.optional(),
6852
+ connectionId: actionConnection.optional(),
6852
6853
  inputDefinitions: array(input),
6853
6854
  messageHandle: text,
6854
6855
  inputs: record$1(text, agentValue)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oomol-lab/open-flow",
3
- "version": "0.1.0-beta.66",
3
+ "version": "0.1.0-beta.68",
4
4
  "description": "TypeScript contracts and Browser runtime for Open Flow.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -14,6 +14,15 @@ Consult the references relevant to the task:
14
14
  - [n8n conversion](references/flow-n8n-conversion.md): represent collections,
15
15
  branches, provider operations and state while preserving source behavior.
16
16
 
17
+ Keep generated Flow and node names short enough to scan on the canvas. Aim for
18
+ 2–4 English words or 4–8 Chinese characters, using the user's language unless
19
+ the workflow has an established naming language. Name a Flow by its main purpose
20
+ and a node by its action and object, such as `AI Trend Digest`, `Fetch trends`,
21
+ `Verify sources`, or `发布文章`. Keep only qualifiers needed to distinguish similar
22
+ nodes. Put detailed behavior in descriptions; avoid sentences, repeated workflow
23
+ context, and obscure abbreviations. Preserve names explicitly supplied by the
24
+ user, and do not rename unrelated existing nodes.
25
+
17
26
  <!-- agentic:if localDevelopment -->
18
27
 
19
28
  Run commands from this repository's root. The development CLI connects to the
@@ -289,6 +289,8 @@ unavailable action and an action lacking an active Connection are different
289
289
  problems. Actions marked `authenticated: false` need no account. Connection
290
290
  selection rules come from the selected node contract.
291
291
 
292
+ For Connector Tasks, independent Code Actions, Agent tools and notifications, an omitted `connectionId` means unconfigured; `connectionId: ""` explicitly defers account configuration. Deferred selections pass account readiness checks but fail with `connector.connection-required` if invoked. Deferred Agent tools are excluded from the callable tool set. Provider Triggers still require a nonempty account ID. Public edits and portable exports preserve the empty string; clear the field to return to the unconfigured state.
293
+
292
294
  | Capability | Relevant schema and configuration |
293
295
  | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
294
296
  | Provider read or write | `connector`: discovered `action`, optional `connectionId`, named input bindings. |