* Add AgentWorkflowBuilder group chat
And fix a variety of issues along the way:
- Use DateTime{Offset}.UtcNow rather than Now
- AIAgentHostExecutor shouldn't be publishing empty messages
- Sequential workflows should be flowing all history and not just the output from the previous agent as the input into the next agent
- Renamed some of the new agent workflow methods... still not super happy with the shape, though
- Simplified handoffs builder, e.g. using a hashset with a custom comparer instead of a dictionary
- Improved multi-service use by trying to change assistant->user role for messages created by other agents
- Changed MessageMerger to rely on M.E.AI's coalescing more and to avoid empty contents / text
- Ensured that messages from ChatClientAgent include MessageId and CreatedAt timestamps
- Avoided including instructions for agents in a handoff workflow that don't have any handoffs
- Removed the unnecessary end function in handoffs
- Improved naming of executors to include agent name for debuggability
- Use "N" formatting with Guid.ToString everywhere, to avoid the unnecessary extra dash character which is also not valid in various places (like function tool names)
- Replace `params T[]` with `params IEnumerable<T>` to make public APIs more flexible in what they consume
* Address feedback
- Fix unintentional provider change in sample
* Add getting started samples that show how to call MCP tools
* Add getting started samples that show how to call MCP tools
* Update dotnet/samples/GettingStarted/ModelContextProtocol/Agent_MCP_Server_Auth/README.md
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Fix README
* Address code review feedback
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Add agent hosting package and update sample
* Review feedback and cleanup
* Include the narrator
* wip
* wip
* Remove workaround for empty state writes.
* Handle changes to AgentThread.
* One more.
* Fix.
---------
Co-authored-by: Aditya Mandaleeka <adityam@microsoft.com>
* Add thread storage and serialization POC
* Switch to using JsonElement and add unit tests
* Add additional unit tests.
* Exclude private debugger properties from CodeCoverage.
* Rename IChatMessagesStorable to IChatMessageStore
* Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Improve xml doc.
* Update the message storing thread to always use external store for both local and remote storage.
* Remove threadid from the IChatMessageStore interface, since the store should own the thread id itself, if it requires one.
* Switch GetMessages to IEnumerable
* Address pr comments.
* Make jsonserializer options default consistent on DeserializeThreadAsync
* Move message storing thread functionality into AgentThread and simplify AgentThread behavior.
* Remove embedding generation from VectorStore chat history sample.
* Remove unecessary code and fix formatting.
* Make GetNewThread and DeserializeThread virtual with default implementations.
Remove unsued json utilities.
* Fix formatting
* Remove problem test.
* Add more unit tests
* Remove unused using clause.
* Address pr feedback.
* Address PR comments.
* Make InMemory store internal
* Switch InMemoryChatMessageStore to implement IList instead of inheriting from List.
* Rename store deserialize param.
* Update serialization based on PR comments.
* Remove confusing comment.
* Address Deserialization PR comments in the same way as Serialization
* Add State to IChatMessageStore Serialize and Deserialize names.
Make Thread Deserialize internal.
Make AgentThread type switching fobidden.
---------
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Chris <66376200+crickman@users.noreply.github.com>