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.
Files changed (221) hide show
  1. package/package.json +2 -2
  2. package/ui-dist/{chunk-Y6VMBLSJ.js → chunk-7UMVYN3A.js} +1 -1
  3. package/ui-dist/{chunk-6DQ2XSRW.js → chunk-MDGXX73Z.js} +3 -3
  4. package/ui-dist/index.html +2 -2
  5. package/ui-dist/main-Z7CPFXFA.js +313 -0
  6. package/ui-dist/styles-2TMDAUD7.css +1 -0
  7. package/vendor/common-nodes/dist/ai/chat-completion-stream.d.ts +2 -0
  8. package/vendor/common-nodes/dist/ai/critique/node.d.ts +246 -0
  9. package/vendor/common-nodes/dist/ai/critique/node.js +2 -2
  10. package/vendor/common-nodes/dist/ai/fake-llm/node.d.ts +246 -0
  11. package/vendor/common-nodes/dist/ai/features/chat-completion-stream.d.ts +53 -0
  12. package/vendor/common-nodes/dist/ai/features/chat-completion-stream.js +1 -0
  13. package/vendor/common-nodes/dist/ai/features/llm-loop/autokick-recovery.d.ts +13 -0
  14. package/vendor/common-nodes/dist/ai/features/llm-loop/autokick-recovery.js +17 -0
  15. package/vendor/common-nodes/dist/ai/features/llm-loop/classify-llm-failure.d.ts +2 -0
  16. package/vendor/common-nodes/dist/ai/features/llm-loop/classify-llm-failure.js +113 -0
  17. package/vendor/common-nodes/dist/ai/features/llm-loop/dead-loop-detector.d.ts +28 -0
  18. package/vendor/common-nodes/dist/ai/features/llm-loop/dead-loop-detector.js +194 -0
  19. package/vendor/common-nodes/dist/ai/features/llm-loop/live-get-tools.d.ts +9 -0
  20. package/vendor/common-nodes/dist/ai/features/llm-loop/live-get-tools.js +21 -0
  21. package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-reducer.d.ts +2 -0
  22. package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-reducer.js +204 -0
  23. package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-types.d.ts +120 -0
  24. package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-types.js +39 -0
  25. package/vendor/common-nodes/dist/ai/features/llm-loop/normalize-llm-recovery-policy.d.ts +2 -0
  26. package/vendor/common-nodes/dist/ai/features/llm-loop/normalize-llm-recovery-policy.js +59 -0
  27. package/vendor/common-nodes/dist/ai/features/llm-loop/operators/normalize-tool-result.d.ts +1 -0
  28. package/vendor/common-nodes/dist/ai/features/llm-loop/operators/normalize-tool-result.js +7 -0
  29. package/vendor/common-nodes/dist/ai/features/llm-loop/operators/observe-provider-stream.d.ts +43 -0
  30. package/vendor/common-nodes/dist/ai/features/llm-loop/operators/observe-provider-stream.js +96 -0
  31. package/vendor/common-nodes/dist/ai/features/llm-loop/run-agent-loop.d.ts +29 -0
  32. package/vendor/common-nodes/dist/ai/features/llm-loop/run-agent-loop.js +44 -0
  33. package/vendor/common-nodes/dist/ai/features/llm-loop/run-llm-loop.d.ts +74 -0
  34. package/vendor/common-nodes/dist/ai/features/llm-loop/run-llm-loop.js +658 -0
  35. package/vendor/common-nodes/dist/ai/features/llm-role-preset.d.ts +69 -0
  36. package/vendor/common-nodes/dist/ai/features/llm-role-preset.js +265 -0
  37. package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.d.ts +141 -0
  38. package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.js +193 -0
  39. package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.d.ts +21 -0
  40. package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.js +118 -0
  41. package/vendor/common-nodes/dist/ai/features/openai/context-length-error.d.ts +14 -0
  42. package/vendor/common-nodes/dist/ai/features/openai/context-length-error.js +63 -0
  43. package/vendor/common-nodes/dist/ai/features/openai/create-chat-completion-stream.d.ts +19 -0
  44. package/vendor/common-nodes/dist/ai/features/openai/create-chat-completion-stream.js +182 -0
  45. package/vendor/common-nodes/dist/ai/features/openai/list-provider-models.d.ts +28 -0
  46. package/vendor/common-nodes/dist/ai/features/openai/list-provider-models.js +52 -0
  47. package/vendor/common-nodes/dist/ai/features/openai/llm-context-compaction.d.ts +31 -0
  48. package/vendor/common-nodes/dist/ai/features/openai/llm-context-compaction.js +326 -0
  49. package/vendor/common-nodes/dist/ai/features/openai/normalize-compaction-params.d.ts +14 -0
  50. package/vendor/common-nodes/dist/ai/features/openai/normalize-compaction-params.js +21 -0
  51. package/vendor/common-nodes/dist/ai/features/openai/prepare-chat-completion.d.ts +30 -0
  52. package/vendor/common-nodes/dist/ai/features/openai/prepare-chat-completion.js +132 -0
  53. package/vendor/common-nodes/dist/ai/features/path-choice/control-tools.d.ts +20 -0
  54. package/vendor/common-nodes/dist/ai/features/path-choice/control-tools.js +70 -0
  55. package/vendor/common-nodes/dist/ai/features/path-choice/run-reactive-path-choice-loop.d.ts +32 -0
  56. package/vendor/common-nodes/dist/ai/features/path-choice/run-reactive-path-choice-loop.js +93 -0
  57. package/vendor/common-nodes/dist/ai/features/prompt/build-effective-system-prompt.d.ts +9 -0
  58. package/vendor/common-nodes/dist/ai/features/prompt/build-effective-system-prompt.js +21 -0
  59. package/vendor/common-nodes/dist/ai/features/prompt/normalize-max-iterations.d.ts +13 -0
  60. package/vendor/common-nodes/dist/ai/features/prompt/normalize-max-iterations.js +23 -0
  61. package/vendor/common-nodes/dist/ai/features/prompt/resolve-chat-provider-model.d.ts +10 -0
  62. package/vendor/common-nodes/dist/ai/features/prompt/resolve-chat-provider-model.js +8 -0
  63. package/vendor/common-nodes/dist/ai/features/run-host-services.d.ts +54 -0
  64. package/vendor/common-nodes/dist/ai/features/run-host-services.js +29 -0
  65. package/vendor/common-nodes/dist/ai/features/scripted-chat-completion-stream.d.ts +17 -0
  66. package/vendor/common-nodes/dist/ai/features/scripted-chat-completion-stream.js +61 -0
  67. package/vendor/common-nodes/dist/ai/features/sub-agent-protocol.d.ts +40 -0
  68. package/vendor/common-nodes/dist/ai/features/sub-agent-protocol.js +44 -0
  69. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-compaction-ui-schema.d.ts +14 -0
  70. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-compaction-ui-schema.js +18 -0
  71. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-panel-ui-schema.d.ts +80 -0
  72. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-panel-ui-schema.js +76 -0
  73. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-recovery-ui-schema.d.ts +113 -0
  74. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-recovery-ui-schema.js +131 -0
  75. package/vendor/common-nodes/dist/ai/features/wait-for-subagent-result.d.ts +7 -0
  76. package/vendor/common-nodes/dist/ai/features/wait-for-subagent-result.js +31 -0
  77. package/vendor/common-nodes/dist/ai/llm-loop/autokick-recovery.d.ts +13 -0
  78. package/vendor/common-nodes/dist/ai/llm-loop/autokick-recovery.js +17 -0
  79. package/vendor/common-nodes/dist/ai/llm-loop/dead-loop-detector.d.ts +28 -0
  80. package/vendor/common-nodes/dist/ai/llm-loop/dead-loop-detector.js +194 -0
  81. package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-reducer.js +36 -0
  82. package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-types.d.ts +35 -0
  83. package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-types.js +19 -0
  84. package/vendor/common-nodes/dist/ai/llm-loop/normalize-llm-recovery-policy.js +52 -9
  85. package/vendor/common-nodes/dist/ai/llm-loop/operators/observe-provider-stream.d.ts +8 -2
  86. package/vendor/common-nodes/dist/ai/llm-loop/operators/observe-provider-stream.js +43 -13
  87. package/vendor/common-nodes/dist/ai/llm-loop/run-llm-loop.d.ts +3 -5
  88. package/vendor/common-nodes/dist/ai/llm-loop/run-llm-loop.js +116 -1
  89. package/vendor/common-nodes/dist/ai/llm-recovery-ui-schema.d.ts +82 -0
  90. package/vendor/common-nodes/dist/ai/llm-recovery-ui-schema.js +95 -0
  91. package/vendor/common-nodes/dist/ai/llm-session-shell.d.ts +4 -9
  92. package/vendor/common-nodes/dist/ai/llm-session-shell.js +2 -4
  93. package/vendor/common-nodes/dist/ai/nodes/critique/node.d.ts +588 -0
  94. package/vendor/common-nodes/dist/ai/nodes/critique/node.js +227 -0
  95. package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.d.ts +571 -0
  96. package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.js +201 -0
  97. package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.d.ts +587 -0
  98. package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.js +84 -0
  99. package/vendor/common-nodes/dist/ai/nodes/review/node.d.ts +593 -0
  100. package/vendor/common-nodes/dist/ai/nodes/review/node.js +227 -0
  101. package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.d.ts +630 -0
  102. package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.js +417 -0
  103. package/vendor/common-nodes/dist/ai/openai/create-chat-completion-stream.js +6 -0
  104. package/vendor/common-nodes/dist/ai/openai/prepare-chat-completion.d.ts +2 -0
  105. package/vendor/common-nodes/dist/ai/openai/prepare-chat-completion.js +18 -0
  106. package/vendor/common-nodes/dist/ai/openai-llm/node.d.ts +246 -0
  107. package/vendor/common-nodes/dist/ai/review/node.d.ts +246 -0
  108. package/vendor/common-nodes/dist/ai/review/node.js +2 -2
  109. package/vendor/common-nodes/dist/ai/sub-agent/node.d.ts +246 -0
  110. package/vendor/common-nodes/dist/ai/sub-agent/node.js +2 -2
  111. package/vendor/common-nodes/dist/catalog.js +9 -5
  112. package/vendor/common-nodes/dist/compile-custom-nodes/node.d.ts +21 -0
  113. package/vendor/common-nodes/dist/compile-custom-nodes/node.js +45 -0
  114. package/vendor/common-nodes/dist/crawl/crawl/node.js +1 -1
  115. package/vendor/common-nodes/dist/crawl/fetch-url/node.js +1 -1
  116. package/vendor/common-nodes/dist/flow/repeat/node.js +6 -1
  117. package/vendor/common-nodes/dist/langflower-tools/emit-registration-tools.d.ts +18 -0
  118. package/vendor/common-nodes/dist/langflower-tools/emit-registration-tools.js +29 -0
  119. package/vendor/common-nodes/dist/langflower-tools/node.d.ts +20 -0
  120. package/vendor/common-nodes/dist/langflower-tools/node.js +77 -0
  121. package/vendor/common-nodes/dist/mcp/mcp-http/node.d.ts +4 -4
  122. package/vendor/common-nodes/dist/mcp/mcp-http/node.js +9 -10
  123. package/vendor/common-nodes/dist/mcp/mcp-stdio/node.d.ts +4 -4
  124. package/vendor/common-nodes/dist/mcp/mcp-stdio/node.js +9 -10
  125. package/vendor/common-nodes/dist/text/append-file/node.js +1 -1
  126. package/vendor/common-nodes/dist/text/read-file/node.js +1 -1
  127. package/vendor/common-nodes/dist/text/write-file/node.js +1 -1
  128. package/vendor/common-nodes/dist/tools/collect-agent-tool-handles.d.ts +4 -4
  129. package/vendor/common-nodes/dist/tools/collect-agent-tool-handles.js +3 -11
  130. package/vendor/common-nodes/dist/tools/inventory-tool-round.d.ts +1 -11
  131. package/vendor/common-nodes/dist/tools/inventory-tool-round.js +0 -84
  132. package/vendor/common-nodes/dist/tools/tool-collection/node.d.ts +20 -0
  133. package/vendor/common-nodes/dist/tools/tool-collection/node.js +42 -0
  134. package/vendor/common-nodes/package.json +9 -13
  135. package/vendor/compiler/dist/compile-project-nodes.d.ts +2 -1
  136. package/vendor/compiler/dist/compile-project-nodes.js +35 -6
  137. package/vendor/compiler/dist/resolve-host-types.d.ts +0 -5
  138. package/vendor/compiler/dist/resolve-host-types.js +0 -8
  139. package/vendor/compiler/package.json +1 -1
  140. package/vendor/node-sdk/dist/node-factory/define-llm-node/default-llm-ports.d.ts +3 -7
  141. package/vendor/node-sdk/dist/node-factory/define-llm-node/default-llm-ports.js +4 -44
  142. package/vendor/node-sdk/dist/node-factory/define-llm-node/define-llm-node.d.ts +4 -6
  143. package/vendor/node-sdk/dist/node-factory/define-llm-node/define-llm-node.js +4 -6
  144. package/vendor/node-sdk/dist/node-factory/define-llm-node/llm-inventory-wire.d.ts +1 -0
  145. package/vendor/node-sdk/dist/node-factory/define-llm-node/llm-inventory-wire.js +1 -0
  146. package/vendor/node-sdk/dist/node-factory/define-llm-node/recovery-notice.d.ts +8 -0
  147. package/vendor/node-sdk/dist/node-factory/define-llm-node/recovery-notice.js +14 -0
  148. package/vendor/node-sdk/dist/node-factory/define-mcp/mcp-handle.d.ts +3 -4
  149. package/vendor/node-sdk/dist/node-factory/define-mcp/mcp-handle.js +1 -1
  150. package/vendor/node-sdk/dist/node-factory/define-reactive-node/types.d.ts +2 -4
  151. package/vendor/node-sdk/dist/node-factory/define-reactive-node/ui-schema-inference.d.ts +1 -1
  152. package/vendor/node-sdk/package.json +1 -1
  153. package/vendor/runtime/dist/port-feed-override.d.ts +13 -0
  154. package/vendor/runtime/dist/port-feed-override.js +21 -0
  155. package/vendor/runtime/dist/port-signal-from-response.d.ts +15 -0
  156. package/vendor/runtime/dist/port-signal-from-response.js +48 -0
  157. package/vendor/runtime/dist/runtime-editor.d.ts +5 -1
  158. package/vendor/runtime/dist/runtime-editor.js +19 -0
  159. package/vendor/runtime/dist/runtime-runner.d.ts +8 -3
  160. package/vendor/runtime/dist/runtime-runner.js +108 -87
  161. package/vendor/runtime/dist/runtime.d.ts +3 -1
  162. package/vendor/runtime/dist/runtime.js +1 -0
  163. package/vendor/runtime/dist/testing/workflows/workflow-events.d.ts +10 -6
  164. package/vendor/runtime/dist/testing/workflows/workflow-events.js +21 -31
  165. package/vendor/runtime/dist/types.d.ts +52 -40
  166. package/vendor/runtime/dist/types.js +5 -1
  167. package/vendor/runtime/package.json +1 -1
  168. package/vendor/server/dist/bridge/attach-langflower-bridge.js +3 -2
  169. package/vendor/server/dist/bridge/bridge-event-log.js +17 -102
  170. package/vendor/server/dist/bridge/build-execution-context.d.ts +5 -2
  171. package/vendor/server/dist/bridge/build-execution-context.js +48 -8
  172. package/vendor/server/dist/bridge/forward-runner-event.d.ts +1 -1
  173. package/vendor/server/dist/bridge/forward-runner-event.js +7 -12
  174. package/vendor/server/dist/bridge/get-live-wired-tools.d.ts +13 -0
  175. package/vendor/server/dist/bridge/get-live-wired-tools.js +83 -0
  176. package/vendor/server/dist/bridge/langflower-tools-rpc.d.ts +7 -0
  177. package/vendor/server/dist/bridge/langflower-tools-rpc.js +29 -0
  178. package/vendor/server/dist/bridge/wire-custom-palette-handlers.d.ts +2 -1
  179. package/vendor/server/dist/bridge/wire-custom-palette-handlers.js +3 -5
  180. package/vendor/server/dist/bridge/wire-runner-handlers.js +17 -10
  181. package/vendor/server/dist/bridge/wire-workflow-handlers.js +23 -9
  182. package/vendor/server/dist/checkpoint/run-checkpoint-session.d.ts +1 -1
  183. package/vendor/server/dist/checkpoint/run-checkpoint-session.js +10 -9
  184. package/vendor/server/dist/palette/compile-and-hot-swap-custom-nodes.d.ts +10 -0
  185. package/vendor/server/dist/palette/compile-and-hot-swap-custom-nodes.js +23 -0
  186. package/vendor/server/dist/session/reset-session-execution-feed.d.ts +6 -0
  187. package/vendor/server/dist/session/reset-session-execution-feed.js +8 -0
  188. package/vendor/server/dist/workflow/apply-editor-mutation.d.ts +5 -0
  189. package/vendor/server/dist/workflow/apply-editor-mutation.js +32 -0
  190. package/vendor/server/skeleton/instructions.md +9 -5
  191. package/vendor/server/skeleton/nodes/my-nodes/README.md +4 -3
  192. package/vendor/server/skeleton/nodes/my-nodes/package.json +1 -1
  193. package/vendor/server/skeleton/skills/langflower-helper/SKILL.md +82 -38
  194. package/vendor/server/skeleton/skills/langflower-helper/architecture.md +29 -10
  195. package/vendor/server/skeleton/skills/langflower-helper/layout.md +16 -15
  196. package/vendor/server/skeleton/skills/langflower-node-writer/SKILL.md +19 -9
  197. package/vendor/server/skeleton/skills/langflower-workflow-writer/SKILL.md +23 -15
  198. package/vendor/server/skeleton/workflows/kb-create.json +15 -43
  199. package/vendor/server/skeleton/workflows/kb-navigate.json +8 -22
  200. package/vendor/server/skeleton/workflows/simple-coder.json +18 -46
  201. package/vendor/server/skeleton/workflows/starter.json +35 -22
  202. package/vendor/shared/dist/execution/derive-run-settle-outcome.d.ts +1 -1
  203. package/vendor/shared/dist/execution/derive-run-settle-outcome.js +4 -3
  204. package/vendor/shared/dist/execution/derive-run-settle-outcome.test.js +18 -15
  205. package/vendor/shared/dist/langflower-bus-config.d.ts +6 -14
  206. package/vendor/shared/dist/langflower-bus-config.js +4 -12
  207. package/vendor/shared/dist/langflower-config/resolve-wired-tool-options.js +6 -0
  208. package/vendor/shared/dist/langflower-config/resolve-wired-tool-options.test.js +30 -0
  209. package/vendor/shared/dist/langflower-ws-waits.d.ts +9 -14
  210. package/vendor/shared/dist/langflower-ws-waits.js +14 -14
  211. package/vendor/websocket-bridge/dist/bridge-codec.d.ts +1 -0
  212. package/vendor/websocket-bridge/dist/bridge-codec.js +11 -11
  213. package/vendor/websocket-bridge/dist/bridge-frame.js +1 -1
  214. package/vendor/websocket-bridge/dist/bridge-subjects.d.ts +1 -1
  215. package/vendor/websocket-bridge/dist/bridge-subjects.js +2 -2
  216. package/vendor/websocket-bridge/dist/bridge-types.d.ts +13 -1
  217. package/vendor/websocket-bridge/dist/create-client.js +3 -3
  218. package/vendor/websocket-bridge/dist/create-server.js +12 -6
  219. package/vendor/websocket-bridge/package.json +8 -0
  220. package/ui-dist/main-ECEWAM6V.js +0 -311
  221. 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 and help you set up workflows and nodes for your needs.
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** spawns Explorer → Composer **one unit at a time**; `common-memory-tools` writes `core/*` + `modules/*`; Review rejects non-empty Pending or thin overviews |
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
- | Browser close | If `langflower start` stays up, run continues; reopen live or settled |
149
- | Process kill / reboot | **Not** detachable resume |
150
- | Checkpoint Continue | Needs explicit boundary (`common-checkpoint` / `createCheckpoint`); **no** every-node auto Continue |
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) do **not** ask — authoring
158
- the edge is consent. Write Allow does **not** grant bash. Agents receive
159
- **McpHandle**s; system MCP starts only for ids enabled on nodes in the
160
- active workflow.
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 spawn, `nodeId` filter) — not magic inside one
175
- LLM turn.
176
-
177
- - **Can:** First-class Sub-Agent node + spawn registration / `subagentResult`.
178
- Default swarm spawns are **serial**. Wiki/memory create (`kb-create`) uses
179
- **serial** scoped spawns driven by a persisted work queue — not parallel
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; `spawn_subagent` **one unit at a time**.
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 before Custom → **Update**.
221
- Packs under `.langflower/nodes/<pack>/`; user runs `npm install` in the pack.
222
- See `instructions.md` and `nodes/my-nodes/README.md`.
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
- Custom-pack compiler as product-Implementable.
229
- Claim that every node always resets on Stop, or that in-memory node state
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/HTTP 5xx/network failures retry from the last committed
61
- round, then keep the node alive for **Steer / Resume** (recovery notices on
62
- the `recovery` port; suspend opens the Steer composer). Partial draft text is
63
- telemetry, not committed history. Authentication/configuration failures are
64
- terminal. Generic reload of any failed non-LLM node is not yet shipped.
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, visible spawn) — not hidden work inside one LLM turn.
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
- before Custom → **Update**.
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 and a custom-pack compiler are **not** claimed as
87
- shipped Implementable here.
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 or reload custom nodes | Put pack under `.langflower/nodes/<pack>/`, then Custom → **Update** |
31
- | Switch workflow | Topbar workflow list |
32
- | Open Settings without leaving canvas | Gear — Settings in right aside |
33
- | Find sample coding graphs | Skeleton / demo-project workflow files — **manual copy** into project, then load → Start. No Sample workflows catalog UI. |
34
- | Project instructions for agents | `.langflower/instructions.md` |
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
- - Do **not** claim a custom-pack compiler epic is product-Implementable unless
20
- the user’s docs say so — packs reload via Custom → **Update** /
21
- `COMPILATION_ERRORS.md` today.
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: Custom section → **Update**. Failures land in
38
- `COMPILATION_ERRORS.md` in that pack.
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
- 5. Remind them to Update Custom and fix compile errors from
49
- `COMPILATION_ERRORS.md` if present.
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 L0 wiring).
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`, `subagentRegistration`, `subagentResult`; out `response`, `subagent`, … |
56
- | `common-hitl-review-gate` | in `result`; out `response`, `feedback` |
57
- | `common-merge` | in/out **`value`** only (not `step` / `output`) |
58
- | `common-review` | in `task`, `result`, `systemPrompt`; out `response`, `feedback` |
59
- | `common-sub-agent` | out `registration`, `result`; in `task`, `systemPrompt` |
60
- | `common-finish` | in `value` |
61
- | `common-string` | in/out `value` |
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 L0 (registration + spawn)
81
+ ## Sub-Agent (one registration wire)
75
82
 
76
83
  Mirror `.langflower/workflows/kb-navigate.json`:
77
84
 
78
- - Sub-Agent `registration` → parent `subagentRegistration`
79
- - Parent `subagent` → Sub-Agent `task`
80
- - Sub-Agent `result` → parent `subagentResult`
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 spawn_subagent)\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 spawn 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) spawn_subagent Explorer with a task that names ONLY that unit (paths, expected depth, target memory file).\n3) spawn_subagent Composer 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."
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 spawn_subagent Searcher). 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."
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
  }