diff --git a/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Enums/StateConst.cs b/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Enums/StateConst.cs index 9db7c440e..038699ac5 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Enums/StateConst.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Infrastructures/Enums/StateConst.cs @@ -16,4 +16,5 @@ public class StateConst public const string SUB_CONVERSATION_ID = "sub_conversation_id"; public const string ORIGIN_CONVERSATION_ID = "origin_conversation_id"; + public const string WEB_DRIVER_TASK_ID = "web_driver_task_id"; } diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeCheckboxFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeCheckboxFn.cs index 139515cc3..39be4f957 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeCheckboxFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeCheckboxFn.cs @@ -34,7 +34,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeListValueFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeListValueFn.cs index 9de29293f..22c7127df 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeListValueFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ChangeListValueFn.cs @@ -34,7 +34,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/CheckRadioButtonFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/CheckRadioButtonFn.cs index c8d88e48a..9716b0f79 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/CheckRadioButtonFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/CheckRadioButtonFn.cs @@ -34,7 +34,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickButtonFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickButtonFn.cs index b0bf22aad..05436bfc3 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickButtonFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickButtonFn.cs @@ -34,7 +34,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickElementFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickElementFn.cs index 5388cb98c..19f8e58d9 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickElementFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ClickElementFn.cs @@ -34,7 +34,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ExtractDataFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ExtractDataFn.cs index 6a3904299..1e7afa41e 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ExtractDataFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ExtractDataFn.cs @@ -28,7 +28,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/GoToPageFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/GoToPageFn.cs index fe69f9d1c..a93035260 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/GoToPageFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/GoToPageFn.cs @@ -31,7 +31,7 @@ public async Task Execute(RoleDialogModel message) var result = await _browser.GoToPage(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, new PageActionArgs { @@ -45,7 +45,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/HttpRequestFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/HttpRequestFn.cs index fff2c2401..9aea96707 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/HttpRequestFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/HttpRequestFn.cs @@ -1,3 +1,5 @@ +using BotSharp.Plugin.WebDriver.Services; + namespace BotSharp.Plugin.WebDriver.Functions; public class HttpRequestFn : IFunctionCallback @@ -20,12 +22,13 @@ public async Task Execute(RoleDialogModel message) var args = JsonSerializer.Deserialize(message.FunctionArgs); var agentService = _services.GetRequiredService(); + var webDriverService = _services.GetRequiredService(); var agent = await agentService.LoadAgent(message.CurrentAgentId); var result = await _browser.SendHttpRequest(new MessageInfo { AgentId = agent.Id, MessageId = message.MessageId, - ContextId = convService.ConversationId + ContextId = webDriverService.GetMessageContext(message) }, args); message.Content = result.IsSuccess ? diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserPasswordFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserPasswordFn.cs index d910519a5..5085ae243 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserPasswordFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserPasswordFn.cs @@ -33,7 +33,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserTextFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserTextFn.cs index dab4c36f2..2312df4f2 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserTextFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/InputUserTextFn.cs @@ -39,7 +39,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/OpenBrowserFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/OpenBrowserFn.cs index 0beb80fcc..631bd7a55 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/OpenBrowserFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/OpenBrowserFn.cs @@ -31,7 +31,7 @@ public async Task Execute(RoleDialogModel message) var msgInfo = new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }; var result = await _browser.LaunchBrowser(msgInfo, new BrowserActionArgs @@ -58,7 +58,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ScreenshotFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ScreenshotFn.cs index 8fb4049d1..5c58a69ef 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ScreenshotFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ScreenshotFn.cs @@ -24,7 +24,7 @@ public async Task Execute(RoleDialogModel message) message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); message.Content = "Took screenshot completed. You can take another screenshot if needed."; diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ScrollPageFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ScrollPageFn.cs index 5907c0b45..b6ca139a4 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ScrollPageFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Functions/ScrollPageFn.cs @@ -20,12 +20,13 @@ public async Task Execute(RoleDialogModel message) var args = JsonSerializer.Deserialize(message.FunctionArgs); var agentService = _services.GetRequiredService(); + var webDriverService = _services.GetRequiredService(); var agent = await agentService.LoadAgent(message.CurrentAgentId); message.Data = await _browser.ScrollPage(new MessageInfo { AgentId = agent.Id, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, new PageActionArgs { @@ -35,13 +36,12 @@ public async Task Execute(RoleDialogModel message) message.Content = "Scrolled. You can scroll more if needed."; - var webDriverService = _services.GetRequiredService(); var path = webDriverService.GetScreenshotFilePath(message.MessageId); message.Data = await _browser.ScreenshotAsync(new MessageInfo { AgentId = message.CurrentAgentId, - ContextId = convService.ConversationId, + ContextId = webDriverService.GetMessageContext(message), MessageId = message.MessageId }, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/Services/WebDriverService.GetMessageContext.cs b/src/Plugins/BotSharp.Plugin.WebDriver/Services/WebDriverService.GetMessageContext.cs new file mode 100644 index 000000000..a316999f8 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.WebDriver/Services/WebDriverService.GetMessageContext.cs @@ -0,0 +1,20 @@ +using BotSharp.Abstraction.Infrastructures.Enums; + +namespace BotSharp.Plugin.WebDriver.Services +{ + public partial class WebDriverService + { + public string GetMessageContext(RoleDialogModel message) + { + var states = _services.GetService(); + var convService = _services.GetRequiredService(); + var webDriverTaskId = states.GetState(StateConst.WEB_DRIVER_TASK_ID, ""); + var contextId = message.CurrentAgentId; + if (!string.IsNullOrWhiteSpace(webDriverTaskId)) + { + contextId = webDriverTaskId; + } + return contextId; + } + } +} diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebActionOnElementFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebActionOnElementFn.cs index 6b328b2c7..8cb9119a4 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebActionOnElementFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebActionOnElementFn.cs @@ -35,17 +35,17 @@ public async Task Execute(RoleDialogModel message) var conv = _services.GetRequiredService(); var browser = _services.GetRequiredService(); + var webDriverService = _services.GetRequiredService(); var msg = new MessageInfo { AgentId = message.CurrentAgentId, MessageId = message.MessageId, - ContextId = message.CurrentAgentId, + ContextId = webDriverService.GetMessageContext(message), }; var result = await browser.ActionOnElement(msg, locatorArgs, actionArgs); message.Content = $"{actionArgs.Action} executed {(result.IsSuccess ? "success" : "failed")}"; - var webDriverService = _services.GetRequiredService(); var path = webDriverService.GetScreenshotFilePath(message.MessageId); message.Data = await browser.ScreenshotAsync(msg, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebCloseBrowserFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebCloseBrowserFn.cs index 0d836b736..36badff3f 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebCloseBrowserFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebCloseBrowserFn.cs @@ -18,20 +18,19 @@ public UtilWebCloseBrowserFn( public async Task Execute(RoleDialogModel message) { var conv = _services.GetRequiredService(); - + var webDriverService = _services.GetRequiredService(); var browser = _services.GetRequiredService(); var msg = new MessageInfo { AgentId = message.CurrentAgentId, MessageId = message.MessageId, - ContextId = message.CurrentAgentId, + ContextId = webDriverService.GetMessageContext(message) }; await browser.CloseBrowser(message.CurrentAgentId); message.Content = $"Browser closed."; - var webDriverService = _services.GetRequiredService(); var path = webDriverService.GetScreenshotFilePath(message.MessageId); message.Data = await browser.ScreenshotAsync(msg, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebGoToPageFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebGoToPageFn.cs index 7a5d8f896..0c22d9163 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebGoToPageFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebGoToPageFn.cs @@ -29,13 +29,13 @@ public async Task Execute(RoleDialogModel message) args.WaitTime = _webDriver.DefaultWaitTime; var conv = _services.GetRequiredService(); - + var webDriverService = _services.GetRequiredService(); var browser = _services.GetRequiredService(); var msg = new MessageInfo { AgentId = message.CurrentAgentId, MessageId = message.MessageId, - ContextId = message.CurrentAgentId, + ContextId = webDriverService.GetMessageContext(message) }; if (!args.KeepBrowserOpen) { @@ -50,7 +50,6 @@ public async Task Execute(RoleDialogModel message) message.Content = $"Open web page successfully."; - var webDriverService = _services.GetRequiredService(); var path = webDriverService.GetScreenshotFilePath(message.MessageId); message.Data = await browser.ScreenshotAsync(msg, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebLocateElementFn.cs b/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebLocateElementFn.cs index 8267f4abf..672ad6ad8 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebLocateElementFn.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/UtilFunctions/UtilWebLocateElementFn.cs @@ -22,17 +22,17 @@ public async Task Execute(RoleDialogModel message) locatorArgs.Highlight = true; var browser = _services.GetRequiredService(); + var webDriverService = _services.GetRequiredService(); var msg = new MessageInfo { AgentId = message.CurrentAgentId, MessageId = message.MessageId, - ContextId = message.CurrentAgentId, + ContextId = webDriverService.GetMessageContext(message) }; var result = await browser.LocateElement(msg, locatorArgs); message.Content = $"Locating element {(result.IsSuccess ? "success" : "failed")}"; - var webDriverService = _services.GetRequiredService(); var path = webDriverService.GetScreenshotFilePath(message.MessageId); message.Data = await browser.ScreenshotAsync(msg, path); diff --git a/src/Plugins/BotSharp.Plugin.WebDriver/WebDriverPlugin.cs b/src/Plugins/BotSharp.Plugin.WebDriver/WebDriverPlugin.cs index 152ca0300..68540d55c 100644 --- a/src/Plugins/BotSharp.Plugin.WebDriver/WebDriverPlugin.cs +++ b/src/Plugins/BotSharp.Plugin.WebDriver/WebDriverPlugin.cs @@ -23,7 +23,7 @@ public void RegisterDI(IServiceCollection services, IConfiguration config) var settingService = provider.GetRequiredService(); return settings; }); - + services.AddSingleton(); services.AddScoped(); services.AddSingleton();