langflower 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -15
- package/docs/public/README.md +15 -0
- package/docs/public/configuration.md +56 -0
- package/docs/public/extending.md +58 -0
- package/docs/public/getting-started.md +61 -0
- package/docs/public/how-it-works.md +39 -0
- package/docs/public/product.md +43 -0
- package/docs/public/using-the-editor.md +53 -0
- package/docs/public/workflows.md +49 -0
- package/package.json +3 -2
- package/ui-dist/chunk-6DQ2XSRW.js +4 -0
- package/ui-dist/{chunk-2AICAC67.js → chunk-Y6VMBLSJ.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/main-RCFTD5AZ.js +311 -0
- package/ui-dist/styles-EOXODOI7.css +1 -0
- package/vendor/common-nodes/dist/ai/critique/node.d.ts +141 -23
- package/vendor/common-nodes/dist/ai/critique/node.js +33 -31
- package/vendor/common-nodes/dist/ai/fake-llm/node.d.ts +6 -6
- package/vendor/common-nodes/dist/ai/llm-compaction-ui-schema.d.ts +1 -1
- package/vendor/common-nodes/dist/ai/llm-compaction-ui-schema.js +2 -1
- package/vendor/common-nodes/dist/ai/llm-panel-ui-schema.d.ts +7 -21
- package/vendor/common-nodes/dist/ai/llm-panel-ui-schema.js +8 -4
- package/vendor/common-nodes/dist/ai/llm-session-shell.d.ts +2 -0
- package/vendor/common-nodes/dist/ai/llm-session-shell.js +3 -3
- package/vendor/common-nodes/dist/ai/normalize-max-iterations.d.ts +4 -3
- package/vendor/common-nodes/dist/ai/normalize-max-iterations.js +4 -3
- package/vendor/common-nodes/dist/ai/openai/normalize-compaction-params.d.ts +2 -2
- package/vendor/common-nodes/dist/ai/openai/normalize-compaction-params.js +1 -1
- package/vendor/common-nodes/dist/ai/openai-llm/node.d.ts +9 -9
- package/vendor/common-nodes/dist/ai/resolve-chat-provider-model.d.ts +10 -0
- package/vendor/common-nodes/dist/ai/resolve-chat-provider-model.js +8 -0
- package/vendor/common-nodes/dist/ai/review/node.d.ts +138 -15
- package/vendor/common-nodes/dist/ai/review/node.js +29 -22
- package/vendor/common-nodes/dist/ai/run-host-services.d.ts +8 -0
- package/vendor/common-nodes/dist/ai/sub-agent/node.d.ts +9 -9
- package/vendor/common-nodes/dist/ai/sub-agent/node.js +4 -3
- package/vendor/common-nodes/dist/hitl/chat-input/node.js +1 -0
- package/vendor/common-nodes/dist/hitl/review-gate/node.js +5 -0
- package/vendor/node-sdk/dist/node-factory/define-llm-node/default-llm-ports.js +2 -0
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/define-reactive-node.d.ts +1 -1
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/io-helpers.d.ts +5 -12
- package/vendor/node-sdk/dist/node-factory/define-reactive-node/port-meta.d.ts +13 -0
- package/vendor/runtime/dist/runtime-runner.js +7 -4
- package/vendor/runtime/dist/runtime.d.ts +1 -1
- package/vendor/runtime/dist/types.d.ts +12 -0
- package/vendor/server/dist/bridge/attach-langflower-bridge.d.ts +4 -1
- package/vendor/server/dist/bridge/attach-langflower-bridge.js +16 -5
- package/vendor/server/dist/bridge/bridge-event-log.d.ts +12 -0
- package/vendor/server/dist/bridge/bridge-event-log.js +199 -0
- package/vendor/server/dist/bridge/build-execution-context.d.ts +1 -1
- package/vendor/server/dist/bridge/build-execution-context.js +3 -0
- package/vendor/server/dist/bridge/emit-bootstrap.d.ts +4 -2
- package/vendor/server/dist/bridge/emit-bootstrap.js +6 -2
- package/vendor/server/dist/bridge/settings-draft-controller.d.ts +14 -0
- package/vendor/server/dist/bridge/settings-draft-controller.js +178 -0
- package/vendor/server/dist/bridge/wire-config-handlers.d.ts +8 -1
- package/vendor/server/dist/bridge/wire-config-handlers.js +44 -16
- package/vendor/server/dist/bridge/wire-editor-handlers.d.ts +8 -1
- package/vendor/server/dist/bridge/wire-editor-handlers.js +40 -1
- package/vendor/server/dist/bridge/wire-runner-handlers.js +3 -1
- package/vendor/server/dist/config/langflower-config.service.d.ts +2 -0
- package/vendor/server/dist/config/langflower-config.service.js +24 -1
- package/vendor/server/dist/config/resolve-draft-provider-credentials.d.ts +18 -0
- package/vendor/server/dist/config/resolve-draft-provider-credentials.js +60 -0
- package/vendor/server/dist/create-server.js +5 -3
- package/vendor/server/dist/session/build-session-bootstrap.d.ts +3 -1
- package/vendor/server/dist/session/build-session-bootstrap.js +9 -0
- package/vendor/server/dist/session/langflower-session.d.ts +7 -2
- package/vendor/server/dist/session/langflower-session.js +9 -1
- package/vendor/server/dist/session/settings-draft-session.d.ts +24 -0
- package/vendor/server/dist/session/settings-draft-session.js +82 -0
- package/vendor/server/skeleton/schemas/langflower-config.schema.json +4 -0
- package/vendor/server/skeleton/skills/langflower-helper/SKILL.md +20 -8
- package/vendor/server/skeleton/skills/langflower-helper/architecture.md +5 -0
- package/vendor/server/skeleton/skills/langflower-helper/layout.md +18 -16
- package/vendor/server/skeleton/workflows/simple-coder.json +249 -19
- package/vendor/server/skeleton/workflows/starter.json +31 -20
- package/vendor/shared/dist/langflower-bus-config.d.ts +50 -10
- package/vendor/shared/dist/langflower-bus-config.js +52 -11
- package/vendor/shared/dist/langflower-config/merge-langflower-config-layers.test.js +4 -0
- package/vendor/shared/dist/langflower-config/parse-default-chat-model.d.ts +14 -0
- package/vendor/shared/dist/langflower-config/parse-default-chat-model.js +38 -0
- package/vendor/shared/dist/langflower-config/parse-default-chat-model.test.d.ts +1 -0
- package/vendor/shared/dist/langflower-config/parse-default-chat-model.test.js +41 -0
- package/vendor/shared/dist/langflower-config/resolve-server-logs-enabled.d.ts +6 -0
- package/vendor/shared/dist/langflower-config/resolve-server-logs-enabled.js +5 -0
- package/vendor/shared/dist/langflower-config/resolve-server-logs-enabled.test.d.ts +1 -0
- package/vendor/shared/dist/langflower-config/resolve-server-logs-enabled.test.js +11 -0
- package/vendor/shared/dist/langflower-config/settings-draft.d.ts +44 -0
- package/vendor/shared/dist/langflower-config/settings-draft.js +143 -0
- package/vendor/shared/dist/langflower.d.ts +7 -2
- package/vendor/shared/dist/langflower.js +3 -0
- package/vendor/shared/dist/types/langflower-bootstrap.d.ts +6 -1
- package/vendor/shared/dist/types/langflower-config.d.ts +65 -0
- package/vendor/shared/dist/types/langflower-editor.d.ts +19 -0
- package/ui-dist/chunk-6ZABW4JL.js +0 -4
- package/ui-dist/main-XI7IOZKZ.js +0 -311
- package/ui-dist/styles-TQGRAC7Q.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@charset "UTF-8";@layer properties;:root{--ngd-colors-gray-100: #ffffff;--ngd-colors-gray-200: #f7f7f7;--ngd-colors-gray-300: #edeff3;--ngd-colors-gray-400: #d5d8e0;--ngd-colors-gray-450: #c2c0c0;--ngd-colors-gray-500: #6f7480;--ngd-colors-gray-600: #4d5059;--ngd-colors-gray-650: #383a40;--ngd-colors-gray-700: #27282b;--ngd-colors-gray-800: #151516;--ngd-colors-gray-900-5: rgba(7, 7, 8, .05);--ngd-colors-gray-900-20: rgba(7, 7, 8, .2);--ngd-colors-gray-900-50: rgba(7, 7, 8, .5);--ngd-colors-acc1-400: #a977ff;--ngd-colors-acc1-500: #9140ff;--ngd-colors-acc1-500-40: rgba(145, 64, 255, .4);--ngd-colors-acc1-500-50: rgba(145, 64, 255, .5);--ngd-colors-acc1-600: #891aff;--ngd-colors-acc4-500: #1096e7}:root{--ngd-shadow: var(--ngd-colors-gray-900-20);--ngd-txt-primary-default: var(--ngd-colors-gray-800);--ngd-nav-button-primary-default: var(--ngd-colors-gray-600);--ngd-nav-button-primary-pressed: var(--ngd-colors-acc1-600);--ngd-nav-button-primary-hover: var(--ngd-colors-gray-900-5);--ngd-nav-button-primary-disabled: var(--ngd-colors-gray-450);--ngd-diagram-background-color: var(--ngd-colors-gray-200);--ngd-ui-bg-primary-default: var(--ngd-colors-gray-100);--ngd-ui-bg-tertiary-default: var(--ngd-colors-gray-200);--ngd-ui-stroke-primary-focus: var(--ngd-colors-gray-500);--ngd-pt-stroke-primary-default: var(--ngd-colors-gray-600);--ngd-node-bg-primary-default: var(--ngd-colors-gray-100);--ngd-node-stroke-primary-default: var(--ngd-colors-gray-400);--ngd-node-stroke-primary-hover: var(--ngd-colors-acc1-500);--ngd-node-port-fill-default: var(--ngd-colors-gray-100);--ngd-node-port-fill-active: var(--ngd-colors-acc1-500);--ngd-node-port-stroke-default: var(--ngd-colors-gray-500);--ngd-node-port-stroke-active: var(--ngd-colors-gray-100);--ngd-transform-box: var(--ngd-colors-acc4-500);--ngd-focus-ring-node-active: var(--ngd-colors-acc1-500-40);--ngd-button-gray-bg-default: var(--ngd-colors-gray-500);--ngd-button-gray-bg-hover: var(--ngd-colors-gray-600);--ngd-button-gray-bg-active: var(--ngd-colors-gray-650);--ngd-default-edge-label-bg-primary-default: var(--ngd-colors-gray-100);--ngd-background-line-minor-color: var(--ngd-colors-gray-450);--ngd-background-line-major-color: var(--ngd-colors-gray-500);--ngd-ui-border-color: var(--ngd-colors-gray-300);--ngd-minimap-bg-primary-default: var(--ngd-colors-gray-100);--ngd-minimap-stroke-primary-default: var(--ngd-colors-gray-400)}html[data-theme=dark]{--ngd-shadow: var(--ngd-colors-gray-900-50);--ngd-txt-primary-default: var(--ngd-colors-gray-100);--ngd-nav-button-primary-default: var(--ngd-colors-gray-400);--ngd-nav-button-primary-pressed: var(--ngd-colors-acc1-500);--ngd-nav-button-primary-hover: var(--ngd-colors-gray-900-5);--ngd-nav-button-primary-disabled: var(--ngd-colors-gray-600);--ngd-diagram-background-color: var(--ngd-colors-gray-800);--ngd-ui-bg-primary-default: var(--ngd-colors-gray-700);--ngd-ui-bg-tertiary-default: var(--ngd-colors-gray-800);--ngd-ui-stroke-primary-focus: var(--ngd-colors-gray-500);--ngd-pt-stroke-primary-default: var(--ngd-colors-gray-200);--ngd-node-bg-primary-default: var(--ngd-colors-gray-700);--ngd-node-stroke-primary-default: var(--ngd-colors-gray-600);--ngd-node-stroke-primary-hover: var(--ngd-colors-acc1-400);--ngd-node-port-fill-default: var(--ngd-colors-gray-100);--ngd-node-port-fill-active: var(--ngd-colors-acc1-500);--ngd-node-port-stroke-default: var(--ngd-colors-gray-500);--ngd-node-port-stroke-active: var(--ngd-colors-gray-100);--ngd-transform-box: var(--ngd-colors-acc4-500);--ngd-focus-ring-node-active: var(--ngd-colors-acc1-500-40);--ngd-button-gray-bg-default: var(--ngd-colors-gray-650);--ngd-button-gray-bg-hover: var(--ngd-colors-gray-600);--ngd-button-gray-bg-active: var(--ngd-colors-gray-500);--ngd-default-edge-label-bg-primary-default: var(--ngd-colors-gray-700);--ngd-background-line-minor-color: var(--ngd-colors-gray-700);--ngd-background-line-major-color: var(--ngd-colors-gray-600);--ngd-ui-border-color: var(--ngd-colors-gray-700);--ngd-minimap-bg-primary-default: var(--ngd-colors-gray-700);--ngd-minimap-stroke-primary-default: var(--ngd-colors-gray-600)}:root{--ngd-node-background-color: var(--ngd-node-bg-primary-default);--ngd-node-border-color: var(--ngd-node-stroke-primary-default);--ngd-node-border-color-hover: var(--ngd-node-stroke-primary-hover);--ngd-node-border-radius: .75rem;--ngd-node-border-size: .0625rem;--ngd-group-border-color: var(--ngd-ui-stroke-primary-focus);--ngd-group-border-color-hover: var(--ngd-pt-stroke-primary-default);--ngd-group-border-color-highlight: var(--ngd-colors-acc1-500);--ngd-group-box-shadow-color-highlight: var(--ngd-colors-acc1-500-50);--ngd-group-background-color-highlight: var(--ngd-colors-gray-400);--ngd-group-border-radius: .75rem;--ngd-group-highlight-size: 1.25rem;--ngd-selected-node-box-shadow: 0 0 0 .25rem var(--ngd-focus-ring-node-active);--ngd-rotate-handle-size: 2rem;--ngd-rotate-handle-distance: 2rem;--ngd-rotate-handle-background-color: var(--ngd-button-gray-bg-default);--ngd-rotate-handle-background-color-hover: var(--ngd-button-gray-bg-hover);--ngd-rotate-handle-background-color-active: var(--ngd-button-gray-bg-active);--ngd-rotate-handle-xy: calc(-.7071 * var(--ngd-rotate-handle-distance));--ngd-rotate-handle-top: var(--ngd-rotate-handle-xy);--ngd-rotate-handle-right: var(--ngd-rotate-handle-xy);--ngd-resize-line-border-width: .0625rem;--ngd-resize-line-border-style: solid;--ngd-resize-line-border-color: var(--ngd-transform-box);--ngd-resize-handle-size: .375rem;--ngd-resize-handle-background-color: var(--ngd-ui-bg-primary-default);--ngd-resize-handle-border-size: .0625rem;--ngd-resize-handle-border-style: solid;--ngd-resize-handle-border-color: var(--ngd-transform-box);--ngd-resize-handle-border-radius: 0;--ngd-port-size: .25rem;--ngd-port-background-color: var(--ngd-node-port-fill-default);--ngd-port-border-color: var(--ngd-node-port-stroke-default);--ngd-port-border-size: .125rem;--ngd-port-border-radius: 50%;--ngd-port-background-color-hover: var(--ngd-node-port-fill-active);--ngd-port-border-color-hover: var(--ngd-node-port-stroke-active);--ngd-port-border-size-hover: .25rem;--ngd-default-edge-stroke: var(--ngd-colors-gray-500);--ngd-default-edge-stroke-hover: var(--ngd-colors-gray-700);--ngd-default-edge-stroke-selected: var(--ngd-colors-acc1-500);--ngd-box-selection-border-color: #961ce7;--ngd-box-selection-border-size: 1px;--ngd-box-selection-background: rgba(43, 91, 213, .12);--ngd-default-edge-label-background-color: var(--ngd-default-edge-label-bg-primary-default);--ngd-default-edge-label-color: var(--ngd-txt-primary-default);--ngd-default-edge-label-border-color: var(--ngd-colors-gray-500);--ngd-background-dot-color: var(--ngd-colors-gray-500);--ngd-background-line-minor-width: .5;--ngd-background-line-major-width: 1;--ngd-background-line-minor-opacity: .5;--ngd-background-line-major-opacity: .6;--ngd-minimap-background: var(--ngd-minimap-bg-primary-default);--ngd-minimap-border-color: var(--ngd-minimap-stroke-primary-default);--ngd-minimap-shadow-color: var(--ngd-shadow);--ngd-minimap-border-radius: 1rem;--ngd-minimap-padding: .5rem;--ngd-minimap-margin: 1rem;--ngd-minimap-node-color: var(--ngd-colors-gray-400);--ngd-minimap-node-opacity: .8;--ngd-minimap-diagram-bounds-opacity: .3;--ngd-minimap-diagram-bounds-color: var(--ngd-colors-gray-400);--ngd-minimap-viewport-stroke-color: var(--ngd-colors-gray-400);--ngd-minimap-viewport-stroke-width: 1;--ngd-nav-button-color: var(--ngd-nav-button-primary-default);--ngd-nav-button-size: 1.25rem;--ngd-nav-button-border-radius: .5rem;--ngd-nav-button-padding: .6875rem;--ngd-nav-button-background-color-hover: var(--ngd-nav-button-primary-hover);--ngd-nav-button-color-active: var(--ngd-nav-button-primary-pressed);--ngd-nav-button-color-disabled: var(--ngd-nav-button-primary-disabled);--ngd-zoom-controls-font-size: .8125rem;--ngd-zoom-controls-font-weight: 500;--ngd-zoom-controls-color: var(--ngd-nav-button-primary-default)}.ng-diagram-port-hoverable .ng-diagram-port:hover,.ng-diagram-port-hoverable .ng-diagram-port.custom-content:hover .content-projection,.ng-diagram-port-hoverable-over-node:hover:not(:has(.ng-diagram-rotate-handle:hover)):not(:has([data-rotating])) .ng-diagram-port.custom-content .content-projection,.ng-diagram-port-hoverable-over-node:hover:not(:has(.ng-diagram-rotate-handle:hover)):not(:has([data-rotating])) .ng-diagram-port{background-color:var(--ngd-port-background-color-hover);border-color:var(--ngd-port-background-color-hover);outline:calc(1px + var(--ngd-port-border-size)) solid var(--ngd-port-background-color-hover);outline-offset:-1px;box-shadow:0 0 0 var(--ngd-port-border-size-hover) var(--ngd-port-border-color-hover)}.ng-diagram-node-wrapper:not(.ng-diagram-node-selected){transition:box-shadow .1s ease-in-out}.ng-diagram-node-wrapper.ng-diagram-group-highlight,.ng-diagram-node-wrapper.ng-diagram-group.ng-diagram-group-highlight{border-color:var(--ngd-group-border-color-highlight);box-shadow:0 0 var(--ngd-group-highlight-size) 0 var(--ngd-group-box-shadow-color-highlight) inset}.ng-diagram-node-wrapper.ng-diagram-node-selected{box-shadow:var(--ngd-selected-node-box-shadow)}ng-diagram *,ng-diagram *:before,ng-diagram *:after{box-sizing:border-box}@layer theme,base,components,utilities;@layer theme{:root,:host{--font-sans: Inter, ui-sans-serif, system-ui, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace;--color-red-300: oklch(80.8% .114 19.571);--color-red-700: oklch(50.5% .213 27.518);--color-amber-50: oklch(98.7% .022 95.277);--color-amber-100: oklch(96.2% .059 95.617);--color-amber-300: oklch(87.9% .169 91.605);--color-amber-400: oklch(82.8% .189 84.429);--color-amber-500: oklch(76.9% .188 70.08);--color-amber-600: oklch(66.6% .179 58.318);--color-amber-700: oklch(55.5% .163 48.998);--color-amber-800: oklch(47.3% .137 46.201);--color-amber-900: oklch(41.4% .112 45.904);--color-amber-950: oklch(27.9% .077 45.635);--color-emerald-50: oklch(97.9% .021 166.113);--color-emerald-100: oklch(95% .052 163.051);--color-emerald-300: oklch(84.5% .143 164.978);--color-emerald-400: oklch(76.5% .177 163.223);--color-emerald-500: oklch(69.6% .17 162.48);--color-emerald-600: oklch(59.6% .145 163.225);--color-emerald-700: oklch(50.8% .118 165.612);--color-emerald-950: oklch(26.2% .051 172.552);--color-sky-50: oklch(97.7% .013 236.62);--color-sky-100: oklch(95.1% .026 236.824);--color-sky-300: oklch(82.8% .111 230.318);--color-sky-400: oklch(74.6% .16 232.661);--color-sky-500: oklch(68.5% .169 237.323);--color-sky-700: oklch(50% .134 242.749);--color-sky-950: oklch(29.3% .066 243.157);--color-violet-400: oklch(70.2% .183 293.541);--color-rose-50: oklch(96.9% .015 12.422);--color-rose-100: oklch(94.1% .03 12.58);--color-rose-300: oklch(81% .117 11.638);--color-rose-400: oklch(71.2% .194 13.428);--color-rose-500: oklch(64.5% .246 16.439);--color-rose-600: oklch(58.6% .253 17.585);--color-rose-700: oklch(51.4% .222 16.935);--color-rose-800: oklch(45.5% .188 13.697);--color-rose-950: oklch(27.1% .105 12.094);--color-zinc-50: oklch(98.5% 0 0);--color-zinc-100: oklch(96.7% .001 286.375);--color-zinc-200: oklch(92% .004 286.32);--color-zinc-300: oklch(87.1% .006 286.286);--color-zinc-400: oklch(70.5% .015 286.067);--color-zinc-500: oklch(55.2% .016 285.938);--color-zinc-600: oklch(44.2% .017 285.786);--color-zinc-700: oklch(37% .013 285.805);--color-zinc-800: oklch(27.4% .006 286.033);--color-zinc-900: oklch(21% .006 285.885);--color-zinc-950: oklch(14.1% .005 285.823);--color-white: #fff;--spacing: .25rem;--container-md: 28rem;--text-xs: .75rem;--text-xs--line-height: calc(1 / .75);--text-sm: .875rem;--text-sm--line-height: calc(1.25 / .875);--text-base: 1rem;--text-base--line-height: 1.5 ;--text-lg: 1.125rem;--text-lg--line-height: calc(1.75 / 1.125);--font-weight-medium: 500;--font-weight-semibold: 600;--tracking-tight: -.025em;--tracking-normal: 0em;--tracking-wide: .025em;--radius-md: .375rem;--radius-lg: .5rem;--radius-xl: .75rem;--radius-2xl: 1rem;--default-transition-duration: .15s;--default-transition-timing-function: cubic-bezier(.4, 0, .2, 1);--default-font-family: var(--font-sans);--default-mono-font-family: var(--font-mono)}}@layer base{*,:after,:before,::backdrop,::file-selector-button{box-sizing:border-box;margin:0;padding:0;border:0 solid}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings, normal);font-variation-settings:var(--default-mono-font-variation-settings, normal);font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea,::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;border-radius:0;background-color:transparent;opacity:1}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px){::placeholder{color:currentcolor}@supports (color: color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]),::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.inset-x-0{inset-inline:0}.top-0{top:0}.top-1\/2{top:50%}.top-full{top:100%}.right-0{right:0}.right-3{right:calc(var(--spacing) * 3)}.right-full{right:100%}.bottom-0{bottom:0}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-full{bottom:100%}.left-0{left:0}.left-1\/2{left:50%}.left-full{left:100%}.z-0{z-index:0}.z-20{z-index:20}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[3\]{z-index:3}.container{width:100%}@media(width>=40rem){.container{max-width:40rem}}@media(width>=48rem){.container{max-width:48rem}}@media(width>=64rem){.container{max-width:64rem}}@media(width>=80rem){.container{max-width:80rem}}@media(width>=96rem){.container{max-width:96rem}}.mx-1{margin-inline:var(--spacing)}.my-1{margin-block:var(--spacing)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1{height:var(--spacing)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-12{height:calc(var(--spacing) * 12)}.h-\[2lh\]{height:2lh}.h-full{height:100%}.h-screen{height:100vh}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-72{max-height:calc(var(--spacing) * 72)}.min-h-0{min-height:0}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-\[calc\(var\(--lf-control-h\)\+1\.1rem\)\]{min-height:calc(var(--lf-control-h) + 1.1rem)}.w-1{width:var(--spacing)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-72{width:calc(var(--spacing) * 72)}.w-80{width:calc(var(--spacing) * 80)}.w-96{width:calc(var(--spacing) * 96)}.w-full{width:100%}.w-max{width:max-content}.max-w-48{max-width:calc(var(--spacing) * 48)}.max-w-\[92\%\]{max-width:92%}.max-w-\[min\(24rem\,calc\(100vw-2rem\)\)\]{max-width:min(24rem,calc(100vw - 2rem))}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.min-w-0{min-width:0}.min-w-40{min-width:calc(var(--spacing) * 40)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-\[120px\]{min-width:120px}.flex-1{flex:1}.flex-shrink,.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.cursor-col-resize{cursor:col-resize}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.resize{resize:both}.resize-none{resize:none}.list-none{list-style-type:none}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse: 0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:calc(infinity * 1px)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-tl-md{border-top-left-radius:var(--radius-md)}.rounded-tr-md{border-top-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-amber-300{border-color:var(--color-amber-300)}.border-amber-300\/80{border-color:color-mix(in srgb,oklch(87.9% .169 91.605) 80%,transparent)}@supports (color: color-mix(in lab,red,red)){.border-amber-300\/80{border-color:color-mix(in oklab,var(--color-amber-300) 80%,transparent)}}.border-amber-400{border-color:var(--color-amber-400)}.border-emerald-400{border-color:var(--color-emerald-400)}.border-rose-300{border-color:var(--color-rose-300)}.border-rose-400{border-color:var(--color-rose-400)}.border-sky-400{border-color:var(--color-sky-400)}.border-zinc-200{border-color:var(--color-zinc-200)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-zinc-400{border-color:var(--color-zinc-400)}.border-zinc-900{border-color:var(--color-zinc-900)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-transparent{background-color:transparent}.bg-white{background-color:var(--color-white)}.bg-zinc-50{background-color:var(--color-zinc-50)}.bg-zinc-50\/90{background-color:color-mix(in srgb,oklch(98.5% 0 0) 90%,transparent)}@supports (color: color-mix(in lab,red,red)){.bg-zinc-50\/90{background-color:color-mix(in oklab,var(--color-zinc-50) 90%,transparent)}}.bg-zinc-100{background-color:var(--color-zinc-100)}.bg-zinc-200{background-color:var(--color-zinc-200)}.bg-zinc-400{background-color:var(--color-zinc-400)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-gradient-to-b{--tw-gradient-position: to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position: to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-white{--tw-gradient-from: var(--color-white);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-40\%{--tw-gradient-from-position: 40%}.from-45\%{--tw-gradient-from-position: 45%}.to-transparent{--tw-gradient-to: transparent;--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.pt-1{padding-top:var(--spacing)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-11{padding-top:calc(var(--spacing) * 11)}.pr-1{padding-right:var(--spacing)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-14{padding-bottom:calc(var(--spacing) * 14)}.pl-4{padding-left:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading, var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading, var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading, var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-4{--tw-leading: calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading: calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading: calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.font-medium{--tw-font-weight: var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight: var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking: var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking: var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking: var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-amber-950{color:var(--color-amber-950)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-red-700{color:var(--color-red-700)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-sky-700{color:var(--color-sky-700)}.text-white{color:var(--color-white)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.text-zinc-800{color:var(--color-zinc-800)}.text-zinc-900{color:var(--color-zinc-900)}.text-zinc-950{color:var(--color-zinc-950)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.opacity-50{opacity:50%}.opacity-60{opacity:60%}.opacity-70{opacity:70%}.shadow-lg{--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / .1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / .1));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-violet-400{--tw-ring-color: var(--color-violet-400)}.ring-zinc-400\/20{--tw-ring-color: color-mix(in srgb, oklch(70.5% .015 286.067) 20%, transparent)}@supports (color: color-mix(in lab,red,red)){.ring-zinc-400\/20{--tw-ring-color: color-mix(in oklab, var(--color-zinc-400) 20%, transparent)}}.blur{--tw-blur: blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function));transition-duration:var(--tw-duration, var(--default-transition-duration))}.outline-none{--tw-outline-style: none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\:block:is(:where(.group):focus-within *){display:block}@media(hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}}.placeholder\:text-zinc-400::placeholder{color:var(--color-zinc-400)}@media(hover:hover){.hover\:border-zinc-400:hover{border-color:var(--color-zinc-400)}}@media(hover:hover){.hover\:bg-amber-100:hover{background-color:var(--color-amber-100)}}@media(hover:hover){.hover\:bg-emerald-100:hover{background-color:var(--color-emerald-100)}}@media(hover:hover){.hover\:bg-rose-50:hover{background-color:var(--color-rose-50)}}@media(hover:hover){.hover\:bg-rose-100:hover{background-color:var(--color-rose-100)}}@media(hover:hover){.hover\:bg-sky-100:hover{background-color:var(--color-sky-100)}}@media(hover:hover){.hover\:bg-zinc-50:hover{background-color:var(--color-zinc-50)}}@media(hover:hover){.hover\:bg-zinc-100:hover{background-color:var(--color-zinc-100)}}@media(hover:hover){.hover\:bg-zinc-400:hover{background-color:var(--color-zinc-400)}}@media(hover:hover){.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}}@media(hover:hover){.hover\:text-zinc-700:hover{color:var(--color-zinc-700)}}@media(hover:hover){.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-zinc-400:focus{border-color:var(--color-zinc-400)}.focus\:ring-2:focus{--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:outline-none:focus{--tw-outline-style: none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:opacity-50:disabled{opacity:50%}.dark\:border-amber-500:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-amber-500)}.dark\:border-amber-700:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-amber-700)}.dark\:border-amber-700\/60:where([data-theme=dark],[data-theme=dark] *){border-color:color-mix(in srgb,oklch(55.5% .163 48.998) 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:border-amber-700\/60:where([data-theme=dark],[data-theme=dark] *){border-color:color-mix(in oklab,var(--color-amber-700) 60%,transparent)}}.dark\:border-amber-800:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-amber-800)}.dark\:border-emerald-500:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-emerald-500)}.dark\:border-rose-500:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-rose-500)}.dark\:border-rose-700:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-rose-700)}.dark\:border-rose-800:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-rose-800)}.dark\:border-sky-500:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-sky-500)}.dark\:border-zinc-100:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-zinc-100)}.dark\:border-zinc-500:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-zinc-500)}.dark\:border-zinc-600:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-zinc-600)}.dark\:border-zinc-700:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-zinc-700)}.dark\:border-zinc-800:where([data-theme=dark],[data-theme=dark] *){border-color:var(--color-zinc-800)}.dark\:bg-amber-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in srgb,oklch(27.9% .077 45.635) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-amber-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-amber-950) 40%,transparent)}}.dark\:bg-emerald-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in srgb,oklch(26.2% .051 172.552) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-emerald-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-emerald-950) 40%,transparent)}}.dark\:bg-rose-950\/30:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in srgb,oklch(27.1% .105 12.094) 30%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-rose-950\/30:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-rose-950) 30%,transparent)}}.dark\:bg-rose-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in srgb,oklch(27.1% .105 12.094) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-rose-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-rose-950) 40%,transparent)}}.dark\:bg-sky-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in srgb,oklch(29.3% .066 243.157) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-sky-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-sky-950) 40%,transparent)}}.dark\:bg-zinc-100:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-zinc-100)}.dark\:bg-zinc-800:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-900:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-950:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-zinc-950)}.dark\:bg-zinc-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in srgb,oklch(14.1% .005 285.823) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-zinc-950\/40:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-zinc-950) 40%,transparent)}}.dark\:bg-zinc-950\/60:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in srgb,oklch(14.1% .005 285.823) 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-zinc-950\/60:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-zinc-950) 60%,transparent)}}.dark\:bg-zinc-950\/90:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in srgb,oklch(14.1% .005 285.823) 90%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:bg-zinc-950\/90:where([data-theme=dark],[data-theme=dark] *){background-color:color-mix(in oklab,var(--color-zinc-950) 90%,transparent)}}.dark\:from-zinc-900:where([data-theme=dark],[data-theme=dark] *){--tw-gradient-from: var(--color-zinc-900);--tw-gradient-stops: var(--tw-gradient-via-stops, var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.dark\:text-amber-100:where([data-theme=dark],[data-theme=dark] *){color:var(--color-amber-100)}.dark\:text-amber-300:where([data-theme=dark],[data-theme=dark] *){color:var(--color-amber-300)}.dark\:text-amber-400:where([data-theme=dark],[data-theme=dark] *){color:var(--color-amber-400)}.dark\:text-emerald-300:where([data-theme=dark],[data-theme=dark] *){color:var(--color-emerald-300)}.dark\:text-emerald-400:where([data-theme=dark],[data-theme=dark] *){color:var(--color-emerald-400)}.dark\:text-red-300:where([data-theme=dark],[data-theme=dark] *){color:var(--color-red-300)}.dark\:text-rose-300:where([data-theme=dark],[data-theme=dark] *){color:var(--color-rose-300)}.dark\:text-rose-400:where([data-theme=dark],[data-theme=dark] *){color:var(--color-rose-400)}.dark\:text-sky-300:where([data-theme=dark],[data-theme=dark] *){color:var(--color-sky-300)}.dark\:text-zinc-100:where([data-theme=dark],[data-theme=dark] *){color:var(--color-zinc-100)}.dark\:text-zinc-200:where([data-theme=dark],[data-theme=dark] *){color:var(--color-zinc-200)}.dark\:text-zinc-300:where([data-theme=dark],[data-theme=dark] *){color:var(--color-zinc-300)}.dark\:text-zinc-400:where([data-theme=dark],[data-theme=dark] *){color:var(--color-zinc-400)}.dark\:text-zinc-500:where([data-theme=dark],[data-theme=dark] *){color:var(--color-zinc-500)}.dark\:text-zinc-900:where([data-theme=dark],[data-theme=dark] *){color:var(--color-zinc-900)}.dark\:placeholder\:text-zinc-500:where([data-theme=dark],[data-theme=dark] *)::placeholder{color:var(--color-zinc-500)}@media(hover:hover){.dark\:hover\:border-zinc-500:where([data-theme=dark],[data-theme=dark] *):hover{border-color:var(--color-zinc-500)}}@media(hover:hover){.dark\:hover\:bg-amber-900\/50:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in srgb,oklch(41.4% .112 45.904) 50%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-amber-900\/50:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab,var(--color-amber-900) 50%,transparent)}}}@media(hover:hover){.dark\:hover\:bg-amber-950\/60:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in srgb,oklch(27.9% .077 45.635) 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-amber-950\/60:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab,var(--color-amber-950) 60%,transparent)}}}@media(hover:hover){.dark\:hover\:bg-emerald-950\/60:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in srgb,oklch(26.2% .051 172.552) 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-emerald-950\/60:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab,var(--color-emerald-950) 60%,transparent)}}}@media(hover:hover){.dark\:hover\:bg-rose-950\/30:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in srgb,oklch(27.1% .105 12.094) 30%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-rose-950\/30:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab,var(--color-rose-950) 30%,transparent)}}}@media(hover:hover){.dark\:hover\:bg-rose-950\/40:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in srgb,oklch(27.1% .105 12.094) 40%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-rose-950\/40:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab,var(--color-rose-950) 40%,transparent)}}}@media(hover:hover){.dark\:hover\:bg-rose-950\/60:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in srgb,oklch(27.1% .105 12.094) 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-rose-950\/60:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab,var(--color-rose-950) 60%,transparent)}}}@media(hover:hover){.dark\:hover\:bg-sky-950\/60:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in srgb,oklch(29.3% .066 243.157) 60%,transparent)}@supports (color: color-mix(in lab,red,red)){.dark\:hover\:bg-sky-950\/60:where([data-theme=dark],[data-theme=dark] *):hover{background-color:color-mix(in oklab,var(--color-sky-950) 60%,transparent)}}}@media(hover:hover){.dark\:hover\:bg-white:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--color-white)}}@media(hover:hover){.dark\:hover\:bg-zinc-200:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--color-zinc-200)}}@media(hover:hover){.dark\:hover\:bg-zinc-500:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--color-zinc-500)}}@media(hover:hover){.dark\:hover\:bg-zinc-700:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--color-zinc-700)}}@media(hover:hover){.dark\:hover\:bg-zinc-800:where([data-theme=dark],[data-theme=dark] *):hover{background-color:var(--color-zinc-800)}}@media(hover:hover){.dark\:hover\:text-zinc-200:where([data-theme=dark],[data-theme=dark] *):hover{color:var(--color-zinc-200)}}.dark\:focus\:border-zinc-500:where([data-theme=dark],[data-theme=dark] *):focus{border-color:var(--color-zinc-500)}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}}:root{--lf-control-h: 2rem;--lf-btn-pad: calc(var(--lf-control-h) / 2)}@layer components{.lf-composer-pill{display:inline-flex;align-items:center;justify-content:center;height:var(--lf-control-h);padding:0 var(--lf-btn-pad);border-radius:9999px;font-size:.75rem;line-height:1;font-weight:500;transition-property:color,background-color,border-color,opacity;transition-duration:.15s}.lf-composer-icon-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--lf-control-h);height:var(--lf-control-h);padding:0;border-radius:9999px;transition-property:color,background-color,border-color,opacity;transition-duration:.15s}}html,body{height:100%;margin:0}body{background-color:var(--color-zinc-50);font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--tw-leading, var(--text-sm--line-height));color:var(--color-zinc-950);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body:where([data-theme=dark],[data-theme=dark] *){background-color:var(--color-zinc-950)}body:where([data-theme=dark],[data-theme=dark] *){color:var(--color-zinc-100)}button,textarea{font:inherit}@layer base{button:not(:disabled):not([aria-disabled=true]){cursor:pointer}button:disabled,button[aria-disabled=true]{cursor:not-allowed}}.lf-feed-row--hovered{border-radius:.5rem;background-color:#8b5cf61a}html[data-theme=dark] .lf-feed-row--hovered{background-color:#a78bfa1f}lf-edge:hover:not(.lf-edge--selected){--edge-stroke: rgb(74 108 182)}html[data-theme=dark] lf-edge:hover:not(.lf-edge--selected){--edge-stroke: rgb(120 160 220)}lf-edge.lf-edge--pulse ng-diagram-base-edge path{animation:lf-edge-pulse .3s ease-out}@keyframes lf-edge-pulse{0%{stroke:#10b981;stroke-width:3;filter:drop-shadow(0 0 6px rgba(16,185,129,.9))}to{stroke:#a1a1aa;stroke-width:2;filter:none}}.lf-port-anchor.lf-port-anchor--pulse{--ngd-port-border-color: rgb(16 185 129);--ngd-port-background-color: rgb(167 243 208);--ngd-port-size: .45rem;animation:lf-port-pulse .45s ease-in-out infinite}html[data-theme=dark] .lf-port-anchor.lf-port-anchor--pulse{--ngd-port-border-color: rgb(52 211 153);--ngd-port-background-color: rgb(6 78 59);animation-name:lf-port-pulse-dark}@keyframes lf-port-pulse{0%,to{box-shadow:0 0 #10b98100}50%{box-shadow:0 0 0 4px #10b981b3}}@keyframes lf-port-pulse-dark{0%,to{box-shadow:0 0 #34d39900}50%{box-shadow:0 0 0 4px #34d399b3}}lf-edge.lf-edge--pending ng-diagram-base-edge path{stroke:#ca8a04;stroke-width:3}lf-edge.lf-edge--error ng-diagram-base-edge path{stroke:#f43f5e;stroke-width:3}lf-edge.lf-edge--value ng-diagram-base-edge path{stroke:#10b981;stroke-width:3}html[data-theme=dark] lf-edge.lf-edge--value ng-diagram-base-edge path{stroke:#34d399}html[data-theme=dark] lf-edge.lf-edge--pending ng-diagram-base-edge path{stroke:#facc15}html[data-theme=dark] lf-edge.lf-edge--error ng-diagram-base-edge path{stroke:#fb7185}.lf-scroll{scrollbar-width:thin;scrollbar-color:rgb(212,212,216) transparent}.lf-scroll::-webkit-scrollbar{width:8px;height:8px}.lf-scroll::-webkit-scrollbar-button{display:none;width:0;height:0}.lf-scroll::-webkit-scrollbar-track{background:transparent}.lf-scroll::-webkit-scrollbar-thumb{background-color:#d4d4d8;border-radius:9999px;border:2px solid transparent;background-clip:content-box}.lf-scroll::-webkit-scrollbar-thumb:hover{background-color:#a1a1aa}.lf-scroll::-webkit-scrollbar-corner{background:transparent}html[data-theme=dark] .lf-scroll{scrollbar-color:rgb(63,63,70) transparent}html[data-theme=dark] .lf-scroll::-webkit-scrollbar-thumb{background-color:#3f3f46}html[data-theme=dark] .lf-scroll::-webkit-scrollbar-thumb:hover{background-color:#52525b}@property --tw-translate-x{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-translate-y{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-translate-z{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-rotate-x{syntax: "*"; inherits: false;}@property --tw-rotate-y{syntax: "*"; inherits: false;}@property --tw-rotate-z{syntax: "*"; inherits: false;}@property --tw-skew-x{syntax: "*"; inherits: false;}@property --tw-skew-y{syntax: "*"; inherits: false;}@property --tw-space-y-reverse{syntax: "*"; inherits: false; initial-value: 0;}@property --tw-border-style{syntax: "*"; inherits: false; initial-value: solid;}@property --tw-gradient-position{syntax: "*"; inherits: false;}@property --tw-gradient-from{syntax: "<color>"; inherits: false; initial-value: #0000;}@property --tw-gradient-via{syntax: "<color>"; inherits: false; initial-value: #0000;}@property --tw-gradient-to{syntax: "<color>"; inherits: false; initial-value: #0000;}@property --tw-gradient-stops{syntax: "*"; inherits: false;}@property --tw-gradient-via-stops{syntax: "*"; inherits: false;}@property --tw-gradient-from-position{syntax: "<length-percentage>"; inherits: false; initial-value: 0%;}@property --tw-gradient-via-position{syntax: "<length-percentage>"; inherits: false; initial-value: 50%;}@property --tw-gradient-to-position{syntax: "<length-percentage>"; inherits: false; initial-value: 100%;}@property --tw-leading{syntax: "*"; inherits: false;}@property --tw-font-weight{syntax: "*"; inherits: false;}@property --tw-tracking{syntax: "*"; inherits: false;}@property --tw-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-shadow-color{syntax: "*"; inherits: false;}@property --tw-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-inset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-shadow-color{syntax: "*"; inherits: false;}@property --tw-inset-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-ring-color{syntax: "*"; inherits: false;}@property --tw-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-inset-ring-color{syntax: "*"; inherits: false;}@property --tw-inset-ring-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-ring-inset{syntax: "*"; inherits: false;}@property --tw-ring-offset-width{syntax: "<length>"; inherits: false; initial-value: 0px;}@property --tw-ring-offset-color{syntax: "*"; inherits: false; initial-value: #fff;}@property --tw-ring-offset-shadow{syntax: "*"; inherits: false; initial-value: 0 0 #0000;}@property --tw-blur{syntax: "*"; inherits: false;}@property --tw-brightness{syntax: "*"; inherits: false;}@property --tw-contrast{syntax: "*"; inherits: false;}@property --tw-grayscale{syntax: "*"; inherits: false;}@property --tw-hue-rotate{syntax: "*"; inherits: false;}@property --tw-invert{syntax: "*"; inherits: false;}@property --tw-opacity{syntax: "*"; inherits: false;}@property --tw-saturate{syntax: "*"; inherits: false;}@property --tw-sepia{syntax: "*"; inherits: false;}@property --tw-drop-shadow{syntax: "*"; inherits: false;}@property --tw-drop-shadow-color{syntax: "*"; inherits: false;}@property --tw-drop-shadow-alpha{syntax: "<percentage>"; inherits: false; initial-value: 100%;}@property --tw-drop-shadow-size{syntax: "*"; inherits: false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x: 0;--tw-translate-y: 0;--tw-translate-z: 0;--tw-rotate-x: initial;--tw-rotate-y: initial;--tw-rotate-z: initial;--tw-skew-x: initial;--tw-skew-y: initial;--tw-space-y-reverse: 0;--tw-border-style: solid;--tw-gradient-position: initial;--tw-gradient-from: #0000;--tw-gradient-via: #0000;--tw-gradient-to: #0000;--tw-gradient-stops: initial;--tw-gradient-via-stops: initial;--tw-gradient-from-position: 0%;--tw-gradient-via-position: 50%;--tw-gradient-to-position: 100%;--tw-leading: initial;--tw-font-weight: initial;--tw-tracking: initial;--tw-shadow: 0 0 #0000;--tw-shadow-color: initial;--tw-shadow-alpha: 100%;--tw-inset-shadow: 0 0 #0000;--tw-inset-shadow-color: initial;--tw-inset-shadow-alpha: 100%;--tw-ring-color: initial;--tw-ring-shadow: 0 0 #0000;--tw-inset-ring-color: initial;--tw-inset-ring-shadow: 0 0 #0000;--tw-ring-inset: initial;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-offset-shadow: 0 0 #0000;--tw-blur: initial;--tw-brightness: initial;--tw-contrast: initial;--tw-grayscale: initial;--tw-hue-rotate: initial;--tw-invert: initial;--tw-opacity: initial;--tw-saturate: initial;--tw-sepia: initial;--tw-drop-shadow: initial;--tw-drop-shadow-color: initial;--tw-drop-shadow-alpha: 100%;--tw-drop-shadow-size: initial}}}
|
|
@@ -1,37 +1,73 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* (`accept` / `feedback`
|
|
4
|
-
*
|
|
5
|
-
* inventory / other LLM nodes. Tool payloads demux to `response` / `feedback`
|
|
6
|
-
* ports; free-form replies get a reminder. Optional inventory / MCP /
|
|
7
|
-
* Sub-Agents use shared LLM inventory ports.
|
|
2
|
+
* Adversarial Critique: path choice via the same Review-private control tools
|
|
3
|
+
* (`accept` / `feedback`). First input is the original assignment; second is
|
|
4
|
+
* the packet under attack. Optional inventory / MCP / Sub-Agents may run first.
|
|
8
5
|
*
|
|
9
6
|
* Session history uses the shared {@link createLlmSessionCycle$} (ADR-016):
|
|
10
7
|
* init = assignment / system / inventory; turn driver = `packet`.
|
|
11
|
-
* @see docs/use-cases/adversarial-red-team.md
|
|
12
|
-
* @see docs/DONE/EPICS/MECHANICS-tool-execution.md
|
|
13
8
|
*/
|
|
14
9
|
export declare const critiqueNode: {
|
|
15
10
|
readonly emitOncePerActivation: boolean;
|
|
16
11
|
readonly stopsRun: boolean;
|
|
17
12
|
readonly chatEntry: boolean;
|
|
18
|
-
readonly uiSchema: readonly [{
|
|
13
|
+
readonly uiSchema: readonly [...({
|
|
19
14
|
readonly field: "providerId";
|
|
20
15
|
readonly type: "select";
|
|
21
16
|
readonly label: "Provider";
|
|
22
17
|
readonly optionsSource: "langflower.providers";
|
|
23
|
-
}
|
|
18
|
+
} | {
|
|
24
19
|
readonly field: "model";
|
|
25
20
|
readonly type: "select";
|
|
26
21
|
readonly label: "Model";
|
|
27
22
|
readonly optionsSource: "langflower.models";
|
|
28
23
|
readonly dependsOn: "providerId";
|
|
29
|
-
}
|
|
24
|
+
} | {
|
|
30
25
|
readonly field: "skillId";
|
|
31
26
|
readonly type: "select";
|
|
32
27
|
readonly label: "Skill";
|
|
33
28
|
readonly optionsSource: "langflower.skills";
|
|
34
|
-
}
|
|
29
|
+
} | {
|
|
30
|
+
readonly field: "rolePreset";
|
|
31
|
+
readonly type: "select";
|
|
32
|
+
readonly label: "Role preset";
|
|
33
|
+
readonly default: "custom";
|
|
34
|
+
readonly options: readonly [{
|
|
35
|
+
readonly value: "custom";
|
|
36
|
+
readonly title: "Custom";
|
|
37
|
+
}, {
|
|
38
|
+
readonly value: "plan";
|
|
39
|
+
readonly title: "Plan";
|
|
40
|
+
}, {
|
|
41
|
+
readonly value: "coder";
|
|
42
|
+
readonly title: "Coder";
|
|
43
|
+
}, {
|
|
44
|
+
readonly value: "explorer";
|
|
45
|
+
readonly title: "Explorer";
|
|
46
|
+
}];
|
|
47
|
+
} | {
|
|
48
|
+
readonly field: "includeAgentsMd";
|
|
49
|
+
readonly type: "boolean";
|
|
50
|
+
readonly label: "Include root AGENTS.md";
|
|
51
|
+
readonly default: false;
|
|
52
|
+
} | {
|
|
53
|
+
readonly field: "toolPermissions";
|
|
54
|
+
readonly type: "tool-permission-table";
|
|
55
|
+
readonly label: "Tool permissions";
|
|
56
|
+
readonly optionsSource: "node.wiredTools";
|
|
57
|
+
} | {
|
|
58
|
+
readonly field: "enabledMcpIds";
|
|
59
|
+
readonly type: "tool-id-list";
|
|
60
|
+
readonly label: "Enabled MCP";
|
|
61
|
+
readonly optionsSource: "langflower.mcpServers";
|
|
62
|
+
} | {
|
|
63
|
+
readonly field: "maxFeedbackTurns";
|
|
64
|
+
readonly type: "number";
|
|
65
|
+
readonly label: "Max feedback turns (0 = unlimited)";
|
|
66
|
+
readonly default: 50;
|
|
67
|
+
readonly min: 0;
|
|
68
|
+
readonly max: number;
|
|
69
|
+
readonly step: 1;
|
|
70
|
+
})[], {
|
|
35
71
|
readonly field: "maxIterations";
|
|
36
72
|
readonly type: "number";
|
|
37
73
|
readonly label: "Tool-loop max iterations per feedback turn (0 = unlimited)";
|
|
@@ -43,7 +79,7 @@ export declare const critiqueNode: {
|
|
|
43
79
|
readonly field: "contextSize";
|
|
44
80
|
readonly type: "number";
|
|
45
81
|
readonly label: "Context size (approx tokens)";
|
|
46
|
-
readonly default:
|
|
82
|
+
readonly default: 200000;
|
|
47
83
|
readonly min: 0;
|
|
48
84
|
readonly step: 1;
|
|
49
85
|
}, {
|
|
@@ -82,23 +118,64 @@ export declare const critiqueNode: {
|
|
|
82
118
|
readonly step: 1;
|
|
83
119
|
}];
|
|
84
120
|
readonly bypassPorts: Record<string, import("@langflower/node-sdk").WireType>;
|
|
85
|
-
readonly inputsConfigs: readonly [import("@langflower/node-sdk").InputPortMeta<import("@langflower/node-sdk").ExecutionContext<readonly [{
|
|
121
|
+
readonly inputsConfigs: readonly [import("@langflower/node-sdk").InputPortMeta<import("@langflower/node-sdk").ExecutionContext<readonly [...({
|
|
86
122
|
readonly field: "providerId";
|
|
87
123
|
readonly type: "select";
|
|
88
124
|
readonly label: "Provider";
|
|
89
125
|
readonly optionsSource: "langflower.providers";
|
|
90
|
-
}
|
|
126
|
+
} | {
|
|
91
127
|
readonly field: "model";
|
|
92
128
|
readonly type: "select";
|
|
93
129
|
readonly label: "Model";
|
|
94
130
|
readonly optionsSource: "langflower.models";
|
|
95
131
|
readonly dependsOn: "providerId";
|
|
96
|
-
}
|
|
132
|
+
} | {
|
|
97
133
|
readonly field: "skillId";
|
|
98
134
|
readonly type: "select";
|
|
99
135
|
readonly label: "Skill";
|
|
100
136
|
readonly optionsSource: "langflower.skills";
|
|
101
|
-
}
|
|
137
|
+
} | {
|
|
138
|
+
readonly field: "rolePreset";
|
|
139
|
+
readonly type: "select";
|
|
140
|
+
readonly label: "Role preset";
|
|
141
|
+
readonly default: "custom";
|
|
142
|
+
readonly options: readonly [{
|
|
143
|
+
readonly value: "custom";
|
|
144
|
+
readonly title: "Custom";
|
|
145
|
+
}, {
|
|
146
|
+
readonly value: "plan";
|
|
147
|
+
readonly title: "Plan";
|
|
148
|
+
}, {
|
|
149
|
+
readonly value: "coder";
|
|
150
|
+
readonly title: "Coder";
|
|
151
|
+
}, {
|
|
152
|
+
readonly value: "explorer";
|
|
153
|
+
readonly title: "Explorer";
|
|
154
|
+
}];
|
|
155
|
+
} | {
|
|
156
|
+
readonly field: "includeAgentsMd";
|
|
157
|
+
readonly type: "boolean";
|
|
158
|
+
readonly label: "Include root AGENTS.md";
|
|
159
|
+
readonly default: false;
|
|
160
|
+
} | {
|
|
161
|
+
readonly field: "toolPermissions";
|
|
162
|
+
readonly type: "tool-permission-table";
|
|
163
|
+
readonly label: "Tool permissions";
|
|
164
|
+
readonly optionsSource: "node.wiredTools";
|
|
165
|
+
} | {
|
|
166
|
+
readonly field: "enabledMcpIds";
|
|
167
|
+
readonly type: "tool-id-list";
|
|
168
|
+
readonly label: "Enabled MCP";
|
|
169
|
+
readonly optionsSource: "langflower.mcpServers";
|
|
170
|
+
} | {
|
|
171
|
+
readonly field: "maxFeedbackTurns";
|
|
172
|
+
readonly type: "number";
|
|
173
|
+
readonly label: "Max feedback turns (0 = unlimited)";
|
|
174
|
+
readonly default: 50;
|
|
175
|
+
readonly min: 0;
|
|
176
|
+
readonly max: number;
|
|
177
|
+
readonly step: 1;
|
|
178
|
+
})[], {
|
|
102
179
|
readonly field: "maxIterations";
|
|
103
180
|
readonly type: "number";
|
|
104
181
|
readonly label: "Tool-loop max iterations per feedback turn (0 = unlimited)";
|
|
@@ -110,7 +187,7 @@ export declare const critiqueNode: {
|
|
|
110
187
|
readonly field: "contextSize";
|
|
111
188
|
readonly type: "number";
|
|
112
189
|
readonly label: "Context size (approx tokens)";
|
|
113
|
-
readonly default:
|
|
190
|
+
readonly default: 200000;
|
|
114
191
|
readonly min: 0;
|
|
115
192
|
readonly step: 1;
|
|
116
193
|
}, {
|
|
@@ -149,23 +226,64 @@ export declare const critiqueNode: {
|
|
|
149
226
|
readonly step: 1;
|
|
150
227
|
}], import("@langflower/node-sdk/llm").LlmExecutionCaps>>, ...import("@langflower/node-sdk").InputPortMeta<unknown>[]];
|
|
151
228
|
readonly outputsConfigs: (import("@langflower/node-sdk").OutputParams & import("@langflower/node-sdk").PortMeta)[];
|
|
152
|
-
readonly getInstance: () => import("@langflower/node-sdk").ReactiveNodeInstance<readonly [{
|
|
229
|
+
readonly getInstance: () => import("@langflower/node-sdk").ReactiveNodeInstance<readonly [...({
|
|
153
230
|
readonly field: "providerId";
|
|
154
231
|
readonly type: "select";
|
|
155
232
|
readonly label: "Provider";
|
|
156
233
|
readonly optionsSource: "langflower.providers";
|
|
157
|
-
}
|
|
234
|
+
} | {
|
|
158
235
|
readonly field: "model";
|
|
159
236
|
readonly type: "select";
|
|
160
237
|
readonly label: "Model";
|
|
161
238
|
readonly optionsSource: "langflower.models";
|
|
162
239
|
readonly dependsOn: "providerId";
|
|
163
|
-
}
|
|
240
|
+
} | {
|
|
164
241
|
readonly field: "skillId";
|
|
165
242
|
readonly type: "select";
|
|
166
243
|
readonly label: "Skill";
|
|
167
244
|
readonly optionsSource: "langflower.skills";
|
|
168
|
-
}
|
|
245
|
+
} | {
|
|
246
|
+
readonly field: "rolePreset";
|
|
247
|
+
readonly type: "select";
|
|
248
|
+
readonly label: "Role preset";
|
|
249
|
+
readonly default: "custom";
|
|
250
|
+
readonly options: readonly [{
|
|
251
|
+
readonly value: "custom";
|
|
252
|
+
readonly title: "Custom";
|
|
253
|
+
}, {
|
|
254
|
+
readonly value: "plan";
|
|
255
|
+
readonly title: "Plan";
|
|
256
|
+
}, {
|
|
257
|
+
readonly value: "coder";
|
|
258
|
+
readonly title: "Coder";
|
|
259
|
+
}, {
|
|
260
|
+
readonly value: "explorer";
|
|
261
|
+
readonly title: "Explorer";
|
|
262
|
+
}];
|
|
263
|
+
} | {
|
|
264
|
+
readonly field: "includeAgentsMd";
|
|
265
|
+
readonly type: "boolean";
|
|
266
|
+
readonly label: "Include root AGENTS.md";
|
|
267
|
+
readonly default: false;
|
|
268
|
+
} | {
|
|
269
|
+
readonly field: "toolPermissions";
|
|
270
|
+
readonly type: "tool-permission-table";
|
|
271
|
+
readonly label: "Tool permissions";
|
|
272
|
+
readonly optionsSource: "node.wiredTools";
|
|
273
|
+
} | {
|
|
274
|
+
readonly field: "enabledMcpIds";
|
|
275
|
+
readonly type: "tool-id-list";
|
|
276
|
+
readonly label: "Enabled MCP";
|
|
277
|
+
readonly optionsSource: "langflower.mcpServers";
|
|
278
|
+
} | {
|
|
279
|
+
readonly field: "maxFeedbackTurns";
|
|
280
|
+
readonly type: "number";
|
|
281
|
+
readonly label: "Max feedback turns (0 = unlimited)";
|
|
282
|
+
readonly default: 50;
|
|
283
|
+
readonly min: 0;
|
|
284
|
+
readonly max: number;
|
|
285
|
+
readonly step: 1;
|
|
286
|
+
})[], {
|
|
169
287
|
readonly field: "maxIterations";
|
|
170
288
|
readonly type: "number";
|
|
171
289
|
readonly label: "Tool-loop max iterations per feedback turn (0 = unlimited)";
|
|
@@ -177,7 +295,7 @@ export declare const critiqueNode: {
|
|
|
177
295
|
readonly field: "contextSize";
|
|
178
296
|
readonly type: "number";
|
|
179
297
|
readonly label: "Context size (approx tokens)";
|
|
180
|
-
readonly default:
|
|
298
|
+
readonly default: 200000;
|
|
181
299
|
readonly min: 0;
|
|
182
300
|
readonly step: 1;
|
|
183
301
|
}, {
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { filter, map, Observable } from 'rxjs';
|
|
2
2
|
import { defineLlmNode, isSteerControlPayload, } from '@langflower/node-sdk/llm';
|
|
3
3
|
import { collectAgentToolHandles } from '../../tools/collect-agent-tool-handles.js';
|
|
4
|
-
import {
|
|
4
|
+
import { buildEffectiveSystemPrompt } from '../build-effective-system-prompt.js';
|
|
5
|
+
import { resolveChatProviderModel } from '../resolve-chat-provider-model.js';
|
|
6
|
+
import { createLlmSessionCycle$, demuxByKind, normalizeMaxFeedbackTurns, } from '../llm-session-shell.js';
|
|
5
7
|
import { llmCompactionUiSchema } from '../llm-compaction-ui-schema.js';
|
|
6
8
|
import { llmRecoveryUiSchema } from '../llm-recovery-ui-schema.js';
|
|
7
|
-
import { llmMaxIterationsUiField,
|
|
9
|
+
import { llmMaxIterationsUiField, llmPanelUiSchema, } from '../llm-panel-ui-schema.js';
|
|
10
|
+
import { parseLlmRolePreset, resolveEffectiveSkillId, } from '../llm-role-preset.js';
|
|
8
11
|
import { DEFAULT_PATH_CHOICE_MAX_ITERATIONS, PATH_CHOICE_MAX_ITERATIONS_CAP, normalizeMaxIterations, } from '../normalize-max-iterations.js';
|
|
9
12
|
import { normalizeLlmRecoveryPolicy } from '../llm-loop/normalize-llm-recovery-policy.js';
|
|
10
13
|
import { normalizeCompactionConfig } from '../openai/normalize-compaction-params.js';
|
|
@@ -23,12 +26,6 @@ const FORCED_TOOL_SYSTEM = [
|
|
|
23
26
|
`Call ${REVIEW_FEEDBACK_TOOL} with concrete findings when the packet is not yet defensible.`,
|
|
24
27
|
`Call ${REVIEW_ACCEPT_TOOL} only when further attack is non-blocking — agreed enough to stop critiquing.`,
|
|
25
28
|
].join(' ');
|
|
26
|
-
const critiquePanelUiSchema = [
|
|
27
|
-
...llmProviderModelSkillUiSchema,
|
|
28
|
-
llmMaxIterationsUiField(DEFAULT_PATH_CHOICE_MAX_ITERATIONS, PATH_CHOICE_MAX_ITERATIONS_CAP),
|
|
29
|
-
...llmCompactionUiSchema,
|
|
30
|
-
...llmRecoveryUiSchema,
|
|
31
|
-
];
|
|
32
29
|
const requireChatConfig = (providerId, model) => {
|
|
33
30
|
if (providerId.trim().length === 0) {
|
|
34
31
|
throw new Error('Provider is required for Critique chat');
|
|
@@ -37,15 +34,11 @@ const requireChatConfig = (providerId, model) => {
|
|
|
37
34
|
throw new Error('Model is required for Critique chat');
|
|
38
35
|
}
|
|
39
36
|
};
|
|
40
|
-
const buildEffectiveCritiqueSystem = (
|
|
37
|
+
const buildEffectiveCritiqueSystem = (input) => {
|
|
38
|
+
const merged = buildEffectiveSystemPrompt(input);
|
|
41
39
|
const parts = [FORCED_TOOL_SYSTEM];
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
parts.push(author);
|
|
45
|
-
}
|
|
46
|
-
const skill = skillMarkdown.trim();
|
|
47
|
-
if (skill.length > 0) {
|
|
48
|
-
parts.push(skill);
|
|
40
|
+
if (merged.trim().length > 0) {
|
|
41
|
+
parts.push(merged);
|
|
49
42
|
}
|
|
50
43
|
return parts.join('\n\n---\n\n');
|
|
51
44
|
};
|
|
@@ -65,7 +58,7 @@ const runCritiqueTurn = (context, packet, history, subagentResult$) => {
|
|
|
65
58
|
const factory = context.factory;
|
|
66
59
|
if (factory === undefined) {
|
|
67
60
|
return new Observable((subscriber) => {
|
|
68
|
-
subscriber.error(new Error('
|
|
61
|
+
subscriber.error(new Error('Critique chat is only available during server workflow runs'));
|
|
69
62
|
});
|
|
70
63
|
}
|
|
71
64
|
requireChatConfig(context.providerId, context.model);
|
|
@@ -105,24 +98,24 @@ const runCritiqueTurn = (context, packet, history, subagentResult$) => {
|
|
|
105
98
|
}));
|
|
106
99
|
};
|
|
107
100
|
/**
|
|
108
|
-
*
|
|
109
|
-
* (`accept` / `feedback`
|
|
110
|
-
*
|
|
111
|
-
* inventory / other LLM nodes. Tool payloads demux to `response` / `feedback`
|
|
112
|
-
* ports; free-form replies get a reminder. Optional inventory / MCP /
|
|
113
|
-
* Sub-Agents use shared LLM inventory ports.
|
|
101
|
+
* Adversarial Critique: path choice via the same Review-private control tools
|
|
102
|
+
* (`accept` / `feedback`). First input is the original assignment; second is
|
|
103
|
+
* the packet under attack. Optional inventory / MCP / Sub-Agents may run first.
|
|
114
104
|
*
|
|
115
105
|
* Session history uses the shared {@link createLlmSessionCycle$} (ADR-016):
|
|
116
106
|
* init = assignment / system / inventory; turn driver = `packet`.
|
|
117
|
-
* @see docs/use-cases/adversarial-red-team.md
|
|
118
|
-
* @see docs/DONE/EPICS/MECHANICS-tool-execution.md
|
|
119
107
|
*/
|
|
120
108
|
export const critiqueNode = defineLlmNode({
|
|
121
109
|
type: 'common-critique',
|
|
122
110
|
displayName: 'Critique',
|
|
123
111
|
category: 'AI',
|
|
124
112
|
description: 'Adversarial Critique: first input is the original assignment/topic; second is the packet to attack. Finish with accept (agreed enough) or feedback (findings). Requires native tool / function calling. Optional wired tools / MCP / Sub-Agents may run via harness first.',
|
|
125
|
-
uiSchema:
|
|
113
|
+
uiSchema: [
|
|
114
|
+
...llmPanelUiSchema.filter((item) => item.field !== 'maxIterations'),
|
|
115
|
+
llmMaxIterationsUiField(DEFAULT_PATH_CHOICE_MAX_ITERATIONS, PATH_CHOICE_MAX_ITERATIONS_CAP),
|
|
116
|
+
...llmCompactionUiSchema,
|
|
117
|
+
...llmRecoveryUiSchema,
|
|
118
|
+
],
|
|
126
119
|
bind(ctx, { makeInput, configureOutput, combineInputs }, inventory) {
|
|
127
120
|
const { tools, mcp, subagentRegistration, subagentResult, steerControl, } = inventory;
|
|
128
121
|
const assignment = makeInput('assignment', {
|
|
@@ -145,22 +138,31 @@ export const critiqueNode = defineLlmNode({
|
|
|
145
138
|
});
|
|
146
139
|
// Init peers only — packet is the session turn driver (ADR-016).
|
|
147
140
|
const context$ = combineInputs([assignment, systemPrompt, tools, subagentRegistration, mcp, ctx], ([assignmentValue, systemPromptValue, toolList, subagentList, mcpList, ec,]) => {
|
|
148
|
-
const
|
|
141
|
+
const rolePreset = parseLlmRolePreset(ec.params.rolePreset);
|
|
142
|
+
const skillId = resolveEffectiveSkillId(rolePreset, ec.params.skillId);
|
|
149
143
|
const hostServices = getRunHostServices(ec);
|
|
150
144
|
const skillMarkdown = hostServices?.skillMarkdown ?? '';
|
|
145
|
+
const agentsMarkdown = hostServices?.agentsMarkdown ?? '';
|
|
151
146
|
return {
|
|
152
147
|
assignment: String(assignmentValue ?? ''),
|
|
153
|
-
|
|
154
|
-
model: String(ec.params.model ?? ''),
|
|
148
|
+
...resolveChatProviderModel(ec.params, hostServices),
|
|
155
149
|
skillId,
|
|
156
150
|
skillMarkdown,
|
|
157
|
-
effectiveSystemPrompt: buildEffectiveCritiqueSystem(
|
|
151
|
+
effectiveSystemPrompt: buildEffectiveCritiqueSystem({
|
|
152
|
+
rolePreset,
|
|
153
|
+
systemPromptInput: String(systemPromptValue ?? ''),
|
|
154
|
+
agentsMarkdown,
|
|
155
|
+
skillMarkdown,
|
|
156
|
+
}),
|
|
158
157
|
factory: hostServices?.createChatCompletionStream,
|
|
159
158
|
maxIterations: normalizeMaxIterations(ec.params.maxIterations, {
|
|
160
159
|
fallback: DEFAULT_PATH_CHOICE_MAX_ITERATIONS,
|
|
161
160
|
maxCap: PATH_CHOICE_MAX_ITERATIONS_CAP,
|
|
162
161
|
}),
|
|
163
|
-
maxFeedbackTurns:
|
|
162
|
+
maxFeedbackTurns: normalizeMaxFeedbackTurns(ec.params.maxFeedbackTurns),
|
|
163
|
+
...(hostServices?.requestPermission !== undefined
|
|
164
|
+
? { requestPermission: hostServices.requestPermission }
|
|
165
|
+
: {}),
|
|
164
166
|
compaction: normalizeCompactionConfig(ec.params),
|
|
165
167
|
recovery: normalizeLlmRecoveryPolicy(ec.params),
|
|
166
168
|
steerControl$: steerControl.value$.pipe(filter(isSteerControlPayload)),
|
|
@@ -69,9 +69,9 @@ export declare const fakeLlmNode: {
|
|
|
69
69
|
readonly field: "maxFeedbackTurns";
|
|
70
70
|
readonly type: "number";
|
|
71
71
|
readonly label: "Max feedback turns (0 = unlimited)";
|
|
72
|
-
readonly default:
|
|
72
|
+
readonly default: 50;
|
|
73
73
|
readonly min: 0;
|
|
74
|
-
readonly max:
|
|
74
|
+
readonly max: number;
|
|
75
75
|
readonly step: 1;
|
|
76
76
|
}, {
|
|
77
77
|
readonly field: "streamIdleTimeoutMs";
|
|
@@ -172,9 +172,9 @@ export declare const fakeLlmNode: {
|
|
|
172
172
|
readonly field: "maxFeedbackTurns";
|
|
173
173
|
readonly type: "number";
|
|
174
174
|
readonly label: "Max feedback turns (0 = unlimited)";
|
|
175
|
-
readonly default:
|
|
175
|
+
readonly default: 50;
|
|
176
176
|
readonly min: 0;
|
|
177
|
-
readonly max:
|
|
177
|
+
readonly max: number;
|
|
178
178
|
readonly step: 1;
|
|
179
179
|
}, {
|
|
180
180
|
readonly field: "streamIdleTimeoutMs";
|
|
@@ -275,9 +275,9 @@ export declare const fakeLlmNode: {
|
|
|
275
275
|
readonly field: "maxFeedbackTurns";
|
|
276
276
|
readonly type: "number";
|
|
277
277
|
readonly label: "Max feedback turns (0 = unlimited)";
|
|
278
|
-
readonly default:
|
|
278
|
+
readonly default: 50;
|
|
279
279
|
readonly min: 0;
|
|
280
|
-
readonly max:
|
|
280
|
+
readonly max: number;
|
|
281
281
|
readonly step: 1;
|
|
282
282
|
}, {
|
|
283
283
|
readonly field: "streamIdleTimeoutMs";
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { DEFAULT_CONTEXT_SIZE } from './openai/normalize-compaction-params.js';
|
|
1
2
|
/** Shared Inspector fields for OpenAI-compatible chat compaction. */
|
|
2
3
|
export const llmCompactionUiSchema = [
|
|
3
4
|
{
|
|
4
5
|
field: 'contextSize',
|
|
5
6
|
type: 'number',
|
|
6
7
|
label: 'Context size (approx tokens)',
|
|
7
|
-
default:
|
|
8
|
+
default: DEFAULT_CONTEXT_SIZE,
|
|
8
9
|
min: 0,
|
|
9
10
|
step: 1,
|
|
10
11
|
},
|
|
@@ -1,21 +1,3 @@
|
|
|
1
|
-
/** Provider / Model / Skill — shared by agent and path-choice LLM nodes. */
|
|
2
|
-
export declare const llmProviderModelSkillUiSchema: readonly [{
|
|
3
|
-
readonly field: "providerId";
|
|
4
|
-
readonly type: "select";
|
|
5
|
-
readonly label: "Provider";
|
|
6
|
-
readonly optionsSource: "langflower.providers";
|
|
7
|
-
}, {
|
|
8
|
-
readonly field: "model";
|
|
9
|
-
readonly type: "select";
|
|
10
|
-
readonly label: "Model";
|
|
11
|
-
readonly optionsSource: "langflower.models";
|
|
12
|
-
readonly dependsOn: "providerId";
|
|
13
|
-
}, {
|
|
14
|
-
readonly field: "skillId";
|
|
15
|
-
readonly type: "select";
|
|
16
|
-
readonly label: "Skill";
|
|
17
|
-
readonly optionsSource: "langflower.skills";
|
|
18
|
-
}];
|
|
19
1
|
export declare const llmMaxIterationsUiField: (defaultValue: number, maxCap: number) => {
|
|
20
2
|
readonly field: "maxIterations";
|
|
21
3
|
readonly type: "number";
|
|
@@ -25,7 +7,11 @@ export declare const llmMaxIterationsUiField: (defaultValue: number, maxCap: num
|
|
|
25
7
|
readonly max: number;
|
|
26
8
|
readonly step: 1;
|
|
27
9
|
};
|
|
28
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Shared Inspector panel floor for all LLM-family nodes (OpenAI, Fake,
|
|
12
|
+
* Sub-Agent, Review, Critique). Nodes may expand after this list; they must
|
|
13
|
+
* not omit these fields.
|
|
14
|
+
*/
|
|
29
15
|
export declare const llmPanelUiSchema: readonly [{
|
|
30
16
|
readonly field: "rolePreset";
|
|
31
17
|
readonly type: "select";
|
|
@@ -87,8 +73,8 @@ export declare const llmPanelUiSchema: readonly [{
|
|
|
87
73
|
readonly field: "maxFeedbackTurns";
|
|
88
74
|
readonly type: "number";
|
|
89
75
|
readonly label: "Max feedback turns (0 = unlimited)";
|
|
90
|
-
readonly default:
|
|
76
|
+
readonly default: 50;
|
|
91
77
|
readonly min: 0;
|
|
92
|
-
readonly max:
|
|
78
|
+
readonly max: number;
|
|
93
79
|
readonly step: 1;
|
|
94
80
|
}];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LLM_ROLE_PRESET_OPTIONS } from './llm-role-preset.js';
|
|
2
2
|
import { AGENT_MAX_ITERATIONS_CAP, DEFAULT_AGENT_MAX_ITERATIONS, } from './normalize-max-iterations.js';
|
|
3
|
-
/** Provider / Model / Skill —
|
|
4
|
-
|
|
3
|
+
/** Provider / Model / Skill — folded into {@link llmPanelUiSchema}. */
|
|
4
|
+
const llmProviderModelSkillUiSchema = [
|
|
5
5
|
{
|
|
6
6
|
field: 'providerId',
|
|
7
7
|
type: 'select',
|
|
@@ -31,7 +31,11 @@ export const llmMaxIterationsUiField = (defaultValue, maxCap) => ({
|
|
|
31
31
|
max: maxCap,
|
|
32
32
|
step: 1,
|
|
33
33
|
});
|
|
34
|
-
/**
|
|
34
|
+
/**
|
|
35
|
+
* Shared Inspector panel floor for all LLM-family nodes (OpenAI, Fake,
|
|
36
|
+
* Sub-Agent, Review, Critique). Nodes may expand after this list; they must
|
|
37
|
+
* not omit these fields.
|
|
38
|
+
*/
|
|
35
39
|
export const llmPanelUiSchema = [
|
|
36
40
|
{
|
|
37
41
|
field: 'rolePreset',
|
|
@@ -64,7 +68,7 @@ export const llmPanelUiSchema = [
|
|
|
64
68
|
field: 'maxFeedbackTurns',
|
|
65
69
|
type: 'number',
|
|
66
70
|
label: 'Max feedback turns (0 = unlimited)',
|
|
67
|
-
default:
|
|
71
|
+
default: 50,
|
|
68
72
|
min: 0,
|
|
69
73
|
max: AGENT_MAX_ITERATIONS_CAP,
|
|
70
74
|
step: 1,
|
|
@@ -94,6 +94,8 @@ type ReactiveBindHelpers = {
|
|
|
94
94
|
readonly configureOutput: typeof configureOutput;
|
|
95
95
|
readonly combineInputs: typeof combineStatefulObservables;
|
|
96
96
|
};
|
|
97
|
+
/** 0 = unlimited; positive = max feedback turns after turn 0. */
|
|
98
|
+
export declare const normalizeMaxFeedbackTurns: (value: unknown) => number;
|
|
97
99
|
export declare const appendToolInventory: (systemPrompt: string, tools: readonly ToolHandle[]) => string;
|
|
98
100
|
/**
|
|
99
101
|
* RxJS operator: filter session chunks by `kind` and project the payload.
|