n8n-nodes-openui 0.1.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 +116 -0
- package/dist/nodes/OpenUiParser/OpenUiParser.node.d.ts +6 -0
- package/dist/nodes/OpenUiParser/OpenUiParser.node.d.ts.map +1 -0
- package/dist/nodes/OpenUiParser/OpenUiParser.node.js +398 -0
- package/dist/nodes/OpenUiParser/OpenUiParser.node.js.map +1 -0
- package/dist/nodes/OpenUiPromptGenerator/OpenUiPromptGenerator.node.d.ts +6 -0
- package/dist/nodes/OpenUiPromptGenerator/OpenUiPromptGenerator.node.d.ts.map +1 -0
- package/dist/nodes/OpenUiPromptGenerator/OpenUiPromptGenerator.node.js +227 -0
- package/dist/nodes/OpenUiPromptGenerator/OpenUiPromptGenerator.node.js.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# n8n-nodes-openui
|
|
2
|
+
|
|
3
|
+
n8n community nodes for OpenUI generative UI integration. Enables AI agents to output structured UI using OpenUI Lang instead of fragile JSON.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
1. Open n8n
|
|
8
|
+
2. Go to **Settings > Community Nodes**
|
|
9
|
+
3. Enter `n8n-nodes-openui`
|
|
10
|
+
4. Click **Install**
|
|
11
|
+
|
|
12
|
+
## Nodes
|
|
13
|
+
|
|
14
|
+
### OpenUI Prompt Generator
|
|
15
|
+
|
|
16
|
+
Generates system prompts with OpenUI Lang component library for AI agents.
|
|
17
|
+
|
|
18
|
+
**Inputs:**
|
|
19
|
+
- `componentLibrary` (JSON, optional) - Custom component definitions. Uses built-in defaults if empty.
|
|
20
|
+
- `additionalInstructions` (string, optional) - Extra instructions to include.
|
|
21
|
+
- `outputFormat` (options) - `systemPrompt` or `json`.
|
|
22
|
+
|
|
23
|
+
**Output:**
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"systemPrompt": "You are a helpful assistant...",
|
|
27
|
+
"componentLibrary": [...]
|
|
28
|
+
}
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### OpenUI Parser
|
|
32
|
+
|
|
33
|
+
Parses OpenUI Lang output from AI into structured data for rendering.
|
|
34
|
+
|
|
35
|
+
**Inputs:**
|
|
36
|
+
- `inputField` (string) - Field containing AI output (default: `text`).
|
|
37
|
+
- `outputFormat` (options) - `openui`, `legacy`, or `both`.
|
|
38
|
+
- `fallbackToLegacy` (boolean) - Try parsing as JSON if not OpenUI Lang.
|
|
39
|
+
|
|
40
|
+
**Output:**
|
|
41
|
+
```json
|
|
42
|
+
{
|
|
43
|
+
"openui": { "type": "Root", "props": {...}, "children": [...] },
|
|
44
|
+
"legacy": { "products": [...], "booking": {...} },
|
|
45
|
+
"format": "openui",
|
|
46
|
+
"error": null
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Example Workflow
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Webhook
|
|
54
|
+
↓
|
|
55
|
+
OpenUI Prompt Generator (generates system prompt)
|
|
56
|
+
↓
|
|
57
|
+
AI Agent (uses system prompt, outputs OpenUI Lang)
|
|
58
|
+
↓
|
|
59
|
+
OpenUI Parser (converts to structured data)
|
|
60
|
+
↓
|
|
61
|
+
Respond to Webhook
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Component Library
|
|
65
|
+
|
|
66
|
+
Built-in components:
|
|
67
|
+
|
|
68
|
+
| Component | Description | Required Props |
|
|
69
|
+
|-----------|-------------|----------------|
|
|
70
|
+
| `ProductCard` | Product display | title, image, price, handle |
|
|
71
|
+
| `BookingCard` | Calendar booking | summary, start, end, status |
|
|
72
|
+
| `EventCard` | Calendar event | summary, start, end, status |
|
|
73
|
+
| `TaskCard` | Task item | title |
|
|
74
|
+
| `OrderCard` | Order summary | id, name, total_price, created_at, status |
|
|
75
|
+
| `Stack` | Layout container | children |
|
|
76
|
+
| `Text` | Text content | content |
|
|
77
|
+
| `Card` | Generic card | children |
|
|
78
|
+
|
|
79
|
+
## Custom Components
|
|
80
|
+
|
|
81
|
+
Pass custom component definitions to the Prompt Generator:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
[
|
|
85
|
+
{
|
|
86
|
+
"name": "InvoiceCard",
|
|
87
|
+
"description": "Displays an invoice",
|
|
88
|
+
"props": [
|
|
89
|
+
{ "name": "id", "type": "string", "required": true },
|
|
90
|
+
{ "name": "total", "type": "string", "required": true }
|
|
91
|
+
],
|
|
92
|
+
"example": "invoice = InvoiceCard(\"INV-001\", \"$500\")"
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Why OpenUI Lang?
|
|
98
|
+
|
|
99
|
+
| Feature | JSON | OpenUI Lang |
|
|
100
|
+
|---------|------|-------------|
|
|
101
|
+
| Token usage | 100% | ~50% |
|
|
102
|
+
| Streaming | Wait for complete | Progressive |
|
|
103
|
+
| Malformed output | Breaks everything | Drops invalid lines |
|
|
104
|
+
| Model adherence | Inconsistent | Better (simpler syntax) |
|
|
105
|
+
|
|
106
|
+
## Development
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
npm install
|
|
110
|
+
npm run build
|
|
111
|
+
npm run dev # watch mode
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## License
|
|
115
|
+
|
|
116
|
+
MIT
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { INodeType, INodeTypeDescription, INodeExecutionData, IExecuteFunctions } from 'n8n-workflow';
|
|
2
|
+
export declare class OpenUiParser implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=OpenUiParser.node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenUiParser.node.d.ts","sourceRoot":"","sources":["../../../nodes/OpenUiParser/OpenUiParser.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,qBAAa,YAAa,YAAW,SAAS;IAC5C,WAAW,EAAE,oBAAoB,CAkD/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CA0DxE"}
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenUiParser = void 0;
|
|
4
|
+
class OpenUiParser {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.description = {
|
|
7
|
+
displayName: 'OpenUI Parser',
|
|
8
|
+
name: 'openUiParser',
|
|
9
|
+
group: ['transform'],
|
|
10
|
+
version: 1,
|
|
11
|
+
description: 'Parses OpenUI Lang output into structured data for rendering',
|
|
12
|
+
defaults: {
|
|
13
|
+
name: 'OpenUI Parser',
|
|
14
|
+
},
|
|
15
|
+
inputs: ['main'],
|
|
16
|
+
outputs: ['main'],
|
|
17
|
+
properties: [
|
|
18
|
+
{
|
|
19
|
+
displayName: 'Input Field',
|
|
20
|
+
name: 'inputField',
|
|
21
|
+
type: 'string',
|
|
22
|
+
default: 'text',
|
|
23
|
+
description: 'Field containing the OpenUI Lang output from the AI',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
displayName: 'Output Format',
|
|
27
|
+
name: 'outputFormat',
|
|
28
|
+
type: 'options',
|
|
29
|
+
options: [
|
|
30
|
+
{
|
|
31
|
+
name: 'OpenUI Components',
|
|
32
|
+
value: 'openui',
|
|
33
|
+
description: 'Output parsed OpenUI component tree',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'Legacy JSON',
|
|
37
|
+
value: 'legacy',
|
|
38
|
+
description: 'Convert to legacy JSON format for backward compatibility',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Both',
|
|
42
|
+
value: 'both',
|
|
43
|
+
description: 'Output both OpenUI and legacy formats',
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
default: 'both',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
displayName: 'Fallback to Legacy',
|
|
50
|
+
name: 'fallbackToLegacy',
|
|
51
|
+
type: 'boolean',
|
|
52
|
+
default: true,
|
|
53
|
+
description: 'If input is not valid OpenUI Lang, try to parse as legacy JSON',
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async execute() {
|
|
59
|
+
const items = this.getInputData();
|
|
60
|
+
const returnData = [];
|
|
61
|
+
for (let i = 0; i < items.length; i++) {
|
|
62
|
+
const inputField = this.getNodeParameter('inputField', i, 'text');
|
|
63
|
+
const outputFormat = this.getNodeParameter('outputFormat', i, 'both');
|
|
64
|
+
const fallbackToLegacy = this.getNodeParameter('fallbackToLegacy', i, true);
|
|
65
|
+
const inputText = items[i].json[inputField] || '';
|
|
66
|
+
let result;
|
|
67
|
+
// Try OpenUI Lang first
|
|
68
|
+
if (isOpenUILang(inputText)) {
|
|
69
|
+
result = parseOpenUILang(inputText);
|
|
70
|
+
}
|
|
71
|
+
else if (fallbackToLegacy) {
|
|
72
|
+
// Try legacy JSON parsing
|
|
73
|
+
result = parseLegacyJson(inputText);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
result = {
|
|
77
|
+
openui: null,
|
|
78
|
+
legacy: null,
|
|
79
|
+
error: 'Input is not valid OpenUI Lang',
|
|
80
|
+
format: 'unknown',
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
if (outputFormat === 'openui') {
|
|
84
|
+
returnData.push({
|
|
85
|
+
json: {
|
|
86
|
+
openui: result.openui,
|
|
87
|
+
format: result.format,
|
|
88
|
+
error: result.error,
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else if (outputFormat === 'legacy') {
|
|
93
|
+
returnData.push({
|
|
94
|
+
json: {
|
|
95
|
+
...result.legacy,
|
|
96
|
+
format: result.format,
|
|
97
|
+
error: result.error,
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
returnData.push({
|
|
103
|
+
json: {
|
|
104
|
+
openui: result.openui,
|
|
105
|
+
legacy: result.legacy,
|
|
106
|
+
format: result.format,
|
|
107
|
+
error: result.error,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return [returnData];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
exports.OpenUiParser = OpenUiParser;
|
|
116
|
+
function isOpenUILang(text) {
|
|
117
|
+
if (!text || typeof text !== 'string')
|
|
118
|
+
return false;
|
|
119
|
+
const lines = text.trim().split('\n').filter(l => l.trim());
|
|
120
|
+
// Check for OpenUI Lang patterns
|
|
121
|
+
const assignmentPattern = /^\s*\w+\s*=\s*\w+\(/;
|
|
122
|
+
const hasRoot = lines.some(l => l.includes('root = Root('));
|
|
123
|
+
// Must have at least one assignment
|
|
124
|
+
if (lines.length === 0)
|
|
125
|
+
return false;
|
|
126
|
+
// Check if most lines look like assignments
|
|
127
|
+
const assignmentCount = lines.filter(l => assignmentPattern.test(l)).length;
|
|
128
|
+
const ratio = assignmentCount / lines.length;
|
|
129
|
+
// If we have root and >50% assignments, likely OpenUI Lang
|
|
130
|
+
return hasRoot || ratio > 0.5;
|
|
131
|
+
}
|
|
132
|
+
function parseOpenUILang(text) {
|
|
133
|
+
try {
|
|
134
|
+
const lines = text.trim().split('\n').filter(l => l.trim());
|
|
135
|
+
const components = {};
|
|
136
|
+
let rootComponent = null;
|
|
137
|
+
for (const line of lines) {
|
|
138
|
+
const trimmed = line.trim();
|
|
139
|
+
if (!trimmed || trimmed.startsWith('//'))
|
|
140
|
+
continue;
|
|
141
|
+
// Parse assignment: identifier = Component(args...)
|
|
142
|
+
const match = trimmed.match(/^(\w+)\s*=\s*(\w+)\((.*)?\)$/);
|
|
143
|
+
if (!match)
|
|
144
|
+
continue;
|
|
145
|
+
const [, id, type, argsStr] = match;
|
|
146
|
+
const args = parseArgs(argsStr || '');
|
|
147
|
+
components[id] = {
|
|
148
|
+
type,
|
|
149
|
+
props: args,
|
|
150
|
+
};
|
|
151
|
+
if (id === 'root') {
|
|
152
|
+
rootComponent = components[id];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Resolve children references
|
|
156
|
+
for (const comp of Object.values(components)) {
|
|
157
|
+
if (comp.props.children && Array.isArray(comp.props.children)) {
|
|
158
|
+
comp.children = comp.props.children
|
|
159
|
+
.map((ref) => typeof ref === 'string' ? components[ref] : null)
|
|
160
|
+
.filter((c) => c !== null);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return {
|
|
164
|
+
openui: rootComponent,
|
|
165
|
+
legacy: convertToLegacy(rootComponent, components),
|
|
166
|
+
format: 'openui',
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
return {
|
|
171
|
+
openui: null,
|
|
172
|
+
legacy: null,
|
|
173
|
+
format: 'unknown',
|
|
174
|
+
error: `Failed to parse OpenUI Lang: ${error instanceof Error ? error.message : 'Unknown error'}`,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function parseArgs(argsStr) {
|
|
179
|
+
if (!argsStr.trim())
|
|
180
|
+
return {};
|
|
181
|
+
const args = [];
|
|
182
|
+
let depth = 0;
|
|
183
|
+
let current = '';
|
|
184
|
+
// Split by commas, respecting nested brackets
|
|
185
|
+
for (const char of argsStr) {
|
|
186
|
+
if (char === '(' || char === '[' || char === '{')
|
|
187
|
+
depth++;
|
|
188
|
+
if (char === ')' || char === ']' || char === '}')
|
|
189
|
+
depth--;
|
|
190
|
+
if (char === ',' && depth === 0) {
|
|
191
|
+
args.push(parseValue(current.trim()));
|
|
192
|
+
current = '';
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
current += char;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
if (current.trim()) {
|
|
199
|
+
args.push(parseValue(current.trim()));
|
|
200
|
+
}
|
|
201
|
+
// Map positional args to props based on component type
|
|
202
|
+
return { children: args };
|
|
203
|
+
}
|
|
204
|
+
function parseValue(value) {
|
|
205
|
+
if (!value)
|
|
206
|
+
return null;
|
|
207
|
+
// String
|
|
208
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
209
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
210
|
+
return value.slice(1, -1);
|
|
211
|
+
}
|
|
212
|
+
// Number
|
|
213
|
+
if (/^-?\d+(\.\d+)?$/.test(value)) {
|
|
214
|
+
return Number(value);
|
|
215
|
+
}
|
|
216
|
+
// Boolean
|
|
217
|
+
if (value === 'true')
|
|
218
|
+
return true;
|
|
219
|
+
if (value === 'false')
|
|
220
|
+
return false;
|
|
221
|
+
// Array
|
|
222
|
+
if (value.startsWith('[') && value.endsWith(']')) {
|
|
223
|
+
try {
|
|
224
|
+
return JSON.parse(value);
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return value;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// Reference to another component
|
|
231
|
+
return value;
|
|
232
|
+
}
|
|
233
|
+
function convertToLegacy(root, components) {
|
|
234
|
+
if (!root)
|
|
235
|
+
return null;
|
|
236
|
+
const legacy = {};
|
|
237
|
+
// Walk the component tree and extract data
|
|
238
|
+
function walk(comp) {
|
|
239
|
+
switch (comp.type) {
|
|
240
|
+
case 'ProductCard':
|
|
241
|
+
if (!legacy.products)
|
|
242
|
+
legacy.products = [];
|
|
243
|
+
legacy.products.push({
|
|
244
|
+
title: String(comp.props[0] || ''),
|
|
245
|
+
image: String(comp.props[1] || ''),
|
|
246
|
+
price: String(comp.props[2] || ''),
|
|
247
|
+
handle: String(comp.props[3] || ''),
|
|
248
|
+
description: String(comp.props[4] || ''),
|
|
249
|
+
});
|
|
250
|
+
break;
|
|
251
|
+
case 'BookingCard':
|
|
252
|
+
legacy.booking = {
|
|
253
|
+
summary: String(comp.props[0] || ''),
|
|
254
|
+
start: String(comp.props[1] || ''),
|
|
255
|
+
end: String(comp.props[2] || ''),
|
|
256
|
+
status: String(comp.props[3] || ''),
|
|
257
|
+
attendees: comp.props[4] ? String(comp.props[4]) : undefined,
|
|
258
|
+
meet_url: comp.props[5] ? String(comp.props[5]) : undefined,
|
|
259
|
+
};
|
|
260
|
+
break;
|
|
261
|
+
case 'EventCard':
|
|
262
|
+
if (!legacy.events)
|
|
263
|
+
legacy.events = [];
|
|
264
|
+
legacy.events.push({
|
|
265
|
+
summary: String(comp.props[0] || ''),
|
|
266
|
+
start: String(comp.props[1] || ''),
|
|
267
|
+
end: String(comp.props[2] || ''),
|
|
268
|
+
status: String(comp.props[3] || ''),
|
|
269
|
+
});
|
|
270
|
+
break;
|
|
271
|
+
case 'TaskCard':
|
|
272
|
+
legacy.task = {
|
|
273
|
+
title: String(comp.props[0] || ''),
|
|
274
|
+
notes: comp.props[1] ? String(comp.props[1]) : undefined,
|
|
275
|
+
};
|
|
276
|
+
break;
|
|
277
|
+
case 'OrderCard':
|
|
278
|
+
if (!legacy.orders)
|
|
279
|
+
legacy.orders = [];
|
|
280
|
+
legacy.orders.push({
|
|
281
|
+
id: String(comp.props[0] || ''),
|
|
282
|
+
name: String(comp.props[1] || ''),
|
|
283
|
+
total_price: String(comp.props[2] || ''),
|
|
284
|
+
created_at: String(comp.props[3] || ''),
|
|
285
|
+
status: String(comp.props[4] || ''),
|
|
286
|
+
});
|
|
287
|
+
break;
|
|
288
|
+
case 'Text':
|
|
289
|
+
if (!legacy.message) {
|
|
290
|
+
legacy.message = String(comp.props[0] || '');
|
|
291
|
+
}
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
// Walk children
|
|
295
|
+
if (comp.children) {
|
|
296
|
+
for (const child of comp.children) {
|
|
297
|
+
walk(child);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
walk(root);
|
|
302
|
+
return Object.keys(legacy).length > 0 ? legacy : null;
|
|
303
|
+
}
|
|
304
|
+
function parseLegacyJson(text) {
|
|
305
|
+
try {
|
|
306
|
+
// Try to extract JSON from markdown code blocks
|
|
307
|
+
const jsonMatch = text.match(/```(?:json)?\s*\n?([\s\S]*?)\n?```/);
|
|
308
|
+
const jsonStr = jsonMatch ? jsonMatch[1] : text;
|
|
309
|
+
// Try to parse as JSON
|
|
310
|
+
const parsed = JSON.parse(jsonStr.trim());
|
|
311
|
+
// Validate it looks like our expected format
|
|
312
|
+
if (parsed.products || parsed.booking || parsed.events || parsed.task || parsed.orders) {
|
|
313
|
+
return {
|
|
314
|
+
openui: convertLegacyToOpenUI(parsed),
|
|
315
|
+
legacy: parsed,
|
|
316
|
+
format: 'legacy',
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
return {
|
|
320
|
+
openui: null,
|
|
321
|
+
legacy: null,
|
|
322
|
+
format: 'unknown',
|
|
323
|
+
error: 'JSON does not contain expected fields',
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
catch {
|
|
327
|
+
return {
|
|
328
|
+
openui: null,
|
|
329
|
+
legacy: null,
|
|
330
|
+
format: 'unknown',
|
|
331
|
+
error: 'Failed to parse as JSON',
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
function convertLegacyToOpenUI(legacy) {
|
|
336
|
+
const children = [];
|
|
337
|
+
if (legacy.message) {
|
|
338
|
+
children.push({
|
|
339
|
+
type: 'Text',
|
|
340
|
+
props: { content: legacy.message, variant: 'body' },
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
if (legacy.products) {
|
|
344
|
+
const productComps = legacy.products.map(p => ({
|
|
345
|
+
type: 'ProductCard',
|
|
346
|
+
props: { title: p.title, image: p.image, price: p.price, handle: p.handle, description: p.description },
|
|
347
|
+
}));
|
|
348
|
+
children.push({
|
|
349
|
+
type: 'Stack',
|
|
350
|
+
props: { children: productComps, direction: 'row', gap: 'm' },
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
if (legacy.booking) {
|
|
354
|
+
children.push({
|
|
355
|
+
type: 'BookingCard',
|
|
356
|
+
props: {
|
|
357
|
+
summary: legacy.booking.summary,
|
|
358
|
+
start: legacy.booking.start,
|
|
359
|
+
end: legacy.booking.end,
|
|
360
|
+
status: legacy.booking.status,
|
|
361
|
+
attendees: legacy.booking.attendees,
|
|
362
|
+
meet_url: legacy.booking.meet_url,
|
|
363
|
+
},
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
if (legacy.events) {
|
|
367
|
+
const eventComps = legacy.events.map(e => ({
|
|
368
|
+
type: 'EventCard',
|
|
369
|
+
props: { summary: e.summary, start: e.start, end: e.end, status: e.status },
|
|
370
|
+
}));
|
|
371
|
+
children.push({
|
|
372
|
+
type: 'Stack',
|
|
373
|
+
props: { children: eventComps },
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
if (legacy.task) {
|
|
377
|
+
children.push({
|
|
378
|
+
type: 'TaskCard',
|
|
379
|
+
props: { title: legacy.task.title, notes: legacy.task.notes },
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
if (legacy.orders) {
|
|
383
|
+
const orderComps = legacy.orders.map(o => ({
|
|
384
|
+
type: 'OrderCard',
|
|
385
|
+
props: { id: o.id, name: o.name, total_price: o.total_price, created_at: o.created_at, status: o.status },
|
|
386
|
+
}));
|
|
387
|
+
children.push({
|
|
388
|
+
type: 'Stack',
|
|
389
|
+
props: { children: orderComps },
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
return {
|
|
393
|
+
type: 'Root',
|
|
394
|
+
props: { children },
|
|
395
|
+
children,
|
|
396
|
+
};
|
|
397
|
+
}
|
|
398
|
+
//# sourceMappingURL=OpenUiParser.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenUiParser.node.js","sourceRoot":"","sources":["../../../nodes/OpenUiParser/OpenUiParser.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { INodeType, INodeTypeDescription, INodeExecutionData, IExecuteFunctions } from 'n8n-workflow';
|
|
2
|
+
export declare class OpenUiPromptGenerator implements INodeType {
|
|
3
|
+
description: INodeTypeDescription;
|
|
4
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=OpenUiPromptGenerator.node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenUiPromptGenerator.node.d.ts","sourceRoot":"","sources":["../../../nodes/OpenUiPromptGenerator/OpenUiPromptGenerator.node.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,cAAc,CAAC;AAEtB,qBAAa,qBAAsB,YAAW,SAAS;IACrD,WAAW,EAAE,oBAAoB,CAiD/B;IAEI,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;CAgCxE"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OpenUiPromptGenerator = void 0;
|
|
4
|
+
class OpenUiPromptGenerator {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.description = {
|
|
7
|
+
displayName: 'OpenUI Prompt Generator',
|
|
8
|
+
name: 'openUiPromptGenerator',
|
|
9
|
+
group: ['transform'],
|
|
10
|
+
version: 1,
|
|
11
|
+
description: 'Generates system prompts with OpenUI Lang component library',
|
|
12
|
+
defaults: {
|
|
13
|
+
name: 'OpenUI Prompt Generator',
|
|
14
|
+
},
|
|
15
|
+
inputs: ['main'],
|
|
16
|
+
outputs: ['main'],
|
|
17
|
+
properties: [
|
|
18
|
+
{
|
|
19
|
+
displayName: 'Component Library',
|
|
20
|
+
name: 'componentLibrary',
|
|
21
|
+
type: 'json',
|
|
22
|
+
default: '',
|
|
23
|
+
description: 'JSON array of component definitions. Leave empty to use built-in defaults.',
|
|
24
|
+
placeholder: '[{"name": "ProductCard", "props": ["title", "image", "price"]}]',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
displayName: 'Additional Instructions',
|
|
28
|
+
name: 'additionalInstructions',
|
|
29
|
+
type: 'string',
|
|
30
|
+
default: '',
|
|
31
|
+
description: 'Extra instructions to include in the system prompt',
|
|
32
|
+
typeOptions: {
|
|
33
|
+
rows: 3,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
displayName: 'Output Format',
|
|
38
|
+
name: 'outputFormat',
|
|
39
|
+
type: 'options',
|
|
40
|
+
options: [
|
|
41
|
+
{
|
|
42
|
+
name: 'System Prompt',
|
|
43
|
+
value: 'systemPrompt',
|
|
44
|
+
description: 'Output a complete system prompt string',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'JSON',
|
|
48
|
+
value: 'json',
|
|
49
|
+
description: 'Output the component library as JSON for inspection',
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
default: 'systemPrompt',
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
async execute() {
|
|
58
|
+
const items = this.getInputData();
|
|
59
|
+
const returnData = [];
|
|
60
|
+
for (let i = 0; i < items.length; i++) {
|
|
61
|
+
const componentLibrary = this.getNodeParameter('componentLibrary', i, '');
|
|
62
|
+
const additionalInstructions = this.getNodeParameter('additionalInstructions', i, '');
|
|
63
|
+
const outputFormat = this.getNodeParameter('outputFormat', i, 'systemPrompt');
|
|
64
|
+
const library = componentLibrary
|
|
65
|
+
? JSON.parse(componentLibrary)
|
|
66
|
+
: getDefaultComponentLibrary();
|
|
67
|
+
if (outputFormat === 'json') {
|
|
68
|
+
returnData.push({
|
|
69
|
+
json: {
|
|
70
|
+
componentLibrary: library,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
const systemPrompt = generateSystemPrompt(library, additionalInstructions);
|
|
76
|
+
returnData.push({
|
|
77
|
+
json: {
|
|
78
|
+
systemPrompt,
|
|
79
|
+
componentLibrary: library,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return [returnData];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.OpenUiPromptGenerator = OpenUiPromptGenerator;
|
|
88
|
+
function getDefaultComponentLibrary() {
|
|
89
|
+
return [
|
|
90
|
+
{
|
|
91
|
+
name: 'ProductCard',
|
|
92
|
+
description: 'Displays a product with image, title, price, and optional description',
|
|
93
|
+
props: [
|
|
94
|
+
{ name: 'title', type: 'string', description: 'Product name', required: true },
|
|
95
|
+
{ name: 'image', type: 'string', description: 'Image URL', required: true },
|
|
96
|
+
{ name: 'price', type: 'string', description: 'Price display text', required: true },
|
|
97
|
+
{ name: 'handle', type: 'string', description: 'Product handle/slug', required: true },
|
|
98
|
+
{ name: 'description', type: 'string', description: 'Short description', required: false },
|
|
99
|
+
],
|
|
100
|
+
example: 'product = ProductCard("Summer Tee", "https://example.com/img.jpg", "$29.99", "summer-tee")',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
name: 'BookingCard',
|
|
104
|
+
description: 'Displays a calendar booking with time, attendees, and status',
|
|
105
|
+
props: [
|
|
106
|
+
{ name: 'summary', type: 'string', description: 'Booking title', required: true },
|
|
107
|
+
{ name: 'start', type: 'string', description: 'Start datetime ISO string', required: true },
|
|
108
|
+
{ name: 'end', type: 'string', description: 'End datetime ISO string', required: true },
|
|
109
|
+
{ name: 'status', type: 'string', description: 'Status: confirmed, pending, cancelled', required: true },
|
|
110
|
+
{ name: 'attendees', type: 'string', description: 'Comma-separated attendee list', required: false },
|
|
111
|
+
{ name: 'meet_url', type: 'string', description: 'Meeting URL', required: false },
|
|
112
|
+
],
|
|
113
|
+
example: 'booking = BookingCard("Team Sync", "2024-01-15T10:00:00Z", "2024-01-15T11:00:00Z", "confirmed")',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
name: 'EventCard',
|
|
117
|
+
description: 'Displays a calendar event with time and status',
|
|
118
|
+
props: [
|
|
119
|
+
{ name: 'summary', type: 'string', description: 'Event title', required: true },
|
|
120
|
+
{ name: 'start', type: 'string', description: 'Start datetime ISO string', required: true },
|
|
121
|
+
{ name: 'end', type: 'string', description: 'End datetime ISO string', required: true },
|
|
122
|
+
{ name: 'status', type: 'string', description: 'Status: confirmed, tentative, cancelled', required: true },
|
|
123
|
+
],
|
|
124
|
+
example: 'event = EventCard("Product Launch", "2024-02-01T14:00:00Z", "2024-02-01T16:00:00Z", "confirmed")',
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
name: 'TaskCard',
|
|
128
|
+
description: 'Displays a task with title and optional notes',
|
|
129
|
+
props: [
|
|
130
|
+
{ name: 'title', type: 'string', description: 'Task title', required: true },
|
|
131
|
+
{ name: 'notes', type: 'string', description: 'Additional notes', required: false },
|
|
132
|
+
],
|
|
133
|
+
example: 'task = TaskCard("Review PR", "Check for security issues")',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
name: 'OrderCard',
|
|
137
|
+
description: 'Displays an order with ID, total, and status',
|
|
138
|
+
props: [
|
|
139
|
+
{ name: 'id', type: 'string', description: 'Order ID', required: true },
|
|
140
|
+
{ name: 'name', type: 'string', description: 'Order/customer name', required: true },
|
|
141
|
+
{ name: 'total_price', type: 'string', description: 'Total price display', required: true },
|
|
142
|
+
{ name: 'created_at', type: 'string', description: 'Creation date ISO string', required: true },
|
|
143
|
+
{ name: 'status', type: 'string', description: 'Status: pending, processing, shipped, delivered', required: true },
|
|
144
|
+
],
|
|
145
|
+
example: 'order = OrderCard("ORD-123", "John Doe", "$149.99", "2024-01-10T09:00:00Z", "shipped")',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: 'Stack',
|
|
149
|
+
description: 'Vertical or horizontal layout container',
|
|
150
|
+
props: [
|
|
151
|
+
{ name: 'children', type: 'array', description: 'Child components', required: true },
|
|
152
|
+
{ name: 'direction', type: 'string', description: 'row or column (default)', required: false },
|
|
153
|
+
{ name: 'gap', type: 'string', description: 'Gap size: s, m, l', required: false },
|
|
154
|
+
],
|
|
155
|
+
example: 'layout = Stack([product1, product2], "row", "m")',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'Text',
|
|
159
|
+
description: 'Text content with optional markdown',
|
|
160
|
+
props: [
|
|
161
|
+
{ name: 'content', type: 'string', description: 'Text content', required: true },
|
|
162
|
+
{ name: 'variant', type: 'string', description: 'heading, body, caption', required: false },
|
|
163
|
+
],
|
|
164
|
+
example: 'heading = Text("Here are your products:", "heading")',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'Card',
|
|
168
|
+
description: 'Generic card container with optional title',
|
|
169
|
+
props: [
|
|
170
|
+
{ name: 'children', type: 'array', description: 'Child components', required: true },
|
|
171
|
+
{ name: 'title', type: 'string', description: 'Optional card title', required: false },
|
|
172
|
+
],
|
|
173
|
+
example: 'card = Card([product1, product2], "Recommended Products")',
|
|
174
|
+
},
|
|
175
|
+
];
|
|
176
|
+
}
|
|
177
|
+
function generateSystemPrompt(library, additionalInstructions) {
|
|
178
|
+
const componentDefs = library.map(c => {
|
|
179
|
+
const propsList = c.props
|
|
180
|
+
.map(p => ` - ${p.name} (${p.type}${p.required ? ', required' : ''}): ${p.description}`)
|
|
181
|
+
.join('\n');
|
|
182
|
+
return `### ${c.name}\n${c.description}\nProps:\n${propsList}\nExample: ${c.example}`;
|
|
183
|
+
}).join('\n\n');
|
|
184
|
+
return `You are a helpful assistant that responds with structured UI using OpenUI Lang.
|
|
185
|
+
|
|
186
|
+
## OpenUI Lang Syntax
|
|
187
|
+
|
|
188
|
+
OpenUI Lang is a line-oriented language for generating UI. Each line is an assignment:
|
|
189
|
+
\`\`\`
|
|
190
|
+
identifier = Component(args...)
|
|
191
|
+
\`\`\`
|
|
192
|
+
|
|
193
|
+
### Core Rules
|
|
194
|
+
1. One statement per line
|
|
195
|
+
2. Root entry point: \`root = Root([children])\`
|
|
196
|
+
3. Positional arguments map to props in order
|
|
197
|
+
4. Forward references are allowed (define root first, then components)
|
|
198
|
+
5. Use strings for text values, numbers for numeric values
|
|
199
|
+
6. Arrays use square brackets: [item1, item2]
|
|
200
|
+
|
|
201
|
+
### Available Components
|
|
202
|
+
|
|
203
|
+
${componentDefs}
|
|
204
|
+
|
|
205
|
+
### Output Format
|
|
206
|
+
|
|
207
|
+
Always output OpenUI Lang, not JSON or markdown. Start with the root component, then define each component on its own line.
|
|
208
|
+
|
|
209
|
+
Example response for showing 2 products:
|
|
210
|
+
\`\`\`
|
|
211
|
+
root = Stack([heading, productGrid])
|
|
212
|
+
heading = Text("Here are the products you requested:", "heading")
|
|
213
|
+
productGrid = Stack([product1, product2], "row", "m")
|
|
214
|
+
product1 = ProductCard("Summer Tee", "https://example.com/tee.jpg", "$29.99", "summer-tee", "A comfortable cotton tee")
|
|
215
|
+
product2 = ProductCard("Classic Hoodie", "https://example.com/hoodie.jpg", "$49.99", "classic-hoodie", "Warm fleece hoodie")
|
|
216
|
+
\`\`\`
|
|
217
|
+
|
|
218
|
+
### Important Rules
|
|
219
|
+
- Always include a root component
|
|
220
|
+
- Use only the components defined above
|
|
221
|
+
- Provide all required props
|
|
222
|
+
- Keep responses concise and relevant to the user's query
|
|
223
|
+
- Do NOT output JSON, markdown code blocks, or plain text - only OpenUI Lang
|
|
224
|
+
|
|
225
|
+
${additionalInstructions ? `\n## Additional Instructions\n${additionalInstructions}` : ''}`;
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=OpenUiPromptGenerator.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenUiPromptGenerator.node.js","sourceRoot":"","sources":["../../../nodes/OpenUiPromptGenerator/OpenUiPromptGenerator.node.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "n8n-nodes-openui",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "n8n nodes for OpenUI generative UI integration",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "tsc",
|
|
10
|
+
"dev": "tsc --watch",
|
|
11
|
+
"clean": "rm -rf dist",
|
|
12
|
+
"lint": "eslint nodes/ --ext .ts",
|
|
13
|
+
"test": "vitest run"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"n8n": {
|
|
19
|
+
"nodes": [
|
|
20
|
+
"dist/nodes/OpenUiPromptGenerator/OpenUiPromptGenerator.node.js",
|
|
21
|
+
"dist/nodes/OpenUiParser/OpenUiParser.node.js"
|
|
22
|
+
],
|
|
23
|
+
"credentials": []
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"n8n-workflow": "*"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {
|
|
29
|
+
"@openuidev/react-lang": "^0.1.0"
|
|
30
|
+
},
|
|
31
|
+
"devDependencies": {
|
|
32
|
+
"@types/node": "^20.0.0",
|
|
33
|
+
"n8n-workflow": "latest",
|
|
34
|
+
"typescript": "^5.5.0",
|
|
35
|
+
"vitest": "^2.0.0"
|
|
36
|
+
},
|
|
37
|
+
"keywords": [
|
|
38
|
+
"n8n",
|
|
39
|
+
"n8n-community-node",
|
|
40
|
+
"openui",
|
|
41
|
+
"generative-ui",
|
|
42
|
+
"ai"
|
|
43
|
+
]
|
|
44
|
+
}
|