langflower 0.0.8 → 0.0.10
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/package.json +2 -2
- package/ui-dist/{chunk-Y6VMBLSJ.js → chunk-7UMVYN3A.js} +1 -1
- package/ui-dist/{chunk-6DQ2XSRW.js → chunk-MDGXX73Z.js} +3 -3
- package/ui-dist/index.html +2 -2
- package/ui-dist/main-Z7CPFXFA.js +313 -0
- package/ui-dist/styles-2TMDAUD7.css +1 -0
- package/vendor/common-nodes/dist/ai/chat-completion-stream.d.ts +2 -0
- package/vendor/common-nodes/dist/ai/critique/node.d.ts +246 -0
- package/vendor/common-nodes/dist/ai/critique/node.js +2 -2
- package/vendor/common-nodes/dist/ai/fake-llm/node.d.ts +246 -0
- package/vendor/common-nodes/dist/ai/features/chat-completion-stream.d.ts +53 -0
- package/vendor/common-nodes/dist/ai/features/chat-completion-stream.js +1 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/autokick-recovery.d.ts +13 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/autokick-recovery.js +17 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/classify-llm-failure.d.ts +2 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/classify-llm-failure.js +113 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/dead-loop-detector.d.ts +28 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/dead-loop-detector.js +194 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/live-get-tools.d.ts +9 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/live-get-tools.js +21 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-reducer.d.ts +2 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-reducer.js +204 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-types.d.ts +120 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-types.js +39 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/normalize-llm-recovery-policy.d.ts +2 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/normalize-llm-recovery-policy.js +59 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/operators/normalize-tool-result.d.ts +1 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/operators/normalize-tool-result.js +7 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/operators/observe-provider-stream.d.ts +43 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/operators/observe-provider-stream.js +96 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/run-agent-loop.d.ts +29 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/run-agent-loop.js +44 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/run-llm-loop.d.ts +74 -0
- package/vendor/common-nodes/dist/ai/features/llm-loop/run-llm-loop.js +658 -0
- package/vendor/common-nodes/dist/ai/features/llm-role-preset.d.ts +69 -0
- package/vendor/common-nodes/dist/ai/features/llm-role-preset.js +265 -0
- package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.d.ts +141 -0
- package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.js +193 -0
- package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.d.ts +21 -0
- package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.js +118 -0
- package/vendor/common-nodes/dist/ai/features/openai/context-length-error.d.ts +14 -0
- package/vendor/common-nodes/dist/ai/features/openai/context-length-error.js +63 -0
- package/vendor/common-nodes/dist/ai/features/openai/create-chat-completion-stream.d.ts +19 -0
- package/vendor/common-nodes/dist/ai/features/openai/create-chat-completion-stream.js +182 -0
- package/vendor/common-nodes/dist/ai/features/openai/list-provider-models.d.ts +28 -0
- package/vendor/common-nodes/dist/ai/features/openai/list-provider-models.js +52 -0
- package/vendor/common-nodes/dist/ai/features/openai/llm-context-compaction.d.ts +31 -0
- package/vendor/common-nodes/dist/ai/features/openai/llm-context-compaction.js +326 -0
- package/vendor/common-nodes/dist/ai/features/openai/normalize-compaction-params.d.ts +14 -0
- package/vendor/common-nodes/dist/ai/features/openai/normalize-compaction-params.js +21 -0
- package/vendor/common-nodes/dist/ai/features/openai/prepare-chat-completion.d.ts +30 -0
- package/vendor/common-nodes/dist/ai/features/openai/prepare-chat-completion.js +132 -0
- package/vendor/common-nodes/dist/ai/features/path-choice/control-tools.d.ts +20 -0
- package/vendor/common-nodes/dist/ai/features/path-choice/control-tools.js +70 -0
- package/vendor/common-nodes/dist/ai/features/path-choice/run-reactive-path-choice-loop.d.ts +32 -0
- package/vendor/common-nodes/dist/ai/features/path-choice/run-reactive-path-choice-loop.js +93 -0
- package/vendor/common-nodes/dist/ai/features/prompt/build-effective-system-prompt.d.ts +9 -0
- package/vendor/common-nodes/dist/ai/features/prompt/build-effective-system-prompt.js +21 -0
- package/vendor/common-nodes/dist/ai/features/prompt/normalize-max-iterations.d.ts +13 -0
- package/vendor/common-nodes/dist/ai/features/prompt/normalize-max-iterations.js +23 -0
- package/vendor/common-nodes/dist/ai/features/prompt/resolve-chat-provider-model.d.ts +10 -0
- package/vendor/common-nodes/dist/ai/features/prompt/resolve-chat-provider-model.js +8 -0
- package/vendor/common-nodes/dist/ai/features/run-host-services.d.ts +54 -0
- package/vendor/common-nodes/dist/ai/features/run-host-services.js +29 -0
- package/vendor/common-nodes/dist/ai/features/scripted-chat-completion-stream.d.ts +17 -0
- package/vendor/common-nodes/dist/ai/features/scripted-chat-completion-stream.js +61 -0
- package/vendor/common-nodes/dist/ai/features/sub-agent-protocol.d.ts +40 -0
- package/vendor/common-nodes/dist/ai/features/sub-agent-protocol.js +44 -0
- package/vendor/common-nodes/dist/ai/features/ui-schema/llm-compaction-ui-schema.d.ts +14 -0
- package/vendor/common-nodes/dist/ai/features/ui-schema/llm-compaction-ui-schema.js +18 -0
- package/vendor/common-nodes/dist/ai/features/ui-schema/llm-panel-ui-schema.d.ts +80 -0
- package/vendor/common-nodes/dist/ai/features/ui-schema/llm-panel-ui-schema.js +76 -0
- package/vendor/common-nodes/dist/ai/features/ui-schema/llm-recovery-ui-schema.d.ts +113 -0
- package/vendor/common-nodes/dist/ai/features/ui-schema/llm-recovery-ui-schema.js +131 -0
- package/vendor/common-nodes/dist/ai/features/wait-for-subagent-result.d.ts +7 -0
- package/vendor/common-nodes/dist/ai/features/wait-for-subagent-result.js +31 -0
- package/vendor/common-nodes/dist/ai/llm-loop/autokick-recovery.d.ts +13 -0
- package/vendor/common-nodes/dist/ai/llm-loop/autokick-recovery.js +17 -0
- package/vendor/common-nodes/dist/ai/llm-loop/dead-loop-detector.d.ts +28 -0
- package/vendor/common-nodes/dist/ai/llm-loop/dead-loop-detector.js +194 -0
- package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-reducer.js +36 -0
- package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-types.d.ts +35 -0
- package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-types.js +19 -0
- package/vendor/common-nodes/dist/ai/llm-loop/normalize-llm-recovery-policy.js +52 -9
- package/vendor/common-nodes/dist/ai/llm-loop/operators/observe-provider-stream.d.ts +8 -2
- package/vendor/common-nodes/dist/ai/llm-loop/operators/observe-provider-stream.js +43 -13
- package/vendor/common-nodes/dist/ai/llm-loop/run-llm-loop.d.ts +3 -5
- package/vendor/common-nodes/dist/ai/llm-loop/run-llm-loop.js +116 -1
- package/vendor/common-nodes/dist/ai/llm-recovery-ui-schema.d.ts +82 -0
- package/vendor/common-nodes/dist/ai/llm-recovery-ui-schema.js +95 -0
- package/vendor/common-nodes/dist/ai/llm-session-shell.d.ts +4 -9
- package/vendor/common-nodes/dist/ai/llm-session-shell.js +2 -4
- package/vendor/common-nodes/dist/ai/nodes/critique/node.d.ts +588 -0
- package/vendor/common-nodes/dist/ai/nodes/critique/node.js +227 -0
- package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.d.ts +571 -0
- package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.js +201 -0
- package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.d.ts +587 -0
- package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.js +84 -0
- package/vendor/common-nodes/dist/ai/nodes/review/node.d.ts +593 -0
- package/vendor/common-nodes/dist/ai/nodes/review/node.js +227 -0
- package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.d.ts +630 -0
- package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.js +417 -0
- package/vendor/common-nodes/dist/ai/openai/create-chat-completion-stream.js +6 -0
- package/vendor/common-nodes/dist/ai/openai/prepare-chat-completion.d.ts +2 -0
- package/vendor/common-nodes/dist/ai/openai/prepare-chat-completion.js +18 -0
- package/vendor/common-nodes/dist/ai/openai-llm/node.d.ts +246 -0
- package/vendor/common-nodes/dist/ai/review/node.d.ts +246 -0
- package/vendor/common-nodes/dist/ai/review/node.js +2 -2
- package/vendor/common-nodes/dist/ai/sub-agent/node.d.ts +246 -0
- package/vendor/common-nodes/dist/ai/sub-agent/node.js +2 -2
- package/vendor/common-nodes/dist/catalog.js +9 -5
- package/vendor/common-nodes/dist/compile-custom-nodes/node.d.ts +21 -0
- package/vendor/common-nodes/dist/compile-custom-nodes/node.js +45 -0
- package/vendor/common-nodes/dist/crawl/crawl/node.js +1 -1
- package/vendor/common-nodes/dist/crawl/fetch-url/node.js +1 -1
- package/vendor/common-nodes/dist/flow/repeat/node.js +6 -1
- package/vendor/common-nodes/dist/langflower-tools/emit-registration-tools.d.ts +18 -0
- package/vendor/common-nodes/dist/langflower-tools/emit-registration-tools.js +29 -0
- package/vendor/common-nodes/dist/langflower-tools/node.d.ts +20 -0
- package/vendor/common-nodes/dist/langflower-tools/node.js +77 -0
- package/vendor/common-nodes/dist/mcp/mcp-http/node.d.ts +4 -4
- package/vendor/common-nodes/dist/mcp/mcp-http/node.js +9 -10
- package/vendor/common-nodes/dist/mcp/mcp-stdio/node.d.ts +4 -4
- package/vendor/common-nodes/dist/mcp/mcp-stdio/node.js +9 -10
- package/vendor/common-nodes/dist/text/append-file/node.js +1 -1
- package/vendor/common-nodes/dist/text/read-file/node.js +1 -1
- package/vendor/common-nodes/dist/text/write-file/node.js +1 -1
- 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 +1 -11
- 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 +42 -0
- package/vendor/common-nodes/package.json +9 -13
- package/vendor/compiler/dist/compile-project-nodes.d.ts +2 -1
- package/vendor/compiler/dist/compile-project-nodes.js +35 -6
- package/vendor/compiler/dist/resolve-host-types.d.ts +0 -5
- package/vendor/compiler/dist/resolve-host-types.js +0 -8
- package/vendor/compiler/package.json +1 -1
- 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 +4 -6
- package/vendor/node-sdk/dist/node-factory/define-llm-node/define-llm-node.js +4 -6
- 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-llm-node/recovery-notice.d.ts +8 -0
- package/vendor/node-sdk/dist/node-factory/define-llm-node/recovery-notice.js +14 -0
- package/vendor/node-sdk/dist/node-factory/define-mcp/mcp-handle.d.ts +3 -4
- package/vendor/node-sdk/dist/node-factory/define-mcp/mcp-handle.js +1 -1
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/types.d.ts +2 -4
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/ui-schema-inference.d.ts +1 -1
- package/vendor/node-sdk/package.json +1 -1
- 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-editor.d.ts +5 -1
- package/vendor/runtime/dist/runtime-editor.js +19 -0
- package/vendor/runtime/dist/runtime-runner.d.ts +8 -3
- package/vendor/runtime/dist/runtime-runner.js +108 -87
- package/vendor/runtime/dist/runtime.d.ts +3 -1
- package/vendor/runtime/dist/runtime.js +1 -0
- package/vendor/runtime/dist/testing/workflows/workflow-events.d.ts +10 -6
- package/vendor/runtime/dist/testing/workflows/workflow-events.js +21 -31
- package/vendor/runtime/dist/types.d.ts +52 -40
- package/vendor/runtime/dist/types.js +5 -1
- package/vendor/runtime/package.json +1 -1
- package/vendor/server/dist/bridge/attach-langflower-bridge.js +3 -2
- package/vendor/server/dist/bridge/bridge-event-log.js +17 -102
- package/vendor/server/dist/bridge/build-execution-context.d.ts +5 -2
- package/vendor/server/dist/bridge/build-execution-context.js +48 -8
- package/vendor/server/dist/bridge/forward-runner-event.d.ts +1 -1
- package/vendor/server/dist/bridge/forward-runner-event.js +7 -12
- package/vendor/server/dist/bridge/get-live-wired-tools.d.ts +13 -0
- package/vendor/server/dist/bridge/get-live-wired-tools.js +83 -0
- package/vendor/server/dist/bridge/langflower-tools-rpc.d.ts +7 -0
- package/vendor/server/dist/bridge/langflower-tools-rpc.js +29 -0
- package/vendor/server/dist/bridge/wire-custom-palette-handlers.d.ts +2 -1
- package/vendor/server/dist/bridge/wire-custom-palette-handlers.js +3 -5
- package/vendor/server/dist/bridge/wire-runner-handlers.js +17 -10
- package/vendor/server/dist/bridge/wire-workflow-handlers.js +23 -9
- package/vendor/server/dist/checkpoint/run-checkpoint-session.d.ts +1 -1
- package/vendor/server/dist/checkpoint/run-checkpoint-session.js +10 -9
- package/vendor/server/dist/palette/compile-and-hot-swap-custom-nodes.d.ts +10 -0
- package/vendor/server/dist/palette/compile-and-hot-swap-custom-nodes.js +23 -0
- 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.d.ts +5 -0
- package/vendor/server/dist/workflow/apply-editor-mutation.js +32 -0
- package/vendor/server/skeleton/instructions.md +9 -5
- package/vendor/server/skeleton/nodes/my-nodes/README.md +4 -3
- package/vendor/server/skeleton/nodes/my-nodes/package.json +1 -1
- package/vendor/server/skeleton/skills/langflower-helper/SKILL.md +82 -38
- package/vendor/server/skeleton/skills/langflower-helper/architecture.md +29 -10
- package/vendor/server/skeleton/skills/langflower-helper/layout.md +16 -15
- package/vendor/server/skeleton/skills/langflower-node-writer/SKILL.md +19 -9
- package/vendor/server/skeleton/skills/langflower-workflow-writer/SKILL.md +23 -15
- package/vendor/server/skeleton/workflows/kb-create.json +15 -43
- package/vendor/server/skeleton/workflows/kb-navigate.json +8 -22
- package/vendor/server/skeleton/workflows/simple-coder.json +18 -46
- package/vendor/server/skeleton/workflows/starter.json +35 -22
- package/vendor/shared/dist/execution/derive-run-settle-outcome.d.ts +1 -1
- package/vendor/shared/dist/execution/derive-run-settle-outcome.js +4 -3
- package/vendor/shared/dist/execution/derive-run-settle-outcome.test.js +18 -15
- package/vendor/shared/dist/langflower-bus-config.d.ts +6 -14
- package/vendor/shared/dist/langflower-bus-config.js +4 -12
- package/vendor/shared/dist/langflower-config/resolve-wired-tool-options.js +6 -0
- package/vendor/shared/dist/langflower-config/resolve-wired-tool-options.test.js +30 -0
- package/vendor/shared/dist/langflower-ws-waits.d.ts +9 -14
- package/vendor/shared/dist/langflower-ws-waits.js +14 -14
- package/vendor/websocket-bridge/dist/bridge-codec.d.ts +1 -0
- package/vendor/websocket-bridge/dist/bridge-codec.js +11 -11
- package/vendor/websocket-bridge/dist/bridge-frame.js +1 -1
- package/vendor/websocket-bridge/dist/bridge-subjects.d.ts +1 -1
- package/vendor/websocket-bridge/dist/bridge-subjects.js +2 -2
- package/vendor/websocket-bridge/dist/bridge-types.d.ts +13 -1
- package/vendor/websocket-bridge/dist/create-client.js +3 -3
- package/vendor/websocket-bridge/dist/create-server.js +12 -6
- package/vendor/websocket-bridge/package.json +8 -0
- package/ui-dist/main-ECEWAM6V.js +0 -311
- package/ui-dist/styles-EOXODOI7.css +0 -1
|
@@ -13,6 +13,10 @@ provider. They are past bootstrap; do not lead with CLI start or provider setup.
|
|
|
13
13
|
## Role and style
|
|
14
14
|
|
|
15
15
|
- Short, actionable steps. No long essays.
|
|
16
|
+
- On **starter**, **Langflower Tools** is wired to you and Writer — you
|
|
17
|
+
already have **`compile_custom_nodes`**. After pack file changes, **call
|
|
18
|
+
it** (no arguments). Do not send the user to Custom → **Update** as the
|
|
19
|
+
only path.
|
|
16
20
|
- Answer **only** from allowed fact sources: the **Companion docs** (via
|
|
17
21
|
`read` when relevant) and the **Knowledge base** below. If a fact is
|
|
18
22
|
missing, say **not in my facts** (or point at project use-case docs) —
|
|
@@ -35,8 +39,8 @@ Bootstrap and provider facts stay in the Knowledge base for when they ask.
|
|
|
35
39
|
Example opening:
|
|
36
40
|
|
|
37
41
|
> Glad you got Langflower running and a provider configured. I can explain what
|
|
38
|
-
> Langflower can do
|
|
39
|
-
> What do you want to build?
|
|
42
|
+
> Langflower can do, help you set up workflows and custom nodes, and compile
|
|
43
|
+
> packs from this chat (`compile_custom_nodes`). What do you want to build?
|
|
40
44
|
|
|
41
45
|
## Companion docs
|
|
42
46
|
|
|
@@ -112,7 +116,11 @@ do not say coding pipelines “don’t exist” or are unavailable.
|
|
|
112
116
|
- **Can:** Chat Input graphs start from the composer **Start** control. Plain
|
|
113
117
|
**Run** stays disabled for those graphs.
|
|
114
118
|
- **Can:** While running — Hard **Stop**, soft **Pause**, HITL and
|
|
115
|
-
`permission.ask` in the composer.
|
|
119
|
+
`permission.ask` in the composer. Work log **clears** on successful
|
|
120
|
+
workflow load / create / copy (not rename).
|
|
121
|
+
- **Cannot:** Switch, rename, delete, copy, or create a workflow while a run
|
|
122
|
+
is active — Stop first. Same lock: inspector / canvas inline / palette
|
|
123
|
+
drag (`cursor-not-allowed`).
|
|
116
124
|
- **Cannot:** Tell users to press plain **Run** to start a Chat Input graph.
|
|
117
125
|
- **Cannot:** Claim the feed after reload must be **richer** than live.
|
|
118
126
|
- **Cannot:** Claim `basic-coder` proves chat-dense mood for the full
|
|
@@ -128,36 +136,45 @@ do not say coding pipelines “don’t exist” or are unavailable.
|
|
|
128
136
|
|
|
129
137
|
### 6. Coding workflows
|
|
130
138
|
|
|
131
|
-
| Name | Fact
|
|
132
|
-
| -------------- |
|
|
133
|
-
| `starter` | Onboarding chat + this skill + Writer Sub-Agent (`langflower-workflow-writer` + `langflower-node-writer`) — default open after seed
|
|
134
|
-
| Skeleton stubs | `simple-coder`, `advanced-coder`, `kb-create`, `kb-navigate`, … seeded on first-run; with provider → Start
|
|
135
|
-
| `simple-coder` | Plan⇄HITL→Coder⇄HITL→Finish smoke spine + `common-memory-tools` on Plan/Coder/Researcher/Worker; Researcher Sub-Agent under Plan, Worker under Coder — **not** full multi-loop `coding-agent`
|
|
136
|
-
| `kb-create` | Memory / project wiki create: Orchestrator **indexes** the repo with `glob`/`read`, persists `history/work-queue.md`, then **serially**
|
|
137
|
-
| `kb-navigate` | Memory navigate: Navigator + Searcher + memory tree/grep/section tools; HITL Review Gate for follow-ups
|
|
138
|
-
| `basic-coder` | Basic coding harness (Plan⇄HITL→Coder⇄HITL→Finish) — not a toy, **not** full multi-loop `coding-agent`
|
|
139
|
-
| `coding-agent` | Clarify HITL → red team → plan gate → coder → QA → `common-review` → result HITL; **graph** orders stages
|
|
140
|
-
| Status | Use-case **Partial**; real-LLM Implementable bar open; Fake CI ≠ end-user proof — **not** “no templates”
|
|
139
|
+
| Name | Fact |
|
|
140
|
+
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
141
|
+
| `starter` | Onboarding chat + this skill + Writer Sub-Agent (`langflower-workflow-writer` + `langflower-node-writer`) — default open after seed |
|
|
142
|
+
| Skeleton stubs | `simple-coder`, `advanced-coder`, `kb-create`, `kb-navigate`, … seeded on first-run; with provider → Start |
|
|
143
|
+
| `simple-coder` | Plan⇄HITL→Coder⇄HITL→Finish smoke spine + `common-memory-tools` on Plan/Coder/Researcher/Worker; Researcher Sub-Agent under Plan, Worker under Coder — **not** full multi-loop `coding-agent` |
|
|
144
|
+
| `kb-create` | Memory / project wiki create: Orchestrator **indexes** the repo with `glob`/`read`, persists `history/work-queue.md`, then **serially** calls Explorer → Composer **one unit at a time**; `common-memory-tools` writes `core/*` + `modules/*`; Review rejects non-empty Pending or thin overviews |
|
|
145
|
+
| `kb-navigate` | Memory navigate: Navigator + Searcher + memory tree/grep/section tools; HITL Review Gate for follow-ups |
|
|
146
|
+
| `basic-coder` | Basic coding harness (Plan⇄HITL→Coder⇄HITL→Finish) — not a toy, **not** full multi-loop `coding-agent` |
|
|
147
|
+
| `coding-agent` | Clarify HITL → red team → plan gate → coder → QA → `common-review` → result HITL; **graph** orders stages |
|
|
148
|
+
| Status | Use-case **Partial**; real-LLM Implementable bar open; Fake CI ≠ end-user proof — **not** “no templates” |
|
|
141
149
|
|
|
142
150
|
### 7. Run lifecycle
|
|
143
151
|
|
|
144
|
-
| Mechanism | Meaning
|
|
145
|
-
| --------------------- |
|
|
146
|
-
| Hard Stop | Cancel; does **not** by itself create checkpoint Continue
|
|
147
|
-
| Soft Pause | Per-node Steer pause of the last feed agent; siblings keep working; Send / Resume continues that node
|
|
148
|
-
|
|
|
149
|
-
|
|
|
150
|
-
|
|
|
152
|
+
| Mechanism | Meaning |
|
|
153
|
+
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
154
|
+
| Hard Stop | Cancel; does **not** by itself create checkpoint Continue |
|
|
155
|
+
| Soft Pause | Per-node Steer pause of the last feed agent; siblings keep working; Send / Resume continues that node |
|
|
156
|
+
| Provider recovery | Idle: default **autokick** (abort, exponential backoff, full-store replay + kick). Dead-loop: abort + short `retryBaseDelayMs` wait (not idle backoff) + kick. 429/5xx/network: short transient budget, then autokick **wait** (no kick, no penalty). `'retry'` banner stays in the feed after reasoning/draft; does not open Steer. Off / cap exhausted → **Steer**. Auth/config stay fatal |
|
|
157
|
+
| Browser close | If `langflower start` stays up, run continues; reopen live or settled |
|
|
158
|
+
| Process kill / reboot | **Not** detachable resume |
|
|
159
|
+
| Checkpoint Continue | Needs explicit boundary (`common-checkpoint` / `createCheckpoint`); **no** every-node auto Continue |
|
|
151
160
|
|
|
152
161
|
These four are **not** the same thing.
|
|
153
162
|
|
|
154
163
|
### 8. Tools, permissions, MCP
|
|
155
164
|
|
|
156
165
|
- **Can:** Harness builtins + `permission.ask` Allow/Deny for those builtins.
|
|
157
|
-
Wired pack / MCP tools (including memory writes
|
|
158
|
-
the edge is consent. Write Allow does **not**
|
|
159
|
-
|
|
160
|
-
|
|
166
|
+
Wired pack / MCP tools (including memory writes and **Langflower Tools**)
|
|
167
|
+
do **not** ask — authoring the edge is consent. Write Allow does **not**
|
|
168
|
+
grant bash. MCP **nodes** wire `tools` → agent `tools` (`ToolHandle[]`).
|
|
169
|
+
Optional **Tool collection** (`common-tool-collection`) can merge several
|
|
170
|
+
`tools` wires into one before the agent. Direct multi-wire into the agent
|
|
171
|
+
still works. System MCP from `langflower.jsonc` starts only for ids enabled
|
|
172
|
+
on nodes in the active workflow; those tools land on `EC.toolHandles`,
|
|
173
|
+
never as raw config.
|
|
174
|
+
- **Can:** `compile_custom_nodes` exists only when **Langflower Tools**
|
|
175
|
+
(`common-langflower-tools`) is wired into that agent’s `tools` port
|
|
176
|
+
(starter Helper / Writer). Same intent as Custom → **Update**. Recompile
|
|
177
|
+
is unsafe — not ambient on every agent.
|
|
161
178
|
- **Can:** First-run `langflower.jsonc` seeds `permission` allow-all (project
|
|
162
179
|
**floor**). Inspector **Tool permissions** table (`tool` / `deny` / `ask` /
|
|
163
180
|
`allow`) sets per-agent `toolPermissions` (cannot loosen past floor). Presets
|
|
@@ -171,16 +188,21 @@ These four are **not** the same thing.
|
|
|
171
188
|
### 9. Sub-Agent and swarm
|
|
172
189
|
|
|
173
190
|
Sub-Agent is an **explicit canvas node** for **control and observability**
|
|
174
|
-
(own toolLog/response, visible
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
-
|
|
178
|
-
|
|
179
|
-
|
|
191
|
+
(own toolLog/response, visible specialist) — not magic inside one LLM turn.
|
|
192
|
+
|
|
193
|
+
- **Can:** First-class Sub-Agent node. Wire Sub-Agent
|
|
194
|
+
`subagent-registration` → parent `tools` (one edge). The parent calls the
|
|
195
|
+
specialist tool (`Writer(subagent)` / `toolId` `Writer_subagent`) with a
|
|
196
|
+
`task`
|
|
197
|
+
(optional `skillId` from the Inspector Skills enum). That call closes the
|
|
198
|
+
parent work-log visit; the specialist streams as its own card. Default swarm
|
|
199
|
+
invokes are **serial**. Wiki/memory create (`kb-create`) uses **serial**
|
|
200
|
+
scoped specialist calls driven by a persisted work queue — not parallel
|
|
180
201
|
whole-repo fan-out.
|
|
181
202
|
- **Cannot / not yet:** Hide Sub-Agent work only inside a single LLM turn with
|
|
182
203
|
no graph node (anti-pattern). Parallel fan-out as the **default**. Nested
|
|
183
|
-
**workflow files** (far future).
|
|
204
|
+
**workflow files** (far future). Do not look for `spawn_subagent` or
|
|
205
|
+
registration / spawn / result ports — those wires are gone.
|
|
184
206
|
|
|
185
207
|
### 10. Other demos
|
|
186
208
|
|
|
@@ -209,7 +231,8 @@ When the user asks to “create a project wiki”, “build a knowledge base”,
|
|
|
209
231
|
→ Orchestrator (`common-openai-llm` + builtins `glob`/`read`/`grep` + wired
|
|
210
232
|
`common-memory-tools`) → Sub-Agents Explorer (read) + Composer (write) →
|
|
211
233
|
`common-review` with readiness criteria → Finish. Persist a work queue in
|
|
212
|
-
memory **before** deep survey;
|
|
234
|
+
memory **before** deep survey; call the Explorer / Composer specialist
|
|
235
|
+
tools **one unit at a time**.
|
|
213
236
|
- **Cannot:** Recommend one LLM that “reads the whole repo once and dumps a
|
|
214
237
|
wiki”. Claim vector/embedding KB as base. Claim Obsidian vault helpers as
|
|
215
238
|
shipped.
|
|
@@ -217,17 +240,38 @@ When the user asks to “create a project wiki”, “build a knowledge base”,
|
|
|
217
240
|
### 11. Custom nodes
|
|
218
241
|
|
|
219
242
|
- **Can:** **TypeScript** via `@langflower/node-sdk` — first-class language;
|
|
220
|
-
`tsc` / IDE types act as compile-time validators
|
|
221
|
-
|
|
222
|
-
|
|
243
|
+
`tsc` / IDE types act as compile-time validators. After file changes call
|
|
244
|
+
**`compile_custom_nodes`** (no args) or Custom → **Update** — same
|
|
245
|
+
composer. On starter you already have the tool (Langflower Tools wired).
|
|
246
|
+
Stop is not required for already-placed custom types (hot-swap).
|
|
247
|
+
An already-wired custom tools pack can be invoked later in the **same run**
|
|
248
|
+
after compile. New types appear under **Custom**; Langflower does **not**
|
|
249
|
+
auto-place or auto-wire them mid-run.
|
|
250
|
+
Packs under `.langflower/nodes/<pack>/`; user runs `npm install` in the pack
|
|
251
|
+
when adding author deps. See `instructions.md` and `nodes/my-nodes/README.md`.
|
|
223
252
|
Nodes may **intentionally keep in-memory internal state across runs**
|
|
224
253
|
(Stop / done / Start) until the user loads another workflow or shuts down
|
|
225
254
|
Langflower — not the same as Checkpoint resume after process kill.
|
|
226
255
|
- **Cannot:** Plain JS as the authoring path, Go, Python, or other languages.
|
|
227
256
|
Server auto-install. Sandboxed arbitrary user-node execution as shipped.
|
|
228
|
-
|
|
229
|
-
Claim that every node always resets on Stop, or
|
|
230
|
-
survives process restart without Checkpoints.
|
|
257
|
+
Ambient compile without Langflower Tools wired. Canvas add/remove node or
|
|
258
|
+
edge tools (not shipped). Claim that every node always resets on Stop, or
|
|
259
|
+
that in-memory node state survives process restart without Checkpoints.
|
|
260
|
+
|
|
261
|
+
### 11a. Recipe — write / reload a custom node
|
|
262
|
+
|
|
263
|
+
When the user asks to add or change a custom node from this starter chat:
|
|
264
|
+
|
|
265
|
+
1. Call Writer (or edit `.langflower/nodes/<pack>/*.ts` yourself).
|
|
266
|
+
2. Call **`compile_custom_nodes`** (no args). Report `status` / `nodeTypes` /
|
|
267
|
+
`errors` from the tool text. Pack failures also write
|
|
268
|
+
`COMPILATION_ERRORS.md`.
|
|
269
|
+
3. **Already on the canvas** → live now, no Stop. **New type** → user places
|
|
270
|
+
it from Custom and wires it; this tool does not drop nodes on the canvas.
|
|
271
|
+
4. If a custom tools pack is already wired into this agent, you may call those
|
|
272
|
+
`toolId`s later in **this run** after compile.
|
|
273
|
+
|
|
274
|
+
Do **not** treat Custom → Update as the only reload path on starter.
|
|
231
275
|
|
|
232
276
|
### 12. Status vocabulary
|
|
233
277
|
|
|
@@ -57,11 +57,18 @@ Project product data for Langflower lives under **`.langflower/`**.
|
|
|
57
57
|
- **HITL loops** (Review Gate, feedback ports, composer Start/Send) are normal
|
|
58
58
|
**internal waiting state of nodes**, not a separate product “interrupt the
|
|
59
59
|
engine” mechanism.
|
|
60
|
-
- LLM provider idle
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
60
|
+
- LLM provider idle **aborts** the in-flight request, then default
|
|
61
|
+
**autokick** (exponential backoff, full stored messages + kick user
|
|
62
|
+
turn). Dead-loop aborts the same way but waits **`retryBaseDelayMs`**
|
|
63
|
+
(not idle backoff) before that replay. HTTP 429 / 5xx / network use the
|
|
64
|
+
short transient budget, then join the idle autokick wait **without** a
|
|
65
|
+
kick turn or penalty bump. `'retry'` notices on the `recovery` port stay
|
|
66
|
+
in the feed after reasoning/draft, tick locally on the visit tail, and
|
|
67
|
+
do **not** open Steer. Autokick off or a finite cap exhausted keep the
|
|
68
|
+
node alive for **Steer / Resume** (`'suspended'`).
|
|
69
|
+
Partial draft text is telemetry, not committed history.
|
|
70
|
+
Authentication/configuration failures are terminal. Generic reload of any
|
|
71
|
+
failed non-LLM node is not yet shipped.
|
|
65
72
|
- Also on the bus: runner start / resume / interrupt intents, `permission.ask`,
|
|
66
73
|
and related facts.
|
|
67
74
|
|
|
@@ -69,7 +76,13 @@ Project product data for Langflower lives under **`.langflower/`**.
|
|
|
69
76
|
|
|
70
77
|
- LLM / agent nodes use **skills** and harness tools as wired in the graph.
|
|
71
78
|
- **Sub-Agent** is an **explicit canvas node** for control and observability
|
|
72
|
-
(own toolLog/response
|
|
79
|
+
(own toolLog/response). Wire `subagent-registration` into the parent
|
|
80
|
+
`tools` — not hidden work inside one LLM turn. The announced tool is
|
|
81
|
+
`{name}(subagent)` (`toolId` slug `Name_subagent`). Calling that tool closes
|
|
82
|
+
the parent work-log visit; the specialist streams as its own card, and
|
|
83
|
+
the parent continues in a new visit below. Optional **Tool collection**
|
|
84
|
+
(`common-tool-collection`) can merge several `tools` wires; direct
|
|
85
|
+
multi-wire into the agent still works.
|
|
73
86
|
- **Graph order** stages the pipeline; the model does not invent the stage
|
|
74
87
|
sequence outside the graph.
|
|
75
88
|
- Project memory / wiki create is **queue-driven**: index with harness `glob`,
|
|
@@ -80,11 +93,17 @@ Project product data for Langflower lives under **`.langflower/`**.
|
|
|
80
93
|
## Extensibility
|
|
81
94
|
|
|
82
95
|
- Custom nodes use the same **`@langflower/node-sdk`** path as built-ins.
|
|
83
|
-
- **TypeScript** is first-class; `tsc` / IDE types act as compile-time gates
|
|
84
|
-
|
|
96
|
+
- **TypeScript** is first-class; `tsc` / IDE types act as compile-time gates.
|
|
97
|
+
After file changes call `compile_custom_nodes` (only if **Langflower
|
|
98
|
+
Tools** is wired — starter Helper / Writer already are) or Custom →
|
|
99
|
+
**Update**. Same composer: typecheck + bundle + hot-swap live custom
|
|
100
|
+
instances + refresh the Custom palette.
|
|
101
|
+
Stop is not required for already-placed custom types.
|
|
102
|
+
An already-wired custom tools pack can be invoked later in the same run
|
|
103
|
+
after compile. Do not auto-place or auto-wire a new type mid-run.
|
|
85
104
|
- Plain JS / Go / Python are not the authoring path. Sandboxed arbitrary
|
|
86
|
-
user-node execution
|
|
87
|
-
shipped
|
|
105
|
+
user-node execution is **not** shipped. Canvas add/remove node or edge
|
|
106
|
+
tools are **not** shipped (later rows on Langflower Tools).
|
|
88
107
|
|
|
89
108
|
## What stays local
|
|
90
109
|
|
|
@@ -17,21 +17,22 @@ Facts for UI chrome and on-disk paths. Prefer this file over guessing.
|
|
|
17
17
|
|
|
18
18
|
## Where can I…?
|
|
19
19
|
|
|
20
|
-
| Goal | Where
|
|
21
|
-
| -------------------------------------- |
|
|
22
|
-
| Change provider / API key | Gear → **Settings** (right aside; Global auto-opens when none configured), or edit `.langflower/langflower.jsonc` (prefer `{env:VAR}`)
|
|
23
|
-
| Start a Chat Input graph | Composer **Start** — not plain **Run** (Run stays disabled for those graphs)
|
|
24
|
-
| See run output / stream | Right aside **feed**
|
|
25
|
-
| Answer HITL / send into a waiting node | Composer + feed context
|
|
26
|
-
| Allow or Deny `permission.ask` | Composer permission controls
|
|
27
|
-
| Soft-pause last feed agent / continue | Composer **Pause** (per-node) / Send or Resume (soft pause ≠ Hard Stop)
|
|
28
|
-
| Hard-stop a run | Composer **Stop**
|
|
29
|
-
| Edit selected node params / ports | Select node → right aside **inspector** (not Settings)
|
|
30
|
-
| Add
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
20
|
+
| Goal | Where |
|
|
21
|
+
| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
22
|
+
| Change provider / API key | Gear → **Settings** (right aside; Global auto-opens when none configured), or edit `.langflower/langflower.jsonc` (prefer `{env:VAR}`) |
|
|
23
|
+
| Start a Chat Input graph | Composer **Start** — not plain **Run** (Run stays disabled for those graphs) |
|
|
24
|
+
| See run output / stream | Right aside **feed** |
|
|
25
|
+
| Answer HITL / send into a waiting node | Composer + feed context |
|
|
26
|
+
| Allow or Deny `permission.ask` | Composer permission controls |
|
|
27
|
+
| Soft-pause last feed agent / continue | Composer **Pause** (per-node) / Send or Resume (soft pause ≠ Hard Stop) |
|
|
28
|
+
| Hard-stop a run | Composer **Stop** |
|
|
29
|
+
| Edit selected node params / ports | Select node → right aside **inspector** (not Settings). Read-only while a run is active — Stop first. |
|
|
30
|
+
| Add a node from the palette | Drag from the left palette onto the canvas. Disabled while a run is active (`cursor-not-allowed`) — Stop first. |
|
|
31
|
+
| Add or reload custom nodes | Pack under `.langflower/nodes/<pack>/`. On starter, Helper / Writer call `compile_custom_nodes` (Langflower Tools is wired). Else Custom → **Update**. Hot-swap already-placed types; already-wired custom tools work later in the same run. New types: user places from Custom (no auto-place / auto-wire mid-run). |
|
|
32
|
+
| Switch workflow | Topbar workflow list. Load / New / Copy / rename / Delete are locked while a run is active — Stop first. |
|
|
33
|
+
| Open Settings without leaving canvas | Gear — Settings in right aside |
|
|
34
|
+
| Find sample coding graphs | Skeleton / demo-project workflow files — **manual copy** into project, then load → Start. No Sample workflows catalog UI. |
|
|
35
|
+
| Project instructions for agents | `.langflower/instructions.md` |
|
|
35
36
|
|
|
36
37
|
## On-disk `.langflower/` map
|
|
37
38
|
|
|
@@ -3,7 +3,7 @@ name: Langflower node writer
|
|
|
3
3
|
description: >-
|
|
4
4
|
Guides authors writing project custom nodes under .langflower/nodes packs
|
|
5
5
|
(defineNode / defineToolRegistrations / defineReactiveNode, ADR-030 layout,
|
|
6
|
-
reload via Custom Update).
|
|
6
|
+
reload via compile_custom_nodes or Custom Update).
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
# Langflower node writer
|
|
@@ -16,10 +16,14 @@ You help the user write **custom nodes** for Langflower.
|
|
|
16
16
|
language; `tsc` / IDE types are the compile-time validators. **Not** plain JS
|
|
17
17
|
as the authoring path, Go, Python, Rust, or other runtimes.
|
|
18
18
|
- Do **not** claim sandboxed execution of arbitrary user-node code is shipped.
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
`COMPILATION_ERRORS.md
|
|
19
|
+
- After file changes **call `compile_custom_nodes` yourself** (no args) — on
|
|
20
|
+
starter, Writer has it because **Langflower Tools** is wired. Custom →
|
|
21
|
+
**Update** is the same composer. Failures land in `COMPILATION_ERRORS.md`.
|
|
22
|
+
Do **not** only remind the user to click Update.
|
|
22
23
|
- Langflower does **not** auto-`npm install` pack dependencies.
|
|
24
|
+
- Do **not** claim you can place a newly compiled type on the canvas or wire
|
|
25
|
+
it mid-run. Already-placed types hot-swap; already-wired custom tools can
|
|
26
|
+
be invoked later in the **same run**.
|
|
23
27
|
|
|
24
28
|
## Contract (do not invent forks)
|
|
25
29
|
|
|
@@ -34,8 +38,12 @@ You help the user write **custom nodes** for Langflower.
|
|
|
34
38
|
Skip `*.test.ts`, `*.d.ts`, `dist/`, `node_modules/`.
|
|
35
39
|
- Peer deps on the host SDK / RxJS are supplied by Langflower; author libs go
|
|
36
40
|
in pack `dependencies`. The user runs `npm install` in the pack.
|
|
37
|
-
- After file changes:
|
|
38
|
-
|
|
41
|
+
- After file changes: call **`compile_custom_nodes`** (wired on starter
|
|
42
|
+
Helper / Writer via **Langflower Tools** — not ambient on every agent) or
|
|
43
|
+
Custom section → **Update**. Stop is not required for already-placed
|
|
44
|
+
custom types. An already-wired custom tools pack can be invoked later in
|
|
45
|
+
the **same run** after compile. Failures land in `COMPILATION_ERRORS.md`
|
|
46
|
+
in that pack.
|
|
39
47
|
|
|
40
48
|
## When drafting a node
|
|
41
49
|
|
|
@@ -44,9 +52,11 @@ You help the user write **custom nodes** for Langflower.
|
|
|
44
52
|
(`defineToolRegistrations` owns a `tools` output — no custom inputs).
|
|
45
53
|
3. Implement `execute` (`defineNode`), `tools` handlers
|
|
46
54
|
(`defineToolRegistrations`), or `bind` (`defineReactiveNode`).
|
|
47
|
-
4. Show the full file the user can paste into `my-nodes
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
4. Show the full file the user can paste into `my-nodes/` **or write it**
|
|
56
|
+
under `.langflower/nodes/<pack>/`.
|
|
57
|
+
5. Call **`compile_custom_nodes`**. If the snapshot lists errors, `read`
|
|
58
|
+
that pack’s `COMPILATION_ERRORS.md`, fix, and compile again. Tell the
|
|
59
|
+
user to place **new** types from Custom; already-placed types are live.
|
|
50
60
|
|
|
51
61
|
## References in the project
|
|
52
62
|
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
name: Langflower workflow writer
|
|
3
3
|
description: >-
|
|
4
4
|
Guides authors writing and editing `.langflower/workflows/*.json` graphs
|
|
5
|
-
(catalog node types, real ports, Soft↔Hard loops, Sub-Agent
|
|
5
|
+
(catalog node types, real ports, Soft↔Hard loops, Sub-Agent
|
|
6
|
+
`subagent-registration` wiring).
|
|
6
7
|
---
|
|
7
8
|
|
|
8
9
|
# Langflower workflow writer
|
|
@@ -24,6 +25,9 @@ You help the user **author valid Langflower workflow JSON** under
|
|
|
24
25
|
`write`, `create`, `delete`, `bash` — never `Bash(ls)`-style strings.
|
|
25
26
|
- LLM `rolePreset` values are only: `custom` | `plan` | `coder` | `explorer`.
|
|
26
27
|
Unknown values silently become `custom`.
|
|
28
|
+
- Recompile is opt-in: wire `common-langflower-tools` `tools` → agent
|
|
29
|
+
`tools`. Do **not** add that pack to every agent unless the user wants
|
|
30
|
+
`compile_custom_nodes`. Do not invent editor mutation tools on that pack.
|
|
27
31
|
|
|
28
32
|
## On-disk shape
|
|
29
33
|
|
|
@@ -49,16 +53,19 @@ Schema: `.langflower/schemas/workflow.schema.json`. Samples:
|
|
|
49
53
|
|
|
50
54
|
## Ports you must get right
|
|
51
55
|
|
|
52
|
-
| Node type | Key ports
|
|
53
|
-
| --------------------------------------- |
|
|
54
|
-
| `common-chat-input` | out `message` (no wireable in)
|
|
55
|
-
| `common-openai-llm` / `common-fake-llm` | in `userPrompt`, `systemPrompt`, `feedback`, `
|
|
56
|
-
| `common-
|
|
57
|
-
| `common-
|
|
58
|
-
| `common-review`
|
|
59
|
-
| `common-
|
|
60
|
-
| `common-
|
|
61
|
-
| `common-
|
|
56
|
+
| Node type | Key ports |
|
|
57
|
+
| --------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
58
|
+
| `common-chat-input` | out `message` (no wireable in) |
|
|
59
|
+
| `common-openai-llm` / `common-fake-llm` | in `userPrompt`, `systemPrompt`, `feedback`, `tools`; out `response`, `toolLog`, … |
|
|
60
|
+
| `common-mcp-stdio` / `common-mcp-http` | out **`tools`** — wire into an agent `tools` port (not a separate `mcp` port) |
|
|
61
|
+
| `common-tool-collection` | in **`tools`** (multi combine) → out **`tools`** — optional hub; duplicate `toolId` last-wins. Direct pack → agent still OK |
|
|
62
|
+
| `common-hitl-review-gate` | in `result`; out `response`, `feedback` |
|
|
63
|
+
| `common-merge` | in/out **`value`** only (not `step` / `output`) |
|
|
64
|
+
| `common-review` | in `task`, `result`, `systemPrompt`, `tools`; out `response`, `feedback` |
|
|
65
|
+
| `common-sub-agent` | out **`subagent-registration`** (one specialist handle) → parent `tools`; in `systemPrompt`, `tools` |
|
|
66
|
+
| `common-finish` | in `value` |
|
|
67
|
+
| `common-string` | in/out `value` |
|
|
68
|
+
| `common-langflower-tools` | out **`tools`** only — wire into an agent `tools` port to opt in to **`compile_custom_nodes`** (unsafe; starter Helper / Writer already wired). Not ambient. Canvas add/remove node or edge tools are **not** shipped. |
|
|
62
69
|
|
|
63
70
|
## Soft↔Hard loops
|
|
64
71
|
|
|
@@ -71,13 +78,14 @@ Typical HITL revise loop:
|
|
|
71
78
|
Do **not** feed Merge output into both gates and LLM feedback on every tick
|
|
72
79
|
without a clear phase split.
|
|
73
80
|
|
|
74
|
-
## Sub-Agent
|
|
81
|
+
## Sub-Agent (one registration wire)
|
|
75
82
|
|
|
76
83
|
Mirror `.langflower/workflows/kb-navigate.json`:
|
|
77
84
|
|
|
78
|
-
- Sub-Agent `registration` → parent `
|
|
79
|
-
- Parent
|
|
80
|
-
-
|
|
85
|
+
- Sub-Agent `subagent-registration` → parent `tools`
|
|
86
|
+
- Parent calls the specialist tool (`task`, optional `skillId` enum)
|
|
87
|
+
- Do **not** draw `registration` / `subagent` / `task` / `result` /
|
|
88
|
+
`subagentResult` — those ports are gone
|
|
81
89
|
|
|
82
90
|
## Load repair (product fact)
|
|
83
91
|
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"maxFeedbackTurns": 8
|
|
61
61
|
},
|
|
62
62
|
"inputs": {
|
|
63
|
-
"systemPrompt": "You are the Orchestrator for building a DETAILED project memory map (project wiki) under `.langflower/memory/`.\n\nGoal: grounding a coding agent can use to implement features without rediscovering the repo. A thin whole-repo skim is NOT enough.\n\n## Required memory layout (all under `.langflower/memory/`)\n\n1) `core/overview.md` — purpose, primary user, ships vs not, how to run\n2) `core/layout.md` — directory / package map with ownership\n3) `core/architecture.md` — runtime flow, boundaries, key ADRs / invariants\n4) `core/build-test.md` — install, build, typecheck, unit vs integration, verify\n5) `core/entrypoints.md` — CLI / server / UI / MCP paths and ports\n6) `core/conventions.md` — coding rules agents must follow\n7) `modules/<area>.md` — one file per major package/area (responsibility, layout, contracts, neighbors, pitfalls)\n8) `history/work-queue.md` — indexed work units (Pending / In progress / Done)\n9) `history/build-log.md` — chronological survey/write notes (append_memory_log)\n\nOptional when material exists: `core/config.md`, `core/workflows-skills.md`.\n\n## Process (STRICT order — serial
|
|
63
|
+
"systemPrompt": "You are the Orchestrator for building a DETAILED project memory map (project wiki) under `.langflower/memory/`.\n\nGoal: grounding a coding agent can use to implement features without rediscovering the repo. A thin whole-repo skim is NOT enough.\n\n## Required memory layout (all under `.langflower/memory/`)\n\n1) `core/overview.md` — purpose, primary user, ships vs not, how to run\n2) `core/layout.md` — directory / package map with ownership\n3) `core/architecture.md` — runtime flow, boundaries, key ADRs / invariants\n4) `core/build-test.md` — install, build, typecheck, unit vs integration, verify\n5) `core/entrypoints.md` — CLI / server / UI / MCP paths and ports\n6) `core/conventions.md` — coding rules agents must follow\n7) `modules/<area>.md` — one file per major package/area (responsibility, layout, contracts, neighbors, pitfalls)\n8) `history/work-queue.md` — indexed work units (Pending / In progress / Done)\n9) `history/build-log.md` — chronological survey/write notes (append_memory_log)\n\nOptional when material exists: `core/config.md`, `core/workflows-skills.md`.\n\n## Process (STRICT order — serial specialist tool calls)\n\n### Phase A — Index first (before any deep Explorer/Composer spawn)\n\n1) Use `glob` + `read` on package.json workspaces, top-level dirs, README*, AGENTS.md, docs/** (or equivalents). List every workspace package / major area and each mandatory `core/*` topic.\n2) Persist `.langflower/memory/history/work-queue.md` via create_memory_file / update_memory_section with ## Pending, ## In progress, ## Done. Each Pending item: id, path(s) to survey, target memory file (`modules/<area>.md` or `core/<name>.md`), status.\n3) Do NOT call Explorer/Composer for a vague “survey the whole repo” after the queue exists.\n\n### Phase B — One-unit loop\n\n1) Pick ONE Pending unit → move to In progress in work-queue.md.\n2) Call the Explorer specialist tool with a task that names ONLY that unit (paths, expected depth, target memory file).\n3) Call the Composer specialist tool for ONLY that unit’s target file/sections (pass Explorer findings).\n4) Mark the unit Done; append_memory_log on history/build-log.md.\n5) Repeat until Pending is empty (or explicit justified skips with evidence in the queue).\n\n### Phase C — Exit / Review feedback\n\n- Emit readiness only when Pending is empty AND mandatory files have real ## sections with concrete paths/commands/types.\n- Module pages MUST cover every indexed package/area from the queue.\n- On Review feedback: re-open specific queue items — do not restart a vague whole-repo pass.\n- Cite evidence (paths + section headings) in the readiness report."
|
|
64
64
|
},
|
|
65
65
|
"ui": {
|
|
66
66
|
"position": {
|
|
@@ -212,48 +212,6 @@
|
|
|
212
212
|
"toNodeId": "review",
|
|
213
213
|
"toPort": ["tools", 0]
|
|
214
214
|
},
|
|
215
|
-
{
|
|
216
|
-
"edgeId": "e-reg-explorer",
|
|
217
|
-
"fromNodeId": "explorer",
|
|
218
|
-
"fromPort": ["registration", 0],
|
|
219
|
-
"toNodeId": "orchestrator",
|
|
220
|
-
"toPort": ["subagentRegistration", 0]
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
"edgeId": "e-reg-composer",
|
|
224
|
-
"fromNodeId": "composer",
|
|
225
|
-
"fromPort": ["registration", 0],
|
|
226
|
-
"toNodeId": "orchestrator",
|
|
227
|
-
"toPort": ["subagentRegistration", 1]
|
|
228
|
-
},
|
|
229
|
-
{
|
|
230
|
-
"edgeId": "e-spawn-explorer",
|
|
231
|
-
"fromNodeId": "orchestrator",
|
|
232
|
-
"fromPort": ["subagent", 0],
|
|
233
|
-
"toNodeId": "explorer",
|
|
234
|
-
"toPort": ["task", 0]
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
"edgeId": "e-spawn-composer",
|
|
238
|
-
"fromNodeId": "orchestrator",
|
|
239
|
-
"fromPort": ["subagent", 0],
|
|
240
|
-
"toNodeId": "composer",
|
|
241
|
-
"toPort": ["task", 0]
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
"edgeId": "e-result-explorer",
|
|
245
|
-
"fromNodeId": "explorer",
|
|
246
|
-
"fromPort": ["result", 0],
|
|
247
|
-
"toNodeId": "orchestrator",
|
|
248
|
-
"toPort": ["subagentResult", 0]
|
|
249
|
-
},
|
|
250
|
-
{
|
|
251
|
-
"edgeId": "e-result-composer",
|
|
252
|
-
"fromNodeId": "composer",
|
|
253
|
-
"fromPort": ["result", 0],
|
|
254
|
-
"toNodeId": "orchestrator",
|
|
255
|
-
"toPort": ["subagentResult", 1]
|
|
256
|
-
},
|
|
257
215
|
{
|
|
258
216
|
"edgeId": "e-orch-review-result",
|
|
259
217
|
"fromNodeId": "orchestrator",
|
|
@@ -281,6 +239,20 @@
|
|
|
281
239
|
"fromPort": ["response", 0],
|
|
282
240
|
"toNodeId": "done",
|
|
283
241
|
"toPort": ["value", 0]
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"edgeId": "e-tools-explorer",
|
|
245
|
+
"fromNodeId": "explorer",
|
|
246
|
+
"fromPort": ["subagent-registration", 0],
|
|
247
|
+
"toNodeId": "orchestrator",
|
|
248
|
+
"toPort": ["tools", 1]
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
"edgeId": "e-tools-composer",
|
|
252
|
+
"fromNodeId": "composer",
|
|
253
|
+
"fromPort": ["subagent-registration", 0],
|
|
254
|
+
"toNodeId": "orchestrator",
|
|
255
|
+
"toPort": ["tools", 2]
|
|
284
256
|
}
|
|
285
257
|
]
|
|
286
258
|
}
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"maxFeedbackTurns": 6
|
|
54
54
|
},
|
|
55
55
|
"inputs": {
|
|
56
|
-
"systemPrompt": "You answer questions about this project grounded in project memory.\n\nConvention: markdown under `.langflower/memory/` (built by the kb-create / Memory create workflow). Memory is also readable with harness file tools on `.langflower/memory/…`.\n\nBefore answering, use get_memory_tree / search_memory_grep / read_memory_section (yourself or via
|
|
56
|
+
"systemPrompt": "You answer questions about this project grounded in project memory.\n\nConvention: markdown under `.langflower/memory/` (built by the kb-create / Memory create workflow). Memory is also readable with harness file tools on `.langflower/memory/…`.\n\nBefore answering, use get_memory_tree / search_memory_grep / read_memory_section (yourself or via the Searcher specialist tool). Prefer memory hits over guessing. If memory is empty or hits are weak, say so and offer to run Memory create (kb-create) — do not invent.\n\nWhen HITL feedback arrives, revise the answer — do not ignore it. Keep answers short and cite memory file paths / headings when available."
|
|
57
57
|
},
|
|
58
58
|
"ui": {
|
|
59
59
|
"position": {
|
|
@@ -125,27 +125,6 @@
|
|
|
125
125
|
"toNodeId": "searcher",
|
|
126
126
|
"toPort": ["tools", 0]
|
|
127
127
|
},
|
|
128
|
-
{
|
|
129
|
-
"edgeId": "e-reg-searcher",
|
|
130
|
-
"fromNodeId": "searcher",
|
|
131
|
-
"fromPort": ["registration", 0],
|
|
132
|
-
"toNodeId": "navigator",
|
|
133
|
-
"toPort": ["subagentRegistration", 0]
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
"edgeId": "e-spawn-searcher",
|
|
137
|
-
"fromNodeId": "navigator",
|
|
138
|
-
"fromPort": ["subagent", 0],
|
|
139
|
-
"toNodeId": "searcher",
|
|
140
|
-
"toPort": ["task", 0]
|
|
141
|
-
},
|
|
142
|
-
{
|
|
143
|
-
"edgeId": "e-result-searcher",
|
|
144
|
-
"fromNodeId": "searcher",
|
|
145
|
-
"fromPort": ["result", 0],
|
|
146
|
-
"toNodeId": "navigator",
|
|
147
|
-
"toPort": ["subagentResult", 0]
|
|
148
|
-
},
|
|
149
128
|
{
|
|
150
129
|
"edgeId": "e-nav-review",
|
|
151
130
|
"fromNodeId": "navigator",
|
|
@@ -159,6 +138,13 @@
|
|
|
159
138
|
"fromPort": ["feedback", 0],
|
|
160
139
|
"toNodeId": "navigator",
|
|
161
140
|
"toPort": ["feedback", 0]
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"edgeId": "e-tools-searcher",
|
|
144
|
+
"fromNodeId": "searcher",
|
|
145
|
+
"fromPort": ["subagent-registration", 0],
|
|
146
|
+
"toNodeId": "navigator",
|
|
147
|
+
"toPort": ["tools", 1]
|
|
162
148
|
}
|
|
163
149
|
]
|
|
164
150
|
}
|