Commit Graph

29 Commits

  • fix(security): non-thread-safe sequence number generation may cau (#5320)
    `SequenceNumber.Increment()` uses `this._sequenceNumber++` without synchronization. In concurrent streaming scenarios, this can produce race conditions and inconsistent sequencing, which may break event ordering guarantees and potentially allow response-mixing or state confusion.
    
    Affected files: SequenceNumber.cs
    
    Signed-off-by: tuanaiseo <221258316+tuanaiseo@users.noreply.github.com>
    Co-authored-by: Jacob Alber <jaalber@microsoft.com>
  • .NET: Fix role assignment in ChatMessage construction (#4290)
    * Use actual message role when creating ChatMessage
    
    Replace hard-coded ChatRole.User with a ChatRole constructed from the message's Role. The change ensures ToChatMessage and FunctionMessage use the original role (new ChatRole(this.Role)) for both text and contents branches, fixing incorrect role assignment when constructing ChatMessage instances.
    
    * Update changes
    
    * Fix formatting in ToChatMessage tests
    
    ---------
    
    Co-authored-by: Roger Barreto <19890735+rogerbarreto@users.noreply.github.com>
  • .NET: Update to OpenAI 2.9.1, Azure.AI.OpenAI 2.9.0-beta.1, Microsoft.Extensions.AI 10.4.0, and Azure.AI.Projects 2.0.0-beta.2 (#4613)
    * Initial plan
    
    * Update code for Microsoft.Extensions.AI.Abstractions 10.4.0 breaking changes
    
    - Rename FunctionApprovalRequestContent → ToolApprovalRequestContent
    - Rename FunctionApprovalResponseContent → ToolApprovalResponseContent
    - Rename UserInputRequestContent → ToolApprovalRequestContent
    - Rename UserInputResponseContent → ToolApprovalResponseContent
    - Update .FunctionCall property → .ToolCall with FunctionCallContent casts where needed
    - Update .Id property → .RequestId on the renamed types
    - Rename FunctionApprovalRequestEventGenerator → ToolApprovalRequestEventGenerator
    - Rename FunctionApprovalResponseEventGenerator → ToolApprovalResponseEventGenerator
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Update OpenAI 2.9.1, ME.AI 10.4.0, fix breaking API changes
    
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    
    * Fix remaining ME.AI 10.4.0 breaking changes: MCP approval types, .Output→.Outputs
    
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    
    * Use pattern matching with `when` for ToolApprovalRequestContent/FunctionCallContent
    
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    
    * Update Azure.AI.OpenAI to 2.9.0-beta.1
    
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    
    * Fix remaining GetResponsesClient(model) build failures for Azure.AI.OpenAI 2.9.0-beta.1
    
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    
    * Address review feedback: remove redundant type checks in TestRequestAgent.cs and fix error message in AIAgentHostExecutor.cs
    
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    
    * Update Azure.AI.Projects to 2.0.0-beta.2 with namespace migration
    
    - Azure.AI.Projects 2.0.0-beta.1 → 2.0.0-beta.2
    - Azure.AI.Projects.OpenAI → Azure.AI.Extensions.OpenAI (transitive)
    - Agent types moved to Azure.AI.Projects.Agents namespace
    - AgentRecord.Versions.Latest → AgentRecord.GetLatestVersion()
    - OpenAPIFunctionDefinition → OpenApiFunctionDefinition
    - BingCustomSearchToolParameters → BingCustomSearchToolOptions
    - MemorySearchPreviewTool.UpdateDelay → UpdateDelayInSecs
    - Azure.Identity 1.17.1 → 1.19.0
    - Microsoft.Identity.Client.Extensions.Msal 4.78.0 → 4.83.1
    
    Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com>
    
    * Fix remaining type renames for Azure.AI.Projects 2.0.0-beta.2
    
    - BrowserAutomationToolParameters → BrowserAutomationToolOptions
    - MemoryUpdateOptions.UpdateDelay stays as UpdateDelay (not renamed)
    - WaitForMemoriesUpdateAsync parameter order: pollingInterval before options
    - AIProjectAgentsOperations → AgentsClient
    
    Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com>
    
    * Fix format errors and OpenTelemetry test for ME.AI 10.4.0
    
    - Remove unused 'using Azure.AI.Extensions.OpenAI' and fix import ordering
      in Agent_With_AzureAIProject/Program.cs
    - Update OpenTelemetryAgentTests: gen_ai.tool.definitions is now always
      emitted regardless of EnableSensitiveData per ME.AI 10.4.0 change
      (dotnet/extensions#7346). Tool definitions are not considered sensitive.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Fix GetRepoFolder() to work in git worktrees
    
    Use 'workflow-samples' directory as repo root marker instead of '.git',
    which fails in worktrees (.git is a file) and also matches too early
    when a '.github' folder exists in subdirectories.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Fix formatting: remove unused usings and fix import ordering
    
    dotnet format applied across 59 impacted projects. Primarily removes
    unnecessary 'using Azure.AI.Projects' where Azure.AI.Projects.Agents
    provides all needed types, and fixes import ordering per editorconfig.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Disable AzureAIAgentsPersistent integration tests (#4769)
    
    Azure.AI.Agents.Persistent 1.2.0-beta.9 references McpServerToolApprovalResponseContent
    which was removed in ME.AI 10.4.0 (renamed to ToolApprovalResponseContent), causing
    TypeLoadException at runtime. Mark all 6 test classes with IntegrationDisabled trait
    until Persistent ships a version targeting ME.AI 10.4.0+.
    
    Upstream fix: https://github.com/Azure/azure-sdk-for-net/pull/56929
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Add README with compatibility note for AzureAI.Persistent (#4769)
    
    Documents that Azure.AI.Agents.Persistent 1.2.0-beta.9 is only compatible
    with ME.AI ≤10.3.0 and OpenAI ≤2.8.0 due to type renames in ME.AI 10.4.0.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Fix file encoding: restore UTF-8 BOM on Persistent test files
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Mark AzureAI.Persistent as IsPackable=false (#4769)
    
    Prevent shipping until Azure.AI.Agents.Persistent targets ME.AI 10.4.0+.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Moving IsPackable after import
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    Co-authored-by: stephentoub <2642209+stephentoub@users.noreply.github.com>
    Co-authored-by: rogerbarreto <19890735+rogerbarreto@users.noreply.github.com>
  • .NET: Add FinishReason to AgentResponses (#4617)
    * Add FinishReason to AgentResponses
    
    * Address PR comments
  • Python: .NET: Fix .NET conversation memory in DevUI (#3484) (#4294)
    * Fix .NET conversation memory in DevUI (#3484)
    
    * formatting fixes
    
    * fix memory regression in python devui , fix for #4123
    
    * Fix for #3983: Added _get_event_type() helper that safely accesses event type on both objects (.type) and dicts (.get("type")). Replaced all 4 bare event.type accesses in _executor.py (lines 267, 477, 499, 523).
    
    Root cause: PR #3690 changed event.__class__.__name__ == "RequestInfoEvent" (safe) to event.type == "request_info" (crashes on dicts), but _execute_workflow still yields raw dicts on error paths.
    
    Test: test_workflow_error_yields_dict_event_without_crash — mocks a workflow that raises, verifies execute_entity consumes the dict error events without crashing.
    
    * format fixes
    
    * lint fixes
  • .NET: Surface downstream experimental flags and remove unnecessary suppressions (#3968)
    * Surface downstream experimental flags and remove unecessary suppressions
    
    * Fix format error
    
    * Fix file encoding.
    
    * Address PR comments.
  • .NET: [Breaking] RenameAgentRunResponse and AgentRunResponseUpdate classes (#3197)
    * rename AgentRunResponse and AgentRunResponseUpdate classes - part1
    
    * rename varialbles, parameters, methods and tests
    
    * rollback unnecessary changes
  • .NET: [Breaking] Delete display name property (#2758)
    * delete the AIAgent.DisplayName property
    
    * use agent name as a first value for activity display name
    
    * Update dotnet/src/Microsoft.Agents.AI.Workflows/Specialized/HandoffAgentExecutor.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
  • .NET: Update to latest Azure.AI.*, OpenAI, and M.E.AI* (#2850)
    * Update to latest Azure.AI.*, OpenAI, and M.E.AI*
    
    Absorb breaking changes in Responses surface area
    
    * Update dotnet/samples/AgentWebChat/AgentWebChat.AgentHost/Utilities/ChatClientExtensions.cs
    
    * Update dotnet/samples/AgentWebChat/AgentWebChat.AgentHost/Utilities/ChatClientExtensions.cs
    
    * Update dotnet/samples/AgentWebChat/AgentWebChat.AgentHost/Utilities/ChatClientExtensions.cs
    
    * Update dotnet/samples/GettingStarted/AgentWithOpenAI/Agent_OpenAI_Step04_CreateFromOpenAIResponseClient/Program.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Using patch to remove the model is necessary, updated the response client to actually use the the ForAgent
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    Co-authored-by: Roger Barreto <19890735+rogerbarreto@users.noreply.github.com>
  • .NET: Upgrade to .NET 10 (#2128)
    * Upgrade to .NET 10
    
    - Require .NET 10 SDK
    - Include net10.0 assets in all assemblies
    - Move net9.0-only targets to net10.0
    - Update LangVersion to latest
    - Remove complicated distinctions between debug target TFMs and release target TFMs
    - Remove unnecessary package dependencies when built into netcoreapp
    - Clean up some ifdefs
    - Clean up some analyzer warnings
    
    * Fix CI
  • .NET: Improve AIAgent and Workflow registrations for DevUI integration (#2227)
    * wip
    
    * resolve non-agent workflows as well!
    
    * add tests for devui registrations and resolving
    
    * fixes
    
    * devui for net8 as well!
    
    * simplify TFM
    
    * update tfm...
    
    * tfm rules....
    
    * wip
    
    * roll
    
    * verify entities are registered with a devui call
    
    * tests
    
    * add a proper support for non-keyed workflows
    
    * resolve default aiagent registration
    
    * sort usings :)
    
    * cleanup tests
  • Python: .Net: Dotnet devui compatibility fixes (#2026)
    * DevUI: Add OpenAI Responses API proxy support with enhanced UI features
    
    This commit adds support for proxying requests to OpenAI's Responses API,
    allowing DevUI to route conversations to OpenAI models when configured to enable testing.
    
    Backend changes:
    - Add OpenAI proxy executor with conversation routing logic
    - Enhance event mapper to support OpenAI Responses API format
    - Extend server endpoints to handle OpenAI proxy mode
    - Update models with OpenAI-specific response types
    - Remove emojis from logging and CLI output for cleaner text
    
    Frontend changes:
    - Add settings modal with OpenAI proxy configuration UI
    - Enhance agent and workflow views with improved state management
    - Add new UI components (separator, switch) for settings
    - Update debug panel with better event filtering
    - Improve message renderers for OpenAI content types
    - Update types and API client for OpenAI integration
    
    * update ui, settings modal and workflow input form, add register cleanup hooks.
    
    * add workflow HIL support, user mode, other fixes
    
    * feat(devui): add human-in-the-loop (HIL) support with dynamic response schemas
    
    Implement  HIL workflow support allowing workflows to pause for user input
    with dynamically generated JSON schemas based on response handler type hints.
    
    Key Features:
    - Automatic response schema extraction from @response_handler decorators
    - Dynamic form generation in UI based on Pydantic/dataclass response types
    - Checkpoint-based conversation storage for HIL requests/responses
    - Resume workflow execution after user provides HIL response
    
    Backend Changes:
    - Add extract_response_type_from_executor() to introspect response handlers
    - Enrich RequestInfoEvent with response_schema via _enrich_request_info_event_with_response_schema()
    - Map RequestInfoEvent to response.input.requested OpenAI event format
    - Store HIL responses in conversation history and restore checkpoints
    
    Frontend Changes:
    - Add HILInputModal component with SchemaFormRenderer for dynamic forms
    - Support Pydantic BaseModel and dataclass response types
    - Render enum fields as dropdowns, strings as text/textarea, numbers, booleans, arrays, objects
    - Display original request context alongside response form
    
    Testing:
    - Add  tests for checkpoint storage (test_checkpoints.py)
    - Add schema generation tests for all input types (test_schema_generation.py)
    - Validate end-to-end HIL flow with spam workflow sample
    
    This enables workflows to seamlessly pause execution and request structured user input
    with type-safe, validated forms generated automatically from response type annotations.
    
    * improve HIL support, improve workflow execution view
    
    * ui updates
    
    * ui updates
    
    * improve HIL for workflows, add auth and view modes
    
    * update workflow
    
    * security improvements , ui fixes
    
    * fix mypy error
    
    * update loading spinner in ui
    
    * DevUI: Serialize workflow input as string to maintain conformance with OpenAI Responses format
    
    * Phase 1: Add /meta endpoint and fix workflow event naming for .NET DevUI compatibility
    
    * additional fixes for .NET DevUI workflow visualization item ID tracking
    
    **Problem:**
    .NET DevUI was generating different item IDs for ExecutorInvokedEvent and
    ExecutorCompletedEvent, causing only the first executor to highlight in the
    workflow graph. Long executor names and error messages also broke UI layout.
    
    **Changes:**
    - Add ExecutorActionItemResource to match Python DevUI implementation
    - Track item IDs per executor using dictionary in AgentRunResponseUpdateExtensions
    - Reuse same item ID across invoked/completed/failed events for proper pairing
    - Add truncateText() utility to workflow-utils.ts
    - Truncate executor names to 35 chars in execution timeline
    - Truncate error messages to 150 chars in workflow graph nodes
    
    ** Details:**
    - ExecutorActionItemResource registered with JSON source generation context
    - Dictionary cleaned up after executor completion/failure to prevent memory leaks
    - Frontend item tracking by unique item.id supports multiple executor runs
    - All changes follow existing codebase patterns and conventions
    
    Tested with review-workflow showing correct executor highlighting and state
    transitions for sequential and concurrent executors.
    
    * format fixes, remove cors tests
    
    * remove unecessary attributes
    
    ---------
    
    Co-authored-by: Mark Wallace <127216156+markwallace-microsoft@users.noreply.github.com>
    Co-authored-by: Reuben Bond <reuben.bond@gmail.com>
  • .NET: fix ChatCompletions Tools serialization (#2043)
    * fix serialization in chat completions on tools
    
    * nit
  • Python: DevUI: Use metadata.entity_id instead of model field (#1984)
    * DevUI: Use metadata.entity_id for agent/workflow name instead of model field
    
    * OpenAI Responses: add explicit request validation
    
    * Review feedback
  • .NET: Fix the ordering of chained resolvers in JsonSerializerOptions (#1974)
    * Fix the ordering of chained resolvers in JsonSerializerOptions
    
    We want the resolvers from AIJsonUtilities to be used before the ones from the source generator, in case the source generator emits its own copy in that assembly for the M.E.AI types.
    
    * Apply suggestions from code review
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Update dotnet/src/Microsoft.Agents.AI/AgentJsonUtilities.cs
    
    * Update dotnet/src/Microsoft.Agents.AI.Mem0/Mem0JsonUtilities.cs
    
    Co-authored-by: westey <164392973+westey-m@users.noreply.github.com>
    
    * Remove unused using directive in Mem0JsonUtilities
    
    Removed unused using directive for Microsoft.Extensions.AI.
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    Co-authored-by: westey <164392973+westey-m@users.noreply.github.com>
  • .NET: Improve fidelity of OpenAI Responses server and add Conversations (#1907)
    * Improve fidelity of OpenAI Responses server and add Conversations
    
    * Merge
    
    * nit
    
    * Undo prior change
    
    * Undo prior change
    
    * Review feedback
    
    * Review feedback
    
    * Fix test
    
    * Use simpler JsonDocument approach for polymorphic deserialization
    
    * More review feedback
    
    * dotnet format
  • .NET: Improve fidelity of OpenAI ChatCompletions Hosting (#1785)
    * rename, support json serialization
    
    * wip
    
    * non-streaming
    
    * streaming?
    
    * proper streaming types
    
    * comments + fix audio parse
    
    * copilot suggestions
    
    * proper stopsequences type
    
    * build options as i could
    
    * annotations
    
    * proper generation of Id for chatcompletions
    
    * string length as in chatcompletions api ref
    
    * image url
    
    * support tools
    
    * rework API
    
    * introduce tests for chatcompletions
    
    * function calling / serialization tests / fixes
    
    * more tests and coverage
    
    * fix format
    
    * sort usings
    
    * nit
    
    * address PR comments
    
    * nits
  • .NET: Improve fidelity of OpenAI Responses hosting (#1550)
    * Improve conformance of OpenAI Responses API serving
    
    * Update dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseExtensions.cs
    
    Co-authored-by: Stephen Toub <stoub@microsoft.com>
    
    * Update dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseExtensions.cs
    
    Co-authored-by: Stephen Toub <stoub@microsoft.com>
    
    * Sort packages
    
    * Relax adherence where acceptable
    
    * nit
    
    * PromptCacheKey is not obsolete
    
    * format
    
    ---------
    
    Co-authored-by: Stephen Toub <stoub@microsoft.com>
  • Update to M.E.AI 9.10 (#1461)
    And other System.*/Microsoft.Extensions.* updated today
    
    Co-authored-by: SergeyMenshykh <68852919+SergeyMenshykh@users.noreply.github.com>
  • .NET: Enable access to hosted AIAgents via OpenAI Chat Completions (#1302)
    * non-streaming chat completion
    
    * support streaming
    
    * simplify frontend clients + nit
    
    * nit
    
    * use baseaddress
    
    * rm unnecessary
    
    * refactor
    
    * remove conversation id for chatcompletions agent client
    
    * nits
  • .NET: support .NET8 for hosting projects (#1426)
    * support net8.0 for hosting projects
    
    * enable CI to run on net8
    
    * correctly setup tfms
    
    * correct fixes (avoid net8)
    
    * nit
    
    * fix hosting.a2a.tests tfm
    
    * update TFM for hosting.unitTests
    
    * remove .net8 CI target
    
    * revert hosting.tests
  • .NET: Enable access to hosted AIAgents via OpenAI Responses (#947)
    * init
    
    * wip
    
    * wip wip wip
    
    * wip wip
    
    * open up API
    
    * enable for multiple agents
    
    * more wip
    
    * make frontend respond.
    
    * wip
    
    * not sure if proper setup
    
    * define type
    
    * cleanup
    
    * frontend streaming wip
    
    * use System.Net.ServerSentEvents
    
    * usings
    
    * reformat via ichatclient
    
    * merge main renaming + refactor
    
    * fix main merge + fix sample (a2a change)
    
    * fix sample
    
    * some rebase (not working yet)
    
    * make it at least build somehow
    
    * make non-stream work without internal types
    
    * Input without custom models
    
    * implement streaming
    
    * test frontend
    
    * enable alerts and fix
    
    * build fixes & rereview
    
    * Update dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI.Responses/Microsoft.Agents.AI.Hosting.OpenAI.Responses.csproj
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * Update dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI.Responses/Utils/ResponseItemJsonConverter.cs
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    
    * fix agent discovery
    
    * rename
    
    * rename project into Microsoft.Agents.AI.Hosting.OpenAI (no responses in name)
    
    * PR address comments x1
    
    * address PR comments x2
    
    * correctly instantiate OpenAIResponse
    
    * address PR comments x3
    
    * reconfigure JSON serialization & handle AOT warnings
    
    * fix build
    
    * proper ref
    
    * check update differently
    
    * correct check
    
    * exclude dotnet format diagnostics for IL2026 and IL3050
    
    * space  :)
    
    * re-review
    
    * add comments
    
    * remove unnecessary using
    
    * always take last openai response item
    
    * set responseItem Id explicitly
    
    * add agent.name validation for uri
    
    * cleanup
    
    ---------
    
    Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
    Co-authored-by: SergeyMenshykh <68852919+SergeyMenshykh@users.noreply.github.com>