From fcc9a6391ded6a4fcf351fd6c9965797691a8358 Mon Sep 17 00:00:00 2001 From: Rick Brighenti <202984599+rbrighenti@users.noreply.github.com> Date: Tue, 20 Oct 2026 15:32:16 +0100 Subject: [PATCH] docs: prepare package CHANGELOGs for 2.0.0 release - Rename [Unreleased] to [2.0.0] - 2026-10-20 and capture notable changes since v1.0.0 (Breaking/Added/Changed/Fixed/Security) per package. - Merge duplicate Breaking Changes sections in observability-core. - Relabel entries that shipped in 1.0.0 (previously still under [Unreleased], or under the never-published [0.3.0]) as [1.0.0] - 2026-05-01. - Add minimal CHANGELOGs for notifications and tooling extensions. - Move orphaned Added bullets in tooling CHANGELOG under Added. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> --- .../CHANGELOG.md | 25 +++++ .../CHANGELOG.md | 99 ++++++++++++------- .../CHANGELOG.md | 15 ++- .../CHANGELOG.md | 20 +++- .../CHANGELOG.md | 9 +- .../CHANGELOG.md | 14 ++- .../CHANGELOG.md | 2 +- .../CHANGELOG.md | 10 ++ .../CHANGELOG.md | 11 +++ .../CHANGELOG.md | 10 ++ .../CHANGELOG.md | 10 ++ .../CHANGELOG.md | 17 ++-- 12 files changed, 196 insertions(+), 46 deletions(-) create mode 100644 libraries/microsoft-agents-a365-notifications/CHANGELOG.md create mode 100644 libraries/microsoft-agents-a365-tooling-extensions-agentframework/CHANGELOG.md create mode 100644 libraries/microsoft-agents-a365-tooling-extensions-googleadk/CHANGELOG.md create mode 100644 libraries/microsoft-agents-a365-tooling-extensions-openai/CHANGELOG.md create mode 100644 libraries/microsoft-agents-a365-tooling-extensions-semantickernel/CHANGELOG.md diff --git a/libraries/microsoft-agents-a365-notifications/CHANGELOG.md b/libraries/microsoft-agents-a365-notifications/CHANGELOG.md new file mode 100644 index 00000000..8ecb56c9 --- /dev/null +++ b/libraries/microsoft-agents-a365-notifications/CHANGELOG.md @@ -0,0 +1,25 @@ +# Changelog — microsoft-agents-a365-notifications + +All notable changes to this package will be documented in this file. + +## [2.0.0] - 2026-10-20 + +### Breaking Changes + +- **`AgentLifecycleEvent.USERDELETED` value changed** — it is now + `"agenticuserdeleted"` (previously `"agenticuseridentitydeleted"`), so + `on_user_deleted()` handlers match the new event name. Update any code that + compares against the raw string value. + +### Added + +- New lifecycle events and handler decorators on `AgentNotification`: + - `USERUNDELETED` — `on_user_undeleted()` + - `USERUPDATED` — `on_user_updated()` + - `USERMANAGERUPDATED` — `on_user_manager_updated()` + - `USERENABLED` — `on_user_enabled()` + - `USERDISABLED` — `on_user_disabled()` + +### Security + +- Raised the minimum `PyJWT` version to `>= 2.14.0`. diff --git a/libraries/microsoft-agents-a365-observability-core/CHANGELOG.md b/libraries/microsoft-agents-a365-observability-core/CHANGELOG.md index af793b31..5a42b60a 100644 --- a/libraries/microsoft-agents-a365-observability-core/CHANGELOG.md +++ b/libraries/microsoft-agents-a365-observability-core/CHANGELOG.md @@ -2,38 +2,10 @@ All notable changes to this package will be documented in this file. -## [Unreleased] - -### Fixed - -- **Agent 365 exporter's `GEN_AI_OPERATION_NAMES` allowlist now recognizes the - canonical lowercase operation names** (`chat`, `text_completion`, - `generate_content`) in addition to the existing aliases, since spans can now - legitimately report these values. -- **`AgentDetails.agent_type` and `InferenceCallDetails.responseModel`/cache - fields are appended at the end of their dataclasses** instead of being - inserted in the middle, preserving positional-argument compatibility for - existing callers. -- **Whitespace-only `model`/`responseModel` values are now normalized to - `None`** in `InferenceCallDetails.__post_init__`, preventing blank span - names/`gen_ai.request.model` attributes when a non-blank `responseModel` is - also supplied. -- **`AgentDetails.agent_type` now accepts `AgentType` enum members** — the - enum's `.value` is emitted on the span/baggage instead of the enum object, - which OpenTelemetry would otherwise silently drop. +## [2.0.0] - 2026-10-20 ### Breaking Changes -- **Manual inference operation names and span-name prefixes now use canonical - OpenTelemetry values** — `Chat`, `TextCompletion`, and `GenerateContent` - become `chat`, `text_completion`, and `generate_content`, respectively. - For example, `Chat gpt-4` becomes `chat gpt-4`. Text-completion and - generate-content spans that were previously filtered out are now exported - to Agent 365. -- **`InferenceCallDetails` now validates model identity during construction** — - If both `model` and `responseModel` are missing, empty, or whitespace-only, - construction raises `ValueError`. Previously these values were accepted - without validation. This happens before an `InferenceScope` is created. - **OBS exports always use `/observabilityService`** — The `use_s2s_endpoint` option is deprecated and ignored, even when `False`. Exports no longer select or fall back to `/observability`. Provide an app-only OBS token independently @@ -45,14 +17,62 @@ All notable changes to this package will be documented in this file. failures fail export without an HTTP request or delegated fallback. The exporter invokes the resolver on every export batch/identity group, so resolvers must cache the acquired token and refresh only near expiry. +- **Manual inference operation names and span-name prefixes now use canonical + OpenTelemetry values** — `Chat`, `TextCompletion`, and `GenerateContent` + become `chat`, `text_completion`, and `generate_content`, respectively. + For example, `Chat gpt-4` becomes `chat gpt-4`. The Agent 365 exporter + recognizes the canonical names (the legacy `Chat` value is still accepted), + so text-completion and generate-content spans that were previously filtered + out are now exported to Agent 365. +- **`InferenceCallDetails` now validates model identity during construction** — + `model` and `responseModel` are stripped and whitespace-only values are + treated as `None`. If both are missing, empty, or whitespace-only, + construction raises `ValueError`. Previously these values were accepted + without validation. This happens before an `InferenceScope` is created. +- **Message payloads serialize as a plain JSON array** — `gen_ai.input.messages` + and `gen_ai.output.messages` are now serialized per the OpenTelemetry GenAI + semantic conventions as `[{"role": ..., "parts": [...]}]` instead of the + `{"version": "0.1.0", "messages": [...]}` wrapper. The + `A365_MESSAGE_SCHEMA_VERSION` constant and the `version` field on + `InputMessages`/`OutputMessages` are removed, and `OutputMessage.finish_reason` + now defaults to `"stop"` instead of `None`. + +### Added + +- **`ApplyGuardrailScope`** for tracing security guardrail evaluations + (`apply_guardrail` operation), with supporting `GuardrailDetails`, + `GuardrailFinding`, `GuardrailDecisionType`, `GuardrailRiskSeverity`, and + `GuardrailTargetType` types and `microsoft.guardian.*` / + `microsoft.security.*` attribute constants. `apply_guardrail` spans are + exported to Agent 365. +- **`AgentDetails.agent_type`** and **`BaggageBuilder.agent_type()`** emit + `gen_ai.agent.type`. Both accept an `AgentType` enum member or a string; + enum members are emitted as their string `.value`. The new dataclass field is + appended after existing fields, preserving positional-argument compatibility. +- **`InferenceCallDetails.responseModel`**, **`cacheReadInputTokens`**, and + **`cacheWriteInputTokens`** emit `gen_ai.response.model`, + `gen_ai.usage.cache_read.input_tokens`, and + `gen_ai.usage.cache_write.input_tokens`. `model` is now optional when + `responseModel` is supplied. The new fields are appended after existing + fields, preserving positional-argument compatibility. +- **`InferenceScope.record_cache_read_input_tokens()`** and + **`record_cache_write_input_tokens()`**. +- **`InferenceOperationType.canonical_name`** returns the canonical lowercase + OpenTelemetry operation name. + +### Changed + +- `InferenceScope` emits `server.port` as an integer instead of a string. + +### Fixed + +- Scopes and the Agent 365 exporter no longer raise `AttributeError` when the + tracer returns a `NonRecordingSpan` (for example, when the token resolver + returns `None` on the first turn); span context is read via + `get_span_context()`. ### Migration -- Update case-sensitive operation-name and span-name filters, dashboards, and - alerts to the canonical values above, or compare case-insensitively. -- Supply a non-blank `model` or `responseModel` when constructing - `InferenceCallDetails`; validate optional configuration before constructing - the telemetry object so missing model identity does not interrupt a request. - Request the OBS resource `/.default` scope (`api://9b975845-388f-4429-889e-eab1ef63949c/.default`) for the exporting agent identity. Do not use delegated `Agent365.Observability.OtelWrite` tokens @@ -61,8 +81,17 @@ All notable changes to this package will be documented in this file. `idtyp` other than `app`; when `idtyp` is absent, accept only a non-empty `roles` array or a non-empty `oid` equal to `sub`; verify `aud` is the OBS resource and the token is not expired. +- Update case-sensitive operation-name and span-name filters, dashboards, and + alerts to the canonical values above, or compare case-insensitively. +- Supply a non-blank `model` or `responseModel` when constructing + `InferenceCallDetails`; validate optional configuration before constructing + the telemetry object so missing model identity does not interrupt a request. +- Update consumers that parse `gen_ai.input.messages` / + `gen_ai.output.messages` to expect a JSON array rather than a + `{version, messages}` object, and remove references to + `A365_MESSAGE_SCHEMA_VERSION`. -## [0.3.0] +## [1.0.0] - 2026-05-01 ### Breaking Changes diff --git a/libraries/microsoft-agents-a365-observability-extensions-langchain/CHANGELOG.md b/libraries/microsoft-agents-a365-observability-extensions-langchain/CHANGELOG.md index 6c0ae5b9..534251f0 100644 --- a/libraries/microsoft-agents-a365-observability-extensions-langchain/CHANGELOG.md +++ b/libraries/microsoft-agents-a365-observability-extensions-langchain/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this package will be documented in this file. -## [Unreleased] +## [2.0.0] - 2026-10-20 ### Added @@ -26,4 +26,17 @@ All notable changes to this package will be documented in this file. tokens reports 150 instead of 100. Do not add cache-token counts to this normalized total again. Batched generations retain aggregate `llm_output` usage rather than replacing it with a single message's usage. +- **Depends on `langchain-core` instead of the `langchain` meta-package** — the + package no longer installs `langchain`. Install it separately if your + application needs it. + +### Security + +- Raised minimum versions: `langchain-core >= 1.3.3`, `langsmith >= 0.8.18`, + and `anyio >= 4.14.2`. + +## [1.0.0] - 2026-05-01 + +### Changed + - Removed `set_execution_type()` function and all `ExecutionType` / `GEN_AI_EXECUTION_TYPE_KEY` usage. diff --git a/libraries/microsoft-agents-a365-observability-extensions-openai/CHANGELOG.md b/libraries/microsoft-agents-a365-observability-extensions-openai/CHANGELOG.md index e1d6093c..a6b2e4d7 100644 --- a/libraries/microsoft-agents-a365-observability-extensions-openai/CHANGELOG.md +++ b/libraries/microsoft-agents-a365-observability-extensions-openai/CHANGELOG.md @@ -2,7 +2,25 @@ All notable changes to this package will be documented in this file. -## [Unreleased] +## [2.0.0] - 2026-10-20 + +### Added + +- Response spans now emit `gen_ai.usage.cache_read.input_tokens` from + `usage.input_tokens_details.cached_tokens`. + +### Changed + +- **Response model is emitted as `gen_ai.response.model`** — the model reported + on the OpenAI `Response` object was previously emitted as + `gen_ai.request.model`. Update dashboards and queries accordingly. + +### Security + +- Raised minimum versions: `mcp >= 1.28.1`, `anyio >= 4.14.2`, and + `python-multipart >= 0.0.30`. + +## [1.0.0] - 2026-05-01 ### Changed diff --git a/libraries/microsoft-agents-a365-observability-extensions-semantickernel/CHANGELOG.md b/libraries/microsoft-agents-a365-observability-extensions-semantickernel/CHANGELOG.md index 6336360a..d9d5927e 100644 --- a/libraries/microsoft-agents-a365-observability-extensions-semantickernel/CHANGELOG.md +++ b/libraries/microsoft-agents-a365-observability-extensions-semantickernel/CHANGELOG.md @@ -2,7 +2,14 @@ All notable changes to this package will be documented in this file. -## [Unreleased] +## [2.0.0] - 2026-10-20 + +### Security + +- Raised minimum versions: `mcp >= 1.28.1`, `anyio >= 4.14.2`, and + `python-multipart >= 0.0.30`. + +## [1.0.0] - 2026-05-01 ### Changed diff --git a/libraries/microsoft-agents-a365-observability-hosting/CHANGELOG.md b/libraries/microsoft-agents-a365-observability-hosting/CHANGELOG.md index ab08f4f8..b0918d78 100644 --- a/libraries/microsoft-agents-a365-observability-hosting/CHANGELOG.md +++ b/libraries/microsoft-agents-a365-observability-hosting/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this package will be documented in this file. -## [Unreleased] +## [2.0.0] - 2026-10-20 ### Breaking Changes @@ -18,6 +18,16 @@ All notable changes to this package will be documented in this file. logs one error and stores no token. It never calls `Authorization.exchange_token` and never acquires a delegated OBS token. +### Changed + +- The package now declares a direct dependency on + `microsoft-agents-a365-runtime`. + +### Fixed + +- Channel scope helpers now fall back to `channel_data.productContext` for the + sub-channel when the activity's `ChannelId` does not carry one. + ### Migration - Call and return `refresh_observability_token(agent_id, tenant_id, app_only_token_resolver)` @@ -25,6 +35,8 @@ All notable changes to this package will be documented in this file. - Keep workload MCP/Graph/OBO authentication unchanged; only OBS export authentication moves to app-only S2S. +## [1.0.0] - 2026-05-01 + ### Changed - **`OutputLoggingMiddleware`** — Updated to use new scope APIs (`Request`, `SpanDetails`, `UserDetails`). Removed `TenantDetails` and `ExecutionType` dependencies. Middleware no longer gates on tenant presence. diff --git a/libraries/microsoft-agents-a365-runtime/CHANGELOG.md b/libraries/microsoft-agents-a365-runtime/CHANGELOG.md index f43df08e..3c7f41af 100644 --- a/libraries/microsoft-agents-a365-runtime/CHANGELOG.md +++ b/libraries/microsoft-agents-a365-runtime/CHANGELOG.md @@ -2,7 +2,7 @@ All notable changes to this package will be documented in this file. -## [Unreleased] +## [2.0.0] - 2026-10-20 ### Breaking Changes diff --git a/libraries/microsoft-agents-a365-tooling-extensions-agentframework/CHANGELOG.md b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/CHANGELOG.md new file mode 100644 index 00000000..f4507c3d --- /dev/null +++ b/libraries/microsoft-agents-a365-tooling-extensions-agentframework/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog — microsoft-agents-a365-tooling-extensions-agentframework + +All notable changes to this package will be documented in this file. + +## [2.0.0] - 2026-10-20 + +### Security + +- Raised minimum versions: `mcp >= 1.28.1`, `anyio >= 4.14.2`, + `python-multipart >= 0.0.30`, and `pyasn1 >= 0.6.4`. diff --git a/libraries/microsoft-agents-a365-tooling-extensions-googleadk/CHANGELOG.md b/libraries/microsoft-agents-a365-tooling-extensions-googleadk/CHANGELOG.md new file mode 100644 index 00000000..d353b3f4 --- /dev/null +++ b/libraries/microsoft-agents-a365-tooling-extensions-googleadk/CHANGELOG.md @@ -0,0 +1,11 @@ +# Changelog — microsoft-agents-a365-tooling-extensions-googleadk + +All notable changes to this package will be documented in this file. + +## [2.0.0] - 2026-10-20 + +### Security + +- Requires `google-adk >= 1.28.1, < 2.0.0` to address CVE-2026-4810. +- Raised minimum versions: `mcp >= 1.28.1`, `anyio >= 4.14.2`, + `python-multipart >= 0.0.30`, and `pyasn1 >= 0.6.4`. diff --git a/libraries/microsoft-agents-a365-tooling-extensions-openai/CHANGELOG.md b/libraries/microsoft-agents-a365-tooling-extensions-openai/CHANGELOG.md new file mode 100644 index 00000000..154a001a --- /dev/null +++ b/libraries/microsoft-agents-a365-tooling-extensions-openai/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog — microsoft-agents-a365-tooling-extensions-openai + +All notable changes to this package will be documented in this file. + +## [2.0.0] - 2026-10-20 + +### Security + +- Raised minimum versions: `mcp >= 1.28.1`, `anyio >= 4.14.2`, and + `python-multipart >= 0.0.30`. diff --git a/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/CHANGELOG.md b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/CHANGELOG.md new file mode 100644 index 00000000..9344a4e8 --- /dev/null +++ b/libraries/microsoft-agents-a365-tooling-extensions-semantickernel/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog — microsoft-agents-a365-tooling-extensions-semantickernel + +All notable changes to this package will be documented in this file. + +## [2.0.0] - 2026-10-20 + +### Security + +- Raised minimum versions: `mcp >= 1.28.1`, `anyio >= 4.14.2`, and + `python-multipart >= 0.0.30`. diff --git a/libraries/microsoft-agents-a365-tooling/CHANGELOG.md b/libraries/microsoft-agents-a365-tooling/CHANGELOG.md index 73e4267c..01ca3a1d 100644 --- a/libraries/microsoft-agents-a365-tooling/CHANGELOG.md +++ b/libraries/microsoft-agents-a365-tooling/CHANGELOG.md @@ -5,7 +5,13 @@ All notable changes to the `microsoft-agents-a365-tooling` package will be docum The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [Unreleased] +## [2.0.0] - 2026-10-20 + +### Security + +- Raised the minimum `PyJWT` version to `>= 2.14.0`. + +## [1.0.0] - 2026-05-01 ### Added @@ -17,6 +23,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Added `audience`, `scope`, `publisher`, and `headers` fields to `MCPServerConfig` - Gateway discovery endpoint bumped to `/agents/v2/{id}/mcpServers` - `_parse_gateway_server_config()` and `_parse_manifest_server_config()` merged into a single `_parse_server_config()` method — both gateway and manifest payloads share the same JSON field schema; the unified method maps `audience`, `scope`, and `publisher` fields from either source into `MCPServerConfig` +- Added `send_chat_history` method to `McpToolServerConfigurationService` for sending chat conversation history to the MCP platform for real-time threat protection analysis +- Added `ChatHistoryMessage` Pydantic model for representing individual messages in chat history +- Added `ChatMessageRequest` Pydantic model for the chat history API request payload +- Added `py.typed` marker for PEP 561 compliance, enabling type checker support ### Changed @@ -30,8 +40,3 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **Backward compatible**: agents with V1 manifests (null audience or shared ATG AppId) work identically with the new SDK — no token exchange behaviour changes - **Migration required for V2**: agents upgraded to V2 blueprint permissions (per-audience MCP servers) require this SDK version. Running a V2 blueprint with the old SDK will result in MCP tool auth failures (401/403) - **Local dev token flow**: run `a365 develop get-token` before starting the agent locally; the CLI writes `BEARER_TOKEN` (shared fallback) and `BEARER_TOKEN_` (per-server, keyed on the server's `mcpServerName` value uppercased) to the environment, which the SDK reads automatically during manifest-based discovery - -- Added `send_chat_history` method to `McpToolServerConfigurationService` for sending chat conversation history to the MCP platform for real-time threat protection analysis -- Added `ChatHistoryMessage` Pydantic model for representing individual messages in chat history -- Added `ChatMessageRequest` Pydantic model for the chat history API request payload -- Added `py.typed` marker for PEP 561 compliance, enabling type checker support