docs: Remove misleading RequestInfoExecutor references - #418
Merged
James Nguyen (james-tn) merged 3 commits intoApr 28, 2026
Conversation
* update fraud_detection_durable to feb 12 agent-framework * enhance fraud detection durable * update readme * Updating Durable Agent Implementation (microsoft#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 (microsoft#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 (microsoft#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 (microsoft#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>
Replace references to non-existent RequestInfoExecutor class in MAGENTIC_README.md and STATE_MANAGEMENT.md with accurate RC1 API descriptions. Plan review is handled internally by the orchestrator via enable_plan_review=True and WorkflowEvent(type="request_info"). This addresses the confusion reported in microsoft#339 where users attempted to import RequestInfoExecutor based on documentation references. Closes microsoft#339 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
James Nguyen (james-tn)
self-requested a review
March 29, 2026 23:24
Contributor
|
Thank you for the good catch. Can you update your PR to point to int-agentic branch Eric Hansen (@ericchansen) ? |
James Nguyen (james-tn)
merged commit Apr 28, 2026
931ca05
into
microsoft:int-agentic
1 check passed
James Nguyen (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 Nguyen (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.
Summary
Fixes #339
Removes misleading references to
RequestInfoExecutorfrom two documentation files. This non-existent class was referenced as if it were importable fromagent_framework, causing users to attemptfrom agent_framework import RequestInfoExecutorand hit anImportError.Changes
MAGENTIC_README.md(line 131) — ReplacedRequestInfoExecutorreference with accurate RC1 description: plan review is built intoMagenticOrchestratorExecutorviaenable_plan_review=True, emittingWorkflowEvent(type="request_info")events containingMagenticPlanReviewRequestdata.STATE_MANAGEMENT.md(line 411) — ReplacedRequestInfoExecutorreference with accurate description of plan-review checkpoint state managed by the orchestrator viaWorkflowEvent(type="request_info").Root Cause Analysis
RequestInfoExecutorwas never an importable class in any version ofagent-framework. It was only mentioned in documentation as a conceptual component. In RC1, plan review is handled internally byMagenticOrchestratorExecutorand exposed via the unifiedWorkflowEventmodel.Testing
RequestInfoExecutorin the codebase viagreptest_agent_framework_rc1_regression.py— all 36 locally-runnable tests pass (15 failures are pre-existing due to missingagent_framework_orchestrationspackage in test env)