@adonis-agora/agent 0.72.0 → 0.74.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/CHANGELOG.md +20 -0
- package/dist/configure.d.ts +5 -4
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +8 -4
- package/dist/configure.js.map +1 -1
- package/dist/providers/agent_provider.d.ts.map +1 -1
- package/dist/providers/agent_provider.js +5 -1
- package/dist/providers/agent_provider.js.map +1 -1
- package/dist/src/a2ui/adapter.d.ts.map +1 -1
- package/dist/src/a2ui/adapter.js +1 -0
- package/dist/src/a2ui/adapter.js.map +1 -1
- package/dist/src/a2ui/core.d.ts.map +1 -1
- package/dist/src/a2ui/core.js +11 -1
- package/dist/src/a2ui/core.js.map +1 -1
- package/dist/src/action-proposal-executor.d.ts.map +1 -1
- package/dist/src/action-proposal-executor.js +3 -0
- package/dist/src/action-proposal-executor.js.map +1 -1
- package/dist/src/ag-ui/adapter.d.ts.map +1 -1
- package/dist/src/ag-ui/adapter.js +2 -0
- package/dist/src/ag-ui/adapter.js.map +1 -1
- package/dist/src/ag-ui/core/encoder.d.ts.map +1 -1
- package/dist/src/ag-ui/core/encoder.js +3 -0
- package/dist/src/ag-ui/core/encoder.js.map +1 -1
- package/dist/src/agent-loop.d.ts.map +1 -1
- package/dist/src/agent-loop.js +18 -0
- package/dist/src/agent-loop.js.map +1 -1
- package/dist/src/agent-service.d.ts +6 -0
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +5 -3
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/channels/adapters/evolution_api.d.ts.map +1 -1
- package/dist/src/channels/adapters/evolution_api.js +35 -0
- package/dist/src/channels/adapters/evolution_api.js.map +1 -1
- package/dist/src/channels/adapters/telegram.d.ts.map +1 -1
- package/dist/src/channels/adapters/telegram.js +25 -7
- package/dist/src/channels/adapters/telegram.js.map +1 -1
- package/dist/src/channels/adapters/whatsapp_cloud.d.ts.map +1 -1
- package/dist/src/channels/adapters/whatsapp_cloud.js +44 -0
- package/dist/src/channels/adapters/whatsapp_cloud.js.map +1 -1
- package/dist/src/channels/handler.d.ts +21 -1
- package/dist/src/channels/handler.d.ts.map +1 -1
- package/dist/src/channels/handler.js +230 -9
- package/dist/src/channels/handler.js.map +1 -1
- package/dist/src/channels/index.d.ts +2 -2
- package/dist/src/channels/index.d.ts.map +1 -1
- package/dist/src/channels/index.js.map +1 -1
- package/dist/src/channels/types.d.ts +40 -0
- package/dist/src/channels/types.d.ts.map +1 -1
- package/dist/src/genui/catalog.d.ts +12 -1
- package/dist/src/genui/catalog.d.ts.map +1 -1
- package/dist/src/genui/catalog.js +12 -1
- package/dist/src/genui/catalog.js.map +1 -1
- package/dist/src/genui/channels.d.ts +206 -0
- package/dist/src/genui/channels.d.ts.map +1 -0
- package/dist/src/genui/channels.js +322 -0
- package/dist/src/genui/channels.js.map +1 -0
- package/dist/src/genui/chart-image.d.ts +46 -0
- package/dist/src/genui/chart-image.d.ts.map +1 -0
- package/dist/src/genui/chart-image.js +155 -0
- package/dist/src/genui/chart-image.js.map +1 -0
- package/dist/src/genui/factory.d.ts +23 -1
- package/dist/src/genui/factory.d.ts.map +1 -1
- package/dist/src/genui/factory.js +13 -1
- package/dist/src/genui/factory.js.map +1 -1
- package/dist/src/genui/index.d.ts.map +1 -1
- package/dist/src/genui/index.js +64 -3
- package/dist/src/genui/index.js.map +1 -1
- package/dist/src/genui/kit/adonis.d.ts +4 -0
- package/dist/src/genui/kit/adonis.d.ts.map +1 -0
- package/dist/src/genui/kit/adonis.js +38 -0
- package/dist/src/genui/kit/adonis.js.map +1 -0
- package/dist/src/genui/kit/bundle.d.ts +25 -0
- package/dist/src/genui/kit/bundle.d.ts.map +1 -0
- package/dist/src/genui/kit/bundle.js +144 -0
- package/dist/src/genui/kit/bundle.js.map +1 -0
- package/dist/src/genui/kit/discover.d.ts +41 -0
- package/dist/src/genui/kit/discover.d.ts.map +1 -0
- package/dist/src/genui/kit/discover.js +100 -0
- package/dist/src/genui/kit/discover.js.map +1 -0
- package/dist/src/genui/kit/docs.d.ts +22 -0
- package/dist/src/genui/kit/docs.d.ts.map +1 -0
- package/dist/src/genui/kit/docs.js +237 -0
- package/dist/src/genui/kit/docs.js.map +1 -0
- package/dist/src/genui/kit/files.d.ts +27 -0
- package/dist/src/genui/kit/files.d.ts.map +1 -0
- package/dist/src/genui/kit/files.js +126 -0
- package/dist/src/genui/kit/files.js.map +1 -0
- package/dist/src/genui/kit/index.d.ts +12 -0
- package/dist/src/genui/kit/index.d.ts.map +1 -0
- package/dist/src/genui/kit/index.js +12 -0
- package/dist/src/genui/kit/index.js.map +1 -0
- package/dist/src/genui/kit/plugin.d.ts +52 -0
- package/dist/src/genui/kit/plugin.d.ts.map +1 -0
- package/dist/src/genui/kit/plugin.js +314 -0
- package/dist/src/genui/kit/plugin.js.map +1 -0
- package/dist/src/genui/kit/write.d.ts +14 -0
- package/dist/src/genui/kit/write.d.ts.map +1 -0
- package/dist/src/genui/kit/write.js +39 -0
- package/dist/src/genui/kit/write.js.map +1 -0
- package/dist/src/genui/public.d.ts +7 -3
- package/dist/src/genui/public.d.ts.map +1 -1
- package/dist/src/genui/public.js +5 -1
- package/dist/src/genui/public.js.map +1 -1
- package/dist/src/genui/sandbox-jsx.d.ts +29 -0
- package/dist/src/genui/sandbox-jsx.d.ts.map +1 -0
- package/dist/src/genui/sandbox-jsx.js +656 -0
- package/dist/src/genui/sandbox-jsx.js.map +1 -0
- package/dist/src/genui/sandbox-kit.d.ts +88 -0
- package/dist/src/genui/sandbox-kit.d.ts.map +1 -0
- package/dist/src/genui/sandbox-kit.js +89 -0
- package/dist/src/genui/sandbox-kit.js.map +1 -0
- package/dist/src/genui/sandbox-theme.d.ts +61 -0
- package/dist/src/genui/sandbox-theme.d.ts.map +1 -0
- package/dist/src/genui/sandbox-theme.js +255 -0
- package/dist/src/genui/sandbox-theme.js.map +1 -0
- package/dist/src/genui/sandbox.d.ts +73 -2
- package/dist/src/genui/sandbox.d.ts.map +1 -1
- package/dist/src/genui/sandbox.js +87 -14
- package/dist/src/genui/sandbox.js.map +1 -1
- package/dist/src/genui/text.d.ts.map +1 -1
- package/dist/src/genui/text.js +33 -1
- package/dist/src/genui/text.js.map +1 -1
- package/dist/src/genui/tools.d.ts +26 -0
- package/dist/src/genui/tools.d.ts.map +1 -1
- package/dist/src/genui/tools.js +94 -14
- package/dist/src/genui/tools.js.map +1 -1
- package/dist/src/genui/tree.d.ts +25 -2
- package/dist/src/genui/tree.d.ts.map +1 -1
- package/dist/src/genui/tree.js +161 -4
- package/dist/src/genui/tree.js.map +1 -1
- package/dist/src/hooks/genui_kit.d.ts +20 -0
- package/dist/src/hooks/genui_kit.d.ts.map +1 -0
- package/dist/src/hooks/genui_kit.js +55 -0
- package/dist/src/hooks/genui_kit.js.map +1 -0
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/react/core/genui/sandbox-assets.d.ts +32 -0
- package/dist/src/react/core/genui/sandbox-assets.d.ts.map +1 -0
- package/dist/src/react/core/genui/sandbox-assets.js +174 -0
- package/dist/src/react/core/genui/sandbox-assets.js.map +1 -0
- package/dist/src/react/core/genui/sandbox.d.ts +9 -0
- package/dist/src/react/core/genui/sandbox.d.ts.map +1 -1
- package/dist/src/react/core/genui/sandbox.js +115 -19
- package/dist/src/react/core/genui/sandbox.js.map +1 -1
- package/dist/src/react/core/index.d.ts +1 -1
- package/dist/src/react/core/index.d.ts.map +1 -1
- package/dist/src/react/core/index.js +1 -1
- package/dist/src/react/core/index.js.map +1 -1
- package/dist/src/react/core/presentation/phrasing.d.ts +3 -2
- package/dist/src/react/core/presentation/phrasing.d.ts.map +1 -1
- package/dist/src/react/core/presentation/phrasing.js +4 -27
- package/dist/src/react/core/presentation/phrasing.js.map +1 -1
- package/dist/src/react/core/presentation/tool-activity.d.ts +8 -0
- package/dist/src/react/core/presentation/tool-activity.d.ts.map +1 -1
- package/dist/src/react/core/presentation/tool-activity.js +28 -1
- package/dist/src/react/core/presentation/tool-activity.js.map +1 -1
- package/dist/src/react/core/transcript/model.d.ts +6 -0
- package/dist/src/react/core/transcript/model.d.ts.map +1 -1
- package/dist/src/react/core/transcript/model.js +6 -1
- package/dist/src/react/core/transcript/model.js.map +1 -1
- package/dist/src/react/core/transcript/use-chat-transcript.d.ts +5 -0
- package/dist/src/react/core/transcript/use-chat-transcript.d.ts.map +1 -1
- package/dist/src/react/core/transcript/use-chat-transcript.js +3 -0
- package/dist/src/react/core/transcript/use-chat-transcript.js.map +1 -1
- package/dist/src/spi/tool.d.ts +7 -0
- package/dist/src/spi/tool.d.ts.map +1 -1
- package/dist/src/tool-presentation.d.ts +15 -0
- package/dist/src/tool-presentation.d.ts.map +1 -1
- package/dist/src/tool-presentation.js +48 -0
- package/dist/src/tool-presentation.js.map +1 -1
- package/dist/src/tool-registry.d.ts.map +1 -1
- package/dist/src/tool-registry.js +2 -0
- package/dist/src/tool-registry.js.map +1 -1
- package/dist/src/types.d.ts +10 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/vite/index.d.ts +24 -0
- package/dist/src/vite/index.d.ts.map +1 -0
- package/dist/src/vite/index.js +29 -0
- package/dist/src/vite/index.js.map +1 -0
- package/package.json +38 -2
- package/skills/agent-setup/SKILL.md +3 -1
- package/skills/agent-tools/SKILL.md +5 -3
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
const PALETTE = ['#2563eb', '#16a34a', '#f59e0b', '#dc2626', '#7c3aed', '#0891b2'];
|
|
2
|
+
function escapeXml(text) {
|
|
3
|
+
return text
|
|
4
|
+
.replace(/&/g, '&')
|
|
5
|
+
.replace(/</g, '<')
|
|
6
|
+
.replace(/>/g, '>')
|
|
7
|
+
.replace(/"/g, '"');
|
|
8
|
+
}
|
|
9
|
+
function cell(value) {
|
|
10
|
+
return value === null || value === undefined ? '' : String(value);
|
|
11
|
+
}
|
|
12
|
+
/** A round axis maximum: 1, 2, 2.5 or 5 times a power of ten, at least `value`. */
|
|
13
|
+
function niceMax(value) {
|
|
14
|
+
if (value <= 0)
|
|
15
|
+
return 1;
|
|
16
|
+
const power = 10 ** Math.floor(Math.log10(value));
|
|
17
|
+
for (const step of [1, 2, 2.5, 5, 10])
|
|
18
|
+
if (value <= step * power)
|
|
19
|
+
return step * power;
|
|
20
|
+
return 10 * power;
|
|
21
|
+
}
|
|
22
|
+
function formatNumber(value) {
|
|
23
|
+
if (Math.abs(value) >= 1_000_000)
|
|
24
|
+
return `${+(value / 1_000_000).toFixed(1)}M`;
|
|
25
|
+
if (Math.abs(value) >= 10_000)
|
|
26
|
+
return `${+(value / 1000).toFixed(1)}k`;
|
|
27
|
+
return `${+value.toFixed(2)}`;
|
|
28
|
+
}
|
|
29
|
+
/** The builtin `Chart` as an SVG document: axes, gridlines, bars or lines, a legend for 2+ series. */
|
|
30
|
+
export function chartSvg(props, options = {}) {
|
|
31
|
+
const width = options.width ?? 800;
|
|
32
|
+
const height = options.height ?? 450;
|
|
33
|
+
const colors = options.colors ?? PALETTE;
|
|
34
|
+
const fg = options.foreground ?? '#1f2328';
|
|
35
|
+
const font = escapeXml(options.fontFamily ??
|
|
36
|
+
"Inter, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'DejaVu Sans', 'Liberation Sans', sans-serif");
|
|
37
|
+
const series = (props.series ?? []).slice(0, 6);
|
|
38
|
+
const data = (props.data ?? []).slice(0, 60);
|
|
39
|
+
const value = (point, key) => {
|
|
40
|
+
const number = Number(point[key]);
|
|
41
|
+
return Number.isFinite(number) ? number : 0;
|
|
42
|
+
};
|
|
43
|
+
const top = props.title ? 56 : 24;
|
|
44
|
+
const legend = series.length > 1 ? 28 : 0;
|
|
45
|
+
const left = 64;
|
|
46
|
+
const right = 24;
|
|
47
|
+
const bottom = 56 + legend;
|
|
48
|
+
const plotW = width - left - right;
|
|
49
|
+
const plotH = height - top - bottom;
|
|
50
|
+
const values = data.flatMap((point) => series.map((each) => value(point, each.key)));
|
|
51
|
+
const max = niceMax(Math.max(0, ...values));
|
|
52
|
+
const min = Math.min(0, ...values);
|
|
53
|
+
const span = max - min || 1;
|
|
54
|
+
const y = (v) => top + plotH - ((v - min) / span) * plotH;
|
|
55
|
+
const out = [
|
|
56
|
+
`<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}" font-family="${font}">`,
|
|
57
|
+
`<rect width="100%" height="100%" fill="${escapeXml(options.background ?? '#ffffff')}"/>`,
|
|
58
|
+
];
|
|
59
|
+
if (props.title) {
|
|
60
|
+
out.push(`<text x="${left}" y="34" font-size="26" font-weight="600" fill="${fg}">${escapeXml(props.title)}</text>`);
|
|
61
|
+
}
|
|
62
|
+
for (let i = 0; i <= 4; i++) {
|
|
63
|
+
const v = min + (span * i) / 4;
|
|
64
|
+
const gy = y(v);
|
|
65
|
+
out.push(`<line x1="${left}" x2="${left + plotW}" y1="${gy}" y2="${gy}" stroke="${fg}" stroke-opacity="0.12"/>`, `<text x="${left - 8}" y="${gy + 4}" font-size="15" text-anchor="end" fill="${fg}" fill-opacity="0.7">${escapeXml(formatNumber(v))}${props.unit ? escapeXml(` ${props.unit}`) : ''}</text>`);
|
|
66
|
+
}
|
|
67
|
+
const n = Math.max(1, data.length);
|
|
68
|
+
const slot = plotW / n;
|
|
69
|
+
const labelEvery = Math.max(1, Math.ceil(n / 12));
|
|
70
|
+
data.forEach((point, index) => {
|
|
71
|
+
if (index % labelEvery !== 0)
|
|
72
|
+
return;
|
|
73
|
+
const label = cell(point[props.xKey]).slice(0, 14);
|
|
74
|
+
out.push(`<text x="${left + slot * index + slot / 2}" y="${top + plotH + 20}" font-size="15" text-anchor="middle" fill="${fg}" fill-opacity="0.8">${escapeXml(label)}</text>`);
|
|
75
|
+
});
|
|
76
|
+
if (props.type === 'line') {
|
|
77
|
+
series.forEach((each, s) => {
|
|
78
|
+
const points = data.map((point, index) => `${left + slot * index + slot / 2},${y(value(point, each.key))}`);
|
|
79
|
+
const color = colors[s % colors.length];
|
|
80
|
+
out.push(`<polyline fill="none" stroke="${color}" stroke-width="3" stroke-linejoin="round" points="${points.join(' ')}"/>`);
|
|
81
|
+
for (const p of points) {
|
|
82
|
+
const [cx, cy] = p.split(',');
|
|
83
|
+
out.push(`<circle cx="${cx}" cy="${cy}" r="3.5" fill="${color}"/>`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
const groupW = slot * 0.75;
|
|
89
|
+
const barW = groupW / Math.max(1, series.length);
|
|
90
|
+
data.forEach((point, index) => {
|
|
91
|
+
series.forEach((each, s) => {
|
|
92
|
+
const v = value(point, each.key);
|
|
93
|
+
const x = left + slot * index + (slot - groupW) / 2 + barW * s;
|
|
94
|
+
const y0 = y(Math.max(0, min));
|
|
95
|
+
const y1 = y(v);
|
|
96
|
+
out.push(`<rect x="${x}" y="${Math.min(y0, y1)}" width="${Math.max(1, barW - 2)}" height="${Math.abs(y0 - y1)}" rx="2" fill="${colors[s % colors.length]}"/>`);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
out.push(`<line x1="${left}" x2="${left + plotW}" y1="${y(Math.max(0, min))}" y2="${y(Math.max(0, min))}" stroke="${fg}" stroke-opacity="0.4"/>`);
|
|
101
|
+
if (legend > 0) {
|
|
102
|
+
let x = left;
|
|
103
|
+
const ly = height - 18;
|
|
104
|
+
series.forEach((each, s) => {
|
|
105
|
+
const label = escapeXml(each.label || each.key);
|
|
106
|
+
out.push(`<rect x="${x}" y="${ly - 10}" width="12" height="12" rx="2" fill="${colors[s % colors.length]}"/>`, `<text x="${x + 18}" y="${ly}" font-size="15" fill="${fg}">${label}</text>`);
|
|
107
|
+
x += 34 + label.length * 9;
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
out.push('</svg>');
|
|
111
|
+
return out.join('');
|
|
112
|
+
}
|
|
113
|
+
let resvg;
|
|
114
|
+
async function loadResvg() {
|
|
115
|
+
const id = '@resvg/resvg-js';
|
|
116
|
+
resvg ??= import(/* @vite-ignore */ id).catch((error) => {
|
|
117
|
+
resvg = undefined;
|
|
118
|
+
throw new Error(`genui: chartImages() needs the optional peer dependency @resvg/resvg-js (npm i @resvg/resvg-js): ${error instanceof Error ? error.message : String(error)}`);
|
|
119
|
+
});
|
|
120
|
+
return resvg;
|
|
121
|
+
}
|
|
122
|
+
/** SVG → PNG bytes, with `@resvg/resvg-js`. */
|
|
123
|
+
export async function svgToPng(svg, options = {}) {
|
|
124
|
+
const { Resvg } = await loadResvg();
|
|
125
|
+
const renderer = new Resvg(svg, {
|
|
126
|
+
...(options.width !== undefined ? { fitTo: { mode: 'width', value: options.width } } : {}),
|
|
127
|
+
font: {
|
|
128
|
+
loadSystemFonts: true,
|
|
129
|
+
...(options.fontFiles !== undefined ? { fontFiles: [...options.fontFiles] } : {}),
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
return renderer.render().asPng();
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Charts as PNG images on a channel (`genui({ channels: { whatsapp: { chartImages: chartImages() } } })`).
|
|
136
|
+
* A chart the renderer cannot draw (resvg missing, bad props) falls back to its text summary.
|
|
137
|
+
*/
|
|
138
|
+
export function chartImages(options = {}) {
|
|
139
|
+
const components = Object.freeze([...(options.components ?? ['Chart'])]);
|
|
140
|
+
return {
|
|
141
|
+
components,
|
|
142
|
+
async render(component, props) {
|
|
143
|
+
if (!components.includes(component))
|
|
144
|
+
return null;
|
|
145
|
+
const chart = props;
|
|
146
|
+
if (!Array.isArray(chart.data) || !Array.isArray(chart.series) || chart.data.length === 0)
|
|
147
|
+
return null;
|
|
148
|
+
const png = await svgToPng(chartSvg(chart, options), {
|
|
149
|
+
...(options.fontFiles !== undefined ? { fontFiles: options.fontFiles } : {}),
|
|
150
|
+
});
|
|
151
|
+
return { data: png, contentType: 'image/png' };
|
|
152
|
+
},
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=chart-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chart-image.js","sourceRoot":"","sources":["../../../src/genui/chart-image.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
/** Framework-independent wiring for the local Adonis GenUI catalog and provider. */
|
|
2
2
|
import type { FunctionalTool } from '../ai-tool-ref.js';
|
|
3
3
|
import type { Catalog } from './catalog.js';
|
|
4
|
+
import type { GenuiChannelBase, GenuiChannels } from './channels.js';
|
|
5
|
+
import type { SandboxClientConfig } from './sandbox-kit.js';
|
|
4
6
|
import type { GenuiCatalogScope } from './tools.js';
|
|
5
7
|
/** What the provider hands a {@link GenuiFactory} at boot. */
|
|
6
8
|
export interface GenuiFactoryContext {
|
|
@@ -9,6 +11,8 @@ export interface GenuiFactoryContext {
|
|
|
9
11
|
* dependencies). The provider passes `app.container.make`.
|
|
10
12
|
*/
|
|
11
13
|
make<T>(klass: abstract new (...args: never[]) => T): Promise<T>;
|
|
14
|
+
/** The Adonis application — where the sandbox kit is looked up (its Vite setup). */
|
|
15
|
+
app?: unknown;
|
|
12
16
|
}
|
|
13
17
|
/** What a {@link GenuiFactory} produces: the tools to register, and the boot-time catalog. */
|
|
14
18
|
export interface GenuiSetup {
|
|
@@ -16,6 +20,12 @@ export interface GenuiSetup {
|
|
|
16
20
|
tools: FunctionalTool[];
|
|
17
21
|
/** The boot-time catalog, bound in the container as `AgentGenui`. */
|
|
18
22
|
catalog: Catalog;
|
|
23
|
+
/** `genui({ channels })` — what text channels read to draw natively. */
|
|
24
|
+
channels?: GenuiChannels;
|
|
25
|
+
/** The top-level mode, streaming and sandbox a channel falls back to. */
|
|
26
|
+
base?: GenuiChannelBase;
|
|
27
|
+
/** What the sandbox renderer is told (`GET <agent>/config` → `genui.sandbox`). */
|
|
28
|
+
sandboxClient?: () => SandboxClientConfig;
|
|
19
29
|
}
|
|
20
30
|
/**
|
|
21
31
|
* `genui` in `config/agent.ts`: a lazy factory, built by `genui({ … })` from
|
|
@@ -29,6 +39,18 @@ export type GenuiFactory = (ctx: GenuiFactoryContext) => Promise<GenuiSetup>;
|
|
|
29
39
|
export declare class AgentGenui {
|
|
30
40
|
readonly catalog: Catalog;
|
|
31
41
|
readonly resolveCatalog?: GenuiSetup['resolveCatalog'];
|
|
32
|
-
|
|
42
|
+
/** `genui({ channels })`, when configured. */
|
|
43
|
+
readonly channels?: GenuiChannels | undefined;
|
|
44
|
+
/** The top-level options a channel falls back to. */
|
|
45
|
+
readonly base: GenuiChannelBase;
|
|
46
|
+
/** What the sandbox renderer is told, when a sandbox is configured. */
|
|
47
|
+
readonly sandboxClient?: (() => SandboxClientConfig) | undefined;
|
|
48
|
+
constructor(catalog: Catalog, resolveCatalog?: GenuiSetup['resolveCatalog'],
|
|
49
|
+
/** `genui({ channels })`, when configured. */
|
|
50
|
+
channels?: GenuiChannels | undefined,
|
|
51
|
+
/** The top-level options a channel falls back to. */
|
|
52
|
+
base?: GenuiChannelBase,
|
|
53
|
+
/** What the sandbox renderer is told, when a sandbox is configured. */
|
|
54
|
+
sandboxClient?: (() => SandboxClientConfig) | undefined);
|
|
33
55
|
}
|
|
34
56
|
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/genui/factory.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/genui/factory.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACjE,oFAAoF;IACpF,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,8FAA8F;AAC9F,MAAM,WAAW,UAAU;IACzB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,qEAAqE;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,yEAAyE;IACzE,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,kFAAkF;IAClF,aAAa,CAAC,EAAE,MAAM,mBAAmB,CAAC;CAC3C;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAE7E;;;GAGG;AACH,qBAAa,UAAU;IAEnB,QAAQ,CAAC,OAAO,EAAE,OAAO;IACzB,QAAQ,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC;IACtD,8CAA8C;IAC9C,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa;IACjC,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,gBAAgB;IAC/B,uEAAuE;IACvE,QAAQ,CAAC,aAAa,CAAC,GAAE,MAAM,mBAAmB;IARpD,YACW,OAAO,EAAE,OAAO,EAChB,cAAc,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC;IACtD,8CAA8C;IACrC,QAAQ,CAAC,EAAE,aAAa,YAAA;IACjC,qDAAqD;IAC5C,IAAI,GAAE,gBAAqB;IACpC,uEAAuE;IAC9D,aAAa,CAAC,GAAE,MAAM,mBAAmB,aAAA,EAChD;CACL"}
|
|
@@ -5,9 +5,21 @@
|
|
|
5
5
|
export class AgentGenui {
|
|
6
6
|
catalog;
|
|
7
7
|
resolveCatalog;
|
|
8
|
-
|
|
8
|
+
channels;
|
|
9
|
+
base;
|
|
10
|
+
sandboxClient;
|
|
11
|
+
constructor(catalog, resolveCatalog,
|
|
12
|
+
/** `genui({ channels })`, when configured. */
|
|
13
|
+
channels,
|
|
14
|
+
/** The top-level options a channel falls back to. */
|
|
15
|
+
base = {},
|
|
16
|
+
/** What the sandbox renderer is told, when a sandbox is configured. */
|
|
17
|
+
sandboxClient) {
|
|
9
18
|
this.catalog = catalog;
|
|
10
19
|
this.resolveCatalog = resolveCatalog;
|
|
20
|
+
this.channels = channels;
|
|
21
|
+
this.base = base;
|
|
22
|
+
this.sandboxClient = sandboxClient;
|
|
11
23
|
}
|
|
12
24
|
}
|
|
13
25
|
//# sourceMappingURL=factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/genui/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../../src/genui/factory.ts"],"names":[],"mappings":"AAsCA;;;GAGG;AACH,MAAM,OAAO,UAAU;IAEV,OAAO;IACP,cAAc;IAEd,QAAQ;IAER,IAAI;IAEJ,aAAa;IARxB,YACW,OAAgB,EAChB,cAA6C;IACtD,8CAA8C;IACrC,QAAwB;IACjC,qDAAqD;IAC5C,IAAI,GAAqB,EAAE;IACpC,uEAAuE;IAC9D,aAAyC;uBAPzC,OAAO;8BACP,cAAc;wBAEd,QAAQ;oBAER,IAAI;6BAEJ,aAAa;IACrB,CAAC;CACL"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/genui/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/genui/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,YAAY,EAA4B,MAAM,cAAc,CAAC;AAE3E,OAAO,EACL,KAAK,OAAO,EAEZ,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAEvB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,oBAAoB,EAI1B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,UAAU,EACV,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC;AACtB,cAAc,aAAa,CAAC;AAE5B;;;;GAIG;AACH,8BAAsB,oBAAoB;IACxC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE;AAED,KAAK,cAAc,GACf,oBAAoB,GACpB,CAAC,QAAQ,MACP,GAAG,IAAI,EAAE,KAAK,EAAE,KACb,oBAAoB,CAAC,GAC1B,CAAC,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAE/D,iGAAiG;AACjG,MAAM,WAAW,YAAa,SAAQ,IAAI,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;IAC7E,yGAAyG;IACzG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB,CAAC;CAC1C;AAmCD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,KAAK,CAAC,OAAO,GAAE,YAAiB,GAAG,YAAY,CAqE9D"}
|
package/dist/src/genui/index.js
CHANGED
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
* Framework-independent GenUI owned by the Adonis agent: schemas, catalogs, presentations,
|
|
3
3
|
* renderers and UI tools. The same local definitions can be imported by browser code.
|
|
4
4
|
*/
|
|
5
|
+
import { assertGenuiChannels } from './channels.js';
|
|
5
6
|
import { defineCatalog, genuiTools, } from './public.js';
|
|
6
|
-
import { defineSandbox } from './sandbox.js';
|
|
7
|
+
import { defineSandbox, sandboxPolicyOf, } from './sandbox.js';
|
|
7
8
|
export { AgentGenui, } from './factory.js';
|
|
8
9
|
export * from './public.js';
|
|
9
10
|
/**
|
|
@@ -13,6 +14,19 @@ export * from './public.js';
|
|
|
13
14
|
*/
|
|
14
15
|
export class GenuiCatalogResolver {
|
|
15
16
|
}
|
|
17
|
+
/** What every configured sandbox (top level and channels) needs from the browser, together. */
|
|
18
|
+
function mergeSandboxClients(clients) {
|
|
19
|
+
const merged = { theme: false };
|
|
20
|
+
for (const client of clients) {
|
|
21
|
+
const one = client();
|
|
22
|
+
merged.theme ||= one.theme;
|
|
23
|
+
if (one.tailwind !== undefined)
|
|
24
|
+
merged.tailwind ??= one.tailwind;
|
|
25
|
+
if (one.kit !== undefined)
|
|
26
|
+
merged.kit ??= one.kit;
|
|
27
|
+
}
|
|
28
|
+
return merged;
|
|
29
|
+
}
|
|
16
30
|
function isResolverClass(value) {
|
|
17
31
|
return typeof value === 'function' && value.prototype instanceof GenuiCatalogResolver;
|
|
18
32
|
}
|
|
@@ -45,20 +59,67 @@ async function resolveCatalogFn(resolver, ctx) {
|
|
|
45
59
|
*/
|
|
46
60
|
export function genui(options = {}) {
|
|
47
61
|
return async (ctx) => {
|
|
48
|
-
const { catalog: given, resolver, sandbox, ...rest } = options;
|
|
62
|
+
const { catalog: given, resolver, sandbox: asked, channels: askedChannels, ...rest } = options;
|
|
63
|
+
assertGenuiChannels(askedChannels);
|
|
49
64
|
const base = given ?? defineCatalog([]);
|
|
65
|
+
// A sandbox's kit, Tailwind and theme names are found through the app's Vite setup.
|
|
66
|
+
const clients = [];
|
|
67
|
+
let discovery;
|
|
68
|
+
const resolveSandbox = async (value) => {
|
|
69
|
+
if (value === undefined || value === false)
|
|
70
|
+
return value;
|
|
71
|
+
// Node-only, and only with a sandbox: kept out of a browser bundle of this module.
|
|
72
|
+
const [{ adonisSandboxKitDiscovery }, { resolveSandboxServer }] = await Promise.all([
|
|
73
|
+
import('./kit/adonis.js'),
|
|
74
|
+
import('./kit/discover.js'),
|
|
75
|
+
]);
|
|
76
|
+
discovery ??= await adonisSandboxKitDiscovery(ctx.app);
|
|
77
|
+
const resolved = resolveSandboxServer(value, discovery);
|
|
78
|
+
clients.push(resolved.client);
|
|
79
|
+
return resolved.define;
|
|
80
|
+
};
|
|
81
|
+
const sandbox = await resolveSandbox(asked);
|
|
82
|
+
// A kit or Tailwind sandbox defined in the (shared) catalog itself: found the same way, and put
|
|
83
|
+
// back under its own name, so the browser's copy of the catalog validates what the model writes.
|
|
84
|
+
const own = base.components.find((each) => sandboxPolicyOf(each) !== undefined);
|
|
85
|
+
const ownOptions = asked === undefined &&
|
|
86
|
+
own?.sandboxOptions !== undefined &&
|
|
87
|
+
(own.sandboxView?.kit === true || own.sandboxView?.tailwind === true)
|
|
88
|
+
? await resolveSandbox({ ...own.sandboxOptions, name: own.name })
|
|
89
|
+
: undefined;
|
|
90
|
+
let channels;
|
|
91
|
+
if (askedChannels !== undefined) {
|
|
92
|
+
channels = {};
|
|
93
|
+
for (const [name, entry] of Object.entries(askedChannels)) {
|
|
94
|
+
if (entry === undefined)
|
|
95
|
+
continue;
|
|
96
|
+
const own = await resolveSandbox(entry.sandbox);
|
|
97
|
+
channels[name] = { ...entry, ...(own !== undefined ? { sandbox: own } : {}) };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
50
100
|
const catalog = sandbox === undefined || sandbox === false
|
|
51
|
-
?
|
|
101
|
+
? typeof ownOptions === 'object'
|
|
102
|
+
? base.extend([defineSandbox(ownOptions)])
|
|
103
|
+
: base
|
|
52
104
|
: base.extend([defineSandbox(sandbox === true ? {} : sandbox)]);
|
|
53
105
|
const resolveCatalog = await resolveCatalogFn(resolver, ctx);
|
|
54
106
|
const tools = genuiTools(catalog, {
|
|
55
107
|
...rest,
|
|
108
|
+
...(channels !== undefined ? { channels } : {}),
|
|
109
|
+
...(sandbox !== undefined ? { sandbox } : {}),
|
|
56
110
|
...(resolveCatalog !== undefined ? { resolveCatalog } : {}),
|
|
57
111
|
});
|
|
58
112
|
return {
|
|
59
113
|
catalog,
|
|
60
114
|
...(resolveCatalog === undefined ? {} : { resolveCatalog }),
|
|
61
115
|
tools,
|
|
116
|
+
...(channels !== undefined ? { channels } : {}),
|
|
117
|
+
...(clients.length > 0 ? { sandboxClient: () => mergeSandboxClients(clients) } : {}),
|
|
118
|
+
base: {
|
|
119
|
+
...(options.mode !== undefined ? { mode: options.mode } : {}),
|
|
120
|
+
...(options.streaming !== undefined ? { streaming: options.streaming } : {}),
|
|
121
|
+
...(sandbox !== undefined ? { sandbox } : {}),
|
|
122
|
+
},
|
|
62
123
|
};
|
|
63
124
|
};
|
|
64
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/genui/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/genui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type SandboxKitDiscovery } from './discover.js';
|
|
2
|
+
/** Find the kit through the app's Vite setup. `app` is the Adonis application. */
|
|
3
|
+
export declare function adonisSandboxKitDiscovery(app: unknown): Promise<SandboxKitDiscovery>;
|
|
4
|
+
//# sourceMappingURL=adonis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adonis.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/adonis.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,mBAAmB,EAAuB,MAAM,eAAe,CAAC;AAc9E,kFAAkF;AAClF,wBAAsB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6B1F"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sandbox kit in an Adonis app: found through `@adonisjs/vite` — the dev server running in this
|
|
3
|
+
* process (its `genuiSandboxKit()` plugin), else the descriptor it (or the assembler hook) wrote,
|
|
4
|
+
* and in production the Vite manifest under the configured build directory.
|
|
5
|
+
*/
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { ADONIS_SANDBOX_KIT_DESCRIPTOR } from '../../vite/index.js';
|
|
8
|
+
import { sandboxKitDiscovery } from './discover.js';
|
|
9
|
+
/** Find the kit through the app's Vite setup. `app` is the Adonis application. */
|
|
10
|
+
export async function adonisSandboxKitDiscovery(app) {
|
|
11
|
+
const adonis = app;
|
|
12
|
+
const root = adonis === undefined
|
|
13
|
+
? process.cwd()
|
|
14
|
+
: typeof adonis.appRoot === 'string'
|
|
15
|
+
? adonis.appRoot
|
|
16
|
+
: fileURLToPath(adonis.appRoot);
|
|
17
|
+
let vite;
|
|
18
|
+
try {
|
|
19
|
+
vite = (await adonis?.container.make('vite'));
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
vite = undefined;
|
|
23
|
+
}
|
|
24
|
+
const config = adonis?.config.get('vite', {}) ?? {};
|
|
25
|
+
const buildDirectory = config.buildDirectory ?? 'public/assets';
|
|
26
|
+
return sandboxKitDiscovery({
|
|
27
|
+
root,
|
|
28
|
+
descriptor: ADONIS_SANDBOX_KIT_DESCRIPTOR,
|
|
29
|
+
manifest: {
|
|
30
|
+
file: config.manifestFile ?? `${buildDirectory}/.vite/manifest.json`,
|
|
31
|
+
outDir: buildDirectory,
|
|
32
|
+
},
|
|
33
|
+
plugin: () => vite?.getDevServer?.()?.config.plugins.find((plugin) => plugin.name === 'genui-sandbox-kit')
|
|
34
|
+
?.api,
|
|
35
|
+
...(adonis?.inProduction !== undefined ? { production: adonis.inProduction } : {}),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=adonis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adonis.js","sourceRoot":"","sources":["../../../../src/genui/kit/adonis.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAA4B,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAc9E,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,GAAY;IAC1D,MAAM,MAAM,GAAG,GAAgC,CAAC;IAChD,MAAM,IAAI,GACR,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;QACf,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClC,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,IAAiC,CAAC;IACtC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAgC,CAAC;IAC/E,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GACV,MAAM,EAAE,MAAM,CAAC,GAAG,CAAqD,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IAC3F,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,eAAe,CAAC;IAChE,OAAO,mBAAmB,CAAC;QACzB,IAAI;QACJ,UAAU,EAAE,6BAA6B;QACzC,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC,YAAY,IAAI,GAAG,cAAc,sBAAsB;YACpE,MAAM,EAAE,cAAc;SACvB;QACD,MAAM,EAAE,GAAG,EAAE,CACX,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,mBAAmB,CAAC;YAC1F,EAAE,GAAqC;QAC3C,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SandboxKitFiles } from './files.js';
|
|
2
|
+
/** What a kit build produced. */
|
|
3
|
+
export interface SandboxKitBundle {
|
|
4
|
+
/** The IIFE (its CSS, if the components import any, rides along as `window.__GENUI_KIT_CSS__`). */
|
|
5
|
+
code: string;
|
|
6
|
+
/** A short content hash — what a client caches it by. */
|
|
7
|
+
hash: string;
|
|
8
|
+
/** The component names the bundle exports (what the docs fall back to without TypeScript). */
|
|
9
|
+
exports: string[];
|
|
10
|
+
/** Every module of the app the bundle read — what to watch for a rebuild. */
|
|
11
|
+
modules: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface BuildSandboxKitOptions {
|
|
14
|
+
root: string;
|
|
15
|
+
files: SandboxKitFiles;
|
|
16
|
+
/** `resolve` from the app's Vite config (aliases, dedupe, conditions). */
|
|
17
|
+
resolve?: Record<string, unknown>;
|
|
18
|
+
/** Extra Vite plugins for the kit build (e.g. one the components need to compile). */
|
|
19
|
+
plugins?: unknown[];
|
|
20
|
+
/** Default true. */
|
|
21
|
+
minify?: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Build the kit bundle with the app's Vite. */
|
|
24
|
+
export declare function buildSandboxKitBundle(options: BuildSandboxKitOptions): Promise<SandboxKitBundle>;
|
|
25
|
+
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../../src/genui/kit/bundle.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,mGAAmG;IACnG,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8FAA8F;IAC9F,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,6EAA6E;IAC7E,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,eAAe,CAAC;IACvB,0EAA0E;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,sFAAsF;IACtF,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,oBAAoB;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAuBD,gDAAgD;AAChD,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,gBAAgB,CAAC,CAyH3B"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The kit bundle: the app's design-system components, React and ReactDOM as ONE classic script (an
|
|
3
|
+
* IIFE) that sets `window.Kit`, `window.React` and `window.ReactDOM` — what the sandbox frame inlines,
|
|
4
|
+
* so it needs no network and no module loader. Built with the app's own Vite (`vite.build`, nothing
|
|
5
|
+
* written), its aliases kept, so `@/lib/utils` resolves as it does in the app.
|
|
6
|
+
*/
|
|
7
|
+
import { createHash } from 'node:crypto';
|
|
8
|
+
/** The entry's file name (Vite resolves a lib entry against the root) and its virtual id. */
|
|
9
|
+
const ENTRY_FILE = 'genui-sandbox-kit-entry.js';
|
|
10
|
+
const ENTRY_ID = '\0genui-sandbox-kit-entry';
|
|
11
|
+
const EXPORTS_ID = '\0genui-sandbox-kit-exports';
|
|
12
|
+
function exportsCode(files) {
|
|
13
|
+
return files.entry
|
|
14
|
+
? `export * from ${JSON.stringify(files.entry)};`
|
|
15
|
+
: files.files.map((file) => `export * from ${JSON.stringify(file)};`).join('\n');
|
|
16
|
+
}
|
|
17
|
+
/** Build the kit bundle with the app's Vite. */
|
|
18
|
+
export async function buildSandboxKitBundle(options) {
|
|
19
|
+
const vite = (await import('vite'));
|
|
20
|
+
const major = Number.parseInt(String(vite.version).split('.')[0] ?? '0', 10);
|
|
21
|
+
const files = options.files;
|
|
22
|
+
const kitExports = new Set();
|
|
23
|
+
const result = await vite.build({
|
|
24
|
+
configFile: false,
|
|
25
|
+
root: options.root,
|
|
26
|
+
logLevel: 'silent',
|
|
27
|
+
mode: 'production',
|
|
28
|
+
publicDir: false,
|
|
29
|
+
// One React: components living outside the app (a workspace package, another repo) resolve
|
|
30
|
+
// `react` from the app root too, never a second copy that would break their hooks.
|
|
31
|
+
resolve: {
|
|
32
|
+
...(options.resolve ?? {}),
|
|
33
|
+
dedupe: [
|
|
34
|
+
...(options.resolve?.dedupe ?? []),
|
|
35
|
+
'react',
|
|
36
|
+
'react-dom',
|
|
37
|
+
],
|
|
38
|
+
},
|
|
39
|
+
define: { 'process.env.NODE_ENV': JSON.stringify('production') },
|
|
40
|
+
// Vite 8 compiles with Oxc, earlier versions with esbuild: the automatic JSX runtime on both.
|
|
41
|
+
// Production JSX (`jsx`, never `jsxDEV`) whatever NODE_ENV the dev server runs under.
|
|
42
|
+
...(major >= 8
|
|
43
|
+
? { oxc: { jsx: { runtime: 'automatic', development: false } } }
|
|
44
|
+
: { esbuild: { jsx: 'automatic', jsxDev: false } }),
|
|
45
|
+
plugins: [
|
|
46
|
+
{
|
|
47
|
+
name: 'genui-sandbox-kit-entry',
|
|
48
|
+
resolveId(id) {
|
|
49
|
+
if (id === ENTRY_ID || id.endsWith(ENTRY_FILE))
|
|
50
|
+
return ENTRY_ID;
|
|
51
|
+
if (id === EXPORTS_ID)
|
|
52
|
+
return EXPORTS_ID;
|
|
53
|
+
return null;
|
|
54
|
+
},
|
|
55
|
+
load(id) {
|
|
56
|
+
if (id === ENTRY_ID) {
|
|
57
|
+
return [
|
|
58
|
+
'import * as React from "react";',
|
|
59
|
+
'import * as ReactDOMClient from "react-dom/client";',
|
|
60
|
+
'import * as Kit from "\\0genui-sandbox-kit-exports";',
|
|
61
|
+
'window.React = React;',
|
|
62
|
+
'window.ReactDOM = ReactDOMClient;',
|
|
63
|
+
'window.Kit = Kit;',
|
|
64
|
+
].join('\n');
|
|
65
|
+
}
|
|
66
|
+
if (id === EXPORTS_ID)
|
|
67
|
+
return exportsCode(files);
|
|
68
|
+
return null;
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
...(options.plugins ?? []),
|
|
72
|
+
],
|
|
73
|
+
build: {
|
|
74
|
+
write: false,
|
|
75
|
+
emptyOutDir: false,
|
|
76
|
+
copyPublicDir: false,
|
|
77
|
+
minify: options.minify ?? true,
|
|
78
|
+
sourcemap: false,
|
|
79
|
+
cssCodeSplit: false,
|
|
80
|
+
reportCompressedSize: false,
|
|
81
|
+
modulePreload: false,
|
|
82
|
+
lib: {
|
|
83
|
+
entry: ENTRY_FILE,
|
|
84
|
+
formats: ['iife'],
|
|
85
|
+
name: '__genuiSandboxKit',
|
|
86
|
+
fileName: () => 'genui-sandbox-kit.js',
|
|
87
|
+
},
|
|
88
|
+
rollupOptions: { output: { inlineDynamicImports: true } },
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
const outputs = (Array.isArray(result) ? result : [result]);
|
|
92
|
+
let code = '';
|
|
93
|
+
let css = '';
|
|
94
|
+
const modules = new Set();
|
|
95
|
+
for (const out of outputs) {
|
|
96
|
+
for (const item of out.output ?? []) {
|
|
97
|
+
if (item.type === 'chunk') {
|
|
98
|
+
code += item.code ?? '';
|
|
99
|
+
for (const id of item.moduleIds ?? Object.keys(item.modules ?? {})) {
|
|
100
|
+
if (!id.startsWith('\0') && !id.includes('/node_modules/'))
|
|
101
|
+
modules.add(id);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (item.fileName.endsWith('.css')) {
|
|
105
|
+
css +=
|
|
106
|
+
typeof item.source === 'string'
|
|
107
|
+
? item.source
|
|
108
|
+
: Buffer.from(item.source ?? new Uint8Array()).toString('utf8');
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (css !== '')
|
|
113
|
+
code = `window.__GENUI_KIT_CSS__=${JSON.stringify(css)};\n${code}`;
|
|
114
|
+
// The names the kit exports, read off the entry's re-exports at runtime would need a browser:
|
|
115
|
+
// list what the source files export by name instead (good enough for the fallback docs).
|
|
116
|
+
for (const file of files.files) {
|
|
117
|
+
try {
|
|
118
|
+
const { readFileSync } = await import('node:fs');
|
|
119
|
+
const text = readFileSync(file, 'utf8');
|
|
120
|
+
for (const match of text.matchAll(/export\s+(?:const|function|class|let|var)\s+([A-Z][A-Za-z0-9]*)/g))
|
|
121
|
+
kitExports.add(match[1]);
|
|
122
|
+
for (const match of text.matchAll(/export\s*\{([^}]*)\}/g)) {
|
|
123
|
+
for (const part of match[1].split(',')) {
|
|
124
|
+
const name = part
|
|
125
|
+
.split(/\s+as\s+/)
|
|
126
|
+
.pop()
|
|
127
|
+
?.trim();
|
|
128
|
+
if (name !== undefined && /^[A-Z][A-Za-z0-9]*$/.test(name))
|
|
129
|
+
kitExports.add(name);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
/* unreadable: no fallback names from it */
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return {
|
|
138
|
+
code,
|
|
139
|
+
hash: createHash('sha256').update(code).digest('hex').slice(0, 12),
|
|
140
|
+
exports: [...kitExports],
|
|
141
|
+
modules: [...modules],
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../../src/genui/kit/bundle.ts"],"names":[],"mappings":"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"}
|