@ixo/editor 6.17.0 → 6.18.0

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.
@@ -1377,7 +1377,7 @@
1377
1377
  "hasDynamicEvents": false,
1378
1378
  "hasDynamicOutputSchema": true,
1379
1379
  "eligibleForEventTrigger": true,
1380
- "hasCustomInputValidation": false,
1380
+ "hasCustomInputValidation": true,
1381
1381
  "can": "collection/users",
1382
1382
  "requiredCapability": "flow/block/execute",
1383
1383
  "inputSchema": {
@@ -1836,7 +1836,7 @@
1836
1836
  "hasDynamicEvents": false,
1837
1837
  "hasDynamicOutputSchema": false,
1838
1838
  "eligibleForEventTrigger": true,
1839
- "hasCustomInputValidation": false,
1839
+ "hasCustomInputValidation": true,
1840
1840
  "can": "email/send",
1841
1841
  "requiredCapability": "email/send",
1842
1842
  "inputSchema": {
@@ -2184,7 +2184,7 @@
2184
2184
  "hasDynamicEvents": false,
2185
2185
  "hasDynamicOutputSchema": false,
2186
2186
  "eligibleForEventTrigger": true,
2187
- "hasCustomInputValidation": false,
2187
+ "hasCustomInputValidation": true,
2188
2188
  "can": "gmail.email/send",
2189
2189
  "requiredCapability": "flow/block/execute",
2190
2190
  "outputSchema": [
@@ -2240,7 +2240,7 @@
2240
2240
  "hasDynamicEvents": false,
2241
2241
  "hasDynamicOutputSchema": false,
2242
2242
  "eligibleForEventTrigger": true,
2243
- "hasCustomInputValidation": false,
2243
+ "hasCustomInputValidation": true,
2244
2244
  "can": "googlecalendar.event/create",
2245
2245
  "requiredCapability": "flow/block/execute",
2246
2246
  "outputSchema": [
@@ -3532,7 +3532,7 @@
3532
3532
  "hasDynamicEvents": false,
3533
3533
  "hasDynamicOutputSchema": false,
3534
3534
  "eligibleForEventTrigger": false,
3535
- "hasCustomInputValidation": false,
3535
+ "hasCustomInputValidation": true,
3536
3536
  "can": "governance/member-proposal",
3537
3537
  "requiredCapability": "flow/block/execute",
3538
3538
  "outputSchema": [
@@ -3828,7 +3828,7 @@
3828
3828
  "hasDynamicEvents": false,
3829
3829
  "hasDynamicOutputSchema": false,
3830
3830
  "eligibleForEventTrigger": false,
3831
- "hasCustomInputValidation": false,
3831
+ "hasCustomInputValidation": true,
3832
3832
  "can": "governance/settings-proposal",
3833
3833
  "requiredCapability": "flow/block/execute",
3834
3834
  "outputSchema": [
@@ -4284,7 +4284,7 @@
4284
4284
  "hasDynamicEvents": false,
4285
4285
  "hasDynamicOutputSchema": false,
4286
4286
  "eligibleForEventTrigger": false,
4287
- "hasCustomInputValidation": false,
4287
+ "hasCustomInputValidation": true,
4288
4288
  "can": "governance.transaction/send-funds",
4289
4289
  "requiredCapability": "flow/block/execute",
4290
4290
  "outputSchema": [
@@ -4570,7 +4570,7 @@
4570
4570
  "hasDynamicEvents": false,
4571
4571
  "hasDynamicOutputSchema": false,
4572
4572
  "eligibleForEventTrigger": true,
4573
- "hasCustomInputValidation": false,
4573
+ "hasCustomInputValidation": true,
4574
4574
  "can": "http/request",
4575
4575
  "inputSchema": {
4576
4576
  "type": "object",
@@ -6013,7 +6013,7 @@
6013
6013
  "hasDynamicEvents": false,
6014
6014
  "hasDynamicOutputSchema": false,
6015
6015
  "eligibleForEventTrigger": true,
6016
- "hasCustomInputValidation": false,
6016
+ "hasCustomInputValidation": true,
6017
6017
  "can": "outlook.email/send",
6018
6018
  "requiredCapability": "flow/block/execute",
6019
6019
  "outputSchema": [
@@ -6796,7 +6796,7 @@
6796
6796
  "hasDynamicEvents": false,
6797
6797
  "hasDynamicOutputSchema": false,
6798
6798
  "eligibleForEventTrigger": true,
6799
- "hasCustomInputValidation": false,
6799
+ "hasCustomInputValidation": true,
6800
6800
  "can": "slack.message/send",
6801
6801
  "requiredCapability": "flow/block/execute",
6802
6802
  "outputSchema": [
@@ -10,7 +10,7 @@ import {
10
10
  replaceBlockInFragment,
11
11
  swapBlocksInFragment,
12
12
  writeCompiledBlocksToFragment
13
- } from "./chunk-7GS4HTDO.js";
13
+ } from "./chunk-N7J2JFCX.js";
14
14
 
15
15
  // src/core/lib/flowCompiler/authoring.ts
16
16
  import * as Y from "yjs";
@@ -257,4 +257,4 @@ export {
257
257
  resetStepRuntime,
258
258
  setFormAnswers
259
259
  };
260
- //# sourceMappingURL=chunk-WMWHTVQF.js.map
260
+ //# sourceMappingURL=chunk-KIRDKAO3.js.map
@@ -77,7 +77,7 @@ import {
77
77
  verifyCompletion,
78
78
  warnOnce,
79
79
  writeRunRecordAndReconcile
80
- } from "./chunk-7GS4HTDO.js";
80
+ } from "./chunk-N7J2JFCX.js";
81
81
 
82
82
  // src/mantine/hooks/usePanel.ts
83
83
  import { useCallback, useMemo, useEffect, useRef } from "react";
@@ -51530,4 +51530,4 @@ export {
51530
51530
  ixoGraphQLClient,
51531
51531
  getEntity
51532
51532
  };
51533
- //# sourceMappingURL=chunk-KRBHLUGP.js.map
51533
+ //# sourceMappingURL=chunk-LMNQ5HT6.js.map
@@ -718,6 +718,8 @@ var CAN_TO_TYPE = {
718
718
  "bid/evaluate": "qi/bid.evaluate",
719
719
  "claim/submit": "qi/claim.submit",
720
720
  "claim/evaluate": "qi/claim.evaluate",
721
+ "collection/lifecycle": "qi/collection.lifecycle",
722
+ "collection/users": "qi/collection.users",
721
723
  "email/send": "qi/email.send",
722
724
  "notification/push": "qi/notification.push",
723
725
  "matrix/dm": "qi/matrix.dm",
@@ -1681,6 +1683,15 @@ registerAction({
1681
1683
  { path: "operation", displayName: "Operation", type: "string", description: "add | remove | update-weight" },
1682
1684
  { path: "createdAt", displayName: "Created At", type: "string", description: "ISO timestamp of proposal creation" }
1683
1685
  ],
1686
+ // Mirrors run()'s throw-preamble (there is no inputSchema to declare
1687
+ // requiredness on): coreAddress, operation and a non-empty members list.
1688
+ getMissingInputs: (inputs) => {
1689
+ const missing = [];
1690
+ if (!String(inputs.coreAddress || "").trim()) missing.push("coreAddress");
1691
+ if (!String(inputs.operation || "").trim()) missing.push("operation");
1692
+ if (!Array.isArray(inputs.members) || inputs.members.length === 0) missing.push("members");
1693
+ return missing;
1694
+ },
1684
1695
  run: async (inputs, ctx) => {
1685
1696
  const handlers = ctx.handlers;
1686
1697
  if (!handlers) {
@@ -1770,6 +1781,17 @@ registerAction({
1770
1781
  { path: "coreAddress", displayName: "Core Address", type: "string", description: "The DAO core contract address" },
1771
1782
  { path: "createdAt", displayName: "Created At", type: "string", description: "ISO timestamp of proposal creation" }
1772
1783
  ],
1784
+ // Mirrors run()'s throw-preamble (there is no inputSchema to declare
1785
+ // requiredness on): coreAddress and the three numeric voting settings.
1786
+ getMissingInputs: (inputs) => {
1787
+ const missing = [];
1788
+ if (!String(inputs.coreAddress || "").trim()) missing.push("coreAddress");
1789
+ for (const name of ["votingPeriodHours", "quorumPercent", "thresholdPercent"]) {
1790
+ const value = inputs[name];
1791
+ if (value === void 0 || value === null || String(value).trim() === "") missing.push(name);
1792
+ }
1793
+ return missing;
1794
+ },
1773
1795
  run: async (inputs, ctx) => {
1774
1796
  const handlers = ctx.handlers;
1775
1797
  if (!handlers) {
@@ -1964,6 +1986,17 @@ registerAction({
1964
1986
  { path: "recipient", displayName: "Recipient", type: "string", description: "Destination address of the spend" },
1965
1987
  { path: "createdAt", displayName: "Created At", type: "string", description: "ISO timestamp of proposal creation" }
1966
1988
  ],
1989
+ // Mirrors run()'s throw-preamble (there is no inputSchema to declare
1990
+ // requiredness on): coreAddress, recipient, denom and amount.
1991
+ getMissingInputs: (inputs) => {
1992
+ const missing = [];
1993
+ for (const name of ["coreAddress", "recipient", "denom"]) {
1994
+ if (!String(inputs[name] || "").trim()) missing.push(name);
1995
+ }
1996
+ const amount = inputs.amount;
1997
+ if (amount === void 0 || amount === null || String(amount).trim() === "") missing.push("amount");
1998
+ return missing;
1999
+ },
1967
2000
  run: async (inputs, ctx) => {
1968
2001
  const handlers = ctx.handlers;
1969
2002
  if (!handlers) {
@@ -2883,6 +2916,9 @@ registerAction({
2883
2916
  body: { type: "string", description: "Request body; sent for non-GET methods. Accepts a string or an object (serialized to JSON)." }
2884
2917
  }
2885
2918
  },
2919
+ // run() accepts `endpoint` OR `url` — mirror the alias the schema's
2920
+ // required array can't express.
2921
+ getMissingInputs: (inputs) => String(inputs.endpoint || inputs.url || "").trim() ? [] : ["endpoint"],
2886
2922
  run: async (inputs, ctx) => {
2887
2923
  const endpoint = inputs.endpoint ?? inputs.url;
2888
2924
  const url = typeof endpoint === "string" ? endpoint : "";
@@ -2953,6 +2989,14 @@ registerAction({
2953
2989
  { path: "messageId", displayName: "Message ID", type: "string", description: "The unique ID of the sent email" },
2954
2990
  { path: "sentAt", displayName: "Sent At", type: "string", description: "Timestamp when the email was sent" }
2955
2991
  ],
2992
+ // run() accepts `template` OR `templateName` for the template — the
2993
+ // schema's required array can't express the alias, so mirror the OR here.
2994
+ getMissingInputs: (inputs) => {
2995
+ const missing = [];
2996
+ if (!String(inputs.to || "").trim()) missing.push("to");
2997
+ if (!String(inputs.template || "").trim() && !String(inputs.templateName || "").trim()) missing.push("templateName");
2998
+ return missing;
2999
+ },
2956
3000
  run: async (inputs, ctx) => {
2957
3001
  if (!ctx.services.email) {
2958
3002
  throw new Error("Email service not configured");
@@ -7409,6 +7453,10 @@ registerAction({
7409
7453
  type: COLLECTION_LIFECYCLE_ACTION_TYPE,
7410
7454
  can: "collection/lifecycle",
7411
7455
  sideEffect: true,
7456
+ // Chain transaction signed as the entity admin — only the human in the
7457
+ // Portal FlowDetail holds that authority. Orchestrators gather inputs and
7458
+ // hand off; they must not run or delegate this.
7459
+ executionOwner: "human",
7412
7460
  // Dynamic resolvers predate merge-by-default and intentionally control
7413
7461
  // the full vocabulary (e.g. returning [] to hide the static baseline).
7414
7462
  dynamicResolutionMode: "replace",
@@ -7671,6 +7719,10 @@ registerAction({
7671
7719
  type: COLLECTION_USERS_ACTION_TYPE,
7672
7720
  can: "collection/users",
7673
7721
  sideEffect: true,
7722
+ // Authz grants signed by the entity admin — only the human in the Portal
7723
+ // FlowDetail holds that authority. Orchestrators gather inputs and hand
7724
+ // off; they must not run or delegate this.
7725
+ executionOwner: "human",
7674
7726
  // Dynamic resolvers predate merge-by-default and intentionally control
7675
7727
  // the full vocabulary (e.g. returning [] to hide the static baseline).
7676
7728
  dynamicResolutionMode: "replace",
@@ -7707,6 +7759,16 @@ registerAction({
7707
7759
  members: { type: "array", description: "Resolved members to fan the grant out to when granteeKind is group-members." }
7708
7760
  }
7709
7761
  },
7762
+ // Only the decision inputs are human-askable: `operation` selects the
7763
+ // branch and `collectionId` targets the collection (often filled by the
7764
+ // `created` event of an upstream collection.lifecycle block). adminAddress,
7765
+ // role and grantee fields are resolved by the host/FlowDetail, so a blank
7766
+ // there is not something to escalate to a human for.
7767
+ getMissingInputs: (inputs) => {
7768
+ const operation = String(inputs?.operation || "").trim();
7769
+ if (!operation) return ["operation"];
7770
+ return String(inputs?.collectionId || "").trim() ? [] : ["collectionId"];
7771
+ },
7710
7772
  run: async (inputs, ctx) => {
7711
7773
  const service = ctx.services.collectionUsers;
7712
7774
  if (!service) {
@@ -8169,6 +8231,13 @@ function fieldValues(inputs) {
8169
8231
  function missingRequired(schema, values) {
8170
8232
  return (schema.parameters.required || []).filter((name) => !(values[name] ?? "").trim());
8171
8233
  }
8234
+ function delegatedToolMissingInputs(schema, rawInputs) {
8235
+ const parsed = parseDelegatedToolInputs(rawInputs);
8236
+ const missing = [];
8237
+ if (!parsed.connection?.bindingId) missing.push("connection");
8238
+ missing.push(...missingRequired(schema, fieldValues(parsed)));
8239
+ return missing;
8240
+ }
8172
8241
  function coerceToolArgs(schema, values) {
8173
8242
  const out = {};
8174
8243
  for (const [name, prop] of Object.entries(schema.parameters.properties || {})) {
@@ -8252,6 +8321,9 @@ registerAction({
8252
8321
  requiredCapability: "flow/block/execute",
8253
8322
  // Can be wired to another block's event (e.g. form submitted → send email).
8254
8323
  eligibleForEventTrigger: true,
8324
+ // Mirrors executeDelegatedTool's gates: the bound connection plus the
8325
+ // tool schema's required fields, so orchestrators ask before run() throws.
8326
+ getMissingInputs: (inputs) => delegatedToolMissingInputs(GMAIL_SEND_SCHEMA, inputs),
8255
8327
  outputSchema: GMAIL_SEND_OUTPUT_SCHEMA,
8256
8328
  events: [
8257
8329
  {
@@ -8329,6 +8401,9 @@ registerAction({
8329
8401
  requiredCapability: "flow/block/execute",
8330
8402
  // Can be wired to another block's event (e.g. form submitted → send email).
8331
8403
  eligibleForEventTrigger: true,
8404
+ // Mirrors executeDelegatedTool's gates: the bound connection plus the
8405
+ // tool schema's required fields, so orchestrators ask before run() throws.
8406
+ getMissingInputs: (inputs) => delegatedToolMissingInputs(OUTLOOK_SEND_SCHEMA, inputs),
8332
8407
  outputSchema: OUTLOOK_SEND_OUTPUT_SCHEMA,
8333
8408
  events: [
8334
8409
  {
@@ -8403,6 +8478,9 @@ registerAction({
8403
8478
  requiredCapability: "flow/block/execute",
8404
8479
  // Can be wired to another block's event (e.g. form submitted → post message).
8405
8480
  eligibleForEventTrigger: true,
8481
+ // Mirrors executeDelegatedTool's gates: the bound connection plus the
8482
+ // tool schema's required fields, so orchestrators ask before run() throws.
8483
+ getMissingInputs: (inputs) => delegatedToolMissingInputs(SLACK_SEND_SCHEMA, inputs),
8406
8484
  outputSchema: SLACK_SEND_OUTPUT_SCHEMA,
8407
8485
  events: [
8408
8486
  {
@@ -8479,6 +8557,9 @@ registerAction({
8479
8557
  defaultRequiresConfirmation: true,
8480
8558
  requiredCapability: "flow/block/execute",
8481
8559
  eligibleForEventTrigger: true,
8560
+ // Mirrors executeDelegatedTool's gates: the bound connection plus the
8561
+ // tool schema's required fields, so orchestrators ask before run() throws.
8562
+ getMissingInputs: (inputs) => delegatedToolMissingInputs(GOOGLECALENDAR_CREATE_SCHEMA, inputs),
8482
8563
  outputSchema: GOOGLECALENDAR_CREATE_OUTPUT_SCHEMA,
8483
8564
  events: [
8484
8565
  {
@@ -15221,4 +15302,4 @@ export {
15221
15302
  executeQueuedFlowAgentCoreCommands,
15222
15303
  FlowAgentService
15223
15304
  };
15224
- //# sourceMappingURL=chunk-7GS4HTDO.js.map
15305
+ //# sourceMappingURL=chunk-N7J2JFCX.js.map