Skip to content

Update NuGet pins to latest stable: Microsoft.Agents.AI 1.17.0, ModelContextProtocol(.Core) 2.1.0; pin OpenAI 2.12.0 - #9

Merged
RorroRojas3 merged 8 commits into
mainfrom
claude/nuget-streaming-statuses-vrjvgi
Aug 6, 2026
Merged

Update NuGet pins to latest stable: Microsoft.Agents.AI 1.17.0, ModelContextProtocol(.Core) 2.1.0; pin OpenAI 2.12.0#9
RorroRojas3 merged 8 commits into
mainfrom
claude/nuget-streaming-statuses-vrjvgi

Conversation

@RorroRojas3

Copy link
Copy Markdown
Member

The OpenAI pin makes the previously transitive-only version explicit and is
required by the upcoming Responses API sample under central package management.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_0165XhSYHxBtRZy97c7KtxkR

claude added 6 commits August 6, 2026 01:43
…ContextProtocol(.Core) 2.1.0; pin OpenAI 2.12.0

The OpenAI pin makes the previously transitive-only version explicit and is
required by the upcoming Responses API sample under central package management.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0165XhSYHxBtRZy97c7KtxkR
…Reasoning

Breaking changes:
- Rename ChatProgressKind.Thinking to ChatProgressKind.Reasoning (value preserved).
- The middleware no longer emits RequestStarted/Thinking at request start or
  after tool round-trips; the first in-band event of a tool request is now
  ToolInvoking.

The Reasoning status is now truthful: it is emitted once per model turn when
TextReasoningContent is detected in the stream (OpenAI Responses API today;
any provider surfacing reasoning content works), re-armed after each tool
round-trip, and mirrored post-hoc for non-streaming responses. The event never
carries reasoning text.

Developers own request-level statuses outside the middleware via the new
ChatProgressUpdate.CreateRequestStarted/CreateReasoning factories (stamped
with the well-known ExternalScopeId) and ToResponseUpdate(), which wraps an
update in the same synthetic shape the middleware emits for UI consumption.

Also adds an optional skippable Responses API integration test gated on the
new AzureOpenAI:ResponsesDeployment setting.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0165XhSYHxBtRZy97c7KtxkR
…n the demo

The new samples/Andes.Extensions.AI.Demo.Responses console app drives the
tracked pipeline over the Azure OpenAI Responses API using stable packages
only: the plain OpenAIClient against the OpenAI-v1-compatible endpoint,
GetResponsesClient().AsIChatClient(deployment), and
ChatOptions.Reasoning = Summary so reasoning summaries stream back as
TextReasoningContent and light up the middleware's Reasoning status live.

The existing demo now prepends ChatProgressUpdate.CreateRequestStarted()
.ToResponseUpdate() to the stream its renderer consumes, demonstrating the
developer-owned request statuses that replaced the middleware's auto-emission.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0165XhSYHxBtRZy97c7KtxkR
The README gains NuGet version badges for all four packages, the NuGet
Publish workflow badge, license and target-framework badges, a Reasoning
feature bullet, an 'Emit your own statuses' quickstart section, and the
Responses sample. CLAUDE.md now describes the detection-driven status
behavior, the new sample projects, the optional ResponsesDeployment
integration setting, and the 0.5.0 lockstep version.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0165XhSYHxBtRZy97c7KtxkR
…ests, sample config guard

The status factories now stamp timestamps via TimeProvider.System for
symmetry with the tracker, the factory tests bound the timestamp with
InRange instead of a weak default check, and both samples' IsConfigured
now rejects the sample file's placeholder endpoint so a half-filled
config gets the friendly setup panel instead of a DNS failure.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0165XhSYHxBtRZy97c7KtxkR
Updates getting-started (kinds, transcripts, new 'Emit request-level
statuses yourself' section), architecture (detection design and the
non-streaming post-hoc note), the MCP/Agent transcripts, ui.md, and the
progress-board example for the detection-driven Reasoning status, and
adds releases/v0.5.0.md covering the breaking changes with migration
guidance, the additions, and the dependency updates.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0165XhSYHxBtRZy97c7KtxkR
Copilot AI lite review requested due to automatic review settings August 6, 2026 02:08
Comment thread samples/Andes.Extensions.AI.Demo.Responses/Program.cs Dismissed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates central NuGet pins and introduces the v0.5.0 behavior/model for progress reporting: request-level statuses are no longer auto-emitted, Thinking is renamed to a detection-driven Reasoning, and apps can prepend their own request-level statuses via new public factories and a ToResponseUpdate() helper. It also adds a new Responses API demo sample (using the pinned OpenAI SDK) plus corresponding docs and test coverage.

Changes:

  • Bump central package pins (Microsoft.Agents.AI 1.17.0, ModelContextProtocol(.Core) 2.1.0) and add an explicit OpenAI 2.12.0 pin/reference for Responses API usage.
  • Introduce reasoning detection + developer-owned request status factories (CreateRequestStarted / CreateReasoning) and ChatProgressUpdateExtensions.ToResponseUpdate(), and remove auto-emitted request-level statuses from the middleware.
  • Add a new Responses API sample and expand unit/integration/UI tests and docs to reflect the new progress/status model.

Reviewed changes

Copilot reviewed 45 out of 45 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
tests/Andes.Extensions.AI.Unit.Test/StripProgressContentTests.cs Updates expectations for renamed Reasoning progress kind.
tests/Andes.Extensions.AI.Unit.Test/StreamingProgressTests.cs Adjusts streaming progress assertions to reflect removal of auto request-level statuses.
tests/Andes.Extensions.AI.Unit.Test/ReasoningDetectionTests.cs New unit coverage for reasoning detection behavior and ordering.
tests/Andes.Extensions.AI.Unit.Test/NonStreamingTests.cs Updates observer-order assertions for non-streaming requests under the new status model.
tests/Andes.Extensions.AI.Unit.Test/ChatProgressUpdateFactoryTests.cs New unit tests for request-status factories and ToResponseUpdate() wrapping.
tests/Andes.Extensions.AI.UI.Unit.Test/ChatResponseUiExtensionsTests.cs Adds test proving developer-prepended RequestStarted drives UI status snapshots.
tests/Andes.Extensions.AI.UI.Unit.Test/AssistantStatusReducerTests.cs Updates sample status text from “Thinking…” to “Reasoning…”.
tests/Andes.Extensions.AI.Integration.Test/StreamingIntegrationTests.cs Updates integration expectations for absence of auto RequestStarted.
tests/Andes.Extensions.AI.Integration.Test/ResponsesStreamingIntegrationTests.cs New end-to-end integration test for Responses API reasoning detection + usage.
tests/Andes.Extensions.AI.Integration.Test/AzureOpenAIFixture.cs Adds optional ResponsesDeployment configuration gate and helper property.
tests/Andes.Extensions.AI.Integration.Test/appsettings.integration.sample.json Adds ResponsesDeployment sample setting.
tests/Andes.Extensions.AI.Integration.Test/Andes.Extensions.AI.Integration.Test.csproj Adds OpenAI reference and suppresses experimental warning for Responses API surface.
samples/Andes.Extensions.AI.Demo/README.md Documents developer-prepended request status due to middleware change.
samples/Andes.Extensions.AI.Demo/Program.cs Prepends CreateRequestStarted().ToResponseUpdate() outside recording loop.
samples/Andes.Extensions.AI.Demo/AzureOpenAISettings.cs Tightens “configured” check (rejects placeholder endpoint).
samples/Andes.Extensions.AI.Demo.Responses/StatusRenderer.cs New console renderer for status snapshots and final output.
samples/Andes.Extensions.AI.Demo.Responses/ResponsesDemoTools.cs New local tools demonstrating progress reporting during Responses tool loops.
samples/Andes.Extensions.AI.Demo.Responses/README.md New sample documentation for Responses API demo and reasoning detection.
samples/Andes.Extensions.AI.Demo.Responses/Program.cs New Responses API demo app wiring OpenAI Responses + tool tracking + UI snapshots.
samples/Andes.Extensions.AI.Demo.Responses/AzureOpenAISettings.cs New settings loader for the Responses sample.
samples/Andes.Extensions.AI.Demo.Responses/appsettings.sample.json Sample config for Responses demo (gitignored runtime config).
samples/Andes.Extensions.AI.Demo.Responses/Andes.Extensions.AI.Demo.Responses.csproj New sample project referencing core/UI and OpenAI SDK.
releases/v0.5.0.md New release notes documenting breaking changes, additions, and verification.
README.md Adds badges and documents reasoning detection + developer-owned request statuses + new sample.
docs/ui.md Updates core dependency floor and clarifies request-level status handling in the UI contract.
docs/mcp.md Updates core dependency floor and removes outdated request-start/thinking transcript lines.
docs/getting-started.md Updates progress-kind docs, adds “Emit request-level statuses yourself” section and examples.
docs/examples/progress-board.md Updates example narrative and kind handling for Reasoning + app-emitted RequestStarted.
docs/architecture.md Updates design description to “detected reasoning, never guessed” and non-streaming post-hoc note.
docs/agents.md Updates core dependency floor and removes outdated request-start/thinking transcript lines.
Directory.Packages.props Updates pins for Agents/MCP and adds explicit OpenAI 2.12.0 version.
Andes.Extensions.slnx Adds the new Responses demo project to the solution.
Andes.Extensions.AI/ToolTrackingChatClient.cs Removes auto request-level emissions; adds reasoning detection in streaming + post-hoc non-streaming.
Andes.Extensions.AI/Progress/ChatProgressUpdateExtensions.cs New helper to wrap progress updates into synthetic ChatResponseUpdate shape.
Andes.Extensions.AI/Progress/ChatProgressUpdate.cs Adds external scope constant and public factories for app-owned request statuses.
Andes.Extensions.AI/Progress/ChatProgressKind.cs Renames ThinkingReasoning and updates semantics/docs for request-level kinds.
Andes.Extensions.AI/Internal/RequestTracker.cs Implements per-turn reasoning-announcement gating and removes “advance emits thinking” behavior.
Andes.Extensions.AI/Andes.Extensions.AI.csproj Bumps package version to 0.5.0.
Andes.Extensions.AI.UI/typescript/andes-assistant-ui.ts Updates doc text to reference “Reasoning…” status.
Andes.Extensions.AI.UI/AssistantUiEventKind.cs Updates doc text to reference “Reasoning…”.
Andes.Extensions.AI.UI/AssistantStatusSnapshot.cs Updates doc text to reference “Reasoning…”.
Andes.Extensions.AI.UI/Andes.Extensions.AI.UI.csproj Bumps package version to 0.5.0.
Andes.Extensions.AI.Mcp/Andes.Extensions.AI.Mcp.csproj Bumps package version to 0.5.0.
Andes.Extensions.AI.Agent/Andes.Extensions.AI.Agent.csproj Bumps package version to 0.5.0.
.claude/CLAUDE.md Updates repo-specific guidance notes to reflect v0.5 request-status model.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread Directory.Packages.props
…ment

- Updated reasoning output settings to use Full verbosity in Azure OpenAI Responses API.
- Improved handling of reasoning status updates, ensuring accurate tracking of reasoning phases.
- Enhanced user interface to display reasoning text and duration in final output.
- Modified request status handling to use a custom message for better clarity.
- Updated README documentation to reflect changes in reasoning behavior and output.
- Added unit tests to verify reasoning text accumulation and status emission order.
- Refactored integration tests to ensure compliance with new reasoning handling logic.
Copilot AI review requested due to automatic review settings August 6, 2026 05:25
Comment thread tests/Andes.Extensions.AI.UI.Unit.Test/ChatResponseUiExtensionsTests.cs Dismissed
Comment thread tests/Andes.Extensions.AI.UI.Unit.Test/ChatResponseUiExtensionsTests.cs Dismissed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 51 out of 51 changed files in this pull request and generated no new comments.

Suppressed comments (3)

Andes.Extensions.AI/ToolTrackingChatClient.cs:31

  • The class XML doc now has two separate <remarks> blocks, and the second one is effectively being used to document the primary constructor. This is redundant/confusing in generated docs and may trip XML-doc analyzers; keep a single <remarks> section and document the primary-constructor parameters directly with <param> tags.
/// <remarks>
/// Initializes a new instance of the <see cref="ToolTrackingChatClient"/> class.
/// </remarks>
/// <param name="innerClient">The inner client to delegate to.</param>
/// <param name="options">The tracking options, or <see langword="null"/> to use defaults.</param>

Andes.Extensions.AI/Andes.Extensions.AI.csproj:8

  • The PR title/description indicates this is primarily a NuGet pin update, but this change also bumps the package version to 0.5.0 and introduces breaking API changes (e.g., progress kind renames), new samples, and extensive docs/tests updates. Please update the PR title/description to reflect the real scope or split the package-pin-only changes into a separate PR to make review/release notes traceability clearer.
    <PackageId>Andes.Extensions.AI</PackageId>
    <Version>0.5.0</Version>
    <Authors>Rodrigo Rojas</Authors>

samples/Andes.Extensions.AI.Demo/Program.cs:57

  • This demo now always sends ChatOptions.Reasoning with Effort = ExtraHigh and Output = Full, but the demo README prerequisites still describe only needing “a chat deployment”. That mismatch may confuse users and/or cause failures on deployments that don’t support these reasoning settings. Consider either updating the demo README to require a reasoning-capable deployment, or conditionally enabling these options only when configured.

Copilot AI review requested due to automatic review settings August 6, 2026 05:29
@RorroRojas3
RorroRojas3 merged commit 616fc51 into main Aug 6, 2026
7 checks passed
@RorroRojas3
RorroRojas3 deleted the claude/nuget-streaming-statuses-vrjvgi branch August 6, 2026 05:31

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 51 out of 51 changed files in this pull request and generated no new comments.

Suppressed comments (2)

Andes.Extensions.AI/ToolTrackingChatClient.cs:27

  • The type XML docs contain two separate blocks; the second one is only used to say "Initializes..." and then closes immediately. This produces redundant documentation markup and makes the generated XML harder to consume. Consider replacing the second wrapper with a simple (or removing it entirely).
/// <remarks>
/// Initializes a new instance of the <see cref="ToolTrackingChatClient"/> class.
/// </remarks>

releases/v0.5.0.md:11

  • The PR title/description focus on NuGet pin updates, but this change set also introduces a new 0.5.0 release with breaking API/behavior changes (e.g., request-level status semantics, new Reasoning/ReasoningCompleted kinds) and adds a new sample + tests. To avoid surprise for reviewers and consumers, the PR metadata should be updated to reflect that broader scope.
The middleware stops guessing: the auto-emitted "Starting request"/"Thinking..." statuses are gone, replaced by a **detection-driven `Reasoning`/`ReasoningCompleted` status pair** that fires only when the model actually streams reasoning content — opened the moment reasoning is detected, closed (with the elapsed reasoning time) the moment the answer or the next tool call starts — plus a **public `Custom` status factory** so applications emit their own request-level statuses — in the exact synthetic shape the middleware uses. The UI package gains a **reasoning-text surface** (`ReasoningDelta` events folding into `AssistantStatusSnapshot.ReasoningText`), and a new sample runs the whole pipeline over the Azure OpenAI Responses API with stable packages only.

## Breaking changes

- **`ChatProgressKind.Thinking` is renamed to `ChatProgressKind.Reasoning`** (`Andes.Extensions.AI/Progress/ChatProgressKind.cs`; the underlying value `1` is preserved). Consumers switching on the enum rename `Thinking` → `Reasoning`; persisted numeric values are unaffected.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants