diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor
index b2eaa88c..2a9fdeb5 100644
--- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor
+++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor
@@ -15,6 +15,16 @@
}
break;
+ case AssistantUiCompontentType.WEB_CONTENT_READER:
+ if (component is AssistantWebContentReader webContent && this.webContentFields.TryGetValue(webContent.Name, out var webState))
+ {
+
+ }
+ break;
case AssistantUiCompontentType.DROPDOWN:
if (component is AssistantDropdown assistantDropdown)
diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs
index d4ceea00..8a8de8a6 100644
--- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs
+++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs
@@ -34,6 +34,7 @@ public partial class AssistantDynamic : AssistantBaseCore
private Dictionary inputFields = new();
private Dictionary dropdownFields = new();
private Dictionary switchFields = new();
+ private Dictionary webContentFields = new();
protected override void OnInitialized()
{
@@ -72,6 +73,16 @@ public partial class AssistantDynamic : AssistantBaseCore
this.switchFields.Add(switchComponent.Name, switchComponent.Value);
}
break;
+ case AssistantUiCompontentType.WEB_CONTENT_READER:
+ if (component is AssistantWebContentReader webContent)
+ {
+ this.webContentFields.Add(webContent.Name, new WebContentState
+ {
+ Preselect = webContent.Preselect,
+ PreselectContentCleanerAgent = webContent.PreselectContentCleanerAgent,
+ });
+ }
+ break;
}
}
base.OnInitialized();
@@ -83,6 +94,11 @@ public partial class AssistantDynamic : AssistantBaseCore
{
this.inputFields[entry.Key] = string.Empty;
}
+ foreach (var entry in this.webContentFields)
+ {
+ entry.Value.Content = string.Empty;
+ entry.Value.AgentIsRunning = false;
+ }
}
protected override bool MightPreselectValues()
@@ -133,6 +149,21 @@ public partial class AssistantDynamic : AssistantBaseCore
}
}
break;
+ case AssistantUiCompontentType.WEB_CONTENT_READER:
+ if (component is AssistantWebContentReader webContent &&
+ this.webContentFields.TryGetValue(webContent.Name, out var webState))
+ {
+ if (!string.IsNullOrWhiteSpace(webContent.UserPrompt))
+ {
+ prompt += $"{Environment.NewLine}context:{Environment.NewLine}{webContent.UserPrompt}{Environment.NewLine}---{Environment.NewLine}";
+ }
+
+ if (!string.IsNullOrWhiteSpace(webState.Content))
+ {
+ prompt += $"user prompt:{Environment.NewLine}{webState.Content}";
+ }
+ }
+ break;
default:
prompt += $"{userInput}{Environment.NewLine}";
break;
diff --git a/app/MindWork AI Studio/Assistants/Dynamic/WebContentState.cs b/app/MindWork AI Studio/Assistants/Dynamic/WebContentState.cs
new file mode 100644
index 00000000..70a6977a
--- /dev/null
+++ b/app/MindWork AI Studio/Assistants/Dynamic/WebContentState.cs
@@ -0,0 +1,9 @@
+namespace AIStudio.Assistants.Dynamic;
+
+public sealed class WebContentState
+{
+ public string Content { get; set; } = string.Empty;
+ public bool Preselect { get; set; }
+ public bool PreselectContentCleanerAgent { get; set; }
+ public bool AgentIsRunning { get; set; }
+}
\ No newline at end of file
diff --git a/app/MindWork AI Studio/Plugins/assistants/plugin.lua b/app/MindWork AI Studio/Plugins/assistants/plugin.lua
index 6aa14462..df679ca1 100644
--- a/app/MindWork AI Studio/Plugins/assistants/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/assistants/plugin.lua
@@ -142,6 +142,15 @@ ASSISTANT = {
}
}
},
+ {
+ ["Type"] = "WEB_CONTENT_READER", -- allows the user to fetch a URL and clean it
+ ["Props"] = {
+ ["Name"] = "", -- required
+ ["UserPrompt"] = "",
+ ["Preselect"] = false, -- automatically show the reader when the assistant opens
+ ["PreselectContentCleanerAgent"] = true -- run the content cleaner by default
+ }
+ },
}
},
}
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs
index ffe39504..bb1b581a 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs
@@ -33,6 +33,8 @@ public class AssistantComponentFactory
return new AssistantText { Props = props, Children = children };
case AssistantUiCompontentType.LIST:
return new AssistantList { Props = props, Children = children };
+ case AssistantUiCompontentType.WEB_CONTENT_READER:
+ return new AssistantWebContentReader { Props = props, Children = children };
default:
LOGGER.LogError($"Unknown assistant component type!\n{type} is not a supported assistant component type");
throw new Exception($"Unknown assistant component type: {type}");
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs
index 08b89359..1a0568b4 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs
@@ -12,4 +12,5 @@ public enum AssistantUiCompontentType
HEADING,
TEXT,
LIST,
+ WEB_CONTENT_READER,
}
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantWebContentReader.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantWebContentReader.cs
new file mode 100644
index 00000000..f3ba7223
--- /dev/null
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantWebContentReader.cs
@@ -0,0 +1,36 @@
+namespace AIStudio.Tools.PluginSystem.Assistants.DataModel;
+
+public class AssistantWebContentReader : AssistantComponentBase
+{
+ public override AssistantUiCompontentType Type => AssistantUiCompontentType.WEB_CONTENT_READER;
+ public Dictionary Props { get; set; } = new();
+ public List Children { get; set; } = new();
+
+ public string Name
+ {
+ get => this.Props.TryGetValue(nameof(this.Name), out var v)
+ ? v.ToString() ?? string.Empty
+ : string.Empty;
+ set => this.Props[nameof(this.Name)] = value;
+ }
+
+ public string UserPrompt
+ {
+ get => this.Props.TryGetValue(nameof(this.UserPrompt), out var v)
+ ? v.ToString() ?? string.Empty
+ : string.Empty;
+ set => this.Props[nameof(this.UserPrompt)] = value;
+ }
+
+ public bool Preselect
+ {
+ get => this.Props.TryGetValue(nameof(this.Preselect), out var v) && v is true;
+ set => this.Props[nameof(this.Preselect)] = value;
+ }
+
+ public bool PreselectContentCleanerAgent
+ {
+ get => this.Props.TryGetValue(nameof(this.PreselectContentCleanerAgent), out var v) && v is true;
+ set => this.Props[nameof(this.PreselectContentCleanerAgent)] = value;
+ }
+}
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs
index 71b16ed6..dd3aaa61 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs
@@ -45,5 +45,9 @@ public static class ComponentPropSpecs
required: ["Items"],
optional: []
),
+ [AssistantUiCompontentType.WEB_CONTENT_READER] = new(
+ required: ["Name"],
+ optional: ["UserPrompt", "Preselect", "PreselectContentCleanerAgent"]
+ ),
};
}