From 089071b489c6e0f3490f629190997804170e0fb0 Mon Sep 17 00:00:00 2001 From: abdulanu0 Date: Tue, 3 Feb 2026 13:53:33 -0800 Subject: [PATCH 1/5] fix: Get actual resolved SDK versions instead of wildcards --- scripts/Update-ReadmeVersions.ps1 | 196 +++++++++++++++++++++++------- 1 file changed, 155 insertions(+), 41 deletions(-) diff --git a/scripts/Update-ReadmeVersions.ps1 b/scripts/Update-ReadmeVersions.ps1 index b9d359c9..99c207f1 100644 --- a/scripts/Update-ReadmeVersions.ps1 +++ b/scripts/Update-ReadmeVersions.ps1 @@ -45,28 +45,54 @@ function Get-PythonVersions { $pyprojectPath = Join-Path $Path "pyproject.toml" if (Test-Path $pyprojectPath) { - $content = Get-Content $pyprojectPath -Raw - - # Extract microsoft-agents packages - $pattern = '(microsoft[-_]agents[-_][a-zA-Z0-9_-]+)\s*[>=<~^]*\s*"?([0-9]+\.[0-9]+\.[0-9]+[^"]*)"?' - $matches = [regex]::Matches($content, $pattern) - - foreach ($match in $matches) { - $pkgName = $match.Groups[1].Value - $version = $match.Groups[2].Value -replace '[",\s]', '' - $versions[$pkgName] = $version + # Try to get actual installed versions using uv pip list + Push-Location $Path + try { + # Sync dependencies first to ensure we have the latest + uv sync --quiet 2>$null + + $pipListJson = uv pip list --format=json 2>$null + if ($pipListJson) { + $packages = $pipListJson | ConvertFrom-Json + foreach ($pkg in $packages) { + if ($pkg.name -like 'microsoft-agents-*' -or $pkg.name -like 'microsoft_agents_*') { + $versions[$pkg.name] = $pkg.version + } + } + } + } + catch { + Write-Host " Warning: Could not get installed versions, falling back to pyproject.toml" -ForegroundColor Yellow + } + finally { + Pop-Location } - # Try alternate pattern for dependencies section - $depsPattern = '"(microsoft[-_]agents[-_][a-zA-Z0-9_-]+)[>=<~^]*([0-9]+\.[0-9]+\.[0-9]+[^"]*)"' - $depsMatches = [regex]::Matches($content, $depsPattern) - - foreach ($match in $depsMatches) { - $pkgName = $match.Groups[1].Value - $version = $match.Groups[2].Value -replace '[",\s]', '' - if (-not $versions.ContainsKey($pkgName)) { + # Fallback to parsing pyproject.toml if uv failed + if ($versions.Count -eq 0) { + $content = Get-Content $pyprojectPath -Raw + + # Extract microsoft-agents packages + $pattern = '(microsoft[-_]agents[-_][a-zA-Z0-9_-]+)\s*[>=<~^]*\s*"?([0-9]+\.[0-9]+\.[0-9]+[^"]*)"?' + $matches = [regex]::Matches($content, $pattern) + + foreach ($match in $matches) { + $pkgName = $match.Groups[1].Value + $version = $match.Groups[2].Value -replace '[",\s]', '' $versions[$pkgName] = $version } + + # Try alternate pattern for dependencies section + $depsPattern = '"(microsoft[-_]agents[-_][a-zA-Z0-9_-]+)[>=<~^]*([0-9]+\.[0-9]+\.[0-9]+[^"]*)"' + $depsMatches = [regex]::Matches($content, $depsPattern) + + foreach ($match in $depsMatches) { + $pkgName = $match.Groups[1].Value + $version = $match.Groups[2].Value -replace '[",\s]', '' + if (-not $versions.ContainsKey($pkgName)) { + $versions[$pkgName] = $version + } + } } } @@ -80,29 +106,83 @@ function Get-NodejsVersions { $packageJsonPath = Join-Path $Path "package.json" if (Test-Path $packageJsonPath) { - $packageJson = Get-Content $packageJsonPath -Raw | ConvertFrom-Json - - $allDeps = @{} - if ($packageJson.dependencies) { - $packageJson.dependencies.PSObject.Properties | ForEach-Object { - $allDeps[$_.Name] = $_.Value + # Try to get actual installed versions from node_modules + Push-Location $Path + try { + # Install dependencies first + npm install --silent 2>$null + + $nodeModulesPath = Join-Path $Path "node_modules" + + # Read package.json to get list of Microsoft packages + $packageJson = Get-Content $packageJsonPath -Raw | ConvertFrom-Json + + $allDeps = @{} + if ($packageJson.dependencies) { + $packageJson.dependencies.PSObject.Properties | ForEach-Object { + $allDeps[$_.Name] = $_.Value + } + } + if ($packageJson.devDependencies) { + $packageJson.devDependencies.PSObject.Properties | ForEach-Object { + if (-not $allDeps.ContainsKey($_.Name)) { + $allDeps[$_.Name] = $_.Value + } + } + } + + foreach ($dep in $allDeps.GetEnumerator()) { + if ($dep.Key -like '@microsoft/agents*') { + # Try to get actual installed version from node_modules + $pkgPathParts = $dep.Key -split '/' + $pkgPath = $nodeModulesPath + foreach ($part in $pkgPathParts) { + $pkgPath = Join-Path $pkgPath $part + } + $installedPkgJsonPath = Join-Path $pkgPath "package.json" + + if (Test-Path $installedPkgJsonPath) { + $installedPkgJson = Get-Content $installedPkgJsonPath -Raw | ConvertFrom-Json + $versions[$dep.Key] = $installedPkgJson.version + } + else { + # Fallback to declared version + $version = $dep.Value -replace '[\^~>=<]', '' + $versions[$dep.Key] = $version + } + } } } - if ($packageJson.devDependencies) { - $packageJson.devDependencies.PSObject.Properties | ForEach-Object { - if (-not $allDeps.ContainsKey($_.Name)) { + catch { + Write-Host " Warning: Could not get installed versions, falling back to package.json" -ForegroundColor Yellow + + # Fallback to reading package.json + $packageJson = Get-Content $packageJsonPath -Raw | ConvertFrom-Json + + $allDeps = @{} + if ($packageJson.dependencies) { + $packageJson.dependencies.PSObject.Properties | ForEach-Object { $allDeps[$_.Name] = $_.Value } } - } - - foreach ($dep in $allDeps.GetEnumerator()) { - if ($dep.Key -like '@microsoft/agents*') { - # Clean version string (remove ^, ~, etc.) - $version = $dep.Value -replace '[\^~>=<]', '' - $versions[$dep.Key] = $version + if ($packageJson.devDependencies) { + $packageJson.devDependencies.PSObject.Properties | ForEach-Object { + if (-not $allDeps.ContainsKey($_.Name)) { + $allDeps[$_.Name] = $_.Value + } + } + } + + foreach ($dep in $allDeps.GetEnumerator()) { + if ($dep.Key -like '@microsoft/agents*') { + $version = $dep.Value -replace '[\^~>=<]', '' + $versions[$dep.Key] = $version + } } } + finally { + Pop-Location + } } return $versions @@ -115,15 +195,49 @@ function Get-DotnetVersions { $csprojFiles = Get-ChildItem -Path $Path -Filter "*.csproj" -ErrorAction SilentlyContinue foreach ($csproj in $csprojFiles) { - [xml]$xml = Get-Content $csproj.FullName + # Try to get resolved versions using dotnet list package + Push-Location $Path + try { + # Restore first to ensure we have resolved versions + dotnet restore --verbosity quiet 2>$null + + $packageListJson = dotnet list package --format json 2>$null + if ($packageListJson) { + $packages = $packageListJson | ConvertFrom-Json + + if ($packages -and $packages.projects) { + foreach ($project in $packages.projects) { + foreach ($framework in $project.frameworks) { + foreach ($pkg in $framework.topLevelPackages) { + if ($pkg.id -like 'Microsoft.Agents*') { + # Use resolvedVersion (actual installed version) not requestedVersion (wildcard) + $versions[$pkg.id] = $pkg.resolvedVersion + } + } + } + } + } + } + } + catch { + Write-Host " Warning: Could not get resolved versions, falling back to csproj" -ForegroundColor Yellow + } + finally { + Pop-Location + } - $packageRefs = $xml.SelectNodes("//PackageReference") - foreach ($pkg in $packageRefs) { - $pkgName = $pkg.GetAttribute("Include") - $pkgVersion = $pkg.GetAttribute("Version") + # Fallback to reading csproj directly if dotnet list failed + if ($versions.Count -eq 0) { + [xml]$xml = Get-Content $csproj.FullName - if ($pkgName -like 'Microsoft.Agents*') { - $versions[$pkgName] = $pkgVersion + $packageRefs = $xml.SelectNodes("//PackageReference") + foreach ($pkg in $packageRefs) { + $pkgName = $pkg.GetAttribute("Include") + $pkgVersion = $pkg.GetAttribute("Version") + + if ($pkgName -like 'Microsoft.Agents*') { + $versions[$pkgName] = $pkgVersion + } } } } From 075b3c4a65d724914ffc3ce722d099978ea37c14 Mon Sep 17 00:00:00 2001 From: abdulanu0 Date: Tue, 3 Feb 2026 14:09:28 -0800 Subject: [PATCH 2/5] fix: Update README with actual resolved SDK versions and fix path bug in Node.js version extraction --- README.md | 48 ++++++++++++++------------- scripts/Update-ReadmeVersions.ps1 | 54 +++++++++++-------------------- 2 files changed, 45 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 26005e68..3e876533 100644 --- a/README.md +++ b/README.md @@ -27,11 +27,15 @@ The following SDK package versions are used across the samples in this repositor | Package | Version | |---------|---------| -| `@microsoft/agents-activity` | `1.2.2` | -| `@microsoft/agents-hosting` | `1.2.2` | +| `@microsoft/agents-activity` | `1.2.3` | +| `@microsoft/agents-hosting` | `1.2.3` | | `Microsoft.Agents.AI` | `1.0.0-preview.251113.1` | -| `Microsoft.Agents.Authentication.Msal` | `1.3.*-*` | -| `Microsoft.Agents.Hosting.AspNetCore` | `1.3.*-*` | +| `Microsoft.Agents.Authentication.Msal` | `1.3.176` | +| `Microsoft.Agents.Hosting.AspNetCore` | `1.3.176` | +| `microsoft-agents-activity` | `0.7.0` | +| `microsoft-agents-authentication-msal` | `0.7.0` | +| `microsoft-agents-hosting-aiohttp` | `0.7.0` | +| `microsoft-agents-hosting-core` | `0.7.0` | ### Microsoft Agent 365 SDK Packages @@ -39,34 +43,34 @@ The following SDK package versions are used across the samples in this repositor | Package | Version | |---------|---------| | `microsoft_agents_a365_notifications` | `0.1.0` | -| `microsoft_agents_a365_observability_core` | `0.1.0` | -| `microsoft_agents_a365_observability_extensions_openai` | `0.1.0` | | `microsoft_agents_a365_runtime` | `0.1.0` | -| `microsoft_agents_a365_tooling` | `0.1.0` | -| `microsoft_agents_a365_tooling_extensions_openai` | `0.1.0` | -| `microsoft-agents-a365-observability-core` | `0.1.0` | +| `microsoft-agents-a365-notifications` | `0.2.1.dev10` | +| `microsoft-agents-a365-observability-core` | `0.2.1.dev10` | +| `microsoft-agents-a365-observability-extensions-openai` | `0.2.1.dev10` | | `microsoft-agents-a365-observability-hosting` | `0.2.0` | -| `microsoft-agents-a365-tooling` | `0.1.0` | +| `microsoft-agents-a365-runtime` | `0.2.1.dev10` | +| `microsoft-agents-a365-tooling` | `0.2.1.dev10` | +| `microsoft-agents-a365-tooling-extensions-openai` | `0.2.1.dev10` | #### Node.js | Package | Version | |---------|---------| -| `@microsoft/agents-a365-notifications` | `0.1.0-preview.30` | -| `@microsoft/agents-a365-observability` | `0.1.0-preview.30` | -| `@microsoft/agents-a365-observability-extensions-openai` | `0.1.0-preview.30` | -| `@microsoft/agents-a365-observability-hosting` | `0.1.0-preview.64` | -| `@microsoft/agents-a365-runtime` | `0.1.0-preview.30` | -| `@microsoft/agents-a365-tooling` | `0.1.0-preview.30` | -| `@microsoft/agents-a365-tooling-extensions-langchain` | `0.1.0-preview.30` | -| `@microsoft/agents-a365-tooling-extensions-openai` | `0.1.0-preview.30` | +| `@microsoft/agents-a365-notifications` | `0.1.0-preview.95` | +| `@microsoft/agents-a365-observability` | `0.1.0-preview.95` | +| `@microsoft/agents-a365-observability-extensions-openai` | `0.1.0-preview.89` | +| `@microsoft/agents-a365-observability-hosting` | `0.1.0-preview.95` | +| `@microsoft/agents-a365-runtime` | `0.1.0-preview.95` | +| `@microsoft/agents-a365-tooling` | `0.1.0-preview.95` | +| `@microsoft/agents-a365-tooling-extensions-langchain` | `0.1.0-preview.95` | +| `@microsoft/agents-a365-tooling-extensions-openai` | `0.1.0-preview.89` | #### .NET | Package | Version | |---------|---------| -| `Microsoft.Agents.A365.Notifications` | `*-beta.*` | -| `Microsoft.Agents.A365.Observability.Extensions.AgentFramework` | `*-beta.*` | -| `Microsoft.Agents.A365.Tooling.Extensions.AgentFramework` | `*-beta.*` | -| `Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel` | `*-beta.*` | +| `Microsoft.Agents.A365.Notifications` | `0.1.72-beta` | +| `Microsoft.Agents.A365.Observability.Extensions.AgentFramework` | `0.1.72-beta` | +| `Microsoft.Agents.A365.Tooling.Extensions.AgentFramework` | `0.1.72-beta` | +| `Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel` | `0.1.72-beta` | diff --git a/scripts/Update-ReadmeVersions.ps1 b/scripts/Update-ReadmeVersions.ps1 index 99c207f1..e78e63d9 100644 --- a/scripts/Update-ReadmeVersions.ps1 +++ b/scripts/Update-ReadmeVersions.ps1 @@ -106,30 +106,30 @@ function Get-NodejsVersions { $packageJsonPath = Join-Path $Path "package.json" if (Test-Path $packageJsonPath) { + # Read package.json first (before Push-Location) + $packageJson = Get-Content $packageJsonPath -Raw | ConvertFrom-Json + + $allDeps = @{} + if ($packageJson.dependencies) { + $packageJson.dependencies.PSObject.Properties | ForEach-Object { + $allDeps[$_.Name] = $_.Value + } + } + if ($packageJson.devDependencies) { + $packageJson.devDependencies.PSObject.Properties | ForEach-Object { + if (-not $allDeps.ContainsKey($_.Name)) { + $allDeps[$_.Name] = $_.Value + } + } + } + # Try to get actual installed versions from node_modules Push-Location $Path try { # Install dependencies first npm install --silent 2>$null - $nodeModulesPath = Join-Path $Path "node_modules" - - # Read package.json to get list of Microsoft packages - $packageJson = Get-Content $packageJsonPath -Raw | ConvertFrom-Json - - $allDeps = @{} - if ($packageJson.dependencies) { - $packageJson.dependencies.PSObject.Properties | ForEach-Object { - $allDeps[$_.Name] = $_.Value - } - } - if ($packageJson.devDependencies) { - $packageJson.devDependencies.PSObject.Properties | ForEach-Object { - if (-not $allDeps.ContainsKey($_.Name)) { - $allDeps[$_.Name] = $_.Value - } - } - } + $nodeModulesPath = "node_modules" foreach ($dep in $allDeps.GetEnumerator()) { if ($dep.Key -like '@microsoft/agents*') { @@ -156,23 +156,7 @@ function Get-NodejsVersions { catch { Write-Host " Warning: Could not get installed versions, falling back to package.json" -ForegroundColor Yellow - # Fallback to reading package.json - $packageJson = Get-Content $packageJsonPath -Raw | ConvertFrom-Json - - $allDeps = @{} - if ($packageJson.dependencies) { - $packageJson.dependencies.PSObject.Properties | ForEach-Object { - $allDeps[$_.Name] = $_.Value - } - } - if ($packageJson.devDependencies) { - $packageJson.devDependencies.PSObject.Properties | ForEach-Object { - if (-not $allDeps.ContainsKey($_.Name)) { - $allDeps[$_.Name] = $_.Value - } - } - } - + # Fallback to declared versions foreach ($dep in $allDeps.GetEnumerator()) { if ($dep.Key -like '@microsoft/agents*') { $version = $dep.Value -replace '[\^~>=<]', '' From 785cd77ca89a15824ddf32cb60b5c6b2a0c1859d Mon Sep 17 00:00:00 2001 From: abdulanu0 Date: Tue, 3 Feb 2026 14:18:50 -0800 Subject: [PATCH 3/5] fix: Improve error handling - capture and log errors instead of silencing them --- scripts/Update-ReadmeVersions.ps1 | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/scripts/Update-ReadmeVersions.ps1 b/scripts/Update-ReadmeVersions.ps1 index e78e63d9..ba94e39b 100644 --- a/scripts/Update-ReadmeVersions.ps1 +++ b/scripts/Update-ReadmeVersions.ps1 @@ -49,9 +49,16 @@ function Get-PythonVersions { Push-Location $Path try { # Sync dependencies first to ensure we have the latest - uv sync --quiet 2>$null + $syncResult = uv sync --quiet 2>&1 + if ($LASTEXITCODE -ne 0) { + Write-Host " Note: uv sync returned exit code $LASTEXITCODE" -ForegroundColor Gray + } - $pipListJson = uv pip list --format=json 2>$null + $pipListJson = uv pip list --format=json 2>&1 + if ($LASTEXITCODE -ne 0) { + Write-Host " Note: uv pip list returned exit code $LASTEXITCODE" -ForegroundColor Gray + $pipListJson = $null + } if ($pipListJson) { $packages = $pipListJson | ConvertFrom-Json foreach ($pkg in $packages) { @@ -127,7 +134,10 @@ function Get-NodejsVersions { Push-Location $Path try { # Install dependencies first - npm install --silent 2>$null + $npmResult = npm install --silent 2>&1 + if ($LASTEXITCODE -ne 0) { + Write-Host " Note: npm install returned exit code $LASTEXITCODE" -ForegroundColor Gray + } $nodeModulesPath = "node_modules" @@ -183,9 +193,16 @@ function Get-DotnetVersions { Push-Location $Path try { # Restore first to ensure we have resolved versions - dotnet restore --verbosity quiet 2>$null + $restoreResult = dotnet restore --verbosity quiet 2>&1 + if ($LASTEXITCODE -ne 0) { + Write-Host " Note: dotnet restore returned exit code $LASTEXITCODE" -ForegroundColor Gray + } - $packageListJson = dotnet list package --format json 2>$null + $packageListJson = dotnet list package --format json 2>&1 + if ($LASTEXITCODE -ne 0) { + Write-Host " Note: dotnet list package returned exit code $LASTEXITCODE" -ForegroundColor Gray + $packageListJson = $null + } if ($packageListJson) { $packages = $packageListJson | ConvertFrom-Json From 1fbc8faef0028eb86af9415c2eec5d9f35a463d2 Mon Sep 17 00:00:00 2001 From: abdulanu0 Date: Wed, 4 Feb 2026 11:05:08 -0800 Subject: [PATCH 4/5] feat: Replace static SDK versions with dynamic shields.io badges - Remove static version text that required commits to update - Add dynamic badges that fetch versions from npm, PyPI, and NuGet - Delete update-readme-versions.yml workflow (no longer needed) - Delete Update-ReadmeVersions.ps1 script (no longer needed) Addresses feedback about needing dynamic versions that work on scheduled runs without requiring README modifications. --- .github/workflows/update-readme-versions.yml | 50 --- README.md | 62 ++- scripts/Update-ReadmeVersions.ps1 | 424 ------------------- 3 files changed, 27 insertions(+), 509 deletions(-) delete mode 100644 .github/workflows/update-readme-versions.yml delete mode 100644 scripts/Update-ReadmeVersions.ps1 diff --git a/.github/workflows/update-readme-versions.yml b/.github/workflows/update-readme-versions.yml deleted file mode 100644 index c3a078ee..00000000 --- a/.github/workflows/update-readme-versions.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -name: Update SDK Versions in README - -on: - push: - branches: [main] - paths: - - 'python/**/pyproject.toml' - - 'nodejs/**/package.json' - - 'dotnet/**/*.csproj' - workflow_dispatch: - -permissions: - contents: write - -jobs: - update-versions: - name: Update SDK Versions - runs-on: ubuntu-latest - - steps: - - name: Checkout Repository - uses: actions/checkout@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Update README with SDK Versions - shell: pwsh - run: | - ./scripts/Update-ReadmeVersions.ps1 - - - name: Check for Changes - id: check - run: | - if git diff --quiet README.md; then - echo "changed=false" >> $GITHUB_OUTPUT - else - echo "changed=true" >> $GITHUB_OUTPUT - fi - - - name: Commit and Push Changes - if: steps.check.outputs.changed == 'true' - run: | - git config --local user.email "github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - git add README.md - git commit -m "docs: Update SDK versions in README [skip ci]" - git push diff --git a/README.md b/README.md index 3e876533..1c466ba4 100644 --- a/README.md +++ b/README.md @@ -19,60 +19,52 @@ This repository contains sample agents and prompts for building with the Microso ## SDK Versions -The following SDK package versions are used across the samples in this repository. This section is automatically updated when package versions change. - - +The following SDK packages are used across the samples in this repository. Version badges update automatically from package registries. ### Microsoft Agents SDK Packages | Package | Version | |---------|---------| -| `@microsoft/agents-activity` | `1.2.3` | -| `@microsoft/agents-hosting` | `1.2.3` | -| `Microsoft.Agents.AI` | `1.0.0-preview.251113.1` | -| `Microsoft.Agents.Authentication.Msal` | `1.3.176` | -| `Microsoft.Agents.Hosting.AspNetCore` | `1.3.176` | -| `microsoft-agents-activity` | `0.7.0` | -| `microsoft-agents-authentication-msal` | `0.7.0` | -| `microsoft-agents-hosting-aiohttp` | `0.7.0` | -| `microsoft-agents-hosting-core` | `0.7.0` | +| `@microsoft/agents-activity` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-activity?label=npm)](https://www.npmjs.com/package/@microsoft/agents-activity) | +| `@microsoft/agents-hosting` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-hosting?label=npm)](https://www.npmjs.com/package/@microsoft/agents-hosting) | +| `microsoft-agents-activity` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-activity?label=pypi)](https://pypi.org/project/microsoft-agents-activity) | +| `microsoft-agents-hosting-core` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-hosting-core?label=pypi)](https://pypi.org/project/microsoft-agents-hosting-core) | +| `microsoft-agents-hosting-aiohttp` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-hosting-aiohttp?label=pypi)](https://pypi.org/project/microsoft-agents-hosting-aiohttp) | +| `microsoft-agents-authentication-msal` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-authentication-msal?label=pypi)](https://pypi.org/project/microsoft-agents-authentication-msal) | +| `Microsoft.Agents.Hosting.AspNetCore` | [![NuGet](https://img.shields.io/nuget/v/Microsoft.Agents.Hosting.AspNetCore?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.Hosting.AspNetCore) | +| `Microsoft.Agents.Authentication.Msal` | [![NuGet](https://img.shields.io/nuget/v/Microsoft.Agents.Authentication.Msal?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.Authentication.Msal) | +| `Microsoft.Agents.AI` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.AI?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.AI) | ### Microsoft Agent 365 SDK Packages #### Python | Package | Version | |---------|---------| -| `microsoft_agents_a365_notifications` | `0.1.0` | -| `microsoft_agents_a365_runtime` | `0.1.0` | -| `microsoft-agents-a365-notifications` | `0.2.1.dev10` | -| `microsoft-agents-a365-observability-core` | `0.2.1.dev10` | -| `microsoft-agents-a365-observability-extensions-openai` | `0.2.1.dev10` | -| `microsoft-agents-a365-observability-hosting` | `0.2.0` | -| `microsoft-agents-a365-runtime` | `0.2.1.dev10` | -| `microsoft-agents-a365-tooling` | `0.2.1.dev10` | -| `microsoft-agents-a365-tooling-extensions-openai` | `0.2.1.dev10` | +| `microsoft-agents-a365-tooling` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-tooling?label=pypi)](https://pypi.org/project/microsoft-agents-a365-tooling) | +| `microsoft-agents-a365-tooling-extensions-openai` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-tooling-extensions-openai?label=pypi)](https://pypi.org/project/microsoft-agents-a365-tooling-extensions-openai) | +| `microsoft-agents-a365-observability-core` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-observability-core?label=pypi)](https://pypi.org/project/microsoft-agents-a365-observability-core) | +| `microsoft-agents-a365-observability-hosting` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-observability-hosting?label=pypi)](https://pypi.org/project/microsoft-agents-a365-observability-hosting) | +| `microsoft-agents-a365-notifications` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-notifications?label=pypi)](https://pypi.org/project/microsoft-agents-a365-notifications) | +| `microsoft-agents-a365-runtime` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-runtime?label=pypi)](https://pypi.org/project/microsoft-agents-a365-runtime) | #### Node.js | Package | Version | |---------|---------| -| `@microsoft/agents-a365-notifications` | `0.1.0-preview.95` | -| `@microsoft/agents-a365-observability` | `0.1.0-preview.95` | -| `@microsoft/agents-a365-observability-extensions-openai` | `0.1.0-preview.89` | -| `@microsoft/agents-a365-observability-hosting` | `0.1.0-preview.95` | -| `@microsoft/agents-a365-runtime` | `0.1.0-preview.95` | -| `@microsoft/agents-a365-tooling` | `0.1.0-preview.95` | -| `@microsoft/agents-a365-tooling-extensions-langchain` | `0.1.0-preview.95` | -| `@microsoft/agents-a365-tooling-extensions-openai` | `0.1.0-preview.89` | +| `@microsoft/agents-a365-tooling` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-tooling?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-tooling) | +| `@microsoft/agents-a365-tooling-extensions-openai` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-tooling-extensions-openai?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-tooling-extensions-openai) | +| `@microsoft/agents-a365-tooling-extensions-langchain` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-tooling-extensions-langchain?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-tooling-extensions-langchain) | +| `@microsoft/agents-a365-observability` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-observability?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-observability) | +| `@microsoft/agents-a365-observability-hosting` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-observability-hosting?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-observability-hosting) | +| `@microsoft/agents-a365-notifications` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-notifications?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-notifications) | +| `@microsoft/agents-a365-runtime` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-runtime?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-runtime) | #### .NET | Package | Version | |---------|---------| -| `Microsoft.Agents.A365.Notifications` | `0.1.72-beta` | -| `Microsoft.Agents.A365.Observability.Extensions.AgentFramework` | `0.1.72-beta` | -| `Microsoft.Agents.A365.Tooling.Extensions.AgentFramework` | `0.1.72-beta` | -| `Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel` | `0.1.72-beta` | - - +| `Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel) | +| `Microsoft.Agents.A365.Tooling.Extensions.AgentFramework` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.A365.Tooling.Extensions.AgentFramework?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.A365.Tooling.Extensions.AgentFramework) | +| `Microsoft.Agents.A365.Observability.Extensions.AgentFramework` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.A365.Observability.Extensions.AgentFramework?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.A365.Observability.Extensions.AgentFramework) | +| `Microsoft.Agents.A365.Notifications` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.A365.Notifications?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.A365.Notifications) | > #### Note: > Use the information in this README to contribute to this open-source project. To learn about using this SDK in your projects, refer to the [Microsoft Agent 365 Developer documentation](https://learn.microsoft.com/en-us/microsoft-agent-365/developer/). diff --git a/scripts/Update-ReadmeVersions.ps1 b/scripts/Update-ReadmeVersions.ps1 deleted file mode 100644 index ba94e39b..00000000 --- a/scripts/Update-ReadmeVersions.ps1 +++ /dev/null @@ -1,424 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. - -<# -.SYNOPSIS - Updates the README.md with current SDK versions from all samples. - -.DESCRIPTION - This script extracts SDK version information from package.json, pyproject.toml, - and .csproj files across all sample projects and updates a marked section in - the README.md file. - -.PARAMETER ReadmePath - Path to the README.md file (default: README.md in repo root) - -.PARAMETER DryRun - If specified, outputs the new content without modifying the file - -.EXAMPLE - .\Update-ReadmeVersions.ps1 - .\Update-ReadmeVersions.ps1 -DryRun -#> - -param( - [string]$ReadmePath = "README.md", - [switch]$DryRun -) - -$ErrorActionPreference = 'Stop' - -# Define samples to check -$samples = @( - @{ Name = "Python OpenAI"; Path = "python/openai/sample-agent"; Type = "python" } - @{ Name = "Python Claude"; Path = "python/claude/sample-agent"; Type = "python" } - @{ Name = "Node.js OpenAI"; Path = "nodejs/openai/sample-agent"; Type = "nodejs" } - @{ Name = "Node.js LangChain"; Path = "nodejs/langchain/sample-agent"; Type = "nodejs" } - @{ Name = ".NET Semantic Kernel"; Path = "dotnet/semantic-kernel/sample-agent"; Type = "dotnet" } - @{ Name = ".NET Agent Framework"; Path = "dotnet/agent-framework/sample-agent"; Type = "dotnet" } -) - -function Get-PythonVersions { - param([string]$Path) - - $versions = @{} - $pyprojectPath = Join-Path $Path "pyproject.toml" - - if (Test-Path $pyprojectPath) { - # Try to get actual installed versions using uv pip list - Push-Location $Path - try { - # Sync dependencies first to ensure we have the latest - $syncResult = uv sync --quiet 2>&1 - if ($LASTEXITCODE -ne 0) { - Write-Host " Note: uv sync returned exit code $LASTEXITCODE" -ForegroundColor Gray - } - - $pipListJson = uv pip list --format=json 2>&1 - if ($LASTEXITCODE -ne 0) { - Write-Host " Note: uv pip list returned exit code $LASTEXITCODE" -ForegroundColor Gray - $pipListJson = $null - } - if ($pipListJson) { - $packages = $pipListJson | ConvertFrom-Json - foreach ($pkg in $packages) { - if ($pkg.name -like 'microsoft-agents-*' -or $pkg.name -like 'microsoft_agents_*') { - $versions[$pkg.name] = $pkg.version - } - } - } - } - catch { - Write-Host " Warning: Could not get installed versions, falling back to pyproject.toml" -ForegroundColor Yellow - } - finally { - Pop-Location - } - - # Fallback to parsing pyproject.toml if uv failed - if ($versions.Count -eq 0) { - $content = Get-Content $pyprojectPath -Raw - - # Extract microsoft-agents packages - $pattern = '(microsoft[-_]agents[-_][a-zA-Z0-9_-]+)\s*[>=<~^]*\s*"?([0-9]+\.[0-9]+\.[0-9]+[^"]*)"?' - $matches = [regex]::Matches($content, $pattern) - - foreach ($match in $matches) { - $pkgName = $match.Groups[1].Value - $version = $match.Groups[2].Value -replace '[",\s]', '' - $versions[$pkgName] = $version - } - - # Try alternate pattern for dependencies section - $depsPattern = '"(microsoft[-_]agents[-_][a-zA-Z0-9_-]+)[>=<~^]*([0-9]+\.[0-9]+\.[0-9]+[^"]*)"' - $depsMatches = [regex]::Matches($content, $depsPattern) - - foreach ($match in $depsMatches) { - $pkgName = $match.Groups[1].Value - $version = $match.Groups[2].Value -replace '[",\s]', '' - if (-not $versions.ContainsKey($pkgName)) { - $versions[$pkgName] = $version - } - } - } - } - - return $versions -} - -function Get-NodejsVersions { - param([string]$Path) - - $versions = @{} - $packageJsonPath = Join-Path $Path "package.json" - - if (Test-Path $packageJsonPath) { - # Read package.json first (before Push-Location) - $packageJson = Get-Content $packageJsonPath -Raw | ConvertFrom-Json - - $allDeps = @{} - if ($packageJson.dependencies) { - $packageJson.dependencies.PSObject.Properties | ForEach-Object { - $allDeps[$_.Name] = $_.Value - } - } - if ($packageJson.devDependencies) { - $packageJson.devDependencies.PSObject.Properties | ForEach-Object { - if (-not $allDeps.ContainsKey($_.Name)) { - $allDeps[$_.Name] = $_.Value - } - } - } - - # Try to get actual installed versions from node_modules - Push-Location $Path - try { - # Install dependencies first - $npmResult = npm install --silent 2>&1 - if ($LASTEXITCODE -ne 0) { - Write-Host " Note: npm install returned exit code $LASTEXITCODE" -ForegroundColor Gray - } - - $nodeModulesPath = "node_modules" - - foreach ($dep in $allDeps.GetEnumerator()) { - if ($dep.Key -like '@microsoft/agents*') { - # Try to get actual installed version from node_modules - $pkgPathParts = $dep.Key -split '/' - $pkgPath = $nodeModulesPath - foreach ($part in $pkgPathParts) { - $pkgPath = Join-Path $pkgPath $part - } - $installedPkgJsonPath = Join-Path $pkgPath "package.json" - - if (Test-Path $installedPkgJsonPath) { - $installedPkgJson = Get-Content $installedPkgJsonPath -Raw | ConvertFrom-Json - $versions[$dep.Key] = $installedPkgJson.version - } - else { - # Fallback to declared version - $version = $dep.Value -replace '[\^~>=<]', '' - $versions[$dep.Key] = $version - } - } - } - } - catch { - Write-Host " Warning: Could not get installed versions, falling back to package.json" -ForegroundColor Yellow - - # Fallback to declared versions - foreach ($dep in $allDeps.GetEnumerator()) { - if ($dep.Key -like '@microsoft/agents*') { - $version = $dep.Value -replace '[\^~>=<]', '' - $versions[$dep.Key] = $version - } - } - } - finally { - Pop-Location - } - } - - return $versions -} - -function Get-DotnetVersions { - param([string]$Path) - - $versions = @{} - $csprojFiles = Get-ChildItem -Path $Path -Filter "*.csproj" -ErrorAction SilentlyContinue - - foreach ($csproj in $csprojFiles) { - # Try to get resolved versions using dotnet list package - Push-Location $Path - try { - # Restore first to ensure we have resolved versions - $restoreResult = dotnet restore --verbosity quiet 2>&1 - if ($LASTEXITCODE -ne 0) { - Write-Host " Note: dotnet restore returned exit code $LASTEXITCODE" -ForegroundColor Gray - } - - $packageListJson = dotnet list package --format json 2>&1 - if ($LASTEXITCODE -ne 0) { - Write-Host " Note: dotnet list package returned exit code $LASTEXITCODE" -ForegroundColor Gray - $packageListJson = $null - } - if ($packageListJson) { - $packages = $packageListJson | ConvertFrom-Json - - if ($packages -and $packages.projects) { - foreach ($project in $packages.projects) { - foreach ($framework in $project.frameworks) { - foreach ($pkg in $framework.topLevelPackages) { - if ($pkg.id -like 'Microsoft.Agents*') { - # Use resolvedVersion (actual installed version) not requestedVersion (wildcard) - $versions[$pkg.id] = $pkg.resolvedVersion - } - } - } - } - } - } - } - catch { - Write-Host " Warning: Could not get resolved versions, falling back to csproj" -ForegroundColor Yellow - } - finally { - Pop-Location - } - - # Fallback to reading csproj directly if dotnet list failed - if ($versions.Count -eq 0) { - [xml]$xml = Get-Content $csproj.FullName - - $packageRefs = $xml.SelectNodes("//PackageReference") - foreach ($pkg in $packageRefs) { - $pkgName = $pkg.GetAttribute("Include") - $pkgVersion = $pkg.GetAttribute("Version") - - if ($pkgName -like 'Microsoft.Agents*') { - $versions[$pkgName] = $pkgVersion - } - } - } - } - - return $versions -} - -# Collect all versions -$allVersions = @{} - -foreach ($sample in $samples) { - Write-Host "Checking $($sample.Name)..." -ForegroundColor Cyan - - if (-not (Test-Path $sample.Path)) { - Write-Host " Path not found: $($sample.Path)" -ForegroundColor Yellow - continue - } - - $versions = switch ($sample.Type) { - 'python' { Get-PythonVersions -Path $sample.Path } - 'nodejs' { Get-NodejsVersions -Path $sample.Path } - 'dotnet' { Get-DotnetVersions -Path $sample.Path } - } - - if ($versions.Count -gt 0) { - $allVersions[$sample.Name] = @{ - Type = $sample.Type - Versions = $versions - } - - foreach ($v in $versions.GetEnumerator()) { - Write-Host " $($v.Key): $($v.Value)" -ForegroundColor Gray - } - } -} - -# Group packages by category and language -$agentsSdkVersions = @{} -$a365Python = @{} -$a365Nodejs = @{} -$a365Dotnet = @{} - -foreach ($sample in $allVersions.GetEnumerator()) { - $runtime = $sample.Value.Type - - foreach ($pkg in $sample.Value.Versions.GetEnumerator()) { - $pkgName = $pkg.Key - $version = $pkg.Value - - # Determine if it's Agent 365 SDK - $isA365 = $pkgName -match 'a365|A365' - - if ($isA365) { - # Group A365 packages by language - switch ($runtime) { - 'python' { - if (-not $a365Python.ContainsKey($pkgName)) { - $a365Python[$pkgName] = $version - } - } - 'nodejs' { - if (-not $a365Nodejs.ContainsKey($pkgName)) { - $a365Nodejs[$pkgName] = $version - } - } - 'dotnet' { - if (-not $a365Dotnet.ContainsKey($pkgName)) { - $a365Dotnet[$pkgName] = $version - } - } - } - } - else { - # Microsoft Agents SDK (base SDK) - if (-not $agentsSdkVersions.ContainsKey($pkgName)) { - $agentsSdkVersions[$pkgName] = @{ Version = $version; Runtime = $runtime } - } - } - } -} - -# Generate markdown sections -$markdown = @" - -### Microsoft Agents SDK Packages - -| Package | Version | -|---------|---------| -"@ - -# Sort and add Agents SDK packages -$sortedAgentsSdk = $agentsSdkVersions.GetEnumerator() | Sort-Object { $_.Key } -foreach ($pkg in $sortedAgentsSdk) { - $markdown += "`n| ``$($pkg.Key)`` | ``$($pkg.Value.Version)`` |" -} - -$markdown += @" - - -### Microsoft Agent 365 SDK Packages - -#### Python -| Package | Version | -|---------|---------| -"@ - -# Sort and add Python A365 packages -$sortedA365Python = $a365Python.GetEnumerator() | Sort-Object { $_.Key } -foreach ($pkg in $sortedA365Python) { - $markdown += "`n| ``$($pkg.Key)`` | ``$($pkg.Value)`` |" -} - -$markdown += @" - - -#### Node.js -| Package | Version | -|---------|---------| -"@ - -# Sort and add Node.js A365 packages -$sortedA365Nodejs = $a365Nodejs.GetEnumerator() | Sort-Object { $_.Key } -foreach ($pkg in $sortedA365Nodejs) { - $markdown += "`n| ``$($pkg.Key)`` | ``$($pkg.Value)`` |" -} - -$markdown += @" - - -#### .NET -| Package | Version | -|---------|---------| -"@ - -# Sort and add .NET A365 packages -$sortedA365Dotnet = $a365Dotnet.GetEnumerator() | Sort-Object { $_.Key } -foreach ($pkg in $sortedA365Dotnet) { - $markdown += "`n| ``$($pkg.Key)`` | ``$($pkg.Value)`` |" -} - -$markdown += "`n" - -Write-Host "" -Write-Host "Generated SDK Versions Section:" -ForegroundColor Green -Write-Host $markdown - -# Read README and update the section -if (Test-Path $ReadmePath) { - $readmeContent = Get-Content $ReadmePath -Raw - - $startMarker = '' - $endMarker = '' - - if ($readmeContent -match [regex]::Escape($startMarker) -and $readmeContent -match [regex]::Escape($endMarker)) { - # Replace content between markers - $pattern = "(?s)$([regex]::Escape($startMarker)).*?$([regex]::Escape($endMarker))" - $replacement = "$startMarker`n$markdown`n$endMarker" - $newContent = $readmeContent -replace $pattern, $replacement - - if ($DryRun) { - Write-Host "" - Write-Host "=== DRY RUN - Would update README with: ===" -ForegroundColor Yellow - Write-Host $replacement - } - else { - $newContent | Set-Content $ReadmePath -NoNewline - Write-Host "" - Write-Host "README.md updated successfully!" -ForegroundColor Green - } - } - else { - Write-Host "" - Write-Host "ERROR: Could not find SDK version markers in README.md" -ForegroundColor Red - Write-Host "Please add the following markers to README.md:" -ForegroundColor Yellow - Write-Host " $startMarker" - Write-Host " $endMarker" - exit 1 - } -} -else { - Write-Host "ERROR: README.md not found at $ReadmePath" -ForegroundColor Red - exit 1 -} From ac117f97a4c433ab0f6ceb9086243733f17392ec Mon Sep 17 00:00:00 2001 From: abdulanu0 Date: Wed, 4 Feb 2026 18:29:52 -0800 Subject: [PATCH 5/5] feat: Remove static SDK versions from README, link to E2E workflow summaries - Remove all hardcoded version tables from README - Direct users to E2E workflow step summaries for actual resolved versions - No README commits needed - versions are displayed dynamically in workflow logs - E2E tests use flexible constraints (>=, ^, *-beta.*) to get latest packages Addresses feedback about avoiding README modifications for version updates. --- README.md | 51 +++++---------------------------------------------- 1 file changed, 5 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index 1c466ba4..e7ca89f6 100644 --- a/README.md +++ b/README.md @@ -19,52 +19,11 @@ This repository contains sample agents and prompts for building with the Microso ## SDK Versions -The following SDK packages are used across the samples in this repository. Version badges update automatically from package registries. - -### Microsoft Agents SDK Packages - -| Package | Version | -|---------|---------| -| `@microsoft/agents-activity` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-activity?label=npm)](https://www.npmjs.com/package/@microsoft/agents-activity) | -| `@microsoft/agents-hosting` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-hosting?label=npm)](https://www.npmjs.com/package/@microsoft/agents-hosting) | -| `microsoft-agents-activity` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-activity?label=pypi)](https://pypi.org/project/microsoft-agents-activity) | -| `microsoft-agents-hosting-core` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-hosting-core?label=pypi)](https://pypi.org/project/microsoft-agents-hosting-core) | -| `microsoft-agents-hosting-aiohttp` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-hosting-aiohttp?label=pypi)](https://pypi.org/project/microsoft-agents-hosting-aiohttp) | -| `microsoft-agents-authentication-msal` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-authentication-msal?label=pypi)](https://pypi.org/project/microsoft-agents-authentication-msal) | -| `Microsoft.Agents.Hosting.AspNetCore` | [![NuGet](https://img.shields.io/nuget/v/Microsoft.Agents.Hosting.AspNetCore?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.Hosting.AspNetCore) | -| `Microsoft.Agents.Authentication.Msal` | [![NuGet](https://img.shields.io/nuget/v/Microsoft.Agents.Authentication.Msal?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.Authentication.Msal) | -| `Microsoft.Agents.AI` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.AI?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.AI) | - -### Microsoft Agent 365 SDK Packages - -#### Python -| Package | Version | -|---------|---------| -| `microsoft-agents-a365-tooling` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-tooling?label=pypi)](https://pypi.org/project/microsoft-agents-a365-tooling) | -| `microsoft-agents-a365-tooling-extensions-openai` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-tooling-extensions-openai?label=pypi)](https://pypi.org/project/microsoft-agents-a365-tooling-extensions-openai) | -| `microsoft-agents-a365-observability-core` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-observability-core?label=pypi)](https://pypi.org/project/microsoft-agents-a365-observability-core) | -| `microsoft-agents-a365-observability-hosting` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-observability-hosting?label=pypi)](https://pypi.org/project/microsoft-agents-a365-observability-hosting) | -| `microsoft-agents-a365-notifications` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-notifications?label=pypi)](https://pypi.org/project/microsoft-agents-a365-notifications) | -| `microsoft-agents-a365-runtime` | [![PyPI](https://img.shields.io/pypi/v/microsoft-agents-a365-runtime?label=pypi)](https://pypi.org/project/microsoft-agents-a365-runtime) | - -#### Node.js -| Package | Version | -|---------|---------| -| `@microsoft/agents-a365-tooling` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-tooling?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-tooling) | -| `@microsoft/agents-a365-tooling-extensions-openai` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-tooling-extensions-openai?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-tooling-extensions-openai) | -| `@microsoft/agents-a365-tooling-extensions-langchain` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-tooling-extensions-langchain?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-tooling-extensions-langchain) | -| `@microsoft/agents-a365-observability` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-observability?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-observability) | -| `@microsoft/agents-a365-observability-hosting` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-observability-hosting?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-observability-hosting) | -| `@microsoft/agents-a365-notifications` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-notifications?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-notifications) | -| `@microsoft/agents-a365-runtime` | [![npm](https://img.shields.io/npm/v/@microsoft/agents-a365-runtime?label=npm)](https://www.npmjs.com/package/@microsoft/agents-a365-runtime) | - -#### .NET -| Package | Version | -|---------|---------| -| `Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.A365.Tooling.Extensions.SemanticKernel) | -| `Microsoft.Agents.A365.Tooling.Extensions.AgentFramework` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.A365.Tooling.Extensions.AgentFramework?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.A365.Tooling.Extensions.AgentFramework) | -| `Microsoft.Agents.A365.Observability.Extensions.AgentFramework` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.A365.Observability.Extensions.AgentFramework?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.A365.Observability.Extensions.AgentFramework) | -| `Microsoft.Agents.A365.Notifications` | [![NuGet](https://img.shields.io/nuget/vpre/Microsoft.Agents.A365.Notifications?label=nuget)](https://www.nuget.org/packages/Microsoft.Agents.A365.Notifications) | +The SDK versions used by each sample are displayed in the **E2E test workflow summaries**. Each E2E run installs the latest compatible packages and logs the resolved versions. + +📦 **View SDK Versions**: Click any E2E status badge above, then select a workflow run and view the **"Log SDK Versions"** step in the job summary. + +The samples use flexible version constraints (`>=`, `^`, `*-beta.*`) to automatically pick up the latest compatible SDK releases during each test run. > #### Note: > Use the information in this README to contribute to this open-source project. To learn about using this SDK in your projects, refer to the [Microsoft Agent 365 Developer documentation](https://learn.microsoft.com/en-us/microsoft-agent-365/developer/).