langflower 0.0.9 → 0.1.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 +96 -70
- package/docs/public/README.md +2 -2
- package/docs/public/configuration.md +4 -0
- package/docs/public/extending.md +18 -2
- package/docs/public/getting-started.md +7 -0
- package/docs/public/how-it-works.md +18 -11
- package/docs/public/product.md +35 -25
- package/package.json +2 -2
- package/ui-dist/chunk-QI4IYILJ.js +4 -0
- package/ui-dist/{chunk-7UMVYN3A.js → chunk-UG3GFV4Y.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/main-ODIDCCNX.js +315 -0
- package/ui-dist/styles-2JMBAQC3.css +1 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-reducer.js +0 -12
- package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-types.d.ts +2 -7
- package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-types.js +1 -1
- package/vendor/common-nodes/dist/ai/features/llm-loop/run-agent-loop.d.ts +0 -3
- package/vendor/common-nodes/dist/ai/features/llm-loop/run-agent-loop.js +22 -36
- package/vendor/common-nodes/dist/ai/features/llm-loop/run-llm-loop.d.ts +1 -7
- package/vendor/common-nodes/dist/ai/features/llm-loop/run-llm-loop.js +12 -35
- package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.d.ts +5 -12
- package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.js +48 -21
- package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.d.ts +11 -0
- package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.js +2 -2
- package/vendor/common-nodes/dist/ai/features/path-choice/run-reactive-path-choice-loop.d.ts +0 -3
- package/vendor/common-nodes/dist/ai/features/path-choice/run-reactive-path-choice-loop.js +2 -15
- package/vendor/common-nodes/dist/ai/features/run-host-services.d.ts +10 -0
- package/vendor/common-nodes/dist/ai/features/sub-agent-protocol.d.ts +1 -0
- package/vendor/common-nodes/dist/ai/features/sub-agent-protocol.js +1 -0
- package/vendor/common-nodes/dist/ai/features/ui-schema/llm-recovery-ui-schema.d.ts +1 -1
- package/vendor/common-nodes/dist/ai/features/ui-schema/llm-recovery-ui-schema.js +1 -1
- package/vendor/common-nodes/dist/ai/features/wait-for-subagent-result.d.ts +1 -0
- package/vendor/common-nodes/dist/ai/features/wait-for-subagent-result.js +1 -0
- package/vendor/common-nodes/dist/ai/nodes/critique/node.d.ts +3 -3
- package/vendor/common-nodes/dist/ai/nodes/critique/node.js +10 -19
- package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.d.ts +3 -3
- package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.js +10 -11
- package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.d.ts +3 -3
- package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.js +7 -10
- package/vendor/common-nodes/dist/ai/nodes/review/node.d.ts +3 -3
- package/vendor/common-nodes/dist/ai/nodes/review/node.js +12 -19
- package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.d.ts +5 -5
- package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.js +251 -96
- package/vendor/common-nodes/dist/catalog.js +12 -0
- package/vendor/common-nodes/dist/crawl/crawl/node.js +11 -3
- package/vendor/common-nodes/dist/crawl/crawl-tools/node.js +5 -1
- package/vendor/common-nodes/dist/crawl/extract-links/node.js +7 -1
- package/vendor/common-nodes/dist/crawl/fetch-url/node.js +13 -4
- package/vendor/common-nodes/dist/crawl/save-page/node.js +11 -3
- package/vendor/common-nodes/dist/embeddings/create-embedding.d.ts +39 -0
- package/vendor/common-nodes/dist/embeddings/create-embedding.js +154 -0
- package/vendor/common-nodes/dist/embeddings/embed-provider/node.d.ts +53 -0
- package/vendor/common-nodes/dist/embeddings/embed-provider/node.js +126 -0
- package/vendor/common-nodes/dist/embeddings/embed-similarity/node.d.ts +20 -0
- package/vendor/common-nodes/dist/embeddings/embed-similarity/node.js +81 -0
- package/vendor/common-nodes/dist/embeddings/embed-text/node.d.ts +53 -0
- package/vendor/common-nodes/dist/embeddings/embed-text/node.js +91 -0
- package/vendor/common-nodes/dist/embeddings/from-embedding.d.ts +8 -0
- package/vendor/common-nodes/dist/embeddings/from-embedding.js +24 -0
- package/vendor/common-nodes/dist/embeddings/resolve-embedding-provider-model.d.ts +11 -0
- package/vendor/common-nodes/dist/embeddings/resolve-embedding-provider-model.js +8 -0
- package/vendor/common-nodes/dist/flow/checkpoint/node.js +7 -3
- package/vendor/common-nodes/dist/flow/delay/node.d.ts +2 -6
- package/vendor/common-nodes/dist/flow/delay/node.js +13 -9
- package/vendor/common-nodes/dist/flow/loop/node.js +7 -1
- package/vendor/common-nodes/dist/flow/merge/node.js +7 -1
- package/vendor/common-nodes/dist/flow/repeat/node.js +5 -1
- package/vendor/common-nodes/dist/flow/router/node.js +7 -1
- package/vendor/common-nodes/dist/hitl/chat-input/node.d.ts +2 -2
- package/vendor/common-nodes/dist/hitl/chat-input/node.js +8 -4
- package/vendor/common-nodes/dist/hitl/review-gate/node.js +11 -5
- package/vendor/common-nodes/dist/langflower-tools/node.js +5 -1
- package/vendor/common-nodes/dist/logic/assert/node.js +7 -1
- package/vendor/common-nodes/dist/logic/compare/node.js +7 -1
- package/vendor/common-nodes/dist/logic/gate/node.js +7 -1
- package/vendor/common-nodes/dist/logic/if/node.js +7 -1
- package/vendor/common-nodes/dist/logic/switch/node.js +7 -1
- package/vendor/common-nodes/dist/mcp/mcp-http/node.d.ts +4 -4
- package/vendor/common-nodes/dist/mcp/mcp-http/node.js +61 -60
- package/vendor/common-nodes/dist/mcp/mcp-stdio/node.d.ts +4 -4
- package/vendor/common-nodes/dist/mcp/mcp-stdio/node.js +58 -57
- package/vendor/common-nodes/dist/memory/memory-tools/node.js +5 -1
- package/vendor/common-nodes/dist/output/finish/node.js +13 -1
- package/vendor/common-nodes/dist/output/preview/node.js +9 -2
- package/vendor/common-nodes/dist/primitives/boolean/node.js +7 -1
- package/vendor/common-nodes/dist/primitives/number/node.js +7 -1
- package/vendor/common-nodes/dist/primitives/string/node.js +7 -1
- package/vendor/common-nodes/dist/primitives/string-multiline/node.d.ts +17 -0
- package/vendor/common-nodes/dist/primitives/string-multiline/node.js +31 -0
- package/vendor/common-nodes/dist/text/append-file/node.js +11 -3
- package/vendor/common-nodes/dist/text/concat/node.js +5 -1
- package/vendor/common-nodes/dist/text/read-file/node.js +9 -3
- package/vendor/common-nodes/dist/text/split-paced/node.d.ts +21 -0
- package/vendor/common-nodes/dist/text/split-paced/node.js +93 -0
- package/vendor/common-nodes/dist/text/write-file/node.js +11 -3
- package/vendor/common-nodes/dist/tools/collect-agent-tool-handles.d.ts +4 -4
- package/vendor/common-nodes/dist/tools/collect-agent-tool-handles.js +3 -11
- package/vendor/common-nodes/dist/tools/inventory-tool-round.d.ts +0 -10
- package/vendor/common-nodes/dist/tools/inventory-tool-round.js +0 -84
- package/vendor/common-nodes/dist/tools/tool-collection/node.d.ts +20 -0
- package/vendor/common-nodes/dist/tools/tool-collection/node.js +45 -0
- package/vendor/common-nodes/package.json +5 -5
- package/vendor/compiler/package.json +1 -1
- package/vendor/node-sdk/dist/node-factory/define-embed/embed-handle.d.ts +25 -0
- package/vendor/node-sdk/dist/node-factory/define-embed/embed-handle.js +25 -0
- package/vendor/node-sdk/dist/node-factory/define-llm-node/default-llm-ports.d.ts +3 -7
- package/vendor/node-sdk/dist/node-factory/define-llm-node/default-llm-ports.js +4 -44
- package/vendor/node-sdk/dist/node-factory/define-llm-node/define-llm-node.d.ts +3 -5
- package/vendor/node-sdk/dist/node-factory/define-llm-node/define-llm-node.js +3 -5
- package/vendor/node-sdk/dist/node-factory/define-llm-node/llm-inventory-wire.d.ts +1 -0
- package/vendor/node-sdk/dist/node-factory/define-llm-node/llm-inventory-wire.js +1 -0
- package/vendor/node-sdk/dist/node-factory/define-mcp/mcp-handle.d.ts +4 -4
- package/vendor/node-sdk/dist/node-factory/define-mcp/mcp-handle.js +2 -1
- package/vendor/node-sdk/dist/node-factory/define-node/define-node.d.ts +2 -0
- package/vendor/node-sdk/dist/node-factory/define-node/define-node.js +4 -1
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/define-reactive-node.d.ts +3 -1
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/define-reactive-node.js +2 -1
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/io-helpers.d.ts +15 -0
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/io-helpers.js +17 -1
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/port-meta.d.ts +17 -4
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/test/samples/delay-node.js +4 -2
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/types.d.ts +6 -7
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/ui-schema-inference.d.ts +1 -1
- package/vendor/node-sdk/dist/testing/create-node-harness.d.ts +30 -0
- package/vendor/node-sdk/dist/testing/create-node-harness.js +68 -0
- package/vendor/node-sdk/package.json +5 -5
- package/vendor/runtime/dist/port-feed-override.d.ts +13 -0
- package/vendor/runtime/dist/port-feed-override.js +21 -0
- package/vendor/runtime/dist/port-signal-from-response.d.ts +15 -0
- package/vendor/runtime/dist/port-signal-from-response.js +48 -0
- package/vendor/runtime/dist/runtime-runner.d.ts +8 -3
- package/vendor/runtime/dist/runtime-runner.js +102 -81
- package/vendor/runtime/dist/runtime.d.ts +3 -2
- package/vendor/runtime/dist/runtime.js +1 -1
- package/vendor/runtime/dist/testing/workflows/workflow-events.d.ts +2 -0
- package/vendor/runtime/dist/testing/workflows/workflow-events.js +7 -5
- package/vendor/runtime/dist/types.d.ts +26 -9
- package/vendor/runtime/dist/types.js +3 -0
- package/vendor/runtime/package.json +1 -1
- package/vendor/server/dist/bootstrap/project-bootstrap.service.d.ts +1 -1
- package/vendor/server/dist/bootstrap/seed-skeleton.d.ts +2 -2
- package/vendor/server/dist/bootstrap/seed-skeleton.js +17 -2
- package/vendor/server/dist/bridge/bind-embed-context.d.ts +7 -0
- package/vendor/server/dist/bridge/bind-embed-context.js +16 -0
- package/vendor/server/dist/bridge/build-execution-context.d.ts +2 -2
- package/vendor/server/dist/bridge/build-execution-context.js +8 -4
- package/vendor/server/dist/bridge/emit-bootstrap.js +4 -1
- package/vendor/server/dist/bridge/get-live-wired-tools.d.ts +3 -2
- package/vendor/server/dist/bridge/get-live-wired-tools.js +8 -5
- package/vendor/server/dist/bridge/settings-draft-controller.js +7 -3
- package/vendor/server/dist/bridge/wire-config-handlers.js +2 -0
- package/vendor/server/dist/bridge/wire-editor-handlers.js +14 -0
- package/vendor/server/dist/bridge/wire-runner-handlers.js +2 -2
- package/vendor/server/dist/bridge/wire-workflow-handlers.js +23 -9
- package/vendor/server/dist/checkpoint/run-checkpoint-session.js +3 -3
- package/vendor/server/dist/config/langflower-config.service.d.ts +2 -0
- package/vendor/server/dist/config/langflower-config.service.js +30 -0
- package/vendor/server/dist/session/build-session-bootstrap.js +1 -0
- package/vendor/server/dist/session/langflower-session.d.ts +3 -1
- package/vendor/server/dist/session/langflower-session.js +3 -1
- package/vendor/server/dist/session/reset-session-execution-feed.d.ts +6 -0
- package/vendor/server/dist/session/reset-session-execution-feed.js +8 -0
- package/vendor/server/dist/workflow/apply-editor-mutation.js +6 -0
- package/vendor/server/dist/workflow/workflow-persisted-inputs.js +8 -6
- package/vendor/server/skeleton/instructions.md +15 -3
- package/vendor/server/skeleton/nodes/hello-embed/README.md +185 -0
- package/vendor/server/skeleton/nodes/hello-embed/hello-embed.nodes.test.ts +181 -0
- package/vendor/server/skeleton/nodes/hello-embed/ingest.ts +126 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/chunk-markdown.test.ts +40 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/chunk-markdown.ts +123 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/ingest-search.test.ts +180 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/ingest.ts +128 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/paths.test.ts +20 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/paths.ts +70 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/schema.ts +21 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/search.ts +254 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/text-embedder.ts +14 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/vectors.ts +126 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/walk-markdown.test.ts +62 -0
- package/vendor/server/skeleton/nodes/hello-embed/lib/walk-markdown.ts +67 -0
- package/vendor/server/skeleton/nodes/hello-embed/package.json +11 -0
- package/vendor/server/skeleton/nodes/hello-embed/search-handle.ts +119 -0
- package/vendor/server/skeleton/nodes/hello-embed/search.ts +98 -0
- package/vendor/server/skeleton/nodes/hello-embed/tsconfig.json +14 -0
- package/vendor/server/skeleton/nodes/my-nodes/README.md +13 -3
- package/vendor/server/skeleton/nodes/my-nodes/package.json +1 -1
- package/vendor/server/skeleton/schemas/langflower-config.schema.json +4 -0
- package/vendor/server/skeleton/skills/langflower-helper/SKILL.md +125 -38
- package/vendor/server/skeleton/skills/langflower-helper/architecture.md +17 -6
- package/vendor/server/skeleton/skills/langflower-helper/layout.md +24 -17
- package/vendor/server/skeleton/skills/langflower-node-writer/SKILL.md +8 -1
- package/vendor/server/skeleton/skills/langflower-workflow-writer/SKILL.md +12 -8
- package/vendor/server/skeleton/workflows/kb-create.json +15 -43
- package/vendor/server/skeleton/workflows/kb-ingest.json +88 -0
- package/vendor/server/skeleton/workflows/kb-manual-search.json +105 -0
- package/vendor/server/skeleton/workflows/kb-navigate.json +8 -22
- package/vendor/server/skeleton/workflows/kb-rag.json +192 -0
- package/vendor/server/skeleton/workflows/kb-tool.json +111 -0
- package/vendor/server/skeleton/workflows/simple-coder.json +18 -46
- package/vendor/server/skeleton/workflows/starter.json +8 -22
- package/vendor/shared/dist/execution/derive-run-settle-outcome.js +2 -2
- package/vendor/shared/dist/execution/derive-run-settle-outcome.test.js +11 -8
- package/vendor/shared/dist/langflower-bus-config.d.ts +22 -6
- package/vendor/shared/dist/langflower-bus-config.js +23 -7
- package/vendor/shared/dist/langflower-config/merge-langflower-config-layers.test.js +8 -0
- package/vendor/shared/dist/langflower-config/settings-draft.d.ts +5 -0
- package/vendor/shared/dist/langflower-config/settings-draft.js +15 -7
- package/vendor/shared/dist/langflower-ws-waits.d.ts +3 -1
- package/vendor/shared/dist/langflower-ws-waits.js +2 -2
- package/vendor/shared/dist/langflower.d.ts +1 -1
- package/vendor/shared/dist/langflower.js +1 -1
- package/vendor/shared/dist/types/langflower-bootstrap.d.ts +6 -0
- package/vendor/shared/dist/types/langflower-config.d.ts +17 -0
- package/vendor/shared/dist/types/langflower-palette.d.ts +2 -1
- package/vendor/tools/dist/harness-types.d.ts +1 -1
- package/vendor/tools/dist/mcp/build-mcp-handle.d.ts +3 -21
- package/vendor/tools/dist/mcp/build-mcp-handle.js +2 -11
- package/vendor/tools/dist/mcp/create-system-mcp-handles.d.ts +9 -6
- package/vendor/tools/dist/mcp/create-system-mcp-handles.js +21 -17
- package/vendor/tools/package.json +1 -0
- package/ui-dist/chunk-MDGXX73Z.js +0 -4
- package/ui-dist/main-2JJGCNTD.js +0 -313
- package/ui-dist/styles-EOXODOI7.css +0 -1
package/README.md
CHANGED
|
@@ -3,38 +3,63 @@
|
|
|
3
3
|
> **Disclaimer:** Langflower is currently in internal testing. Anyone can
|
|
4
4
|
> download and try it, but some functions may not be stable.
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
## Key concept: everything is a node
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
Langflower is not built around the LLM as a first-class citizen. The core
|
|
9
|
+
abstraction is a **reactive node**: several typed inputs, several typed
|
|
10
|
+
outputs. Each port acts independently — a node can receive on one input
|
|
11
|
+
and emit on one output at any time, without waiting for the rest. The
|
|
12
|
+
runtime wires those nodes into a workflow.
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
That is enough for complex processing chains — including loops and
|
|
15
|
+
conditions.
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
The trick is the same rule applied to models. Because ports fire on their
|
|
18
|
+
own, an LLM agent is just another reactive node: prompt and tools in;
|
|
19
|
+
response out; streaming tool log, reasoning, and draft as extra outputs
|
|
20
|
+
that can update while the run continues. All LLM-specific logic stays as
|
|
21
|
+
that node's internal state. It does not leak through the rest of the app.
|
|
22
|
+
|
|
23
|
+
## Open possibilities
|
|
24
|
+
|
|
25
|
+
Because every unit of work is a node, Langflower is not pinned to one
|
|
26
|
+
product shape — coding harness, chat harness, or any other fixed loop.
|
|
27
|
+
Workflows stay flexible. With the right wiring they fit the job.
|
|
28
|
+
|
|
29
|
+
Need a chat? Wire user input, an agent, and HITL feedback. Agent-to-agent
|
|
30
|
+
dialogue is two agents connected together. Coding is the same graph plus
|
|
31
|
+
file-ops tools. Tired of “I’m done” while the code still does not compile?
|
|
32
|
+
Write a custom review-gate node. The agent never gets a path around it.
|
|
33
|
+
|
|
34
|
+
## Hard harness
|
|
15
35
|
|
|
16
|
-
|
|
36
|
+
The sequence is the workflow topology. That is how Langflower orchestrates
|
|
37
|
+
complex work: QA, review, and code checks sit on the graph, so agents
|
|
38
|
+
cannot skip them. A well-configured workflow forces high-quality output —
|
|
39
|
+
the model does not get to declare itself finished.
|
|
17
40
|
|
|
18
|
-
|
|
41
|
+
**Not another chat harness. A local node graph.**
|
|
19
42
|
|
|
20
|
-
|
|
21
|
-
change, review it, run QA, and accept the result. You can stop or redirect
|
|
22
|
-
the work at the stages that matter.
|
|
43
|
+
### Keep everything local
|
|
23
44
|
|
|
24
|
-
|
|
45
|
+
Langflower runs on your machine and does not expose your project as a
|
|
46
|
+
hosted product. Files stay where they are. You can reproduce what mature
|
|
47
|
+
cloud tools offer — at home, or on a closed network with internal LLM
|
|
48
|
+
providers.
|
|
25
49
|
|
|
26
|
-
|
|
27
|
-
revise it in place. The useful output is a file you own, not only a chat
|
|
28
|
-
transcript.
|
|
50
|
+
### Scoped to a folder
|
|
29
51
|
|
|
30
|
-
|
|
52
|
+
You start from a folder. Data, custom nodes, and workflows are scoped to
|
|
53
|
+
that workspace. Open the folder, and the graph, files, and run belong
|
|
54
|
+
together.
|
|
31
55
|
|
|
32
|
-
|
|
33
|
-
proposed changes, and maintain a project wiki or Obsidian vault.
|
|
56
|
+
### Extensible even now
|
|
34
57
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
58
|
+
This is still an early version, but Langflower already supports custom
|
|
59
|
+
nodes and custom node packs. Share and reuse workflows and nodes the same
|
|
60
|
+
way you share the rest of the project.
|
|
61
|
+
|
|
62
|
+

|
|
38
63
|
|
|
39
64
|
## How it works
|
|
40
65
|
|
|
@@ -46,55 +71,61 @@ prompt refinement, regression gates, and multi-agent review. Browse the
|
|
|
46
71
|
decision.
|
|
47
72
|
5. Find the resulting files and data in the same workspace.
|
|
48
73
|
|
|
49
|
-
|
|
50
|
-
or approval is part of the workflow, an agent cannot silently skip it because
|
|
51
|
-
it is confident in its own answer. Bring your own review gate — Langflower
|
|
52
|
-
enforces it, so LLMs cannot skip or bypass that step.
|
|
74
|
+
## Under the hood
|
|
53
75
|
|
|
54
|
-
|
|
76
|
+
The core is a reactive runtime that wires nodes together. The **node SDK**
|
|
77
|
+
is the public contract: any node that follows it can run on that runtime.
|
|
78
|
+
**Common nodes** is the built-in catalog. It uses the same SDK as custom
|
|
79
|
+
node packs.
|
|
55
80
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
approval exactly where it makes sense in the process.
|
|
62
|
-
- **Long tasks do not own your browser tab.** Close the tab and return later;
|
|
63
|
-
the session continues and the UI catches up when you reconnect.
|
|
64
|
-
- **Reuse a process, not just a prompt.** Build a workflow once, then apply it
|
|
65
|
-
to similar folders and tasks.
|
|
66
|
-
- **Extend it when the defaults are not enough.** Add markdown skills under
|
|
67
|
-
`.langflower/skills/` or custom nodes under `.langflower/nodes/`.
|
|
68
|
-
|
|
69
|
-
## Why it stays reliable while you work
|
|
70
|
-
|
|
71
|
-
Langflower's runtime treats every workflow step as a live exchange of data.
|
|
72
|
-
That means a step can naturally wait for your input and continue when you
|
|
73
|
-
reply — human review is part of the workflow, not a special interruption
|
|
74
|
-
mode.
|
|
75
|
-
|
|
76
|
-
The server owns the active session, while the browser is a view of it. Closing
|
|
77
|
-
or reopening a tab does not create a competing workflow state or cancel a
|
|
78
|
-
long-running job; the UI reconnects to the current progress.
|
|
81
|
+
The **server** composes those pieces, compiles user-defined nodes, and owns
|
|
82
|
+
the live run. The **UI** is a thin browser client. It listens to WebSocket
|
|
83
|
+
events from the server; it does not own the workflow. Close the tab while a
|
|
84
|
+
long run continues. Reopen it, and the server catches the UI up, so the
|
|
85
|
+
canvas stays in sync.
|
|
79
86
|
|
|
80
87
|
For a short builder-oriented picture, see
|
|
81
88
|
[How it works](https://github.com/earthdmitriy/langflower/blob/master/docs/public/how-it-works.md).
|
|
82
89
|
|
|
90
|
+
## Why Langflower
|
|
91
|
+
|
|
92
|
+
- **You stay in control.** Workflows can request approval before sensitive
|
|
93
|
+
file edits or shell commands run.
|
|
94
|
+
- **Use the browser you already have.** Other harnesses pack a web UI into
|
|
95
|
+
a built-in browser such as Electron. Langflower uses your existing
|
|
96
|
+
browser, so you can close the tab, free those resources, and let the
|
|
97
|
+
server keep the run; reopen it and the UI catches up.
|
|
98
|
+
- **Extend it when the defaults are not enough.** Langflower uses common
|
|
99
|
+
agent primitives — **MCP** and **skills** — and lets you define **custom
|
|
100
|
+
nodes** on top: processing in the graph, or custom tools for agents via
|
|
101
|
+
the same **ToolHandle** contract as built-ins.
|
|
102
|
+
|
|
83
103
|
## How it compares
|
|
84
104
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
105
|
+
Versus chat-style harnesses (often an Electron shell around a model loop):
|
|
106
|
+
Langflower is a local node graph. The LLM is a node, not the product.
|
|
107
|
+
Order comes from topology, not from the model deciding it is done.
|
|
108
|
+
The UI is your existing browser, not a bundled one.
|
|
88
109
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
110
|
+
Versus cloud graph tools: the same idea of wiring nodes, but aimed at a
|
|
111
|
+
folder on your machine — home or a closed network with internal
|
|
112
|
+
providers — not at hosting a service or cloning ETL in the cloud.
|
|
113
|
+
|
|
114
|
+
## What it lacks
|
|
115
|
+
|
|
116
|
+
- **Chat sessions.** Node-internal state is the current architecture, so
|
|
117
|
+
serializable chat-session mechanics are hard. Maybe later.
|
|
118
|
+
- **Image and video.** No asset management for multimodal models. Not yet.
|
|
119
|
+
- **No built-in IDE or git UI.** We are not reinventing those wheels. Use
|
|
120
|
+
the editor and git tools you already have.
|
|
93
121
|
|
|
94
122
|
## Quick start
|
|
95
123
|
|
|
96
124
|
Requires **Node.js ≥ 22**.
|
|
97
125
|
|
|
126
|
+
One-shot OS installers (Node LTS if needed + global `langflower`):
|
|
127
|
+
[install/](install/) (`windows.ps1`, `linux.sh`, `macos.sh`).
|
|
128
|
+
|
|
98
129
|
```bash
|
|
99
130
|
npm install -g langflower
|
|
100
131
|
langflower
|
|
@@ -122,17 +153,12 @@ Maintainers (monorepo only): [docs/RELEASE.md](https://github.com/earthdmitriy/l
|
|
|
122
153
|
|
|
123
154
|
Shipped with the npm package under [`docs/public/`](https://github.com/earthdmitriy/langflower/tree/master/docs/public):
|
|
124
155
|
|
|
125
|
-
| Want to…
|
|
126
|
-
|
|
|
127
|
-
| Install and first run
|
|
128
|
-
| Understand the product
|
|
129
|
-
| Use the canvas and runs
|
|
130
|
-
| Browse workflow ideas
|
|
131
|
-
| Configure providers and keys
|
|
132
|
-
| Add skills or custom nodes
|
|
133
|
-
| Builder runtime picture
|
|
134
|
-
|
|
135
|
-
## What Langflower is not
|
|
136
|
-
|
|
137
|
-
Langflower is local and project-scoped. It is not a hosted multi-tenant cloud
|
|
138
|
-
product or a generic cloud ETL clone.
|
|
156
|
+
| Want to… | Start here |
|
|
157
|
+
| -------------------------------- | ---------------------------------------------------------------------------------------------------------- |
|
|
158
|
+
| Install and first run | [Getting started](https://github.com/earthdmitriy/langflower/blob/master/docs/public/getting-started.md) |
|
|
159
|
+
| Understand the product | [Product overview](https://github.com/earthdmitriy/langflower/blob/master/docs/public/product.md) |
|
|
160
|
+
| Use the canvas and runs | [Using the editor](https://github.com/earthdmitriy/langflower/blob/master/docs/public/using-the-editor.md) |
|
|
161
|
+
| Browse workflow ideas | [Workflow ideas](https://github.com/earthdmitriy/langflower/blob/master/docs/public/workflows.md) |
|
|
162
|
+
| Configure providers and keys | [Configuration](https://github.com/earthdmitriy/langflower/blob/master/docs/public/configuration.md) |
|
|
163
|
+
| Add MCP, skills, or custom nodes | [Extending](https://github.com/earthdmitriy/langflower/blob/master/docs/public/extending.md) |
|
|
164
|
+
| Builder runtime picture | [How it works](https://github.com/earthdmitriy/langflower/blob/master/docs/public/how-it-works.md) |
|
package/docs/public/README.md
CHANGED
|
@@ -7,9 +7,9 @@ package).
|
|
|
7
7
|
| Manual | Topic |
|
|
8
8
|
| ------------------------------------------ | ----------------------------------------- |
|
|
9
9
|
| [Getting started](getting-started.md) | Install, first run, ports |
|
|
10
|
-
| [Product overview](product.md) |
|
|
10
|
+
| [Product overview](product.md) | Local node graph: pitch, compare, lacks |
|
|
11
11
|
| [Using the editor](using-the-editor.md) | Canvas, runs, human review, reconnect |
|
|
12
12
|
| [Workflow ideas](workflows.md) | Common scenarios you can build |
|
|
13
13
|
| [Configuration](configuration.md) | Providers, models, keys, project settings |
|
|
14
|
-
| [Extending Langflower](extending.md) |
|
|
14
|
+
| [Extending Langflower](extending.md) | MCP, skills, custom nodes (ToolHandle) |
|
|
15
15
|
| [How it works (builders)](how-it-works.md) | Short runtime picture for extenders |
|
|
@@ -44,8 +44,12 @@ the workflow.
|
|
|
44
44
|
|
|
45
45
|
## Custom nodes and skills
|
|
46
46
|
|
|
47
|
+
MCP and skills are the common agent primitives. Custom nodes add graph
|
|
48
|
+
processing or custom tools via **ToolHandle**.
|
|
49
|
+
|
|
47
50
|
- Skills: markdown under `.langflower/skills/<name>/`
|
|
48
51
|
- Custom nodes: packs under `.langflower/nodes/<pack>/`
|
|
52
|
+
- MCP: palette nodes plus optional project `mcp` in `langflower.jsonc`
|
|
49
53
|
|
|
50
54
|
See [Extending Langflower](extending.md).
|
|
51
55
|
|
package/docs/public/extending.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# Extending Langflower
|
|
2
2
|
|
|
3
|
+
Langflower uses common agent primitives — **MCP** and **skills** — and
|
|
4
|
+
lets you define **custom nodes** on top: processing in the graph, or
|
|
5
|
+
custom tools for agents via the same **ToolHandle** contract as built-ins.
|
|
6
|
+
|
|
7
|
+
## MCP and skills
|
|
8
|
+
|
|
9
|
+
Optional `mcp` entries in `.langflower/langflower.jsonc` declare stdio/http
|
|
10
|
+
servers; palette MCP nodes emit **ToolHandle**s. Agents do not spawn MCP
|
|
11
|
+
themselves. Permission floors for harness tools live in project config.
|
|
12
|
+
Skills are markdown playbooks under `.langflower/skills/` (next section).
|
|
13
|
+
|
|
14
|
+
See [Configuration](configuration.md).
|
|
15
|
+
|
|
3
16
|
## Skills
|
|
4
17
|
|
|
5
18
|
Skills are markdown playbooks the agent can load. Add a folder:
|
|
@@ -15,8 +28,11 @@ do in your project.
|
|
|
15
28
|
|
|
16
29
|
## Custom nodes
|
|
17
30
|
|
|
18
|
-
|
|
19
|
-
|
|
31
|
+
Custom nodes share the same authoring SDK as the built-in catalog. Use them
|
|
32
|
+
for graph processing, or to expose custom tools to agents as **ToolHandle**s
|
|
33
|
+
on `tools` ports.
|
|
34
|
+
|
|
35
|
+
Default path for a simple node:
|
|
20
36
|
|
|
21
37
|
```ts
|
|
22
38
|
import { defineNode } from '@langflower/node-sdk';
|
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
- A project folder on your machine (code, docs, or any workspace you want
|
|
7
7
|
Langflower to work in)
|
|
8
8
|
|
|
9
|
+
To install Node (latest LTS when missing or too old) and the global CLI in
|
|
10
|
+
one step, download a single script from
|
|
11
|
+
[install/](../../install/):
|
|
12
|
+
[windows.ps1](../../install/windows.ps1),
|
|
13
|
+
[linux.sh](../../install/linux.sh), or
|
|
14
|
+
[macos.sh](../../install/macos.sh).
|
|
15
|
+
|
|
9
16
|
## Install and run
|
|
10
17
|
|
|
11
18
|
```bash
|
|
@@ -5,11 +5,17 @@ architecture spec.
|
|
|
5
5
|
|
|
6
6
|
## Pieces you interact with
|
|
7
7
|
|
|
8
|
-
1. **CLI** — starts a local server for one project folder and opens the UI
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
1. **CLI** — starts a local server for one project folder and opens the UI
|
|
9
|
+
in your existing browser (not a bundled Electron shell).
|
|
10
|
+
2. **Runtime** — wires **reactive nodes**. Ports are independent: a node can
|
|
11
|
+
receive on one input and emit on one output at any time.
|
|
12
|
+
3. **Node SDK** — public contract (`@langflower/node-sdk`). Built-in
|
|
13
|
+
**common nodes** and custom packs use the same SDK.
|
|
14
|
+
4. **Server** — composes those pieces, compiles user-defined node packs, and
|
|
15
|
+
owns the live run.
|
|
16
|
+
5. **UI** — thin browser client. Canvas + feed listen to WebSocket events
|
|
17
|
+
from the server. Closing the tab does not stop the run; reopen and the
|
|
18
|
+
server catches the UI up.
|
|
13
19
|
|
|
14
20
|
## Why review “just works”
|
|
15
21
|
|
|
@@ -24,12 +30,13 @@ model cannot skip it by claiming it is finished.
|
|
|
24
30
|
|
|
25
31
|
## Extensibility surface
|
|
26
32
|
|
|
27
|
-
| You add… | Where
|
|
28
|
-
| ------------ |
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
+
| You add… | Where |
|
|
34
|
+
| ------------ | ------------------------------------------------------------ |
|
|
35
|
+
| MCP | Palette MCP nodes + optional `mcp` in JSONC |
|
|
36
|
+
| Skills | `.langflower/skills/` |
|
|
37
|
+
| Custom nodes | `.langflower/nodes/<pack>/` — processing or ToolHandle tools |
|
|
38
|
+
| Workflows | `.langflower/workflows/` |
|
|
39
|
+
| Providers | `.langflower/langflower.jsonc` |
|
|
33
40
|
|
|
34
41
|
See [Extending](extending.md) and [Configuration](configuration.md).
|
|
35
42
|
|
package/docs/public/product.md
CHANGED
|
@@ -1,40 +1,50 @@
|
|
|
1
1
|
# Product overview
|
|
2
2
|
|
|
3
|
-
Langflower
|
|
3
|
+
Langflower is not built around the LLM as a first-class citizen. The core
|
|
4
|
+
abstraction is a **reactive node**: several typed inputs, several typed
|
|
5
|
+
outputs. Each port acts independently — a node can receive on one input
|
|
6
|
+
and emit on one output at any time, without waiting for the rest. The
|
|
7
|
+
runtime wires those nodes into a workflow.
|
|
4
8
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
9
|
+
Because ports fire on their own, an LLM agent is just another node: prompt
|
|
10
|
+
and tools in; response out; streaming tool log, reasoning, and draft as
|
|
11
|
+
extra outputs. LLM-specific logic stays inside that node. It does not leak
|
|
12
|
+
through the rest of the app.
|
|
8
13
|
|
|
9
|
-
**
|
|
14
|
+
**Not another chat harness. A local node graph.**
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
Langflower runs on your machine, scoped to a folder you open. Data, custom
|
|
17
|
+
nodes, and workflows live there. You can reproduce what mature cloud tools
|
|
18
|
+
offer at home, or on a closed network with internal LLM providers.
|
|
19
|
+
|
|
20
|
+
The sequence is the workflow topology (a **hard harness**). QA, review, and
|
|
21
|
+
code checks sit on the graph, so agents cannot skip them. Coding, chat,
|
|
22
|
+
agent-to-agent dialogue, and custom gates are the same idea: wire nodes.
|
|
12
23
|
|
|
13
|
-
|
|
14
|
-
- **Also useful for:** writing and refining files, research-style fan-out, and
|
|
15
|
-
maintaining project documentation in the same folder
|
|
24
|
+
## Who it is for
|
|
16
25
|
|
|
17
|
-
|
|
26
|
+
Anyone with a local folder and a process they want on a graph. Coding in a
|
|
27
|
+
repo is one scenario among others — writing, research fan-out, knowledge
|
|
28
|
+
bases, and custom pipelines. Browse [workflow ideas](workflows.md).
|
|
18
29
|
|
|
19
|
-
|
|
20
|
-
| ---------------------------------------------------- | ---------------------------------------------------- |
|
|
21
|
-
| Pipeline order is fixed on the canvas (hard harness) | Aimed at **local daily work**, not hosting a service |
|
|
22
|
-
| Review and QA stages cannot be skipped by the model | Bootstrap into a real project folder quickly |
|
|
23
|
-
| You stay on your files, not only in chat history | Same idea: reusable process, local folder centre |
|
|
30
|
+
## How it compares
|
|
24
31
|
|
|
25
|
-
|
|
32
|
+
Versus chat-style harnesses (often an Electron shell around a model loop):
|
|
33
|
+
Langflower is a local node graph. The LLM is a node, not the product.
|
|
34
|
+
Order comes from topology, not from the model deciding it is done.
|
|
35
|
+
The UI is your existing browser, not a bundled one.
|
|
26
36
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
you need a check.
|
|
37
|
+
Versus cloud graph tools: the same idea of wiring nodes, but aimed at a
|
|
38
|
+
folder on your machine — home or a closed network with internal
|
|
39
|
+
providers — not at hosting a service or cloning ETL in the cloud.
|
|
31
40
|
|
|
32
|
-
## What
|
|
41
|
+
## What it lacks
|
|
33
42
|
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
37
|
-
|
|
43
|
+
- **Chat sessions.** Node-internal state is the current architecture, so
|
|
44
|
+
serializable chat-session mechanics are hard. Maybe later.
|
|
45
|
+
- **Image and video.** No asset management for multimodal models. Not yet.
|
|
46
|
+
- **No built-in IDE or git UI.** We are not reinventing those wheels. Use
|
|
47
|
+
the editor and git tools you already have.
|
|
38
48
|
|
|
39
49
|
## Learn more
|
|
40
50
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "langflower",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Visual LLM-chain builder",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"@langflower/websocket-bridge": "file:./vendor/websocket-bridge",
|
|
28
28
|
"@langflower/shared": "file:./vendor/shared",
|
|
29
29
|
"@langflower/server": "file:./vendor/server",
|
|
30
|
-
"@rx-evo/stateful-observable": "^0.
|
|
30
|
+
"@rx-evo/stateful-observable": "^0.6.0",
|
|
31
31
|
"rxjs": "^7.8.1",
|
|
32
32
|
"undici": "^7.28.0",
|
|
33
33
|
"@types/node": "^22.10.0",
|