-
Notifications
You must be signed in to change notification settings - Fork 2.3k
Comparing changes
Open a pull request
base repository: microsoft/agent-framework
base: python-1.12.0
head repository: microsoft/agent-framework
compare: python-1.12.1
- 14 commits
- 128 files changed
- 13 contributors
Commits on Jul 22, 2026
-
Configuration menu - View commit details
-
Copy full SHA for d1d2610 - Browse repository at this point
Copy the full SHA d1d2610View commit details -
Harden workflow credential selection (#7249)
* Harden workflow credential selection Co-authored-by: Copilot <[email protected]> Copilot-Session: d9fa4e9c-c32d-42fb-8ee4-4772473e6479 * Address workflow authentication review feedback Co-authored-by: Copilot <[email protected]> Copilot-Session: d9fa4e9c-c32d-42fb-8ee4-4772473e6479 * Fail safely on membership lookup errors Co-authored-by: Copilot <[email protected]> Copilot-Session: d9fa4e9c-c32d-42fb-8ee4-4772473e6479 --------- Co-authored-by: Copilot <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for d97c901 - Browse repository at this point
Copy the full SHA d97c901View commit details -
Python: preserve Gemini 3 thought_signature across function-call repl…
…ays (#7095) * Python: preserve Gemini 3 thought_signature across function-call replays Gemini 3 requires the opaque thought_signature attached to each functionCall part to be echoed back on every replay of that call, or the request is rejected with 400 INVALID_ARGUMENT. The signature previously survived only via raw_representation, so any layer that reconstructs a FunctionCallContent (e.g. harness tool approval) dropped it and broke the next step of the tool loop. Capture the signature into additional_properties on parse and replay it when building the Gemini Part, independent of raw_representation. Co-authored-by: Copilot <[email protected]> Copilot-Session: 33233834-bc6e-4ad2-a6f3-6f1d6e57b1d2 * Store Gemini thought_signature as base64 for JSON-safe persistence Content.additional_properties is serialized via json.dumps(message.to_dict()) by history providers (e.g. RedisHistoryProvider), which fails on raw bytes. Store the thought_signature as a base64 string on parse and decode it back to bytes when building the Gemini Part. Also narrow call_id/name in the round-trip test to satisfy the type checkers. Co-authored-by: Copilot <[email protected]> Copilot-Session: 33233834-bc6e-4ad2-a6f3-6f1d6e57b1d2 * Harden Gemini thought_signature decode against corrupted history Guard the untyped additional_properties value with an isinstance(str) check and decode with validate=True, degrading gracefully (warn + drop the signature) on malformed data instead of raising binascii.Error mid tool loop. Matches the defensive base64 handling already used for data URIs in this file. Co-authored-by: Copilot <[email protected]> Copilot-Session: 33233834-bc6e-4ad2-a6f3-6f1d6e57b1d2 * Carry Gemini thought_signature on reasoning content via protected_data Represent the signature as a text_reasoning content's protected_data (base64) immediately preceding the function call, instead of a bespoke additional_properties key. This uses the framework's first-class opaque-signature field (as Anthropic does), survives streaming accumulation, and stays intact when the harness reconstructs the function call. Replay correlates the signature by adjacency. Co-authored-by: Copilot <[email protected]> Copilot-Session: 33233834-bc6e-4ad2-a6f3-6f1d6e57b1d2 --------- Co-authored-by: Copilot <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 83ba938 - Browse repository at this point
Copy the full SHA 83ba938View commit details -
.NET: [BREAKING] Hosting OpenAI Responses protocol helpers and option…
…al execution state (#7000) * .NET: Add OpenAI Responses protocol helpers and optional execution state (ADR-0032) * Fix netstandard2.0/net472 build; harden helpers and workflow checkpoint key per review * .NET: Migrate hosting Responses samples to Azure.AI.Projects and fix workflow resume Migrate HostingResponsesAgent and HostingResponsesWorkflow samples from Azure.AI.OpenAI to Azure.AI.Projects (AIProjectClient.AsAIAgent), using the FOUNDRY_PROJECT_ENDPOINT/FOUNDRY_MODEL convention. Fix HostedWorkflowState.RunOrResumeAsync: on subsequent turns, restore the session's latest checkpoint and run the workflow forward with the new turn's input (mirroring the Python hosting host's restore-then-run semantics) instead of resuming a halted run with no input, which waited on input indefinitely. Add round-trip resume tests and update ADR-0032/spec-003 wording. * .NET: Fix HostedWorkflowState resume hang on unserviced external requests On resume, HostedWorkflowState.RunOrResumeAsync drained the workflow with the blocking WatchStreamAsync overload, so a workflow that halts at an unserviced RequestInfoEvent (human-in-the-loop / approval) blocked forever — asymmetric with the first-turn RunAsync path, which returns at the same halt. Break the drain when a superstep completes with HasPendingRequests, restoring symmetry with turn 1. Add a HITL approval-gate workflow and a resume-does-not-block test. * .NET: Warn when a HostedWorkflowState resume makes no progress Add an optional ILoggerFactory to HostedWorkflowState and log a warning when a resumed turn produces no events, mirroring the Python host's zero-event restore warning (a stale checkpoint or an input that does not match the workflow's expected type leaves session state unprogressed). Add a non-chat string workflow helper, a capturing logger, and a red/green test. * .NET: Resume HostedWorkflowState from durable checkpoint on cursor miss Add CheckpointManager.GetLatestCheckpointAsync(sessionId) and have HostedWorkflowState fall back to it when its in-memory head cursor misses, so a durable CheckpointManager resumes a session across a process restart or a new holder instead of restarting from the workflow's start executor. Mirrors the Python host's per-turn get_latest read-through. Add a counting workflow that proves resume-vs-fresh via accumulated state, plus a red/green test, and update ADR-0032/spec-003 and the XML remarks. * .NET: Serialize HostedWorkflowState turns through a workflow lock A single workflow instance backs the holder and workflow instances do not support concurrent runs (the runner throws "already owned by another runner"), so concurrent turns could fault or race the head cursor. Serialize all turns through one SemaphoreSlim (mirroring the Python host's workflow lock) and make HostedWorkflowState IDisposable to own it. Add a gated workflow and a deterministic concurrency red/green test. * .NET: Cover non-chat resume and multi-turn checkpoint advance Add tests for HostedWorkflowState resuming a non-chat-protocol workflow (no TurnToken) and for a third turn continuing to advance the head checkpoint, closing the coverage gaps the parity review flagged. * .NET: Add streaming workflow resume path and stream the workflow sample Add HostedWorkflowState.RunOrResumeStreamingAsync, which yields the turn's WorkflowEvents as they occur (fresh run or checkpoint resume) under the same serialization lock and records the head checkpoint after the stream drains, keeping the blocking and streaming workflow paths in lockstep with the Python host. Honor stream:true in the HostingResponsesWorkflow sample by projecting AgentResponseUpdateEvent updates over the Responses SSE wire. Add a streaming resume test and update the README/spec. * .NET: Cover Responses input adaptation to a typed workflow start executor Demonstrate that HostedWorkflowState's generic RunOrResumeAsync<TInput> is the input-adaptation seam (parity with Python's ResponsesChannel run hook): the app adapts the Responses input into the workflow start executor's own type at the call site. Add a typed-brief workflow and a test, and note the seam in spec-003. * .NET: Drain workflow resume non-blocking to prevent hang and truncation The resume drain used a SuperStepCompletedEvent{HasPendingRequests} proxy over the blocking public WatchStreamAsync. That proxy (a) truncated a resumed turn when a superstep both emitted a request and queued downstream work, and (b) could fail to fire at all — re-introducing the indefinite hang — when a resume input drove no superstep (e.g. a rejected non-chat input). Make StreamingRun.WatchStreamAsync(bool blockOnPendingRequest, CancellationToken) public and drain both the blocking and streaming resume paths with blockOnPendingRequest:false, exactly matching the first-turn RunAsync semantics (Run.RunToNextHaltAsync). Add guard tests: resume with a rejected input does not hang, and a resume superstep with a request plus downstream work is not truncated (verified red against the old proxy). * .NET: Return file-store checkpoint index in commit order CheckpointManager.GetLatestCheckpointAsync takes the last entry of a store's index as the head checkpoint. FileSystemJsonCheckpointStore backed its index with a HashSet, whose enumeration order is not contractual: after a rollback frees and reuses a slot, enumeration can diverge from commit order, so the durable read-through could resume a stale checkpoint. Mirror the HashSet with an insertion-ordered list and enumerate it from RetrieveIndexAsync so 'latest' is reliable. Add a CheckpointManager.GetLatestCheckpointAsync contract test over the file store. Note: the HashSet disorder is only reachable via the internal rollback path, so the test locks the ordering contract rather than reproducing the rare disorder. * .NET: Advance cursor when a streaming resume is abandoned RunOrResumeStreamingAsync recorded the head checkpoint only after the stream was fully enumerated. If an SSE consumer disconnected mid-turn after supersteps had committed, the in-memory cursor kept the previous turn's head; because the next turn is then a cursor hit, durable read-through could not self-heal, so it resumed pre-disconnect state. Record the run's last committed checkpoint in a finally so an abandoned stream still advances the cursor. Add a red/green test. * .NET: Stream only the final agent's updates in the workflow sample ExtractUpdates streamed every agent's updates, so the sequential Writer->Reviewer sample streamed the intermediate draft and the final answer over SSE, differing from the non-streaming response (final message only). Filter the streamed updates to the final agent so streaming and non-streaming produce the same response. Live-verified against Foundry: one output item streamed instead of two. * .NET: Isolate the holder lock in the concurrency test The concurrency test asserted the second same-session turn did not enter the workflow, which also passes via the engine's concurrent-run ownership guard (which faults) rather than the holder lock (which waits). Assert instead that the second turn is not completed while the first holds the lock: a fault would complete the task, so a pending task isolates the holder lock from the engine guard. Verified red with the lock removed. * Fix IDE1006 naming in tests; address review feedback and add hosting/live tests * Document commit-order contract for ICheckpointStore.RetrieveIndexAsync * Restructure hosting samples under af-hosting with client/server split matching Python parity * Clarify hosting sample README wording and drop Python comparisons * Make AgentSessionStore.DeleteSessionAsync abstract and rename session id parameter to sessionStoreId * Rename OpenAIResponses id helpers and parse the request once for id extraction * Reclaim per-session locks in HostedAgentState and demonstrate session locking in the agent sample * Internalize per-session locking in HostedAgentState (automatic, on by default) and remove mirroring-Python wording from code and spec * Remove HostedAgentState; app-owned routes use AgentSessionStore directly HostedAgentState only bundled an AIAgent with an AgentSessionStore and, after the per-session lock was removed, its GetOrCreateSessionAsync/SaveSessionAsync/ DeleteSessionAsync were pass-throughs that just bound the agent argument. Create-on-miss already lives in the store (unlike Python, whose get/set-only SessionStore justifies its AgentState holder), so the type earned its place only via the lock. Each AgentSessionStore.GetSessionAsync now returns an independent session instance per call, so concurrent gets fork the same stored state (e.g. branching from previous_response_id or managing several conversation ids) without sharing an instance. The store does no cross-call locking; serializing concurrent runs against the same id is the application's concern. - Delete HostedAgentState and its unit tests. - Rewire the local_responses sample and the OpenAI hosting unit/integration tests to call AgentSessionStore (GetSessionAsync/SaveSessionAsync) directly. - Update ADR-0032, spec-003, and the af-hosting sample READMEs. * Isolate hosted session snapshots and distinguish conversation vs response continuation Mirrors the Python hosted-session isolation work: a hosted session read must be an independent copy, and the app-owned route must persist under the right continuation key depending on how the caller continued the thread. - AgentSessionStore.GetSessionAsync: document the isolation invariant (each call returns an independent AgentSession so concurrent branches from one previous_response_id do not observe each other's mutations or alter stored state); fix the stale "or null if not found" wording (in-box stores return a fresh created session on miss). The in-box stores already satisfy this via a serialize/deserialize snapshot round-trip. - local_responses sample + hosting unit-test route: choose the save key by channel. A stable conversation id is a mutable head (write back under the same id; app owns single-writer coordination). A previous_response_id continuation or first turn is an immutable snapshot (save under the new response id so branches from the same prior response stay independent). - Add regression tests: independent get returns a distinct instance (InMemoryAgentSessionStore); previous_response_id supports independent branches ([1,2,2,3,3]); conversation id advances the mutable head ([1,2]). - Update the sample README and ADR-0032 wording. * Add workflow-factory support to HostedWorkflowState for concurrent sessions HostedWorkflowState backed every session with one shared Workflow instance and serialized all turns through a lock, so independent sessions could not run concurrently. Add a workflow-factory constructor and remove the run lock. - New constructor HostedWorkflowState(Func<CancellationToken, ValueTask<Workflow>> workflowFactory, ..., bool cacheWorkflow = false): - cacheWorkflow: false (default) builds a fresh instance per run, so independent sessions run in parallel. A resume rehydrates a fresh instance from the session's checkpoint in the shared store. - cacheWorkflow: true builds the workflow once, lazily on first use, and reuses it (a deferred, cached target that, like a shared instance, cannot run concurrent turns). - Remove the internal SemaphoreSlim run lock and IDisposable; the instance constructor is unchanged in behaviour (one shared instance still cannot run concurrent turns). Turns are no longer serialized by the holder; a single writer per session is the application's responsibility. - Switch the local_responses_workflow sample to the factory constructor with an explicit cacheWorkflow: false, and document the option. - Add tests: parallel independent sessions (factory), fresh-instance resume, cached factory builds once and reuses, uncached factory builds per run. - Update ADR-0032, spec-003, and the sample README. * Clarify in ADR-0032 how .NET covers AgentState factory and async-setup via DI * Rebuild cached workflow after a faulted build and add checkpoint index dedup tests
Configuration menu - View commit details
-
Copy full SHA for 1f1da1b - Browse repository at this point
Copy the full SHA 1f1da1bView commit details -
.NET: Fix declarative autosend output (#7217)
* Fix declarative workflow auto-send output Restore completed responses for workflow-conversation agents while preventing hosted workflow adapters from materializing streamed responses twice. Co-authored-by: Copilot <[email protected]> Copilot-Session: c2d86826-ead0-40bc-b84b-a513ac4d325f * Correlate streamed workflow responses by message Co-authored-by: Copilot <[email protected]> Copilot-Session: c2d86826-ead0-40bc-b84b-a513ac4d325f * Handle empty streaming message IDs Co-authored-by: Copilot <[email protected]> Copilot-Session: c2d86826-ead0-40bc-b84b-a513ac4d325f * Restore workflow conversation auto-send Co-authored-by: Copilot <[email protected]> Copilot-Session: c2d86826-ead0-40bc-b84b-a513ac4d325f * Address workflow response review feedback Co-authored-by: Copilot <[email protected]> Copilot-Session: c2d86826-ead0-40bc-b84b-a513ac4d325f * Ignore whitespace workflow message IDs Co-authored-by: Copilot <[email protected]> Copilot-Session: c2d86826-ead0-40bc-b84b-a513ac4d325f * Correlate all content-bearing agent updates Co-authored-by: Copilot <[email protected]> Copilot-Session: c2d86826-ead0-40bc-b84b-a513ac4d325f --------- Co-authored-by: Ben Thomas <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for bfc73a5 - Browse repository at this point
Copy the full SHA bfc73a5View commit details -
Updating dotnet version for release. (#7265)
Co-authored-by: Ben Thomas <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for 12b2325 - Browse repository at this point
Copy the full SHA 12b2325View commit details -
.NET: Added GettingStarted example demonstrating Dapr as an agent pro…
…vider (#1615) * Added example demonstrating creating an AIAgent using the Microsoft.AI.Extensions implementation of IChatClient using Dapr as the inference backend provider - in this example, using Ollama Signed-off-by: Whit Waldo <[email protected]> * Update dotnet/samples/GettingStarted/AgentProviders/Agent_With_Dapr/README.md Co-authored-by: Copilot <[email protected]> * Added copyright statement at top of file Signed-off-by: Whit Waldo <[email protected]> * Update dotnet/agent-framework-dotnet.slnx That's odd the IDE added it a second time. Co-authored-by: westey <[email protected]> * Address review nits: configurable Dapr gRPC endpoint and document VersionOverride Make the Dapr sidecar gRPC endpoint configurable via the DAPR_GRPC_ENDPOINT environment variable (defaulting to http://localhost:3501) and document it in the README. Add a comment explaining why the Microsoft.Extensions.* VersionOverride entries are needed and when they can be removed. --------- Signed-off-by: Whit Waldo <[email protected]> Co-authored-by: Copilot <[email protected]> Co-authored-by: westey <[email protected]> Co-authored-by: Roger Barreto <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for ddb0622 - Browse repository at this point
Copy the full SHA ddb0622View commit details -
Python: Support prompt cache breakpoints for GPT-5.6 models in OpenAI…
… clients (#7163) * Python: Support prompt cache breakpoints for GPT-5.6 models in OpenAI clients Add request-level prompt_cache_options to OpenAIChatOptions and OpenAIChatCompletionOptions, and forward a per-part prompt_cache_breakpoint from Content.additional_properties onto the content blocks each API supports. Text parts that carry a breakpoint keep typed list content, since the plain-string form cannot hold one; without a breakpoint the existing string forms are unchanged. * Clarify system-message content-shape comment * Address review: SDK prompt cache types, private helper, add sample Replace the custom PromptCacheOptions TypedDict with the openai SDK's own types for each API, which raises the openai floor to 2.45.0 where those types were introduced. Make the breakpoint helper private to the two chat clients. Add a prompt caching sample with a README entry, and unquote the helper's Content annotation so the pyupgrade hook passes. * Guard the prompt cache options import for older openai versions The SDK's PromptCacheOptions types only exist in openai 2.45.0 and later, so each client falls back to a local mirror when the import fails and the dependency floor stays at 2.25.0. A TYPE_CHECKING-only import is not enough because the options classes are introspected with get_type_hints() at runtime. Verified against openai 2.25.0: the package imports, the fallback resolves, and part-level breakpoints still work; sending the option itself requires 2.45.0, which the field docstrings now note. * Make the old-openai fallback for PromptCacheOptions deliberately empty Assigning None instead, as suggested in review, trips pyright's reportInvalidTypeForm on the field annotation (the symbol becomes type | None after the try/except). An empty TypedDict gives the same effect for users on older openai versions: any content they put in prompt_cache_options is flagged by their type checker, since the option cannot be sent on those versions anyway, while get_type_hints() on the options classes keeps working at runtime. * Guard prompt_cache_options at runtime instead of via an empty fallback type The empty-TypedDict fallback flagged valid `prompt_cache_options` usage under pyright on every openai version — including this PR's own `client_prompt_caching.py` sample (`poe check -S`) — because pyright resolves the try/except symbol to the fallback shape regardless of the installed openai, while mypy/ty resolve the failed import to `Any` and never warn. So a type-only "warn on old openai" signal is not achievable cleanly across type checkers. Restore the faithful fallback (mirrors the SDK's `mode`/`ttl` shape) so the option type-checks identically on every supported openai version, and add a runtime guard: setting `prompt_cache_options` on openai < 2.45 now raises a clear ChatClientInvalidRequestException instead of forwarding an unusable option to the SDK. This keeps the option non-silent for all users regardless of type checker, without forcing an openai upgrade. Adds tests covering the guard for both clients. * Gate system/developer breakpoint shape on a real mapping value The system/developer branch switched to list-form content whenever prompt_cache_breakpoint was set to any non-None value, but the option is only attached when the value is a mapping. A malformed value (e.g. a string) therefore changed the message shape without adding a breakpoint. Decide the shape from the built part instead, matching the user-role path.
Configuration menu - View commit details
-
Copy full SHA for 6180272 - Browse repository at this point
Copy the full SHA 6180272View commit details -
.NET: Fix expensive logging (#7268)
* .NET: Guard workflow warning logging Avoid unnecessary structured logging argument evaluation when warning logging is disabled, resolving CA1873 in release builds. Co-authored-by: Copilot <[email protected]> Copilot-Session: 0bc01e26-22ba-42ce-ac1e-6fe166500f4f * .NET: Use generated workflow logging Align the no-progress warning with the repository-standard LoggerMessage source generator pattern. Co-authored-by: Copilot <[email protected]> Copilot-Session: 0bc01e26-22ba-42ce-ac1e-6fe166500f4f * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <[email protected]> --------- Co-authored-by: Ben Thomas <[email protected]> Co-authored-by: Copilot Autofix powered by AI <[email protected]> Copilot-Session: 0bc01e26-22ba-42ce-ac1e-6fe166500f4f
Configuration menu - View commit details
-
Copy full SHA for c68c099 - Browse repository at this point
Copy the full SHA c68c099View commit details -
Python: Fix stateless replay of reasoning-paired tool calls (#7233)
* Python: Fix reasoning-paired client tool replay * Python: Handle middleware-terminated reasoning tool loops * Python: Replay encrypted reasoning function groups Key decisions: - Request encrypted reasoning on client-managed Responses calls while preserving caller include values. - Store encrypted payloads in Content.protected_data and reconstruct one provider reasoning item per reasoning id. - Replay active and completed function call/result groups; retain continuation-owned history behavior and the existing orphan-safe MCP path. Files changed: - python/packages/openai/agent_framework_openai/_chat_client.py - python/packages/openai/tests/openai/test_openai_chat_client.py Next iteration: - Extend encrypted reasoning preservation to streaming and framework serialization boundaries. Co-authored-by: Copilot <[email protected]> * Python: Preserve encrypted reasoning through streaming Key decisions: - Capture encrypted reasoning from terminal streamed output items in Content.protected_data. - Preserve summary and private reasoning as distinct framework contents while reconstructing one provider reasoning item per id. - Prove replay after Message JSON and workflow checkpoint round trips, including encrypted-only and completed function groups. Files changed: - python/packages/core/agent_framework/_types.py - python/packages/openai/agent_framework_openai/_chat_client.py - python/packages/openai/tests/openai/test_openai_chat_client.py Next iteration: - Extend lossless stateless reasoning replay to hosted MCP call/output groups. Co-authored-by: Copilot <[email protected]> * Python: Replay hosted MCP reasoning groups Key decisions: - Preserve hosted MCP call/output groups in client-managed history instead of deleting them when reasoning cannot be reconstructed. - Keep call/result coalescing and orphan-result exclusion intact, while retaining continuation-owned duplicate avoidance. - Cover completed, active, and multi-call reasoning groups plus the public outgoing request boundary. Files changed: - python/packages/openai/agent_framework_openai/_chat_client.py - python/packages/openai/tests/openai/test_openai_chat_client.py Next iteration: - Preserve middleware-terminated and parallel function groups atomically. - Add preflight rejection for non-replayable reasoning groups in the dedicated validation slice. Co-authored-by: Copilot <[email protected]> * Python: Preserve terminated parallel reasoning groups Key decisions: - Return ordinary function results when middleware terminates a loop, removing the provider-specific durable marker. - Preserve every parallel call and available sibling result as one encrypted reasoning group in stateless replay. - Prove successful and policy-blocked batches through the public two-agent Foundry workflow and outgoing HTTP boundary. Files changed: - python/packages/core/agent_framework/_tools.py - python/packages/core/tests/core/test_function_invocation_logic.py - python/packages/openai/tests/openai/test_openai_chat_client.py - python/packages/foundry/tests/foundry/test_foundry_agent.py Next iteration: - Add preflight rejection for non-replayable and partially compacted reasoning groups. Co-authored-by: Copilot <[email protected]> * Python: Reject unsafe stateless reasoning replay Key decisions: - Validate client-managed reasoning groups after compaction and report every affected reasoning and call identifier before transport. - Permit service-owned continuation and fully excluded atomic groups while rejecting partial compaction projections. - Surface encrypted-reasoning capability failures without lossy retries. Files changed: - python/packages/openai/agent_framework_openai/_chat_client.py - python/packages/openai/tests/openai/test_openai_chat_client.py Next iteration: - Run the resource-specific Foundry proof and finish PR #7233; that live proof remains intentionally local and requires the configured developer resource. Co-authored-by: Copilot <[email protected]> * Python: Preserve reasoning metadata in Foundry hosting * Python: Avoid duplicating reasoning text metadata * Python: Gate encrypted reasoning for Foundry agents * Python: Type stateless reasoning integration test * Python: Narrow Foundry mock call arguments --------- Co-authored-by: Copilot <[email protected]>
Configuration menu - View commit details
-
Copy full SHA for a2927c1 - Browse repository at this point
Copy the full SHA a2927c1View commit details -
Reduce workflow credential exposure (#7270)
* Mask workflow authentication configuration Co-authored-by: Copilot <[email protected]> Copilot-Session: d9fa4e9c-c32d-42fb-8ee4-4772473e6479 * Use run-scoped Copilot authentication Co-authored-by: Copilot <[email protected]> Copilot-Session: d9fa4e9c-c32d-42fb-8ee4-4772473e6479 --------- Co-authored-by: Copilot <[email protected]> Copilot-Session: d9fa4e9c-c32d-42fb-8ee4-4772473e6479
Configuration menu - View commit details
-
Copy full SHA for 2d34dee - Browse repository at this point
Copy the full SHA 2d34deeView commit details
Commits on Jul 23, 2026
-
Python: Enforce package coverage by lifecycle (#7261)
* Enforce Python coverage by package lifecycle Co-authored-by: Copilot <[email protected]> Copilot-Session: 9ae5ad8e-6b66-41b3-a862-4e2a3fae1cd0 * Fix Python CI and deprecation usage Co-authored-by: Copilot <[email protected]> Copilot-Session: 9ae5ad8e-6b66-41b3-a862-4e2a3fae1cd0 * Make POSIX kill-tree test portable Co-authored-by: Copilot <[email protected]> Copilot-Session: 9ae5ad8e-6b66-41b3-a862-4e2a3fae1cd0 --------- Co-authored-by: Copilot <[email protected]> Copilot-Session: 9ae5ad8e-6b66-41b3-a862-4e2a3fae1cd0
Configuration menu - View commit details
-
Copy full SHA for 5147579 - Browse repository at this point
Copy the full SHA 5147579View commit details -
Restore dedicated DevFlow Copilot authentication (#7276)
Co-authored-by: Copilot <[email protected]> Copilot-Session: d9fa4e9c-c32d-42fb-8ee4-4772473e6479
Configuration menu - View commit details
-
Copy full SHA for bd17a64 - Browse repository at this point
Copy the full SHA bd17a64View commit details -
Bump Python package versions for 1.12.1 release (#7273)
Bump root and core to 1.12.1, OpenAI to 1.11.0 for new public prompt-cache options, Foundry to 1.10.3, and Gemini and Foundry Hosting to beta 260722 based on CHANGELOG entries. Promote AG-UI from 1.0.0rc9 to stable 1.0.0. No beta cohort bump was applied, and core floors remain unchanged under the strict affected-dependency policy because the connectors do not require a new core API.
Configuration menu - View commit details
-
Copy full SHA for 711d6f2 - Browse repository at this point
Copy the full SHA 711d6f2View commit details
This comparison is taking too long to generate.
Unfortunately it looks like we can’t render this comparison for you right now. It might be too big, or there might be something weird with your repository.
You can try running this command locally to see the comparison on your machine:
git diff python-1.12.0...python-1.12.1