added a toc to the docs

This commit is contained in:
nilsk 2026-03-12 01:03:43 +01:00
parent e68a839619
commit 4a905cf3d2

View File

@ -3,11 +3,48 @@
This folder keeps the Lua manifest (`plugin.lua`) that defines a custom assistant. Treat it as the single source of truth for how AI Studio renders your assistant UI and builds the submitted prompt. This folder keeps the Lua manifest (`plugin.lua`) that defines a custom assistant. Treat it as the single source of truth for how AI Studio renders your assistant UI and builds the submitted prompt.
## Table of Contents ## Table of Contents
- [Assistant Plugin Reference](#assistant-plugin-reference)
- [How to Use This Documentation](#how-to-use-this-documentation)
- [Directory Structure](#directory-structure)
- [Structure](#structure)
- [Supported types (matching the Blazor UI components):](#supported-types-matching-the-blazor-ui-components)
- [Component References](#component-references)
- [`TEXT_AREA` reference](#text_area-reference)
- [`BUTTON` reference](#button-reference)
- [`Action(input)` interface](#actioninput-interface)
- [`BUTTON_GROUP` reference](#button_group-reference)
- [`SWITCH` reference](#switch-reference)
- [`COLOR_PICKER` reference](#color_picker-reference)
- [Prompt Assembly - UserPrompt Property](#prompt-assembly---userprompt-property)
- [Advanced Prompt Assembly - BuildPrompt()](#advanced-prompt-assembly---buildprompt)
- [Interface](#interface)
- [`input` table shape](#input-table-shape)
- [Using `meta` inside BuildPrompt](#using-meta-inside-buildprompt)
- [Example: iterate all fields with labels and include their values](#example-iterate-all-fields-with-labels-and-include-their-values)
- [Example: handle types differently](#example-handle-types-differently)
- [Using `profile` inside BuildPrompt](#using-profile-inside-buildprompt)
- [Example: Add user profile context to the prompt](#example-add-user-profile-context-to-the-prompt)
- [Advanced Layout Options](#advanced-layout-options)
- [`LAYOUT_GRID` reference](#layout_grid-reference)
- [`LAYOUT_ITEM` reference](#layout_item-reference)
- [`LAYOUT_PAPER` reference](#layout_paper-reference)
- [`LAYOUT_STACK` reference](#layout_stack-reference)
- [Useful Lua Functions](#useful-lua-functions)
- [Included lua libraries](#included-lua-libraries)
- [Logging helpers](#logging-helpers)
- [Example: Use Logging in lua functions](#example-use-logging-in-lua-functions)
- [Date/time helpers (assistant plugins only)](#datetime-helpers-assistant-plugins-only)
- [Example: Use Logging in lua functions](#example-use-logging-in-lua-functions)
- [General Tips](#general-tips)
- [Useful Resources](#useful-resources)
## How to use this Documention ## How to Use This Documentation
Fill our here Use this README in layers. The early sections are a quick reference for the overall assistant manifest shape and the available component types, while the later `... reference` sections are the full detail for each component and advanced behavior.
When you build a plugin, start with the directory layout and the `Structure` section, then jump to the component references you actually use. The resource links at the end are the primary sources for Lua and MudBlazor behavior, and the `General Tips` section collects the practical rules and gotchas that matter most while authoring `plugin.lua`.
## Directory Structure ## Directory Structure
Each assistant plugin lives in its own directory under the assistants plugin root. In practice, you usually keep the manifest in `plugin.lua`, optional icon rendering in `icon.lua`, and any bundled media in `assets/`.
``` ```
. .
@ -72,7 +109,7 @@ More information on rendered components can be found [here](https://www.mudblazo
- `ReadOnly`: defaults to `false`; disables editing. - `ReadOnly`: defaults to `false`; disables editing.
- `Class`, `Style`: forwarded to the rendered component for layout/styling. - `Class`, `Style`: forwarded to the rendered component for layout/styling.
#### Example: #### Example Textarea component
```lua ```lua
{ {
["Type"] = "TEXT_AREA", ["Type"] = "TEXT_AREA",
@ -121,7 +158,7 @@ More information on rendered components can be found [here](https://www.mudblazo
- `SWITCH`: boolean values - `SWITCH`: boolean values
- Unknown field names and wrong value types are ignored and logged. - Unknown field names and wrong value types are ignored and logged.
#### Example: #### Example Button component
```lua ```lua
{ {
["Type"] = "BUTTON", ["Type"] = "BUTTON",
@ -172,7 +209,7 @@ More information on rendered components can be found [here](https://www.mudblazo
- `Class`, `Style`: forwarded to the rendered `MudButtonGroup` for layout/styling. - `Class`, `Style`: forwarded to the rendered `MudButtonGroup` for layout/styling.
- Child buttons use the existing `BUTTON` props and behavior, including Lua `Action(input)`. - Child buttons use the existing `BUTTON` props and behavior, including Lua `Action(input)`.
#### Example: #### Example Button-Group component
```lua ```lua
{ {
["Type"] = "BUTTON_GROUP", ["Type"] = "BUTTON_GROUP",
@ -235,7 +272,7 @@ More information on rendered components can be found [here](https://www.mudblazo
- `UncheckedColor`: color used when the switch state is `false`; omitted values default to `Inherit`. - `UncheckedColor`: color used when the switch state is `false`; omitted values default to `Inherit`.
- `Class`, `Style`: forwarded to the rendered component for layout/styling. - `Class`, `Style`: forwarded to the rendered component for layout/styling.
#### Example: #### Example Switch component
```lua ```lua
{ {
["Type"] = "SWITCH", ["Type"] = "SWITCH",
@ -272,7 +309,7 @@ More information on rendered components can be found [here](https://www.mudblazo
- `UserPrompt`: prompt context text for the selected color. - `UserPrompt`: prompt context text for the selected color.
- `Class`, `Style`: forwarded to the rendered component for layout/styling. - `Class`, `Style`: forwarded to the rendered component for layout/styling.
#### Example: #### Example Colorpicker component
```lua ```lua
{ {
["Type"] = "COLOR_PICKER", ["Type"] = "COLOR_PICKER",
@ -388,7 +425,7 @@ end
### Using `profile` inside BuildPrompt ### Using `profile` inside BuildPrompt
Profiles are optional user context (e.g., "NeedToKnow" and "Actions"). You can inject this directly into the user prompt if you want the LLM to always see it. Profiles are optional user context (e.g., "NeedToKnow" and "Actions"). You can inject this directly into the user prompt if you want the LLM to always see it.
#### Example: #### Example: Add user profile context to the prompt
```lua ```lua
ASSISTANT.BuildPrompt = function(input) ASSISTANT.BuildPrompt = function(input)
local parts = {} local parts = {}
@ -404,6 +441,22 @@ end
## Advanced Layout Options ## Advanced Layout Options
### `LAYOUT_GRID` reference ### `LAYOUT_GRID` reference
A 12-column grid system for organizing content with responsive breakpoints for different screen sizes.
```
+------------------------------------------------------------+
| 12 |
+------------------------------------------------------------+
+----------------------------+ +----------------------------+
| 6 | | 6 |
+----------------------------+ +----------------------------+
+------------+ +------------+ +-----------+ +-------------+
| 3 | | 3 | | 3 | | 3 |
+------------+ +------------+ +-----------+ +-------------+
```
- Use `Type = "LAYOUT_GRID"` to render a MudBlazor grid container. - Use `Type = "LAYOUT_GRID"` to render a MudBlazor grid container.
- Required props: - Required props:
- `Name`: unique identifier for the layout node. - `Name`: unique identifier for the layout node.
@ -414,7 +467,7 @@ end
- `Spacing`: integer spacing between grid items; omitted values fall back to `6`. - `Spacing`: integer spacing between grid items; omitted values fall back to `6`.
- `Class`, `Style`: forwarded to the rendered `MudGrid` for layout/styling. - `Class`, `Style`: forwarded to the rendered `MudGrid` for layout/styling.
Example: #### Example: How to define a flexible grid
```lua ```lua
{ {
["Type"] = "LAYOUT_GRID", ["Type"] = "LAYOUT_GRID",
@ -452,9 +505,15 @@ Example:
} }
} }
``` ```
For a visual example and a full explanation look [here](https://www.mudblazor.com/components/grid#spacing)
--- ---
### `LAYOUT_ITEM` reference ### `LAYOUT_ITEM` reference
`LAYOUT_ITEM` is used to wrap children components to use them into a grid.
The Breakpoints define how many columns the wrapped components take up in a 12-column grid.
Read more about breakpoint [here](https://www.mudblazor.com/features/breakpoints#breakpoints).
- Use `Type = "LAYOUT_ITEM"` to render a MudBlazor grid item. - Use `Type = "LAYOUT_ITEM"` to render a MudBlazor grid item.
- Required props: - Required props:
- `Name`: unique identifier for the layout node. - `Name`: unique identifier for the layout node.
@ -465,7 +524,7 @@ Example:
- `Class`, `Style`: forwarded to the rendered `MudItem` for layout/styling. - `Class`, `Style`: forwarded to the rendered `MudItem` for layout/styling.
- `Children` may contain any other assistant components you want to place inside the item. - `Children` may contain any other assistant components you want to place inside the item.
Example: #### Example: How to wrap a child component and define its breakpoints
```lua ```lua
{ {
["Type"] = "LAYOUT_ITEM", ["Type"] = "LAYOUT_ITEM",
@ -478,11 +537,12 @@ Example:
{ {
["Type"] = "<TEXT_AREA|BUTTON|BUTTON_GROUP|SWITCH|PROVIDER_SELECTION|...>", ["Type"] = "<TEXT_AREA|BUTTON|BUTTON_GROUP|SWITCH|PROVIDER_SELECTION|...>",
["Props"] = {...}, ["Props"] = {...},
}, }
...
} }
} }
``` ```
For a full explanation look [here](https://www.mudblazor.com/api/MudItem#pages)
--- ---
### `LAYOUT_PAPER` reference ### `LAYOUT_PAPER` reference
@ -497,7 +557,7 @@ Example:
- `Class`, `Style`: forwarded to the rendered `MudPaper` for layout/styling. - `Class`, `Style`: forwarded to the rendered `MudPaper` for layout/styling.
- `Children` may contain any other assistant components you want to wrap. - `Children` may contain any other assistant components you want to wrap.
Example: #### Example: How to define a MudPaper wrapping child components
```lua ```lua
{ {
["Type"] = "LAYOUT_PAPER", ["Type"] = "LAYOUT_PAPER",
@ -516,6 +576,8 @@ Example:
} }
} }
``` ```
For a visual example and a full explanation look [here](https://www.mudblazor.com/components/paper#material-design)
--- ---
### `LAYOUT_STACK` reference ### `LAYOUT_STACK` reference
@ -534,7 +596,7 @@ Example:
- `Class`, `Style`: forwarded to the rendered `MudStack` for layout/styling. - `Class`, `Style`: forwarded to the rendered `MudStack` for layout/styling.
- `Children` may contain any other assistant components you want to arrange. - `Children` may contain any other assistant components you want to arrange.
Example: #### Example: Define a stack of children components
```lua ```lua
{ {
["Type"] = "LAYOUT_STACK", ["Type"] = "LAYOUT_STACK",
@ -544,11 +606,19 @@ Example:
["Align"] = "Center", ["Align"] = "Center",
["Justify"] = "SpaceBetween", ["Justify"] = "SpaceBetween",
["Spacing"] = 2 ["Spacing"] = 2
},
["Children"] = {
{
["Type"] = "<TEXT_AREA|BUTTON|BUTTON_GROUP|SWITCH|PROVIDER_SELECTION|...>",
["Props"] = {...},
},
...
} }
} }
``` ```
For a visual example and a full explanation look [here](https://www.mudblazor.com/components/stack#basic-usage)
## Useful Functions ## Useful Lua Functions
### Included lua libraries ### Included lua libraries
- [Basic Functions Library](https://www.lua.org/manual/5.2/manual.html#6.1) - [Basic Functions Library](https://www.lua.org/manual/5.2/manual.html#6.1)
- [Coroutine Manipulation Library](https://www.lua.org/manual/5.2/manual.html#6.2) - [Coroutine Manipulation Library](https://www.lua.org/manual/5.2/manual.html#6.2)
@ -566,7 +636,7 @@ The assistant runtime exposes basic logging helpers to Lua. Use them to debug cu
- `LogWarn(message)` - `LogWarn(message)`
- `LogError(message)` - `LogError(message)`
#### Example: #### Example: Use Logging in lua functions
```lua ```lua
ASSISTANT.BuildPrompt = function(input) ASSISTANT.BuildPrompt = function(input)
LogInfo("BuildPrompt called") LogInfo("BuildPrompt called")
@ -584,7 +654,7 @@ Use these when you need timestamps inside Lua.
- Members: `year`, `month`, `day`, `hour`, `minute`, `second`, `millisecond`, `formatted`. - Members: `year`, `month`, `day`, `hour`, `minute`, `second`, `millisecond`, `formatted`.
- `Timestamp()` returns a UTC timestamp in ISO-8601 format (`O` / round-trip), e.g. `2026-03-02T21:15:30.1234567Z`. - `Timestamp()` returns a UTC timestamp in ISO-8601 format (`O` / round-trip), e.g. `2026-03-02T21:15:30.1234567Z`.
#### Example: #### Example: Use the datetime functions in lua
```lua ```lua
local dt = DateTime("yyyy-MM-dd HH:mm:ss") local dt = DateTime("yyyy-MM-dd HH:mm:ss")
LogInfo(dt.formatted) LogInfo(dt.formatted)