@synergenius/flow-weaver 0.13.1 → 0.13.3

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
@@ -1,4 +1,4 @@
1
- # @synergenius/flow-weaver
1
+ # Flow Weaver
2
2
 
3
3
  [![npm version](https://img.shields.io/npm/v/@synergenius/flow-weaver?style=flat)](https://www.npmjs.com/package/@synergenius/flow-weaver)
4
4
  [![npm downloads](https://img.shields.io/npm/dw/@synergenius/flow-weaver?style=flat)](https://www.npmjs.com/package/@synergenius/flow-weaver)
@@ -10,34 +10,82 @@
10
10
 
11
11
  **Build AI agent workflows visually. Ship them as your own code.**
12
12
 
13
- Design agent workflows in the Studio, in TypeScript, or let AI build them for you. Everything compiles to standalone functions you deploy anywhere, no runtime dependency on Flow Weaver.
13
+ Design agent workflows in the Studio, in TypeScript, or let AI build them for you. The compiler validates everything with 20+ rule categories. The output is standalone TypeScript you deploy anywhere, zero runtime dependency on Flow Weaver.
14
14
 
15
- ## Three Ways to Build
15
+ *Got an AGENTS.md or runbook? [Convert it to a typed workflow →](https://flowweaver.ai/services/md-converter)*
16
16
 
17
- **Studio.**
18
- A unified environment that combines a full code editor with a visual graph builder. You can write and refactor workflows directly in code or compose them visually on the canvas. Both representations stay synchronized at all times. Editing either one updates the other instantly, so you can move between abstraction levels without friction.
17
+ [**flowweaver.ai**](https://flowweaver.ai) · [**Open the Studio**](https://flowweaver.ai/studio) · [**Docs**](https://flowweaver.ai/docs) · [**Discord**](https://discord.gg/6Byh3ur2bk) · [**npm**](https://www.npmjs.com/package/@synergenius/flow-weaver)
19
18
 
20
- **TypeScript.**
21
- Define workflows in plain TypeScript by annotating functions with JSDoc. The compiler derives an executable workflow graph with static typing and compile-time validation.
22
- There is no YAML, no JSON configuration, and no runtime layer.
23
- No lock-in. Remove the annotations and you keep a clean, readable TypeScript file with zero dependencies.
19
+ ---
24
20
 
25
- **AI Agents.**
26
- Connect Claude Code, Cursor, or OpenClaw to design and ship workflows. Agents scaffold implementations, run the compiler, interpret validation errors, apply corrections, and repeat the process until the workflow compiles successfully.
27
- With more than 30 MCP tools available, the entire build loop can run autonomously.
21
+ ## Your AGENTS.md is a workflow waiting to happen
28
22
 
29
- 1. **Agent creates**: scaffolds from templates, builds from a model, or writes from scratch
30
- 2. **Compiler validates**: 15+ validation passes catch missing connections, type mismatches, unreachable paths
31
- 3. **Agent iterates**: validation errors include fix suggestions, the agent corrects and re-validates
32
- 4. **Agent tests**: deterministic mock providers for reproducible testing without real API calls
33
- 5. **Human reviews**: visual editor or SVG diagram for final approval
23
+ You already wrote the steps, the branching logic, the edge cases. But it's a markdown file. It doesn't run, doesn't validate, and you can't see the full flow at a glance.
34
24
 
35
- ## Quick Start
25
+ **Paste this:**
26
+
27
+ ```markdown
28
+ # Code Review Agent
29
+
30
+ ### 1. Analyze diff
31
+ Send the PR diff to an LLM for security, quality, and style review.
32
+
33
+ ### 2. Classify severity
34
+ Critical (must fix) · Warning (should fix) · Suggestion (nice to have).
35
+
36
+ ### 3. Route
37
+ Critical issues → request changes. Otherwise → approve with comments.
38
+ ```
39
+
40
+ **Get this:**
41
+
42
+ <a href="https://htmlpreview.github.io/?https://github.com/synergenius-fw/flow-weaver/blob/main/docs/images/code-review-agent.html">
43
+ <picture>
44
+ <source media="(prefers-color-scheme: dark)" srcset="docs/images/code-review-agent-dark.svg">
45
+ <source media="(prefers-color-scheme: light)" srcset="docs/images/code-review-agent-light.svg">
46
+ <img alt="Code Review Agent workflow diagram generated from AGENTS.md" src="docs/images/code-review-agent-dark.svg" width="100%">
47
+ </picture>
48
+ </a>
49
+
50
+ <sup>Click the diagram to open the interactive version (zoom, pan, inspect nodes).</sup>
51
+
52
+ The converter extracts the steps and decision points from your markdown and produces typed TypeScript plus a visual diagram. You can run it, test it, deploy it.
53
+
54
+ [**Try the converter →**](https://flowweaver.ai/services/md-converter) &ensp; Works with AGENTS.md, CLAUDE.md, Cursor rules, runbooks, SOPs, and any process doc.
55
+
56
+ ---
57
+
58
+ ## Try It
59
+
60
+ **In the browser.** Open the [Cloud Studio](https://flowweaver.ai/studio), sign up, and start building. No install required.
61
+
62
+ **From the terminal.**
36
63
 
37
64
  ```bash
38
65
  npm install @synergenius/flow-weaver
66
+ npx flow-weaver init my-project
67
+ cd my-project
68
+ npx flow-weaver run workflows/example.ts --params '{"input": "value"}'
39
69
  ```
40
70
 
71
+ ## How It Works
72
+
73
+ **Generate.** Let AI build it for you, design visually in the Studio, or write annotated TypeScript by hand. All three stay in sync.
74
+
75
+ **Validate.** The compiler catches wiring errors, type mismatches, missing handlers, unreachable paths, and agent-specific mistakes before anything runs. Not at runtime, not in production.
76
+
77
+ **Own.** Compiled output is plain TypeScript with zero imports from Flow Weaver. Clean git diffs, standard testing, no license obligations on the output. If Flow Weaver disappeared tomorrow, your agents would still run.
78
+
79
+ ## Three Ways to Build
80
+
81
+ **Studio.** A visual IDE that combines a full code editor with a graph builder. Write and refactor workflows in code or compose them on the canvas. Both representations stay synchronized: editing either one updates the other instantly.
82
+
83
+ **TypeScript.** Define workflows in plain TypeScript by annotating functions with JSDoc. The compiler derives an executable workflow graph with static typing and compile-time validation. No YAML, no JSON configuration, no runtime layer. Remove the annotations and you keep a clean TypeScript file with zero dependencies.
84
+
85
+ **AI Agents.** Connect Claude Code, Cursor, or OpenClaw and let agents scaffold, compile, fix validation errors, and iterate until the workflow works. Agents can also test with mock AI responses and generate diagrams for review.
86
+
87
+ ## Quick Start
88
+
41
89
  Workflows are plain TypeScript. Annotations declare the graph structure:
42
90
 
43
91
  ```typescript
@@ -79,7 +127,7 @@ The compiler fills in the function body while preserving your code outside the g
79
127
 
80
128
  ## AI-Native Development with MCP
81
129
 
82
- Flow Weaver includes an MCP server for Claude Code, Cursor, OpenClaw, or any MCP-compatible agent:
130
+ Flow Weaver includes an MCP server with 48 tools for Claude Code, Cursor, OpenClaw, or any MCP-compatible agent:
83
131
 
84
132
  ```bash
85
133
  npx flow-weaver mcp-server # auto-registers with Claude Code
@@ -108,27 +156,20 @@ npx flow-weaver status my-workflow.ts # shows stub vs implemented progress
108
156
  npx flow-weaver implement my-workflow.ts processData # scaffolds a node body
109
157
  ```
110
158
 
111
- The graph is valid before any node has a real implementation. Fill in node bodies incrementally, check `status` to track progress. Architecture and implementation stay separate: the architect defines the shape, developers fill in the logic.
159
+ The graph is valid before any node has a real implementation. Fill in node bodies incrementally, check `status` to track progress. The architect defines the shape, developers fill in the logic.
112
160
 
113
161
  ## Agent Workflow Templates
114
162
 
115
- Built-in templates for AI agent workflows (LLM reasoning, tool calling, looping):
163
+ Built-in templates for AI agent workflows:
116
164
 
117
165
  ```bash
118
- # Scaffold a tool-calling agent with memory and error handling
119
166
  npx flow-weaver create workflow ai-agent my-agent.ts --provider openai --model gpt-4o
120
-
121
- # ReAct pattern (Thought -> Action -> Observation loop)
122
167
  npx flow-weaver create workflow ai-react react-agent.ts
123
-
124
- # RAG pipeline (Retrieve -> Augment -> Generate)
125
168
  npx flow-weaver create workflow ai-rag rag-pipeline.ts
126
-
127
- # Durable agent with per-step retries (compiles to Inngest)
128
169
  npx flow-weaver create workflow ai-agent-durable durable-agent.ts
129
170
  ```
130
171
 
131
- **12 workflow templates** cover common patterns:
172
+ **12 workflow templates:**
132
173
 
133
174
  | Template | What it builds |
134
175
  |----------|---------------|
@@ -145,9 +186,9 @@ npx flow-weaver create workflow ai-agent-durable durable-agent.ts
145
186
  | `webhook` | HTTP event handler |
146
187
  | `error-handler` | Error recovery pattern |
147
188
 
148
- **12 node templates** for common node types: `llm-call`, `tool-executor`, `conversation-memory`, `prompt-template`, `json-extractor`, `human-approval`, `agent-router`, `rag-retriever`, `validator`, `transformer`, `http`, `aggregator`.
189
+ Plus **12 node templates** for common building blocks: `llm-call`, `tool-executor`, `conversation-memory`, `prompt-template`, `json-extractor`, `human-approval`, `agent-router`, `rag-retriever`, `validator`, `transformer`, `http`, `aggregator`.
149
190
 
150
- ## Agent-Aware Validation
191
+ ## Compile-Time Validation
151
192
 
152
193
  The validator understands AI agent patterns and enforces safety rules:
153
194
 
@@ -159,7 +200,7 @@ AGENT_LLM_NO_FALLBACK LLM failure goes directly to Exit, add retry
159
200
  AGENT_TOOL_NO_OUTPUT_HANDLING Tool executor outputs are all unconnected, results are discarded
160
201
  ```
161
202
 
162
- These aren't generic lint rules. The validator identifies LLM, tool-executor, human-approval, and memory nodes by port signatures, annotations, and naming patterns, then applies agent-specific checks.
203
+ These are not generic lint rules. The validator identifies LLM, tool-executor, human-approval, and memory nodes by port signatures, annotations, and naming patterns, then applies agent-specific checks.
163
204
 
164
205
  ## Deterministic Agent Testing
165
206
 
@@ -185,9 +226,9 @@ const replay = loadRecording('fixtures/agent-session.json');
185
226
 
186
227
  Mock human approvals, fast-forward delays, and simulate external events. Configured via `globalThis.__fw_mock_config__`.
187
228
 
188
- ## Scoped Ports: Agent Loops Without Cycles
229
+ ## Scoped Ports: Agent Loops Without Graph Cycles
189
230
 
190
- Most workflow engines either ban loops (DAG-only) or allow arbitrary cycles (hard to reason about). Flow Weaver uses **scoped ports** to express iteration without graph cycles:
231
+ Most workflow engines either ban loops entirely (DAG-only) or allow arbitrary cycles that are hard to reason about. Flow Weaver takes a third path: **scoped ports** express iteration while keeping the graph acyclic and statically analyzable.
191
232
 
192
233
  ```typescript
193
234
  /**
@@ -202,32 +243,9 @@ Most workflow engines either ban loops (DAG-only) or allow arbitrary cycles (har
202
243
  */
203
244
  ```
204
245
 
205
- The scope's output ports become callback parameters, and input ports become return values. Agent reasoning loops, ForEach over collections, map/reduce patterns, nested sub-workflows: all work while keeping the graph acyclic and statically analyzable.
246
+ The scope's output ports become callback parameters, and input ports become return values. Agent reasoning loops, ForEach over collections, map/reduce patterns, and nested sub-workflows all work without introducing graph cycles.
206
247
 
207
- ## Diagram Generation
208
-
209
- Generate SVG or interactive HTML diagrams from any workflow:
210
-
211
- ```bash
212
- flow-weaver diagram workflow.ts -o workflow.svg --theme dark
213
- flow-weaver diagram workflow.ts -o workflow.html --format html
214
- ```
215
-
216
- Customize node appearance with annotations:
217
-
218
- ```typescript
219
- /**
220
- * @flowWeaver nodeType
221
- * @color blue
222
- * @icon database
223
- */
224
- ```
225
-
226
- Named colors: `blue`, `purple`, `green`, `cyan`, `orange`, `pink`, `red`, `yellow`. Icons include `api`, `database`, `shield`, `brain`, `cloud`, `search`, `code`, and 60+ more from Material Design 3.
227
-
228
- The interactive HTML viewer supports zoom/pan, click-to-inspect nodes, port-level hover with connection tracing, and works standalone or embedded in an iframe.
229
-
230
- ## Multi-Target Compilation
248
+ ## Deploy Anywhere
231
249
 
232
250
  Same workflow source, multiple deployment targets:
233
251
 
@@ -249,6 +267,27 @@ flow-weaver serve ./workflows --port 3000 --swagger
249
267
 
250
268
  Both the default TypeScript target and Inngest target parallelize independent nodes with `Promise.all()`. Inngest additionally wraps each node in `step.run()` for individual durability and generates typed Zod event schemas.
251
269
 
270
+ ## Diagram Generation
271
+
272
+ Generate SVG or interactive HTML diagrams from any workflow:
273
+
274
+ ```bash
275
+ flow-weaver diagram workflow.ts -o workflow.svg --theme dark
276
+ flow-weaver diagram workflow.ts -o workflow.html --format html
277
+ ```
278
+
279
+ Customize node appearance with annotations:
280
+
281
+ ```typescript
282
+ /**
283
+ * @flowWeaver nodeType
284
+ * @color blue
285
+ * @icon database
286
+ */
287
+ ```
288
+
289
+ Named colors: `blue`, `purple`, `green`, `cyan`, `orange`, `pink`, `red`, `yellow`. Icons include `api`, `database`, `shield`, `brain`, `cloud`, `search`, `code`, and 60+ more from Material Design 3. The interactive HTML viewer supports zoom/pan, click-to-inspect nodes, and port-level hover with connection tracing.
290
+
252
291
  ## API
253
292
 
254
293
  ```typescript
@@ -370,18 +409,38 @@ function nodeName(
370
409
 
371
410
  Expression nodes (`@expression`) skip the control flow boilerplate. Inputs and outputs map directly to the TypeScript signature.
372
411
 
373
- ## Testing
412
+ ## Flow Weaver Cloud
374
413
 
375
- ```bash
376
- npm test # Run all tests
377
- npm run test:watch # Watch mode
378
- ```
414
+ [flowweaver.ai](https://flowweaver.ai) is the hosted platform that adds collaboration, managed deployments, and team features on top of everything the CLI provides.
415
+
416
+ What the cloud adds:
417
+
418
+ - **Browser-based Studio** with real-time collaborative editing
419
+ - **One-click deployment** of any workflow as an HTTP endpoint
420
+ - **Execution logs** for every workflow run, with input/output history
421
+ - **Visual debugger** for step-through node inspection (Pro)
422
+ - **Version history** and workflow snapshots (Pro)
423
+ - **AI Chat assistant** for building and debugging workflows (Pro)
424
+ - **Organization workspaces** with team management (Business)
425
+
426
+ Three tiers: **Free** (3 workflows, 1 deployment, 100 executions/month), **Pro** at 9 EUR/month (25 workflows, 10k executions), and **Business** at 29 EUR/month (unlimited workflows, 100k executions). See [flowweaver.ai/pricing](https://flowweaver.ai/pricing) for details.
427
+
428
+ The CLI remains fully functional for local development. The cloud adds the parts that are hard to do alone: team collaboration, always-on endpoints, and operational visibility.
429
+
430
+ ## Community
431
+
432
+ - [Discord](https://discord.gg/6Byh3ur2bk)
433
+ - [GitHub Discussions](https://github.com/synergenius-fw/flow-weaver/discussions)
434
+ - [X / Twitter](https://x.com/flowweaver_ai)
435
+ - [Website](https://flowweaver.ai)
379
436
 
380
437
  ## Development
381
438
 
382
439
  ```bash
383
440
  npm run build # Build
384
441
  npm run watch # Watch mode
442
+ npm test # Run all tests
443
+ npm run test:watch # Watch mode
385
444
  npm run typecheck # Type check
386
445
  npm run docs # Generate API docs
387
446
  ```
@@ -9671,7 +9671,7 @@ var VERSION;
9671
9671
  var init_generated_version = __esm({
9672
9672
  "src/generated-version.ts"() {
9673
9673
  "use strict";
9674
- VERSION = "0.13.1";
9674
+ VERSION = "0.13.3";
9675
9675
  }
9676
9676
  });
9677
9677
 
@@ -46774,6 +46774,8 @@ function buildScopeSubGraph(parentNode, parentNt, scopeName, childIds, ast, node
46774
46774
  if (!childInst) continue;
46775
46775
  const childNode = buildInstanceNode(childId, childInst.nodeType, childInst.config, nodeTypeMap, theme);
46776
46776
  computeNodeDimensions(childNode);
46777
+ if (childInst.config?.width != null) childNode.width = childInst.config.width;
46778
+ if (childInst.config?.height != null) childNode.height = childInst.config.height;
46777
46779
  children.push(childNode);
46778
46780
  childNodeMap.set(childId, childNode);
46779
46781
  }
@@ -47087,6 +47089,23 @@ function resolveHorizontalOverlaps(diagramNodes, explicitPositions) {
47087
47089
  }
47088
47090
  }
47089
47091
  }
47092
+ function resolvePostLayoutOverlaps(diagramNodes) {
47093
+ const hasScopeParent = [...diagramNodes.values()].some((n) => n.scopeChildren && n.scopeChildren.length > 0);
47094
+ if (!hasScopeParent) return;
47095
+ const nodes = [...diagramNodes.values()].sort((a, b) => a.x - b.x);
47096
+ for (let i = 1; i < nodes.length; i++) {
47097
+ const prev = nodes[i - 1];
47098
+ const curr = nodes[i];
47099
+ if (!prev.scopeChildren || prev.scopeChildren.length === 0) continue;
47100
+ const actualGap = curr.x - (prev.x + prev.width);
47101
+ if (actualGap < MIN_EDGE_GAP) {
47102
+ const shift = MIN_EDGE_GAP - actualGap;
47103
+ for (let j = i; j < nodes.length; j++) {
47104
+ nodes[j].x += shift;
47105
+ }
47106
+ }
47107
+ }
47108
+ }
47090
47109
  function buildDiagramGraph(ast, options = {}) {
47091
47110
  const themeName = options.theme ?? "dark";
47092
47111
  const nodeTypeMap = /* @__PURE__ */ new Map();
@@ -47184,6 +47203,13 @@ function buildDiagramGraph(ast, options = {}) {
47184
47203
  if (!parentNt) continue;
47185
47204
  buildScopeSubGraph(parentNode, parentNt, scopeName, childIds, ast, nodeTypeMap, themeName);
47186
47205
  }
47206
+ for (const inst of ast.instances) {
47207
+ if (scopedChildren.has(inst.id)) continue;
47208
+ const node = diagramNodes.get(inst.id);
47209
+ if (!node) continue;
47210
+ if (inst.config?.width != null) node.width = inst.config.width;
47211
+ if (inst.config?.height != null) node.height = inst.config.height;
47212
+ }
47187
47213
  const explicitPositions = extractExplicitPositions(ast);
47188
47214
  const allPositioned = [...diagramNodes.keys()].every((id) => explicitPositions.has(id));
47189
47215
  const nonePositioned = ![...diagramNodes.keys()].some((id) => explicitPositions.has(id));
@@ -47203,6 +47229,7 @@ function buildDiagramGraph(ast, options = {}) {
47203
47229
  assignUnpositionedNodes(layers, diagramNodes, explicitPositions);
47204
47230
  resolveHorizontalOverlaps(diagramNodes, explicitPositions);
47205
47231
  }
47232
+ resolvePostLayoutOverlaps(diagramNodes);
47206
47233
  for (const node of diagramNodes.values()) {
47207
47234
  computePortPositions(node);
47208
47235
  }
@@ -110075,7 +110102,7 @@ async function mcpSetupCommand(options, deps) {
110075
110102
 
110076
110103
  // src/cli/index.ts
110077
110104
  init_error_utils();
110078
- var version2 = true ? "0.13.1" : "0.0.0-dev";
110105
+ var version2 = true ? "0.13.3" : "0.0.0-dev";
110079
110106
  var program2 = new Command();
110080
110107
  program2.name("flow-weaver").description("Flow Weaver Annotations - Compile and validate workflow files").version(version2, "-v, --version", "Output the current version");
110081
110108
  program2.configureOutput({
@@ -298,6 +298,10 @@ function buildScopeSubGraph(parentNode, parentNt, scopeName, childIds, ast, node
298
298
  continue;
299
299
  const childNode = buildInstanceNode(childId, childInst.nodeType, childInst.config, nodeTypeMap, theme);
300
300
  computeNodeDimensions(childNode);
301
+ if (childInst.config?.width != null)
302
+ childNode.width = childInst.config.width;
303
+ if (childInst.config?.height != null)
304
+ childNode.height = childInst.config.height;
301
305
  children.push(childNode);
302
306
  childNodeMap.set(childId, childNode);
303
307
  }
@@ -628,6 +632,32 @@ function resolveHorizontalOverlaps(diagramNodes, explicitPositions) {
628
632
  }
629
633
  }
630
634
  }
635
+ /**
636
+ * After all positioning, resolve overlaps caused by expanded scope boxes.
637
+ * Only checks nodes immediately after a scope parent — regular node spacing
638
+ * is left to the user's explicit positions. When a node falls inside the
639
+ * expanded scope box, shift it and all further-right nodes to clear.
640
+ */
641
+ function resolvePostLayoutOverlaps(diagramNodes) {
642
+ const hasScopeParent = [...diagramNodes.values()].some(n => n.scopeChildren && n.scopeChildren.length > 0);
643
+ if (!hasScopeParent)
644
+ return;
645
+ const nodes = [...diagramNodes.values()].sort((a, b) => a.x - b.x);
646
+ for (let i = 1; i < nodes.length; i++) {
647
+ const prev = nodes[i - 1];
648
+ const curr = nodes[i];
649
+ // Only resolve overlaps caused by scope parent expansion
650
+ if (!prev.scopeChildren || prev.scopeChildren.length === 0)
651
+ continue;
652
+ const actualGap = curr.x - (prev.x + prev.width);
653
+ if (actualGap < MIN_EDGE_GAP) {
654
+ const shift = MIN_EDGE_GAP - actualGap;
655
+ for (let j = i; j < nodes.length; j++) {
656
+ nodes[j].x += shift;
657
+ }
658
+ }
659
+ }
660
+ }
631
661
  // ---- Main orchestrator ----
632
662
  export function buildDiagramGraph(ast, options = {}) {
633
663
  const themeName = options.theme ?? 'dark';
@@ -741,6 +771,18 @@ export function buildDiagramGraph(ast, options = {}) {
741
771
  continue;
742
772
  buildScopeSubGraph(parentNode, parentNt, scopeName, childIds, ast, nodeTypeMap, themeName);
743
773
  }
774
+ // Apply explicit [size: W H] annotation — hard override (not a floor)
775
+ for (const inst of ast.instances) {
776
+ if (scopedChildren.has(inst.id))
777
+ continue;
778
+ const node = diagramNodes.get(inst.id);
779
+ if (!node)
780
+ continue;
781
+ if (inst.config?.width != null)
782
+ node.width = inst.config.width;
783
+ if (inst.config?.height != null)
784
+ node.height = inst.config.height;
785
+ }
744
786
  // Layout — use explicit positions when available, auto-layout otherwise
745
787
  const explicitPositions = extractExplicitPositions(ast);
746
788
  const allPositioned = [...diagramNodes.keys()].every(id => explicitPositions.has(id));
@@ -766,6 +808,11 @@ export function buildDiagramGraph(ast, options = {}) {
766
808
  assignUnpositionedNodes(layers, diagramNodes, explicitPositions);
767
809
  resolveHorizontalOverlaps(diagramNodes, explicitPositions);
768
810
  }
811
+ // Resolve overlaps caused by expanded scope boxes. When all positions are
812
+ // explicit, resolveHorizontalOverlaps is never called (or skips all nodes).
813
+ // Scope parents can be far wider than the user anticipates, so we cascade
814
+ // a rightward shift to all downstream nodes that fall inside the expanded box.
815
+ resolvePostLayoutOverlaps(diagramNodes);
769
816
  // Compute external port positions
770
817
  for (const node of diagramNodes.values()) {
771
818
  computePortPositions(node);
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.13.1";
1
+ export declare const VERSION = "0.13.3";
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.13.1';
2
+ export const VERSION = '0.13.3';
3
3
  //# sourceMappingURL=generated-version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@synergenius/flow-weaver",
3
- "version": "0.13.1",
3
+ "version": "0.13.3",
4
4
  "description": "Deterministic workflow compiler for AI agents. Compiles to standalone TypeScript, no runtime dependencies.",
5
5
  "private": false,
6
6
  "type": "module",