@bian-womp/spark-graph 0.2.16 → 0.2.18

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.
@@ -1 +1 @@
1
- {"version":3,"file":"GraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/builder/GraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEzE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEtC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB;IAuQhD,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY;IAI9D,UAAU,CACR,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC7D,EACD,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CAkC1C"}
1
+ {"version":3,"file":"GraphBuilder.d.ts","sourceRoot":"","sources":["../../../../src/builder/GraphBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EAGf,kBAAkB,EAEnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAEtC,QAAQ,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB;IAiRhD,KAAK,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,YAAY;IAI9D,UAAU,CACR,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC7D,EACD,UAAU,EAAE,MAAM,EAClB,WAAW,CAAC,EAAE,MAAM,GACnB,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;CAkC1C"}
@@ -76,11 +76,9 @@ export interface NodeTypeDescriptor<I extends Record<string, InputHandleDescript
76
76
  }) => {
77
77
  inputs?: Record<string, InputHandleDescriptor>;
78
78
  outputs?: Record<string, DataTypeId | DataTypeId[]>;
79
+ inputDefaults?: Record<string, unknown>;
79
80
  };
80
- inputDefaults?: Record<string, unknown> | ((ctx: {
81
- params?: Record<string, unknown>;
82
- environment: Record<string, unknown>;
83
- }) => Record<string, unknown>);
81
+ inputDefaults?: Record<string, unknown>;
84
82
  lifecycle?: {
85
83
  init?: (initial: Record<string, unknown>, ctx: NodeContext<State>) => void | Promise<void>;
86
84
  dispose?: (ctx: NodeContext<State>) => void;
@@ -89,6 +87,7 @@ export interface NodeTypeDescriptor<I extends Record<string, InputHandleDescript
89
87
  export type ResolvedHandles = {
90
88
  inputs: Record<string, InputHandleDescriptor>;
91
89
  outputs: Record<string, DataTypeId | DataTypeId[]>;
90
+ inputDefaults?: Record<string, unknown>;
92
91
  };
93
92
  export interface GraphNodeDefinition {
94
93
  nodeId: NodeInstanceId;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/misc/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,eAAe,CAAC;AA+IvB,wBAAgB,uBAAuB,IAAI,QAAQ,CA86BlD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,QA+BnD;AAqBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,QA6BvD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,6BAUrE"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/misc/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,KAAK,EAEV,eAAe,EAEhB,MAAM,eAAe,CAAC;AA+IvB,wBAAgB,uBAAuB,IAAI,QAAQ,CAq8BlD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,QA+BnD;AAqBD,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,QA6BvD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,6BAUrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../../../src/runtime/GraphRuntime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GraphRuntime.d.ts","sourceRoot":"","sources":["../../../../src/runtime/GraphRuntime.ts"],"names":[],"mappings":"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"}
package/lib/esm/index.js CHANGED
@@ -475,23 +475,20 @@ class GraphRuntime {
475
475
  }
476
476
  // Instantiate edges
477
477
  gr.edges = GraphRuntime.buildEdges(def, registry, gr.resolvedByNode);
478
- // After nodes and edges exist, seed registry- and graph-level defaults
478
+ // After nodes and edges exist, seed registry-, dynamic- and graph-level defaults
479
479
  for (const n of def.nodes) {
480
480
  const node = gr.nodes.get(n.nodeId);
481
481
  const desc = registry.nodes.get(n.typeId);
482
482
  if (!node || !desc)
483
483
  continue;
484
- // Resolve registry-level defaults (object or function)
485
- const regDefaults = typeof desc.inputDefaults === "function"
486
- ? desc.inputDefaults({
487
- params: n.params,
488
- environment: gr.environment,
489
- })
490
- : desc.inputDefaults ?? {};
484
+ // Resolve registry-level defaults and dynamic (resolved) defaults
485
+ const regDefaults = desc.inputDefaults ?? {};
486
+ const dynDefaults = gr.resolvedByNode.get(n.nodeId)?.inputDefaults ?? {};
491
487
  const graphDefaults = n.initialInputs ?? {};
492
- // Apply precedence: graph-level overrides registry-level
488
+ // Apply precedence: graph-level overrides dynamic, which overrides registry-level
493
489
  const merged = {
494
490
  ...regDefaults,
491
+ ...dynDefaults,
495
492
  ...graphDefaults,
496
493
  };
497
494
  for (const [handle, value] of Object.entries(merged)) {
@@ -913,10 +910,12 @@ class GraphRuntime {
913
910
  continue;
914
911
  const overrideInputs = n.resolvedHandles?.inputs;
915
912
  const overrideOutputs = n.resolvedHandles?.outputs;
913
+ const overrideDefaults = n.resolvedHandles?.inputDefaults;
916
914
  // Merge base with overrides (allow partial resolvedHandles)
917
915
  const inputs = { ...desc.inputs, ...overrideInputs };
918
916
  const outputs = { ...desc.outputs, ...overrideOutputs };
919
- out.set(n.nodeId, { inputs, outputs });
917
+ const inputDefaults = { ...desc.inputDefaults, ...overrideDefaults };
918
+ out.set(n.nodeId, { inputs, outputs, inputDefaults });
920
919
  }
921
920
  return out;
922
921
  }
@@ -1324,15 +1323,12 @@ class GraphRuntime {
1324
1323
  if (defNode) {
1325
1324
  const desc = registry.nodes.get(defNode.typeId);
1326
1325
  if (desc) {
1327
- const regDefaults = typeof desc.inputDefaults === "function"
1328
- ? desc.inputDefaults({
1329
- params: defNode.params,
1330
- environment: this.environment,
1331
- })
1332
- : desc.inputDefaults ?? {};
1326
+ const regDefaults = desc.inputDefaults ?? {};
1327
+ const dynDefaults = this.resolvedByNode.get(defNode.nodeId)?.inputDefaults ?? {};
1333
1328
  const graphDefaults = defNode.initialInputs ?? {};
1334
1329
  const merged = {
1335
1330
  ...regDefaults,
1331
+ ...dynDefaults,
1336
1332
  ...graphDefaults,
1337
1333
  };
1338
1334
  for (const h of Array.from(prevSet)) {
@@ -1404,6 +1400,34 @@ class GraphRuntime {
1404
1400
  }
1405
1401
  }
1406
1402
  }
1403
+ // Seed defaults for nodes (new or existing) where inputs are still undefined and not inbound
1404
+ for (const n of def.nodes) {
1405
+ const node = this.nodes.get(n.nodeId);
1406
+ const desc = registry.nodes.get(n.typeId);
1407
+ if (!node || !desc)
1408
+ continue;
1409
+ const regDefaults = desc.inputDefaults ?? {};
1410
+ const dynDefaults = this.resolvedByNode.get(n.nodeId)?.inputDefaults ?? {};
1411
+ const graphDefaults = n.initialInputs ?? {};
1412
+ const merged = {
1413
+ ...regDefaults,
1414
+ ...dynDefaults,
1415
+ ...graphDefaults,
1416
+ };
1417
+ const inboundSet = nextInbound.get(n.nodeId) ?? new Set();
1418
+ for (const [handle, value] of Object.entries(merged)) {
1419
+ if (value === undefined)
1420
+ continue;
1421
+ if (inboundSet.has(handle))
1422
+ continue;
1423
+ if (node.inputs[handle] !== undefined)
1424
+ continue;
1425
+ node.inputs[handle] =
1426
+ typeof structuredClone === "function"
1427
+ ? structuredClone(value)
1428
+ : JSON.parse(JSON.stringify(value));
1429
+ }
1430
+ }
1407
1431
  // Prune array bucket contributions for edges that no longer exist
1408
1432
  const validPerTarget = new Map();
1409
1433
  for (const ed of this.edges) {
@@ -1438,35 +1462,56 @@ class GraphBuilder {
1438
1462
  const issues = [];
1439
1463
  const nodeIds = new Set();
1440
1464
  const edgeIds = new Set();
1465
+ // Precompute effective handle maps (registry statics merged with per-node resolvedHandles)
1466
+ const nodeById = new Map();
1467
+ const effByNodeId = new Map();
1468
+ const getEffectiveHandles = (n) => {
1469
+ if (!n)
1470
+ return { inputs: {}, outputs: {} };
1471
+ const desc = this.registry.nodes.get(n.typeId);
1472
+ const resolved = n.resolvedHandles || {};
1473
+ const inputs = { ...desc?.inputs, ...resolved.inputs };
1474
+ const outputs = { ...desc?.outputs, ...resolved.outputs };
1475
+ return { inputs, outputs };
1476
+ };
1477
+ const normOut = (decl) => Array.isArray(decl) ? decl : decl ? [decl] : [];
1478
+ const inferEdgeType = (srcDeclared, dstDeclared, explicit) => {
1479
+ if (explicit)
1480
+ return explicit;
1481
+ if (Array.isArray(srcDeclared) && dstDeclared)
1482
+ return dstDeclared;
1483
+ if (srcDeclared)
1484
+ return Array.isArray(srcDeclared) ? srcDeclared[0] : srcDeclared;
1485
+ return undefined;
1486
+ };
1487
+ const canFlow = (from, to) => {
1488
+ if (!to || !from)
1489
+ return true;
1490
+ const arr = Array.isArray(from) ? from : [from];
1491
+ return arr.every((s) => s === to || !!this.registry.canCoerce(s, to));
1492
+ };
1493
+ const pushIssue = (level, code, message, data) => {
1494
+ issues.push({ level, code, message, data });
1495
+ };
1441
1496
  // nodes exist, ids unique, and categories registered
1442
1497
  for (const n of def.nodes) {
1443
1498
  if (nodeIds.has(n.nodeId)) {
1444
- issues.push({
1445
- level: "error",
1446
- code: "NODE_ID_DUP",
1447
- message: `Duplicate nodeId ${n.nodeId}`,
1448
- data: { nodeId: n.nodeId },
1499
+ pushIssue("error", "NODE_ID_DUP", `Duplicate nodeId ${n.nodeId}`, {
1500
+ nodeId: n.nodeId,
1449
1501
  });
1450
1502
  }
1451
1503
  else {
1452
1504
  nodeIds.add(n.nodeId);
1453
1505
  }
1506
+ nodeById.set(n.nodeId, n);
1507
+ effByNodeId.set(n.nodeId, getEffectiveHandles(n));
1454
1508
  const nodeType = this.registry.nodes.get(n.typeId);
1455
1509
  if (!nodeType) {
1456
- issues.push({
1457
- level: "error",
1458
- code: "NODE_TYPE_MISSING",
1459
- message: `Unknown node type ${n.typeId}`,
1460
- data: { typeId: n.typeId, nodeId: n.nodeId },
1461
- });
1510
+ pushIssue("error", "NODE_TYPE_MISSING", `Unknown node type ${n.typeId}`, { typeId: n.typeId, nodeId: n.nodeId });
1462
1511
  continue;
1463
1512
  }
1464
1513
  if (!this.registry.categories.has(nodeType.categoryId)) {
1465
- issues.push({
1466
- level: "error",
1467
- code: "CATEGORY_MISSING",
1468
- message: `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`,
1469
- });
1514
+ pushIssue("error", "CATEGORY_MISSING", `Unknown category ${nodeType.categoryId} for node type ${n.typeId}`);
1470
1515
  }
1471
1516
  }
1472
1517
  // edges validation: nodes exist, handles exist, type exists
@@ -1475,186 +1520,96 @@ class GraphBuilder {
1475
1520
  const inboundArrayOk = new Set();
1476
1521
  for (const e of def.edges) {
1477
1522
  if (edgeIds.has(e.id)) {
1478
- issues.push({
1479
- level: "error",
1480
- code: "EDGE_ID_DUP",
1481
- message: `Duplicate edge id ${e.id}`,
1482
- data: { edgeId: e.id },
1523
+ pushIssue("error", "EDGE_ID_DUP", `Duplicate edge id ${e.id}`, {
1524
+ edgeId: e.id,
1483
1525
  });
1484
1526
  }
1485
1527
  else {
1486
1528
  edgeIds.add(e.id);
1487
1529
  }
1488
- const srcNode = def.nodes.find((nn) => nn.nodeId === e.source.nodeId);
1489
- const dstNode = def.nodes.find((nn) => nn.nodeId === e.target.nodeId);
1530
+ const srcNode = nodeById.get(e.source.nodeId);
1531
+ const dstNode = nodeById.get(e.target.nodeId);
1490
1532
  if (!srcNode)
1491
- issues.push({
1492
- level: "error",
1493
- code: "EDGE_SOURCE_MISSING",
1494
- message: `Edge ${e.id} source node missing`,
1495
- data: { edgeId: e.id },
1533
+ pushIssue("error", "EDGE_SOURCE_MISSING", `Edge ${e.id} source node missing`, {
1534
+ edgeId: e.id,
1496
1535
  });
1497
1536
  if (!dstNode)
1498
- issues.push({
1499
- level: "error",
1500
- code: "EDGE_TARGET_MISSING",
1501
- message: `Edge ${e.id} target node missing`,
1502
- data: { edgeId: e.id },
1537
+ pushIssue("error", "EDGE_TARGET_MISSING", `Edge ${e.id} target node missing`, {
1538
+ edgeId: e.id,
1503
1539
  });
1504
- // Infer edge type when missing. For union sources, prefer target input type if available.
1505
- let effectiveTypeId = e.typeId;
1506
- let _srcDeclared;
1507
- let _dstDeclared;
1508
- if (srcNode) {
1509
- const srcType = this.registry.nodes.get(srcNode.typeId);
1510
- if (srcType)
1511
- _srcDeclared = srcType.outputs[e.source.handle];
1512
- }
1513
- if (dstNode) {
1514
- const dstType = this.registry.nodes.get(dstNode.typeId);
1515
- if (dstType)
1516
- _dstDeclared = getInputTypeId(dstType.inputs, e.target.handle);
1517
- }
1518
- if (!effectiveTypeId) {
1519
- if (Array.isArray(_srcDeclared) && _dstDeclared) {
1520
- // When source is a union and target input type is known, adopt the input type
1521
- // so validation checks are performed against the target, not an arbitrary variant.
1522
- effectiveTypeId = _dstDeclared;
1523
- }
1524
- else if (_srcDeclared) {
1525
- effectiveTypeId = Array.isArray(_srcDeclared)
1526
- ? _srcDeclared[0]
1527
- : _srcDeclared;
1528
- }
1529
- }
1540
+ // Effective handle declarations
1541
+ const srcEff = effByNodeId.get(e.source.nodeId) || {
1542
+ outputs: {},
1543
+ };
1544
+ const dstEff = effByNodeId.get(e.target.nodeId) || {
1545
+ inputs: {}};
1546
+ const _srcDeclared = srcNode
1547
+ ? srcEff.outputs[e.source.handle]
1548
+ : undefined;
1549
+ const _dstDeclared = dstNode
1550
+ ? getInputTypeId(dstEff.inputs, e.target.handle)
1551
+ : undefined;
1552
+ // Effective edge type
1553
+ const effectiveTypeId = inferEdgeType(_srcDeclared, _dstDeclared, e.typeId);
1530
1554
  const type = effectiveTypeId
1531
1555
  ? this.registry.types.get(effectiveTypeId)
1532
1556
  : undefined;
1533
1557
  if (!type) {
1534
- issues.push({
1535
- level: "error",
1536
- code: "TYPE_MISSING",
1537
- message: `Edge ${e.id} type missing or unknown`,
1538
- data: { edgeId: e.id },
1558
+ pushIssue("error", "TYPE_MISSING", `Edge ${e.id} type missing or unknown`, {
1559
+ edgeId: e.id,
1539
1560
  });
1540
1561
  }
1541
1562
  if (srcNode) {
1542
- const srcType = this.registry.nodes.get(srcNode.typeId);
1543
- if (srcType && !(e.source.handle in srcType.outputs)) {
1544
- issues.push({
1545
- level: "error",
1546
- code: "OUTPUT_MISSING",
1547
- message: `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`,
1548
- data: {
1549
- edgeId: e.id,
1550
- nodeId: srcNode.nodeId,
1551
- output: e.source.handle,
1552
- },
1553
- });
1563
+ if (!(e.source.handle in srcEff.outputs)) {
1564
+ pushIssue("error", "OUTPUT_MISSING", `Edge ${e.id} source output ${e.source.handle} missing on ${srcNode.typeId}`, { edgeId: e.id, nodeId: srcNode.nodeId, output: e.source.handle });
1554
1565
  }
1555
- if (srcType) {
1556
- const declared = srcType.outputs[e.source.handle];
1557
- const declaredArr = Array.isArray(declared)
1558
- ? declared
1559
- : declared
1560
- ? [declared]
1561
- : [];
1562
- if (declaredArr.length > 0 && effectiveTypeId) {
1563
- for (const s of declaredArr) {
1564
- if (s !== effectiveTypeId &&
1565
- !this.registry.canCoerce(s, effectiveTypeId)) {
1566
- issues.push({
1567
- level: "error",
1568
- code: "TYPE_MISMATCH_OUTPUT",
1569
- message: `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${srcNode.typeId}.${e.source.handle} (${s}) and no coercion exists`,
1570
- data: {
1571
- edgeId: e.id,
1572
- nodeId: srcNode.nodeId,
1573
- output: e.source.handle,
1574
- declared: s,
1575
- effectiveTypeId,
1576
- },
1577
- });
1578
- }
1579
- }
1580
- }
1566
+ const declaredArr = normOut(srcEff.outputs[e.source.handle]);
1567
+ if (declaredArr.length > 0 &&
1568
+ effectiveTypeId &&
1569
+ !canFlow(declaredArr, effectiveTypeId)) {
1570
+ pushIssue("error", "TYPE_MISMATCH_OUTPUT", `Edge ${e.id} type ${effectiveTypeId} mismatches source output ${srcNode.typeId}.${e.source.handle} (${declaredArr.join("|")}) and no coercion exists`, {
1571
+ edgeId: e.id,
1572
+ nodeId: srcNode.nodeId,
1573
+ output: e.source.handle,
1574
+ declared: declaredArr.join("|"),
1575
+ effectiveTypeId,
1576
+ });
1581
1577
  }
1582
1578
  }
1583
1579
  if (dstNode) {
1584
- const dstType = this.registry.nodes.get(dstNode.typeId);
1585
- if (dstType && !(e.target.handle in dstType.inputs)) {
1586
- issues.push({
1587
- level: "error",
1588
- code: "INPUT_MISSING",
1589
- message: `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`,
1590
- data: {
1591
- edgeId: e.id,
1592
- nodeId: dstNode.nodeId,
1593
- input: e.target.handle,
1594
- },
1595
- });
1580
+ if (!(e.target.handle in dstEff.inputs)) {
1581
+ pushIssue("error", "INPUT_MISSING", `Edge ${e.id} target input ${e.target.handle} missing on ${dstNode.typeId}`, { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle });
1582
+ }
1583
+ // Private inputs should not accept edges
1584
+ if (isInputPrivate(dstEff.inputs, e.target.handle)) {
1585
+ pushIssue("error", "INPUT_PRIVATE", `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`, { edgeId: e.id, nodeId: dstNode.nodeId, input: e.target.handle });
1596
1586
  }
1597
- if (dstType) {
1598
- // Private inputs should not accept edges
1599
- if (isInputPrivate(dstType.inputs, e.target.handle)) {
1600
- issues.push({
1601
- level: "error",
1602
- code: "INPUT_PRIVATE",
1603
- message: `Edge ${e.id} targets private input ${dstNode.typeId}.${e.target.handle}`,
1604
- data: {
1587
+ const declaredIn = getInputTypeId(dstEff.inputs, e.target.handle);
1588
+ if (declaredIn && effectiveTypeId) {
1589
+ if (srcNode) {
1590
+ const srcDeclared = srcEff.outputs[e.source.handle];
1591
+ const srcArr = normOut(srcDeclared).length
1592
+ ? normOut(srcDeclared)
1593
+ : [effectiveTypeId];
1594
+ if (!canFlow(srcArr, declaredIn)) {
1595
+ pushIssue("error", "TYPE_MISMATCH_INPUT", `Edge ${e.id} output type ${srcArr.join("|")} not convertible to target input ${dstNode.typeId}.${e.target.handle} (${declaredIn})`, {
1605
1596
  edgeId: e.id,
1606
1597
  nodeId: dstNode.nodeId,
1607
1598
  input: e.target.handle,
1608
- },
1609
- });
1610
- }
1611
- const declaredIn = getInputTypeId(dstType.inputs, e.target.handle);
1612
- if (declaredIn && effectiveTypeId) {
1613
- // If source is a union, ensure each variant can reach declaredIn
1614
- if (srcNode) {
1615
- const srcType = this.registry.nodes.get(srcNode.typeId);
1616
- const srcDeclared = srcType?.outputs[e.source.handle];
1617
- const srcArr = Array.isArray(srcDeclared)
1618
- ? srcDeclared
1619
- : srcDeclared
1620
- ? [srcDeclared]
1621
- : effectiveTypeId
1622
- ? [effectiveTypeId]
1623
- : [];
1624
- for (const s of srcArr) {
1625
- if (s !== declaredIn &&
1626
- !this.registry.canCoerce(s, declaredIn)) {
1627
- issues.push({
1628
- level: "error",
1629
- code: "TYPE_MISMATCH_INPUT",
1630
- message: `Edge ${e.id} output type ${s} not convertible to target input ${dstNode.typeId}.${e.target.handle} (${declaredIn})`,
1631
- data: {
1632
- edgeId: e.id,
1633
- nodeId: dstNode.nodeId,
1634
- input: e.target.handle,
1635
- declared: declaredIn,
1636
- effectiveTypeId: s,
1637
- },
1638
- });
1639
- }
1640
- }
1641
- }
1642
- else if (declaredIn !== effectiveTypeId &&
1643
- !this.registry.canCoerce(effectiveTypeId, declaredIn)) {
1644
- issues.push({
1645
- level: "error",
1646
- code: "TYPE_MISMATCH_INPUT",
1647
- message: `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`,
1648
- data: {
1649
- edgeId: e.id,
1650
- nodeId: dstNode.nodeId,
1651
- input: e.target.handle,
1652
- declared: declaredIn,
1653
- effectiveTypeId,
1654
- },
1599
+ declared: declaredIn,
1600
+ effectiveTypeId: srcArr.join("|"),
1655
1601
  });
1656
1602
  }
1657
1603
  }
1604
+ else if (!canFlow(effectiveTypeId, declaredIn)) {
1605
+ pushIssue("error", "TYPE_MISMATCH_INPUT", `Edge ${e.id} type ${effectiveTypeId} mismatches target input ${dstNode.typeId}.${e.target.handle} (${declaredIn}) and no coercion exists`, {
1606
+ edgeId: e.id,
1607
+ nodeId: dstNode.nodeId,
1608
+ input: e.target.handle,
1609
+ declared: declaredIn,
1610
+ effectiveTypeId,
1611
+ });
1612
+ }
1658
1613
  }
1659
1614
  }
1660
1615
  // Track multiple inbound edges targeting the same input handle
@@ -1662,10 +1617,7 @@ class GraphBuilder {
1662
1617
  inboundCounts.set(inboundKey, (inboundCounts.get(inboundKey) ?? 0) + 1);
1663
1618
  // If the target input is declared as an array type, allow multi-inbound (runtime will append)
1664
1619
  if (dstNode) {
1665
- const dstType = this.registry.nodes.get(dstNode.typeId);
1666
- const declaredIn = dstType
1667
- ? getInputTypeId(dstType.inputs, e.target.handle)
1668
- : undefined;
1620
+ const declaredIn = getInputTypeId((effByNodeId.get(dstNode.nodeId) || { inputs: {} }).inputs, e.target.handle);
1669
1621
  if (typeof declaredIn === "string" && declaredIn.endsWith("[]")) {
1670
1622
  inboundArrayOk.add(inboundKey);
1671
1623
  }
@@ -2687,6 +2639,30 @@ function setupBasicGraphRegistry() {
2687
2639
  return { Items: Array.from({ length }, (_, i) => ins[`Item${i}`]) };
2688
2640
  },
2689
2641
  });
2642
+ // Decompose array into dynamic item outputs
2643
+ registry.registerNode({
2644
+ id: "base.array.decompose",
2645
+ categoryId: "compute",
2646
+ inputs: { Items: "base.object" },
2647
+ outputs: {},
2648
+ resolveHandles: ({ inputs }) => {
2649
+ const maxLen = 64;
2650
+ const arr = Array.isArray(inputs?.Items) ? inputs?.Items : [];
2651
+ const n = Math.max(0, Math.min(maxLen, arr.length));
2652
+ const dyn = {};
2653
+ for (let i = 0; i < n; i++)
2654
+ dyn[`Item${i}`] = "base.object";
2655
+ return { outputs: dyn };
2656
+ },
2657
+ impl: (ins) => {
2658
+ const arr = Array.isArray(ins.Items) ? ins.Items : [];
2659
+ const out = {};
2660
+ const n = Math.max(0, Math.min(64, arr.length));
2661
+ for (let i = 0; i < n; i++)
2662
+ out[`Item${i}`] = arr[i];
2663
+ return out;
2664
+ },
2665
+ });
2690
2666
  // Select
2691
2667
  registry.registerNode({
2692
2668
  id: "base.select",