diff --git a/Directory.Build.props b/Directory.Build.props
index b7011785..35195020 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,9 +1,9 @@
-
- net6.0
- 10.0
- 0.22.0
- false
- false
-
+
+ net8.0
+ 10.0
+ 0.22.0
+ false
+ false
+
\ No newline at end of file
diff --git a/src/Infrastructure/BotSharp.Core/Routing/Planning/SequentialPlanner.cs b/src/Infrastructure/BotSharp.Core/Routing/Planning/SequentialPlanner.cs
index a7201f2d..7ecd27b6 100644
--- a/src/Infrastructure/BotSharp.Core/Routing/Planning/SequentialPlanner.cs
+++ b/src/Infrastructure/BotSharp.Core/Routing/Planning/SequentialPlanner.cs
@@ -30,24 +30,22 @@ public class SequentialPlanner : IPlaner
if (decomposation.TotalRemainingSteps > 0 && _lastInst != null)
{
_lastInst.Response = decomposation.Description;
- _lastInst.Reason = $"{decomposation.TotalRemainingSteps} left.";
- dialogs.Add(new RoleDialogModel(AgentRole.User, decomposation.Description)
- {
- CurrentAgentId = router.Id,
- MessageId = messageId
- });
+ _lastInst.Reason = $"Having {decomposation.TotalRemainingSteps} steps left.";
return _lastInst;
}
else if (decomposation.TotalRemainingSteps == 0 || decomposation.ShouldStop)
{
- // Tell router all steps are done
- dialogs.Add(new RoleDialogModel(AgentRole.Assistant, decomposation.StopReason)
+ if (!string.IsNullOrEmpty(decomposation.StopReason))
{
- CurrentAgentId = router.Id,
- MessageId = messageId
- });
- router.TemplateDict["conversation"] = router.TemplateDict["conversation"].ToString().TrimEnd() +
- $"\r\n{router.Name}: {decomposation.StopReason}";
+ // Tell router all steps are done
+ dialogs.Add(new RoleDialogModel(AgentRole.Assistant, decomposation.StopReason)
+ {
+ CurrentAgentId = router.Id,
+ MessageId = messageId
+ });
+ router.TemplateDict["conversation"] = router.TemplateDict["conversation"].ToString().TrimEnd() +
+ $"\r\n{router.Name}: {decomposation.StopReason}";
+ }
}
var next = GetNextStepPrompt(router);
@@ -177,7 +175,6 @@ public class SequentialPlanner : IPlaner
}, dialogs);
text = response.Content;
- Console.WriteLine(text, Color.OrangeRed);
inst = response.Content.JsonContent();
break;
}
diff --git a/src/Infrastructure/BotSharp.Core/data/agents/01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a/templates/planner_prompt.sequential.get_remaining_task.liquid b/src/Infrastructure/BotSharp.Core/data/agents/01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a/templates/planner_prompt.sequential.get_remaining_task.liquid
index ad746a92..0c93d4e8 100644
--- a/src/Infrastructure/BotSharp.Core/data/agents/01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a/templates/planner_prompt.sequential.get_remaining_task.liquid
+++ b/src/Infrastructure/BotSharp.Core/data/agents/01fcc3e5-9af7-49e6-ad7a-a760bd12dc4a/templates/planner_prompt.sequential.get_remaining_task.liquid
@@ -6,7 +6,7 @@ Tell me what is the first remaining step from user steps that have not been comp
Output in JSON
{
"description": "step detail with arguments",
- "total_remaining_steps": -1,
+ "total_remaining_steps": 0,
"should_stop": false,
- "stop_reason": "the reason why it should total remaining steps is zero"
+ "stop_reason": "the reason why it should stop"
}
\ No newline at end of file
diff --git a/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj b/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj
index 70c391ee..6ea73972 100644
--- a/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj
+++ b/src/Infrastructure/BotSharp.OpenAPI/BotSharp.OpenAPI.csproj
@@ -1,7 +1,7 @@
- net6.0
+ $(TargetFramework)
enable
enable
$(LangVersion)
diff --git a/src/Plugins/BotSharp.Plugin.ChatHub/BotSharp.Plugin.ChatHub.csproj b/src/Plugins/BotSharp.Plugin.ChatHub/BotSharp.Plugin.ChatHub.csproj
index 04d9b8fd..59c67182 100644
--- a/src/Plugins/BotSharp.Plugin.ChatHub/BotSharp.Plugin.ChatHub.csproj
+++ b/src/Plugins/BotSharp.Plugin.ChatHub/BotSharp.Plugin.ChatHub.csproj
@@ -1,7 +1,7 @@
- net6.0
+ $(TargetFramework)
enable
enable
$(LangVersion)
diff --git a/src/Plugins/BotSharp.Plugin.ChatbotUI/BotSharp.Plugin.ChatbotUI.csproj b/src/Plugins/BotSharp.Plugin.ChatbotUI/BotSharp.Plugin.ChatbotUI.csproj
index 9e83b9a8..6d6b084a 100644
--- a/src/Plugins/BotSharp.Plugin.ChatbotUI/BotSharp.Plugin.ChatbotUI.csproj
+++ b/src/Plugins/BotSharp.Plugin.ChatbotUI/BotSharp.Plugin.ChatbotUI.csproj
@@ -1,7 +1,7 @@
- net6.0
+ $(TargetFramework)
enable
$(LangVersion)
$(BotSharpVersion)
diff --git a/src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj b/src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj
index 3a09e780..729895b3 100644
--- a/src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj
+++ b/src/Plugins/BotSharp.Plugin.Twilio/BotSharp.Plugin.Twilio.csproj
@@ -1,7 +1,7 @@
- net6.0
+ $(TargetFramework)
$(LangVersion)
$(BotSharpVersion)
$(GeneratePackageOnBuild)
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs
index 26690494..a1939921 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightInstance.cs
@@ -32,7 +32,7 @@ public class PlaywrightInstance : IDisposable
string tempFolderPath = $"{Path.GetTempPath()}\\playwright\\{Guid.NewGuid()}";
_context = await _playwright.Chromium.LaunchPersistentContextAsync(tempFolderPath, new BrowserTypeLaunchPersistentContextOptions
{
- Headless = true,
+ Headless = false,
Channel = "chrome",
IgnoreDefaultArgs = new[]
{
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickButton.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickButton.cs
index 367cf50a..b4a9ce9a 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickButton.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickButton.cs
@@ -27,6 +27,12 @@ public partial class PlaywrightWebDriver
count = await elements.CountAsync();
}
+ if (count == 0)
+ {
+ elements = _instance.Page.GetByText(actionParams.Context.ElementName);
+ count = await elements.CountAsync();
+ }
+
if (count == 0)
{
// Infer element if not found
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickElement.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickElement.cs
index e16e16aa..1c13c658 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickElement.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Drivers/PlaywrightDriver/PlaywrightWebDriver.ClickElement.cs
@@ -48,6 +48,12 @@ public partial class PlaywrightWebDriver
else if (count > 1)
{
_logger.LogWarning($"Multiple elements are found by keyword {actionParams.Context.ElementText}");
+ var all = await elements.AllAsync();
+ foreach (var element in all)
+ {
+ var content = await element.TextContentAsync();
+ _logger.LogWarning(content);
+ }
}
return false;
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeCheckboxFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeCheckboxFn.cs
index 9762c4a8..6100158c 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeCheckboxFn.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeCheckboxFn.cs
@@ -22,9 +22,10 @@ public class ChangeCheckboxFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.ChangeCheckbox(new BrowserActionParams(agent, args, message.MessageId));
+ var content = $"{(args.UpdateValue == "check" ? "Check" : "Uncheck")} checkbox of '{args.ElementText}'";
message.Content = result ?
- $"{(args.UpdateValue == "check" ? "Checked" : "Unchecked")} checkbox of '{args.ElementText}' successfully" :
- "Failed";
+ $"{content} successfully" :
+ $"{content} failed";
var webDriverService = _services.GetRequiredService();
var path = webDriverService.GetScreenshotFilePath(message.MessageId);
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeListValueFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeListValueFn.cs
index b7cbe410..94eb4522 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeListValueFn.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeListValueFn.cs
@@ -22,9 +22,10 @@ public class ChangeListValueFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.ChangeListValue(new BrowserActionParams(agent, args, message.MessageId));
+ var content = $"Change value to '{args.UpdateValue}' for {args.ElementName}";
message.Content = result ?
- $"Changed value to '{args.UpdateValue}' for {args.ElementName} successfully" :
- "Failed";
+ $"{content} successfully" :
+ $"{content} failed";
var webDriverService = _services.GetRequiredService();
var path = webDriverService.GetScreenshotFilePath(message.MessageId);
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/CheckRadioButtonFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/CheckRadioButtonFn.cs
index e03de004..422d90af 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/CheckRadioButtonFn.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/CheckRadioButtonFn.cs
@@ -22,9 +22,10 @@ public class CheckRadioButtonFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.CheckRadioButton(new BrowserActionParams(agent, args, message.MessageId));
- message.Content = result ?
- $"Checked value of '{args.UpdateValue}' for radio button '{args.ElementName}' successfully" :
- "Failed";
+ var content = $"Check value of '{args.UpdateValue}' for radio button '{args.ElementName}'";
+ message.Content = result ?
+ $"{content} successfully" :
+ $"{content} failed";
var webDriverService = _services.GetRequiredService();
var path = webDriverService.GetScreenshotFilePath(message.MessageId);
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickButtonFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickButtonFn.cs
index 2b7e5fae..f9b5ba98 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickButtonFn.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickButtonFn.cs
@@ -22,9 +22,10 @@ public class ClickButtonFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.ClickButton(new BrowserActionParams(agent, args, message.MessageId));
+ var content = $"Click button of '{args.ElementName}'";
message.Content = result ?
- $"Clicked button of '{args.ElementName}' successfully" :
- "Failed";
+ $"{content} successfully" :
+ $"{content} failed";
var webDriverService = _services.GetRequiredService();
var path = webDriverService.GetScreenshotFilePath(message.MessageId);
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickElementFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickElementFn.cs
index a5223fc2..6bc95403 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickElementFn.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickElementFn.cs
@@ -22,9 +22,10 @@ public class ClickElementFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.ClickElement(new BrowserActionParams(agent, args, message.MessageId));
+ var content = $"Click element {args.MatchRule} text '{args.ElementText}'";
message.Content = result ?
- $"Clicked element {args.MatchRule} text '{args.ElementText}' successfully" :
- "Failed";
+ $"{content} successfully" :
+ $"{content} failed";
var webDriverService = _services.GetRequiredService();
var path = webDriverService.GetScreenshotFilePath(message.MessageId);
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserPasswordFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserPasswordFn.cs
index 3c84e9b3..0a9f6779 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserPasswordFn.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserPasswordFn.cs
@@ -22,7 +22,7 @@ public class InputUserPasswordFn : IFunctionCallback
var agent = await agentService.LoadAgent(message.CurrentAgentId);
var result = await _browser.InputUserPassword(new BrowserActionParams(agent, args, message.MessageId));
- message.Content = result ? "Input password successfully" : "Failed";
+ message.Content = result ? "Input password successfully" : "Input password failed";
var webDriverService = _services.GetRequiredService();
var path = webDriverService.GetScreenshotFilePath(message.MessageId);
diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserTextFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserTextFn.cs
index df357778..0ab14505 100644
--- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserTextFn.cs
+++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserTextFn.cs
@@ -29,8 +29,8 @@ public class InputUserTextFn : IFunctionCallback
}
message.Content = result ?
- content + " successfully" :
- "Failed";
+ content + " successfully" :
+ content + " failed";
var webDriverService = _services.GetRequiredService();
var path = webDriverService.GetScreenshotFilePath(message.MessageId);
diff --git a/src/WebStarter/WebStarter.csproj b/src/WebStarter/WebStarter.csproj
index 8a612ae4..bb421ed0 100644
--- a/src/WebStarter/WebStarter.csproj
+++ b/src/WebStarter/WebStarter.csproj
@@ -1,7 +1,7 @@
- net6.0
+ $(TargetFramework)
enable
enable
OutOfProcess
diff --git a/tests/BotSharp.Plugin.SemanticKernel.UnitTests/BotSharp.Plugin.SemanticKernel.UnitTests.csproj b/tests/BotSharp.Plugin.SemanticKernel.UnitTests/BotSharp.Plugin.SemanticKernel.UnitTests.csproj
index 0b6a9880..516b56ab 100644
--- a/tests/BotSharp.Plugin.SemanticKernel.UnitTests/BotSharp.Plugin.SemanticKernel.UnitTests.csproj
+++ b/tests/BotSharp.Plugin.SemanticKernel.UnitTests/BotSharp.Plugin.SemanticKernel.UnitTests.csproj
@@ -1,7 +1,7 @@
- net6.0
+ $(TargetFramework)
enable
enable
diff --git a/tests/UnitTest/UnitTest.csproj b/tests/UnitTest/UnitTest.csproj
index 79441c62..be924573 100644
--- a/tests/UnitTest/UnitTest.csproj
+++ b/tests/UnitTest/UnitTest.csproj
@@ -1,7 +1,7 @@
- net6.0
+ $(TargetFramework)
enable
enable