2026-04-09 10:01:24 +02:00
require ( "icon" )
--[[
This sample assistant shows how plugin authors map Lua tables into UI components.
Each component declares a `UserPrompt` which is prepended as a `context` block, followed
by the actual component value in `user prompt`. See
`app/MindWork AI Studio/Plugins/assistants/README.md` for the full data-model reference.
]]
-- The ID for this plugin:
ID = "00000000-0000-0000-0000-000000000000"
-- The icon for the plugin:
ICON_SVG = SVG
-- The name of the plugin:
NAME = "<Company Name> - Configuration for <Department Name>"
-- The description of the plugin:
DESCRIPTION = "This is a pre-defined configuration of <Company Name>"
-- The version of the plugin:
VERSION = "1.0.0"
2026-10-12 18:02:28 +02:00
-- When this plugin was last changed, in UTC, formatted as YYYY-MM-DDTHH:MM:SSZ. Optional.
LAST_CHANGED = "2025-12-31T12:00:00Z"
2026-04-09 10:01:24 +02:00
-- The type of the plugin:
TYPE = "ASSISTANT"
-- The authors of the plugin:
AUTHORS = { "<Company Name>" }
-- The support contact for the plugin:
SUPPORT_CONTACT = "<IT Department of Company Name>"
-- The source URL for the plugin:
SOURCE_URL = "<Any internal Git repository>"
-- The categories for the plugin:
CATEGORIES = { "CORE" }
-- The target groups for the plugin:
TARGET_GROUPS = { "EVERYONE" }
-- The flag for whether the plugin is maintained:
IS_MAINTAINED = true
-- When the plugin is deprecated, this message will be shown to users:
DEPRECATION_MESSAGE = ""
2026-07-15 21:00:25 +02:00
-- Enterprise-managed assistants cannot be revised with AI. Keep false for locally managed plugins:
DEPLOYED_USING_CONFIG_SERVER = false
-- Reserved for assistants created by the AI Studio Assistant Builder. Generated assistants use this
-- metadata so AI Studio can identify them and offer Builder-specific actions such as safe deletion.
-- Manually authored or enterprise-distributed assistants must not set this metadata:
-- AI_STUDIO_ASSISTANT_BUILDER = {Generated = true, SchemaVersion = 1}
2026-04-09 10:01:24 +02:00
ASSISTANT = {
[ "Title" ] = "<Title of your assistant>" ,
[ "Description" ] = "<Description presented to the users, explaining your assistant>" ,
2026-08-27 16:19:35 +02:00
[ "SystemPrompt" ] = "<System prompt for the assistant>" ,
[ "SubmitText" ] = "<label for submit button>" ,
[ "AllowProfiles" ] = true ,
2026-04-09 10:01:24 +02:00
[ "UI" ] = {
[ "Type" ] = "FORM" ,
[ "Children" ] = {}
},
}
-- usage example with the full feature set:
ASSISTANT = {
[ "Title" ] = "<main title of assistant>" , -- required
[ "Description" ] = "<assistant description>" , -- required
[ "SystemPrompt" ] = "<prompt that fundamentally changes behaviour, personality and task focus of your assistant. Invisible to the user>" , -- required
[ "SubmitText" ] = "<label for submit button>" , -- required
[ "AllowProfiles" ] = true , -- if true, allows AiStudios profiles; required
2026-09-04 15:48:07 +02:00
-- Optional: the tools your assistant runs with. Naming them takes the choice away from the
-- user: the tool selection disappears from the assistant, and it always runs with exactly
-- these tools. Omit the field to let users select the tools themselves.
-- Naming a tool is a wish, not a permission: a tool switched off in the settings stays off,
-- and every tool still has to meet the confidence requirements of the provider in use. Users
-- see the tools your assistant asks for before they enable it, and the security audit weighs
-- them against what your assistant claims to do.
-- Tool IDs include: web_search, read_web_page
[ "ToolIds" ] = {
"web_search" ,
},
2026-04-09 10:01:24 +02:00
[ "UI" ] = {
[ "Type" ] = "FORM" ,
[ "Children" ] = {
{
[ "Type" ] = "TEXT_AREA" , -- required
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
[ "Label" ] = "<heading of your component>" , -- required
[ "Adornment" ] = "<Start|End|None>" , -- location of the `AdornmentIcon` OR `AdornmentText`; CASE SENSITIVE
[ "AdornmentIcon" ] = "Icons.Material.Filled.AppSettingsAlt" , -- The Mudblazor icon displayed for the adornment
[ "AdornmentText" ] = "" , -- The text displayed for the adornment
[ "AdornmentColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" , -- the color of AdornmentText or AdornmentIcon; CASE SENSITIVE
[ "Counter" ] = 0 , -- shows a character counter. When 0, the current character count is displayed. When 1 or greater, the character count and this count are displayed. Defaults to `null`
[ "MaxLength" ] = 100 , -- max number of characters allowed, prevents more input characters; use together with the character counter. Defaults to 524,288
[ "HelperText" ] = "<a helping text rendered under the text area to give hints to users>" ,
[ "IsImmediate" ] = false , -- changes the value as soon as input is received. Defaults to false but will be true if counter or maxlength is set to reflect changes
[ "HelperTextOnFocus" ] = true , -- if true, shows the helping text only when the user focuses on the text area
[ "UserPrompt" ] = "<direct input of instructions, questions, or tasks by a user>" ,
[ "PrefillText" ] = "<text to show in the field initially>" ,
[ "IsSingleLine" ] = false , -- if true, shows a text field instead of an area
[ "ReadOnly" ] = false , -- if true, deactivates user input (make sure to provide a PrefillText)
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
}
},
{
[ "Type" ] = "DROPDOWN" , -- required
[ "Props" ] = {
[ "Name" ] = "<unique identifier of component>" , -- required
[ "Label" ] = "<heading of component>" , -- required
[ "UserPrompt" ] = "<direct input of instructions, questions, or tasks by a user>" ,
[ "IsMultiselect" ] = false ,
[ "HasSelectAll" ] = false ,
[ "SelectAllText" ] = "<label for 'SelectAll'-Button" ,
[ "HelperText" ] = "<helping text rendered under the component>" ,
[ "OpenIcon" ] = "Icons.Material.Filled.ArrowDropDown" ,
[ "OpenClose" ] = "Icons.Material.Filled.ArrowDropUp" ,
[ "IconColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" ,
[ "IconPositon" ] = "<Start|End>" ,
[ "Variant" ] = "<Text|Filled|Outlined>" ,
[ "ValueType" ] = "<string|int|bool>" , -- required
[ "Default" ] = { [ "Value" ] = "<internal data>" , [ "Display" ] = "<user readable representation>" }, -- required
[ "Items" ] = {
{ [ "Value" ] = "<internal data>" , [ "Display" ] = "<user readable representation>" },
{ [ "Value" ] = "<internal data>" , [ "Display" ] = "<user readable representation>" },
} -- required
}
},
{
[ "Type" ] = "SWITCH" ,
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
[ "Label" ] = "<heading of your component>" , -- Switches render mode between boxed switch and normal switch
[ "Value" ] = true , -- initial switch state
[ "OnChanged" ] = function ( input ) -- optional; same input and return contract as BUTTON.Action(input)
return nil
end ,
[ "Disabled" ] = false , -- if true, disables user interaction but the value can still be used in the user prompt (use for presentation purposes)
[ "UserPrompt" ] = "<direct input of instructions, questions, or tasks by a user>" ,
[ "LabelOn" ] = "<text if state is true>" ,
[ "LabelOff" ] = "<text if state is false>" ,
[ "LabelPlacement" ] = "<Bottom|End|Left|Right|Start|Top>" , -- Defaults to End (right of the switch)
[ "Icon" ] = "Icons.Material.Filled.Bolt" , -- places a thumb icon inside the switch
[ "IconColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" , -- color of the thumb icon. Defaults to `Inherit`
[ "CheckedColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" , -- color of the switch if state is true. Defaults to `Inherit`
[ "UncheckedColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" , -- color of the switch if state is false. Defaults to `Inherit`
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
}
},
{
[ "Type" ] = "BUTTON" ,
[ "Props" ] = {
[ "Name" ] = "buildEmailOutput" ,
[ "Text" ] = "Build email output" , -- keep this even for icon-only buttons so the manifest stays readable
[ "IsIconButton" ] = false , -- when true, renders an icon-only action button using StartIcon
[ "Size" ] = "<Small|Medium|Large>" , -- size of the button. Defaults to Medium
[ "Variant" ] = "<Filled|Outlined|Text>" , -- display variation to use. Defaults to Text
[ "Color" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" , -- color of the button. Defaults to Default
[ "IsFullWidth" ] = false , -- ignores sizing and renders a long full width button. Defaults to false
[ "StartIcon" ] = "Icons.Material.Filled.ArrowRight" , -- icon displayed before the text, or the main icon for icon-only buttons. Defaults to null
[ "EndIcon" ] = "Icons.Material.Filled.ArrowLeft" , -- icon displayed after the text. Defaults to null
[ "IconColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" , -- color of start and end icons on text buttons. Defaults to Inherit
[ "IconSize" ] = "<Small|Medium|Large>" , -- size of icons. Defaults to null. When null, the value of ["Size"] is used
[ "Action" ] = function ( input )
local email = input.emailContent and input.emailContent . Value or ""
local translate = input.translateEmail and input.translateEmail . Value or false
local output = email
if translate then
output = output .. " \n\n Translate this email."
end
return {
state = {
outputBuffer = {
Value = output
}
}
}
end ,
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
}
},
{
[ "Type" ] = "BUTTON_GROUP" ,
[ "Props" ] = {
[ "Name" ] = "buttonGroup" ,
[ "Variant" ] = "<Filled|Outlined|Text>" , -- display variation of the group. Defaults to Filled
[ "Color" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" , -- color of the group. Defaults to Default
[ "Size" ] = "<Small|Medium|Large>" , -- size of the group. Defaults to Medium
[ "OverrideStyles" ] = false , -- allows MudBlazor group style overrides. Defaults to false
[ "Vertical" ] = false , -- renders buttons vertically instead of horizontally. Defaults to false
[ "DropShadow" ] = true , -- applies a group shadow. Defaults to true
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
},
[ "Children" ] = {
-- BUTTON_ELEMENTS
}
},
{
[ "Type" ] = "LAYOUT_STACK" ,
[ "Props" ] = {
[ "Name" ] = "exampleStack" ,
[ "IsRow" ] = true ,
[ "Align" ] = "Center" ,
[ "Justify" ] = "SpaceBetween" ,
[ "Wrap" ] = "Wrap" ,
[ "Spacing" ] = 2 ,
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
},
[ "Children" ] = {
-- CHILDREN
}
},
{
[ "Type" ] = "LAYOUT_ACCORDION" ,
[ "Props" ] = {
[ "Name" ] = "exampleAccordion" ,
[ "AllowMultiSelection" ] = false , -- if true, multiple sections can stay open at the same time
[ "IsDense" ] = false , -- denser layout with less spacing
[ "HasOutline" ] = false , -- outlined accordion panels
[ "IsSquare" ] = false , -- removes rounded corners
[ "Elevation" ] = 0 , -- shadow depth of the accordion container
[ "HasSectionPaddings" ] = true , -- controls section gutters / inner frame paddings
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
},
[ "Children" ] = {
-- LAYOUT_ACCORDION_SECTION elements
}
},
{
[ "Type" ] = "LAYOUT_ACCORDION_SECTION" ,
[ "Props" ] = {
[ "Name" ] = "exampleAccordionSection" , -- required
[ "HeaderText" ] = "<section title shown in the accordion header>" , -- required
[ "IsDisabled" ] = false , -- disables expanding/collapsing and interaction
[ "IsExpanded" ] = false , -- initial expansion state
[ "IsDense" ] = false , -- denser panel layout
[ "HasInnerPadding" ] = true , -- controls padding around the section content
[ "HideIcon" ] = false , -- hides the expand/collapse icon
[ "HeaderIcon" ] = "Icons.Material.Filled.ExpandMore" , -- icon shown before the header text
[ "HeaderColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" ,
[ "HeaderTypo" ] = "<body1|subtitle1|h6|...>" , -- MudBlazor typo value used for the header
[ "HeaderAlign" ] = "<Start|Center|End|Justify>" , -- header text alignment
[ "MaxHeight" ] = 320 , -- nullable integer pixel height for the expanded content area
[ "ExpandIcon" ] = "Icons.Material.Filled.ExpandMore" , -- override the expand/collapse icon
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
},
[ "Children" ] = {
-- CHILDREN
}
},
{
[ "Type" ] = "LAYOUT_PAPER" ,
[ "Props" ] = {
[ "Name" ] = "examplePaper" ,
[ "Elevation" ] = 2 ,
[ "Width" ] = "100%" ,
[ "Class" ] = "pa-4 mb-3" ,
[ "Style" ] = "<optional css styles>" ,
},
[ "Children" ] = {
-- CHILDREN
}
},
{
[ "Type" ] = "LAYOUT_GRID" ,
[ "Props" ] = {
[ "Name" ] = "exampleGrid" ,
[ "Justify" ] = "FlexStart" ,
[ "Spacing" ] = 2 ,
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
},
[ "Children" ] = {
-- CHILDREN
}
},
{
[ "Type" ] = "PROVIDER_SELECTION" , -- required
[ "Props" ] = {
[ "Name" ] = "Provider" ,
[ "Label" ] = "Choose LLM"
}
},
-- If you add a PROFILE_SELECTION component, AI Studio will hide the footer selection and use this block instead:
{
[ "Type" ] = "PROFILE_SELECTION" ,
[ "Props" ] = {
[ "ValidationMessage" ] = "<warning message that is shown when the user has not picked a profile>"
}
},
{
[ "Type" ] = "HEADING" , -- descriptive component for headings
[ "Props" ] = {
[ "Text" ] = "<heading content>" , -- required
[ "Level" ] = 2 -- Heading level, 1 - 3
}
},
{
[ "Type" ] = "TEXT" , -- descriptive component for normal text
[ "Props" ] = {
[ "Content" ] = "<text content>"
}
},
{
[ "Type" ] = "LIST" , -- descriptive list component
[ "Props" ] = {
[ "Items" ] = {
{
[ "Type" ] = "LINK" , -- required
[ "Text" ] = "<user readable link text>" ,
[ "Href" ] = "<link>" , -- required
[ "IconColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" ,
},
{
[ "Type" ] = "TEXT" , -- required
[ "Text" ] = "<user readable text>" ,
[ "Icon" ] = "Icons.Material.Filled.HorizontalRule" ,
[ "IconColor" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" ,
}
},
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
}
},
{
[ "Type" ] = "IMAGE" ,
[ "Props" ] = {
[ "Src" ] = "plugin://assets/example.png" ,
[ "Alt" ] = "SVG-inspired placeholder" ,
[ "Caption" ] = "Static illustration via the IMAGE component."
}
},
{
[ "Type" ] = "WEB_CONTENT_READER" , -- allows the user to fetch a URL and clean it
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
[ "UserPrompt" ] = "<help text that explains the purpose of this reader>" ,
[ "Preselect" ] = false , -- automatically show the reader when the assistant opens
[ "PreselectContentCleanerAgent" ] = true -- run the content cleaner by default
}
},
{
2026-07-21 10:05:43 +02:00
[ "Type" ] = "FILE_CONTENT_READER" , -- allows the user to load one expected local file and inject its content into the prompt
2026-04-09 10:01:24 +02:00
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
2026-07-21 10:05:43 +02:00
[ "UserPrompt" ] = "<prompt context for the selected file>" ,
[ "ShowAttachedDocumentState" ] = true , -- whether to show the loaded-document indicator; defaults to true
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
}
},
{
[ "Type" ] = "FILE_ATTACHMENTS" , -- allows the user to attach multiple local documents or images as context
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
[ "Heading" ] = "<component heading>" ,
[ "CatchAllDocuments" ] = true , -- whether the component catches all documents that are hovered over the AI Studio window and not only over the drop zone
[ "UseSmallForm" ] = false , -- whether the component should be rendered compact; keep false by default unless compact layout is explicitly needed
[ "UserPrompt" ] = "<prompt context for the selected file(s)>" ,
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
2026-04-09 10:01:24 +02:00
}
},
{
[ "Type" ] = "COLOR_PICKER" ,
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
[ "Label" ] = "<heading of your component>" , -- required
[ "Placeholder" ] = "<use this as a default color property with HEX code (e.g '#FFFF12') or just show hints to the user>" ,
[ "ShowAlpha" ] = true , -- weather alpha channels are shown
[ "ShowToolbar" ] = true , -- weather the toolbar to toggle between picker, grid or palette is shown
[ "ShowModeSwitch" ] = true , -- weather switch to toggle between RGB(A), HEX or HSL color mode is shown
[ "PickerVariant" ] = "<Dialog|Inline|Static>" , -- different rendering modes: `Dialog` opens the picker in a modal type screen, `Inline` shows the picker next to the input field and `Static` renders the picker widget directly (default); Case sensitiv
2026-07-21 10:05:43 +02:00
[ "UserPrompt" ] = "<prompt context for the selected color>" ,
2026-04-09 10:01:24 +02:00
}
},
{
[ "Type" ] = "DATE_PICKER" ,
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
[ "Label" ] = "<heading of your component>" , -- required
[ "Value" ] = "2026-03-16" , -- optional initial value
[ "Color" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" ,
[ "Placeholder" ] = "YYYY-MM-DD" ,
[ "HelperText" ] = "<optional help text rendered under the picker>" ,
[ "DateFormat" ] = "yyyy-MM-dd" ,
[ "PickerVariant" ] = "<Dialog|Inline|Static>" ,
[ "UserPrompt" ] = "<prompt context for the selected date>" ,
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
}
},
{
[ "Type" ] = "DATE_RANGE_PICKER" ,
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
[ "Label" ] = "<heading of your component>" , -- required
[ "Value" ] = "2026-03-16 - 2026-03-20" , -- optional initial range
[ "Color" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" ,
[ "PlaceholderStart" ] = "Start date" ,
[ "PlaceholderEnd" ] = "End date" ,
[ "HelperText" ] = "<optional help text rendered under the picker>" ,
[ "DateFormat" ] = "yyyy-MM-dd" ,
[ "PickerVariant" ] = "<Dialog|Inline|Static>" ,
[ "UserPrompt" ] = "<prompt context for the selected date range>" ,
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
}
},
{
[ "Type" ] = "TIME_PICKER" ,
[ "Props" ] = {
[ "Name" ] = "<unique identifier of this component>" , -- required
[ "Label" ] = "<heading of your component>" , -- required
[ "Value" ] = "14:30" , -- optional initial time
[ "Color" ] = "<Dark|Error|Info|Inherit|Primary|Secondary|Success|Surface|Tertiary|Transparent|Warning>" ,
[ "Placeholder" ] = "HH:mm" ,
[ "HelperText" ] = "<optional help text rendered under the picker>" ,
[ "TimeFormat" ] = "HH:mm" ,
[ "AmPm" ] = false ,
[ "PickerVariant" ] = "<Dialog|Inline|Static>" ,
[ "UserPrompt" ] = "<prompt context for the selected time>" ,
[ "Class" ] = "<optional MudBlazor or css classes>" ,
[ "Style" ] = "<optional css styles>" ,
}
},
}
},
}
2026-08-27 16:19:35 +02:00
2026-09-14 10:26:10 +02:00
-- direct chat launcher example opening the chat in a workspace; form-only fields and UI are not
-- used in this mode:
2026-08-27 16:19:35 +02:00
ASSISTANT = {
[ "Title" ] = "<main title of chat launcher>" ,
[ "Description" ] = "<description of the chat that will be opened>" ,
[ "LaunchBehavior" ] = "OPEN_WORKSPACE_CHAT_BY_NAME" ,
[ "WorkspaceName" ] = "<name of the workspace to open or create>" ,
[ "ProviderId" ] = "<optional provider GUID; omit to use the chat default>" ,
[ "ProfileId" ] = "<optional profile GUID; use the empty GUID for no profile>" ,
[ "ChatTemplateId" ] = "<optional chat template GUID; use the empty GUID for no template>" ,
2026-09-22 16:39:17 +02:00
-- Optional: the data sources the chat starts with. A chat template chosen above may bring
-- data source options of its own. It then decides them alone, the IDs named here are dropped,
-- and AI Studio writes a warning into the log. Only a chat template can also say that the AI
-- picks the sources for each message, which is why it wins as a whole instead of field by
-- field.
2026-08-27 16:19:35 +02:00
[ "DataSourceIds" ] = {
"<optional data source GUID>" ,
},
2026-09-04 15:48:07 +02:00
-- Optional: the tools preselected when the chat opens. Users may change the selection
-- in the chat afterwards, and every tool has to meet the confidence requirements of the
2026-09-22 16:39:17 +02:00
-- provider in use. A tool ID unknown to the installation is ignored. The same rule as for the
-- data sources applies here: a chat template which names tools of its own wins over this list.
2026-09-04 15:48:07 +02:00
-- Tool IDs include: web_search, read_web_page
[ "ToolIds" ] = {
"<optional tool ID>" ,
},
2026-08-27 16:19:35 +02:00
}
2026-09-14 10:26:10 +02:00
-- direct chat launcher example without a workspace: the tile opens a disappearing chat, which is
-- kept apart from the workspaces and cleaned up according to the workspace maintenance settings.
-- A WorkspaceName next to this launch behavior is an error instead of being ignored, so a leftover
-- name cannot silently change the kind of chat the tile opens. Every optional field of the example
-- above works here as well:
ASSISTANT = {
[ "Title" ] = "<main title of chat launcher>" ,
[ "Description" ] = "<description of the chat that will be opened>" ,
[ "LaunchBehavior" ] = "OPEN_TEMPORARY_CHAT" ,
[ "ProfileId" ] = "<optional profile GUID; use the empty GUID for no profile>" ,
}