@ixo/editor 6.16.1 → 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.
@@ -1185,7 +1185,7 @@
1185
1185
  "hasDynamicEvents": true,
1186
1186
  "hasDynamicOutputSchema": true,
1187
1187
  "eligibleForEventTrigger": false,
1188
- "hasCustomInputValidation": false,
1188
+ "hasCustomInputValidation": true,
1189
1189
  "can": "collection/lifecycle",
1190
1190
  "requiredCapability": "flow/block/execute",
1191
1191
  "inputSchema": {
@@ -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-WYIBJ24C.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-SSHQ3OTO.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-WYIBJ24C.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-EWKSBZ62.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",
@@ -7439,6 +7487,21 @@ registerAction({
7439
7487
  intents: { type: "object", description: "create/updateIntents \u2014 intent configuration." }
7440
7488
  }
7441
7489
  },
7490
+ // Mirrors run()'s throw-preamble: `operation` selects the branch, `create`
7491
+ // needs the entity + protocol DIDs, and every other op targets an existing
7492
+ // collection so it needs `collectionId`. Per-op value validity (state enum,
7493
+ // quota vs count, at-least-one-date) stays with run().
7494
+ getMissingInputs: (inputs) => {
7495
+ const operation = String(inputs?.operation || "").trim();
7496
+ if (!operation) return ["operation"];
7497
+ if (operation === "create") {
7498
+ const missing = [];
7499
+ if (!String(inputs?.entity || "").trim()) missing.push("entity");
7500
+ if (!String(inputs?.protocol || "").trim()) missing.push("protocol");
7501
+ return missing;
7502
+ }
7503
+ return String(inputs?.collectionId || "").trim() ? [] : ["collectionId"];
7504
+ },
7442
7505
  run: async (inputs, ctx) => {
7443
7506
  const service = ctx.services.collection;
7444
7507
  if (!service) {
@@ -7656,6 +7719,10 @@ registerAction({
7656
7719
  type: COLLECTION_USERS_ACTION_TYPE,
7657
7720
  can: "collection/users",
7658
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",
7659
7726
  // Dynamic resolvers predate merge-by-default and intentionally control
7660
7727
  // the full vocabulary (e.g. returning [] to hide the static baseline).
7661
7728
  dynamicResolutionMode: "replace",
@@ -7692,6 +7759,16 @@ registerAction({
7692
7759
  members: { type: "array", description: "Resolved members to fan the grant out to when granteeKind is group-members." }
7693
7760
  }
7694
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
+ },
7695
7772
  run: async (inputs, ctx) => {
7696
7773
  const service = ctx.services.collectionUsers;
7697
7774
  if (!service) {
@@ -8154,6 +8231,13 @@ function fieldValues(inputs) {
8154
8231
  function missingRequired(schema, values) {
8155
8232
  return (schema.parameters.required || []).filter((name) => !(values[name] ?? "").trim());
8156
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
+ }
8157
8241
  function coerceToolArgs(schema, values) {
8158
8242
  const out = {};
8159
8243
  for (const [name, prop] of Object.entries(schema.parameters.properties || {})) {
@@ -8237,6 +8321,9 @@ registerAction({
8237
8321
  requiredCapability: "flow/block/execute",
8238
8322
  // Can be wired to another block's event (e.g. form submitted → send email).
8239
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),
8240
8327
  outputSchema: GMAIL_SEND_OUTPUT_SCHEMA,
8241
8328
  events: [
8242
8329
  {
@@ -8314,6 +8401,9 @@ registerAction({
8314
8401
  requiredCapability: "flow/block/execute",
8315
8402
  // Can be wired to another block's event (e.g. form submitted → send email).
8316
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),
8317
8407
  outputSchema: OUTLOOK_SEND_OUTPUT_SCHEMA,
8318
8408
  events: [
8319
8409
  {
@@ -8388,6 +8478,9 @@ registerAction({
8388
8478
  requiredCapability: "flow/block/execute",
8389
8479
  // Can be wired to another block's event (e.g. form submitted → post message).
8390
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),
8391
8484
  outputSchema: SLACK_SEND_OUTPUT_SCHEMA,
8392
8485
  events: [
8393
8486
  {
@@ -8464,6 +8557,9 @@ registerAction({
8464
8557
  defaultRequiresConfirmation: true,
8465
8558
  requiredCapability: "flow/block/execute",
8466
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),
8467
8563
  outputSchema: GOOGLECALENDAR_CREATE_OUTPUT_SCHEMA,
8468
8564
  events: [
8469
8565
  {
@@ -15206,4 +15302,4 @@ export {
15206
15302
  executeQueuedFlowAgentCoreCommands,
15207
15303
  FlowAgentService
15208
15304
  };
15209
- //# sourceMappingURL=chunk-WYIBJ24C.js.map
15305
+ //# sourceMappingURL=chunk-N7J2JFCX.js.map