austere-axi 0.3.0 → 0.4.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 +41 -9
- package/dist/austere.js +2 -2
- package/dist/catalog.json +1 -1
- package/dist/chrome/chrome.css +1 -1
- package/dist/chrome/chrome.js +4 -4
- package/dist/cli.mjs +765 -296
- package/dist/packs/mermaid/catalog.json +2 -2
- package/dist/packs/mermaid/pack.js +1 -1
- package/dist/packs/shadcn/catalog.json +429 -0
- package/dist/packs/shadcn/pack.js +69 -0
- package/dist/prompt.md +5 -4
- package/dist/spec.json +1 -1
- package/package.json +19 -3
- package/skills/austere-setup/SKILL.md +3 -4
- package/types/catalog.d.ts +82 -0
- package/types/pack-kit.d.ts +46 -0
- package/types/pack.d.ts +104 -0
package/dist/spec.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"Card":{"$ref":"#/$defs/Card"},"CardHeader":{"$ref":"#/$defs/CardHeader"},"TextContent":{"$ref":"#/$defs/TextContent"},"MarkDownRenderer":{"$ref":"#/$defs/MarkDownRenderer"},"Callout":{"$ref":"#/$defs/Callout"},"Image":{"$ref":"#/$defs/Image"},"CodeBlock":{"$ref":"#/$defs/CodeBlock"},"InlineHeader":{"$ref":"#/$defs/InlineHeader"},"Table":{"$ref":"#/$defs/Table"},"Col":{"$ref":"#/$defs/Col"},"EditableTable":{"$ref":"#/$defs/EditableTable"},"BarChart":{"$ref":"#/$defs/BarChart"},"LineChart":{"$ref":"#/$defs/LineChart"},"AreaChart":{"$ref":"#/$defs/AreaChart"},"HorizontalBarChart":{"$ref":"#/$defs/HorizontalBarChart"},"Series":{"$ref":"#/$defs/Series"},"PieChart":{"$ref":"#/$defs/PieChart"},"ScatterChart":{"$ref":"#/$defs/ScatterChart"},"ScatterSeries":{"$ref":"#/$defs/ScatterSeries"},"Point":{"$ref":"#/$defs/Point"},"Form":{"$ref":"#/$defs/Form"},"FormControl":{"$ref":"#/$defs/FormControl"},"Label":{"$ref":"#/$defs/Label"},"Input":{"$ref":"#/$defs/Input"},"TextArea":{"$ref":"#/$defs/TextArea"},"Select":{"$ref":"#/$defs/Select"},"SelectItem":{"$ref":"#/$defs/SelectItem"},"Slider":{"$ref":"#/$defs/Slider"},"CheckBoxGroup":{"$ref":"#/$defs/CheckBoxGroup"},"CheckBoxItem":{"$ref":"#/$defs/CheckBoxItem"},"RadioGroup":{"$ref":"#/$defs/RadioGroup"},"RadioItem":{"$ref":"#/$defs/RadioItem"},"SwitchGroup":{"$ref":"#/$defs/SwitchGroup"},"SwitchItem":{"$ref":"#/$defs/SwitchItem"},"ChipItem":{"$ref":"#/$defs/ChipItem"},"Chips":{"$ref":"#/$defs/Chips"},"OptionCard":{"$ref":"#/$defs/OptionCard"},"OptionCards":{"$ref":"#/$defs/OptionCards"},"Button":{"$ref":"#/$defs/Button"},"Buttons":{"$ref":"#/$defs/Buttons"},"Stack":{"$ref":"#/$defs/Stack"},"Tabs":{"$ref":"#/$defs/Tabs"},"TabItem":{"$ref":"#/$defs/TabItem"},"Accordion":{"$ref":"#/$defs/Accordion"},"AccordionItem":{"$ref":"#/$defs/AccordionItem"},"Steps":{"$ref":"#/$defs/Steps"},"StepsItem":{"$ref":"#/$defs/StepsItem"},"Separator":{"$ref":"#/$defs/Separator"},"TagBlock":{"$ref":"#/$defs/TagBlock"},"Tag":{"$ref":"#/$defs/Tag"},"Icon":{"$ref":"#/$defs/Icon"},"EntityList":{"$ref":"#/$defs/EntityList"},"Text":{"$ref":"#/$defs/Text"},"BoldText":{"$ref":"#/$defs/BoldText"},"IconText":{"$ref":"#/$defs/IconText"},"MetricIndicatorInline":{"$ref":"#/$defs/MetricIndicatorInline"},"OverviewCardItem":{"$ref":"#/$defs/OverviewCardItem"},"OverviewCardBlock":{"$ref":"#/$defs/OverviewCardBlock"},"Architecture":{"$ref":"#/$defs/Architecture"},"Node":{"$ref":"#/$defs/Node"},"Edge":{"$ref":"#/$defs/Edge"},"Group":{"$ref":"#/$defs/Group"},"Diff":{"$ref":"#/$defs/Diff"},"FileTree":{"$ref":"#/$defs/FileTree"},"Mermaid":{"$ref":"#/$defs/Mermaid"}},"required":["Card","CardHeader","TextContent","MarkDownRenderer","Callout","Image","CodeBlock","InlineHeader","Table","Col","EditableTable","BarChart","LineChart","AreaChart","HorizontalBarChart","Series","PieChart","ScatterChart","ScatterSeries","Point","Form","FormControl","Label","Input","TextArea","Select","SelectItem","Slider","CheckBoxGroup","CheckBoxItem","RadioGroup","RadioItem","SwitchGroup","SwitchItem","ChipItem","Chips","OptionCard","OptionCards","Button","Buttons","Stack","Tabs","TabItem","Accordion","AccordionItem","Steps","StepsItem","Separator","TagBlock","Tag","Icon","EntityList","Text","BoldText","IconText","MetricIndicatorInline","OverviewCardItem","OverviewCardBlock","Architecture","Node","Edge","Group","Diff","FileTree","Mermaid"],"additionalProperties":false,"$defs":{"Card":{"type":"object","properties":{"children":{"type":"array","items":{"anyOf":[{"$ref":"#/$defs/TextContent"},{"$ref":"#/$defs/MarkDownRenderer"},{"$ref":"#/$defs/CardHeader"},{"$ref":"#/$defs/Callout"},{"$ref":"#/$defs/CodeBlock"},{"$ref":"#/$defs/Image"},{"$ref":"#/$defs/Separator"},{"$ref":"#/$defs/HorizontalBarChart"},{"$ref":"#/$defs/PieChart"},{"$ref":"#/$defs/ScatterChart"},{"$ref":"#/$defs/AreaChart"},{"$ref":"#/$defs/BarChart"},{"$ref":"#/$defs/LineChart"},{"$ref":"#/$defs/Table"},{"$ref":"#/$defs/TagBlock"},{"$ref":"#/$defs/Form"},{"$ref":"#/$defs/Buttons"},{"$ref":"#/$defs/Steps"},{"$ref":"#/$defs/InlineHeader"},{"$ref":"#/$defs/EntityList"},{"$ref":"#/$defs/EditableTable"},{"$ref":"#/$defs/OverviewCardBlock"},{"$ref":"#/$defs/Tabs"},{"$ref":"#/$defs/Stack"},{"$ref":"#/$defs/Architecture"},{"$ref":"#/$defs/Diff"},{"$ref":"#/$defs/FileTree"},{"$ref":"#/$defs/Mermaid"}]}},"variant":{"type":"string","enum":["card","sunk","clear"]},"direction":{"type":"string","enum":["row","column"]},"gap":{"type":"string","enum":["none","xs","s","m","l","xl","2xl"]},"align":{"type":"string","enum":["start","center","end","stretch","baseline"]},"justify":{"type":"string","enum":["start","center","end","between","around","evenly"]},"wrap":{"type":"boolean"}},"required":["children"],"additionalProperties":false,"description":"Styled container. variant: \"card\" (default, elevated) | \"sunk\" (recessed) | \"clear\" (transparent). Always full width. Accepts all Stack flex params (default: direction \"column\"). Cards flex to share space in row/wrap layouts."},"TextContent":{"type":"object","properties":{"text":{"type":"string"},"size":{"type":"string","enum":["small","default","large","small-heavy","large-heavy"]}},"required":["text"],"additionalProperties":false,"description":"Text block. Supports markdown. Optional size: \"small\" | \"default\" | \"large\" | \"small-heavy\" | \"large-heavy\"."},"MarkDownRenderer":{"type":"object","properties":{"textMarkdown":{"type":"string"},"variant":{"type":"string","enum":["clear","card","sunk"]}},"required":["textMarkdown"],"additionalProperties":false,"description":"Renders markdown text with optional container variant"},"CardHeader":{"type":"object","properties":{"title":{"type":"string"},"subtitle":{"type":"string"}},"additionalProperties":false,"description":"Header with optional title and subtitle"},"Callout":{"type":"object","properties":{"variant":{"type":"string","enum":["info","warning","error","success","neutral"]},"title":{"type":"string"},"description":{"type":"string"},"visible":{"type":"boolean"}},"required":["variant","title","description"],"additionalProperties":false,"description":"Callout banner. Optional visible is a reactive $boolean — auto-dismisses after 3s by setting $visible to false."},"CodeBlock":{"type":"object","properties":{"language":{"type":"string"},"codeString":{"type":"string"}},"required":["language","codeString"],"additionalProperties":false,"description":"Syntax-highlighted code block"},"Image":{"type":"object","properties":{"alt":{"type":"string"},"src":{"type":"string"}},"required":["alt"],"additionalProperties":false,"description":"Image with alt text and optional URL"},"Separator":{"type":"object","properties":{"orientation":{"type":"string","enum":["horizontal","vertical"]},"decorative":{"type":"boolean"}},"additionalProperties":false,"description":"Visual divider between content sections"},"HorizontalBarChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/$defs/Series"}},"variant":{"type":"string","enum":["grouped","stacked"]},"xLabel":{"type":"string"},"yLabel":{"type":"string"}},"required":["labels","series"],"additionalProperties":false,"description":"Horizontal bars; prefer when category labels are long or for ranked lists"},"Series":{"type":"object","properties":{"category":{"type":"string"},"values":{"type":"array","items":{"type":"number"}}},"required":["category","values"],"additionalProperties":false,"description":"One data series"},"PieChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"values":{"type":"array","items":{"type":"number"}},"variant":{"type":"string","enum":["pie","donut"]},"appearance":{"type":"string","enum":["circular","semiCircular"]}},"required":["labels","values"],"additionalProperties":false,"description":"Circular slices; use plucked arrays: PieChart(data.categories, data.values)"},"ScatterChart":{"type":"object","properties":{"datasets":{"type":"array","items":{"$ref":"#/$defs/ScatterSeries"}},"xLabel":{"type":"string"},"yLabel":{"type":"string"}},"required":["datasets"],"additionalProperties":false,"description":"X/Y scatter plot; use for correlations, distributions, and clustering"},"ScatterSeries":{"type":"object","properties":{"name":{"type":"string"},"points":{"type":"array","items":{"$ref":"#/$defs/Point"}}},"required":["name","points"],"additionalProperties":false,"description":"Named dataset"},"Point":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"}},"required":["x","y"],"additionalProperties":false,"description":"Data point with numeric coordinates"},"AreaChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/$defs/Series"}},"variant":{"type":"string","enum":["linear","natural","step"]},"xLabel":{"type":"string"},"yLabel":{"type":"string"},"height":{"type":"number"}},"required":["labels","series"],"additionalProperties":false,"description":"Filled area under lines; use for cumulative totals or volume trends over time"},"BarChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/$defs/Series"}},"variant":{"type":"string","enum":["grouped","stacked"]},"xLabel":{"type":"string"},"yLabel":{"type":"string"},"height":{"type":"number"}},"required":["labels","series"],"additionalProperties":false,"description":"Vertical bars; use for comparing values across categories with one or more series"},"LineChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/$defs/Series"}},"variant":{"type":"string","enum":["linear","natural","step"]},"xLabel":{"type":"string"},"yLabel":{"type":"string"},"height":{"type":"number"}},"required":["labels","series"],"additionalProperties":false,"description":"Lines over categories; use for trends and continuous data over time"},"Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/$defs/Col"}}},"required":["columns"],"additionalProperties":false,"description":"Data table — column-oriented. Each Col holds its own data array."},"Col":{"type":"object","properties":{"label":{"type":"string"},"data":{},"type":{"type":"string","enum":["string","number","action"]}},"required":["label","data"],"additionalProperties":false,"description":"Column definition — holds label + data array"},"TagBlock":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string"}},"size":{"type":"string","enum":["sm","md","lg"]}},"required":["tags"],"additionalProperties":false,"description":"tags is an array of strings; optional size sm | md | lg"},"Form":{"type":"object","properties":{"name":{"type":"string"},"buttons":{"$ref":"#/$defs/Buttons"},"fields":{"default":[],"type":"array","items":{"$ref":"#/$defs/FormControl"}}},"required":["name","buttons","fields"],"additionalProperties":false,"description":"Form container with fields and explicit action buttons"},"Buttons":{"type":"object","properties":{"buttons":{"type":"array","items":{"$ref":"#/$defs/Button"}},"direction":{"type":"string","enum":["row","column"]}},"required":["buttons"],"additionalProperties":false,"description":"Group of Button components. direction: \"row\" (default) | \"column\"."},"Button":{"type":"object","properties":{"label":{"type":"string"},"action":{"$ref":"#/$defs/ActionExpression"},"variant":{"type":"string","enum":["primary","secondary","tertiary"]},"type":{"type":"string","enum":["normal","destructive"]},"size":{"type":"string","enum":["extra-small","small","medium","large"]}},"required":["label"],"additionalProperties":false,"description":"Clickable button"},"ActionExpression":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"open_url"},"url":{"type":"string"}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"continue_conversation"},"context":{"type":"string"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string"},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["type"],"additionalProperties":false}]},"FormControl":{"type":"object","properties":{"label":{"type":"string"},"input":{"anyOf":[{"$ref":"#/$defs/Input"},{"$ref":"#/$defs/TextArea"},{"$ref":"#/$defs/Select"},{"$ref":"#/$defs/Slider"},{"$ref":"#/$defs/CheckBoxGroup"},{"$ref":"#/$defs/RadioGroup"},{"$ref":"#/$defs/Chips"},{"$ref":"#/$defs/OptionCards"}]},"hint":{"type":"string"}},"required":["label","input"],"additionalProperties":false,"description":"Field with label, input component, and optional hint text"},"Input":{"type":"object","properties":{"name":{"type":"string"},"placeholder":{"type":"string"},"type":{"type":"string","enum":["text","email","password","number","url"]},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"string"}},"required":["name"],"additionalProperties":false},"TextArea":{"type":"object","properties":{"name":{"type":"string"},"placeholder":{"type":"string"},"rows":{"type":"number"},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"string"}},"required":["name"],"additionalProperties":false},"Select":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/$defs/SelectItem"}},"placeholder":{"type":"string"},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"string"},"size":{"type":"string","enum":["small","medium","large"]}},"required":["name","items"],"additionalProperties":false},"SelectItem":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}},"required":["value","label"],"additionalProperties":false,"description":"Option for Select"},"Slider":{"type":"object","properties":{"name":{"type":"string"},"variant":{"type":"string","enum":["continuous","discrete"]},"min":{"type":"number"},"max":{"type":"number"},"step":{"type":"number"},"defaultValue":{"type":"array","items":{"type":"number"}},"label":{"type":"string"},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"array","items":{"type":"number"}}},"required":["name","variant","min","max"],"additionalProperties":false,"description":"Numeric slider input; supports continuous and discrete (stepped) variants"},"CheckBoxGroup":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/$defs/CheckBoxItem"}},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"boolean"}}},"required":["name","items"],"additionalProperties":false},"CheckBoxItem":{"type":"object","properties":{"label":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"defaultChecked":{"type":"boolean"}},"required":["label","description","name"],"additionalProperties":false},"RadioGroup":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/$defs/RadioItem"}},"defaultValue":{"type":"string"},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"string"}},"required":["name","items"],"additionalProperties":false},"RadioItem":{"type":"object","properties":{"label":{"type":"string"},"description":{"type":"string"},"value":{"type":"string"}},"required":["label","description","value"],"additionalProperties":false},"Chips":{"type":"object","properties":{"name":{"type":"string"},"type":{"default":"multiple","type":"string","enum":["single","multiple"]},"items":{"default":[],"type":"array","items":{"$ref":"#/$defs/ChipItem"}},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["name","type","items"],"additionalProperties":false,"description":"A form field of compact selectable chips for choosing one or many short options; the selection is stored under `name`."},"ChipItem":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"icon":{"$ref":"#/$defs/Icon"},"disabled":{"type":"boolean"}},"required":["value","label"],"additionalProperties":false,"description":"A single selectable chip inside a Chips group, with a value, label and optional icon."},"Icon":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["name"],"additionalProperties":false,"description":"A lucide icon by kebab-case name (e.g. 'circle-check'). Optional category picks a topical fallback when the name doesn't resolve."},"OptionCards":{"type":"object","properties":{"name":{"type":"string"},"type":{"default":"single","type":"string","enum":["single","multiple"]},"items":{"default":[],"type":"array","items":{"$ref":"#/$defs/OptionCard"}},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["name","type","items"],"additionalProperties":false,"description":"A form field of selectable cards (title, optional subtitle, optional icon or image) laid out in a responsive grid for choosing one or many options; the selection is stored under `name`."},"OptionCard":{"type":"object","properties":{"value":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"topContent":{"anyOf":[{"$ref":"#/$defs/Icon"},{"$ref":"#/$defs/Image"}]},"disabled":{"type":"boolean"}},"required":["value","title"],"additionalProperties":false,"description":"A single selectable card inside an OptionCards group, with a value, title, optional subtitle and an optional Icon or Image on top."},"Steps":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/$defs/StepsItem"}}},"required":["items"],"additionalProperties":false,"description":"Step-by-step guide"},"StepsItem":{"type":"object","properties":{"title":{"type":"string"},"details":{"type":"string"}},"required":["title","details"],"additionalProperties":false,"description":"title and details text for one step"},"InlineHeader":{"type":"object","properties":{"heading":{"type":"string"},"description":{"type":"string"}},"required":["heading"],"additionalProperties":false,"description":"Compact section heading with an optional one-line description, for use inside cards."},"EntityList":{"type":"object","properties":{"rows":{"default":[],"type":"array","items":{"type":"object","properties":{"left":{"type":"string"},"right":{"type":"string"},"rightVariant":{"default":"text","type":"string","enum":["text","number"]}},"required":["left","right","rightVariant"],"additionalProperties":false}},"size":{"default":"default","type":"string","enum":["small","default"]},"header":{"type":"object","properties":{"left":{"type":"string"},"right":{"type":"string"},"rightVariant":{"default":"text","type":"string","enum":["text","number"]}},"required":["left","right","rightVariant"],"additionalProperties":false},"footer":{"type":"object","properties":{"left":{"type":"string"},"right":{"type":"string"},"rightVariant":{"default":"text","type":"string","enum":["text","number"]}},"required":["left","right","rightVariant"],"additionalProperties":false}},"required":["rows","size"],"additionalProperties":false,"description":"Two-column key/value rows (left label, right value). size 'default' supports optional header and footer rows; rightVariant 'number' uses tabular numbers."},"EditableTable":{"type":"object","properties":{"name":{"default":"","type":"string"},"columns":{"default":[],"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["text","number","date-single","select","url"]},"key":{"default":"default","type":"string"},"header":{"default":"","type":"string"},"width":{"type":"number"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}},"required":["value","label"],"additionalProperties":false}}},"required":["type","key","header"],"additionalProperties":false}},"data":{"default":[],"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"values":{"type":"array","items":{"type":["string","number"]}}},"required":["id","values"],"additionalProperties":false}}},"required":["name","columns","data"],"additionalProperties":false,"description":"Spreadsheet-like table whose cells the user can edit inline (text, number, url, date, select columns); edits are saved back as a form field"},"OverviewCardBlock":{"type":"object","properties":{"items":{"minItems":2,"type":"array","items":{"$ref":"#/$defs/OverviewCardItem"}},"layout":{"default":"grid","type":"string","enum":["grid","carousel"]},"responsive":{"default":true,"type":"boolean"},"action":{"$ref":"#/$defs/ActionExpression"},"gap":{"type":["number","string"]}},"required":["items","layout","responsive"],"additionalProperties":false,"description":"A grid or horizontal carousel of compact overview cards, each with a heading (icon/image/text) on top and an inline metric below; optionally clickable with a shared action."},"OverviewCardItem":{"type":"object","properties":{"id":{"type":"string"},"top":{"anyOf":[{"$ref":"#/$defs/IconText"},{"$ref":"#/$defs/Text"}]},"bottom":{"$ref":"#/$defs/MetricIndicatorInline"}},"required":["top"],"additionalProperties":false,"description":"One overview card: a heading slot at the top (IconText, ImageText or Text) and an optional MetricIndicatorInline at the bottom."},"IconText":{"type":"object","properties":{"icon":{"$ref":"#/$defs/Icon"},"iconVariant":{"default":"neutral","type":"string","enum":["neutral","info","success","warning","danger","inverted","filled","soft"]},"iconSize":{"default":"m","type":"string","enum":["xs","s","m","l","xl","sm","md","lg"]},"title":{"type":"string"},"subtitle":{"type":"string"},"bold":{"default":false,"type":"boolean"},"layout":{"default":"horizontal","type":"string","enum":["horizontal","vertical"]}},"required":["icon","iconVariant","iconSize","title","bold","layout"],"additionalProperties":false,"description":"An icon badge with a title and optional subtitle, laid out horizontally or vertically. iconVariant sets the badge color."},"Text":{"type":"object","properties":{"variant":{"default":"text","type":"string","enum":["text","number"]},"value":{"type":"string"},"subtext":{"type":"string"},"subtextVariant":{"default":"text","type":"string","enum":["text","number","metric"]},"size":{"default":"sm","type":"string","enum":["xs","sm","md","lg"]}},"required":["variant","value","subtextVariant","size"],"additionalProperties":false,"description":"Plain text line with optional subtext. variant 'number' uses tabular number styling; subtextVariant 'metric' colors a leading +/- subtext green/red."},"MetricIndicatorInline":{"type":"object","properties":{"value":{"type":"string"},"subtext":{"type":"string"},"trend":{"type":"object","properties":{"direction":{"type":"string","enum":["up","down"]},"value":{"type":"number"}},"required":["direction","value"],"additionalProperties":false}},"required":["value"],"additionalProperties":false,"description":"Headline metric value with an optional +/- percentage trend and subtext, all on one line."},"Tabs":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/$defs/TabItem"}}},"required":["items"],"additionalProperties":false,"description":"Tabbed container"},"TabItem":{"type":"object","properties":{"value":{"type":"string"},"trigger":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"$ref":"#/$defs/TextContent"},{"$ref":"#/$defs/MarkDownRenderer"},{"$ref":"#/$defs/CardHeader"},{"$ref":"#/$defs/Callout"},{"$ref":"#/$defs/CodeBlock"},{"$ref":"#/$defs/Image"},{"$ref":"#/$defs/Separator"},{"$ref":"#/$defs/HorizontalBarChart"},{"$ref":"#/$defs/PieChart"},{"$ref":"#/$defs/ScatterChart"},{"$ref":"#/$defs/AreaChart"},{"$ref":"#/$defs/BarChart"},{"$ref":"#/$defs/LineChart"},{"$ref":"#/$defs/Table"},{"$ref":"#/$defs/TagBlock"},{"$ref":"#/$defs/Form"},{"$ref":"#/$defs/Buttons"},{"$ref":"#/$defs/Steps"},{"$ref":"#/$defs/InlineHeader"},{"$ref":"#/$defs/EntityList"},{"$ref":"#/$defs/EditableTable"},{"$ref":"#/$defs/OverviewCardBlock"},{"$ref":"#/$defs/Architecture"},{"$ref":"#/$defs/Diff"},{"$ref":"#/$defs/FileTree"},{"$ref":"#/$defs/Mermaid"}]}}},"required":["value","trigger","content"],"additionalProperties":false,"description":"value is unique id, trigger is tab label, content is array of components"},"Architecture":{"type":"object","properties":{"nodes":{"type":"array","items":{"$ref":"#/$defs/Node"}},"edges":{"type":"array","items":{"$ref":"#/$defs/Edge"}},"groups":{"type":"array","items":{"$ref":"#/$defs/Group"}},"direction":{"type":"string","enum":["auto","right","down","lanes"]}},"required":["nodes","edges"],"additionalProperties":false,"description":"System diagram laid out automatically: write no coordinates. Every Node, Edge and Group is its own statement and click target. direction auto (default) runs right when that fits the page legibly, else down; lanes makes each top-level Group a column."},"Node":{"type":"object","properties":{"label":{"type":"string"},"kind":{"type":"string","enum":["frontend","backend","database","messagebus","cloud","security","external"]},"detail":{"type":"string"},"tag":{"type":"string"},"tone":{"type":"string","enum":["info","success","warning","danger","strong"]},"row":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["label"],"additionalProperties":false,"description":"A box in an Architecture. kind sets icon and color (default backend); detail is monospace, up to 2 lines (\\n breaks); tag is a small chip such as \"new\"; tone tints it (danger = risk, strong = where it ends); row pins it to a row (1, 2, ...) in lanes."},"Edge":{"type":"object","properties":{"from":{"$ref":"#/$defs/Node"},"to":{"$ref":"#/$defs/Node"},"label":{"type":"string"},"style":{"type":"string","enum":["solid","dashed","emphasis","security"]},"tone":{"type":"string","enum":["info","success","warning","danger"]}},"required":["from","to"],"additionalProperties":false,"description":"An arrow between two Node statements (pass their names, not strings). style: dashed for async, emphasis for the main path, security for auth or trust flows. tone colors it, e.g. danger for a risky write, success for a read."},"Group":{"type":"object","properties":{"label":{"type":"string"},"members":{"type":"array","items":{"$ref":"#/$defs/Node"}},"kind":{"type":"string","enum":["region","security","plain"]}},"required":["label","members"],"additionalProperties":false,"description":"A boundary around Node statements (a VPC, a cluster, a trust zone); members still sit where their edges put them. A group whose members are a subset of another's is drawn inside it; kind security draws it red, plain draws only its name."},"Diff":{"type":"object","properties":{"patch":{"type":"string"},"title":{"type":"string"}},"required":["patch"],"additionalProperties":false,"description":"Unified diff (git diff output, one or more files) with line numbers. patch is a raw multi-line string. Clicked lines reach the agent as file:+line."},"FileTree":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"string"}}},"required":["entries"],"additionalProperties":false,"description":"File tree, one path per entry, optionally prefixed with a git status code (A new, M modified, D deleted, R old -> new) and suffixed with \" # note\". Folders are inferred. Clicked files and folders reach the agent by path."},"Mermaid":{"type":"object","properties":{"source":{"type":"string"},"caption":{"type":"string"}},"required":["source"],"additionalProperties":false,"description":"Diagram from Mermaid source (flowchart, sequence, state, class, ER, gantt). source is a raw multi-line string. Keep node labels to a few words; clicked nodes reach the agent by label."},"Stack":{"type":"object","properties":{"children":{"type":"array","items":{}},"direction":{"type":"string","enum":["row","column"]},"gap":{"type":"string","enum":["none","xs","s","m","l","xl","2xl"]},"align":{"type":"string","enum":["start","center","end","stretch","baseline"]},"justify":{"type":"string","enum":["start","center","end","between","around","evenly"]},"wrap":{"type":"boolean"}},"required":["children"],"additionalProperties":false,"description":"Flex container. direction: \"row\"|\"column\" (default \"column\"). gap: \"none\"|\"xs\"|\"s\"|\"m\"|\"l\"|\"xl\"|\"2xl\" (default \"m\"). align: \"start\"|\"center\"|\"end\"|\"stretch\"|\"baseline\". justify: \"start\"|\"center\"|\"end\"|\"between\"|\"around\"|\"evenly\"."},"Label":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"],"additionalProperties":false,"description":"Text label"},"SwitchGroup":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/$defs/SwitchItem"}},"variant":{"type":"string","enum":["clear","card","sunk"]},"value":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"boolean"}}},"required":["name","items"],"additionalProperties":false,"description":"Group of switch toggles"},"SwitchItem":{"type":"object","properties":{"label":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"defaultChecked":{"type":"boolean"}},"required":["name"],"additionalProperties":false,"description":"Individual switch toggle"},"Accordion":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/$defs/AccordionItem"}}},"required":["items"],"additionalProperties":false,"description":"Collapsible sections"},"AccordionItem":{"type":"object","properties":{"value":{"type":"string"},"trigger":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"$ref":"#/$defs/TextContent"},{"$ref":"#/$defs/MarkDownRenderer"},{"$ref":"#/$defs/CardHeader"},{"$ref":"#/$defs/Callout"},{"$ref":"#/$defs/CodeBlock"},{"$ref":"#/$defs/Image"},{"$ref":"#/$defs/Separator"},{"$ref":"#/$defs/HorizontalBarChart"},{"$ref":"#/$defs/PieChart"},{"$ref":"#/$defs/ScatterChart"},{"$ref":"#/$defs/AreaChart"},{"$ref":"#/$defs/BarChart"},{"$ref":"#/$defs/LineChart"},{"$ref":"#/$defs/Table"},{"$ref":"#/$defs/TagBlock"},{"$ref":"#/$defs/Form"},{"$ref":"#/$defs/Buttons"},{"$ref":"#/$defs/Steps"},{"$ref":"#/$defs/InlineHeader"},{"$ref":"#/$defs/EntityList"},{"$ref":"#/$defs/EditableTable"},{"$ref":"#/$defs/OverviewCardBlock"},{"$ref":"#/$defs/Architecture"},{"$ref":"#/$defs/Diff"},{"$ref":"#/$defs/FileTree"},{"$ref":"#/$defs/Mermaid"}]}}},"required":["value","trigger","content"],"additionalProperties":false,"description":"value is unique id, trigger is section title"},"Tag":{"type":"object","properties":{"text":{"type":"string"},"icon":{"$ref":"#/$defs/Icon"},"size":{"type":"string","enum":["sm","md","lg"]},"variant":{"type":"string","enum":["neutral","info","success","warning","danger"]}},"required":["text"],"additionalProperties":false,"description":"Styled tag/badge with optional Icon and variant"},"BoldText":{"type":"object","properties":{"variant":{"default":"text","type":"string","enum":["text","number"]},"value":{"type":"string"},"subtext":{"type":"string"},"subtextVariant":{"default":"text","type":"string","enum":["text","number","metric"]},"size":{"default":"sm","type":"string","enum":["xs","sm","md","lg"]}},"required":["variant","value","subtextVariant","size"],"additionalProperties":false,"description":"Emphasized (bold) text line with optional subtext. variant 'number' uses tabular number styling; subtextVariant 'metric' colors a leading +/- subtext green/red."}},"root":"Stack"}
|
|
1
|
+
{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"Card":{"$ref":"#/$defs/Card"},"CardHeader":{"$ref":"#/$defs/CardHeader"},"TextContent":{"$ref":"#/$defs/TextContent"},"MarkDownRenderer":{"$ref":"#/$defs/MarkDownRenderer"},"Callout":{"$ref":"#/$defs/Callout"},"Image":{"$ref":"#/$defs/Image"},"CodeBlock":{"$ref":"#/$defs/CodeBlock"},"InlineHeader":{"$ref":"#/$defs/InlineHeader"},"Table":{"$ref":"#/$defs/Table"},"Col":{"$ref":"#/$defs/Col"},"EditableTable":{"$ref":"#/$defs/EditableTable"},"BarChart":{"$ref":"#/$defs/BarChart"},"LineChart":{"$ref":"#/$defs/LineChart"},"AreaChart":{"$ref":"#/$defs/AreaChart"},"HorizontalBarChart":{"$ref":"#/$defs/HorizontalBarChart"},"Series":{"$ref":"#/$defs/Series"},"PieChart":{"$ref":"#/$defs/PieChart"},"ScatterChart":{"$ref":"#/$defs/ScatterChart"},"ScatterSeries":{"$ref":"#/$defs/ScatterSeries"},"Point":{"$ref":"#/$defs/Point"},"Form":{"$ref":"#/$defs/Form"},"FormControl":{"$ref":"#/$defs/FormControl"},"Label":{"$ref":"#/$defs/Label"},"Input":{"$ref":"#/$defs/Input"},"TextArea":{"$ref":"#/$defs/TextArea"},"Select":{"$ref":"#/$defs/Select"},"SelectItem":{"$ref":"#/$defs/SelectItem"},"Slider":{"$ref":"#/$defs/Slider"},"CheckBoxGroup":{"$ref":"#/$defs/CheckBoxGroup"},"CheckBoxItem":{"$ref":"#/$defs/CheckBoxItem"},"RadioGroup":{"$ref":"#/$defs/RadioGroup"},"RadioItem":{"$ref":"#/$defs/RadioItem"},"SwitchGroup":{"$ref":"#/$defs/SwitchGroup"},"SwitchItem":{"$ref":"#/$defs/SwitchItem"},"ChipItem":{"$ref":"#/$defs/ChipItem"},"Chips":{"$ref":"#/$defs/Chips"},"OptionCard":{"$ref":"#/$defs/OptionCard"},"OptionCards":{"$ref":"#/$defs/OptionCards"},"Button":{"$ref":"#/$defs/Button"},"Buttons":{"$ref":"#/$defs/Buttons"},"Stack":{"$ref":"#/$defs/Stack"},"Tabs":{"$ref":"#/$defs/Tabs"},"TabItem":{"$ref":"#/$defs/TabItem"},"Accordion":{"$ref":"#/$defs/Accordion"},"AccordionItem":{"$ref":"#/$defs/AccordionItem"},"Steps":{"$ref":"#/$defs/Steps"},"StepsItem":{"$ref":"#/$defs/StepsItem"},"Separator":{"$ref":"#/$defs/Separator"},"TagBlock":{"$ref":"#/$defs/TagBlock"},"Tag":{"$ref":"#/$defs/Tag"},"Icon":{"$ref":"#/$defs/Icon"},"EntityList":{"$ref":"#/$defs/EntityList"},"Text":{"$ref":"#/$defs/Text"},"BoldText":{"$ref":"#/$defs/BoldText"},"IconText":{"$ref":"#/$defs/IconText"},"MetricIndicatorInline":{"$ref":"#/$defs/MetricIndicatorInline"},"OverviewCardItem":{"$ref":"#/$defs/OverviewCardItem"},"OverviewCardBlock":{"$ref":"#/$defs/OverviewCardBlock"},"Architecture":{"$ref":"#/$defs/Architecture"},"Node":{"$ref":"#/$defs/Node"},"Edge":{"$ref":"#/$defs/Edge"},"Group":{"$ref":"#/$defs/Group"},"Diff":{"$ref":"#/$defs/Diff"},"FileTree":{"$ref":"#/$defs/FileTree"},"Mermaid":{"$ref":"#/$defs/Mermaid"},"Progress":{"$ref":"#/$defs/Progress"},"Avatar":{"$ref":"#/$defs/Avatar"},"AvatarGroup":{"$ref":"#/$defs/AvatarGroup"},"Tooltip":{"$ref":"#/$defs/Tooltip"},"HoverCard":{"$ref":"#/$defs/HoverCard"},"Breadcrumb":{"$ref":"#/$defs/Breadcrumb"},"BreadcrumbItem":{"$ref":"#/$defs/BreadcrumbItem"},"Kbd":{"$ref":"#/$defs/Kbd"},"Skeleton":{"$ref":"#/$defs/Skeleton"},"Calendar":{"$ref":"#/$defs/Calendar"},"Timeline":{"$ref":"#/$defs/Timeline"},"TimelineItem":{"$ref":"#/$defs/TimelineItem"}},"required":["Card","CardHeader","TextContent","MarkDownRenderer","Callout","Image","CodeBlock","InlineHeader","Table","Col","EditableTable","BarChart","LineChart","AreaChart","HorizontalBarChart","Series","PieChart","ScatterChart","ScatterSeries","Point","Form","FormControl","Label","Input","TextArea","Select","SelectItem","Slider","CheckBoxGroup","CheckBoxItem","RadioGroup","RadioItem","SwitchGroup","SwitchItem","ChipItem","Chips","OptionCard","OptionCards","Button","Buttons","Stack","Tabs","TabItem","Accordion","AccordionItem","Steps","StepsItem","Separator","TagBlock","Tag","Icon","EntityList","Text","BoldText","IconText","MetricIndicatorInline","OverviewCardItem","OverviewCardBlock","Architecture","Node","Edge","Group","Diff","FileTree","Mermaid","Progress","Avatar","AvatarGroup","Tooltip","HoverCard","Breadcrumb","BreadcrumbItem","Kbd","Skeleton","Calendar","Timeline","TimelineItem"],"additionalProperties":false,"$defs":{"Card":{"type":"object","properties":{"children":{"type":"array","items":{"anyOf":[{"$ref":"#/$defs/TextContent"},{"$ref":"#/$defs/MarkDownRenderer"},{"$ref":"#/$defs/CardHeader"},{"$ref":"#/$defs/Callout"},{"$ref":"#/$defs/CodeBlock"},{"$ref":"#/$defs/Image"},{"$ref":"#/$defs/Separator"},{"$ref":"#/$defs/HorizontalBarChart"},{"$ref":"#/$defs/PieChart"},{"$ref":"#/$defs/ScatterChart"},{"$ref":"#/$defs/AreaChart"},{"$ref":"#/$defs/BarChart"},{"$ref":"#/$defs/LineChart"},{"$ref":"#/$defs/Table"},{"$ref":"#/$defs/TagBlock"},{"$ref":"#/$defs/Form"},{"$ref":"#/$defs/Buttons"},{"$ref":"#/$defs/Steps"},{"$ref":"#/$defs/InlineHeader"},{"$ref":"#/$defs/EntityList"},{"$ref":"#/$defs/EditableTable"},{"$ref":"#/$defs/OverviewCardBlock"},{"$ref":"#/$defs/Tabs"},{"$ref":"#/$defs/Stack"},{"$ref":"#/$defs/Architecture"},{"$ref":"#/$defs/Diff"},{"$ref":"#/$defs/FileTree"},{"$ref":"#/$defs/Mermaid"},{"$ref":"#/$defs/Progress"},{"$ref":"#/$defs/Avatar"},{"$ref":"#/$defs/AvatarGroup"},{"$ref":"#/$defs/Tooltip"},{"$ref":"#/$defs/HoverCard"},{"$ref":"#/$defs/Breadcrumb"},{"$ref":"#/$defs/Kbd"},{"$ref":"#/$defs/Skeleton"},{"$ref":"#/$defs/Calendar"},{"$ref":"#/$defs/Timeline"}]}},"variant":{"type":"string","enum":["card","sunk","clear"]},"direction":{"type":"string","enum":["row","column"]},"gap":{"type":"string","enum":["none","xs","s","m","l","xl","2xl"]},"align":{"type":"string","enum":["start","center","end","stretch","baseline"]},"justify":{"type":"string","enum":["start","center","end","between","around","evenly"]},"wrap":{"type":"boolean"}},"required":["children"],"additionalProperties":false,"description":"Styled container. variant: \"card\" (default, elevated) | \"sunk\" (recessed) | \"clear\" (transparent). Always full width. Accepts all Stack flex params (default: direction \"column\"). Cards flex to share space in row/wrap layouts."},"TextContent":{"type":"object","properties":{"text":{"type":"string"},"size":{"type":"string","enum":["small","default","large","small-heavy","large-heavy"]}},"required":["text"],"additionalProperties":false,"description":"Text block. Supports markdown. Optional size: \"small\" | \"default\" | \"large\" | \"small-heavy\" | \"large-heavy\"."},"MarkDownRenderer":{"type":"object","properties":{"textMarkdown":{"type":"string"},"variant":{"type":"string","enum":["clear","card","sunk"]}},"required":["textMarkdown"],"additionalProperties":false,"description":"Renders markdown text with optional container variant"},"CardHeader":{"type":"object","properties":{"title":{"type":"string"},"subtitle":{"type":"string"}},"additionalProperties":false,"description":"Header with optional title and subtitle"},"Callout":{"type":"object","properties":{"variant":{"type":"string","enum":["info","warning","error","success","neutral"]},"title":{"type":"string"},"description":{"type":"string"},"visible":{"type":"boolean"}},"required":["variant","title","description"],"additionalProperties":false,"description":"Callout banner. Optional visible is a reactive $boolean — auto-dismisses after 3s by setting $visible to false."},"CodeBlock":{"type":"object","properties":{"language":{"type":"string"},"codeString":{"type":"string"}},"required":["language","codeString"],"additionalProperties":false,"description":"Syntax-highlighted code block"},"Image":{"type":"object","properties":{"alt":{"type":"string"},"src":{"type":"string"}},"required":["alt"],"additionalProperties":false,"description":"Image with alt text and optional URL"},"Separator":{"type":"object","properties":{"orientation":{"type":"string","enum":["horizontal","vertical"]},"decorative":{"type":"boolean"}},"additionalProperties":false,"description":"Visual divider between content sections"},"HorizontalBarChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/$defs/Series"}},"variant":{"type":"string","enum":["grouped","stacked"]},"xLabel":{"type":"string"},"yLabel":{"type":"string"}},"required":["labels","series"],"additionalProperties":false,"description":"Horizontal bars; prefer when category labels are long or for ranked lists"},"Series":{"type":"object","properties":{"category":{"type":"string"},"values":{"type":"array","items":{"type":"number"}}},"required":["category","values"],"additionalProperties":false,"description":"One data series"},"PieChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"values":{"type":"array","items":{"type":"number"}},"variant":{"type":"string","enum":["pie","donut"]},"appearance":{"type":"string","enum":["circular","semiCircular"]}},"required":["labels","values"],"additionalProperties":false,"description":"Circular slices; use plucked arrays: PieChart(data.categories, data.values)"},"ScatterChart":{"type":"object","properties":{"datasets":{"type":"array","items":{"$ref":"#/$defs/ScatterSeries"}},"xLabel":{"type":"string"},"yLabel":{"type":"string"}},"required":["datasets"],"additionalProperties":false,"description":"X/Y scatter plot; use for correlations, distributions, and clustering"},"ScatterSeries":{"type":"object","properties":{"name":{"type":"string"},"points":{"type":"array","items":{"$ref":"#/$defs/Point"}}},"required":["name","points"],"additionalProperties":false,"description":"Named dataset"},"Point":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"}},"required":["x","y"],"additionalProperties":false,"description":"Data point with numeric coordinates"},"AreaChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/$defs/Series"}},"variant":{"type":"string","enum":["linear","natural","step"]},"xLabel":{"type":"string"},"yLabel":{"type":"string"},"height":{"type":"number"}},"required":["labels","series"],"additionalProperties":false,"description":"Filled area under lines; use for cumulative totals or volume trends over time"},"BarChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/$defs/Series"}},"variant":{"type":"string","enum":["grouped","stacked"]},"xLabel":{"type":"string"},"yLabel":{"type":"string"},"height":{"type":"number"}},"required":["labels","series"],"additionalProperties":false,"description":"Vertical bars; use for comparing values across categories with one or more series"},"LineChart":{"type":"object","properties":{"labels":{"type":"array","items":{"type":"string"}},"series":{"type":"array","items":{"$ref":"#/$defs/Series"}},"variant":{"type":"string","enum":["linear","natural","step"]},"xLabel":{"type":"string"},"yLabel":{"type":"string"},"height":{"type":"number"}},"required":["labels","series"],"additionalProperties":false,"description":"Lines over categories; use for trends and continuous data over time"},"Table":{"type":"object","properties":{"columns":{"type":"array","items":{"$ref":"#/$defs/Col"}}},"required":["columns"],"additionalProperties":false,"description":"Data table — column-oriented. Each Col holds its own data array."},"Col":{"type":"object","properties":{"label":{"type":"string"},"data":{},"type":{"type":"string","enum":["string","number","action"]}},"required":["label","data"],"additionalProperties":false,"description":"Column definition — holds label + data array"},"TagBlock":{"type":"object","properties":{"tags":{"type":"array","items":{"type":"string"}},"size":{"type":"string","enum":["sm","md","lg"]}},"required":["tags"],"additionalProperties":false,"description":"tags is an array of strings; optional size sm | md | lg"},"Form":{"type":"object","properties":{"name":{"type":"string"},"buttons":{"$ref":"#/$defs/Buttons"},"fields":{"default":[],"type":"array","items":{"$ref":"#/$defs/FormControl"}}},"required":["name","buttons","fields"],"additionalProperties":false,"description":"Form container with fields and explicit action buttons"},"Buttons":{"type":"object","properties":{"buttons":{"type":"array","items":{"$ref":"#/$defs/Button"}},"direction":{"type":"string","enum":["row","column"]}},"required":["buttons"],"additionalProperties":false,"description":"Group of Button components. direction: \"row\" (default) | \"column\"."},"Button":{"type":"object","properties":{"label":{"type":"string"},"action":{"$ref":"#/$defs/ActionExpression"},"variant":{"type":"string","enum":["primary","secondary","tertiary"]},"type":{"type":"string","enum":["normal","destructive"]},"size":{"type":"string","enum":["extra-small","small","medium","large"]}},"required":["label"],"additionalProperties":false,"description":"Clickable button"},"ActionExpression":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"open_url"},"url":{"type":"string"}},"required":["type","url"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"continue_conversation"},"context":{"type":"string"}},"required":["type"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string"},"params":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"required":["type"],"additionalProperties":false}]},"FormControl":{"type":"object","properties":{"label":{"type":"string"},"input":{"anyOf":[{"$ref":"#/$defs/Input"},{"$ref":"#/$defs/TextArea"},{"$ref":"#/$defs/Select"},{"$ref":"#/$defs/Slider"},{"$ref":"#/$defs/CheckBoxGroup"},{"$ref":"#/$defs/RadioGroup"},{"$ref":"#/$defs/Chips"},{"$ref":"#/$defs/OptionCards"}]},"hint":{"type":"string"}},"required":["label","input"],"additionalProperties":false,"description":"Field with label, input component, and optional hint text"},"Input":{"type":"object","properties":{"name":{"type":"string"},"placeholder":{"type":"string"},"type":{"type":"string","enum":["text","email","password","number","url"]},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"string"}},"required":["name"],"additionalProperties":false},"TextArea":{"type":"object","properties":{"name":{"type":"string"},"placeholder":{"type":"string"},"rows":{"type":"number"},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"string"}},"required":["name"],"additionalProperties":false},"Select":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/$defs/SelectItem"}},"placeholder":{"type":"string"},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"string"},"size":{"type":"string","enum":["small","medium","large"]}},"required":["name","items"],"additionalProperties":false},"SelectItem":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}},"required":["value","label"],"additionalProperties":false,"description":"Option for Select"},"Slider":{"type":"object","properties":{"name":{"type":"string"},"variant":{"type":"string","enum":["continuous","discrete"]},"min":{"type":"number"},"max":{"type":"number"},"step":{"type":"number"},"defaultValue":{"type":"array","items":{"type":"number"}},"label":{"type":"string"},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"array","items":{"type":"number"}}},"required":["name","variant","min","max"],"additionalProperties":false,"description":"Numeric slider input; supports continuous and discrete (stepped) variants"},"CheckBoxGroup":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/$defs/CheckBoxItem"}},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"boolean"}}},"required":["name","items"],"additionalProperties":false},"CheckBoxItem":{"type":"object","properties":{"label":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"defaultChecked":{"type":"boolean"}},"required":["label","description","name"],"additionalProperties":false},"RadioGroup":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/$defs/RadioItem"}},"defaultValue":{"type":"string"},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"value":{"type":"string"}},"required":["name","items"],"additionalProperties":false},"RadioItem":{"type":"object","properties":{"label":{"type":"string"},"description":{"type":"string"},"value":{"type":"string"}},"required":["label","description","value"],"additionalProperties":false},"Chips":{"type":"object","properties":{"name":{"type":"string"},"type":{"default":"multiple","type":"string","enum":["single","multiple"]},"items":{"default":[],"type":"array","items":{"$ref":"#/$defs/ChipItem"}},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["name","type","items"],"additionalProperties":false,"description":"A form field of compact selectable chips for choosing one or many short options; the selection is stored under `name`."},"ChipItem":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"},"icon":{"$ref":"#/$defs/Icon"},"disabled":{"type":"boolean"}},"required":["value","label"],"additionalProperties":false,"description":"A single selectable chip inside a Chips group, with a value, label and optional icon."},"Icon":{"type":"object","properties":{"name":{"type":"string"},"category":{"type":"string"}},"required":["name"],"additionalProperties":false,"description":"A lucide icon by kebab-case name (e.g. 'circle-check'). Optional category picks a topical fallback when the name doesn't resolve."},"OptionCards":{"type":"object","properties":{"name":{"type":"string"},"type":{"default":"single","type":"string","enum":["single","multiple"]},"items":{"default":[],"type":"array","items":{"$ref":"#/$defs/OptionCard"}},"rules":{"type":"object","properties":{"required":{"type":"boolean"},"email":{"type":"boolean"},"url":{"type":"boolean"},"numeric":{"type":"boolean"},"min":{"type":"number"},"max":{"type":"number"},"minLength":{"type":"number"},"maxLength":{"type":"number"},"pattern":{"type":"string"}},"additionalProperties":false},"defaultValue":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"required":["name","type","items"],"additionalProperties":false,"description":"A form field of selectable cards (title, optional subtitle, optional icon or image) laid out in a responsive grid for choosing one or many options; the selection is stored under `name`."},"OptionCard":{"type":"object","properties":{"value":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string"},"topContent":{"anyOf":[{"$ref":"#/$defs/Icon"},{"$ref":"#/$defs/Image"}]},"disabled":{"type":"boolean"}},"required":["value","title"],"additionalProperties":false,"description":"A single selectable card inside an OptionCards group, with a value, title, optional subtitle and an optional Icon or Image on top."},"Steps":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/$defs/StepsItem"}}},"required":["items"],"additionalProperties":false,"description":"Step-by-step guide"},"StepsItem":{"type":"object","properties":{"title":{"type":"string"},"details":{"type":"string"}},"required":["title","details"],"additionalProperties":false,"description":"title and details text for one step"},"InlineHeader":{"type":"object","properties":{"heading":{"type":"string"},"description":{"type":"string"}},"required":["heading"],"additionalProperties":false,"description":"Compact section heading with an optional one-line description, for use inside cards."},"EntityList":{"type":"object","properties":{"rows":{"default":[],"type":"array","items":{"type":"object","properties":{"left":{"type":"string"},"right":{"type":"string"},"rightVariant":{"default":"text","type":"string","enum":["text","number"]}},"required":["left","right","rightVariant"],"additionalProperties":false}},"size":{"default":"default","type":"string","enum":["small","default"]},"header":{"type":"object","properties":{"left":{"type":"string"},"right":{"type":"string"},"rightVariant":{"default":"text","type":"string","enum":["text","number"]}},"required":["left","right","rightVariant"],"additionalProperties":false},"footer":{"type":"object","properties":{"left":{"type":"string"},"right":{"type":"string"},"rightVariant":{"default":"text","type":"string","enum":["text","number"]}},"required":["left","right","rightVariant"],"additionalProperties":false}},"required":["rows","size"],"additionalProperties":false,"description":"Two-column key/value rows (left label, right value). size 'default' supports optional header and footer rows; rightVariant 'number' uses tabular numbers."},"EditableTable":{"type":"object","properties":{"name":{"default":"","type":"string"},"columns":{"default":[],"type":"array","items":{"type":"object","properties":{"type":{"type":"string","enum":["text","number","date-single","select","url"]},"key":{"default":"default","type":"string"},"header":{"default":"","type":"string"},"width":{"type":"number"},"options":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"label":{"type":"string"}},"required":["value","label"],"additionalProperties":false}}},"required":["type","key","header"],"additionalProperties":false}},"data":{"default":[],"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"values":{"type":"array","items":{"type":["string","number"]}}},"required":["id","values"],"additionalProperties":false}}},"required":["name","columns","data"],"additionalProperties":false,"description":"Spreadsheet-like table whose cells the user can edit inline (text, number, url, date, select columns); edits are saved back as a form field"},"OverviewCardBlock":{"type":"object","properties":{"items":{"minItems":2,"type":"array","items":{"$ref":"#/$defs/OverviewCardItem"}},"layout":{"default":"grid","type":"string","enum":["grid","carousel"]},"responsive":{"default":true,"type":"boolean"},"action":{"$ref":"#/$defs/ActionExpression"},"gap":{"type":["number","string"]}},"required":["items","layout","responsive"],"additionalProperties":false,"description":"A grid or horizontal carousel of compact overview cards, each with a heading (icon/image/text) on top and an inline metric below; optionally clickable with a shared action."},"OverviewCardItem":{"type":"object","properties":{"id":{"type":"string"},"top":{"anyOf":[{"$ref":"#/$defs/IconText"},{"$ref":"#/$defs/Text"}]},"bottom":{"$ref":"#/$defs/MetricIndicatorInline"}},"required":["top"],"additionalProperties":false,"description":"One overview card: a heading slot at the top (IconText, ImageText or Text) and an optional MetricIndicatorInline at the bottom."},"IconText":{"type":"object","properties":{"icon":{"$ref":"#/$defs/Icon"},"iconVariant":{"default":"neutral","type":"string","enum":["neutral","info","success","warning","danger","inverted","filled","soft"]},"iconSize":{"default":"m","type":"string","enum":["xs","s","m","l","xl","sm","md","lg"]},"title":{"type":"string"},"subtitle":{"type":"string"},"bold":{"default":false,"type":"boolean"},"layout":{"default":"horizontal","type":"string","enum":["horizontal","vertical"]}},"required":["icon","iconVariant","iconSize","title","bold","layout"],"additionalProperties":false,"description":"An icon badge with a title and optional subtitle, laid out horizontally or vertically. iconVariant sets the badge color."},"Text":{"type":"object","properties":{"variant":{"default":"text","type":"string","enum":["text","number"]},"value":{"type":"string"},"subtext":{"type":"string"},"subtextVariant":{"default":"text","type":"string","enum":["text","number","metric"]},"size":{"default":"sm","type":"string","enum":["xs","sm","md","lg"]}},"required":["variant","value","subtextVariant","size"],"additionalProperties":false,"description":"Plain text line with optional subtext. variant 'number' uses tabular number styling; subtextVariant 'metric' colors a leading +/- subtext green/red."},"MetricIndicatorInline":{"type":"object","properties":{"value":{"type":"string"},"subtext":{"type":"string"},"trend":{"type":"object","properties":{"direction":{"type":"string","enum":["up","down"]},"value":{"type":"number"}},"required":["direction","value"],"additionalProperties":false}},"required":["value"],"additionalProperties":false,"description":"Headline metric value with an optional +/- percentage trend and subtext, all on one line."},"Tabs":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/$defs/TabItem"}}},"required":["items"],"additionalProperties":false,"description":"Tabbed container"},"TabItem":{"type":"object","properties":{"value":{"type":"string"},"trigger":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"$ref":"#/$defs/TextContent"},{"$ref":"#/$defs/MarkDownRenderer"},{"$ref":"#/$defs/CardHeader"},{"$ref":"#/$defs/Callout"},{"$ref":"#/$defs/CodeBlock"},{"$ref":"#/$defs/Image"},{"$ref":"#/$defs/Separator"},{"$ref":"#/$defs/HorizontalBarChart"},{"$ref":"#/$defs/PieChart"},{"$ref":"#/$defs/ScatterChart"},{"$ref":"#/$defs/AreaChart"},{"$ref":"#/$defs/BarChart"},{"$ref":"#/$defs/LineChart"},{"$ref":"#/$defs/Table"},{"$ref":"#/$defs/TagBlock"},{"$ref":"#/$defs/Form"},{"$ref":"#/$defs/Buttons"},{"$ref":"#/$defs/Steps"},{"$ref":"#/$defs/InlineHeader"},{"$ref":"#/$defs/EntityList"},{"$ref":"#/$defs/EditableTable"},{"$ref":"#/$defs/OverviewCardBlock"},{"$ref":"#/$defs/Architecture"},{"$ref":"#/$defs/Diff"},{"$ref":"#/$defs/FileTree"},{"$ref":"#/$defs/Mermaid"},{"$ref":"#/$defs/Progress"},{"$ref":"#/$defs/Avatar"},{"$ref":"#/$defs/AvatarGroup"},{"$ref":"#/$defs/Tooltip"},{"$ref":"#/$defs/HoverCard"},{"$ref":"#/$defs/Breadcrumb"},{"$ref":"#/$defs/Kbd"},{"$ref":"#/$defs/Skeleton"},{"$ref":"#/$defs/Calendar"},{"$ref":"#/$defs/Timeline"}]}}},"required":["value","trigger","content"],"additionalProperties":false,"description":"value is unique id, trigger is tab label, content is array of components"},"Architecture":{"type":"object","properties":{"nodes":{"type":"array","items":{"$ref":"#/$defs/Node"}},"edges":{"type":"array","items":{"$ref":"#/$defs/Edge"}},"groups":{"type":"array","items":{"$ref":"#/$defs/Group"}},"direction":{"type":"string","enum":["auto","right","down","lanes"]}},"required":["nodes","edges"],"additionalProperties":false,"description":"System diagram laid out automatically: write no coordinates. Every Node, Edge and Group is its own statement and click target. direction auto (default) runs right when that fits the page legibly, else down; lanes makes each top-level Group a column."},"Node":{"type":"object","properties":{"label":{"type":"string"},"kind":{"type":"string","enum":["frontend","backend","database","messagebus","cloud","security","external"]},"detail":{"type":"string"},"tag":{"type":"string"},"tone":{"type":"string","enum":["info","success","warning","danger","strong"]},"row":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["label"],"additionalProperties":false,"description":"A box in an Architecture. kind sets icon and color (default backend); detail is monospace, up to 2 lines (\\n breaks); tag is a small chip such as \"new\"; tone tints it (danger = risk, strong = where it ends); row pins it to a row (1, 2, ...) in lanes."},"Edge":{"type":"object","properties":{"from":{"$ref":"#/$defs/Node"},"to":{"$ref":"#/$defs/Node"},"label":{"type":"string"},"style":{"type":"string","enum":["solid","dashed","emphasis","security"]},"tone":{"type":"string","enum":["info","success","warning","danger"]}},"required":["from","to"],"additionalProperties":false,"description":"An arrow between two Node statements (pass their names, not strings). style: dashed for async, emphasis for the main path, security for auth or trust flows. tone colors it, e.g. danger for a risky write, success for a read."},"Group":{"type":"object","properties":{"label":{"type":"string"},"members":{"type":"array","items":{"$ref":"#/$defs/Node"}},"kind":{"type":"string","enum":["region","security","plain"]}},"required":["label","members"],"additionalProperties":false,"description":"A boundary around Node statements (a VPC, a cluster, a trust zone); members still sit where their edges put them. A group whose members are a subset of another's is drawn inside it; kind security draws it red, plain draws only its name."},"Diff":{"type":"object","properties":{"patch":{"type":"string"},"title":{"type":"string"}},"required":["patch"],"additionalProperties":false,"description":"Unified diff (git diff output, one or more files) with line numbers. patch is a raw multi-line string. Clicked lines reach the agent as file:+line."},"FileTree":{"type":"object","properties":{"entries":{"type":"array","items":{"type":"string"}}},"required":["entries"],"additionalProperties":false,"description":"File tree, one path per entry, optionally prefixed with a git status code (A new, M modified, D deleted, R old -> new) and suffixed with \" # note\". Folders are inferred. Clicked files and folders reach the agent by path."},"Mermaid":{"type":"object","properties":{"source":{"type":"string"},"caption":{"type":"string"}},"required":["source"],"additionalProperties":false,"description":"Diagram from Mermaid source (flowchart, sequence, state, class, ER, gantt). source is a raw multi-line string. Keep node labels to a few words; clicked nodes reach the agent by label."},"Progress":{"type":"object","properties":{"value":{"type":"number"},"label":{"type":"string"},"max":{"type":"number"}},"required":["value"],"additionalProperties":false,"description":"Progress bar. value counts toward max (default 100); label names what is progressing. Shows a percentage."},"Avatar":{"type":"object","properties":{"name":{"type":"string"},"src":{"type":"string"},"size":{"type":"string","enum":["md","lg"]}},"required":["name"],"additionalProperties":false,"description":"Round avatar for a person. Shows the initials of name; src is an optional https image URL."},"AvatarGroup":{"type":"object","properties":{"avatars":{"type":"array","items":{"$ref":"#/$defs/Avatar"}},"max":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["avatars"],"additionalProperties":false,"description":"Overlapping Avatars, for reviewers or owners. max (default 4) shows the rest as +N."},"Tooltip":{"type":"object","properties":{"text":{"type":"string"},"tip":{"type":"string"}},"required":["text","tip"],"additionalProperties":false,"description":"Inline text with a short hint on hover or focus (a term and its definition). Keep tip to one line."},"HoverCard":{"type":"object","properties":{"text":{"type":"string"},"title":{"type":"string"},"body":{"type":"string"}},"required":["text","title"],"additionalProperties":false,"description":"Inline text that shows a small card (title and a line or two of body) on hover or focus, e.g. a person or a service."},"Breadcrumb":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/$defs/BreadcrumbItem"}}},"required":["items"],"additionalProperties":false,"description":"Path trail such as Repo / Package / File, from BreadcrumbItems. Each item is a click target."},"BreadcrumbItem":{"type":"object","properties":{"label":{"type":"string"},"href":{"type":"string"}},"required":["label"],"additionalProperties":false,"description":"One step of a Breadcrumb. href is optional; the last item is the current page."},"Kbd":{"type":"object","properties":{"keys":{"type":"string"}},"required":["keys"],"additionalProperties":false,"description":"Keyboard shortcut. keys joins keys with \"+\", e.g. \"Ctrl+K\"; each key is drawn as a key cap."},"Skeleton":{"type":"object","properties":{"lines":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"shape":{"type":"string","enum":["lines","avatar"]}},"additionalProperties":false,"description":"Grey placeholder block for content not yet written or loaded (default 3 lines). shape avatar adds a round head."},"Calendar":{"type":"object","properties":{"month":{"type":"string"},"highlights":{"type":"array","items":{"type":"string"}}},"required":["month"],"additionalProperties":false,"description":"Read-only month grid (not a date picker). month is \"YYYY-MM\"; highlights lists \"YYYY-MM-DD\" or \"YYYY-MM-DD label\" entries to mark, e.g. a freeze or a release. Marked days are click targets."},"Timeline":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/$defs/TimelineItem"}}},"required":["items"],"additionalProperties":false,"description":"Vertical history or schedule of TimelineItems, oldest first. Each item is a click target."},"TimelineItem":{"type":"object","properties":{"title":{"type":"string"},"date":{"type":"string"},"detail":{"type":"string"},"state":{"type":"string","enum":["done","current","upcoming"]}},"required":["title"],"additionalProperties":false,"description":"One event in a Timeline. state: done (default), current or upcoming."},"Stack":{"type":"object","properties":{"children":{"type":"array","items":{}},"direction":{"type":"string","enum":["row","column"]},"gap":{"type":"string","enum":["none","xs","s","m","l","xl","2xl"]},"align":{"type":"string","enum":["start","center","end","stretch","baseline"]},"justify":{"type":"string","enum":["start","center","end","between","around","evenly"]},"wrap":{"type":"boolean"}},"required":["children"],"additionalProperties":false,"description":"Flex container. direction: \"row\"|\"column\" (default \"column\"). gap: \"none\"|\"xs\"|\"s\"|\"m\"|\"l\"|\"xl\"|\"2xl\" (default \"m\"). align: \"start\"|\"center\"|\"end\"|\"stretch\"|\"baseline\". justify: \"start\"|\"center\"|\"end\"|\"between\"|\"around\"|\"evenly\"."},"Label":{"type":"object","properties":{"text":{"type":"string"}},"required":["text"],"additionalProperties":false,"description":"Text label"},"SwitchGroup":{"type":"object","properties":{"name":{"type":"string"},"items":{"type":"array","items":{"$ref":"#/$defs/SwitchItem"}},"variant":{"type":"string","enum":["clear","card","sunk"]},"value":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"boolean"}}},"required":["name","items"],"additionalProperties":false,"description":"Group of switch toggles"},"SwitchItem":{"type":"object","properties":{"label":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"defaultChecked":{"type":"boolean"}},"required":["name"],"additionalProperties":false,"description":"Individual switch toggle"},"Accordion":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/$defs/AccordionItem"}}},"required":["items"],"additionalProperties":false,"description":"Collapsible sections"},"AccordionItem":{"type":"object","properties":{"value":{"type":"string"},"trigger":{"type":"string"},"content":{"type":"array","items":{"anyOf":[{"$ref":"#/$defs/TextContent"},{"$ref":"#/$defs/MarkDownRenderer"},{"$ref":"#/$defs/CardHeader"},{"$ref":"#/$defs/Callout"},{"$ref":"#/$defs/CodeBlock"},{"$ref":"#/$defs/Image"},{"$ref":"#/$defs/Separator"},{"$ref":"#/$defs/HorizontalBarChart"},{"$ref":"#/$defs/PieChart"},{"$ref":"#/$defs/ScatterChart"},{"$ref":"#/$defs/AreaChart"},{"$ref":"#/$defs/BarChart"},{"$ref":"#/$defs/LineChart"},{"$ref":"#/$defs/Table"},{"$ref":"#/$defs/TagBlock"},{"$ref":"#/$defs/Form"},{"$ref":"#/$defs/Buttons"},{"$ref":"#/$defs/Steps"},{"$ref":"#/$defs/InlineHeader"},{"$ref":"#/$defs/EntityList"},{"$ref":"#/$defs/EditableTable"},{"$ref":"#/$defs/OverviewCardBlock"},{"$ref":"#/$defs/Architecture"},{"$ref":"#/$defs/Diff"},{"$ref":"#/$defs/FileTree"},{"$ref":"#/$defs/Mermaid"},{"$ref":"#/$defs/Progress"},{"$ref":"#/$defs/Avatar"},{"$ref":"#/$defs/AvatarGroup"},{"$ref":"#/$defs/Tooltip"},{"$ref":"#/$defs/HoverCard"},{"$ref":"#/$defs/Breadcrumb"},{"$ref":"#/$defs/Kbd"},{"$ref":"#/$defs/Skeleton"},{"$ref":"#/$defs/Calendar"},{"$ref":"#/$defs/Timeline"}]}}},"required":["value","trigger","content"],"additionalProperties":false,"description":"value is unique id, trigger is section title"},"Tag":{"type":"object","properties":{"text":{"type":"string"},"icon":{"$ref":"#/$defs/Icon"},"size":{"type":"string","enum":["sm","md","lg"]},"variant":{"type":"string","enum":["neutral","info","success","warning","danger"]}},"required":["text"],"additionalProperties":false,"description":"Styled tag/badge with optional Icon and variant"},"BoldText":{"type":"object","properties":{"variant":{"default":"text","type":"string","enum":["text","number"]},"value":{"type":"string"},"subtext":{"type":"string"},"subtextVariant":{"default":"text","type":"string","enum":["text","number","metric"]},"size":{"default":"sm","type":"string","enum":["xs","sm","md","lg"]}},"required":["variant","value","subtextVariant","size"],"additionalProperties":false,"description":"Emphasized (bold) text line with optional subtext. variant 'number' uses tabular number styling; subtextVariant 'metric' colors a leading +/- subtext green/red."}},"root":"Stack"}
|
package/package.json
CHANGED
|
@@ -1,20 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "austere-axi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Agent-authored review artifacts in OpenUI Lang: a few hundred tokens instead of a whole HTML page, with statement-level annotations fed back to the agent.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"bin": {
|
|
8
8
|
"austere-axi": "dist/cli.mjs"
|
|
9
9
|
},
|
|
10
|
+
"exports": {
|
|
11
|
+
"./pack": {
|
|
12
|
+
"types": "./types/pack.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./catalog": {
|
|
15
|
+
"types": "./types/catalog.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./pack-kit": {
|
|
18
|
+
"types": "./types/pack-kit.d.ts"
|
|
19
|
+
},
|
|
20
|
+
"./package.json": "./package.json"
|
|
21
|
+
},
|
|
10
22
|
"files": [
|
|
11
23
|
"dist",
|
|
12
24
|
"skills",
|
|
25
|
+
"types",
|
|
13
26
|
"README.md",
|
|
14
27
|
"LICENSE"
|
|
15
28
|
],
|
|
16
29
|
"engines": {
|
|
17
|
-
"node": ">=
|
|
30
|
+
"node": ">=22.18"
|
|
18
31
|
},
|
|
19
32
|
"scripts": {
|
|
20
33
|
"build": "node scripts/build.mjs",
|
|
@@ -24,7 +37,8 @@
|
|
|
24
37
|
"signatures": "node scripts/signatures.mjs",
|
|
25
38
|
"gallery": "node scripts/gallery.mjs",
|
|
26
39
|
"shot": "node scripts/shot.mjs",
|
|
27
|
-
"prepublishOnly": "npm run build && npm test"
|
|
40
|
+
"prepublishOnly": "npm run build && npm test",
|
|
41
|
+
"typecheck": "tsc --noEmit -p jsconfig.json"
|
|
28
42
|
},
|
|
29
43
|
"keywords": [
|
|
30
44
|
"axi",
|
|
@@ -45,12 +59,14 @@
|
|
|
45
59
|
"@openuidev/react-headless": "^0.18.1",
|
|
46
60
|
"@openuidev/react-lang": "^1.0.1",
|
|
47
61
|
"@openuidev/react-ui": "^0.18.1",
|
|
62
|
+
"@types/node": "^26.6.6",
|
|
48
63
|
"esbuild": "^0.28.2",
|
|
49
64
|
"lucide-react": "^0.575.0",
|
|
50
65
|
"mermaid": "^11.17.2",
|
|
51
66
|
"playwright-core": "^1.64.1",
|
|
52
67
|
"react": "^19.3.1",
|
|
53
68
|
"react-dom": "^19.3.1",
|
|
69
|
+
"typescript": "^7.0.2",
|
|
54
70
|
"zod": "^4.6.7",
|
|
55
71
|
"zustand": "^4.5.7"
|
|
56
72
|
}
|
|
@@ -14,10 +14,9 @@ Ask the user only the questions in steps 3 and 4. Use the default for each if th
|
|
|
14
14
|
|
|
15
15
|
Run `node --version`.
|
|
16
16
|
|
|
17
|
-
- Node
|
|
18
|
-
- The hub (step 4) needs Node 22.13 or later.
|
|
17
|
+
- Node 22.18 or later is necessary.
|
|
19
18
|
|
|
20
|
-
If Node is older than
|
|
19
|
+
If Node is older than 22.18, stop. Tell the user to install a current Node LTS.
|
|
21
20
|
|
|
22
21
|
## 2. Check the CLI
|
|
23
22
|
|
|
@@ -41,7 +40,7 @@ If the `skills` tool asks which agents to install for, pick the agent the user w
|
|
|
41
40
|
Ask the user about each item. Default: no.
|
|
42
41
|
|
|
43
42
|
- **Global command.** `npm install -g austere-axi`. Then `austere-axi` works without `npx -y`. Update it later with `npm update -g austere-axi`.
|
|
44
|
-
- **Hub.** `npx -y austere-axi hub on`. It keeps the server running and lists every page at `http://127.0.0.1:4388/`.
|
|
43
|
+
- **Hub.** `npx -y austere-axi hub on`. It keeps the server running and lists every page at `http://127.0.0.1:4388/`.
|
|
45
44
|
- **Phone review.** If Tailscale is running, the server also listens on the tailnet, and `open` prints a phone link. Nothing to install. Run `tailscale status` to check.
|
|
46
45
|
|
|
47
46
|
On a machine with no screen (SSH, CI, container), tell the user to set `AUSTERE_AXI_NO_OPEN=1`, so the CLI prints links and does not try to open a browser.
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// Types for the component catalog (src/shared/catalog.js) and the catalog.json
|
|
2
|
+
// a pack ships. Hand-written. Keep it in step with CATALOG_FORMAT.
|
|
3
|
+
|
|
4
|
+
export declare const CATALOG_FORMAT: 1;
|
|
5
|
+
|
|
6
|
+
export type Tier = "core" | "extended";
|
|
7
|
+
|
|
8
|
+
export interface CatalogEntry {
|
|
9
|
+
name: string;
|
|
10
|
+
group: string;
|
|
11
|
+
signature: string;
|
|
12
|
+
description: string;
|
|
13
|
+
tier: Tier;
|
|
14
|
+
/** "core", or the name of the pack that owns the component. */
|
|
15
|
+
pack: string;
|
|
16
|
+
examples: string[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface CatalogGroup {
|
|
20
|
+
name: string;
|
|
21
|
+
notes: string[];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface Catalog {
|
|
25
|
+
format: typeof CATALOG_FORMAT;
|
|
26
|
+
pack: string;
|
|
27
|
+
version: string;
|
|
28
|
+
groups: CatalogGroup[];
|
|
29
|
+
components: CatalogEntry[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** What a pack's dist/catalog.json holds: the catalog plus the pack-only fields. */
|
|
33
|
+
export interface PackCatalog extends Omit<Catalog, "components"> {
|
|
34
|
+
/** Pack API version the bundle targets. */
|
|
35
|
+
api: number;
|
|
36
|
+
/** `sha384-<base64>` of dist/pack.js. */
|
|
37
|
+
integrity: string;
|
|
38
|
+
/** Size of dist/pack.js in bytes. */
|
|
39
|
+
size: number;
|
|
40
|
+
/** True when the pack ships CSS. */
|
|
41
|
+
css: boolean;
|
|
42
|
+
components: (CatalogEntry & { slots: string[] | null })[];
|
|
43
|
+
/** JSON schema $defs reachable from the pack's components. */
|
|
44
|
+
defs: Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface SpecGroup {
|
|
48
|
+
name: string;
|
|
49
|
+
components: string[];
|
|
50
|
+
notes?: string[];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/** The part of an OpenUI `library.toSpec()` result that the catalog reads. */
|
|
54
|
+
export interface LibrarySpec {
|
|
55
|
+
components: Record<string, { signature: string; description?: string }>;
|
|
56
|
+
componentGroups?: SpecGroup[];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface CatalogFromSpecOptions {
|
|
60
|
+
pack?: string;
|
|
61
|
+
version?: string;
|
|
62
|
+
tiers?: Record<string, string>;
|
|
63
|
+
examples?: Record<string, string[]>;
|
|
64
|
+
/** Keep just these components (a pack's own, out of a library that also holds the core). */
|
|
65
|
+
only?: string[] | null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export declare function catalogFromSpec(spec: LibrarySpec, options?: CatalogFromSpecOptions): Catalog;
|
|
69
|
+
|
|
70
|
+
/** The spec the prompt is generated from: extended-tier components leave it. */
|
|
71
|
+
export declare function promptSpec<S extends LibrarySpec>(spec: S, tiers?: Record<string, string>): S;
|
|
72
|
+
|
|
73
|
+
export interface SearchOptions {
|
|
74
|
+
notesOf?: (entry: CatalogEntry) => string[];
|
|
75
|
+
limit?: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export declare function searchCatalog(
|
|
79
|
+
entries: CatalogEntry[],
|
|
80
|
+
query: string,
|
|
81
|
+
options?: SearchOptions,
|
|
82
|
+
): { entry: CatalogEntry; score: number }[];
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Types for the pack kit (src/pack-kit/index.js, shipped as dist/pack-kit.mjs).
|
|
2
|
+
import type { PackCatalog } from "./catalog.js";
|
|
3
|
+
|
|
4
|
+
export { PACK_API, CONTENT_SLOTS } from "./pack.js";
|
|
5
|
+
|
|
6
|
+
export declare const ENTRY_CANDIDATES: string[];
|
|
7
|
+
|
|
8
|
+
export interface PackageJson {
|
|
9
|
+
name?: string;
|
|
10
|
+
version?: string;
|
|
11
|
+
austere?: { entry?: string };
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export declare function readPackageJson(dir: string): PackageJson;
|
|
16
|
+
|
|
17
|
+
/** The pack's entry module: package.json "austere.entry", else the first of ENTRY_CANDIDATES. */
|
|
18
|
+
export declare function packEntry(dir: string, pkg?: PackageJson): string;
|
|
19
|
+
|
|
20
|
+
export declare function sri(buffer: Uint8Array): string;
|
|
21
|
+
|
|
22
|
+
export interface BuildPackOptions {
|
|
23
|
+
/** Pack folder (package.json + entry module). */
|
|
24
|
+
dir: string;
|
|
25
|
+
/** The esbuild module to bundle with. */
|
|
26
|
+
esbuild: { build(options: any): Promise<unknown> };
|
|
27
|
+
/** Default <dir>/dist. */
|
|
28
|
+
outDir?: string;
|
|
29
|
+
/** Default package.json name. */
|
|
30
|
+
name?: string;
|
|
31
|
+
/** Default package.json version. */
|
|
32
|
+
version?: string;
|
|
33
|
+
/** Core component names, to warn about collisions. */
|
|
34
|
+
coreNames?: string[];
|
|
35
|
+
/** Default true. */
|
|
36
|
+
minify?: boolean;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface BuildPackResult {
|
|
40
|
+
catalog: PackCatalog;
|
|
41
|
+
warnings: string[];
|
|
42
|
+
packFile: string;
|
|
43
|
+
catalogFile: string;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export declare function buildPack(options: BuildPackOptions): Promise<BuildPackResult>;
|
package/types/pack.d.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// Types for "austere-axi/pack": what a component pack imports. Hand-written
|
|
2
|
+
// to match src/runtime/pack-api.js and src/runtime/define.js.
|
|
3
|
+
import type { ZodObject, ZodRawShape, infer as ZodInfer } from "zod";
|
|
4
|
+
|
|
5
|
+
export type { Catalog, CatalogEntry, PackCatalog, Tier } from "./catalog.js";
|
|
6
|
+
|
|
7
|
+
/** Version of the pack API. A pack built for another major version is refused. */
|
|
8
|
+
export declare const PACK_API: 1;
|
|
9
|
+
|
|
10
|
+
/** Slots a content component may fill besides a Stack: "Card.children" and so on. */
|
|
11
|
+
export declare const CONTENT_SLOTS: readonly string[];
|
|
12
|
+
|
|
13
|
+
/** What a renderer receives. `renderNode` renders a child value from the parsed program. */
|
|
14
|
+
export interface RendererArgs<Props> {
|
|
15
|
+
props: Props;
|
|
16
|
+
renderNode: (value: unknown) => unknown;
|
|
17
|
+
statementId?: string;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface ComponentSpec<Shape extends ZodRawShape = ZodRawShape> {
|
|
21
|
+
/** PascalCase name the agent writes. */
|
|
22
|
+
name: string;
|
|
23
|
+
/** A stock group (Layout, Content, Data, Charts, Forms, Buttons) or a short capitalized category of your own. */
|
|
24
|
+
group: string;
|
|
25
|
+
/** zod props in positional order. Append-only once published. */
|
|
26
|
+
props: ZodObject<Shape>;
|
|
27
|
+
/** One line the agent reads in `spec`. */
|
|
28
|
+
description: string;
|
|
29
|
+
/** React component: ({ props, renderNode, statementId }) => node. */
|
|
30
|
+
renderer: (args: RendererArgs<ZodInfer<ZodObject<Shape>>>) => unknown;
|
|
31
|
+
/** OpenUI statements; the first calls this component. Required unless `slots` is null. */
|
|
32
|
+
example?: string | string[];
|
|
33
|
+
/** Like `example`, with hostile input. Never in the prompt. */
|
|
34
|
+
stress?: string | string[];
|
|
35
|
+
/** Extra prompt lines, each starting with "- ". */
|
|
36
|
+
notes?: string[];
|
|
37
|
+
/** Parent slots it may fill; null for value-only sub-components. */
|
|
38
|
+
slots?: string[] | null;
|
|
39
|
+
/** Wrap the output with its statement name. Default true. */
|
|
40
|
+
tagged?: boolean;
|
|
41
|
+
/** "extended" keeps it out of the prompt. Default "core". */
|
|
42
|
+
tier?: "core" | "extended";
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** What austereComponent() returns. Put `definition.ref` in another component's props to nest it. */
|
|
46
|
+
export interface AustereComponent {
|
|
47
|
+
name: string;
|
|
48
|
+
group: string;
|
|
49
|
+
notes: string[];
|
|
50
|
+
slots: string[] | null;
|
|
51
|
+
tagged: boolean;
|
|
52
|
+
tier: "core" | "extended";
|
|
53
|
+
example: string[] | null;
|
|
54
|
+
stress: string[] | null;
|
|
55
|
+
definition: {
|
|
56
|
+
ref: any;
|
|
57
|
+
[key: string]: any;
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export declare function austereComponent<Shape extends ZodRawShape>(spec: ComponentSpec<Shape>): AustereComponent;
|
|
62
|
+
|
|
63
|
+
/** What a pack's entry module default-exports. */
|
|
64
|
+
export interface PackModule {
|
|
65
|
+
components: AustereComponent | AustereComponent[];
|
|
66
|
+
/** CSS text the runtime adds to the page once. */
|
|
67
|
+
css?: string;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface PackRegistration {
|
|
71
|
+
name: string;
|
|
72
|
+
version: string;
|
|
73
|
+
/** Defaults to PACK_API. */
|
|
74
|
+
api?: number;
|
|
75
|
+
components: AustereComponent | (AustereComponent | AustereComponent[])[];
|
|
76
|
+
css?: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export interface RegisteredPack {
|
|
80
|
+
name: string;
|
|
81
|
+
version: string;
|
|
82
|
+
components: AustereComponent[];
|
|
83
|
+
css: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** Called once by each pack bundle when it loads. The pack kit adds this call for you. */
|
|
87
|
+
export declare function registerPack(pack: PackRegistration): RegisteredPack;
|
|
88
|
+
|
|
89
|
+
/** Packs registered so far, in load order. */
|
|
90
|
+
export declare function registeredPacks(): RegisteredPack[];
|
|
91
|
+
|
|
92
|
+
export declare function onPackRegistered(fn: (pack: RegisteredPack) => void): () => boolean;
|
|
93
|
+
|
|
94
|
+
/** URL of a runtime asset next to austere.js, or "" when the page is inlined (export). */
|
|
95
|
+
export declare function assetUrl(name: string): string;
|
|
96
|
+
|
|
97
|
+
export interface RuntimeError {
|
|
98
|
+
source: string;
|
|
99
|
+
message: string;
|
|
100
|
+
statementId?: string;
|
|
101
|
+
[key: string]: unknown;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export declare function reportRuntimeError(err: RuntimeError): void;
|