Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
209 commits
Select commit Hold shift + click to select a range
191779c
Python: Add factory pattern to concurrent orchestration builder (#2738)
TaoChenOSU Dec 11, 2025
4c6a5d4
Python: fix: GroupChat ManagerSelectionResponse JSON Schema for OpenA…
q33566 Dec 11, 2025
3481914
Capture file IDs from code interpreter in streaming responses (#2741)
moonbox3 Dec 11, 2025
989b6eb
.NET: [BREAKING] Prevent nulls in AIAgent property (#2719)
SergeyMenshykh Dec 11, 2025
5da1c2f
code ql sm04598 (#2723)
DeagleGross Dec 11, 2025
67e8304
.NET: Add Conversation State Sample (Step05) (#2697)
Copilot Dec 11, 2025
0413f42
Bump AWSSDK.Extensions.Bedrock.MEAI from 4.0.4.7 to 4.0.4.11 (#2777)
dependabot[bot] Dec 11, 2025
194486c
Bump Azure.Identity from 1.17.0 to 1.17.1 (#2780)
dependabot[bot] Dec 11, 2025
8bb9927
Bump Azure.AI.AgentServer.AgentFramework from 1.0.0-beta.4 to 1.0.0-b…
dependabot[bot] Dec 11, 2025
c376868
Python: added more complete parsing for mcp tool arguments (#2756)
eavanvalkenburg Dec 11, 2025
8d53b20
Python: Updated package versions (#2784)
dmytrostruk Dec 11, 2025
16230d3
Bump actions/checkout from 5 to 6 (#2404)
dependabot[bot] Dec 11, 2025
eb1117f
.NET: adds support for labels in edges, fixes rendering of labels in…
joslat Dec 12, 2025
d7434d5
Python: Added custom args and thread object to ai_function kwargs (#2…
dmytrostruk Dec 12, 2025
0fc7933
Fix WorkflowAgent to include thread convo history. Enable checkpointi…
moonbox3 Dec 12, 2025
e008144
Update OpenAIResponses.yaml to match AgentSchema (#2598)
richardjortega Dec 12, 2025
e0ff153
Python: Remove warnings from workflow builder on not using factories …
TaoChenOSU Dec 12, 2025
0dcebc6
Python: Filter framework kwargs from MCP tool invocations (#2870)
moonbox3 Dec 16, 2025
a729875
Python: Fix WorkflowAgent to emit yield_output as agent response (#2866)
moonbox3 Dec 16, 2025
3c37971
Python: Use agent description in HandoffBuilder auto-generated tools …
lbbniu Dec 16, 2025
3139347
Python: [BREAKING] Observability updates (#2782)
eavanvalkenburg Dec 16, 2025
11d6dcf
Python: Fix middleware terminate flag to exit function calling loop i…
moonbox3 Dec 16, 2025
958a488
Python: Fix context duplication in handoff workflows when restoring f…
moonbox3 Dec 16, 2025
3c322c9
.NET: Update to latest Azure.AI.*, OpenAI, and M.E.AI* (#2850)
stephentoub Dec 16, 2025
a53a3c7
Bump actions/download-artifact from 6 to 7 (#2862)
dependabot[bot] Dec 16, 2025
0132cf6
Bump actions/cache from 4 to 5 (#2861)
dependabot[bot] Dec 16, 2025
1dbf3fd
Bump actions/upload-artifact from 5 to 6 (#2860)
dependabot[bot] Dec 16, 2025
2f06fe5
Python : Ollama Connector for Agent Framework (#1104)
nmoeller Dec 16, 2025
3a7047f
Skip failing IT (#2904)
rogerbarreto Dec 16, 2025
b15466f
.NET: Cosmos DB UT Fast Skip (For Non-Configured Local envs) (#2906)
rogerbarreto Dec 16, 2025
754dfb2
.NET: Add TTLs to durable agent sessions (#2679)
cgillum Dec 16, 2025
54f482d
Python: Update Mem0Provider to use v2 search API `filters` parameter…
giles17 Dec 16, 2025
e319707
Updated package versions (#2913)
dmytrostruk Dec 16, 2025
03a403d
.NET: Switch to new "Run" method name. (#2843)
philliphoff Dec 16, 2025
2bde58f
Python: Switch to new "run" method name. (#2890)
philliphoff Dec 16, 2025
8fca71e
[BREAKING] Python: Add factory pattern to handoff orchestration build…
TaoChenOSU Dec 16, 2025
6adcac2
Python: Flow custom kwargs to agents via Workflow SharedState (#2894)
moonbox3 Dec 17, 2025
06cdcb9
Fix Pydantic error when using Literal type for tool params (#2893)
moonbox3 Dec 17, 2025
ec1c5e9
Updated Ollama package version (#2920)
dmytrostruk Dec 17, 2025
d552798
Python: Azure AI Agent with Bing Grounding Citations Sample (#2892)
giles17 Dec 17, 2025
c7ddb8a
.NET: Make DelegatingAIAgent abstract (#2797)
Copilot Dec 17, 2025
3cd805f
Added additional arguments for Azure AI agent (#2922)
dmytrostruk Dec 17, 2025
ee53fe4
Python: Correction of MCP image type conversion in _mcp.py (#2901)
egeozanozyedek Dec 17, 2025
3608397
Pass kwargs into subworkflows (#2923)
moonbox3 Dec 18, 2025
ca1532c
Python: Move ollama samples to samples getting started dir (#2921)
moonbox3 Dec 18, 2025
0298e0a
Python: fix: correct BadRequestError when using Pydantic model in res…
samueljohnsiby Dec 18, 2025
a71f768
.NET: [Breaking] Delete display name property (#2758)
SergeyMenshykh Dec 18, 2025
e5c11d3
Python: cleanup and refactoring of chat clients (#2937)
eavanvalkenburg Dec 18, 2025
b4f2709
Python: Workflow add option to visualize internal executors (#2917)
TaoChenOSU Dec 18, 2025
e3f8bfc
Python: Fixes Run ID and Thread ID casing to align with AG-UI Typescr…
howlowck Dec 18, 2025
8ff34f9
Python: Add workflow cancellation sample (#2732)
victordibia Dec 18, 2025
ff9343d
.NET: Update Anthropic package to version 12.0.0 (#2914)
Copilot Dec 18, 2025
37b4cfd
Python: Add Azure Managed Redis Support with Credential Provider (#2887)
giles17 Dec 18, 2025
b0b5777
Bump CommunityToolkit.Aspire.OllamaSharp from 13.0.0-beta.440 to 13.0…
dependabot[bot] Dec 18, 2025
d46adff
Bump AWSSDK.Extensions.Bedrock.MEAI from 4.0.4.11 to 4.0.5 (#2853)
dependabot[bot] Dec 18, 2025
a841bdd
Bump Azure.AI.AgentServer.AgentFramework from 1.0.0-beta.4 to 1.0.0-b…
dependabot[bot] Dec 18, 2025
b0a7a1f
Python: Fix WorkflowAgent event handling and kwargs forwarding (#2946)
moonbox3 Dec 18, 2025
19a9e13
.NET: Use GrpcEntityRunner instead of TaskEntityDispatcher (#2759)
jviau Dec 19, 2025
e15eab7
Python: Bump Py version to 1.0.0b251218 for a release. Update CHANGEL…
moonbox3 Dec 19, 2025
8783ac5
Python: Introducing Foundry Local Chat Clients (#2915)
eavanvalkenburg Dec 19, 2025
d83cf93
Updated package versions (#2978)
dmytrostruk Dec 19, 2025
6930c0f
Python: Added GitHub MCP sample with PAT (#2967)
giles17 Dec 19, 2025
85d70f0
Python: Preserve reasoning blocks with OpenRouter (#2950)
SuperKenVery Dec 19, 2025
defe0f1
Python: Added response.created and response.in_progress event process…
howlowck Dec 19, 2025
3b77192
Python: Introducing support for Bedrock-hosted models (Anthropic, Coh…
duttastunil Dec 19, 2025
0e152a0
.NET: [Durable Agents] Reliable streaming sample (#2942)
cgillum Dec 19, 2025
8b743af
Fix typo in README.md about agent definitions (#2634)
SyChell Dec 22, 2025
a32702c
Python: latency improvements (#3014)
eavanvalkenburg Dec 23, 2025
5ab4759
Python: Updated package versions (#3024)
dmytrostruk Dec 23, 2025
4b8a545
Python: add powerfx safe mode (#3028)
eavanvalkenburg Dec 23, 2025
8b4f7d5
.NET: [Breaking] Introduce RunCoreAsync/RunCoreStreamingAsync delegat…
Copilot Dec 30, 2025
577ad4b
add issue template and additional labeling (#3006)
eavanvalkenburg Jan 5, 2026
deea844
fix and extra int test (#3037)
eavanvalkenburg Jan 5, 2026
3ef67ef
.NET: [BREAKING] Refactor ChatMessageStore methods to be similar to A…
westey-m Jan 5, 2026
0aba02c
[BREAKING] Remove unused AgentThreadMetadata (#3067)
westey-m Jan 5, 2026
928c9d5
Python: Fix AzureAIClient failure when conversation history contains …
moonbox3 Jan 5, 2026
ed5278c
Fix: Update OTLP exporter protocol conditions (#3070)
takanori-terai Jan 6, 2026
844d345
Python: Fix ExecutorInvokedEvent and ExecutorCompletedEvent observabi…
moonbox3 Jan 6, 2026
0aa0579
.NET: Seal ChatClientAgentThread (#2842)
Copilot Jan 6, 2026
7a05849
Fix broken strands urls. (#3102)
westey-m Jan 6, 2026
953fde6
.NET: Fix message ordering inconsistency when using AIContextProvider…
Copilot Jan 6, 2026
24c8225
fix: tool_choice parameter not being honored when passed to agent.run…
moonbox3 Jan 6, 2026
ea370f8
sharepoint sample fix (#3108)
giles17 Jan 6, 2026
202f557
Bump versions to 1.0.0b260106 for a release. Update CHANGELOG.md (#3109)
moonbox3 Jan 7, 2026
f49e537
Bump Bedrock version to latest (#3110)
moonbox3 Jan 7, 2026
db283cd
Python: Fix MCP tool result serialization for list[TextContent] (#2523)
claude89757 Jan 7, 2026
2e1189c
Python: Improve DevUI, add Context Inspector view as new tab under tr…
victordibia Jan 7, 2026
dd69cab
.NET: Seal factory contexts and add non JSO deserialize overloads (#3…
westey-m Jan 7, 2026
521f046
Enable blank issues in issue template configuration
markwallace-microsoft Jan 7, 2026
a118fd5
updated templates (#3106)
eavanvalkenburg Jan 7, 2026
f4ab586
Python: Streaming sample for azurefunctions (#3057)
gavin-aguiar Jan 7, 2026
e9d97ce
Python: fix(azure-ai): Fix response_format handling for structured ou…
moonbox3 Jan 7, 2026
f508f1d
Python: Bump python version to 1.0.0b260107 for a release (#3128)
moonbox3 Jan 7, 2026
299a511
Make A2AAgent public, so that it's concrete implementation methods ca…
westey-m Jan 8, 2026
3388864
.NET: Map additional props <-> A2A metadata (#3137)
SergeyMenshykh Jan 8, 2026
ab493af
Python: Fix Anthropic streaming response bugs (#3141)
sukeesh Jan 8, 2026
b88b2c3
Bump AWSSDK.Extensions.Bedrock.MEAI from 4.0.5 to 4.0.5.1 (#2994)
dependabot[bot] Jan 8, 2026
49cecf3
Bump Anthropic from 12.0.0 to 12.0.1 (#2993)
dependabot[bot] Jan 8, 2026
7aa72f6
.NET: [Breaking] Prevent loss of input messages & streamed updates wh…
SergeyMenshykh Jan 8, 2026
99fac4c
.NET: fix: Expose WorkflowErrorEvent as ErrorContent (#2762)
lokitoth Jan 8, 2026
f6086e4
Bump Microsoft.Agents.AI.Workflows from 1.0.0-preview.251125.1 to 1.0…
dependabot[bot] Jan 8, 2026
92435c6
.NET: Add Run overloads to expose ChatClientAgentRunOptions in Intell…
Copilot Jan 8, 2026
3f7ea35
Python: Add tool call/result content types and update connectors and …
Copilot Jan 8, 2026
01c5aab
Bump Google.GenAI from 0.6.0 to 0.9.0 (#2995)
dependabot[bot] Jan 8, 2026
9c04196
Bump js-yaml from 4.1.0 to 4.1.1 in /python/packages/devui/frontend (…
dependabot[bot] Jan 8, 2026
13a5b70
Updated package versions (#3144)
dmytrostruk Jan 8, 2026
50d34ae
.NET: Bump Microsoft.Agents.AI.OpenAI and Microsoft.Extensions.AI.Ope…
dependabot[bot] Jan 8, 2026
88968da
Python: fix(ag-ui): Execute tools with approval_mode, fix shared stat…
moonbox3 Jan 9, 2026
d28ad2d
Track agent name with updates for workflow agent (#3146)
moonbox3 Jan 9, 2026
6445b6b
Python: Fix AzureAIClient tool call bug for AG-UI use (#3148)
moonbox3 Jan 9, 2026
551c2c3
Python: multiple bug fixes (#3150)
eavanvalkenburg Jan 12, 2026
6e3bc21
fix(anthropic): fix duplicate ToolCallStartEvent in streaming tool ca…
chenaoxd Jan 12, 2026
bb6ecd9
.NET: [BREAKING] Change GetNewThread and DeserializeThread to async (…
westey-m Jan 12, 2026
3a5fe31
Fix Ollama model env var in documentation (#3156)
dmsuehir Jan 12, 2026
3e13909
Python: Add Pydantic request model and OpenAPI tags support to AG-UI …
claude89757 Jan 12, 2026
c7cb5be
.NET: Improve resolving `AITool` from DI (#3175)
DeagleGross Jan 12, 2026
e63c148
Python: Fix MCPStreamableHTTPTool to use new streamable_http_client A…
Copilot Jan 12, 2026
ef44fb4
azureai direct a2a endpoint support (#3127)
giles17 Jan 12, 2026
203fb7b
Python: [BREAKING]: removed display_name, renamed context_providers, …
eavanvalkenburg Jan 13, 2026
b2893fb
Python: MCP Improvements: improved connection loss behavior, paginati…
eavanvalkenburg Jan 13, 2026
9c09457
Python: Add declarative workflow runtime (#2815)
moonbox3 Jan 13, 2026
5faa285
point URL to agent, not to agentcard (#3176)
DeagleGross Jan 13, 2026
3e97425
Python: [BREAKING]: Introducing Options as TypedDict and Generic (#3140)
eavanvalkenburg Jan 13, 2026
0b15241
[BREAKING] Python: Refactor orchestrations (#3023)
TaoChenOSU Jan 13, 2026
7d2d345
Python: ADR for create/get agent API (#2618)
dmytrostruk Jan 13, 2026
655a59a
Add ignored parameter for CodeQL in workflow (#3204)
markwallace-microsoft Jan 13, 2026
04657c2
Implement IReadOnlyList on InMemoryChatMessageStore (#3205)
westey-m Jan 13, 2026
c063fc7
.NET: Make ChatMessageStore and AIContextProvider context props setta…
westey-m Jan 13, 2026
1ae0b09
Python: Add dependencies param to ag-ui FastAPI endpoint (#3191)
moonbox3 Jan 13, 2026
d8cf836
renamed all (#3207)
eavanvalkenburg Jan 14, 2026
8b14490
Python: ADR for simplified get response (#3098)
eavanvalkenburg Jan 14, 2026
c70e594
.NET: [Breaking] Rename`AgentRunResponse` and `AgentRunResponseUpdate…
SergeyMenshykh Jan 14, 2026
f56808b
.NET: [Breaking] Rename AgentRunResponseEvent and AgentRunUpdateEvent…
SergeyMenshykh Jan 14, 2026
99c5718
Python: Create/Get Agent API for Azure V2 (#3059)
dmytrostruk Jan 14, 2026
6c956ec
Python: Add more specific exceptions to Workflow (#3188)
TaoChenOSU Jan 14, 2026
9b9a0f1
Python: Added AzureAI sample for downloading code interpreter generat…
giles17 Jan 14, 2026
cb2862d
update package versions (#3223)
giles17 Jan 14, 2026
ffe2e78
Python: fix(core): correct FunctionResultContent ordering in Workflow…
moonbox3 Jan 15, 2026
80b25a7
fix(workflows): rename WorkflowOutputEvent.source_executor_id to exec…
moonbox3 Jan 15, 2026
620da7a
Python: fix(ag-ui): add MCP tool support for AG-UI approval flows (#3…
moonbox3 Jan 15, 2026
15d0c34
Python: Properly configure structured outputs based on new options di…
moonbox3 Jan 15, 2026
3dbdece
.NET: Merge AgentRunOptions.AdditionalProperties into ChatOptions.Add…
westey-m Jan 15, 2026
e192af9
.NET: Update Google.GenAI to 0.11.0 and remove polyfill implementatio…
Copilot Jan 15, 2026
2ab859d
.NET: [BREAKING] Renamed CreateAIAgent/GetAIAgent to AsAIAgent (#3222)
dmytrostruk Jan 15, 2026
6e9420f
Updated DurableAIAgent and fixed integration tests (#3241)
dmytrostruk Jan 15, 2026
48d124e
Python: Create/Get Agent API for Azure V1 (#3192)
dmytrostruk Jan 15, 2026
dd3e2b6
Bump azure-core from 1.37.0 to 1.38.0 in /python (#3209)
dependabot[bot] Jan 15, 2026
b5ca0c8
Python: Create/Get Agent API for OpenAI Assistants (#3208)
dmytrostruk Jan 15, 2026
975884f
Python: (AG-UI) Support service-managed thread on AG-UI (#3136)
howlowck Jan 16, 2026
b773830
Create/Get Agent API - fixes and example improvements (#3246)
dmytrostruk Jan 16, 2026
a151f10
.NET Purview Middleware: Improve Background Job Runner Injection (#3256)
eoindoherty1 Jan 16, 2026
5687e13
Python: [BREAKING] Renamed create_agent to as_agent (#3249)
dmytrostruk Jan 16, 2026
9e3b2fa
Python: Update package version (#3258)
giles17 Jan 16, 2026
9bfa1a9
Python: Fixed Azure chat client for asynchronous filtering (#3260)
dmytrostruk Jan 19, 2026
f87e55b
Python: Fixed use_agent_middleware calling private _normalize_message…
dmytrostruk Jan 19, 2026
915df3b
Python: Added rai_config to Azure AI agent creation (#3265)
dmytrostruk Jan 19, 2026
3243652
Python: Filter conversation_id when passing kwargs to agent as tool (…
dmytrostruk Jan 19, 2026
467d3a6
Bump actions/setup-dotnet from 5.0.1 to 5.1.0 (#3273)
dependabot[bot] Jan 19, 2026
3c1be2a
Update ignored checks in merge-gatekeeper workflow
markwallace-microsoft Jan 19, 2026
83e8965
Python: [BREAKING] Make response_format validation errors visible to …
dmytrostruk Jan 19, 2026
e0b9be7
Python: fix(declarative): Fix MCP tool connection not passed from YAM…
moonbox3 Jan 20, 2026
0f29637
fix #3171, ensure proper form rendering for int (#3201)
victordibia Jan 20, 2026
f54248b
Bump uv from 0.9.25 to 0.9.26 in /python (#3288)
dependabot[bot] Jan 20, 2026
2a43cae
Bump ruff from 0.14.11 to 0.14.13 in /python (#3287)
dependabot[bot] Jan 20, 2026
8ee379d
Bump tar from 7.4.3 to 7.5.3 in /python/packages/devui/frontend (#3267)
dependabot[bot] Jan 20, 2026
3ec8815
.NET: Delete sync extension methods for agent (#3291)
westey-m Jan 20, 2026
f8c84d4
Python: Fix: Add system_instructions to ChatClient LLM span tracing (…
claude89757 Jan 20, 2026
7440126
Improve PR number handling in workflow (#3302)
markwallace-microsoft Jan 20, 2026
7429371
.NET: Update Microsoft.Extensions.AI.* packages to 10.2.0 (#3211)
Copilot Jan 20, 2026
73761aa
.NET: Pass AdditionalProperties from parent to child when exposing an…
westey-m Jan 20, 2026
83e6229
Python: [Breaking] Simplified Content types to a single class with cl…
eavanvalkenburg Jan 20, 2026
db8a59b
.NET: Durable Agent samples and automated validation for non-Azure Fu…
cgillum Jan 20, 2026
6b5437e
Python: fix(core): handle anyio cancel scope errors during MCP connec…
moonbox3 Jan 21, 2026
6d7690e
Python: fix(ag-ui): properly handle json serialize with handoff workf…
moonbox3 Jan 21, 2026
77236bf
Bump tomli from 2.3.0 to 2.4.0 in /python (#3182)
dependabot[bot] Jan 21, 2026
eac8baa
.Net: Fix DebuggerDisplay attribute to reference existing property (#…
Copilot Jan 21, 2026
41cc344
.NET: Add sample to show multiple AIContextProvider usage (#3284)
westey-m Jan 21, 2026
aa6579f
.NET: Update Conversation Sample to use Conversation Id instead (#3180)
rogerbarreto Jan 21, 2026
88e0ee1
Python: Fix local MCP tools with `AzureAIProjectAgentProvider` (#3315)
giles17 Jan 21, 2026
d55dd5f
.NET: Improve readme for agents V2 (#3285)
rogerbarreto Jan 21, 2026
d402d92
Bump pyasn1 from 0.6.1 to 0.6.2 in /python (#3257)
dependabot[bot] Jan 21, 2026
6f1ab66
.NET: Fix DebuggerDisplay attribute in AIAgent.cs to reference existi…
Copilot Jan 21, 2026
082f39e
Python: feat(anthropic): Add response_format support for structured o…
sukeesh Jan 21, 2026
b4a71f0
Updated package versions (#3335)
dmytrostruk Jan 21, 2026
89285a5
Set min version of dependent azure-ai-projects to 2.0.0b3 (#3347)
dargilco Jan 22, 2026
2cf4980
Adding feature collections ADR (#3332)
westey-m Jan 22, 2026
f47645c
.NET: [Breaking] Allow passing auth token credential to cosmosdb exte…
SergeyMenshykh Jan 22, 2026
4940d0e
fix: Subworkflows do not work well with HostAsAgent (#3240)
lokitoth Jan 22, 2026
ea7818d
Python: .NET: Executor source gen for workflow executor routing (#3131)
alliscode Jan 22, 2026
9a37411
.NET: Joslat fix sample issue (#3270)
joslat Jan 22, 2026
958e6d2
.NET: Improve unit test coverage for Microsoft.Agents.AI.OpenAI (#3349)
Copilot Jan 22, 2026
4642577
Merge with main
larohra Jan 22, 2026
7e1bf44
Merge branch 'main' into update-with-main
larohra Jan 22, 2026
b7a7b29
Revert to main
larohra Jan 22, 2026
87c9d74
Python: Fix: Verify types during checkpoint deserialization to preven…
Copilot Jan 22, 2026
b072df3
Python: Fix azurefunctions MCP tool invocation to use correct agent …
gavin-aguiar Jan 22, 2026
9f893a3
Adding ReflectExecutors method to Workflow. (#3389)
kshyju Jan 22, 2026
9a2dbdf
Fix merge conflicts
larohra Jan 23, 2026
5436354
Python: [BREAKING] simplify ag-ui run logic, fix mcp bugs, fix anthro…
moonbox3 Jan 23, 2026
50c2539
Python: fix(core): filter out internal args when passing kwargs to MC…
moonbox3 Jan 23, 2026
e229dfa
Python: Added tests for OpenAI content types + Unit test improvement …
giles17 Jan 23, 2026
e8b32ca
Python: Prefer runtime `kwargs` for `conversation_id` in OpenAI Respo…
giles17 Jan 23, 2026
a97bc32
Python: Azure AI mapping HostedImageGenerationTool to ImageGenTool (#…
giles17 Jan 23, 2026
7b8777d
Python: add(azure-ai): support reasoning config for AzureAIClient (#3…
moonbox3 Jan 23, 2026
90164a6
.NET: Allow overriding the ChatMessageStore to be used per agent run.…
westey-m Jan 23, 2026
9e57dc7
Update instructions to require automatically building and formatting …
westey-m Jan 23, 2026
21e00c0
.NET: Rename ChatMessageStore to ChatHistoryProvider (#3375)
westey-m Jan 23, 2026
f2860f2
Merge with main
larohra Jan 23, 2026
6b09a4b
Update with main
larohra Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ runs:
docker rm -f dts-emulator
fi
echo "Starting Durable Task Scheduler Emulator"
docker run -d --name dts-emulator -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:latest
docker run -d --name dts-emulator -p 8080:8080 -p 8082:8082 -e DTS_USE_DYNAMIC_TASK_HUBS=true mcr.microsoft.com/dts/dts-emulator:latest
echo "Waiting for Durable Task Scheduler Emulator to be ready"
timeout 30 bash -c 'until curl --silent http://localhost:8080/healthz; do sleep 1; done'
echo "Durable Task Scheduler Emulator is ready"
Expand Down
2 changes: 2 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ Here are some general guidelines that apply to all code.

- The top of all *.cs files should have a copyright notice: `// Copyright (c) Microsoft. All rights reserved.`
- All public methods and classes should have XML documentation comments.
- After adding, modifying or deleting code, run `dotnet build`, and then fix any reported build errors.
- After adding or modifying code, run `dotnet format` to automatically fix any formatting errors.

### C# Sample Code Guidelines

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/dotnet-build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ jobs:
echo "COSMOS_EMULATOR_AVAILABLE=true" >> $env:GITHUB_ENV

- name: Setup dotnet
uses: actions/setup-dotnet@v5.0.1
uses: actions/setup-dotnet@v5.1.0
with:
global-json-file: ${{ github.workspace }}/dotnet/global.json
- name: Build dotnet solutions
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/merge-gatekeeper.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ jobs:
token: ${{ secrets.GITHUB_TOKEN }}
timeout: 3600
interval: 30
ignored: CodeQL
ignored: CodeQL,CodeQL analysis (csharp)
13 changes: 10 additions & 3 deletions .github/workflows/python-test-coverage-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,16 @@ jobs:
# because the workflow_run event does not have access to the PR number
# The PR number is needed to post the comment on the PR
run: |
PR_NUMBER=$(cat pr_number)
echo "PR number: $PR_NUMBER"
echo "PR_NUMBER=$PR_NUMBER" >> $GITHUB_ENV
if [ ! -s pr_number ]; then
echo "PR number file 'pr_number' is missing or empty"
exit 1
fi
PR_NUMBER=$(head -1 pr_number | tr -dc '0-9')
if [ -z "$PR_NUMBER" ]; then
echo "PR number file 'pr_number' does not contain a valid PR number"
exit 1
fi
echo "PR_NUMBER=$PR_NUMBER" >> "$GITHUB_ENV"
- name: Pytest coverage comment
id: coverageComment
uses: MishaKav/[email protected]
Expand Down
423 changes: 423 additions & 0 deletions docs/decisions/0014-feature-collections.md

Large diffs are not rendered by default.

19 changes: 10 additions & 9 deletions dotnet/Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,18 @@
<!-- Newtonsoft.Json -->
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
<!-- System.* -->
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.1" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.2" />
<PackageVersion Include="Microsoft.Bcl.HashCode" Version="6.0.0" />
<PackageVersion Include="System.ClientModel" Version="1.8.1" />
<PackageVersion Include="System.CodeDom" Version="10.0.0" />
<PackageVersion Include="System.Collections.Immutable" Version="10.0.0" />
<PackageVersion Include="System.CommandLine" Version="2.0.0-rc.2.25502.107" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="10.0.1" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="10.0.2" />
<PackageVersion Include="System.Linq.AsyncEnumerable" Version="10.0.0" />
<PackageVersion Include="System.Net.Http.Json" Version="10.0.0" />
<PackageVersion Include="System.Net.ServerSentEvents" Version="10.0.0" />
<PackageVersion Include="System.Text.Json" Version="10.0.1" />
<PackageVersion Include="System.Threading.Channels" Version="10.0.1" />
<PackageVersion Include="System.Text.Json" Version="10.0.2" />
<PackageVersion Include="System.Threading.Channels" Version="10.0.2" />
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.6.3" />
<PackageVersion Include="System.Net.Security" Version="4.3.2" />
<!-- OpenTelemetry -->
Expand All @@ -61,21 +61,21 @@
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0" />
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="10.0.0" />
<!-- Microsoft.Extensions.* -->
<PackageVersion Include="Microsoft.Extensions.AI" Version="10.1.1" />
<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="10.1.1" />
<PackageVersion Include="Microsoft.Extensions.AI.OpenAI" Version="10.1.1-preview.1.25612.2" />
<PackageVersion Include="Microsoft.Extensions.AI" Version="10.2.0" />
<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="10.2.0" />
<PackageVersion Include="Microsoft.Extensions.AI.OpenAI" Version="10.2.0-preview.1.26063.2" />
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.2" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.1" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.2" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.0.0" />
<PackageVersion Include="Microsoft.Extensions.VectorData.Abstractions" Version="9.7.0" />
Expand Down Expand Up @@ -143,6 +143,7 @@
<!-- Symbols -->
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="8.0.0" />
<!-- Toolset -->
<PackageVersion Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.CSharp" Version="4.14.0" />
<PackageVersion Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="10.0.100" />
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers">
Expand Down
20 changes: 20 additions & 0 deletions dotnet/agent-framework-dotnet.slnx
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,18 @@
<Project Path="samples/AzureFunctions/07_AgentAsMcpTool/07_AgentAsMcpTool.csproj" />
<Project Path="samples/AzureFunctions/08_ReliableStreaming/08_ReliableStreaming.csproj" />
</Folder>
<Folder Name="/Samples/DurableAgents/">
<File Path="samples/DurableAgents/ConsoleApps/README.md" />
</Folder>
<Folder Name="/Samples/DurableAgents/ConsoleApps/">
<Project Path="samples/DurableAgents/ConsoleApps/01_SingleAgent/01_SingleAgent.csproj" />
<Project Path="samples/DurableAgents/ConsoleApps/02_AgentOrchestration_Chaining/02_AgentOrchestration_Chaining.csproj" />
<Project Path="samples/DurableAgents/ConsoleApps/03_AgentOrchestration_Concurrency/03_AgentOrchestration_Concurrency.csproj" />
<Project Path="samples/DurableAgents/ConsoleApps/04_AgentOrchestration_Conditionals/04_AgentOrchestration_Conditionals.csproj" />
<Project Path="samples/DurableAgents/ConsoleApps/05_AgentOrchestration_HITL/05_AgentOrchestration_HITL.csproj" />
<Project Path="samples/DurableAgents/ConsoleApps/06_LongRunningTools/06_LongRunningTools.csproj" />
<Project Path="samples/DurableAgents/ConsoleApps/07_ReliableStreaming/07_ReliableStreaming.csproj" />
</Folder>
<Folder Name="/Samples/GettingStarted/">
<File Path="samples/GettingStarted/README.md" />
</Folder>
Expand Down Expand Up @@ -81,6 +93,7 @@
<Project Path="samples/GettingStarted/Agents/Agent_Step17_BackgroundResponses/Agent_Step17_BackgroundResponses.csproj" />
<Project Path="samples/GettingStarted/Agents/Agent_Step18_DeepResearch/Agent_Step18_DeepResearch.csproj" />
<Project Path="samples/GettingStarted/Agents/Agent_Step19_Declarative/Agent_Step19_Declarative.csproj" />
<Project Path="samples/GettingStarted/Agents/Agent_Step20_AdditionalAIContext/Agent_Step20_AdditionalAIContext.csproj" />
</Folder>
<Folder Name="/Samples/GettingStarted/DeclarativeAgents/">
<Project Path="samples/GettingStarted/DeclarativeAgents/ChatClient/DeclarativeChatClientAgents.csproj" />
Expand Down Expand Up @@ -286,6 +299,11 @@
<File Path="../docs/decisions/0007-agent-filtering-middleware.md" />
<File Path="../docs/decisions/0008-python-subpackages.md" />
<File Path="../docs/decisions/0009-support-long-running-operations.md" />
<File Path="../docs/decisions/0010-ag-ui-support.md" />
<File Path="../docs/decisions/0011-create-get-agent-api.md" />
<File Path="../docs/decisions/0012-python-typeddict-options.md" />
<File Path="../docs/decisions/0013-python-get-response-simplification.md" />
<File Path="../docs/decisions/0014-feature-collections.md" />
<File Path="../docs/decisions/adr-short-template.md" />
<File Path="../docs/decisions/adr-template.md" />
<File Path="../docs/decisions/README.md" />
Expand Down Expand Up @@ -396,6 +414,7 @@
<Project Path="src/Microsoft.Agents.AI.Workflows.Declarative.AzureAI/Microsoft.Agents.AI.Workflows.Declarative.AzureAI.csproj" />
<Project Path="src/Microsoft.Agents.AI.Workflows.Declarative/Microsoft.Agents.AI.Workflows.Declarative.csproj" />
<Project Path="src/Microsoft.Agents.AI.Workflows/Microsoft.Agents.AI.Workflows.csproj" />
<Project Path="src/Microsoft.Agents.AI.Workflows.Generators/Microsoft.Agents.AI.Workflows.Generators.csproj" />
<Project Path="src/Microsoft.Agents.AI/Microsoft.Agents.AI.csproj" />
</Folder>
<Folder Name="/Tests/" />
Expand Down Expand Up @@ -435,6 +454,7 @@
<Project Path="tests/Microsoft.Agents.AI.Purview.UnitTests/Microsoft.Agents.AI.Purview.UnitTests.csproj" />
<Project Path="tests/Microsoft.Agents.AI.UnitTests/Microsoft.Agents.AI.UnitTests.csproj" />
<Project Path="tests/Microsoft.Agents.AI.Workflows.Declarative.UnitTests/Microsoft.Agents.AI.Workflows.Declarative.UnitTests.csproj" />
<Project Path="tests/Microsoft.Agents.AI.Workflows.Generators.UnitTests/Microsoft.Agents.AI.Workflows.Generators.UnitTests.csproj" />
<Project Path="tests/Microsoft.Agents.AI.Workflows.UnitTests/Microsoft.Agents.AI.Workflows.UnitTests.csproj" />
</Folder>
</Solution>
6 changes: 3 additions & 3 deletions dotnet/nuget/nuget-package.props
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
<PropertyGroup>
<!-- Central version prefix - applies to all nuget packages. -->
<VersionPrefix>1.0.0</VersionPrefix>
<PackageVersion Condition="'$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix).260108.1</PackageVersion>
<PackageVersion Condition="'$(VersionSuffix)' == ''">$(VersionPrefix)-preview.260108.1</PackageVersion>
<GitTag>1.0.0-preview.260108.1</GitTag>
<PackageVersion Condition="'$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix).260121.1</PackageVersion>
<PackageVersion Condition="'$(VersionSuffix)' == ''">$(VersionPrefix)-preview.260121.1</PackageVersion>
<GitTag>1.0.0-preview.260121.1</GitTag>

<Configurations>Debug;Release;Publish</Configurations>
<IsPackable>true</IsPackable>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net10.0</TargetFrameworks>
<OutputType>Exe</OutputType>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<AssemblyName>SingleAgent</AssemblyName>
<RootNamespace>SingleAgent</RootNamespace>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Azure.AI.OpenAI" />
<PackageReference Include="Azure.Identity" />
<PackageReference Include="Microsoft.DurableTask.Client.AzureManaged" />
<PackageReference Include="Microsoft.DurableTask.Worker.AzureManaged" />
<PackageReference Include="Microsoft.Extensions.Hosting" />
</ItemGroup>

<!-- Local projects that should be switched to package references when using the sample outside of this MAF repo -->
<!--
<ItemGroup>
<PackageReference Include="Microsoft.Agents.AI.DurableTask" />
<PackageReference Include="Microsoft.Agents.AI.OpenAI" />
</ItemGroup>
-->
<ItemGroup>
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.DurableTask\Microsoft.Agents.AI.DurableTask.csproj" />
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.OpenAI\Microsoft.Agents.AI.OpenAI.csproj" />
</ItemGroup>
</Project>
103 changes: 103 additions & 0 deletions dotnet/samples/DurableAgents/ConsoleApps/01_SingleAgent/Program.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
// Copyright (c) Microsoft. All rights reserved.

using Azure;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using Microsoft.Agents.AI.DurableTask;
using Microsoft.DurableTask.Client.AzureManaged;
using Microsoft.DurableTask.Worker.AzureManaged;
using Microsoft.Extensions.AI;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using OpenAI.Chat;

// Get the Azure OpenAI endpoint and deployment name from environment variables.
string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
string deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT")
?? throw new InvalidOperationException("AZURE_OPENAI_DEPLOYMENT is not set.");

// Get DTS connection string from environment variable
string dtsConnectionString = Environment.GetEnvironmentVariable("DURABLE_TASK_SCHEDULER_CONNECTION_STRING")
?? "Endpoint=http://localhost:8080;TaskHub=default;Authentication=None";

// Use Azure Key Credential if provided, otherwise use Azure CLI Credential.
string? azureOpenAiKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_KEY");
AzureOpenAIClient client = !string.IsNullOrEmpty(azureOpenAiKey)
? new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(azureOpenAiKey))
: new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential());

// Set up an AI agent following the standard Microsoft Agent Framework pattern.
const string JokerName = "Joker";
const string JokerInstructions = "You are good at telling jokes.";

AIAgent agent = client.GetChatClient(deploymentName).AsAIAgent(JokerInstructions, JokerName);

// Configure the console app to host the AI agent.
IHost host = Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging => logging.SetMinimumLevel(LogLevel.Warning))
.ConfigureServices(services =>
{
services.ConfigureDurableAgents(
options => options.AddAIAgent(agent, timeToLive: TimeSpan.FromHours(1)),
workerBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString),
clientBuilder: builder => builder.UseDurableTaskScheduler(dtsConnectionString));
})
.Build();

await host.StartAsync();

// Get the agent proxy from services
IServiceProvider services = host.Services;
AIAgent agentProxy = services.GetRequiredKeyedService<AIAgent>(JokerName);

// Console colors for better UX
Console.ForegroundColor = ConsoleColor.Cyan;
Console.WriteLine("=== Single Agent Console Sample ===");
Console.ResetColor();
Console.WriteLine("Enter a message for the Joker agent (or 'exit' to quit):");
Console.WriteLine();

// Create a thread for the conversation
AgentThread thread = await agentProxy.GetNewThreadAsync();

while (true)
{
// Read input from stdin
Console.ForegroundColor = ConsoleColor.Yellow;
Console.Write("You: ");
Console.ResetColor();

string? input = Console.ReadLine();
if (string.IsNullOrWhiteSpace(input) || input.Equals("exit", StringComparison.OrdinalIgnoreCase))
{
break;
}

// Run the agent
Console.ForegroundColor = ConsoleColor.Green;
Console.Write("Joker: ");
Console.ResetColor();

try
{
AgentResponse agentResponse = await agentProxy.RunAsync(
message: input,
thread: thread,
cancellationToken: CancellationToken.None);

Console.WriteLine(agentResponse.Text);
Console.WriteLine();
}
catch (Exception ex)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.Error.WriteLine($"Error: {ex.Message}");
Console.ResetColor();
Console.WriteLine();
}
}

await host.StopAsync();
56 changes: 56 additions & 0 deletions dotnet/samples/DurableAgents/ConsoleApps/01_SingleAgent/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Single Agent Sample

This sample demonstrates how to use the durable agents extension to create a simple console app that hosts a single AI agent and provides interactive conversation via stdin/stdout.

## Key Concepts Demonstrated

- Using the Microsoft Agent Framework to define a simple AI agent with a name and instructions.
- Registering durable agents with the console app and running them interactively.
- Conversation management (via threads) for isolated interactions.

## Environment Setup

See the [README.md](../README.md) file in the parent directory for more information on how to configure the environment, including how to install and run common sample dependencies.

## Running the Sample

With the environment setup, you can run the sample:

```bash
cd dotnet/samples/DurableAgents/ConsoleApps/01_SingleAgent
dotnet run --framework net10.0
```

The app will prompt you for input. You can interact with the Joker agent:

```text
=== Single Agent Console Sample ===
Enter a message for the Joker agent (or 'exit' to quit):

You: Tell me a joke about a pirate.
Joker: Why don't pirates ever learn the alphabet? Because they always get stuck at "C"!

You: Now explain the joke.
Joker: The joke plays on the word "sea" (C), which pirates are famously associated with...

You: exit
```

## Scriptable Usage

You can also pipe input to the app for scriptable usage:

```bash
echo "Tell me a joke about a pirate." | dotnet run
```

The app will read from stdin, process the input, and write the response to stdout.

## Viewing Agent State

You can view the state of the agent in the Durable Task Scheduler dashboard:

1. Open your browser and navigate to `http://localhost:8082`
2. In the dashboard, you can view the state of the Joker agent, including its conversation history and current state

The agent maintains conversation state across multiple interactions, and you can inspect this state in the dashboard to understand how the durable agents extension manages conversation context.
Loading
Loading