@synergenius/flow-weaver 0.32.2 → 0.33.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.
package/README.md CHANGED
@@ -58,6 +58,8 @@ Breaking changes may still occur between minor versions during beta. Pin your ve
58
58
 
59
59
  **Extensible pack system:** Node types, deploy targets, CLI commands, and MCP tools are contributed by npm packages. Install community packs or build and publish your own.
60
60
 
61
+ **OpenClaw integration:** Use Flow Weaver inside [OpenClaw](https://openclaw.ai) with the native plugin. Build deterministic workflows through conversation. [Plugin](https://clawhub.ai/plugins/%40synergenius%2Fflow-weaver-openclaw) | [npm](https://www.npmjs.com/package/@synergenius/flow-weaver-openclaw) 🦞
62
+
61
63
  ## Quick Start
62
64
 
63
65
  ```bash
@@ -21,6 +21,8 @@ export interface CompileOptions {
21
21
  write?: boolean;
22
22
  /** Whether to save AST alongside the generated file (default: false) */
23
23
  saveAST?: boolean;
24
+ /** Validation mode: 'draft' suppresses STUB_NODE errors */
25
+ validationMode?: 'strict' | 'draft';
24
26
  }
25
27
  /**
26
28
  * Result of workflow compilation
@@ -38,7 +38,8 @@ export async function compileWorkflow(filePath, options = {}) {
38
38
  }
39
39
  // Validate before generating
40
40
  const { validateWorkflow } = await import('./validate.js');
41
- const validationResult = validateWorkflow(parseResult.ast);
41
+ const validationMode = options.validationMode;
42
+ const validationResult = validateWorkflow(parseResult.ast, validationMode ? { mode: validationMode } : undefined);
42
43
  if (validationResult.errors.length > 0) {
43
44
  const errorMessages = validationResult.errors.map((e) => typeof e === 'string' ? e : e.message);
44
45
  throw new Error(`Validation errors:\n${errorMessages.join('\n')}`);
@@ -5,8 +5,10 @@
5
5
  *
6
6
  * Syntax:
7
7
  * @path Start -> validator:ok -> classifier -> urgencyRouter:fail -> escalate -> Exit
8
+ * @path Start -> A -> C -> Exit, Start -> B -> C
8
9
  *
9
- * Steps separated by ->, each is NodeName optionally followed by :ok or :fail
10
+ * Steps separated by ->, each is NodeName optionally followed by :ok or :fail.
11
+ * Multiple paths can be comma-separated within a single @path tag.
10
12
  */
11
13
  export interface PathStep {
12
14
  node: string;
@@ -17,10 +19,12 @@ export interface PathParseResult {
17
19
  steps: PathStep[];
18
20
  }
19
21
  /**
20
- * Parse a @path line and return structured result.
22
+ * Parse a @path line and return structured results.
23
+ * Supports comma-separated parallel paths in a single @path tag:
24
+ * @path Start -> A -> C -> Exit, Start -> B -> C
21
25
  * Returns null if the line is not a valid @path declaration.
22
26
  */
23
- export declare function parsePathLine(input: string, warnings: string[]): PathParseResult | null;
27
+ export declare function parsePathLine(input: string, warnings: string[]): PathParseResult[] | null;
24
28
  /**
25
29
  * Get serialized grammar for documentation/diagram generation.
26
30
  */
@@ -5,11 +5,13 @@
5
5
  *
6
6
  * Syntax:
7
7
  * @path Start -> validator:ok -> classifier -> urgencyRouter:fail -> escalate -> Exit
8
+ * @path Start -> A -> C -> Exit, Start -> B -> C
8
9
  *
9
- * Steps separated by ->, each is NodeName optionally followed by :ok or :fail
10
+ * Steps separated by ->, each is NodeName optionally followed by :ok or :fail.
11
+ * Multiple paths can be comma-separated within a single @path tag.
10
12
  */
11
13
  import { CstParser } from 'chevrotain';
12
- import { JSDocLexer, PathTag, Identifier, Arrow, Colon, allTokens, } from './tokens.js';
14
+ import { JSDocLexer, PathTag, Identifier, Arrow, Colon, Comma, allTokens, } from './tokens.js';
13
15
  // =============================================================================
14
16
  // Parser Definition
15
17
  // =============================================================================
@@ -18,9 +20,17 @@ class PathParser extends CstParser {
18
20
  super(allTokens);
19
21
  this.performSelfAnalysis();
20
22
  }
21
- // Entry rule: @path pathStep (Arrow pathStep)+
23
+ // Entry rule: @path pathSequence (Comma pathSequence)*
22
24
  pathLine = this.RULE('pathLine', () => {
23
25
  this.CONSUME(PathTag);
26
+ this.SUBRULE(this.pathSequence, { LABEL: 'firstSequence' });
27
+ this.MANY(() => {
28
+ this.CONSUME(Comma);
29
+ this.SUBRULE2(this.pathSequence, { LABEL: 'nextSequence' });
30
+ });
31
+ });
32
+ // pathSequence: pathStep (Arrow pathStep)+
33
+ pathSequence = this.RULE('pathSequence', () => {
24
34
  this.SUBRULE(this.pathStep, { LABEL: 'firstStep' });
25
35
  this.AT_LEAST_ONE(() => {
26
36
  this.CONSUME(Arrow);
@@ -54,6 +64,16 @@ class PathVisitor extends BaseVisitor {
54
64
  this.warnings = warnings;
55
65
  }
56
66
  pathLine(ctx) {
67
+ const results = [];
68
+ results.push(this.pathSequence(ctx.firstSequence[0].children));
69
+ if (ctx.nextSequence) {
70
+ for (const seqCst of ctx.nextSequence) {
71
+ results.push(this.pathSequence(seqCst.children));
72
+ }
73
+ }
74
+ return results;
75
+ }
76
+ pathSequence(ctx) {
57
77
  const steps = [];
58
78
  steps.push(this.pathStep(ctx.firstStep[0].children));
59
79
  for (const stepCst of ctx.nextStep) {
@@ -81,7 +101,9 @@ const visitorInstance = new PathVisitor();
81
101
  // Public API
82
102
  // =============================================================================
83
103
  /**
84
- * Parse a @path line and return structured result.
104
+ * Parse a @path line and return structured results.
105
+ * Supports comma-separated parallel paths in a single @path tag:
106
+ * @path Start -> A -> C -> Exit, Start -> B -> C
85
107
  * Returns null if the line is not a valid @path declaration.
86
108
  */
87
109
  export function parsePathLine(input, warnings) {
@@ -5987,7 +5987,7 @@ var VERSION;
5987
5987
  var init_generated_version = __esm({
5988
5988
  "src/generated-version.ts"() {
5989
5989
  "use strict";
5990
- VERSION = "0.32.2";
5990
+ VERSION = "0.33.0";
5991
5991
  }
5992
5992
  });
5993
5993
 
@@ -6084,6 +6084,8 @@ var init_constants = __esm({
6084
6084
  "input",
6085
6085
  "output",
6086
6086
  "step",
6087
+ // Async is auto-detected from the TS signature but accepted as an explicit annotation
6088
+ "async",
6087
6089
  // Deployment annotations
6088
6090
  "deploy"
6089
6091
  ]);
@@ -6111,6 +6113,8 @@ var init_constants = __esm({
6111
6113
  "param",
6112
6114
  "return",
6113
6115
  "returns",
6116
+ // Async is auto-detected from the TS signature but accepted as an explicit annotation
6117
+ "async",
6114
6118
  // Deployment annotations
6115
6119
  "deploy"
6116
6120
  ]);
@@ -25394,9 +25398,17 @@ var init_path_parser = __esm({
25394
25398
  super(allTokens);
25395
25399
  this.performSelfAnalysis();
25396
25400
  }
25397
- // Entry rule: @path pathStep (Arrow pathStep)+
25401
+ // Entry rule: @path pathSequence (Comma pathSequence)*
25398
25402
  pathLine = this.RULE("pathLine", () => {
25399
25403
  this.CONSUME(PathTag);
25404
+ this.SUBRULE(this.pathSequence, { LABEL: "firstSequence" });
25405
+ this.MANY(() => {
25406
+ this.CONSUME(Comma);
25407
+ this.SUBRULE2(this.pathSequence, { LABEL: "nextSequence" });
25408
+ });
25409
+ });
25410
+ // pathSequence: pathStep (Arrow pathStep)+
25411
+ pathSequence = this.RULE("pathSequence", () => {
25400
25412
  this.SUBRULE(this.pathStep, { LABEL: "firstStep" });
25401
25413
  this.AT_LEAST_ONE(() => {
25402
25414
  this.CONSUME(Arrow);
@@ -25424,6 +25436,16 @@ var init_path_parser = __esm({
25424
25436
  this.warnings = warnings;
25425
25437
  }
25426
25438
  pathLine(ctx) {
25439
+ const results = [];
25440
+ results.push(this.pathSequence(ctx.firstSequence[0].children));
25441
+ if (ctx.nextSequence) {
25442
+ for (const seqCst of ctx.nextSequence) {
25443
+ results.push(this.pathSequence(seqCst.children));
25444
+ }
25445
+ }
25446
+ return results;
25447
+ }
25448
+ pathSequence(ctx) {
25427
25449
  const steps = [];
25428
25450
  steps.push(this.pathStep(ctx.firstStep[0].children));
25429
25451
  for (const stepCst of ctx.nextStep) {
@@ -26971,15 +26993,17 @@ var init_jsdoc_parser = __esm({
26971
26993
  */
26972
26994
  parsePathTag(tag, config2, warnings) {
26973
26995
  const comment = tag.getCommentText() || "";
26974
- const result = parsePathLine(`@path ${comment}`, warnings);
26975
- if (!result) {
26996
+ const results = parsePathLine(`@path ${comment}`, warnings);
26997
+ if (!results) {
26976
26998
  warnings.push(`Invalid @path tag format: ${comment}`);
26977
26999
  return;
26978
27000
  }
26979
27001
  config2.paths = config2.paths || [];
26980
- config2.paths.push({
26981
- steps: result.steps
26982
- });
27002
+ for (const result of results) {
27003
+ config2.paths.push({
27004
+ steps: result.steps
27005
+ });
27006
+ }
26983
27007
  }
26984
27008
  parseFanOutTag(tag, config2, warnings) {
26985
27009
  const comment = tag.getCommentText() || "";
@@ -30711,7 +30735,58 @@ var init_theme = __esm({
30711
30735
  backup: "M260.72-151.87q-94.37 0-161.25-65.15T32.59-376.28q0-80.39 47.36-143.67 47.35-63.27 125.03-80.75 26.43-92.95 102.63-150.19Q383.8-808.13 480-808.13q118.2 0 201.25 81.74t85.68 199.69q69.72 10.63 115.1 63.81 45.38 53.17 45.38 123.61 0 78.09-55.01 132.75t-133.12 54.66H529.09q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-191.41l-65.68 64.15-58.63-58.39L480-594.98l166.22 166.46-58.63 58.39-65.68-64.15v191.41h217.37q40.57 0 68.85-28.28 28.28-28.28 28.28-68.85 0-40.57-28.28-68.85-28.28-28.28-68.85-28.28h-62.87v-83.59q0-81.51-57.45-138.96T480-717.13q-82.04 0-139.23 58.74-57.18 58.74-57.18 141.26h-22.87q-56.81 0-96.97 40.16T123.59-380q0 56.8 40.16 96.97 40.16 40.16 96.97 40.16h97.37v91h-97.37ZM480-434.5Z",
30712
30736
  cloudDone: "m412.8-279.76 228.63-228.63-60.39-60.39-169 169-84.24-84.24-59.39 59.63L412.8-279.76ZM260.72-151.87q-94.35 0-161.24-65.15-66.89-65.15-66.89-159.26 0-80.39 47.36-143.67 47.35-63.27 125.03-80.75 26.43-92.95 102.63-150.19Q383.8-808.13 480-808.13q118.2 0 201.25 81.74t85.68 199.69q69.72 10.63 115.1 63.81 45.38 53.17 45.38 123.61 0 78.11-54.65 132.76-54.65 54.65-132.76 54.65H260.72Zm0-91h478.56q40.57 0 68.85-28.28 28.28-28.28 28.28-68.85 0-40.57-28.28-68.85-28.28-28.28-68.85-28.28h-62.87v-83.59q0-81.56-57.42-138.99-57.42-57.42-138.99-57.42-82.04 0-139.23 58.74-57.18 58.74-57.18 141.26h-22.87q-56.81 0-96.97 40.16-40.16 40.17-40.16 96.97t40.16 96.97q40.16 40.16 96.97 40.16ZM480-480Z",
30713
30737
  lock: "M242.87-72.59q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73h33.54v-73.06q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87Zm0-91h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM367.41-648.85h225.18v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26v73.06ZM242.87-163.59v-394.26 394.26Z",
30714
- lockOpen: "M242.87-648.85h349.72v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26h-91q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73Zm0 485.26h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM242.87-163.59v-394.26 394.26Z"
30738
+ lockOpen: "M242.87-648.85h349.72v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26h-91q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73Zm0 485.26h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM242.87-163.59v-394.26 394.26Z",
30739
+ // ---- Platform catalog sync (icons available in the platform's node icon picker) ----
30740
+ addAuthorization: "M480-73.78q-140.58-32.67-233.28-158.97-92.7-126.29-92.7-289.29v-243.14L480-887.22l326.22 122.15v277.66q-16.15-8.92-34-15.4-17.85-6.47-34.37-8.67v-206.05L480-812.61l-257.85 95v195.51q0 76.58 24.62 140.22t62.5 111.42q37.88 47.79 83.16 79.07 45.29 31.28 86.61 44.56 6.24 14.87 19.92 32.15 13.67 17.27 24.78 26.22-10.44 5.72-21.87 8.58-11.44 2.86-21.87 6.1ZM692.5-80Q615-80 560-135.5T505-267q0-78.43 54.99-133.72Q614.98-456 693-456q77 0 132.5 55.28Q881-345.43 881-267q0 76-55.5 131.5T692.5-80ZM480-479.72Zm195.37 318.76h38.26v-86.41h86.41v-38.26h-86.41v-86.41h-38.26v86.41h-86.41v38.26h86.41v86.41Z",
30741
+ alarm: "M479-76.02q-75.2 0-141.77-28.48-66.58-28.48-116.03-77.82-49.46-49.33-78.32-115.91-28.86-66.57-28.86-142.5T142.88-583q28.86-66.35 78.32-116.18 49.45-49.84 116.03-78.44 66.57-28.6 141.77-28.6 75.2 0 141.77 28.6 66.58 28.6 116.41 78.44 49.84 49.83 78.44 116.18 28.6 66.34 28.6 142.27t-28.6 142.5q-28.6 66.58-78.44 115.97-49.84 49.4-116.41 77.82Q554.2-76.02 479-76.02ZM479-439Zm119.57 162.43 44.39-44.39-129.53-129.52V-640h-62.86v215.43l148 148Zm-387.2-598.08 44.15 44.15L86.5-667.48l-43.91-44.15 168.78-163.02Zm535.26 0 169.02 163.02-44.15 44.15L702.48-830.5l44.15-44.15ZM479-144.15q124.04 0 210.45-86.4 86.4-86.41 86.4-210.45 0-124.04-86.4-210.45-86.41-86.4-210.45-86.4-124.04 0-210.45 86.4-86.4 86.41-86.4 210.45 0 124.04 86.4 210.45 86.41 86.4 210.45 86.4Z",
30742
+ allInclusive: "M211.89-255.93q-91.56 0-153.76-66.7-62.2-66.7-62.2-159.37 0-91.67 62.7-156.87t153.26-65.2q36.72 0 70.96 12.24 34.24 12.23 60.78 37.72l90.85 87.61-48.22 47.5-85.81-83.87q-17.51-17.52-40.46-25.29t-47.98-7.77q-62.45 0-105.19 45.27-42.75 45.27-42.75 108.75 0 64.48 42.24 111.16 42.25 46.68 105.69 46.68 24.28 0 47.12-7.76 22.83-7.77 41.25-24.28l316-298q26.54-25.49 60.78-37.72 34.24-12.24 69.96-12.24 91.56 0 154.26 65.2 62.7 65.2 62.7 156.87 0 92.67-62.7 159.37t-154.26 66.7q-35.72 0-70.46-11.74-34.74-11.73-60.28-37.22l-88.61-87.61 47.98-47.5 83.88 83.89q16.53 16.52 39.81 24.28 23.29 7.76 47.57 7.76 63.44 0 106.19-46.72 42.74-46.72 42.74-111.13 0-63.41-43.24-108.71-43.25-45.3-105.69-45.3-24.28 0-47.12 8.76-22.83 8.77-40.25 25.28l-316 298q-26.54 24.49-61.28 36.22-34.74 11.74-70.46 11.74Z",
30743
+ analytics: "M285.2-277h60v-205h-60v205Zm329.84 0h60v-420h-60v420ZM450-277h60v-118h-60v118Zm0-205h60v-60h-60v60ZM182.15-114.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-595.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h595.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v595.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-595.7Zm0-68.13h595.7v-595.7h-595.7v595.7Zm0-595.7v595.7-595.7Z",
30744
+ assignment: "M182.15-114.02q-28.1 0-48.12-20.01-20.01-20.02-20.01-48.12v-595.7q0-28.2 20.01-48.28 20.02-20.09 48.12-20.09h199.02q6.44-35 34.16-57.5 27.71-22.5 64.67-22.5t64.67 22.5q27.72 22.5 34.16 57.5h199.02q28.2 0 48.28 20.09 20.09 20.08 20.09 48.28v595.7q0 28.1-20.09 48.12-20.08 20.01-48.28 20.01h-595.7Zm0-68.13h595.7v-595.7h-595.7v595.7Zm100-100h270.37v-60H282.15v60Zm0-167.85h395.7v-60h-395.7v60Zm0-167.85h395.7v-60h-395.7v60ZM480-795.57q14.83 0 25.63-10.8 10.8-10.8 10.8-25.63 0-14.83-10.8-25.63-10.8-10.8-25.63-10.8-14.83 0-25.63 10.8-10.8 10.8-10.8 25.63 0 14.83 10.8 25.63 10.8 10.8 25.63 10.8ZM182.15-182.15v-595.7 595.7Z",
30745
+ barChart: "M660.48-154.02v-288.61h145.74v288.61H660.48Zm-253.11 0v-652.2h145.26v652.2H407.37Zm-253.35 0v-452.2h145.5v452.2h-145.5Z",
30746
+ calendar: "M182.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-615.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34H245v-60h69.07v60h331.86v-60H715v60h62.85q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v256.65h-68.37V-570h-595.7v427.85h316.89v68.13H182.15Zm0-555.98h595.7v-127.85h-595.7V-630Zm0 0v-127.85V-630ZM559.04-74.02v-128.02L781-423q9.51-9.63 21.13-13.91 11.62-4.29 23.5-4.29 12.48 0 24.21 4.86T871.02-422l37 37q9.44 9.48 13.82 21.12 4.38 11.63 4.38 23.27 0 11.96-4.86 24.06-4.86 12.09-14.25 21.57L687.07-74.02H559.04Zm303.59-266.59-37-37 37 37Zm-240 203h38l120.28-121.23-18-19.02-19-18.03-121.28 120.22v38.06Zm140.28-140.28-19-18 37 37-18-19Z",
30747
+ changeCircle: "M482-198.09 597.91-313 482.24-427.91 438.09-384l41.32 41.33q-26.8.28-52.11-9.48-25.3-9.76-45.34-29.81-19.76-19.76-30.14-45.52-10.39-25.76-10.39-51.52 0-16.76 4.5-34t12.74-33.48l-45.91-45.67q-17.48 25.95-25.84 54.43-8.35 28.48-8.35 57.72 0 38.48 15 75.6t44.47 66.36q28.53 28.76 63.93 43.26 35.4 14.5 72.92 15.74L438.09-242 482-198.09Zm165.48-169.76q17.24-25.95 25.6-54.43 8.35-28.48 8.35-57.72 0-38.48-14.61-75.98-14.62-37.5-43.86-66.98-28.76-28.52-64.55-42.64-35.78-14.12-73.06-14.6l36.56-37.8L478-761.91 362.09-647l115.67 114.91L521.91-576l-42.08-42.33q25.8.72 52.37 10.86 26.56 10.14 45.84 29.43 19.76 19.76 30.14 45.52 10.39 25.76 10.39 51.52 0 16.76-4.5 34t-12.74 33.24l46.15 45.91ZM480-74.02q-83.43 0-157.51-31.86-74.08-31.86-129.41-87.2-55.34-55.33-87.2-129.41T74.02-480q0-84.43 31.86-158.51 31.86-74.08 87.2-128.91 55.33-54.84 129.41-86.82 74.08-31.98 157.51-31.98 84.43 0 158.51 31.98 74.08 31.98 128.91 86.82 54.84 54.83 86.82 128.91 31.98 74.08 31.98 158.51 0 83.43-31.98 157.51-31.98 74.08-86.82 129.41-54.83 55.34-128.91 87.2T480-74.02Zm0-68.13q141.04 0 239.45-98.78 98.4-98.79 98.4-239.07 0-141.04-98.4-239.45-98.41-98.4-239.45-98.4-140.28 0-239.07 98.4-98.78 98.41-98.78 239.45 0 140.28 98.78 239.07 98.79 98.78 239.07 98.78ZM480-480Z",
30748
+ chat: "M240-399h313v-60H240v60Zm0-130h480v-60H240v60Zm0-130h480v-60H240v60ZM74.02-74.02v-743.83q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h675.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v515.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27H234.02l-160 160Zm134-228.13h609.83v-515.7h-675.7v587.57l65.87-71.87Zm-65.87 0v-515.7 515.7Z",
30749
+ checklist: "M222.96-208.26 74.98-356l47.98-47.74 100 99 179-179.24L449.7-435 222.96-208.26Zm0-320L74.98-676l47.98-47.74 100 99 179-179.24L449.7-755 222.96-528.26Zm298 242.33v-68.14h364.06v68.14H520.96Zm0-320v-68.14h364.06v68.14H520.96Z",
30750
+ cloudStorage: "M251.48-154.02q-90.17 0-153.57-63.1-63.41-63.1-63.41-153.4 0-79.44 50.24-140.23 50.24-60.79 128.43-73.27 20.96-97.72 95.96-159.46 75-61.74 172.94-61.74 112.89 0 191.08 81.74 78.2 81.74 80.11 196.46v24q72.72.15 122.48 49.89 49.76 49.75 49.76 124.61 0 71.61-51.44 123.05-51.45 51.45-123.06 51.45H251.48Zm0-68.13h499.04q43.87 0 75.36-31.4 31.49-31.41 31.49-75.45 0-44.04-31.49-75.45-31.49-31.4-75.36-31.4h-65.15v-86.63q0-89.91-60.2-152.14-60.2-62.23-147.06-62.23-87.39 0-147.94 63.12-60.54 63.12-60.54 153.88h-21.15q-61.11 0-103.48 42.86-42.37 42.85-42.37 105.94 0 62.09 43.37 105.5 43.37 43.4 105.48 43.4ZM480-480Z",
30751
+ compareArrows: "m311.5-154.02-47.74-47.74 116.94-116.7H74.02v-68.37H380.7L263.76-503.76l47.74-47.74 198.98 198.74L311.5-154.02Zm337-254.72L449.76-607.48 648.5-806.22l47.74 47.74-116.7 116.94h306.68v68.37H579.54l116.7 116.69-47.74 47.74Z",
30752
+ construction: "M770.39-114.02 517-367.17l60.83-61.07 253.39 253.39-60.83 60.83Zm-585.78 0-60.83-60.83 292.39-292.39-107.71-107.48-23 23-41.37-41.37v82.61l-25.2 25.2L91.63-612.54l25.2-25.2h83.6l-45.6-45.61 132.91-132.91q17.48-17.48 38.31-23.72 20.84-6.24 45.56-6.24 24.48 0 45.31 8.86 20.84 8.86 38.56 26.1L347.28-703.3l47.76 47.76-24 24 104.72 104.71 122-121.76q-7.76-12.76-12.26-29.76t-4.5-35.76q0-53.96 39.34-93.41 39.33-39.46 93.29-39.46 15.96 0 27.29 3.36 11.34 3.36 19.06 9.08l-85 85.24 73.09 73.08 85-85.24q5.95 8.48 9.93 21.06 3.98 12.57 3.98 28.29 0 54.2-39.58 93.41-39.57 39.22-93.77 39.22-17.76 0-30.52-2.38-12.76-2.38-23.52-7.14L184.61-114.02Z",
30753
+ dataArray: "M596.41-154.02v-67.89h141.68v-516.18H596.41v-68.13h209.81v652.2H596.41Zm-442.39 0v-652.2h209.57v68.13H221.91v516.18h141.68v67.89H154.02Z",
30754
+ deviceHub: "M115.93-115.93v-188.14h157.83l173.61-173.6v-143.74q-35.74-12.79-58.59-42.23-22.85-29.43-22.85-66.36 0-47.53 33.31-80.8 33.3-33.27 80.88-33.27 47.57 0 80.76 33.27 33.19 33.27 33.19 80.8 0 36.93-22.85 66.36-22.85 29.44-58.59 42.23v143.74l173.85 173.6h157.59v188.14H655.93v-121.5L480-413.37 304.07-237.43v121.5H115.93Z",
30755
+ engineering: "M36.26-114.26v-98.15q0-36.94 17.56-60.63 17.55-23.7 46.79-37.7 54-26 116.81-43.24 62.82-17.24 140.94-17.24t140.81 17q62.7 17 116.94 43 29 14.24 46.55 38.07 17.56 23.84 17.56 60.76v98.13H36.26Zm68.37-68.37h507.46v-29.13q0-15-8.5-24.14t-20.5-14.14q-43-19-95.52-36.03-52.53-17.02-129.21-17.02-76.69 0-129.21 17.14-52.52 17.15-95.52 35.96-12.24 4.95-20.62 14.09t-8.38 24.14v29.13Zm253.73-248.59q-68.51 0-112.31-44.61-43.79-44.61-43.79-110.17h-10q-8.75 0-15.21-6.48-6.46-6.47-6.46-15.25 0-8.67 6.46-15.15 6.46-6.47 15.21-6.47h10q0-41.19 21.32-74.51 21.31-33.31 55.94-53.08v39.15q0 6.33 4.45 10.71 4.44 4.38 10.79 4.38 6.76 0 11-4.36t4.24-10.57v-51.83q8.08-1.76 22.18-3.38 14.09-1.62 27.2-1.62 12.86 0 26.86 1.62t22.19 3.37v51.84q0 6.21 4.26 10.57 4.27 4.36 11.27 4.36 6.24 0 10.74-4.38t4.5-10.62v-39.24q34.39 19.77 54.7 53.07 20.32 33.31 20.32 74.52h10q8.75 0 15.21 6.46 6.46 6.45 6.46 15.19 0 8.74-6.46 15.22T524.22-586h-10q0 65.67-43.68 110.23-43.67 44.55-112.18 44.55Zm.11-68.37q40.81 0 64.21-24.37 23.41-24.36 23.41-63.48H270.63q0 39.05 23.37 63.45 23.36 24.4 64.47 24.4ZM358.48-182.63Z",
30756
+ fileCopy: "M782.63-162.63H269.8q-27.69 0-48.03-20.34-20.34-20.33-20.34-48.03v-626.37q0-27.6 20.34-47.86 20.34-20.27 48.03-20.27h345.37l235.59 235.59V-231q0 27.7-20.39 48.03-20.39 20.34-47.74 20.34Zm-202-496.74v-198H269.8V-231h512.83v-428.37h-202ZM141.43-34.5q-27.59 0-47.86-20.27Q73.3-75.03 73.3-102.63v-616.85h68.13v616.85h499.68v68.13H141.43ZM269.8-857.37v198-198V-231v-626.37Z",
30757
+ filePresent: "M222.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h357.89l226.18 226.18v517.89q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm0-68.13h515.7V-634H554v-183.85H222.15v675.7Zm258.11-80q58.5 0 99.12-41.13Q620-304.4 620-362.22v-139.21h-40v139.2q0 42.03-28.75 71.05-28.75 29.03-71.25 29.03-42 0-71-29.02t-29-71.04v-219.3q0-17.97 11.5-28.95 11.5-10.97 28.5-10.97 18 0 29 10.98t11 28.96v199.34h40v-199.21q0-33.63-23.08-56.85-23.07-23.22-56.57-23.22-33.59 0-56.97 23.21Q340-615 340-581.37v219.18q0 57.79 41.2 98.91 41.21 41.13 99.06 41.13Zm-258.11-595.7V-634v-183.85 675.7-675.7Z",
30758
+ forum: "M890.28-70 729.61-230.67H305.02q-28.35 0-48.24-19.96-19.89-19.97-19.89-48.41v-80h436.89q28.1 0 48.12-19.89 20.01-19.9 20.01-48.24v-276.66h80q28.45 0 48.41 19.96 19.96 19.97 19.96 48.41V-70ZM138.09-440.54l66.63-66.63h409.06v-315.46H138.09v382.09ZM69.72-276.17v-546.46q0-28.45 19.96-48.41Q109.64-891 138.09-891h475.69q28.1 0 48.12 19.96 20.01 19.96 20.01 48.41v315.46q0 28.34-20.01 48.24-20.02 19.89-48.12 19.89H232.59L69.72-276.17Zm68.37-231v-315.46 315.46Z",
30759
+ history: "M476.77-114.02q-151.88 0-257.6-107.16Q113.45-328.33 113.78-481h68.13q.28 124.12 85.53 211.48 85.24 87.37 209.32 87.37 125.81 0 213.33-88.36 87.52-88.36 87.52-214.45 0-123.08-88.37-207.99-88.38-84.9-212.48-84.9-66.09 0-124.15 29.45-58.07 29.44-101.35 78.29h99.98V-607H137.46v-212.54h62.63v103.37q52.71-60.53 124.45-95.29 71.74-34.76 152.22-34.76 76.2 0 143.27 28.6 67.08 28.6 117.47 77.94 50.4 49.34 79.32 115.41Q845.74-558.2 845.74-482q0 76.2-28.92 143.27-28.92 67.07-79.32 116.91-50.39 49.84-117.47 78.82-67.07 28.98-143.26 28.98ZM603.8-315.57l-154-152V-683h62.63v189l136.53 133.28-45.16 45.15Z",
30760
+ hourglassEmpty: "M310.15-142.15h339.7V-267q0-71.04-49.4-119.95-49.41-48.9-120.45-48.9t-120.45 48.9q-49.4 48.91-49.4 119.95v124.85Zm169.85-382q71.04 0 120.45-49.4 49.4-49.41 49.4-120.45v-123.85h-339.7V-694q0 71.04 49.4 120.45 49.41 49.4 120.45 49.4ZM154.02-74.02v-68.13h88V-267q0-70.28 38.93-128.04Q319.87-452.8 384.43-480q-64.56-28.2-103.48-85.96-38.93-57.76-38.93-128.04v-123.85h-88v-68.37h652.2v68.37h-88V-694q0 70.28-38.93 128.04Q640.37-508.2 575.8-480q64.57 27.2 103.49 84.96 38.93 57.76 38.93 128.04v124.85h88v68.13h-652.2Z",
30761
+ hub: "M232.55-31.87q-49.64 0-84.44-34.94-34.81-34.94-34.81-84.57 0-49.64 34.87-84.45 34.86-34.8 84.4-34.8 13.93 0 25.09 2.38 11.15 2.38 21.86 7.14l81.65-102.65q-18.28-22.76-28.28-52.02t-5.24-60.45l-116.93-40.86q-15.48 25.24-40.87 39.48-25.39 14.24-58.48 14.24-49.63 0-84.57-34.86-34.93-34.87-34.93-84.4 0-49.63 34.94-84.69 34.94-35.05 84.57-35.05q49.64 0 84.45 35.05 34.8 35.06 34.8 84.73v3.24l117.7 42q18-31.52 43.38-48.4 25.38-16.88 55.66-24.21v-125.08q-39-11.24-62.94-44.44-23.93-33.19-23.93-70.67 0-49.55 34.94-84.6t84.57-35.05q49.64 0 84.57 35.05 34.92 35.05 34.92 84.6 0 37.48-24.32 70.67-24.31 33.2-62.55 44.44v125.17q30.28 7.24 56.16 24.24 25.88 17 44.22 48.28l116.36-42v-3.28q0-49.63 34.86-84.69 34.87-35.05 84.4-35.05 49.63 0 84.69 35.06 35.05 35.06 35.05 84.69 0 49.64-35.05 84.45-35.06 34.8-84.77 34.8-32.97 0-58.88-14.24-25.91-14.24-40.63-39.72l-116.69 41q4.28 31.53-4.98 60.67-9.26 29.14-28.54 51.9l81.89 103.13q10.7-5 21.74-7.5t24.54-2.5q50.47 0 85.2 34.86 34.73 34.87 34.73 84.4 0 49.63-34.98 84.57-34.98 34.93-84.52 34.93-49.63 0-84.56-34.87-34.94-34.88-34.94-84.7 0-20.7 5.62-37.39t15.62-31.93l-81.41-102.41q-32.13 16.28-68.32 16.28-36.2 0-67.96-16.28l-80.65 103.41q10 15.24 15.62 31.43 5.62 16.19 5.62 36.89 0 49.82-34.94 84.7-34.94 34.87-84.58 34.87ZM480-460Z",
30762
+ integration: "M359.35-114.02H180q-26.47 0-46.22-19.76-19.76-19.75-19.76-46.22v-179.35q41.85-4.76 71.68-33.51 29.82-28.76 29.82-70.11 0-41.36-29.82-70.14-29.83-28.78-71.68-33.78V-746q0-26.4 19.76-46.31 19.75-19.91 46.22-19.91h171.74q12.91-40.95 42.73-68.07 29.81-27.12 70.53-27.12t70.53 27.12q29.82 27.12 42.73 68.07H746q26.4 0 46.31 19.91 19.91 19.91 19.91 46.31v167.74q40.95 12.91 66.57 44.73 25.62 31.81 25.62 72.53t-25.62 69.03q-25.62 28.32-66.57 41.23V-180q0 26.47-19.91 46.22-19.91 19.76-46.31 19.76H566.89q-5.24-46.81-34.78-75.47-29.54-28.66-69.17-28.66-39.62 0-69.11 28.66-29.48 28.66-34.48 75.47ZM465-461Z",
30763
+ leaderboard: "M142.15-182.15h180.07v-355.7H142.15v355.7Zm248.2 0h179.3v-595.7h-179.3v595.7Zm247.43 0h180.07v-275.7H637.78v275.7ZM74.02-114.02v-492.2h248.2v-240h315.56v320h248.44v412.2H74.02Z",
30764
+ loop: "M360-118.26 311.26-166l70.17-70.17h-31.8q-115.28-1.92-194.49-84.99Q75.93-404.24 75.93-520q0-117.67 81.7-200.87T357-804.07h246q117.67 0 199.37 83.2T884.07-520q0 118.43-81.98 201.25t-199.94 82.82v-68.14q89.61 0 151.7-62.92 62.08-62.92 62.08-153.01 0-89.57-61.3-152.75-61.3-63.18-150.63-63.18H356q-89.33 0-150.63 63.18T144.07-520q0 86.93 58.95 149.4 58.96 62.47 145.41 64.14h31.13L312.02-374 360-421.98l151.98 151.74L360-118.26Z",
30765
+ newFile: "M450-232.09h60v-129h130v-60H510v-130h-60v130H320v60h130v129ZM222.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h361.48l222.59 222.59v521.48q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm326.7-557.83v-186h-326.7v675.7h515.7v-489.7h-189Zm-326.7-186v186-186 675.7-675.7Z",
30766
+ pieChart: "M514.07-514.07h301.82q-11.24-118.65-96.71-206.11-85.46-87.47-205.11-95.71v301.82Zm-68.14 369.96v-671.78q-128.6 12.19-216.19 109-87.59 96.8-87.59 226.89 0 130.09 87.59 226.89 87.59 96.81 216.19 109Zm68.14 0q119.65-8.48 205-95.82 85.34-87.35 96.82-206H514.07v301.82ZM480-480Zm.03 405.98q-84.2 0-158.29-31.86-74.09-31.86-129.04-86.82-54.96-54.95-86.82-129.02-31.86-74.06-31.86-158.27 0-84.21 31.86-158.28 31.86-74.08 86.79-129.05 54.92-54.97 129.02-86.93 74.09-31.97 158.33-31.97 84.41 0 158.44 32 74.02 31.99 128.91 86.81 54.89 54.82 86.87 128.87Q886.22-564.5 886.22-480q0 84.51-32.01 158.57-32.01 74.07-86.88 128.86-54.87 54.79-128.96 86.67-74.1 31.88-158.34 31.88Z",
30767
+ public: "M480.21-74.02Q396-74.02 321.95-106q-74.06-31.98-129.03-86.87-54.97-54.88-86.93-128.92-31.97-74.04-31.97-158.22 0-84.19 31.97-158.21 31.96-74.02 86.93-128.91 54.97-54.89 129.06-86.99 74.08-32.1 158.31-32.1 84.24 0 158.18 32.1 73.95 32.1 128.87 86.94 54.92 54.83 86.9 128.9 31.98 74.06 31.98 158.27 0 84.21-31.96 158.25-31.95 74.05-86.9 128.96-54.96 54.92-129 86.85-74.04 31.93-158.15 31.93Zm-42.73-69.13v-81.76q-35 0-58.77-25.86-23.76-25.86-23.76-60.66v-43.77L151.39-558.76q-5 20-7 39.26-2 19.26-2 39.13 0 129.1 83.9 225.78 83.91 96.68 211.19 111.44Zm292.11-107.28q43.74-47.53 66-106.84 22.26-59.31 22.26-123.11 0-105.23-57.52-191.09-57.53-85.86-153.81-125.62v17.76q0 34.71-24.03 60.5-24.04 25.79-58.74 25.79h-86.27v86.45q0 17.07-13.5 27.95-13.5 10.88-30.57 10.88H311.2v87.28h256.37q16.9 0 27.92 13.04 11.03 13.03 11.03 29.9v126.11h42.52q28.76 0 50.67 17t29.88 44Z",
30768
+ publish: "M445.93-154.02v-359.52l-118.56 118.8-48.98-48.5L480-644.85l201.61 201.61-48.98 48.5-118.56-118.8v359.52h-68.14ZM154.02-594.85v-143q0-27.58 20.27-47.98 20.26-20.39 47.86-20.39h515.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v143h-68.37v-143h-515.7v143h-68.13Z",
30769
+ rssFeed: "M190.41-114.02q-31.67 0-54.03-22.59t-22.36-54.32q0-31.72 22.48-54.2 22.48-22.48 54.04-22.48 31.76 0 54.42 22.52 22.65 22.53 22.65 54.32t-22.68 54.27q-22.67 22.48-54.52 22.48Zm527.48 0q0-125.65-47.07-234.77-47.08-109.12-129.87-192.04-83.04-82.67-192.23-129.75-109.2-47.07-234.7-47.07v-95.74q145.83 0 272.39 54.53 126.55 54.53 222.24 150.21 95.68 95.69 150.21 222.24 54.53 126.56 54.53 272.39h-95.5Zm-269 0q0-70.48-26.04-132.56-26.03-62.07-71.68-109.59-45.47-47.24-106.11-73.98-60.64-26.74-131.04-26.74v-95.5q90.74 0 168.76 34.22 78.02 34.21 136.36 94.21 58.34 60.01 91.92 139.6 33.57 79.59 33.57 170.34h-95.74Z",
30770
+ schema: "M153.3-29v-231h100v-104.5h-100v-231h100V-700h-100v-231h269.33v231h-100v104.5h100v81.43h154.74v-81.43h269.56v231H577.37v-81.43H422.63v81.43h-100V-260h100v231H153.3Zm68.13-68.37H354.5v-94.5H221.43v94.5Zm0-335.26H354.5v-94.74H221.43v94.74Zm424.07 0h133.07v-94.74H645.5v94.74ZM221.43-768.37H354.5v-94.26H221.43v94.26Z",
30771
+ showChart: "M126-214.26 74.26-266 380-571.74l159.76 160.52 298-335 47.98 46.74-345.26 390.46L380-468.26l-254 254Z",
30772
+ sms: "M303.16-520.85q17.93 0 30.02-12.12 12.1-12.13 12.1-30.06t-12.12-30.02q-12.13-12.1-30.06-12.1t-30.02 12.12q-12.1 12.13-12.1 30.06t12.13 30.02q12.12 12.1 30.05 12.1Zm179.87 0q17.93 0 30.02-12.12 12.1-12.13 12.1-30.06t-12.12-30.02q-12.13-12.1-30.06-12.1t-30.02 12.12q-12.1 12.13-12.1 30.06t12.12 30.02q12.13 12.1 30.06 12.1Zm172.87 0q17.93 0 30.02-12.12 12.1-12.13 12.1-30.06t-12.13-30.02q-12.12-12.1-30.05-12.1t-30.02 12.12q-12.1 12.13-12.1 30.06t12.12 30.02q12.13 12.1 30.06 12.1ZM74.02-74.02v-743.83q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h675.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v515.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27H234.02l-160 160Zm134-228.13h609.83v-515.7h-675.7v587.57l65.87-71.87Zm-65.87 0v-515.7 515.7Z",
30773
+ source: "M74.5-111.87v-675.5l200.5-130 200.5 130v109.74h410v565.76h-811Zm65.5-65.5h105v-105H140v105Zm0-165h105v-105H140v105Zm0-165h105v-105H140v105Zm0-165h105v-105H140v105Zm165 0h105v-105H305v105Zm0 495h515v-435H305v435Zm245-270v-60h165v60H550Zm0 165v-60h165v60H550Zm-140-165v-60h60v60h-60Zm0 165v-60h60v60h-60Z",
30774
+ swapHoriz: "M272.76-154.02 74.02-352.76 272.76-551.5l47.74 47.74-116.7 116.93h306.68v68.37H203.8l116.7 116.7-47.74 47.74Zm414.48-254.72-47.74-47.74 116.93-116.69H449.76v-68.37h306.67L639.5-758.48l47.74-47.74 198.98 198.74-198.98 198.74Z",
30775
+ syncAlt: "M273.39-106.85 74.02-306.46l200.37-200.37 47.98 47.74L203.8-340.52h642.42v68.37H203.8l117.57 117.56-47.98 47.74Zm413.22-346.32-47.74-47.74 117.56-117.57H114.02v-68.37h642.41l-118.56-118.8 47.74-47.74 200.61 200.61-199.61 199.61Z",
30776
+ taskAlt: "M480.12-74.02q-86.32 0-160.51-31t-128.89-85.7q-54.7-54.7-85.7-128.89-31-74.19-31-160.51 0-85.31 30.94-159.4t85.7-128.9q54.76-54.8 128.95-86.3T480-886.22q75 0 140 23.65t117.48 65.4l-49.46 49.21q-42.8-33.32-95.27-51.61-52.46-18.28-112.75-18.28-144.11 0-240.98 96.74-96.87 96.74-96.87 241.07 0 144.32 96.86 241.11 96.86 96.78 240.95 96.78 144.08 0 240.99-96.76 96.9-96.75 96.9-241.09 0-28.88-4.38-56.27-4.38-27.38-12.9-53.19l52.93-53.17q16.24 37.72 24.48 78.28 8.24 40.57 8.24 84.17 0 86.38-31.5 160.57t-86.3 128.95q-54.81 54.76-128.9 85.7-74.09 30.94-159.4 30.94Zm-59.6-220.39L252.89-463.04l49.78-50.03 117.85 117.85L836.2-810.89l51.02 50.02-466.7 466.46Z",
30777
+ trendingUp: "m122.76-234.74-48.74-48.74 298.94-297.69 167 167 231.91-232.4H647.02v-68.36h239.2v239.19h-67.37v-121.09L538.96-316.7l-167-167-249.2 248.96Z",
30778
+ update: "M483.19-114.02q-76.07 0-143.3-28.98-67.24-28.98-117.46-78.82-50.21-49.83-79.31-116.91-29.1-67.07-29.1-143.27 0-76.2 29.1-142.27 29.1-66.08 79.31-115.41 50.22-49.34 117.47-77.94 67.25-28.6 143.34-28.6 80.24 0 151.98 34.76t124.69 95.29v-103.37h62.63V-607H608.76v-63.11h99.98q-43.59-48.91-101.62-78.32-58.03-29.42-123.88-29.42-124.28 0-212.57 84.86-88.28 84.86-88.28 207.95 0 126.08 87.37 214.49 87.38 88.4 213.48 88.4 123.8 0 209.18-87.37 85.37-87.36 85.67-211.48h68.13q0 152.63-105.68 259.8-105.67 107.18-257.35 107.18ZM603.8-315.57l-154-152V-683h62.63v189l136.53 133.28-45.16 45.15Z",
30779
+ uploadFile: "M452-203.43h60v-201.96l82.48 82.48 42-42L480-517.15 325.76-362.91l42 42L452-405.39v201.96ZM222.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h361.48l222.59 222.59v521.48q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm326.7-557.83v-186h-326.7v675.7h515.7v-489.7h-189Zm-326.7-186v186-186 675.7-675.7Z",
30780
+ // ---- Aliases (platform names that map to existing core icons) ----
30781
+ adminPanel: "M480-73.78q-142.59-35.67-234.27-164.87-91.69-129.2-91.69-283.27v-242.26L480-886.22l326.22 122.05V-522q0 80.87-22.94 158.57-22.93 77.69-76.93 143.69l-144.31-138.3q-18.76 10.52-39.68 17.28Q501.44-334 480-334q-62 0-105.5-43T331-482.5q0-62.5 43.5-106T480-632q62 0 105.5 43.5T629-482q0 20.76-5.7 41.52t-18.34 37.28l85.61 81.85q24-42.52 35.64-94.66 11.64-52.14 11.64-105.94v-196.86L480-812.61l-257.85 93.92v196.65q0 130.08 72.02 234.51Q366.2-183.11 480.2-143.91q27.6-7.76 67.67-31.81 40.06-24.04 62.87-46.32l48.22 48.74q-35.24 32-84.22 60.38Q525.76-84.54 480-73.78Zm.24-322.85q35.56 0 60.85-24.81 25.28-24.82 25.28-61.09t-25.52-61.56q-25.52-25.28-61.09-25.28-35.56 0-60.85 25.31-25.28 25.32-25.28 61.59t25.52 61.06q25.52 24.78 61.09 24.78Zm2.35-82.83Z",
30782
+ ai: "M352.39-107.15 307-253.85l-148.85-44.54 148.85-44.78L352.39-490l45.15 147.43L544.63-298.4l-147.09 44.56-45.15 146.69Zm370-290.85-28.52-92.39-94.24-28.24 94.24-28.48 28.52-92.15 28.28 92.15 94.72 28.48-94.72 28.24-28.28 92.39ZM192.15-502.52l-17.76-58.52-58.52-18.72 58.52-17.48 17.76-59.24 18.48 59.24 58.52 17.48-58.52 18.72-18.48 58.52Z",
30783
+ lockClosed: "M242.87-72.59q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73h33.54v-73.06q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87Zm0-91h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM367.41-648.85h225.18v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26v73.06ZM242.87-163.59v-394.26 394.26Z",
30784
+ lockOpened: "M242.87-648.85h349.72v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26h-91q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73Zm0 485.26h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM242.87-163.59v-394.26 394.26Z",
30785
+ insights: "M285.2-277h60v-205h-60v205Zm329.84 0h60v-420h-60v420ZM450-277h60v-118h-60v118Zm0-205h60v-60h-60v60ZM182.15-114.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-595.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h595.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v595.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-595.7Zm0-68.13h595.7v-595.7h-595.7v595.7Zm0-595.7v595.7-595.7Z",
30786
+ file: "M222.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h357.89l226.18 226.18v517.89q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm0-68.13h515.7V-634H554v-183.85H222.15v675.7Zm0-675.7V-634v-183.85 675.7-675.7Z",
30787
+ outlinedSettings: "M370-74.02l-16-127.48q-17-6.76-34.5-16.5T287.5-237l-118 53-110-192 104-77q-1-8-1.5-20.5t-.5-20.5q0-8.76.5-21.38T163-536l-104-77 110-192 118 53q14.5-8.98 33.18-19.49T355-787.5l16-126.48h220l16 126.72q17 6.76 34.5 16.5T674-753l118-53 110 192-104 77q1 8 1.5 20.5t.5 20.5q0 8-.5 20.5T798-455l104 77-110 192-118-53q-14.5 9-32 19.5T607-202.5L591-74.02H370ZM480-330q63 0 106.5-43.5T630-480q0-63-43.5-106.5T480-630q-63 0-106.5 43.5T330-480q0 63 43.5 106.5T480-330Z",
30788
+ scheduled: "M573.61-114.02q-97.63 0-165.84-68.12-68.22-68.12-68.22-165.61 0-97.48 68.22-165.6 68.21-68.12 165.84-68.12 97.62 0 165.59 68.12 67.98 68.12 67.98 165.6 0 97.49-67.98 165.61-67.97 68.12-165.59 68.12ZM114.02-580.83v-68.14h233.13v68.14H114.02ZM573.8-182.15q70.2 0 119.74-49.35 49.53-49.35 49.53-119.55t-49.72-120.16q-49.72-49.96-119.92-49.96t-119.55 49.78q-49.35 49.77-49.35 120.48 0 70.48 49.53 119.62 49.54 49.14 119.74 49.14Zm48.72-72.81L573.8-304.2v-111.41h43.72V-321l37.72 37.72-32.72 28.32ZM74.02-419.63v-68.14h188.13v68.14H74.02Z",
30789
+ watchLater: "M573.61-114.02q-97.63 0-165.84-68.12-68.22-68.12-68.22-165.61 0-97.48 68.22-165.6 68.21-68.12 165.84-68.12 97.62 0 165.59 68.12 67.98 68.12 67.98 165.6 0 97.49-67.98 165.61-67.97 68.12-165.59 68.12ZM114.02-580.83v-68.14h233.13v68.14H114.02ZM573.8-182.15q70.2 0 119.74-49.35 49.53-49.35 49.53-119.55t-49.72-120.16q-49.72-49.96-119.92-49.96t-119.55 49.78q-49.35 49.77-49.35 120.48 0 70.48 49.53 119.62 49.54 49.14 119.74 49.14Zm48.72-72.81L573.8-304.2v-111.41h43.72V-321l37.72 37.72-32.72 28.32ZM74.02-419.63v-68.14h188.13v68.14H74.02Z"
30715
30790
  };
30716
30791
  VALID_NODE_ICONS = Object.keys(NODE_ICON_PATHS);
30717
30792
  }
@@ -31502,6 +31577,10 @@ Add '@param ${fromPort}' to the workflow JSDoc and include it in the params obje
31502
31577
  });
31503
31578
  exitPortConnections.forEach((connections, portName) => {
31504
31579
  if (connections.length > 1) {
31580
+ const exitPort = workflow.exitPorts[portName];
31581
+ if (exitPort?.isControlFlow || exitPort?.dataType === "STEP") {
31582
+ return;
31583
+ }
31505
31584
  const sourceNodes = connections.map((c) => c.from.node);
31506
31585
  if (this.areMutuallyExclusive(sourceNodes, workflow, instanceMap)) {
31507
31586
  return;
@@ -32865,7 +32944,8 @@ async function compileWorkflow(filePath, options = {}) {
32865
32944
  ${parseResult.errors.join("\n")}`);
32866
32945
  }
32867
32946
  const { validateWorkflow: validateWorkflow2 } = await Promise.resolve().then(() => (init_validate(), validate_exports));
32868
- const validationResult = validateWorkflow2(parseResult.ast);
32947
+ const validationMode = options.validationMode;
32948
+ const validationResult = validateWorkflow2(parseResult.ast, validationMode ? { mode: validationMode } : void 0);
32869
32949
  if (validationResult.errors.length > 0) {
32870
32950
  const errorMessages = validationResult.errors.map(
32871
32951
  (e) => typeof e === "string" ? e : e.message
@@ -78778,7 +78858,8 @@ ${parseResult.errors.join("\n")}`
78778
78858
  "Validate a workflow file and return errors/warnings.",
78779
78859
  {
78780
78860
  filePath: external_exports.string().describe("Path to the workflow file"),
78781
- workflowName: external_exports.string().optional().describe("Specific workflow name")
78861
+ workflowName: external_exports.string().optional().describe("Specific workflow name"),
78862
+ draft: external_exports.boolean().optional().describe("Draft mode - suppresses STUB_NODE errors for unimplemented nodes (default: false)")
78782
78863
  },
78783
78864
  async (args) => {
78784
78865
  try {
@@ -78812,7 +78893,7 @@ ${parseResult.errors.join("\n")}`
78812
78893
  warnings: parseResult.warnings
78813
78894
  });
78814
78895
  }
78815
- const result = validateWorkflow(parseResult.ast);
78896
+ const result = validateWorkflow(parseResult.ast, args.draft ? { mode: "draft" } : void 0);
78816
78897
  const errors2 = result.errors.map((e) => ({
78817
78898
  message: e.message,
78818
78899
  severity: e.type,
@@ -78858,7 +78939,8 @@ ${parseResult.errors.join("\n")}`
78858
78939
  framework: external_exports.enum(["next", "express", "hono", "fastify", "remix"]).optional().describe("Framework adapter for serve handler (requires serve=true)"),
78859
78940
  typedEvents: external_exports.boolean().optional().describe("Generate Zod event schemas from workflow @param annotations"),
78860
78941
  retries: external_exports.number().int().min(0).optional().describe("Number of retries per function. Overrides @retries annotation."),
78861
- timeout: external_exports.string().optional().describe('Function timeout (e.g. "30m", "1h"). Overrides @timeout annotation.')
78942
+ timeout: external_exports.string().optional().describe('Function timeout (e.g. "30m", "1h"). Overrides @timeout annotation.'),
78943
+ draft: external_exports.boolean().optional().describe("Draft mode - suppresses STUB_NODE validation errors so partially implemented workflows can compile (default: false)")
78862
78944
  },
78863
78945
  async (args) => {
78864
78946
  try {
@@ -78917,7 +78999,8 @@ ${parseResult.errors.join("\n")}`);
78917
78999
  const result = await compileWorkflow(filePath, {
78918
79000
  write: args.write ?? true,
78919
79001
  parse: { workflowName: args.workflowName },
78920
- generate: { production: args.production ?? false }
79002
+ generate: { production: args.production ?? false },
79003
+ validationMode: args.draft ? "draft" : void 0
78921
79004
  });
78922
79005
  return makeToolResult({
78923
79006
  outputFile: result.metadata?.outputFile ?? filePath,
@@ -82093,7 +82176,7 @@ function registerExportTools(mcp) {
82093
82176
  {
82094
82177
  filePath: external_exports.string().describe("Path to the workflow .ts file"),
82095
82178
  target: external_exports.string().describe("Deployment target platform. Run with --list-targets to see installed targets."),
82096
- outputDir: external_exports.string().describe("Output directory for generated files"),
82179
+ outputDir: external_exports.string().optional().describe("Output directory for generated files (default: ./dist relative to workflow)"),
82097
82180
  serviceName: external_exports.string().optional().describe("Service name (default: derived from filename)"),
82098
82181
  workflows: external_exports.array(external_exports.string()).optional().describe("Specific workflow function names to include (default: all)"),
82099
82182
  nodeTypes: external_exports.array(external_exports.string()).optional().describe("Specific node type names to include"),
@@ -82104,7 +82187,9 @@ function registerExportTools(mcp) {
82104
82187
  async (args) => {
82105
82188
  try {
82106
82189
  const filePath = path29.resolve(args.filePath);
82107
- const outputDir = path29.resolve(args.outputDir);
82190
+ const outputDir = path29.resolve(
82191
+ args.outputDir || path29.join(path29.dirname(filePath), "dist")
82192
+ );
82108
82193
  const preview = args.preview ?? false;
82109
82194
  const includeDocs = args.includeDocs ?? true;
82110
82195
  try {
@@ -82972,9 +83057,26 @@ function registerModelTools(mcp) {
82972
83057
  lines.push(`declare function ${step.name}(${params}): ${returnType};`);
82973
83058
  lines.push("");
82974
83059
  }
82975
- const flowSteps = args.flow.split("->").map((s) => s.trim()).filter(Boolean);
82976
83060
  const nodeAnnotations = args.steps.map((step) => `@node ${step.name} ${step.name}`);
82977
- const pathAnnotation = `@path ${flowSteps.join(" -> ")}`;
83061
+ const pathAnnotations = args.flow.split(",").map((segment) => {
83062
+ const steps = segment.split("->").map((s) => s.trim()).filter(Boolean);
83063
+ return `@path ${steps.join(" -> ")}`;
83064
+ });
83065
+ const stepMap = new Map(args.steps.map((s) => [s.name, s]));
83066
+ const connectAnnotations = [];
83067
+ for (const segment of args.flow.split(",")) {
83068
+ const flowNodes = segment.split("->").map((s) => s.trim()).filter(Boolean);
83069
+ for (let i = 0; i < flowNodes.length - 1; i++) {
83070
+ const fromStep = stepMap.get(flowNodes[i]);
83071
+ const toStep = stepMap.get(flowNodes[i + 1]);
83072
+ if (!fromStep || !toStep) continue;
83073
+ for (const outputName of Object.keys(fromStep.outputs)) {
83074
+ if (outputName in toStep.inputs) {
83075
+ connectAnnotations.push(`@connect ${fromStep.name}.${outputName} -> ${toStep.name}.${outputName}`);
83076
+ }
83077
+ }
83078
+ }
83079
+ }
82978
83080
  const jsdocLines = ["/**"];
82979
83081
  if (args.description) {
82980
83082
  jsdocLines.push(` * ${args.description}`);
@@ -82984,9 +83086,16 @@ function registerModelTools(mcp) {
82984
83086
  for (const nodeAnn of nodeAnnotations) {
82985
83087
  jsdocLines.push(` * ${nodeAnn}`);
82986
83088
  }
82987
- jsdocLines.push(` * ${pathAnnotation}`);
83089
+ for (const pathAnn of pathAnnotations) {
83090
+ jsdocLines.push(` * ${pathAnn}`);
83091
+ }
83092
+ for (const connAnn of connectAnnotations) {
83093
+ jsdocLines.push(` * ${connAnn}`);
83094
+ }
82988
83095
  jsdocLines.push(" */");
82989
- jsdocLines.push(`export const ${args.name} = 'flowWeaver:draft';`);
83096
+ jsdocLines.push(`export async function ${args.name}() {`);
83097
+ jsdocLines.push(` // stub - compile to generate workflow body`);
83098
+ jsdocLines.push(`}`);
82990
83099
  lines.push(...jsdocLines);
82991
83100
  lines.push("");
82992
83101
  const content = lines.join("\n");
@@ -84185,6 +84294,49 @@ var init_tools_context = __esm({
84185
84294
  }
84186
84295
  });
84187
84296
 
84297
+ // src/mcp/tools-resources.ts
84298
+ function registerResourceTools(mcp) {
84299
+ mcp.tool(
84300
+ "fw_list_resources",
84301
+ "List available icons, colors, and annotation tags for use in workflow definitions.",
84302
+ {
84303
+ type: external_exports.enum(["icons", "colors", "tags", "all"]).default("all").describe("Resource type to list (default: all)")
84304
+ },
84305
+ async (args) => {
84306
+ const type2 = args.type ?? "all";
84307
+ switch (type2) {
84308
+ case "icons":
84309
+ return makeToolResult([...VALID_NODE_ICONS]);
84310
+ case "colors":
84311
+ return makeToolResult([...VALID_NODE_COLORS]);
84312
+ case "tags":
84313
+ return makeToolResult({
84314
+ nodeType: [...KNOWN_NODETYPE_TAGS],
84315
+ workflow: [...KNOWN_WORKFLOW_TAGS]
84316
+ });
84317
+ case "all":
84318
+ return makeToolResult({
84319
+ icons: [...VALID_NODE_ICONS],
84320
+ colors: [...VALID_NODE_COLORS],
84321
+ tags: {
84322
+ nodeType: [...KNOWN_NODETYPE_TAGS],
84323
+ workflow: [...KNOWN_WORKFLOW_TAGS]
84324
+ }
84325
+ });
84326
+ }
84327
+ }
84328
+ );
84329
+ }
84330
+ var init_tools_resources = __esm({
84331
+ "src/mcp/tools-resources.ts"() {
84332
+ "use strict";
84333
+ init_zod();
84334
+ init_theme();
84335
+ init_constants();
84336
+ init_response_utils();
84337
+ }
84338
+ });
84339
+
84188
84340
  // src/mcp/prompts.ts
84189
84341
  function registerPrompts(mcp) {
84190
84342
  mcp.registerPrompt("flow-weaver-nocode", {
@@ -84341,6 +84493,7 @@ async function startMcpServer(options) {
84341
84493
  registerModelTools(mcp);
84342
84494
  registerDebugTools(mcp);
84343
84495
  registerContextTools(mcp);
84496
+ registerResourceTools(mcp);
84344
84497
  registerPrompts(mcp);
84345
84498
  await registerPackMcpTools(mcp);
84346
84499
  if (options.stdio) {
@@ -84376,6 +84529,7 @@ var init_server3 = __esm({
84376
84529
  init_tools_model();
84377
84530
  init_tools_debug();
84378
84531
  init_tools_context();
84532
+ init_tools_resources();
84379
84533
  init_prompts();
84380
84534
  init_pack_tools();
84381
84535
  }
@@ -88937,7 +89091,7 @@ function parseIntStrict(value) {
88937
89091
  // src/cli/index.ts
88938
89092
  init_logger();
88939
89093
  init_error_utils();
88940
- var version2 = true ? "0.32.2" : "0.0.0-dev";
89094
+ var version2 = true ? "0.33.0" : "0.0.0-dev";
88941
89095
  var program2 = new Command();
88942
89096
  program2.name("fw").description("Flow Weaver Annotations - Compile and validate workflow files").option("-v, --version", "Output the current version").option("--no-color", "Disable colors").option("--color", "Force colors").on("option:version", () => {
88943
89097
  logger.banner(version2);
package/dist/constants.js CHANGED
@@ -134,6 +134,8 @@ export const VALID_NODE_COLORS = [
134
134
  export const KNOWN_NODETYPE_TAGS = new Set([
135
135
  'flowWeaver', 'name', 'label', 'description', 'color', 'icon', 'tag',
136
136
  'executeWhen', 'scope', 'expression', 'pullExecution', 'input', 'output', 'step',
137
+ // Async is auto-detected from the TS signature but accepted as an explicit annotation
138
+ 'async',
137
139
  // Deployment annotations
138
140
  'deploy',
139
141
  ]);
@@ -142,6 +144,8 @@ export const KNOWN_WORKFLOW_TAGS = new Set([
142
144
  'node', 'position', 'connect', 'scope', 'map', 'path', 'fanOut', 'fanIn',
143
145
  'coerce', 'trigger', 'cancelOn', 'retries', 'timeout', 'throttle', 'param',
144
146
  'return', 'returns',
147
+ // Async is auto-detected from the TS signature but accepted as an explicit annotation
148
+ 'async',
145
149
  // Deployment annotations
146
150
  'deploy',
147
151
  ]);
@@ -215,6 +215,57 @@ export const NODE_ICON_PATHS = {
215
215
  cloudDone: 'm412.8-279.76 228.63-228.63-60.39-60.39-169 169-84.24-84.24-59.39 59.63L412.8-279.76ZM260.72-151.87q-94.35 0-161.24-65.15-66.89-65.15-66.89-159.26 0-80.39 47.36-143.67 47.35-63.27 125.03-80.75 26.43-92.95 102.63-150.19Q383.8-808.13 480-808.13q118.2 0 201.25 81.74t85.68 199.69q69.72 10.63 115.1 63.81 45.38 53.17 45.38 123.61 0 78.11-54.65 132.76-54.65 54.65-132.76 54.65H260.72Zm0-91h478.56q40.57 0 68.85-28.28 28.28-28.28 28.28-68.85 0-40.57-28.28-68.85-28.28-28.28-68.85-28.28h-62.87v-83.59q0-81.56-57.42-138.99-57.42-57.42-138.99-57.42-82.04 0-139.23 58.74-57.18 58.74-57.18 141.26h-22.87q-56.81 0-96.97 40.16-40.16 40.17-40.16 96.97t40.16 96.97q40.16 40.16 96.97 40.16ZM480-480Z',
216
216
  lock: 'M242.87-72.59q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73h33.54v-73.06q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87Zm0-91h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM367.41-648.85h225.18v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26v73.06ZM242.87-163.59v-394.26 394.26Z',
217
217
  lockOpen: 'M242.87-648.85h349.72v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26h-91q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73Zm0 485.26h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM242.87-163.59v-394.26 394.26Z',
218
+ // ---- Platform catalog sync (icons available in the platform's node icon picker) ----
219
+ addAuthorization: 'M480-73.78q-140.58-32.67-233.28-158.97-92.7-126.29-92.7-289.29v-243.14L480-887.22l326.22 122.15v277.66q-16.15-8.92-34-15.4-17.85-6.47-34.37-8.67v-206.05L480-812.61l-257.85 95v195.51q0 76.58 24.62 140.22t62.5 111.42q37.88 47.79 83.16 79.07 45.29 31.28 86.61 44.56 6.24 14.87 19.92 32.15 13.67 17.27 24.78 26.22-10.44 5.72-21.87 8.58-11.44 2.86-21.87 6.1ZM692.5-80Q615-80 560-135.5T505-267q0-78.43 54.99-133.72Q614.98-456 693-456q77 0 132.5 55.28Q881-345.43 881-267q0 76-55.5 131.5T692.5-80ZM480-479.72Zm195.37 318.76h38.26v-86.41h86.41v-38.26h-86.41v-86.41h-38.26v86.41h-86.41v38.26h86.41v86.41Z',
220
+ alarm: 'M479-76.02q-75.2 0-141.77-28.48-66.58-28.48-116.03-77.82-49.46-49.33-78.32-115.91-28.86-66.57-28.86-142.5T142.88-583q28.86-66.35 78.32-116.18 49.45-49.84 116.03-78.44 66.57-28.6 141.77-28.6 75.2 0 141.77 28.6 66.58 28.6 116.41 78.44 49.84 49.83 78.44 116.18 28.6 66.34 28.6 142.27t-28.6 142.5q-28.6 66.58-78.44 115.97-49.84 49.4-116.41 77.82Q554.2-76.02 479-76.02ZM479-439Zm119.57 162.43 44.39-44.39-129.53-129.52V-640h-62.86v215.43l148 148Zm-387.2-598.08 44.15 44.15L86.5-667.48l-43.91-44.15 168.78-163.02Zm535.26 0 169.02 163.02-44.15 44.15L702.48-830.5l44.15-44.15ZM479-144.15q124.04 0 210.45-86.4 86.4-86.41 86.4-210.45 0-124.04-86.4-210.45-86.41-86.4-210.45-86.4-124.04 0-210.45 86.4-86.4 86.41-86.4 210.45 0 124.04 86.4 210.45 86.41 86.4 210.45 86.4Z',
221
+ allInclusive: 'M211.89-255.93q-91.56 0-153.76-66.7-62.2-66.7-62.2-159.37 0-91.67 62.7-156.87t153.26-65.2q36.72 0 70.96 12.24 34.24 12.23 60.78 37.72l90.85 87.61-48.22 47.5-85.81-83.87q-17.51-17.52-40.46-25.29t-47.98-7.77q-62.45 0-105.19 45.27-42.75 45.27-42.75 108.75 0 64.48 42.24 111.16 42.25 46.68 105.69 46.68 24.28 0 47.12-7.76 22.83-7.77 41.25-24.28l316-298q26.54-25.49 60.78-37.72 34.24-12.24 69.96-12.24 91.56 0 154.26 65.2 62.7 65.2 62.7 156.87 0 92.67-62.7 159.37t-154.26 66.7q-35.72 0-70.46-11.74-34.74-11.73-60.28-37.22l-88.61-87.61 47.98-47.5 83.88 83.89q16.53 16.52 39.81 24.28 23.29 7.76 47.57 7.76 63.44 0 106.19-46.72 42.74-46.72 42.74-111.13 0-63.41-43.24-108.71-43.25-45.3-105.69-45.3-24.28 0-47.12 8.76-22.83 8.77-40.25 25.28l-316 298q-26.54 24.49-61.28 36.22-34.74 11.74-70.46 11.74Z',
222
+ analytics: 'M285.2-277h60v-205h-60v205Zm329.84 0h60v-420h-60v420ZM450-277h60v-118h-60v118Zm0-205h60v-60h-60v60ZM182.15-114.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-595.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h595.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v595.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-595.7Zm0-68.13h595.7v-595.7h-595.7v595.7Zm0-595.7v595.7-595.7Z',
223
+ assignment: 'M182.15-114.02q-28.1 0-48.12-20.01-20.01-20.02-20.01-48.12v-595.7q0-28.2 20.01-48.28 20.02-20.09 48.12-20.09h199.02q6.44-35 34.16-57.5 27.71-22.5 64.67-22.5t64.67 22.5q27.72 22.5 34.16 57.5h199.02q28.2 0 48.28 20.09 20.09 20.08 20.09 48.28v595.7q0 28.1-20.09 48.12-20.08 20.01-48.28 20.01h-595.7Zm0-68.13h595.7v-595.7h-595.7v595.7Zm100-100h270.37v-60H282.15v60Zm0-167.85h395.7v-60h-395.7v60Zm0-167.85h395.7v-60h-395.7v60ZM480-795.57q14.83 0 25.63-10.8 10.8-10.8 10.8-25.63 0-14.83-10.8-25.63-10.8-10.8-25.63-10.8-14.83 0-25.63 10.8-10.8 10.8-10.8 25.63 0 14.83 10.8 25.63 10.8 10.8 25.63 10.8ZM182.15-182.15v-595.7 595.7Z',
224
+ barChart: 'M660.48-154.02v-288.61h145.74v288.61H660.48Zm-253.11 0v-652.2h145.26v652.2H407.37Zm-253.35 0v-452.2h145.5v452.2h-145.5Z',
225
+ calendar: 'M182.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-615.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34H245v-60h69.07v60h331.86v-60H715v60h62.85q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v256.65h-68.37V-570h-595.7v427.85h316.89v68.13H182.15Zm0-555.98h595.7v-127.85h-595.7V-630Zm0 0v-127.85V-630ZM559.04-74.02v-128.02L781-423q9.51-9.63 21.13-13.91 11.62-4.29 23.5-4.29 12.48 0 24.21 4.86T871.02-422l37 37q9.44 9.48 13.82 21.12 4.38 11.63 4.38 23.27 0 11.96-4.86 24.06-4.86 12.09-14.25 21.57L687.07-74.02H559.04Zm303.59-266.59-37-37 37 37Zm-240 203h38l120.28-121.23-18-19.02-19-18.03-121.28 120.22v38.06Zm140.28-140.28-19-18 37 37-18-19Z',
226
+ changeCircle: 'M482-198.09 597.91-313 482.24-427.91 438.09-384l41.32 41.33q-26.8.28-52.11-9.48-25.3-9.76-45.34-29.81-19.76-19.76-30.14-45.52-10.39-25.76-10.39-51.52 0-16.76 4.5-34t12.74-33.48l-45.91-45.67q-17.48 25.95-25.84 54.43-8.35 28.48-8.35 57.72 0 38.48 15 75.6t44.47 66.36q28.53 28.76 63.93 43.26 35.4 14.5 72.92 15.74L438.09-242 482-198.09Zm165.48-169.76q17.24-25.95 25.6-54.43 8.35-28.48 8.35-57.72 0-38.48-14.61-75.98-14.62-37.5-43.86-66.98-28.76-28.52-64.55-42.64-35.78-14.12-73.06-14.6l36.56-37.8L478-761.91 362.09-647l115.67 114.91L521.91-576l-42.08-42.33q25.8.72 52.37 10.86 26.56 10.14 45.84 29.43 19.76 19.76 30.14 45.52 10.39 25.76 10.39 51.52 0 16.76-4.5 34t-12.74 33.24l46.15 45.91ZM480-74.02q-83.43 0-157.51-31.86-74.08-31.86-129.41-87.2-55.34-55.33-87.2-129.41T74.02-480q0-84.43 31.86-158.51 31.86-74.08 87.2-128.91 55.33-54.84 129.41-86.82 74.08-31.98 157.51-31.98 84.43 0 158.51 31.98 74.08 31.98 128.91 86.82 54.84 54.83 86.82 128.91 31.98 74.08 31.98 158.51 0 83.43-31.98 157.51-31.98 74.08-86.82 129.41-54.83 55.34-128.91 87.2T480-74.02Zm0-68.13q141.04 0 239.45-98.78 98.4-98.79 98.4-239.07 0-141.04-98.4-239.45-98.41-98.4-239.45-98.4-140.28 0-239.07 98.4-98.78 98.41-98.78 239.45 0 140.28 98.78 239.07 98.79 98.78 239.07 98.78ZM480-480Z',
227
+ chat: 'M240-399h313v-60H240v60Zm0-130h480v-60H240v60Zm0-130h480v-60H240v60ZM74.02-74.02v-743.83q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h675.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v515.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27H234.02l-160 160Zm134-228.13h609.83v-515.7h-675.7v587.57l65.87-71.87Zm-65.87 0v-515.7 515.7Z',
228
+ checklist: 'M222.96-208.26 74.98-356l47.98-47.74 100 99 179-179.24L449.7-435 222.96-208.26Zm0-320L74.98-676l47.98-47.74 100 99 179-179.24L449.7-755 222.96-528.26Zm298 242.33v-68.14h364.06v68.14H520.96Zm0-320v-68.14h364.06v68.14H520.96Z',
229
+ cloudStorage: 'M251.48-154.02q-90.17 0-153.57-63.1-63.41-63.1-63.41-153.4 0-79.44 50.24-140.23 50.24-60.79 128.43-73.27 20.96-97.72 95.96-159.46 75-61.74 172.94-61.74 112.89 0 191.08 81.74 78.2 81.74 80.11 196.46v24q72.72.15 122.48 49.89 49.76 49.75 49.76 124.61 0 71.61-51.44 123.05-51.45 51.45-123.06 51.45H251.48Zm0-68.13h499.04q43.87 0 75.36-31.4 31.49-31.41 31.49-75.45 0-44.04-31.49-75.45-31.49-31.4-75.36-31.4h-65.15v-86.63q0-89.91-60.2-152.14-60.2-62.23-147.06-62.23-87.39 0-147.94 63.12-60.54 63.12-60.54 153.88h-21.15q-61.11 0-103.48 42.86-42.37 42.85-42.37 105.94 0 62.09 43.37 105.5 43.37 43.4 105.48 43.4ZM480-480Z',
230
+ compareArrows: 'm311.5-154.02-47.74-47.74 116.94-116.7H74.02v-68.37H380.7L263.76-503.76l47.74-47.74 198.98 198.74L311.5-154.02Zm337-254.72L449.76-607.48 648.5-806.22l47.74 47.74-116.7 116.94h306.68v68.37H579.54l116.7 116.69-47.74 47.74Z',
231
+ construction: 'M770.39-114.02 517-367.17l60.83-61.07 253.39 253.39-60.83 60.83Zm-585.78 0-60.83-60.83 292.39-292.39-107.71-107.48-23 23-41.37-41.37v82.61l-25.2 25.2L91.63-612.54l25.2-25.2h83.6l-45.6-45.61 132.91-132.91q17.48-17.48 38.31-23.72 20.84-6.24 45.56-6.24 24.48 0 45.31 8.86 20.84 8.86 38.56 26.1L347.28-703.3l47.76 47.76-24 24 104.72 104.71 122-121.76q-7.76-12.76-12.26-29.76t-4.5-35.76q0-53.96 39.34-93.41 39.33-39.46 93.29-39.46 15.96 0 27.29 3.36 11.34 3.36 19.06 9.08l-85 85.24 73.09 73.08 85-85.24q5.95 8.48 9.93 21.06 3.98 12.57 3.98 28.29 0 54.2-39.58 93.41-39.57 39.22-93.77 39.22-17.76 0-30.52-2.38-12.76-2.38-23.52-7.14L184.61-114.02Z',
232
+ dataArray: 'M596.41-154.02v-67.89h141.68v-516.18H596.41v-68.13h209.81v652.2H596.41Zm-442.39 0v-652.2h209.57v68.13H221.91v516.18h141.68v67.89H154.02Z',
233
+ deviceHub: 'M115.93-115.93v-188.14h157.83l173.61-173.6v-143.74q-35.74-12.79-58.59-42.23-22.85-29.43-22.85-66.36 0-47.53 33.31-80.8 33.3-33.27 80.88-33.27 47.57 0 80.76 33.27 33.19 33.27 33.19 80.8 0 36.93-22.85 66.36-22.85 29.44-58.59 42.23v143.74l173.85 173.6h157.59v188.14H655.93v-121.5L480-413.37 304.07-237.43v121.5H115.93Z',
234
+ engineering: 'M36.26-114.26v-98.15q0-36.94 17.56-60.63 17.55-23.7 46.79-37.7 54-26 116.81-43.24 62.82-17.24 140.94-17.24t140.81 17q62.7 17 116.94 43 29 14.24 46.55 38.07 17.56 23.84 17.56 60.76v98.13H36.26Zm68.37-68.37h507.46v-29.13q0-15-8.5-24.14t-20.5-14.14q-43-19-95.52-36.03-52.53-17.02-129.21-17.02-76.69 0-129.21 17.14-52.52 17.15-95.52 35.96-12.24 4.95-20.62 14.09t-8.38 24.14v29.13Zm253.73-248.59q-68.51 0-112.31-44.61-43.79-44.61-43.79-110.17h-10q-8.75 0-15.21-6.48-6.46-6.47-6.46-15.25 0-8.67 6.46-15.15 6.46-6.47 15.21-6.47h10q0-41.19 21.32-74.51 21.31-33.31 55.94-53.08v39.15q0 6.33 4.45 10.71 4.44 4.38 10.79 4.38 6.76 0 11-4.36t4.24-10.57v-51.83q8.08-1.76 22.18-3.38 14.09-1.62 27.2-1.62 12.86 0 26.86 1.62t22.19 3.37v51.84q0 6.21 4.26 10.57 4.27 4.36 11.27 4.36 6.24 0 10.74-4.38t4.5-10.62v-39.24q34.39 19.77 54.7 53.07 20.32 33.31 20.32 74.52h10q8.75 0 15.21 6.46 6.46 6.45 6.46 15.19 0 8.74-6.46 15.22T524.22-586h-10q0 65.67-43.68 110.23-43.67 44.55-112.18 44.55Zm.11-68.37q40.81 0 64.21-24.37 23.41-24.36 23.41-63.48H270.63q0 39.05 23.37 63.45 23.36 24.4 64.47 24.4ZM358.48-182.63Z',
235
+ fileCopy: 'M782.63-162.63H269.8q-27.69 0-48.03-20.34-20.34-20.33-20.34-48.03v-626.37q0-27.6 20.34-47.86 20.34-20.27 48.03-20.27h345.37l235.59 235.59V-231q0 27.7-20.39 48.03-20.39 20.34-47.74 20.34Zm-202-496.74v-198H269.8V-231h512.83v-428.37h-202ZM141.43-34.5q-27.59 0-47.86-20.27Q73.3-75.03 73.3-102.63v-616.85h68.13v616.85h499.68v68.13H141.43ZM269.8-857.37v198-198V-231v-626.37Z',
236
+ filePresent: 'M222.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h357.89l226.18 226.18v517.89q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm0-68.13h515.7V-634H554v-183.85H222.15v675.7Zm258.11-80q58.5 0 99.12-41.13Q620-304.4 620-362.22v-139.21h-40v139.2q0 42.03-28.75 71.05-28.75 29.03-71.25 29.03-42 0-71-29.02t-29-71.04v-219.3q0-17.97 11.5-28.95 11.5-10.97 28.5-10.97 18 0 29 10.98t11 28.96v199.34h40v-199.21q0-33.63-23.08-56.85-23.07-23.22-56.57-23.22-33.59 0-56.97 23.21Q340-615 340-581.37v219.18q0 57.79 41.2 98.91 41.21 41.13 99.06 41.13Zm-258.11-595.7V-634v-183.85 675.7-675.7Z',
237
+ forum: 'M890.28-70 729.61-230.67H305.02q-28.35 0-48.24-19.96-19.89-19.97-19.89-48.41v-80h436.89q28.1 0 48.12-19.89 20.01-19.9 20.01-48.24v-276.66h80q28.45 0 48.41 19.96 19.96 19.97 19.96 48.41V-70ZM138.09-440.54l66.63-66.63h409.06v-315.46H138.09v382.09ZM69.72-276.17v-546.46q0-28.45 19.96-48.41Q109.64-891 138.09-891h475.69q28.1 0 48.12 19.96 20.01 19.96 20.01 48.41v315.46q0 28.34-20.01 48.24-20.02 19.89-48.12 19.89H232.59L69.72-276.17Zm68.37-231v-315.46 315.46Z',
238
+ history: 'M476.77-114.02q-151.88 0-257.6-107.16Q113.45-328.33 113.78-481h68.13q.28 124.12 85.53 211.48 85.24 87.37 209.32 87.37 125.81 0 213.33-88.36 87.52-88.36 87.52-214.45 0-123.08-88.37-207.99-88.38-84.9-212.48-84.9-66.09 0-124.15 29.45-58.07 29.44-101.35 78.29h99.98V-607H137.46v-212.54h62.63v103.37q52.71-60.53 124.45-95.29 71.74-34.76 152.22-34.76 76.2 0 143.27 28.6 67.08 28.6 117.47 77.94 50.4 49.34 79.32 115.41Q845.74-558.2 845.74-482q0 76.2-28.92 143.27-28.92 67.07-79.32 116.91-50.39 49.84-117.47 78.82-67.07 28.98-143.26 28.98ZM603.8-315.57l-154-152V-683h62.63v189l136.53 133.28-45.16 45.15Z',
239
+ hourglassEmpty: 'M310.15-142.15h339.7V-267q0-71.04-49.4-119.95-49.41-48.9-120.45-48.9t-120.45 48.9q-49.4 48.91-49.4 119.95v124.85Zm169.85-382q71.04 0 120.45-49.4 49.4-49.41 49.4-120.45v-123.85h-339.7V-694q0 71.04 49.4 120.45 49.41 49.4 120.45 49.4ZM154.02-74.02v-68.13h88V-267q0-70.28 38.93-128.04Q319.87-452.8 384.43-480q-64.56-28.2-103.48-85.96-38.93-57.76-38.93-128.04v-123.85h-88v-68.37h652.2v68.37h-88V-694q0 70.28-38.93 128.04Q640.37-508.2 575.8-480q64.57 27.2 103.49 84.96 38.93 57.76 38.93 128.04v124.85h88v68.13h-652.2Z',
240
+ hub: 'M232.55-31.87q-49.64 0-84.44-34.94-34.81-34.94-34.81-84.57 0-49.64 34.87-84.45 34.86-34.8 84.4-34.8 13.93 0 25.09 2.38 11.15 2.38 21.86 7.14l81.65-102.65q-18.28-22.76-28.28-52.02t-5.24-60.45l-116.93-40.86q-15.48 25.24-40.87 39.48-25.39 14.24-58.48 14.24-49.63 0-84.57-34.86-34.93-34.87-34.93-84.4 0-49.63 34.94-84.69 34.94-35.05 84.57-35.05q49.64 0 84.45 35.05 34.8 35.06 34.8 84.73v3.24l117.7 42q18-31.52 43.38-48.4 25.38-16.88 55.66-24.21v-125.08q-39-11.24-62.94-44.44-23.93-33.19-23.93-70.67 0-49.55 34.94-84.6t84.57-35.05q49.64 0 84.57 35.05 34.92 35.05 34.92 84.6 0 37.48-24.32 70.67-24.31 33.2-62.55 44.44v125.17q30.28 7.24 56.16 24.24 25.88 17 44.22 48.28l116.36-42v-3.28q0-49.63 34.86-84.69 34.87-35.05 84.4-35.05 49.63 0 84.69 35.06 35.05 35.06 35.05 84.69 0 49.64-35.05 84.45-35.06 34.8-84.77 34.8-32.97 0-58.88-14.24-25.91-14.24-40.63-39.72l-116.69 41q4.28 31.53-4.98 60.67-9.26 29.14-28.54 51.9l81.89 103.13q10.7-5 21.74-7.5t24.54-2.5q50.47 0 85.2 34.86 34.73 34.87 34.73 84.4 0 49.63-34.98 84.57-34.98 34.93-84.52 34.93-49.63 0-84.56-34.87-34.94-34.88-34.94-84.7 0-20.7 5.62-37.39t15.62-31.93l-81.41-102.41q-32.13 16.28-68.32 16.28-36.2 0-67.96-16.28l-80.65 103.41q10 15.24 15.62 31.43 5.62 16.19 5.62 36.89 0 49.82-34.94 84.7-34.94 34.87-84.58 34.87ZM480-460Z',
241
+ integration: 'M359.35-114.02H180q-26.47 0-46.22-19.76-19.76-19.75-19.76-46.22v-179.35q41.85-4.76 71.68-33.51 29.82-28.76 29.82-70.11 0-41.36-29.82-70.14-29.83-28.78-71.68-33.78V-746q0-26.4 19.76-46.31 19.75-19.91 46.22-19.91h171.74q12.91-40.95 42.73-68.07 29.81-27.12 70.53-27.12t70.53 27.12q29.82 27.12 42.73 68.07H746q26.4 0 46.31 19.91 19.91 19.91 19.91 46.31v167.74q40.95 12.91 66.57 44.73 25.62 31.81 25.62 72.53t-25.62 69.03q-25.62 28.32-66.57 41.23V-180q0 26.47-19.91 46.22-19.91 19.76-46.31 19.76H566.89q-5.24-46.81-34.78-75.47-29.54-28.66-69.17-28.66-39.62 0-69.11 28.66-29.48 28.66-34.48 75.47ZM465-461Z',
242
+ leaderboard: 'M142.15-182.15h180.07v-355.7H142.15v355.7Zm248.2 0h179.3v-595.7h-179.3v595.7Zm247.43 0h180.07v-275.7H637.78v275.7ZM74.02-114.02v-492.2h248.2v-240h315.56v320h248.44v412.2H74.02Z',
243
+ loop: 'M360-118.26 311.26-166l70.17-70.17h-31.8q-115.28-1.92-194.49-84.99Q75.93-404.24 75.93-520q0-117.67 81.7-200.87T357-804.07h246q117.67 0 199.37 83.2T884.07-520q0 118.43-81.98 201.25t-199.94 82.82v-68.14q89.61 0 151.7-62.92 62.08-62.92 62.08-153.01 0-89.57-61.3-152.75-61.3-63.18-150.63-63.18H356q-89.33 0-150.63 63.18T144.07-520q0 86.93 58.95 149.4 58.96 62.47 145.41 64.14h31.13L312.02-374 360-421.98l151.98 151.74L360-118.26Z',
244
+ newFile: 'M450-232.09h60v-129h130v-60H510v-130h-60v130H320v60h130v129ZM222.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h361.48l222.59 222.59v521.48q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm326.7-557.83v-186h-326.7v675.7h515.7v-489.7h-189Zm-326.7-186v186-186 675.7-675.7Z',
245
+ pieChart: 'M514.07-514.07h301.82q-11.24-118.65-96.71-206.11-85.46-87.47-205.11-95.71v301.82Zm-68.14 369.96v-671.78q-128.6 12.19-216.19 109-87.59 96.8-87.59 226.89 0 130.09 87.59 226.89 87.59 96.81 216.19 109Zm68.14 0q119.65-8.48 205-95.82 85.34-87.35 96.82-206H514.07v301.82ZM480-480Zm.03 405.98q-84.2 0-158.29-31.86-74.09-31.86-129.04-86.82-54.96-54.95-86.82-129.02-31.86-74.06-31.86-158.27 0-84.21 31.86-158.28 31.86-74.08 86.79-129.05 54.92-54.97 129.02-86.93 74.09-31.97 158.33-31.97 84.41 0 158.44 32 74.02 31.99 128.91 86.81 54.89 54.82 86.87 128.87Q886.22-564.5 886.22-480q0 84.51-32.01 158.57-32.01 74.07-86.88 128.86-54.87 54.79-128.96 86.67-74.1 31.88-158.34 31.88Z',
246
+ public: 'M480.21-74.02Q396-74.02 321.95-106q-74.06-31.98-129.03-86.87-54.97-54.88-86.93-128.92-31.97-74.04-31.97-158.22 0-84.19 31.97-158.21 31.96-74.02 86.93-128.91 54.97-54.89 129.06-86.99 74.08-32.1 158.31-32.1 84.24 0 158.18 32.1 73.95 32.1 128.87 86.94 54.92 54.83 86.9 128.9 31.98 74.06 31.98 158.27 0 84.21-31.96 158.25-31.95 74.05-86.9 128.96-54.96 54.92-129 86.85-74.04 31.93-158.15 31.93Zm-42.73-69.13v-81.76q-35 0-58.77-25.86-23.76-25.86-23.76-60.66v-43.77L151.39-558.76q-5 20-7 39.26-2 19.26-2 39.13 0 129.1 83.9 225.78 83.91 96.68 211.19 111.44Zm292.11-107.28q43.74-47.53 66-106.84 22.26-59.31 22.26-123.11 0-105.23-57.52-191.09-57.53-85.86-153.81-125.62v17.76q0 34.71-24.03 60.5-24.04 25.79-58.74 25.79h-86.27v86.45q0 17.07-13.5 27.95-13.5 10.88-30.57 10.88H311.2v87.28h256.37q16.9 0 27.92 13.04 11.03 13.03 11.03 29.9v126.11h42.52q28.76 0 50.67 17t29.88 44Z',
247
+ publish: 'M445.93-154.02v-359.52l-118.56 118.8-48.98-48.5L480-644.85l201.61 201.61-48.98 48.5-118.56-118.8v359.52h-68.14ZM154.02-594.85v-143q0-27.58 20.27-47.98 20.26-20.39 47.86-20.39h515.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v143h-68.37v-143h-515.7v143h-68.13Z',
248
+ rssFeed: 'M190.41-114.02q-31.67 0-54.03-22.59t-22.36-54.32q0-31.72 22.48-54.2 22.48-22.48 54.04-22.48 31.76 0 54.42 22.52 22.65 22.53 22.65 54.32t-22.68 54.27q-22.67 22.48-54.52 22.48Zm527.48 0q0-125.65-47.07-234.77-47.08-109.12-129.87-192.04-83.04-82.67-192.23-129.75-109.2-47.07-234.7-47.07v-95.74q145.83 0 272.39 54.53 126.55 54.53 222.24 150.21 95.68 95.69 150.21 222.24 54.53 126.56 54.53 272.39h-95.5Zm-269 0q0-70.48-26.04-132.56-26.03-62.07-71.68-109.59-45.47-47.24-106.11-73.98-60.64-26.74-131.04-26.74v-95.5q90.74 0 168.76 34.22 78.02 34.21 136.36 94.21 58.34 60.01 91.92 139.6 33.57 79.59 33.57 170.34h-95.74Z',
249
+ schema: 'M153.3-29v-231h100v-104.5h-100v-231h100V-700h-100v-231h269.33v231h-100v104.5h100v81.43h154.74v-81.43h269.56v231H577.37v-81.43H422.63v81.43h-100V-260h100v231H153.3Zm68.13-68.37H354.5v-94.5H221.43v94.5Zm0-335.26H354.5v-94.74H221.43v94.74Zm424.07 0h133.07v-94.74H645.5v94.74ZM221.43-768.37H354.5v-94.26H221.43v94.26Z',
250
+ showChart: 'M126-214.26 74.26-266 380-571.74l159.76 160.52 298-335 47.98 46.74-345.26 390.46L380-468.26l-254 254Z',
251
+ sms: 'M303.16-520.85q17.93 0 30.02-12.12 12.1-12.13 12.1-30.06t-12.12-30.02q-12.13-12.1-30.06-12.1t-30.02 12.12q-12.1 12.13-12.1 30.06t12.13 30.02q12.12 12.1 30.05 12.1Zm179.87 0q17.93 0 30.02-12.12 12.1-12.13 12.1-30.06t-12.12-30.02q-12.13-12.1-30.06-12.1t-30.02 12.12q-12.1 12.13-12.1 30.06t12.12 30.02q12.13 12.1 30.06 12.1Zm172.87 0q17.93 0 30.02-12.12 12.1-12.13 12.1-30.06t-12.13-30.02q-12.12-12.1-30.05-12.1t-30.02 12.12q-12.1 12.13-12.1 30.06t12.12 30.02q12.13 12.1 30.06 12.1ZM74.02-74.02v-743.83q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h675.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v515.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27H234.02l-160 160Zm134-228.13h609.83v-515.7h-675.7v587.57l65.87-71.87Zm-65.87 0v-515.7 515.7Z',
252
+ source: 'M74.5-111.87v-675.5l200.5-130 200.5 130v109.74h410v565.76h-811Zm65.5-65.5h105v-105H140v105Zm0-165h105v-105H140v105Zm0-165h105v-105H140v105Zm0-165h105v-105H140v105Zm165 0h105v-105H305v105Zm0 495h515v-435H305v435Zm245-270v-60h165v60H550Zm0 165v-60h165v60H550Zm-140-165v-60h60v60h-60Zm0 165v-60h60v60h-60Z',
253
+ swapHoriz: 'M272.76-154.02 74.02-352.76 272.76-551.5l47.74 47.74-116.7 116.93h306.68v68.37H203.8l116.7 116.7-47.74 47.74Zm414.48-254.72-47.74-47.74 116.93-116.69H449.76v-68.37h306.67L639.5-758.48l47.74-47.74 198.98 198.74-198.98 198.74Z',
254
+ syncAlt: 'M273.39-106.85 74.02-306.46l200.37-200.37 47.98 47.74L203.8-340.52h642.42v68.37H203.8l117.57 117.56-47.98 47.74Zm413.22-346.32-47.74-47.74 117.56-117.57H114.02v-68.37h642.41l-118.56-118.8 47.74-47.74 200.61 200.61-199.61 199.61Z',
255
+ taskAlt: 'M480.12-74.02q-86.32 0-160.51-31t-128.89-85.7q-54.7-54.7-85.7-128.89-31-74.19-31-160.51 0-85.31 30.94-159.4t85.7-128.9q54.76-54.8 128.95-86.3T480-886.22q75 0 140 23.65t117.48 65.4l-49.46 49.21q-42.8-33.32-95.27-51.61-52.46-18.28-112.75-18.28-144.11 0-240.98 96.74-96.87 96.74-96.87 241.07 0 144.32 96.86 241.11 96.86 96.78 240.95 96.78 144.08 0 240.99-96.76 96.9-96.75 96.9-241.09 0-28.88-4.38-56.27-4.38-27.38-12.9-53.19l52.93-53.17q16.24 37.72 24.48 78.28 8.24 40.57 8.24 84.17 0 86.38-31.5 160.57t-86.3 128.95q-54.81 54.76-128.9 85.7-74.09 30.94-159.4 30.94Zm-59.6-220.39L252.89-463.04l49.78-50.03 117.85 117.85L836.2-810.89l51.02 50.02-466.7 466.46Z',
256
+ trendingUp: 'm122.76-234.74-48.74-48.74 298.94-297.69 167 167 231.91-232.4H647.02v-68.36h239.2v239.19h-67.37v-121.09L538.96-316.7l-167-167-249.2 248.96Z',
257
+ update: 'M483.19-114.02q-76.07 0-143.3-28.98-67.24-28.98-117.46-78.82-50.21-49.83-79.31-116.91-29.1-67.07-29.1-143.27 0-76.2 29.1-142.27 29.1-66.08 79.31-115.41 50.22-49.34 117.47-77.94 67.25-28.6 143.34-28.6 80.24 0 151.98 34.76t124.69 95.29v-103.37h62.63V-607H608.76v-63.11h99.98q-43.59-48.91-101.62-78.32-58.03-29.42-123.88-29.42-124.28 0-212.57 84.86-88.28 84.86-88.28 207.95 0 126.08 87.37 214.49 87.38 88.4 213.48 88.4 123.8 0 209.18-87.37 85.37-87.36 85.67-211.48h68.13q0 152.63-105.68 259.8-105.67 107.18-257.35 107.18ZM603.8-315.57l-154-152V-683h62.63v189l136.53 133.28-45.16 45.15Z',
258
+ uploadFile: 'M452-203.43h60v-201.96l82.48 82.48 42-42L480-517.15 325.76-362.91l42 42L452-405.39v201.96ZM222.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h361.48l222.59 222.59v521.48q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm326.7-557.83v-186h-326.7v675.7h515.7v-489.7h-189Zm-326.7-186v186-186 675.7-675.7Z',
259
+ // ---- Aliases (platform names that map to existing core icons) ----
260
+ adminPanel: 'M480-73.78q-142.59-35.67-234.27-164.87-91.69-129.2-91.69-283.27v-242.26L480-886.22l326.22 122.05V-522q0 80.87-22.94 158.57-22.93 77.69-76.93 143.69l-144.31-138.3q-18.76 10.52-39.68 17.28Q501.44-334 480-334q-62 0-105.5-43T331-482.5q0-62.5 43.5-106T480-632q62 0 105.5 43.5T629-482q0 20.76-5.7 41.52t-18.34 37.28l85.61 81.85q24-42.52 35.64-94.66 11.64-52.14 11.64-105.94v-196.86L480-812.61l-257.85 93.92v196.65q0 130.08 72.02 234.51Q366.2-183.11 480.2-143.91q27.6-7.76 67.67-31.81 40.06-24.04 62.87-46.32l48.22 48.74q-35.24 32-84.22 60.38Q525.76-84.54 480-73.78Zm.24-322.85q35.56 0 60.85-24.81 25.28-24.82 25.28-61.09t-25.52-61.56q-25.52-25.28-61.09-25.28-35.56 0-60.85 25.31-25.28 25.32-25.28 61.59t25.52 61.06q25.52 24.78 61.09 24.78Zm2.35-82.83Z',
261
+ ai: 'M352.39-107.15 307-253.85l-148.85-44.54 148.85-44.78L352.39-490l45.15 147.43L544.63-298.4l-147.09 44.56-45.15 146.69Zm370-290.85-28.52-92.39-94.24-28.24 94.24-28.48 28.52-92.15 28.28 92.15 94.72 28.48-94.72 28.24-28.28 92.39ZM192.15-502.52l-17.76-58.52-58.52-18.72 58.52-17.48 17.76-59.24 18.48 59.24 58.52 17.48-58.52 18.72-18.48 58.52Z',
262
+ lockClosed: 'M242.87-72.59q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73h33.54v-73.06q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87Zm0-91h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM367.41-648.85h225.18v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26v73.06ZM242.87-163.59v-394.26 394.26Z',
263
+ lockOpened: 'M242.87-648.85h349.72v-73.06q0-47.21-32.73-80.26-32.73-33.05-79.86-33.05t-79.86 33.05q-32.73 33.05-32.73 80.26h-91q0-84.92 59.46-144.61 59.46-59.7 144.13-59.7 84.67 0 144.13 59.7 59.46 59.69 59.46 144.61v73.06h33.54q37.54 0 64.27 26.73 26.73 26.73 26.73 64.27v394.26q0 37.54-26.73 64.27-26.73 26.73-64.27 26.73H242.87q-37.54 0-64.27-26.73-26.73-26.73-26.73-64.27v-394.26q0-37.54 26.73-64.27 26.73-26.73 64.27-26.73Zm0 485.26h474.26v-394.26H242.87v394.26ZM536.5-304.22q23.5-23.5 23.5-56.5t-23.5-56.5q-23.5-23.5-56.5-23.5t-56.5 23.5q-23.5 23.5-23.5 56.5t23.5 56.5q23.5 23.5 56.5 23.5t56.5-23.5ZM242.87-163.59v-394.26 394.26Z',
264
+ insights: 'M285.2-277h60v-205h-60v205Zm329.84 0h60v-420h-60v420ZM450-277h60v-118h-60v118Zm0-205h60v-60h-60v60ZM182.15-114.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-595.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h595.7q27.7 0 48.03 20.34 20.34 20.33 20.34 48.03v595.7q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-595.7Zm0-68.13h595.7v-595.7h-595.7v595.7Zm0-595.7v595.7-595.7Z',
265
+ file: 'M222.15-74.02q-27.6 0-47.86-20.27-20.27-20.26-20.27-47.86v-675.7q0-27.7 20.27-48.03 20.26-20.34 47.86-20.34h357.89l226.18 226.18v517.89q0 27.6-20.34 47.86-20.33 20.27-48.03 20.27h-515.7Zm0-68.13h515.7V-634H554v-183.85H222.15v675.7Zm0-675.7V-634v-183.85 675.7-675.7Z',
266
+ outlinedSettings: 'M370-74.02l-16-127.48q-17-6.76-34.5-16.5T287.5-237l-118 53-110-192 104-77q-1-8-1.5-20.5t-.5-20.5q0-8.76.5-21.38T163-536l-104-77 110-192 118 53q14.5-8.98 33.18-19.49T355-787.5l16-126.48h220l16 126.72q17 6.76 34.5 16.5T674-753l118-53 110 192-104 77q1 8 1.5 20.5t.5 20.5q0 8-.5 20.5T798-455l104 77-110 192-118-53q-14.5 9-32 19.5T607-202.5L591-74.02H370ZM480-330q63 0 106.5-43.5T630-480q0-63-43.5-106.5T480-630q-63 0-106.5 43.5T330-480q0 63 43.5 106.5T480-330Z',
267
+ scheduled: 'M573.61-114.02q-97.63 0-165.84-68.12-68.22-68.12-68.22-165.61 0-97.48 68.22-165.6 68.21-68.12 165.84-68.12 97.62 0 165.59 68.12 67.98 68.12 67.98 165.6 0 97.49-67.98 165.61-67.97 68.12-165.59 68.12ZM114.02-580.83v-68.14h233.13v68.14H114.02ZM573.8-182.15q70.2 0 119.74-49.35 49.53-49.35 49.53-119.55t-49.72-120.16q-49.72-49.96-119.92-49.96t-119.55 49.78q-49.35 49.77-49.35 120.48 0 70.48 49.53 119.62 49.54 49.14 119.74 49.14Zm48.72-72.81L573.8-304.2v-111.41h43.72V-321l37.72 37.72-32.72 28.32ZM74.02-419.63v-68.14h188.13v68.14H74.02Z',
268
+ watchLater: 'M573.61-114.02q-97.63 0-165.84-68.12-68.22-68.12-68.22-165.61 0-97.48 68.22-165.6 68.21-68.12 165.84-68.12 97.62 0 165.59 68.12 67.98 68.12 67.98 165.6 0 97.49-67.98 165.61-67.97 68.12-165.59 68.12ZM114.02-580.83v-68.14h233.13v68.14H114.02ZM573.8-182.15q70.2 0 119.74-49.35 49.53-49.35 49.53-119.55t-49.72-120.16q-49.72-49.96-119.92-49.96t-119.55 49.78q-49.35 49.77-49.35 120.48 0 70.48 49.53 119.62 49.54 49.14 119.74 49.14Zm48.72-72.81L573.8-304.2v-111.41h43.72V-321l37.72 37.72-32.72 28.32ZM74.02-419.63v-68.14h188.13v68.14H74.02Z',
218
269
  };
219
270
  /** All valid icon names (keys of NODE_ICON_PATHS) */
220
271
  export const VALID_NODE_ICONS = Object.keys(NODE_ICON_PATHS);
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.32.2";
1
+ export declare const VERSION = "0.33.0";
2
2
  //# sourceMappingURL=generated-version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by scripts/generate-version.ts — do not edit manually
2
- export const VERSION = '0.32.2';
2
+ export const VERSION = '0.33.0';
3
3
  //# sourceMappingURL=generated-version.js.map
@@ -994,15 +994,17 @@ export class JSDocParser {
994
994
  */
995
995
  parsePathTag(tag, config, warnings) {
996
996
  const comment = tag.getCommentText() || '';
997
- const result = parsePathLine(`@path ${comment}`, warnings);
998
- if (!result) {
997
+ const results = parsePathLine(`@path ${comment}`, warnings);
998
+ if (!results) {
999
999
  warnings.push(`Invalid @path tag format: ${comment}`);
1000
1000
  return;
1001
1001
  }
1002
1002
  config.paths = config.paths || [];
1003
- config.paths.push({
1004
- steps: result.steps,
1005
- });
1003
+ for (const result of results) {
1004
+ config.paths.push({
1005
+ steps: result.steps,
1006
+ });
1007
+ }
1006
1008
  }
1007
1009
  parseFanOutTag(tag, config, warnings) {
1008
1010
  const comment = tag.getCommentText() || '';
@@ -5,6 +5,7 @@ export { registerQueryTools } from './tools-query.js';
5
5
  export { registerTemplateTools } from './tools-template.js';
6
6
  export { registerPatternTools } from './tools-pattern.js';
7
7
  export { registerDebugTools } from './tools-debug.js';
8
+ export { registerResourceTools } from './tools-resources.js';
8
9
  export { registerPrompts } from './prompts.js';
9
10
  export { startMcpServer, mcpServerCommand } from './server.js';
10
11
  //# sourceMappingURL=index.d.ts.map
package/dist/mcp/index.js CHANGED
@@ -4,6 +4,7 @@ export { registerQueryTools } from './tools-query.js';
4
4
  export { registerTemplateTools } from './tools-template.js';
5
5
  export { registerPatternTools } from './tools-pattern.js';
6
6
  export { registerDebugTools } from './tools-debug.js';
7
+ export { registerResourceTools } from './tools-resources.js';
7
8
  export { registerPrompts } from './prompts.js';
8
9
  export { startMcpServer, mcpServerCommand } from './server.js';
9
10
  //# sourceMappingURL=index.js.map
@@ -12,6 +12,7 @@ import { registerDocsTools } from './tools-docs.js';
12
12
  import { registerModelTools } from './tools-model.js';
13
13
  import { registerDebugTools } from './tools-debug.js';
14
14
  import { registerContextTools } from './tools-context.js';
15
+ import { registerResourceTools } from './tools-resources.js';
15
16
  import { registerPrompts } from './prompts.js';
16
17
  import { registerPackMcpTools } from './pack-tools.js';
17
18
  export async function startMcpServer(options) {
@@ -31,6 +32,7 @@ export async function startMcpServer(options) {
31
32
  registerModelTools(mcp);
32
33
  registerDebugTools(mcp);
33
34
  registerContextTools(mcp);
35
+ registerResourceTools(mcp);
34
36
  registerPrompts(mcp);
35
37
  await registerPackMcpTools(mcp);
36
38
  // Connect transport (only in stdio MCP mode)
@@ -16,7 +16,7 @@ export function registerExportTools(mcp) {
16
16
  target: z
17
17
  .string()
18
18
  .describe('Deployment target platform. Run with --list-targets to see installed targets.'),
19
- outputDir: z.string().describe('Output directory for generated files'),
19
+ outputDir: z.string().optional().describe('Output directory for generated files (default: ./dist relative to workflow)'),
20
20
  serviceName: z
21
21
  .string()
22
22
  .optional()
@@ -44,7 +44,7 @@ export function registerExportTools(mcp) {
44
44
  }, async (args) => {
45
45
  try {
46
46
  const filePath = path.resolve(args.filePath);
47
- const outputDir = path.resolve(args.outputDir);
47
+ const outputDir = path.resolve(args.outputDir || path.join(path.dirname(filePath), 'dist'));
48
48
  const preview = args.preview ?? false;
49
49
  const includeDocs = args.includeDocs ?? true;
50
50
  // 1. Validate file exists
@@ -62,15 +62,34 @@ export function registerModelTools(mcp) {
62
62
  lines.push(`declare function ${step.name}(${params}): ${returnType};`);
63
63
  lines.push('');
64
64
  }
65
- // Parse the flow string — use full function names as instance IDs
66
- const flowSteps = args.flow
67
- .split('->')
68
- .map((s) => s.trim())
69
- .filter(Boolean);
70
65
  // Build @node annotations using full name as both ID and type
71
66
  const nodeAnnotations = args.steps.map((step) => `@node ${step.name} ${step.name}`);
72
- // @path uses the same full names directly from the flow string
73
- const pathAnnotation = `@path ${flowSteps.join(' -> ')}`;
67
+ // Split comma-separated flow into separate @path annotations
68
+ const pathAnnotations = args.flow.split(',').map((segment) => {
69
+ const steps = segment
70
+ .split('->')
71
+ .map((s) => s.trim())
72
+ .filter(Boolean);
73
+ return `@path ${steps.join(' -> ')}`;
74
+ });
75
+ // Generate @connect annotations for DATA ports between adjacent steps in the flow
76
+ const stepMap = new Map(args.steps.map((s) => [s.name, s]));
77
+ const connectAnnotations = [];
78
+ for (const segment of args.flow.split(',')) {
79
+ const flowNodes = segment.split('->').map((s) => s.trim()).filter(Boolean);
80
+ for (let i = 0; i < flowNodes.length - 1; i++) {
81
+ const fromStep = stepMap.get(flowNodes[i]);
82
+ const toStep = stepMap.get(flowNodes[i + 1]);
83
+ if (!fromStep || !toStep)
84
+ continue;
85
+ // Connect matching output->input port names
86
+ for (const outputName of Object.keys(fromStep.outputs)) {
87
+ if (outputName in toStep.inputs) {
88
+ connectAnnotations.push(`@connect ${fromStep.name}.${outputName} -> ${toStep.name}.${outputName}`);
89
+ }
90
+ }
91
+ }
92
+ }
74
93
  // Generate workflow annotation
75
94
  const jsdocLines = ['/**'];
76
95
  if (args.description) {
@@ -81,9 +100,16 @@ export function registerModelTools(mcp) {
81
100
  for (const nodeAnn of nodeAnnotations) {
82
101
  jsdocLines.push(` * ${nodeAnn}`);
83
102
  }
84
- jsdocLines.push(` * ${pathAnnotation}`);
103
+ for (const pathAnn of pathAnnotations) {
104
+ jsdocLines.push(` * ${pathAnn}`);
105
+ }
106
+ for (const connAnn of connectAnnotations) {
107
+ jsdocLines.push(` * ${connAnn}`);
108
+ }
85
109
  jsdocLines.push(' */');
86
- jsdocLines.push(`export const ${args.name} = 'flowWeaver:draft';`);
110
+ jsdocLines.push(`export async function ${args.name}() {`);
111
+ jsdocLines.push(` // stub - compile to generate workflow body`);
112
+ jsdocLines.push(`}`);
87
113
  lines.push(...jsdocLines);
88
114
  lines.push('');
89
115
  const content = lines.join('\n');
@@ -66,6 +66,7 @@ export function registerQueryTools(mcp) {
66
66
  mcp.tool('fw_validate', 'Validate a workflow file and return errors/warnings.', {
67
67
  filePath: z.string().describe('Path to the workflow file'),
68
68
  workflowName: z.string().optional().describe('Specific workflow name'),
69
+ draft: z.boolean().optional().describe('Draft mode - suppresses STUB_NODE errors for unimplemented nodes (default: false)'),
69
70
  }, async (args) => {
70
71
  try {
71
72
  const filePath = path.resolve(args.filePath);
@@ -102,7 +103,7 @@ export function registerQueryTools(mcp) {
102
103
  warnings: parseResult.warnings,
103
104
  });
104
105
  }
105
- const result = validateWorkflow(parseResult.ast);
106
+ const result = validateWorkflow(parseResult.ast, args.draft ? { mode: 'draft' } : undefined);
106
107
  const errors = result.errors.map((e) => ({
107
108
  message: e.message,
108
109
  severity: e.type,
@@ -148,6 +149,7 @@ export function registerQueryTools(mcp) {
148
149
  typedEvents: z.boolean().optional().describe('Generate Zod event schemas from workflow @param annotations'),
149
150
  retries: z.number().int().min(0).optional().describe('Number of retries per function. Overrides @retries annotation.'),
150
151
  timeout: z.string().optional().describe('Function timeout (e.g. "30m", "1h"). Overrides @timeout annotation.'),
152
+ draft: z.boolean().optional().describe('Draft mode - suppresses STUB_NODE validation errors so partially implemented workflows can compile (default: false)'),
151
153
  }, async (args) => {
152
154
  try {
153
155
  const filePath = path.resolve(args.filePath);
@@ -210,6 +212,7 @@ export function registerQueryTools(mcp) {
210
212
  write: args.write ?? true,
211
213
  parse: { workflowName: args.workflowName },
212
214
  generate: { production: args.production ?? false },
215
+ validationMode: args.draft ? 'draft' : undefined,
213
216
  });
214
217
  return makeToolResult({
215
218
  outputFile: result.metadata?.outputFile ?? filePath,
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Resource Tool - fw_list_resources
3
+ *
4
+ * Returns available icons, colors, and annotation tags so AI agents
5
+ * can use valid values when building workflows.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ export declare function registerResourceTools(mcp: McpServer): void;
9
+ //# sourceMappingURL=tools-resources.d.ts.map
@@ -0,0 +1,41 @@
1
+ /**
2
+ * MCP Resource Tool - fw_list_resources
3
+ *
4
+ * Returns available icons, colors, and annotation tags so AI agents
5
+ * can use valid values when building workflows.
6
+ */
7
+ import { z } from 'zod';
8
+ import { VALID_NODE_ICONS } from '../diagram/theme.js';
9
+ import { VALID_NODE_COLORS, KNOWN_NODETYPE_TAGS, KNOWN_WORKFLOW_TAGS } from '../constants.js';
10
+ import { makeToolResult } from './response-utils.js';
11
+ export function registerResourceTools(mcp) {
12
+ mcp.tool('fw_list_resources', 'List available icons, colors, and annotation tags for use in workflow definitions.', {
13
+ type: z
14
+ .enum(['icons', 'colors', 'tags', 'all'])
15
+ .default('all')
16
+ .describe('Resource type to list (default: all)'),
17
+ }, async (args) => {
18
+ const type = args.type ?? 'all';
19
+ switch (type) {
20
+ case 'icons':
21
+ return makeToolResult([...VALID_NODE_ICONS]);
22
+ case 'colors':
23
+ return makeToolResult([...VALID_NODE_COLORS]);
24
+ case 'tags':
25
+ return makeToolResult({
26
+ nodeType: [...KNOWN_NODETYPE_TAGS],
27
+ workflow: [...KNOWN_WORKFLOW_TAGS],
28
+ });
29
+ case 'all':
30
+ return makeToolResult({
31
+ icons: [...VALID_NODE_ICONS],
32
+ colors: [...VALID_NODE_COLORS],
33
+ tags: {
34
+ nodeType: [...KNOWN_NODETYPE_TAGS],
35
+ workflow: [...KNOWN_WORKFLOW_TAGS],
36
+ },
37
+ });
38
+ }
39
+ });
40
+ }
41
+ //# sourceMappingURL=tools-resources.js.map
package/dist/validator.js CHANGED
@@ -829,6 +829,12 @@ export class WorkflowValidator {
829
829
  // Check for multiple connections to the same Exit port
830
830
  exitPortConnections.forEach((connections, portName) => {
831
831
  if (connections.length > 1) {
832
+ // Skip control flow ports — multiple STEP connections to Exit.onSuccess
833
+ // is the standard convergence pattern for parallel terminal nodes
834
+ const exitPort = workflow.exitPorts[portName];
835
+ if (exitPort?.isControlFlow || exitPort?.dataType === 'STEP') {
836
+ return;
837
+ }
832
838
  const sourceNodes = connections.map((c) => c.from.node);
833
839
  if (this.areMutuallyExclusive(sourceNodes, workflow, instanceMap)) {
834
840
  return; // Suppress — mutually exclusive branches
@@ -311,6 +311,22 @@ Use `:ok` or `:fail` suffixes to route through `onSuccess` or `onFailure`:
311
311
 
312
312
  Without a suffix, `:ok` (onSuccess) is the default. Duplicate connections from overlapping paths are automatically deduplicated.
313
313
 
314
+ ### Comma-Separated Paths
315
+
316
+ Multiple paths can be declared in a single `@path` tag using commas. This is equivalent to separate `@path` tags:
317
+
318
+ ```typescript
319
+ /**
320
+ * @flowWeaver workflow @autoConnect
321
+ * @node enrichCompany enrichCompany
322
+ * @node enrichContact enrichContact
323
+ * @node scoreLead scoreLead
324
+ * @path Start -> enrichCompany -> scoreLead -> Exit, Start -> enrichContact -> scoreLead
325
+ */
326
+ ```
327
+
328
+ This creates a parallel fork from Start to both `enrichCompany` and `enrichContact`, then both converge on `scoreLead`.
329
+
314
330
  ### Path Validation
315
331
 
316
332
  The sugar optimizer validates that all nodes referenced in `@path` exist and that the expected control-flow connections are still valid. Stale paths are automatically filtered during parse-regenerate round-trips.
@@ -276,12 +276,15 @@ The first form is the standard `node.port` reference with optional `:scope` suff
276
276
  ## @path
277
277
 
278
278
  ```
279
- pathTag ::= "@path" pathStep ( "->" pathStep )+
279
+ pathTag ::= "@path" pathSequence ( "," pathSequence )*
280
+ pathSequence ::= pathStep ( "->" pathStep )+
280
281
  pathStep ::= IDENTIFIER [ ":" ( "ok" | "fail" ) ]
281
282
  ```
282
283
 
283
284
  Declare a complete execution route through the graph with scope walking for data ports. Steps separated by `->`, each optionally suffixed with `:ok` (default) or `:fail` to select `onSuccess` or `onFailure`.
284
285
 
286
+ Multiple paths can be declared in a single `@path` tag using commas, or as separate `@path` tags. Both forms are equivalent.
287
+
285
288
  **Examples:**
286
289
 
287
290
  ```
@@ -289,10 +292,17 @@ Declare a complete execution route through the graph with scope walking for data
289
292
  @path Start -> validator:ok -> processor -> Exit
290
293
  ```
291
294
 
295
+ Comma-separated (equivalent to two `@path` tags):
296
+
297
+ ```
298
+ @path Start -> enrichCompany -> scoreLead -> Exit, Start -> enrichContact -> scoreLead
299
+ ```
300
+
292
301
  - `:ok` follows `onSuccess` (default when no suffix)
293
302
  - `:fail` follows `onFailure`
294
303
  - Data ports auto-resolve by walking backward through the path to the nearest ancestor with a same-name output port (scope walking)
295
304
  - Multiple `@path` lines can coexist; overlapping prefixes are deduplicated
305
+ - Comma-separated paths within a single `@path` are expanded to separate paths
296
306
  - Manual `@connect` lines can supplement for cross-named ports
297
307
 
298
308
  ## @position
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synergenius/flow-weaver",
3
- "version": "0.32.2",
3
+ "version": "0.33.0",
4
4
  "description": "Flow Weaver: deterministic TypeScript workflow compiler. Define workflows with JSDoc annotations, compile to standalone functions with zero runtime dependencies.",
5
5
  "private": false,
6
6
  "type": "module",