@datatechsolutions/ui 2.11.80 → 2.11.81
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/dist/astrlabe/contracts.d.mts +19 -1
- package/dist/astrlabe/contracts.d.ts +19 -1
- package/dist/astrlabe/index.d.mts +16 -3
- package/dist/astrlabe/index.d.ts +16 -3
- package/dist/astrlabe/index.js +207 -0
- package/dist/astrlabe/index.js.map +1 -1
- package/dist/astrlabe/index.mjs +206 -1
- package/dist/astrlabe/index.mjs.map +1 -1
- package/package.json +2 -1
package/dist/astrlabe/index.mjs
CHANGED
|
@@ -1781,6 +1781,211 @@ function parseRow(row) {
|
|
|
1781
1781
|
}
|
|
1782
1782
|
}
|
|
1783
1783
|
}
|
|
1784
|
+
var PRIMITIVE_TYPES = [
|
|
1785
|
+
{ value: "string", label: "string" },
|
|
1786
|
+
{ value: "number", label: "number" },
|
|
1787
|
+
{ value: "integer", label: "integer" },
|
|
1788
|
+
{ value: "boolean", label: "boolean" }
|
|
1789
|
+
];
|
|
1790
|
+
var COMPLEX_TYPES = [
|
|
1791
|
+
{ value: "object", label: "object (nested)" },
|
|
1792
|
+
{ value: "array", label: "array of objects" }
|
|
1793
|
+
];
|
|
1794
|
+
var ALL_TYPES = [...PRIMITIVE_TYPES, ...COMPLEX_TYPES];
|
|
1795
|
+
function OutputSchemaBuilder({ value, onChange, depth = 0 }) {
|
|
1796
|
+
const fields = useMemo(() => {
|
|
1797
|
+
if (!value || value.type !== "object") return [];
|
|
1798
|
+
return buildFieldRows(value);
|
|
1799
|
+
}, [value]);
|
|
1800
|
+
if (!value) {
|
|
1801
|
+
return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-dashed border-slate-300 bg-slate-50/40 p-4 text-center dark:border-slate-700 dark:bg-slate-900/30", children: [
|
|
1802
|
+
/* @__PURE__ */ jsx("p", { className: "mb-3 text-xs text-slate-500 dark:text-slate-400", children: "No schema yet \u2014 agent text is exposed as a raw string. Add a schema to enforce structured output." }),
|
|
1803
|
+
/* @__PURE__ */ jsx(
|
|
1804
|
+
Button,
|
|
1805
|
+
{
|
|
1806
|
+
type: "button",
|
|
1807
|
+
outline: true,
|
|
1808
|
+
onClick: () => onChange({ type: "object", properties: {}, required: [] }),
|
|
1809
|
+
children: "+ Add output schema"
|
|
1810
|
+
}
|
|
1811
|
+
)
|
|
1812
|
+
] });
|
|
1813
|
+
}
|
|
1814
|
+
if (value.type !== "object") {
|
|
1815
|
+
return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-amber-300 bg-amber-50/40 p-3 text-xs text-amber-700 dark:border-amber-700 dark:bg-amber-900/20 dark:text-amber-300", children: [
|
|
1816
|
+
"The visual builder only supports `type: object` at the top level. Convert manually or",
|
|
1817
|
+
/* @__PURE__ */ jsx(
|
|
1818
|
+
"button",
|
|
1819
|
+
{
|
|
1820
|
+
type: "button",
|
|
1821
|
+
className: "ml-1 underline",
|
|
1822
|
+
onClick: () => onChange({ type: "object", properties: {}, required: [] }),
|
|
1823
|
+
children: "reset to object"
|
|
1824
|
+
}
|
|
1825
|
+
),
|
|
1826
|
+
"."
|
|
1827
|
+
] });
|
|
1828
|
+
}
|
|
1829
|
+
const updateFields = (next) => {
|
|
1830
|
+
onChange(rowsToSchema(next));
|
|
1831
|
+
};
|
|
1832
|
+
const addField = () => {
|
|
1833
|
+
updateFields([
|
|
1834
|
+
...fields,
|
|
1835
|
+
{ name: "", type: "string", description: "", required: false, child: void 0 }
|
|
1836
|
+
]);
|
|
1837
|
+
};
|
|
1838
|
+
const removeField = (index) => {
|
|
1839
|
+
updateFields(fields.filter((_, i) => i !== index));
|
|
1840
|
+
};
|
|
1841
|
+
const patchField = (index, patch) => {
|
|
1842
|
+
updateFields(fields.map((f, i) => i === index ? { ...f, ...patch } : f));
|
|
1843
|
+
};
|
|
1844
|
+
return /* @__PURE__ */ jsxs("div", { className: "space-y-3", children: [
|
|
1845
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
1846
|
+
/* @__PURE__ */ jsx("span", { className: "text-xs font-medium text-slate-700 dark:text-slate-200", children: "Top-level fields" }),
|
|
1847
|
+
/* @__PURE__ */ jsx(
|
|
1848
|
+
"button",
|
|
1849
|
+
{
|
|
1850
|
+
type: "button",
|
|
1851
|
+
className: "text-xs text-rose-600 hover:text-rose-500",
|
|
1852
|
+
onClick: () => onChange(void 0),
|
|
1853
|
+
children: "Remove schema"
|
|
1854
|
+
}
|
|
1855
|
+
)
|
|
1856
|
+
] }),
|
|
1857
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
|
|
1858
|
+
fields.map((field, index) => /* @__PURE__ */ jsx(
|
|
1859
|
+
FieldEditor,
|
|
1860
|
+
{
|
|
1861
|
+
field,
|
|
1862
|
+
onChange: (patch) => patchField(index, patch),
|
|
1863
|
+
onRemove: () => removeField(index),
|
|
1864
|
+
depth
|
|
1865
|
+
},
|
|
1866
|
+
index
|
|
1867
|
+
)),
|
|
1868
|
+
/* @__PURE__ */ jsx(Button, { type: "button", outline: true, onClick: addField, children: "+ Add field" })
|
|
1869
|
+
] })
|
|
1870
|
+
] });
|
|
1871
|
+
}
|
|
1872
|
+
function FieldEditor({
|
|
1873
|
+
field,
|
|
1874
|
+
onChange,
|
|
1875
|
+
onRemove,
|
|
1876
|
+
depth
|
|
1877
|
+
}) {
|
|
1878
|
+
const handleTypeChange = (next) => {
|
|
1879
|
+
if (next === "object") {
|
|
1880
|
+
onChange({ type: next, child: { type: "object", properties: {}, required: [] } });
|
|
1881
|
+
} else if (next === "array") {
|
|
1882
|
+
onChange({ type: next, child: { type: "object", properties: {}, required: [] } });
|
|
1883
|
+
} else {
|
|
1884
|
+
onChange({ type: next, child: void 0 });
|
|
1885
|
+
}
|
|
1886
|
+
};
|
|
1887
|
+
const isComplex = field.type === "object" || field.type === "array";
|
|
1888
|
+
return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-slate-200 bg-slate-50/60 p-3 dark:border-slate-700 dark:bg-slate-900/40", children: [
|
|
1889
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[1fr_140px_auto_auto] items-end gap-2", children: [
|
|
1890
|
+
/* @__PURE__ */ jsx(
|
|
1891
|
+
FormInput,
|
|
1892
|
+
{
|
|
1893
|
+
label: "Name",
|
|
1894
|
+
value: field.name,
|
|
1895
|
+
onValueChange: (name) => onChange({ name }),
|
|
1896
|
+
placeholder: "recommendedPrice"
|
|
1897
|
+
}
|
|
1898
|
+
),
|
|
1899
|
+
/* @__PURE__ */ jsx(
|
|
1900
|
+
FormSelect,
|
|
1901
|
+
{
|
|
1902
|
+
label: "Type",
|
|
1903
|
+
value: field.type,
|
|
1904
|
+
options: ALL_TYPES.map((t) => ({ value: t.value, label: t.label })),
|
|
1905
|
+
onValueChange: (t) => handleTypeChange(t)
|
|
1906
|
+
}
|
|
1907
|
+
),
|
|
1908
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-2 pb-2 text-xs text-slate-700 dark:text-slate-200", children: [
|
|
1909
|
+
/* @__PURE__ */ jsx(
|
|
1910
|
+
"input",
|
|
1911
|
+
{
|
|
1912
|
+
type: "checkbox",
|
|
1913
|
+
checked: field.required,
|
|
1914
|
+
onChange: (event) => onChange({ required: event.target.checked }),
|
|
1915
|
+
className: "h-4 w-4 rounded border-slate-300"
|
|
1916
|
+
}
|
|
1917
|
+
),
|
|
1918
|
+
"Required"
|
|
1919
|
+
] }),
|
|
1920
|
+
/* @__PURE__ */ jsx(Button, { type: "button", plain: true, onClick: onRemove, children: "Remove" })
|
|
1921
|
+
] }),
|
|
1922
|
+
/* @__PURE__ */ jsx(
|
|
1923
|
+
FormInput,
|
|
1924
|
+
{
|
|
1925
|
+
label: "Description (optional)",
|
|
1926
|
+
value: field.description,
|
|
1927
|
+
onValueChange: (description) => onChange({ description }),
|
|
1928
|
+
placeholder: "What the model should put here"
|
|
1929
|
+
}
|
|
1930
|
+
),
|
|
1931
|
+
isComplex && depth < 1 && /* @__PURE__ */ jsxs("div", { className: "mt-3 rounded-lg border border-dashed border-slate-300 p-2 dark:border-slate-700", children: [
|
|
1932
|
+
/* @__PURE__ */ jsx("p", { className: "mb-2 text-[11px] uppercase tracking-wider text-slate-400", children: field.type === "array" ? "Item shape" : "Nested fields" }),
|
|
1933
|
+
/* @__PURE__ */ jsx(
|
|
1934
|
+
OutputSchemaBuilder,
|
|
1935
|
+
{
|
|
1936
|
+
value: field.child,
|
|
1937
|
+
onChange: (child) => onChange({ child }),
|
|
1938
|
+
depth: depth + 1
|
|
1939
|
+
}
|
|
1940
|
+
)
|
|
1941
|
+
] }),
|
|
1942
|
+
isComplex && depth >= 1 && /* @__PURE__ */ jsx("p", { className: "mt-2 text-[11px] italic text-slate-500", children: "Deeper nesting is supported by the engine but not by this builder \u2014 edit the JSON directly if you need a third level." })
|
|
1943
|
+
] });
|
|
1944
|
+
}
|
|
1945
|
+
function buildFieldRows(schema) {
|
|
1946
|
+
const properties = schema.properties ?? {};
|
|
1947
|
+
const required = new Set(schema.required ?? []);
|
|
1948
|
+
return Object.entries(properties).map(([name, subschema]) => {
|
|
1949
|
+
const t = subschema.type ?? "string";
|
|
1950
|
+
const isObject = t === "object";
|
|
1951
|
+
const isArray = t === "array";
|
|
1952
|
+
return {
|
|
1953
|
+
name,
|
|
1954
|
+
type: isObject ? "object" : isArray ? "array" : t,
|
|
1955
|
+
description: subschema.description ?? "",
|
|
1956
|
+
required: required.has(name),
|
|
1957
|
+
child: isObject ? subschema : isArray ? subschema.items : void 0
|
|
1958
|
+
};
|
|
1959
|
+
});
|
|
1960
|
+
}
|
|
1961
|
+
function rowsToSchema(rows) {
|
|
1962
|
+
const properties = {};
|
|
1963
|
+
const required = [];
|
|
1964
|
+
for (const row of rows) {
|
|
1965
|
+
const name = row.name.trim();
|
|
1966
|
+
if (!name) continue;
|
|
1967
|
+
let entry;
|
|
1968
|
+
if (row.type === "object") {
|
|
1969
|
+
entry = row.child && row.child.type === "object" ? row.child : { type: "object", properties: {}, required: [] };
|
|
1970
|
+
} else if (row.type === "array") {
|
|
1971
|
+
entry = {
|
|
1972
|
+
type: "array",
|
|
1973
|
+
items: row.child ?? { type: "object", properties: {}, required: [] }
|
|
1974
|
+
};
|
|
1975
|
+
} else {
|
|
1976
|
+
entry = { type: row.type };
|
|
1977
|
+
}
|
|
1978
|
+
if (row.description) entry.description = row.description;
|
|
1979
|
+
properties[name] = entry;
|
|
1980
|
+
if (row.required) required.push(name);
|
|
1981
|
+
}
|
|
1982
|
+
const out = { type: "object", properties };
|
|
1983
|
+
if (required.length > 0) out.required = required;
|
|
1984
|
+
return out;
|
|
1985
|
+
}
|
|
1986
|
+
function defaultAgentOutputSchema() {
|
|
1987
|
+
return { type: "object", properties: {}, required: [] };
|
|
1988
|
+
}
|
|
1784
1989
|
|
|
1785
1990
|
// src/astrlabe/components/rules/types.ts
|
|
1786
1991
|
var RULE_STATUS_OPTIONS = ["draft", "active", "archived"];
|
|
@@ -4540,6 +4745,6 @@ function useHelpLines() {
|
|
|
4540
4745
|
};
|
|
4541
4746
|
}
|
|
4542
4747
|
|
|
4543
|
-
export { AgentModal, AmazonNovaIcon, AnthropicModelIcon, AutoSaveWorkspace, DslExportModal, DslImportModal, DynamicIslandConfirm2 as DynamicIslandConfirm, MetaLlamaIcon, NodePalette, PipelineSettingsModal, PreviewPanel, RULE_STATUS_OPTIONS, RuleActionBuilder, RuleConditionBuilder, RuleForm, RunInputDialog, RunPanel, RunReplayModal, SaveStatusBadge, SubworkflowModal, TIMEZONE_OPTIONS, VariableInspector, VersionHistoryPanel, WorkflowListBar, defaultRuleAction, defaultRuleCondition, defaultRuleForm, getModelIcon, useCanRedo, useCanUndo, useCanvasShortcuts, useClipboard, useContextMenu, useEditingNodeId, useHasCopied, useHelpLines, useIsRunning, useNodeResults, useSelectedNodeCount, useSubworkflowStore, useUndoRedo };
|
|
4748
|
+
export { AgentModal, AmazonNovaIcon, AnthropicModelIcon, AutoSaveWorkspace, DslExportModal, DslImportModal, DynamicIslandConfirm2 as DynamicIslandConfirm, MetaLlamaIcon, NodePalette, OutputSchemaBuilder, PipelineSettingsModal, PreviewPanel, RULE_STATUS_OPTIONS, RuleActionBuilder, RuleConditionBuilder, RuleForm, RunInputDialog, RunPanel, RunReplayModal, SaveStatusBadge, SubworkflowModal, TIMEZONE_OPTIONS, VariableInspector, VersionHistoryPanel, WorkflowListBar, defaultAgentOutputSchema, defaultRuleAction, defaultRuleCondition, defaultRuleForm, getModelIcon, useCanRedo, useCanUndo, useCanvasShortcuts, useClipboard, useContextMenu, useEditingNodeId, useHasCopied, useHelpLines, useIsRunning, useNodeResults, useSelectedNodeCount, useSubworkflowStore, useUndoRedo };
|
|
4544
4749
|
//# sourceMappingURL=index.mjs.map
|
|
4545
4750
|
//# sourceMappingURL=index.mjs.map
|