Fix backend 500s by renaming ChatOptions(model_id=…) to ChatOptions(model=…) for agent-framework 1.2.1#421
Merged
james-tn merged 5 commits intoint-agenticfrom Apr 28, 2026
Conversation
* update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 --------- Co-authored-by: James N. <james.nguyen@microsoft.com>
* update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 --------- Co-authored-by: James N. <james.nguyen@microsoft.com>
* update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 * Migrate workshop to agent-framework==1.2.1 (incl. native HandoffBuilder) (#419) * Promote: int-agentic → main (production) (#414) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Promote: int-agentic → main (production) (#416) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Bump agent-framework to 1.2.1 and migrate AzureOpenAIChatClient → OpenAIChatClient Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Rewrite handoff agent on native HandoffBuilder; update regression tests for 1.2.1 Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Update HANDOFF_README and dependency table for native HandoffBuilder migration Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Address GPT-5.5 review: fix CheckpointStorage protocol, reflection_agent kwargs, observability sample Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Fix PEP 8 spacing in mcp_agent_demo files (code review nits) Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Regenerate uv.lock files; pass workflow_name to 1.2.x checkpoint listing Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/91307ce7-2444-4b5f-b75f-2b736bc022c5 Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> --------- Co-authored-by: James Nguyen <janguy@microsoft.com> Co-authored-by: James N. <james.nguyen@microsoft.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> --------- Co-authored-by: James N. <james.nguyen@microsoft.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com>
Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/f921a448-fe80-4a39-8834-6b0ee615f1d1 Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com>
Copilot created this pull request from a session on behalf of
james-tn
April 28, 2026 17:44
View session
…tegration-test-failure # Conflicts: # agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com>
Contributor
|
Confirmed root cause via the actual PyPI
So this PR's one-line fix in 5 call sites is correct. I pushed two follow-up commits on top:
Out-of-scope items called out in the PR description ( |
Contributor
|
Confirmed root cause via the actual PyPI
The one-line fix in 5 call sites is correct. I pushed two follow-up commits:
Out-of-scope items in the PR description ( |
james-tn
added a commit
that referenced
this pull request
Apr 28, 2026
* update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 * Migrate workshop to agent-framework==1.2.1 (incl. native HandoffBuilder) (#419) * Promote: int-agentic → main (production) (#414) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Promote: int-agentic → main (production) (#416) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Bump agent-framework to 1.2.1 and migrate AzureOpenAIChatClient → OpenAIChatClient Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Rewrite handoff agent on native HandoffBuilder; update regression tests for 1.2.1 Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Update HANDOFF_README and dependency table for native HandoffBuilder migration Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Address GPT-5.5 review: fix CheckpointStorage protocol, reflection_agent kwargs, observability sample Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Fix PEP 8 spacing in mcp_agent_demo files (code review nits) Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Regenerate uv.lock files; pass workflow_name to 1.2.x checkpoint listing Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/91307ce7-2444-4b5f-b75f-2b736bc022c5 Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> --------- Co-authored-by: James Nguyen <janguy@microsoft.com> Co-authored-by: James N. <james.nguyen@microsoft.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * docs: Remove misleading RequestInfoExecutor references (#418) doc update * Fix backend 500s by renaming ChatOptions(model_id=…) to ChatOptions(model=…) for agent-framework 1.2.1 (#421) * Promote: int-agentic → main (production) (#414) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Promote: int-agentic → main (production) (#416) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Promote: int-agentic → main (production) (#420) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 * Migrate workshop to agent-framework==1.2.1 (incl. native HandoffBuilder) (#419) * Promote: int-agentic → main (production) (#414) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production …
james-tn
pushed a commit
that referenced
this pull request
Apr 28, 2026
…_group 1) tests/test_agent_framework_1_2_1_regression.py::test_chat_options_model_id incorrectly asserted that ChatOptions(model_id=...) works. ChatOptions is a TypedDict(total=False) so unknown keys are silently accepted at construction and only blow up downstream when forwarded as kwargs to responses.create(). Renamed to test_chat_options_model and added an __annotations__ check so the test fails loudly if the field is renamed again. 2) magentic_group._validate_configuration required AZURE_OPENAI_API_KEY even though _build_chat_client supports managed identity. The other agents (single_agent, handoff_multi_domain_agent, reflection_agent) only require the deployment/endpoint/version and accept either api_key or credential. Aligned magentic_group with that contract so MI-only deployments don't raise spurious RuntimeError on every /chat call. These follow-ups were originally pushed to PR #421 but dropped by its squash merge. PR #423 already touches both files, so re-applying here. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
james-tn
added a commit
that referenced
this pull request
Apr 28, 2026
…2.1 storages (#423) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 * Migrate workshop to agent-framework==1.2.1 (incl. native HandoffBuilder) (#419) * Promote: int-agentic → main (production) (#414) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Promote: int-agentic → main (production) (#416) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Bump agent-framework to 1.2.1 and migrate AzureOpenAIChatClient → OpenAIChatClient Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Rewrite handoff agent on native HandoffBuilder; update regression tests for 1.2.1 Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Update HANDOFF_README and dependency table for native HandoffBuilder migration Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Address GPT-5.5 review: fix CheckpointStorage protocol, reflection_agent kwargs, observability sample Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Fix PEP 8 spacing in mcp_agent_demo files (code review nits) Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/b1edc1aa-9c20-46c5-afdc-0256050a03de Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Regenerate uv.lock files; pass workflow_name to 1.2.x checkpoint listing Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/91307ce7-2444-4b5f-b75f-2b736bc022c5 Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> --------- Co-authored-by: James Nguyen <janguy@microsoft.com> Co-authored-by: James N. <james.nguyen@microsoft.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * docs: Remove misleading RequestInfoExecutor references (#418) doc update * Replace custom DictCheckpointStorage with built-in 1.2.1 storages Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/f6da6e3e-b288-425d-ac4d-c7ba6fe62fe7 Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * tests: use asyncio.run() instead of new/get_event_loop() Agent-Logs-Url: https://github.com/microsoft/OpenAIWorkshop/sessions/f6da6e3e-b288-425d-ac4d-c7ba6fe62fe7 Co-authored-by: james-tn <25941658+james-tn@users.noreply.github.com> * Fix backend 500s by renaming ChatOptions(model_id=…) to ChatOptions(model=…) for agent-framework 1.2.1 (#421) * Promote: int-agentic → main (production) (#414) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Promote: int-agentic → main (production) (#416) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * Promote: int-agentic → main (production) (#420) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment after successful auto-merge to int-agentic. Only dev environments are destroyed; production is retained. * Trigger rebuild: deploy Cosmos DB auth fix and agent list cleanup * Fix: iterate ResponseStream directly, not .updates ResponseStream is AsyncIterable - iterate with 'async for chunk in stream:' The .updates property returns a Sequence (list), not an async iterator. This caused TypeError: 'async for' requires __aiter__, got list. Not caught in local tests because unit tests mocked the streaming and the regression tests verified API signatures but didn't run live agents. * Fix: make integration test failures block the pipeline Removed continue-on-error: true from the pytest step so test failures actually fail the workflow. Previously, 5/7 tests could fail and the pipeline would still report success and proceed to auto-merge. * Fix: use SHA-tagged images for container deployment, not :latest Container Apps don't create a new revision when the image tag is unchanged. Using :latest meant the old container kept running even after a new image was pushed. Now passes github.sha as the image tag, which forces a new revision on every deploy. This was the root cause of the ResponseStream.updates bug reaching production - the integration tests ran against old containers. * Skip MCP localhost check in CI mode In CI, the evaluation talks to the backend via HTTP which connects to the deployed MCP container internally. The localhost:8000 check is only useful for local dev and was producing a confusing warning in CI logs. * Fix: auto-merge creates PR if none exists Previously auto-merge only looked for an existing open PR and skipped if none was found. Now it auto-creates a PR from the dev branch to int-agentic if one doesn't exist, then merges it. This ensures every successful pipeline run promotes code to int-agentic regardless of whether a PR was manually created beforehand. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22330447642 * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22334055353 * Migrate workshop to agent-framework==1.2.1 (incl. native HandoffBuilder) (#419) * Promote: int-agentic → main (production) (#414) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (#404) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * chore: reduce anomaly probability to 1% for controlled demo pace * Reduce anomaly probability to 1% for controlled demo pace (#406) * update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * chore: reduce anomaly probability to 1% for controlled demo pace --------- Co-authored-by: James N. <james.nguyen@microsoft.com> * add mcp_agent_demo * Add hybrid MCP server (strict-schema + natural-language tools) and typed-contract workflow Scripts 6-8 for the MCP agent demo: - workflow_typed_contracts.py: 4-agent IT security incident response pipeline with Pydantic-enforced contracts at every boundary (SecurityAlert, ThreatAssessment, ImpactAnalysis, IncidentResponse) - mcp_server_hybrid.py: Single MCP endpoint exposing BOTH tool types: * Strict-schema: triage_alert, assess_threat, create_response (Pydantic) * Natural-language: ask_security_advisor, explain_for_customer (prose) * Shared session state across all tools - mcp_client_hybrid.py: 5-step incident flow using both tool types with explicit context passing between steps - README.md: Updated from 6 to 8 capabilities with Hybrid Mode architecture diagram and Quick Start sections 7-8 * Replace workflow_local_remote.py with simplified proxy agent (Script 3) - Delete workflow_local_remote.py (old Script 3 with extra LLM call) - Add workflow_proxy_agent.py: MCPProxyAgent (BaseAgent, no LLM) calls MCP tools directly via call_tool() zero local LLM overhead - Simplify MCPProxyAgent: extract common _call() method, module-level _last_text() helper, remove verbose static methods - Fix workflow_typed_contracts.py: add async with context managers - Update README: merge Script 9 into Script 3 position, update architecture diagram, Quick Start, How It Works sections * Clean up MCP demos: remove comparison commentary, drop typed-contracts - workflow_proxy_agent.py: remove 'traditional vs proxy' framing MCPProxyAgent is the standard approach for remote agent integration - Delete workflow_typed_contracts.py: not relevant to MCP integration - README: 7 scripts, renumber hybrid 6-7, remove typed-contract sections * Add LangGraph + MAF GroupChat cross-framework demo (Scripts 8-9) - mcp_server_langgraph.py: LangGraph ReAct agent exposed as MCP server on port 8003 with architecture tools (pattern eval, migration estimate, tech stack recommendation) - workflow_group_chat.py: MAF GroupChatBuilder orchestration with LLM planner routing between local BusinessStrategist (MAF) and remote TechnicalArchitect (LangGraph via MCP) - pyproject.toml: add langgraph, langchain-openai, langchain-core deps - README.md: update to 9 scripts, add cross-framework architecture diagram, Quick Start sections, and dependency table entries * MCP agent demo: rewrite README as MCP-vs-A2A thesis, delete proxy agent, finalize group chat with inline Planner * README: Mermaid diagrams, professional tone, remove LinkedIn teasing language * README: reframe around multi-framework interop problem, two design patterns (Agent-as-Tool + Agent Adapter), add conceptual architecture * README: fix Mermaid diagrams - use br tags instead of \n for line breaks * README: fix A2A comparison table - elicitation supported, structured schemas not * Upgrade agent-framework to 1.0.0rc1 and fastmcp to 3.0.2 Breaking changes migrated: - agent-framework 1.0.0rc1: ChatAgent->Agent, AgentThread->AgentSession, run_stream->run(stream=True), model->default_options(ChatOptions), WorkflowOutputEvent/AgentRunEvent/RequestInfoEvent->unified WorkflowEvent, MagenticBuilder now uses constructor kwargs, orchestrations moved to agent_framework_orchestrations package - fastmcp 3.0.2: removed mcp version pin (now pulled by fastmcp), no code changes needed (fully compatible) Files updated: - agentic_ai/agents/agent_framework/single_agent.py - agentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.py - agentic_ai/agents/agent_framework/multi_agent/reflection_agent.py - agentic_ai/agents/agent_framework/multi_agent/magentic_group.py - agentic_ai/applications/pyproject.toml (agent-framework==1.0.0rc1) - agentic_ai/workflow/fraud_detection_durable/pyproject.toml (agent-framework==1.0.0rc1) - mcp/pyproject.toml (fastmcp==3.0.2) - tests/test_agent_framework_rc1_regression.py (51 regression tests, all passing) * Fix CI: regenerate requirements.txt with agent-framework-core==1.0.0rc1 The Docker build uses requirements.txt (not pyproject.toml/uv.lock), and it still had agent-framework-core==1.0.0b260130 pinned, which conflicts with agent-framework==1.0.0rc1 requiring agent-framework-core==1.0.0rc1. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22315210980 * Fix: use GH_PAT for auto-merge to trigger downstream workflows Pushes made by GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation to prevent infinite loops). This meant the auto-merge into int-agentic never triggered promote-to-main.yml. Now uses secrets.GH_PAT with fallback to GITHUB_TOKEN so: 1. If GH_PAT is configured: merge triggers promote-to-main.yml 2. If not: merge still works, but promotion PR must be created manually * Add workflow_dispatch trigger to promote-to-main Allows manual triggering when auto-trigger is missed (e.g. after GITHUB_TOKEN-based merges that don't fire downstream workflows). * Fix: Cosmos DB auth + remove phantom reflection_workflow_agent 1. MCP Cosmos DB: Replace AzureCliCredential (not available in containers) with ManagedIdentityCredential (when AZURE_CLIENT_ID is set) or DefaultAzureCredential as fallback. This fixes the 'Azure CLI not found on path' error in production Container Apps. 2. Backend: Remove reflection_workflow_agent from DEFAULT_AVAILABLE_AGENTS and descriptions - the module file doesn't exist, causing it to show as a broken option in the UI agent selector. * chore: merge james-dev into int-agentic (auto) Auto-merged after successful CI/CD pipeline run 22321497108 * Fix promote-to-main + auto-destroy dev environments 1. promote-to-main.yml: Use GH_PAT instead of GITHUB_TOKEN so the workflow can create PRs (GITHUB_TOKEN lacks permission for this in repos with branch protection). 2. orchestrate.yml: Add Step 8 auto-destroy that tears down the integration-* environment…
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Investigate and fix integration test failure on int-agentic (run 25067397984).
Root cause: After migrating to
agent-framework==1.2.1, theChatOptionsTypedDict renamedmodel_id→model. The unknownmodel_idkey was forwarded to the OpenAI Responses API, raising:This bubbled up as
ChatClientExceptionfromAgent.chat_async, surfacing as HTTP 500 on/chatand breaking the 5 backend integration tests.ChatOptions(model_id=...)withChatOptions(model=...)in all 5 occurrencesagentic_ai/agents/agent_framework/single_agent.pyagentic_ai/agents/agent_framework/multi_agent/handoff_multi_domain_agent.pyagentic_ai/agents/agent_framework/multi_agent/magentic_group.pyagentic_ai/agents/agent_framework/multi_agent/reflection_agent.py(2 sites)model_idTypeError no longer occursint-agentic(keptChatOptions(model=...)inhandoff_multi_domain_agent.py)