langflower 0.0.7 → 0.0.9

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 (189) hide show
  1. package/package.json +1 -1
  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 +1 -1
  5. package/ui-dist/main-2JJGCNTD.js +313 -0
  6. package/vendor/common-nodes/dist/ai/chat-completion-stream.d.ts +2 -0
  7. package/vendor/common-nodes/dist/ai/critique/node.d.ts +246 -0
  8. package/vendor/common-nodes/dist/ai/critique/node.js +2 -2
  9. package/vendor/common-nodes/dist/ai/fake-llm/node.d.ts +246 -0
  10. package/vendor/common-nodes/dist/ai/features/chat-completion-stream.d.ts +53 -0
  11. package/vendor/common-nodes/dist/ai/features/chat-completion-stream.js +1 -0
  12. package/vendor/common-nodes/dist/ai/features/llm-loop/autokick-recovery.d.ts +13 -0
  13. package/vendor/common-nodes/dist/ai/features/llm-loop/autokick-recovery.js +17 -0
  14. package/vendor/common-nodes/dist/ai/features/llm-loop/classify-llm-failure.d.ts +2 -0
  15. package/vendor/common-nodes/dist/ai/features/llm-loop/classify-llm-failure.js +113 -0
  16. package/vendor/common-nodes/dist/ai/features/llm-loop/dead-loop-detector.d.ts +28 -0
  17. package/vendor/common-nodes/dist/ai/features/llm-loop/dead-loop-detector.js +194 -0
  18. package/vendor/common-nodes/dist/ai/features/llm-loop/live-get-tools.d.ts +9 -0
  19. package/vendor/common-nodes/dist/ai/features/llm-loop/live-get-tools.js +21 -0
  20. package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-reducer.d.ts +2 -0
  21. package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-reducer.js +216 -0
  22. package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-types.d.ts +125 -0
  23. package/vendor/common-nodes/dist/ai/features/llm-loop/llm-loop-types.js +39 -0
  24. package/vendor/common-nodes/dist/ai/features/llm-loop/normalize-llm-recovery-policy.d.ts +2 -0
  25. package/vendor/common-nodes/dist/ai/features/llm-loop/normalize-llm-recovery-policy.js +59 -0
  26. package/vendor/common-nodes/dist/ai/features/llm-loop/operators/normalize-tool-result.d.ts +1 -0
  27. package/vendor/common-nodes/dist/ai/features/llm-loop/operators/normalize-tool-result.js +7 -0
  28. package/vendor/common-nodes/dist/ai/features/llm-loop/operators/observe-provider-stream.d.ts +43 -0
  29. package/vendor/common-nodes/dist/ai/features/llm-loop/operators/observe-provider-stream.js +96 -0
  30. package/vendor/common-nodes/dist/ai/features/llm-loop/run-agent-loop.d.ts +32 -0
  31. package/vendor/common-nodes/dist/ai/features/llm-loop/run-agent-loop.js +58 -0
  32. package/vendor/common-nodes/dist/ai/features/llm-loop/run-llm-loop.d.ts +80 -0
  33. package/vendor/common-nodes/dist/ai/features/llm-loop/run-llm-loop.js +681 -0
  34. package/vendor/common-nodes/dist/ai/features/llm-role-preset.d.ts +69 -0
  35. package/vendor/common-nodes/dist/ai/features/llm-role-preset.js +265 -0
  36. package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.d.ts +148 -0
  37. package/vendor/common-nodes/dist/ai/features/llm-session/llm-session-shell.js +198 -0
  38. package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.d.ts +21 -0
  39. package/vendor/common-nodes/dist/ai/features/llm-session/run-session-machine.js +118 -0
  40. package/vendor/common-nodes/dist/ai/features/openai/context-length-error.d.ts +14 -0
  41. package/vendor/common-nodes/dist/ai/features/openai/context-length-error.js +63 -0
  42. package/vendor/common-nodes/dist/ai/features/openai/create-chat-completion-stream.d.ts +19 -0
  43. package/vendor/common-nodes/dist/ai/features/openai/create-chat-completion-stream.js +182 -0
  44. package/vendor/common-nodes/dist/ai/features/openai/list-provider-models.d.ts +28 -0
  45. package/vendor/common-nodes/dist/ai/features/openai/list-provider-models.js +52 -0
  46. package/vendor/common-nodes/dist/ai/features/openai/llm-context-compaction.d.ts +31 -0
  47. package/vendor/common-nodes/dist/ai/features/openai/llm-context-compaction.js +326 -0
  48. package/vendor/common-nodes/dist/ai/features/openai/normalize-compaction-params.d.ts +14 -0
  49. package/vendor/common-nodes/dist/ai/features/openai/normalize-compaction-params.js +21 -0
  50. package/vendor/common-nodes/dist/ai/features/openai/prepare-chat-completion.d.ts +30 -0
  51. package/vendor/common-nodes/dist/ai/features/openai/prepare-chat-completion.js +132 -0
  52. package/vendor/common-nodes/dist/ai/features/path-choice/control-tools.d.ts +20 -0
  53. package/vendor/common-nodes/dist/ai/features/path-choice/control-tools.js +70 -0
  54. package/vendor/common-nodes/dist/ai/features/path-choice/run-reactive-path-choice-loop.d.ts +35 -0
  55. package/vendor/common-nodes/dist/ai/features/path-choice/run-reactive-path-choice-loop.js +106 -0
  56. package/vendor/common-nodes/dist/ai/features/prompt/build-effective-system-prompt.d.ts +9 -0
  57. package/vendor/common-nodes/dist/ai/features/prompt/build-effective-system-prompt.js +21 -0
  58. package/vendor/common-nodes/dist/ai/features/prompt/normalize-max-iterations.d.ts +13 -0
  59. package/vendor/common-nodes/dist/ai/features/prompt/normalize-max-iterations.js +23 -0
  60. package/vendor/common-nodes/dist/ai/features/prompt/resolve-chat-provider-model.d.ts +10 -0
  61. package/vendor/common-nodes/dist/ai/features/prompt/resolve-chat-provider-model.js +8 -0
  62. package/vendor/common-nodes/dist/ai/features/run-host-services.d.ts +54 -0
  63. package/vendor/common-nodes/dist/ai/features/run-host-services.js +29 -0
  64. package/vendor/common-nodes/dist/ai/features/scripted-chat-completion-stream.d.ts +17 -0
  65. package/vendor/common-nodes/dist/ai/features/scripted-chat-completion-stream.js +61 -0
  66. package/vendor/common-nodes/dist/ai/features/sub-agent-protocol.d.ts +39 -0
  67. package/vendor/common-nodes/dist/ai/features/sub-agent-protocol.js +43 -0
  68. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-compaction-ui-schema.d.ts +14 -0
  69. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-compaction-ui-schema.js +18 -0
  70. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-panel-ui-schema.d.ts +80 -0
  71. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-panel-ui-schema.js +76 -0
  72. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-recovery-ui-schema.d.ts +113 -0
  73. package/vendor/common-nodes/dist/ai/features/ui-schema/llm-recovery-ui-schema.js +131 -0
  74. package/vendor/common-nodes/dist/ai/features/wait-for-subagent-result.d.ts +6 -0
  75. package/vendor/common-nodes/dist/ai/features/wait-for-subagent-result.js +30 -0
  76. package/vendor/common-nodes/dist/ai/llm-loop/autokick-recovery.d.ts +13 -0
  77. package/vendor/common-nodes/dist/ai/llm-loop/autokick-recovery.js +17 -0
  78. package/vendor/common-nodes/dist/ai/llm-loop/dead-loop-detector.d.ts +28 -0
  79. package/vendor/common-nodes/dist/ai/llm-loop/dead-loop-detector.js +194 -0
  80. package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-reducer.js +36 -0
  81. package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-types.d.ts +35 -0
  82. package/vendor/common-nodes/dist/ai/llm-loop/llm-loop-types.js +19 -0
  83. package/vendor/common-nodes/dist/ai/llm-loop/normalize-llm-recovery-policy.js +52 -9
  84. package/vendor/common-nodes/dist/ai/llm-loop/operators/observe-provider-stream.d.ts +8 -2
  85. package/vendor/common-nodes/dist/ai/llm-loop/operators/observe-provider-stream.js +43 -13
  86. package/vendor/common-nodes/dist/ai/llm-loop/run-llm-loop.d.ts +3 -5
  87. package/vendor/common-nodes/dist/ai/llm-loop/run-llm-loop.js +116 -1
  88. package/vendor/common-nodes/dist/ai/llm-recovery-ui-schema.d.ts +82 -0
  89. package/vendor/common-nodes/dist/ai/llm-recovery-ui-schema.js +95 -0
  90. package/vendor/common-nodes/dist/ai/llm-session-shell.d.ts +4 -9
  91. package/vendor/common-nodes/dist/ai/llm-session-shell.js +2 -4
  92. package/vendor/common-nodes/dist/ai/nodes/critique/node.d.ts +588 -0
  93. package/vendor/common-nodes/dist/ai/nodes/critique/node.js +240 -0
  94. package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.d.ts +571 -0
  95. package/vendor/common-nodes/dist/ai/nodes/fake-llm/node.js +208 -0
  96. package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.d.ts +587 -0
  97. package/vendor/common-nodes/dist/ai/nodes/openai-llm/node.js +91 -0
  98. package/vendor/common-nodes/dist/ai/nodes/review/node.d.ts +593 -0
  99. package/vendor/common-nodes/dist/ai/nodes/review/node.js +240 -0
  100. package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.d.ts +630 -0
  101. package/vendor/common-nodes/dist/ai/nodes/sub-agent/node.js +302 -0
  102. package/vendor/common-nodes/dist/ai/openai/create-chat-completion-stream.js +6 -0
  103. package/vendor/common-nodes/dist/ai/openai/prepare-chat-completion.d.ts +2 -0
  104. package/vendor/common-nodes/dist/ai/openai/prepare-chat-completion.js +18 -0
  105. package/vendor/common-nodes/dist/ai/openai-llm/node.d.ts +246 -0
  106. package/vendor/common-nodes/dist/ai/review/node.d.ts +246 -0
  107. package/vendor/common-nodes/dist/ai/review/node.js +2 -2
  108. package/vendor/common-nodes/dist/ai/sub-agent/node.d.ts +246 -0
  109. package/vendor/common-nodes/dist/ai/sub-agent/node.js +2 -2
  110. package/vendor/common-nodes/dist/catalog.js +7 -5
  111. package/vendor/common-nodes/dist/compile-custom-nodes/node.d.ts +21 -0
  112. package/vendor/common-nodes/dist/compile-custom-nodes/node.js +45 -0
  113. package/vendor/common-nodes/dist/crawl/crawl/node.js +1 -1
  114. package/vendor/common-nodes/dist/crawl/fetch-url/node.js +1 -1
  115. package/vendor/common-nodes/dist/flow/repeat/node.js +6 -1
  116. package/vendor/common-nodes/dist/langflower-tools/emit-registration-tools.d.ts +18 -0
  117. package/vendor/common-nodes/dist/langflower-tools/emit-registration-tools.js +29 -0
  118. package/vendor/common-nodes/dist/langflower-tools/node.d.ts +20 -0
  119. package/vendor/common-nodes/dist/langflower-tools/node.js +77 -0
  120. package/vendor/common-nodes/dist/text/append-file/node.js +1 -1
  121. package/vendor/common-nodes/dist/text/read-file/node.js +1 -1
  122. package/vendor/common-nodes/dist/text/write-file/node.js +1 -1
  123. package/vendor/common-nodes/dist/tools/inventory-tool-round.d.ts +2 -2
  124. package/vendor/common-nodes/package.json +10 -10
  125. package/vendor/compiler/dist/compile-project-nodes.d.ts +2 -1
  126. package/vendor/compiler/dist/compile-project-nodes.js +35 -6
  127. package/vendor/compiler/dist/resolve-host-types.d.ts +0 -5
  128. package/vendor/compiler/dist/resolve-host-types.js +0 -8
  129. package/vendor/node-sdk/dist/node-factory/define-llm-node/define-llm-node.d.ts +1 -1
  130. package/vendor/node-sdk/dist/node-factory/define-llm-node/define-llm-node.js +1 -1
  131. package/vendor/node-sdk/dist/node-factory/define-llm-node/recovery-notice.d.ts +8 -0
  132. package/vendor/node-sdk/dist/node-factory/define-llm-node/recovery-notice.js +14 -0
  133. package/vendor/runtime/dist/runtime-editor.d.ts +5 -1
  134. package/vendor/runtime/dist/runtime-editor.js +19 -0
  135. package/vendor/runtime/dist/runtime-runner.js +17 -17
  136. package/vendor/runtime/dist/runtime.d.ts +2 -1
  137. package/vendor/runtime/dist/runtime.js +1 -0
  138. package/vendor/runtime/dist/testing/workflows/workflow-events.d.ts +8 -6
  139. package/vendor/runtime/dist/testing/workflows/workflow-events.js +19 -31
  140. package/vendor/runtime/dist/types.d.ts +33 -38
  141. package/vendor/runtime/dist/types.js +2 -1
  142. package/vendor/server/dist/bridge/attach-langflower-bridge.js +3 -2
  143. package/vendor/server/dist/bridge/bridge-event-log.js +17 -102
  144. package/vendor/server/dist/bridge/build-execution-context.d.ts +5 -2
  145. package/vendor/server/dist/bridge/build-execution-context.js +45 -5
  146. package/vendor/server/dist/bridge/forward-runner-event.d.ts +1 -1
  147. package/vendor/server/dist/bridge/forward-runner-event.js +7 -12
  148. package/vendor/server/dist/bridge/get-live-wired-tools.d.ts +12 -0
  149. package/vendor/server/dist/bridge/get-live-wired-tools.js +80 -0
  150. package/vendor/server/dist/bridge/langflower-tools-rpc.d.ts +7 -0
  151. package/vendor/server/dist/bridge/langflower-tools-rpc.js +29 -0
  152. package/vendor/server/dist/bridge/settings-draft-controller.js +26 -3
  153. package/vendor/server/dist/bridge/wire-custom-palette-handlers.d.ts +2 -1
  154. package/vendor/server/dist/bridge/wire-custom-palette-handlers.js +3 -5
  155. package/vendor/server/dist/bridge/wire-runner-handlers.js +15 -8
  156. package/vendor/server/dist/checkpoint/run-checkpoint-session.d.ts +1 -1
  157. package/vendor/server/dist/checkpoint/run-checkpoint-session.js +10 -9
  158. package/vendor/server/dist/palette/compile-and-hot-swap-custom-nodes.d.ts +10 -0
  159. package/vendor/server/dist/palette/compile-and-hot-swap-custom-nodes.js +23 -0
  160. package/vendor/server/dist/workflow/apply-editor-mutation.d.ts +5 -0
  161. package/vendor/server/dist/workflow/apply-editor-mutation.js +32 -0
  162. package/vendor/server/skeleton/instructions.md +9 -5
  163. package/vendor/server/skeleton/nodes/my-nodes/README.md +4 -3
  164. package/vendor/server/skeleton/schemas/langflower-config.schema.json +11 -1
  165. package/vendor/server/skeleton/skills/langflower-helper/SKILL.md +49 -19
  166. package/vendor/server/skeleton/skills/langflower-helper/architecture.md +22 -9
  167. package/vendor/server/skeleton/skills/langflower-helper/layout.md +15 -15
  168. package/vendor/server/skeleton/skills/langflower-node-writer/SKILL.md +19 -9
  169. package/vendor/server/skeleton/skills/langflower-workflow-writer/SKILL.md +14 -10
  170. package/vendor/server/skeleton/workflows/starter.json +30 -3
  171. package/vendor/shared/dist/execution/derive-run-settle-outcome.d.ts +1 -1
  172. package/vendor/shared/dist/execution/derive-run-settle-outcome.js +4 -3
  173. package/vendor/shared/dist/execution/derive-run-settle-outcome.test.js +9 -9
  174. package/vendor/shared/dist/langflower-bus-config.d.ts +6 -14
  175. package/vendor/shared/dist/langflower-bus-config.js +4 -12
  176. package/vendor/shared/dist/langflower-config/resolve-wired-tool-options.js +6 -0
  177. package/vendor/shared/dist/langflower-config/resolve-wired-tool-options.test.js +30 -0
  178. package/vendor/shared/dist/langflower-ws-waits.d.ts +7 -14
  179. package/vendor/shared/dist/langflower-ws-waits.js +14 -14
  180. package/vendor/websocket-bridge/dist/bridge-codec.d.ts +1 -0
  181. package/vendor/websocket-bridge/dist/bridge-codec.js +11 -11
  182. package/vendor/websocket-bridge/dist/bridge-frame.js +1 -1
  183. package/vendor/websocket-bridge/dist/bridge-subjects.d.ts +1 -1
  184. package/vendor/websocket-bridge/dist/bridge-subjects.js +2 -2
  185. package/vendor/websocket-bridge/dist/bridge-types.d.ts +13 -1
  186. package/vendor/websocket-bridge/dist/create-client.js +3 -3
  187. package/vendor/websocket-bridge/dist/create-server.js +12 -6
  188. package/vendor/websocket-bridge/package.json +8 -0
  189. package/ui-dist/main-SMO3L7U5.js +0 -311
@@ -121,6 +121,88 @@ export declare const reviewNode: {
121
121
  readonly min: 0;
122
122
  readonly max: 32;
123
123
  readonly step: 1;
124
+ }, {
125
+ readonly field: "autokickOnIdle";
126
+ readonly type: "boolean";
127
+ readonly label: "Autokick on idle and dead-loop";
128
+ readonly default: boolean;
129
+ }, {
130
+ readonly field: "deadLoopEnabled";
131
+ readonly type: "boolean";
132
+ readonly label: "Detect repetition dead loops";
133
+ readonly default: boolean;
134
+ }, {
135
+ readonly field: "maxAutokickAttempts";
136
+ readonly type: "number";
137
+ readonly label: "Max autokick reconnects (0 = unlimited)";
138
+ readonly default: number;
139
+ readonly min: 0;
140
+ readonly max: 1000;
141
+ readonly step: 1;
142
+ }, {
143
+ readonly field: "autokickBackoffMs";
144
+ readonly type: "number";
145
+ readonly label: "Autokick backoff base (ms)";
146
+ readonly default: number;
147
+ readonly min: 1000;
148
+ readonly step: 1000;
149
+ }, {
150
+ readonly field: "autokickMaxBackoffMs";
151
+ readonly type: "number";
152
+ readonly label: "Autokick backoff clamp (ms)";
153
+ readonly default: number;
154
+ readonly min: 1000;
155
+ readonly step: 1000;
156
+ }, {
157
+ readonly field: "autokickUserMessage";
158
+ readonly type: "string";
159
+ readonly label: "Autokick kick message";
160
+ readonly default: string;
161
+ }, {
162
+ readonly field: "autokickPenaltyFrequency";
163
+ readonly type: "number";
164
+ readonly label: "Autokick frequency_penalty delta";
165
+ readonly default: number;
166
+ readonly min: -2;
167
+ readonly max: 2;
168
+ readonly step: 0.1;
169
+ }, {
170
+ readonly field: "autokickPenaltyPresence";
171
+ readonly type: "number";
172
+ readonly label: "Autokick presence_penalty delta";
173
+ readonly default: number;
174
+ readonly min: -2;
175
+ readonly max: 2;
176
+ readonly step: 0.1;
177
+ }, {
178
+ readonly field: "deadLoopMaxWindowTokens";
179
+ readonly type: "number";
180
+ readonly label: "Dead-loop window (tokens)";
181
+ readonly default: number;
182
+ readonly min: 10;
183
+ readonly max: 8000;
184
+ readonly step: 1;
185
+ }, {
186
+ readonly field: "deadLoopConsecutiveThreshold";
187
+ readonly type: "number";
188
+ readonly label: "Dead-loop consecutive identical deltas";
189
+ readonly default: number;
190
+ readonly min: 1;
191
+ readonly step: 1;
192
+ }, {
193
+ readonly field: "deadLoopMinRepetitions";
194
+ readonly type: "number";
195
+ readonly label: "Dead-loop cyclic repetitions";
196
+ readonly default: number;
197
+ readonly min: 1;
198
+ readonly step: 1;
199
+ }, {
200
+ readonly field: "deadLoopMinPatternTokens";
201
+ readonly type: "number";
202
+ readonly label: "Dead-loop min pattern tokens";
203
+ readonly default: number;
204
+ readonly min: 1;
205
+ readonly step: 1;
124
206
  }];
125
207
  readonly bypassPorts: Record<string, import("@langflower/node-sdk").WireType>;
126
208
  readonly inputsConfigs: readonly [import("@langflower/node-sdk").InputPortMeta<import("@langflower/node-sdk").ExecutionContext<readonly [...({
@@ -229,6 +311,88 @@ export declare const reviewNode: {
229
311
  readonly min: 0;
230
312
  readonly max: 32;
231
313
  readonly step: 1;
314
+ }, {
315
+ readonly field: "autokickOnIdle";
316
+ readonly type: "boolean";
317
+ readonly label: "Autokick on idle and dead-loop";
318
+ readonly default: boolean;
319
+ }, {
320
+ readonly field: "deadLoopEnabled";
321
+ readonly type: "boolean";
322
+ readonly label: "Detect repetition dead loops";
323
+ readonly default: boolean;
324
+ }, {
325
+ readonly field: "maxAutokickAttempts";
326
+ readonly type: "number";
327
+ readonly label: "Max autokick reconnects (0 = unlimited)";
328
+ readonly default: number;
329
+ readonly min: 0;
330
+ readonly max: 1000;
331
+ readonly step: 1;
332
+ }, {
333
+ readonly field: "autokickBackoffMs";
334
+ readonly type: "number";
335
+ readonly label: "Autokick backoff base (ms)";
336
+ readonly default: number;
337
+ readonly min: 1000;
338
+ readonly step: 1000;
339
+ }, {
340
+ readonly field: "autokickMaxBackoffMs";
341
+ readonly type: "number";
342
+ readonly label: "Autokick backoff clamp (ms)";
343
+ readonly default: number;
344
+ readonly min: 1000;
345
+ readonly step: 1000;
346
+ }, {
347
+ readonly field: "autokickUserMessage";
348
+ readonly type: "string";
349
+ readonly label: "Autokick kick message";
350
+ readonly default: string;
351
+ }, {
352
+ readonly field: "autokickPenaltyFrequency";
353
+ readonly type: "number";
354
+ readonly label: "Autokick frequency_penalty delta";
355
+ readonly default: number;
356
+ readonly min: -2;
357
+ readonly max: 2;
358
+ readonly step: 0.1;
359
+ }, {
360
+ readonly field: "autokickPenaltyPresence";
361
+ readonly type: "number";
362
+ readonly label: "Autokick presence_penalty delta";
363
+ readonly default: number;
364
+ readonly min: -2;
365
+ readonly max: 2;
366
+ readonly step: 0.1;
367
+ }, {
368
+ readonly field: "deadLoopMaxWindowTokens";
369
+ readonly type: "number";
370
+ readonly label: "Dead-loop window (tokens)";
371
+ readonly default: number;
372
+ readonly min: 10;
373
+ readonly max: 8000;
374
+ readonly step: 1;
375
+ }, {
376
+ readonly field: "deadLoopConsecutiveThreshold";
377
+ readonly type: "number";
378
+ readonly label: "Dead-loop consecutive identical deltas";
379
+ readonly default: number;
380
+ readonly min: 1;
381
+ readonly step: 1;
382
+ }, {
383
+ readonly field: "deadLoopMinRepetitions";
384
+ readonly type: "number";
385
+ readonly label: "Dead-loop cyclic repetitions";
386
+ readonly default: number;
387
+ readonly min: 1;
388
+ readonly step: 1;
389
+ }, {
390
+ readonly field: "deadLoopMinPatternTokens";
391
+ readonly type: "number";
392
+ readonly label: "Dead-loop min pattern tokens";
393
+ readonly default: number;
394
+ readonly min: 1;
395
+ readonly step: 1;
232
396
  }], import("@langflower/node-sdk/llm").LlmExecutionCaps>>, ...import("@langflower/node-sdk").InputPortMeta<unknown>[]];
233
397
  readonly outputsConfigs: (import("@langflower/node-sdk").OutputParams & import("@langflower/node-sdk").PortMeta)[];
234
398
  readonly getInstance: () => import("@langflower/node-sdk").ReactiveNodeInstance<readonly [...({
@@ -337,6 +501,88 @@ export declare const reviewNode: {
337
501
  readonly min: 0;
338
502
  readonly max: 32;
339
503
  readonly step: 1;
504
+ }, {
505
+ readonly field: "autokickOnIdle";
506
+ readonly type: "boolean";
507
+ readonly label: "Autokick on idle and dead-loop";
508
+ readonly default: boolean;
509
+ }, {
510
+ readonly field: "deadLoopEnabled";
511
+ readonly type: "boolean";
512
+ readonly label: "Detect repetition dead loops";
513
+ readonly default: boolean;
514
+ }, {
515
+ readonly field: "maxAutokickAttempts";
516
+ readonly type: "number";
517
+ readonly label: "Max autokick reconnects (0 = unlimited)";
518
+ readonly default: number;
519
+ readonly min: 0;
520
+ readonly max: 1000;
521
+ readonly step: 1;
522
+ }, {
523
+ readonly field: "autokickBackoffMs";
524
+ readonly type: "number";
525
+ readonly label: "Autokick backoff base (ms)";
526
+ readonly default: number;
527
+ readonly min: 1000;
528
+ readonly step: 1000;
529
+ }, {
530
+ readonly field: "autokickMaxBackoffMs";
531
+ readonly type: "number";
532
+ readonly label: "Autokick backoff clamp (ms)";
533
+ readonly default: number;
534
+ readonly min: 1000;
535
+ readonly step: 1000;
536
+ }, {
537
+ readonly field: "autokickUserMessage";
538
+ readonly type: "string";
539
+ readonly label: "Autokick kick message";
540
+ readonly default: string;
541
+ }, {
542
+ readonly field: "autokickPenaltyFrequency";
543
+ readonly type: "number";
544
+ readonly label: "Autokick frequency_penalty delta";
545
+ readonly default: number;
546
+ readonly min: -2;
547
+ readonly max: 2;
548
+ readonly step: 0.1;
549
+ }, {
550
+ readonly field: "autokickPenaltyPresence";
551
+ readonly type: "number";
552
+ readonly label: "Autokick presence_penalty delta";
553
+ readonly default: number;
554
+ readonly min: -2;
555
+ readonly max: 2;
556
+ readonly step: 0.1;
557
+ }, {
558
+ readonly field: "deadLoopMaxWindowTokens";
559
+ readonly type: "number";
560
+ readonly label: "Dead-loop window (tokens)";
561
+ readonly default: number;
562
+ readonly min: 10;
563
+ readonly max: 8000;
564
+ readonly step: 1;
565
+ }, {
566
+ readonly field: "deadLoopConsecutiveThreshold";
567
+ readonly type: "number";
568
+ readonly label: "Dead-loop consecutive identical deltas";
569
+ readonly default: number;
570
+ readonly min: 1;
571
+ readonly step: 1;
572
+ }, {
573
+ readonly field: "deadLoopMinRepetitions";
574
+ readonly type: "number";
575
+ readonly label: "Dead-loop cyclic repetitions";
576
+ readonly default: number;
577
+ readonly min: 1;
578
+ readonly step: 1;
579
+ }, {
580
+ readonly field: "deadLoopMinPatternTokens";
581
+ readonly type: "number";
582
+ readonly label: "Dead-loop min pattern tokens";
583
+ readonly default: number;
584
+ readonly min: 1;
585
+ readonly step: 1;
340
586
  }], import("@langflower/node-sdk/llm").LlmExecutionCaps>;
341
587
  readonly paletteSecondary?: true;
342
588
  readonly description?: string;
@@ -1,5 +1,5 @@
1
1
  import { filter, map, Observable } from 'rxjs';
2
- import { defineLlmNode, isSteerControlPayload, } from '@langflower/node-sdk/llm';
2
+ import { defineLlmNode, isSteerControlPayload, toLlmRecoveryPortValue, } from '@langflower/node-sdk/llm';
3
3
  import { collectAgentToolHandles } from '../../tools/collect-agent-tool-handles.js';
4
4
  import { buildEffectiveSystemPrompt } from '../build-effective-system-prompt.js';
5
5
  import { resolveChatProviderModel } from '../resolve-chat-provider-model.js';
@@ -208,7 +208,7 @@ export const reviewNode = defineLlmNode({
208
208
  const toolLog$ = cycle$.pipeValue(demuxByKind('toolLog', (chunk) => chunk.text));
209
209
  const recovery$ = cycle$.pipeValue(demuxByKind('recoveryNotice', (chunk) => {
210
210
  const notice = chunk;
211
- return { code: notice.code, text: notice.text };
211
+ return toLlmRecoveryPortValue(notice);
212
212
  }));
213
213
  const response$ = cycle$.pipeValue(demuxByKind('accept', (chunk) => chunk.result));
214
214
  const feedback$ = cycle$.pipeValue(demuxByKind('feedback', (chunk) => chunk.notes));
@@ -128,6 +128,88 @@ export declare const subAgentNode: {
128
128
  readonly min: 0;
129
129
  readonly max: 32;
130
130
  readonly step: 1;
131
+ }, {
132
+ readonly field: "autokickOnIdle";
133
+ readonly type: "boolean";
134
+ readonly label: "Autokick on idle and dead-loop";
135
+ readonly default: boolean;
136
+ }, {
137
+ readonly field: "deadLoopEnabled";
138
+ readonly type: "boolean";
139
+ readonly label: "Detect repetition dead loops";
140
+ readonly default: boolean;
141
+ }, {
142
+ readonly field: "maxAutokickAttempts";
143
+ readonly type: "number";
144
+ readonly label: "Max autokick reconnects (0 = unlimited)";
145
+ readonly default: number;
146
+ readonly min: 0;
147
+ readonly max: 1000;
148
+ readonly step: 1;
149
+ }, {
150
+ readonly field: "autokickBackoffMs";
151
+ readonly type: "number";
152
+ readonly label: "Autokick backoff base (ms)";
153
+ readonly default: number;
154
+ readonly min: 1000;
155
+ readonly step: 1000;
156
+ }, {
157
+ readonly field: "autokickMaxBackoffMs";
158
+ readonly type: "number";
159
+ readonly label: "Autokick backoff clamp (ms)";
160
+ readonly default: number;
161
+ readonly min: 1000;
162
+ readonly step: 1000;
163
+ }, {
164
+ readonly field: "autokickUserMessage";
165
+ readonly type: "string";
166
+ readonly label: "Autokick kick message";
167
+ readonly default: string;
168
+ }, {
169
+ readonly field: "autokickPenaltyFrequency";
170
+ readonly type: "number";
171
+ readonly label: "Autokick frequency_penalty delta";
172
+ readonly default: number;
173
+ readonly min: -2;
174
+ readonly max: 2;
175
+ readonly step: 0.1;
176
+ }, {
177
+ readonly field: "autokickPenaltyPresence";
178
+ readonly type: "number";
179
+ readonly label: "Autokick presence_penalty delta";
180
+ readonly default: number;
181
+ readonly min: -2;
182
+ readonly max: 2;
183
+ readonly step: 0.1;
184
+ }, {
185
+ readonly field: "deadLoopMaxWindowTokens";
186
+ readonly type: "number";
187
+ readonly label: "Dead-loop window (tokens)";
188
+ readonly default: number;
189
+ readonly min: 10;
190
+ readonly max: 8000;
191
+ readonly step: 1;
192
+ }, {
193
+ readonly field: "deadLoopConsecutiveThreshold";
194
+ readonly type: "number";
195
+ readonly label: "Dead-loop consecutive identical deltas";
196
+ readonly default: number;
197
+ readonly min: 1;
198
+ readonly step: 1;
199
+ }, {
200
+ readonly field: "deadLoopMinRepetitions";
201
+ readonly type: "number";
202
+ readonly label: "Dead-loop cyclic repetitions";
203
+ readonly default: number;
204
+ readonly min: 1;
205
+ readonly step: 1;
206
+ }, {
207
+ readonly field: "deadLoopMinPatternTokens";
208
+ readonly type: "number";
209
+ readonly label: "Dead-loop min pattern tokens";
210
+ readonly default: number;
211
+ readonly min: 1;
212
+ readonly step: 1;
131
213
  }];
132
214
  readonly bypassPorts: Record<string, import("@langflower/node-sdk").WireType>;
133
215
  readonly inputsConfigs: readonly [import("@langflower/node-sdk").InputPortMeta<import("@langflower/node-sdk").ExecutionContext<readonly [{
@@ -251,6 +333,88 @@ export declare const subAgentNode: {
251
333
  readonly min: 0;
252
334
  readonly max: 32;
253
335
  readonly step: 1;
336
+ }, {
337
+ readonly field: "autokickOnIdle";
338
+ readonly type: "boolean";
339
+ readonly label: "Autokick on idle and dead-loop";
340
+ readonly default: boolean;
341
+ }, {
342
+ readonly field: "deadLoopEnabled";
343
+ readonly type: "boolean";
344
+ readonly label: "Detect repetition dead loops";
345
+ readonly default: boolean;
346
+ }, {
347
+ readonly field: "maxAutokickAttempts";
348
+ readonly type: "number";
349
+ readonly label: "Max autokick reconnects (0 = unlimited)";
350
+ readonly default: number;
351
+ readonly min: 0;
352
+ readonly max: 1000;
353
+ readonly step: 1;
354
+ }, {
355
+ readonly field: "autokickBackoffMs";
356
+ readonly type: "number";
357
+ readonly label: "Autokick backoff base (ms)";
358
+ readonly default: number;
359
+ readonly min: 1000;
360
+ readonly step: 1000;
361
+ }, {
362
+ readonly field: "autokickMaxBackoffMs";
363
+ readonly type: "number";
364
+ readonly label: "Autokick backoff clamp (ms)";
365
+ readonly default: number;
366
+ readonly min: 1000;
367
+ readonly step: 1000;
368
+ }, {
369
+ readonly field: "autokickUserMessage";
370
+ readonly type: "string";
371
+ readonly label: "Autokick kick message";
372
+ readonly default: string;
373
+ }, {
374
+ readonly field: "autokickPenaltyFrequency";
375
+ readonly type: "number";
376
+ readonly label: "Autokick frequency_penalty delta";
377
+ readonly default: number;
378
+ readonly min: -2;
379
+ readonly max: 2;
380
+ readonly step: 0.1;
381
+ }, {
382
+ readonly field: "autokickPenaltyPresence";
383
+ readonly type: "number";
384
+ readonly label: "Autokick presence_penalty delta";
385
+ readonly default: number;
386
+ readonly min: -2;
387
+ readonly max: 2;
388
+ readonly step: 0.1;
389
+ }, {
390
+ readonly field: "deadLoopMaxWindowTokens";
391
+ readonly type: "number";
392
+ readonly label: "Dead-loop window (tokens)";
393
+ readonly default: number;
394
+ readonly min: 10;
395
+ readonly max: 8000;
396
+ readonly step: 1;
397
+ }, {
398
+ readonly field: "deadLoopConsecutiveThreshold";
399
+ readonly type: "number";
400
+ readonly label: "Dead-loop consecutive identical deltas";
401
+ readonly default: number;
402
+ readonly min: 1;
403
+ readonly step: 1;
404
+ }, {
405
+ readonly field: "deadLoopMinRepetitions";
406
+ readonly type: "number";
407
+ readonly label: "Dead-loop cyclic repetitions";
408
+ readonly default: number;
409
+ readonly min: 1;
410
+ readonly step: 1;
411
+ }, {
412
+ readonly field: "deadLoopMinPatternTokens";
413
+ readonly type: "number";
414
+ readonly label: "Dead-loop min pattern tokens";
415
+ readonly default: number;
416
+ readonly min: 1;
417
+ readonly step: 1;
254
418
  }], import("@langflower/node-sdk/llm").LlmExecutionCaps>>, ...import("@langflower/node-sdk").InputPortMeta<unknown>[]];
255
419
  readonly outputsConfigs: (import("@langflower/node-sdk").OutputParams & import("@langflower/node-sdk").PortMeta)[];
256
420
  readonly getInstance: () => import("@langflower/node-sdk").ReactiveNodeInstance<readonly [{
@@ -374,6 +538,88 @@ export declare const subAgentNode: {
374
538
  readonly min: 0;
375
539
  readonly max: 32;
376
540
  readonly step: 1;
541
+ }, {
542
+ readonly field: "autokickOnIdle";
543
+ readonly type: "boolean";
544
+ readonly label: "Autokick on idle and dead-loop";
545
+ readonly default: boolean;
546
+ }, {
547
+ readonly field: "deadLoopEnabled";
548
+ readonly type: "boolean";
549
+ readonly label: "Detect repetition dead loops";
550
+ readonly default: boolean;
551
+ }, {
552
+ readonly field: "maxAutokickAttempts";
553
+ readonly type: "number";
554
+ readonly label: "Max autokick reconnects (0 = unlimited)";
555
+ readonly default: number;
556
+ readonly min: 0;
557
+ readonly max: 1000;
558
+ readonly step: 1;
559
+ }, {
560
+ readonly field: "autokickBackoffMs";
561
+ readonly type: "number";
562
+ readonly label: "Autokick backoff base (ms)";
563
+ readonly default: number;
564
+ readonly min: 1000;
565
+ readonly step: 1000;
566
+ }, {
567
+ readonly field: "autokickMaxBackoffMs";
568
+ readonly type: "number";
569
+ readonly label: "Autokick backoff clamp (ms)";
570
+ readonly default: number;
571
+ readonly min: 1000;
572
+ readonly step: 1000;
573
+ }, {
574
+ readonly field: "autokickUserMessage";
575
+ readonly type: "string";
576
+ readonly label: "Autokick kick message";
577
+ readonly default: string;
578
+ }, {
579
+ readonly field: "autokickPenaltyFrequency";
580
+ readonly type: "number";
581
+ readonly label: "Autokick frequency_penalty delta";
582
+ readonly default: number;
583
+ readonly min: -2;
584
+ readonly max: 2;
585
+ readonly step: 0.1;
586
+ }, {
587
+ readonly field: "autokickPenaltyPresence";
588
+ readonly type: "number";
589
+ readonly label: "Autokick presence_penalty delta";
590
+ readonly default: number;
591
+ readonly min: -2;
592
+ readonly max: 2;
593
+ readonly step: 0.1;
594
+ }, {
595
+ readonly field: "deadLoopMaxWindowTokens";
596
+ readonly type: "number";
597
+ readonly label: "Dead-loop window (tokens)";
598
+ readonly default: number;
599
+ readonly min: 10;
600
+ readonly max: 8000;
601
+ readonly step: 1;
602
+ }, {
603
+ readonly field: "deadLoopConsecutiveThreshold";
604
+ readonly type: "number";
605
+ readonly label: "Dead-loop consecutive identical deltas";
606
+ readonly default: number;
607
+ readonly min: 1;
608
+ readonly step: 1;
609
+ }, {
610
+ readonly field: "deadLoopMinRepetitions";
611
+ readonly type: "number";
612
+ readonly label: "Dead-loop cyclic repetitions";
613
+ readonly default: number;
614
+ readonly min: 1;
615
+ readonly step: 1;
616
+ }, {
617
+ readonly field: "deadLoopMinPatternTokens";
618
+ readonly type: "number";
619
+ readonly label: "Dead-loop min pattern tokens";
620
+ readonly default: number;
621
+ readonly min: 1;
622
+ readonly step: 1;
377
623
  }], import("@langflower/node-sdk/llm").LlmExecutionCaps>;
378
624
  readonly paletteSecondary?: true;
379
625
  readonly description?: string;
@@ -1,4 +1,4 @@
1
- import { defineLlmNode, isSteerControlPayload } from '@langflower/node-sdk/llm';
1
+ import { defineLlmNode, isSteerControlPayload, toLlmRecoveryPortValue, } from '@langflower/node-sdk/llm';
2
2
  import { concat, EMPTY, filter, mergeMap, Observable, of, } from 'rxjs';
3
3
  import { llmPanelUiSchema } from '../llm-panel-ui-schema.js';
4
4
  import { llmCompactionUiSchema } from '../llm-compaction-ui-schema.js';
@@ -261,7 +261,7 @@ export const subAgentNode = defineLlmNode({
261
261
  const toolLog$ = cycle$.pipeValue(demuxByKind('toolLog', (chunk) => chunk.text));
262
262
  const recovery$ = cycle$.pipeValue(demuxByKind('recoveryNotice', (chunk) => {
263
263
  const notice = chunk;
264
- return { code: notice.code, text: notice.text };
264
+ return toLlmRecoveryPortValue(notice);
265
265
  }));
266
266
  const response$ = cycle$.pipeValue(demuxByKind('response', (chunk) => chunk
267
267
  .text));
@@ -1,11 +1,11 @@
1
- import { fakeLlmNode } from './ai/fake-llm/node.js';
2
- import { openAiLlmNode } from './ai/openai-llm/node.js';
1
+ import { fakeLlmNode } from './ai/nodes/fake-llm/node.js';
2
+ import { openAiLlmNode } from './ai/nodes/openai-llm/node.js';
3
3
  import { mcpHttpNode } from './mcp/mcp-http/node.js';
4
4
  import { mcpStdioNode } from './mcp/mcp-stdio/node.js';
5
5
  import { chatInputNode } from './hitl/chat-input/node.js';
6
- import { reviewNode } from './ai/review/node.js';
7
- import { critiqueNode } from './ai/critique/node.js';
8
- import { subAgentNode } from './ai/sub-agent/node.js';
6
+ import { reviewNode } from './ai/nodes/review/node.js';
7
+ import { critiqueNode } from './ai/nodes/critique/node.js';
8
+ import { subAgentNode } from './ai/nodes/sub-agent/node.js';
9
9
  import { checkpointNode } from './flow/checkpoint/node.js';
10
10
  import { delayNode } from './flow/delay/node.js';
11
11
  import { loopNode } from './flow/loop/node.js';
@@ -33,6 +33,7 @@ import { extractLinksNode } from './crawl/extract-links/node.js';
33
33
  import { fetchUrlNode } from './crawl/fetch-url/node.js';
34
34
  import { savePageNode } from './crawl/save-page/node.js';
35
35
  import { memoryToolsNode } from './memory/memory-tools/node.js';
36
+ import { langflowerToolsNode } from './langflower-tools/node.js';
36
37
  const COMMON_REACTIVE_NODES = [
37
38
  booleanNode,
38
39
  numberNode,
@@ -64,6 +65,7 @@ const COMMON_REACTIVE_NODES = [
64
65
  compareNode,
65
66
  switchNode,
66
67
  memoryToolsNode,
68
+ langflowerToolsNode,
67
69
  fetchUrlNode,
68
70
  extractLinksNode,
69
71
  savePageNode,
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Emits `compile_custom_nodes` for agent inventory. The handler calls the
3
+ * server-injected compile hook (same composer as Custom → Update).
4
+ */
5
+ export declare const compileCustomNodesNode: {
6
+ readonly emitOncePerActivation: boolean;
7
+ readonly stopsRun: boolean;
8
+ readonly chatEntry: boolean;
9
+ readonly uiSchema: readonly [];
10
+ readonly bypassPorts: Record<string, import("@langflower/node-sdk").WireType>;
11
+ readonly inputsConfigs: readonly [import("@langflower/node-sdk").InputPortMeta<import("@langflower/node-sdk").ExecutionContext<readonly [], Record<string, never>>>, ...import("@langflower/node-sdk").InputPortMeta<unknown>[]];
12
+ readonly outputsConfigs: (import("@langflower/node-sdk").OutputParams & import("@langflower/node-sdk").PortMeta)[];
13
+ readonly getInstance: () => import("@langflower/node-sdk").ReactiveNodeInstance<readonly [], Record<string, never>>;
14
+ readonly paletteSecondary?: true;
15
+ readonly description?: string;
16
+ readonly type: string;
17
+ readonly displayName: string;
18
+ readonly category: string | undefined;
19
+ readonly icon: string | undefined;
20
+ };
21
+ //# sourceMappingURL=node.d.ts.map
@@ -0,0 +1,45 @@
1
+ import { defineToolRegistrations } from '@langflower/node-sdk';
2
+ import { getRunHostServices, } from '../ai/features/run-host-services.js';
3
+ const MISSING_HOOK_TEXT = '{ ok: false }\ncompile_custom_nodes unavailable (no server hook)';
4
+ const formatCompileCustomNodesResult = (result) => {
5
+ const lines = [`status: ${result.status}`];
6
+ if (result.nodeTypes.length > 0) {
7
+ lines.push(`nodeTypes: ${result.nodeTypes.join(', ')}`);
8
+ }
9
+ if (result.errors.length > 0) {
10
+ lines.push('errors:');
11
+ for (const error of result.errors) {
12
+ lines.push(`- ${error.packageName}: ${error.message}`);
13
+ }
14
+ }
15
+ return lines.join('\n');
16
+ };
17
+ /**
18
+ * Emits `compile_custom_nodes` for agent inventory. The handler calls the
19
+ * server-injected compile hook (same composer as Custom → Update).
20
+ */
21
+ export const compileCustomNodesNode = defineToolRegistrations({
22
+ type: 'common-compile-custom-nodes',
23
+ displayName: 'Compile Custom Nodes',
24
+ category: 'Tools',
25
+ description: 'Emits compile_custom_nodes so an agent can recompile project custom packs (same path as Custom → Update).',
26
+ tools: [
27
+ {
28
+ toolId: 'compile_custom_nodes',
29
+ description: 'Recompile `.langflower/nodes/` packs, hot-swap live custom instances, and refresh the Custom palette. No arguments. Pack failures also write COMPILATION_ERRORS.md.',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {},
33
+ additionalProperties: false,
34
+ },
35
+ handler: async (_args, ctx) => {
36
+ const compile = getRunHostServices(ctx)?.compileCustomNodes;
37
+ if (compile === undefined) {
38
+ return MISSING_HOOK_TEXT;
39
+ }
40
+ return formatCompileCustomNodesResult(await compile());
41
+ },
42
+ },
43
+ ],
44
+ });
45
+ //# sourceMappingURL=node.js.map
@@ -3,7 +3,7 @@ import { createCrawlContext } from '@langflower/tools/create-crawl-context';
3
3
  import { createWebFetch } from '@langflower/tools/create-web-fetch';
4
4
  import { runBfsCrawl } from '@langflower/tools/run-bfs-crawl';
5
5
  import { from, mergeMap, throwError } from 'rxjs';
6
- import { getRunHostServices } from '../../ai/run-host-services.js';
6
+ import { getRunHostServices } from '../../ai/features/run-host-services.js';
7
7
  const normalizeLimit = (value, fallback, max) => {
8
8
  const n = Number(value);
9
9
  if (!Number.isFinite(n) || n < 0) {
@@ -2,7 +2,7 @@ import { defineReactiveNode } from '@langflower/node-sdk';
2
2
  import { createWebFetch } from '@langflower/tools/create-web-fetch';
3
3
  import { from, map, mergeMap, throwError } from 'rxjs';
4
4
  import { htmlToText } from '@langflower/tools/html';
5
- import { getRunHostServices } from '../../ai/run-host-services.js';
5
+ import { getRunHostServices } from '../../ai/features/run-host-services.js';
6
6
  /**
7
7
  * HTTP GET a URL via server `ctx.harness.webFetch` (SSRF guards), then extract
8
8
  * plain text from HTML.