@flowdrop/flowdrop 1.12.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/dist/components/ConfigForm.svelte +1 -0
- package/dist/components/ConfigPanel.svelte +7 -1
- package/dist/components/NodeSwapPicker.svelte +5 -1
- package/dist/components/PipelineStatus.svelte +11 -2
- package/dist/components/SchemaForm.svelte +1 -0
- package/dist/components/SettingsPanel.svelte +5 -1
- package/dist/components/WorkflowEditor.svelte +5 -1
- package/dist/components/chat/AIChatPanel.svelte +1 -5
- package/dist/components/form/FormAutocomplete.svelte +69 -15
- package/dist/components/form/FormField.svelte +21 -0
- package/dist/components/form/FormFieldLight.svelte +1 -0
- package/dist/components/interrupt/ChoicePrompt.svelte +5 -1
- package/dist/components/interrupt/InterruptBubble.svelte +75 -17
- package/dist/components/interrupt/InterruptBubble.svelte.d.ts +11 -0
- package/dist/components/playground/ChatBubble.svelte +287 -0
- package/dist/components/playground/ChatBubble.svelte.d.ts +10 -0
- package/dist/components/playground/ChatInput.svelte +11 -5
- package/dist/components/playground/ControlPanel.svelte +42 -29
- package/dist/components/playground/ExecutionConsole.svelte +5 -1
- package/dist/components/playground/ExecutionConsole.svelte.d.ts +2 -0
- package/dist/components/playground/ExecutionList.svelte +7 -2
- package/dist/components/playground/HierarchyTrail.svelte +88 -0
- package/dist/components/playground/HierarchyTrail.svelte.d.ts +7 -0
- package/dist/components/playground/LogRow.svelte +179 -0
- package/dist/components/playground/LogRow.svelte.d.ts +8 -0
- package/dist/components/playground/MessageBubble.stories.svelte +89 -0
- package/dist/components/playground/MessageBubble.svelte +23 -738
- package/dist/components/playground/MessageBubble.svelte.d.ts +3 -11
- package/dist/components/playground/MessageCard.svelte +107 -0
- package/dist/components/playground/MessageCard.svelte.d.ts +10 -0
- package/dist/components/playground/MessageMarkdown.svelte +170 -0
- package/dist/components/playground/MessageMarkdown.svelte.d.ts +7 -0
- package/dist/components/playground/MessageNotice.svelte +121 -0
- package/dist/components/playground/MessageNotice.svelte.d.ts +9 -0
- package/dist/components/playground/MessageStream.svelte +215 -10
- package/dist/components/playground/MessageStream.svelte.d.ts +5 -0
- package/dist/components/playground/MessageTagChip.svelte +117 -0
- package/dist/components/playground/MessageTagChip.svelte.d.ts +7 -0
- package/dist/components/playground/MessageTagStrip.svelte +37 -0
- package/dist/components/playground/MessageTagStrip.svelte.d.ts +7 -0
- package/dist/components/playground/PipelineKanbanView.svelte +40 -11
- package/dist/components/playground/PipelinePanel.svelte +5 -1
- package/dist/components/playground/PipelineTableView.svelte +20 -6
- package/dist/components/playground/Playground.svelte +84 -22
- package/dist/components/playground/PlaygroundStudio.svelte +99 -7
- package/dist/components/playground/messageDisplay.d.ts +19 -0
- package/dist/components/playground/messageDisplay.js +62 -0
- package/dist/components/playground/pipelineViewUtils.svelte.js +11 -4
- package/dist/form/autocomplete.d.ts +1 -0
- package/dist/form/autocomplete.js +1 -0
- package/dist/form/index.d.ts +17 -0
- package/dist/form/index.js +19 -0
- package/dist/messages/defaults.d.ts +5 -0
- package/dist/messages/defaults.js +6 -0
- package/dist/openapi/v1/openapi.yaml +6403 -0
- package/dist/schemas/v1/workflow.schema.json +46 -1
- package/dist/services/categoriesApi.d.ts +2 -1
- package/dist/services/categoriesApi.js +5 -3
- package/dist/services/playgroundService.d.ts +23 -4
- package/dist/services/playgroundService.js +22 -9
- package/dist/services/portConfigApi.d.ts +2 -1
- package/dist/services/portConfigApi.js +5 -3
- package/dist/stores/playgroundStore.svelte.d.ts +22 -1
- package/dist/stores/playgroundStore.svelte.js +109 -32
- package/dist/svelte-app.d.ts +1 -0
- package/dist/svelte-app.js +5 -5
- package/dist/types/index.d.ts +13 -0
- package/dist/types/playground.d.ts +112 -2
- package/dist/types/playground.js +14 -0
- package/package.json +12 -1
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
LogRow — dense terminal-style entry for log messages.
|
|
3
|
+
Width-based reshaping is driven by `@container fd-message-stream` rules
|
|
4
|
+
declared in MessageStream.svelte (the file that also sets the container).
|
|
5
|
+
-->
|
|
6
|
+
|
|
7
|
+
<script lang="ts">
|
|
8
|
+
import Icon from '@iconify/svelte';
|
|
9
|
+
import type { PlaygroundMessage } from '../../types/playground.js';
|
|
10
|
+
import HierarchyTrail from './HierarchyTrail.svelte';
|
|
11
|
+
import MessageTagStrip from './MessageTagStrip.svelte';
|
|
12
|
+
import { formatTimestamp, getLogLevelIcon } from './messageDisplay.js';
|
|
13
|
+
|
|
14
|
+
interface Props {
|
|
15
|
+
message: PlaygroundMessage;
|
|
16
|
+
showTimestamp?: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let { message, showTimestamp = true }: Props = $props();
|
|
20
|
+
|
|
21
|
+
const level = $derived(message.metadata?.level);
|
|
22
|
+
const hierarchy = $derived(message.hierarchy ?? []);
|
|
23
|
+
const tags = $derived(message.tags ?? []);
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<div
|
|
27
|
+
class="log-row"
|
|
28
|
+
class:log-row--error={level === 'error'}
|
|
29
|
+
class:log-row--warning={level === 'warning'}
|
|
30
|
+
class:log-row--debug={level === 'debug'}
|
|
31
|
+
aria-label="{level ?? 'info'} log{message.metadata?.nodeLabel
|
|
32
|
+
? ` from ${message.metadata.nodeLabel}`
|
|
33
|
+
: ''}"
|
|
34
|
+
>
|
|
35
|
+
<div class="log-row__level" aria-hidden="true">
|
|
36
|
+
<Icon icon={getLogLevelIcon(level)} />
|
|
37
|
+
</div>
|
|
38
|
+
<div class="log-row__body">
|
|
39
|
+
{#if message.metadata?.source}
|
|
40
|
+
<span class="log-row__source">{message.metadata.source}</span>
|
|
41
|
+
{/if}
|
|
42
|
+
<HierarchyTrail items={hierarchy} />
|
|
43
|
+
{#if message.metadata?.nodeLabel ?? message.nodeId}
|
|
44
|
+
<span class="log-row__node">{message.metadata?.nodeLabel ?? message.nodeId}</span>
|
|
45
|
+
{/if}
|
|
46
|
+
<span class="log-row__text">{message.content}</span>
|
|
47
|
+
</div>
|
|
48
|
+
{#if tags.length > 0}
|
|
49
|
+
<span class="log-row__tags">
|
|
50
|
+
<MessageTagStrip {tags} />
|
|
51
|
+
</span>
|
|
52
|
+
{/if}
|
|
53
|
+
{#if showTimestamp}
|
|
54
|
+
<time
|
|
55
|
+
class="log-row__timestamp"
|
|
56
|
+
datetime={message.timestamp}
|
|
57
|
+
aria-label="sent at {formatTimestamp(message.timestamp)}"
|
|
58
|
+
>{formatTimestamp(message.timestamp)}</time
|
|
59
|
+
>
|
|
60
|
+
{/if}
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<style>
|
|
64
|
+
.log-row {
|
|
65
|
+
display: flex;
|
|
66
|
+
flex-wrap: wrap;
|
|
67
|
+
align-items: center;
|
|
68
|
+
gap: var(--fd-space-sm);
|
|
69
|
+
padding: 0.1875rem var(--fd-space-xl);
|
|
70
|
+
border-left: 2px solid var(--fd-info);
|
|
71
|
+
margin: 1px 0;
|
|
72
|
+
font-family: var(--fd-font-mono);
|
|
73
|
+
font-size: var(--fd-text-xs);
|
|
74
|
+
color: var(--fd-muted-foreground);
|
|
75
|
+
line-height: var(--fd-leading-normal);
|
|
76
|
+
background-color: transparent;
|
|
77
|
+
min-width: 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.log-row:hover {
|
|
81
|
+
background-color: var(--fd-muted);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.log-row--error {
|
|
85
|
+
border-left-color: var(--fd-error);
|
|
86
|
+
color: var(--fd-error);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.log-row--warning {
|
|
90
|
+
border-left-color: var(--fd-warning);
|
|
91
|
+
color: var(--fd-warning);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.log-row--debug {
|
|
95
|
+
border-left-color: var(--fd-border-strong);
|
|
96
|
+
color: var(--fd-border-strong);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
.log-row__level {
|
|
100
|
+
flex-shrink: 0;
|
|
101
|
+
display: flex;
|
|
102
|
+
align-items: center;
|
|
103
|
+
font-size: var(--fd-text-sm);
|
|
104
|
+
opacity: 0.7;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.log-row--error .log-row__level,
|
|
108
|
+
.log-row--warning .log-row__level {
|
|
109
|
+
opacity: 1;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
.log-row__body {
|
|
113
|
+
flex: 1 1 12rem;
|
|
114
|
+
min-width: 0;
|
|
115
|
+
display: flex;
|
|
116
|
+
flex-wrap: wrap;
|
|
117
|
+
align-items: baseline;
|
|
118
|
+
gap: var(--fd-space-sm);
|
|
119
|
+
overflow: hidden;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.log-row__source {
|
|
123
|
+
flex-shrink: 0;
|
|
124
|
+
font-size: 0.6rem;
|
|
125
|
+
text-transform: uppercase;
|
|
126
|
+
letter-spacing: 0.06em;
|
|
127
|
+
color: var(--fd-muted-foreground);
|
|
128
|
+
opacity: 0.6;
|
|
129
|
+
background-color: var(--fd-muted);
|
|
130
|
+
border: 1px solid var(--fd-border);
|
|
131
|
+
border-radius: var(--fd-radius-sm);
|
|
132
|
+
padding: 0 0.25rem;
|
|
133
|
+
line-height: 1.4;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
.log-row__node {
|
|
137
|
+
flex-shrink: 0;
|
|
138
|
+
font-weight: 600;
|
|
139
|
+
color: var(--fd-foreground);
|
|
140
|
+
opacity: 0.5;
|
|
141
|
+
font-size: 0.65rem;
|
|
142
|
+
text-transform: uppercase;
|
|
143
|
+
letter-spacing: 0.04em;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.log-row__text {
|
|
147
|
+
flex: 1;
|
|
148
|
+
min-width: 0;
|
|
149
|
+
white-space: pre-wrap;
|
|
150
|
+
overflow-wrap: anywhere;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.log-row__timestamp {
|
|
154
|
+
flex-shrink: 0;
|
|
155
|
+
font-size: 0.625rem;
|
|
156
|
+
color: var(--fd-border-strong);
|
|
157
|
+
opacity: 0.8;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/* Wrapper around the tag strip. Owns its grid-area in the @container
|
|
161
|
+
queries (see MessageStream.svelte) without those rules reaching into
|
|
162
|
+
MessageTagStrip's scope. inline-flex so the strip lays out naturally
|
|
163
|
+
in the default wide layout. */
|
|
164
|
+
.log-row__tags {
|
|
165
|
+
display: inline-flex;
|
|
166
|
+
min-width: 0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@media (max-width: 640px) {
|
|
170
|
+
.log-row {
|
|
171
|
+
padding: 0.1875rem var(--fd-space-md);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.log-row__source,
|
|
175
|
+
.log-row__node {
|
|
176
|
+
font-size: 0.55rem;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
</style>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PlaygroundMessage } from '../../types/playground.js';
|
|
2
|
+
interface Props {
|
|
3
|
+
message: PlaygroundMessage;
|
|
4
|
+
showTimestamp?: boolean;
|
|
5
|
+
}
|
|
6
|
+
declare const LogRow: import("svelte").Component<Props, {}, "">;
|
|
7
|
+
type LogRow = ReturnType<typeof LogRow>;
|
|
8
|
+
export default LogRow;
|
|
@@ -10,6 +10,16 @@
|
|
|
10
10
|
layout: 'padded'
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
|
+
|
|
14
|
+
const baseHierarchy = [
|
|
15
|
+
{ id: 'demo-foreach-loop', label: 'ForEach Loop', icon: 'mdi:graph' },
|
|
16
|
+
{ id: 'greeter-flow', label: 'Greeter', icon: 'mdi:hand-wave' }
|
|
17
|
+
];
|
|
18
|
+
|
|
19
|
+
const sampleTags = [
|
|
20
|
+
{ id: 'run', label: 'Run #3', icon: 'mdi:play-circle', color: 'info', variant: 'subtle' },
|
|
21
|
+
{ id: 'iteration', label: 'iter 1/5', color: 'muted', variant: 'subtle' }
|
|
22
|
+
];
|
|
13
23
|
</script>
|
|
14
24
|
|
|
15
25
|
<Story
|
|
@@ -60,3 +70,82 @@
|
|
|
60
70
|
}
|
|
61
71
|
}}
|
|
62
72
|
/>
|
|
73
|
+
|
|
74
|
+
<Story
|
|
75
|
+
name="With Tags"
|
|
76
|
+
args={{
|
|
77
|
+
message: {
|
|
78
|
+
id: 'msg-5',
|
|
79
|
+
role: 'assistant',
|
|
80
|
+
content: 'Iteration complete.',
|
|
81
|
+
timestamp: new Date().toISOString(),
|
|
82
|
+
tags: sampleTags
|
|
83
|
+
}
|
|
84
|
+
}}
|
|
85
|
+
/>
|
|
86
|
+
|
|
87
|
+
<Story
|
|
88
|
+
name="Tag Colors (each variant)"
|
|
89
|
+
args={{
|
|
90
|
+
message: {
|
|
91
|
+
id: 'msg-6',
|
|
92
|
+
role: 'log',
|
|
93
|
+
content: 'Showcasing semantic colors and visual variants',
|
|
94
|
+
timestamp: new Date().toISOString(),
|
|
95
|
+
tags: [
|
|
96
|
+
{ id: 't-1', label: 'subtle.muted', color: 'muted', variant: 'subtle' },
|
|
97
|
+
{ id: 't-2', label: 'subtle.success', color: 'success', variant: 'subtle' },
|
|
98
|
+
{ id: 't-3', label: 'subtle.warning', color: 'warning', variant: 'subtle' },
|
|
99
|
+
{ id: 't-4', label: 'subtle.error', color: 'error', variant: 'subtle' },
|
|
100
|
+
{ id: 't-5', label: 'outline.primary', color: 'primary', variant: 'outline' },
|
|
101
|
+
{ id: 't-6', label: 'solid.info', color: 'info', variant: 'solid' }
|
|
102
|
+
]
|
|
103
|
+
}
|
|
104
|
+
}}
|
|
105
|
+
/>
|
|
106
|
+
|
|
107
|
+
<Story
|
|
108
|
+
name="With Hierarchy"
|
|
109
|
+
args={{
|
|
110
|
+
message: {
|
|
111
|
+
id: 'msg-7',
|
|
112
|
+
role: 'log',
|
|
113
|
+
content: 'greeter said hi to Apple',
|
|
114
|
+
timestamp: new Date().toISOString(),
|
|
115
|
+
hierarchy: baseHierarchy,
|
|
116
|
+
tags: [{ id: 'iter', label: 'iter 1/5', color: 'muted', variant: 'subtle' }]
|
|
117
|
+
}
|
|
118
|
+
}}
|
|
119
|
+
/>
|
|
120
|
+
|
|
121
|
+
<Story
|
|
122
|
+
name="Card Display"
|
|
123
|
+
args={{
|
|
124
|
+
message: {
|
|
125
|
+
id: 'msg-8',
|
|
126
|
+
role: 'log',
|
|
127
|
+
content:
|
|
128
|
+
'Greeter aborted because Cherry never reached the queue. The upstream loader returned a timeout after retrying twice — check the JSON Loader configuration for `retries` and `backoffMs`.',
|
|
129
|
+
timestamp: new Date().toISOString(),
|
|
130
|
+
display: 'card',
|
|
131
|
+
hierarchy: baseHierarchy,
|
|
132
|
+
tags: [
|
|
133
|
+
{ id: 'iter', label: 'iter 3/5', color: 'muted', variant: 'subtle' },
|
|
134
|
+
{ id: 'status', label: 'aborted', color: 'warning', variant: 'solid' }
|
|
135
|
+
]
|
|
136
|
+
}
|
|
137
|
+
}}
|
|
138
|
+
/>
|
|
139
|
+
|
|
140
|
+
<Story
|
|
141
|
+
name="Server-driven display override (log as bubble)"
|
|
142
|
+
args={{
|
|
143
|
+
message: {
|
|
144
|
+
id: 'msg-9',
|
|
145
|
+
role: 'log',
|
|
146
|
+
content: 'This log message is rendered as a bubble because the server set display=bubble',
|
|
147
|
+
timestamp: new Date().toISOString(),
|
|
148
|
+
display: 'bubble'
|
|
149
|
+
}
|
|
150
|
+
}}
|
|
151
|
+
/>
|