Skip to content

Tags: Azure/azure-dev

Tags

azd-ext-azure-ai-models_0.0.6-preview

Toggle azd-ext-azure-ai-models_0.0.6-preview's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Byow command aliasing (#8095)

* adding more enhancements

* releasing v04 preview

* updating snapshot

* Promote custom model commands to top-level and add new flags

- Add top-level azd ai models create/list/show/delete commands
- Deprecate 'custom' subgroup with warning message
- Add --weight-type flag to create command (default: FullWeight)
- Add --source-job-id filter to list command for training job lineage
- Make --publisher optional (only sent when explicitly provided)
- Send pendingUploadType in startPendingUpload request body
- Add new response fields: weightType, baseModel, source, artifactProfile, provisioningState
- Display new fields in show command output
- Update extension.yaml to 0.0.6-preview with updated examples
- Update CHANGELOG.md

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix PollOperation auth: use ai.azure.com scope instead of ml.azure.com

The ml.azure.com scope fails with AzureDeveloperCLICredential due to
first-party app consent issues. The api.azureml.ms operations endpoint
accepts the same ai.azure.com token used by the rest of the client.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Add model update command with description and tag support

Add 'azd ai models update' command that uses PATCH with JSON Merge
Patch (RFC 7396) to update model description and tags:
  - --description: set/update the model description
  - --set-tag key=value: upsert tags (repeatable)
  - --remove-tag key: remove tags (repeatable)

Also adds UpdateModel method to FoundryClient using
Content-Type: application/merge-patch+json.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address PR review: fix deprecated refs, typed errors, tests, cleanup

- Update user-facing messages to use top-level commands (azd ai models *)
  instead of deprecated custom subgroup in code and docs
- Fix malformed URI when --base-model is empty (skip DerivedModelInformation)
- Replace fragile string-based error detection with typed client.APIError
  and errors.As status code checking
- Handle non-numeric versions in show command's latest-version selection
- Preserve existing PreRunE hooks in top-level command setup
- Use Flags() instead of PersistentFlags() for leaf commands
- Remove unused ARMTokenScope and MLTokenScope constants
- Add unit tests for URI utilities and APIError type

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix cspell: replace 'upserts' with 'adds or updates'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Fix gofmt: remove trailing whitespace in const block

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fixing version

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

cli/azd/v1.25.0

Toggle cli/azd/v1.25.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: upgrade Copilot SDK to v0.3.0 and CLI to v1.0.36-0 (#8114)

* Migrate event system to Copilot SDK v0.3.0 typed events

Update all event handler code and tests to use the new SDK v0.3.0
event type constants (SessionEventType* prefix) and typed event data
structs (replacing the flat copilot.Data struct with per-event types
like AssistantMessageData, AssistantUsageData, etc.).

Key changes:
- Rename event constants: copilot.AssistantMessage -> copilot.SessionEventTypeAssistantMessage, etc.
- Replace event.Data.Field access with type assertions: event.Data.(*copilot.XxxData)
- Remove AssistantStreamingDelta case (SDK v0.3.0 only has TotalResponseSizeBytes, no phase/deltaContent)
- Update SessionShutdown handler: TotalPremiumRequests is now a plain float64
- Update ToolExecutionComplete error handling: simplified Error struct
- Guard Model assignment against empty string (now plain string, not *string)
- Update PermissionRequestKind constants in types_test.go
- Remove unused derefStr helper

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: upgrade copilot SDK to v0.3.0 and CLI to v1.0.36-0

Upgrade github.com/github/copilot-sdk/go from v0.1.32 to v0.3.0
and update the bundled CLI version from 1.0.2 to 1.0.36-0.

Breaking changes addressed:
- MCPServerConfig changed from map[string]any to a typed interface
  with MCPStdioServerConfig and MCPHTTPServerConfig structs
- PermissionRequestKind constants renamed (e.g. MCP -> PermissionRequestKindMcp)
- PermissionRequestResult Kind field now uses typed constants
- CLI version regex in tests updated to allow prerelease suffixes

This addresses issue #8108 where azd init Copilot Preview silently
falls back from claude-opus-4.7 to claude-opus-4.6 due to the older
SDK/CLI version not fully supporting newer models.

Fixes #8108

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: apply preflight auto-fixes (formatting, spelling)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address PR review feedback

- Require type assertion success in E2E test to prevent silent pass
- Broaden CLI version regex to support full SemVer prerelease identifiers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: use Rejected result kind for explicit denials

Update permission result kind mappings:
- User skip (ErrToolExecutionSkipped): UserNotAvailable -> Rejected
  (user was consulted and actively chose to skip)
- Rules deny (pre-check denial): UserNotAvailable -> Rejected
  (definitive policy denial, not transient unavailability)

This ensures the Copilot service correctly treats these as final
denials rather than retryable unavailability scenarios.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

azure-dev-cli_1.25.0

Toggle azure-dev-cli_1.25.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
chore: upgrade Copilot SDK to v0.3.0 and CLI to v1.0.36-0 (#8114)

* Migrate event system to Copilot SDK v0.3.0 typed events

Update all event handler code and tests to use the new SDK v0.3.0
event type constants (SessionEventType* prefix) and typed event data
structs (replacing the flat copilot.Data struct with per-event types
like AssistantMessageData, AssistantUsageData, etc.).

Key changes:
- Rename event constants: copilot.AssistantMessage -> copilot.SessionEventTypeAssistantMessage, etc.
- Replace event.Data.Field access with type assertions: event.Data.(*copilot.XxxData)
- Remove AssistantStreamingDelta case (SDK v0.3.0 only has TotalResponseSizeBytes, no phase/deltaContent)
- Update SessionShutdown handler: TotalPremiumRequests is now a plain float64
- Update ToolExecutionComplete error handling: simplified Error struct
- Guard Model assignment against empty string (now plain string, not *string)
- Update PermissionRequestKind constants in types_test.go
- Remove unused derefStr helper

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: upgrade copilot SDK to v0.3.0 and CLI to v1.0.36-0

Upgrade github.com/github/copilot-sdk/go from v0.1.32 to v0.3.0
and update the bundled CLI version from 1.0.2 to 1.0.36-0.

Breaking changes addressed:
- MCPServerConfig changed from map[string]any to a typed interface
  with MCPStdioServerConfig and MCPHTTPServerConfig structs
- PermissionRequestKind constants renamed (e.g. MCP -> PermissionRequestKindMcp)
- PermissionRequestResult Kind field now uses typed constants
- CLI version regex in tests updated to allow prerelease suffixes

This addresses issue #8108 where azd init Copilot Preview silently
falls back from claude-opus-4.7 to claude-opus-4.6 due to the older
SDK/CLI version not fully supporting newer models.

Fixes #8108

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: apply preflight auto-fixes (formatting, spelling)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address PR review feedback

- Require type assertion success in E2E test to prevent silent pass
- Broaden CLI version regex to support full SemVer prerelease identifiers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: use Rejected result kind for explicit denials

Update permission result kind mappings:
- User skip (ErrToolExecutionSkipped): UserNotAvailable -> Rejected
  (user was consulted and actively chose to skip)
- Rules deny (pre-check denial): UserNotAvailable -> Rejected
  (definitive policy denial, not transient unavailability)

This ensures the Copilot service correctly treats these as final
denials rather than retryable unavailability scenarios.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

azd-ext-azure-ai-agents_0.1.31-preview

Toggle azd-ext-azure-ai-agents_0.1.31-preview's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Prepare azure.ai.agents 0.1.31-preview patch release metadata (#8098)

* Initial plan

* Prepare azure.ai.agents 0.1.31-preview patch release

Agent-Logs-Url: https://github.com/Azure/azure-dev/sessions/4e0c6f73-f12f-4fb1-9f16-28a8dcad9e06

Co-authored-by: trangevi <26490000+trangevi@users.noreply.github.com>

* Changelog update

Signed-off-by: trangevi <trangevi@microsoft.com>

---------

Signed-off-by: trangevi <trangevi@microsoft.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: trangevi <26490000+trangevi@users.noreply.github.com>
Co-authored-by: trangevi <trangevi@microsoft.com>

azd-ext-azure-ai-agents_0.1.30-preview

Toggle azd-ext-azure-ai-agents_0.1.30-preview's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Prepare azure.ai.agents 0.1.30-preview patch release (#8082)

* Initial plan

* Prepare azure.ai.agents 0.1.30-preview patch release

Agent-Logs-Url: https://github.com/Azure/azure-dev/sessions/0e96dbbe-7b0e-41b7-9d81-278cd7d6807f

Co-authored-by: trangevi <26490000+trangevi@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: trangevi <26490000+trangevi@users.noreply.github.com>

cli/azd/v1.24.3

Toggle cli/azd/v1.24.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Create changelog for 1.24.3 (#8009)

azure-dev-cli_1.24.3

Toggle azure-dev-cli_1.24.3's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Create changelog for 1.24.3 (#8009)

azd-ext-azure-ai-agents_0.1.29-preview

Toggle azd-ext-azure-ai-agents_0.1.29-preview's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
feat(provision): prompt to cancel Azure deployment on Ctrl+C (Bicep) (#…

…7795)

* feat(provision): prompt to cancel Azure deployment on Ctrl+C (Bicep)

When a user presses Ctrl+C during 'azd provision' or 'azd up' while a
Bicep deployment is in flight on Azure, azd now pauses and asks whether
to leave the Azure deployment running (default) or to cancel it via the
ARM Cancel API and wait for a terminal state.

- pkg/input: register-able interrupt handler stack with re-entrant
  Ctrl+C suppression while a handler is running.
- pkg/azapi + pkg/infra: Cancel methods on DeploymentService /
  Deployment for both subscription- and resource-group-scoped
  deployments. Deployment Stacks return 'not supported' (no Cancel API
  surface today).
- pkg/infra/provisioning: typed sentinel errors for the 4 outcomes
  (leave running / canceled / cancel timed out / cancel too late) plus
  telemetry attribute provision.cancellation.
- pkg/infra/provisioning/bicep: interactive prompt + cancel-and-poll
  flow with 30s cancel-request timeout and 2-min terminal-state wait.
- cmd/middleware + internal/cmd: bypass agent troubleshooting and map
  sentinels to telemetry codes.
- docs/provision-cancellation.md: user-facing behavior, outcomes,
  provider scope, telemetry, and non-interactive fallback.

Terraform and Deployment Stacks are out of scope and unchanged.

Closes #2810

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot review feedback (iteration 1)

- pkg/input: LIFO test now invokes handlers and asserts distinct call
  counts to prove ordering.
- pkg/infra/provisioning: add ErrDeploymentCancelFailed sentinel so the
  cancel-request-failure path no longer misclassifies as a timeout;
  wire it through error middleware skip-list and telemetry mapping.
- pkg/infra: switch new TestScopeCancel subtests to t.Context().

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot review feedback (iteration 2)

- pkg/azapi: add typed ErrCancelNotSupported sentinel; stack
  CancelSubscriptionDeployment / CancelResourceGroupDeployment now
  return it instead of an opaque string.
- pkg/infra/provisioning/bicep: interrupt handler treats
  ErrCancelNotSupported as the safer 'leave running' outcome (matches
  documented stacks behavior + telemetry). Cancel-request error path
  routes through terminalToOutcome when the deployment is already in a
  terminal state, so the portal URL and consistent messaging are
  surfaced. Canceled terminal branch now prints the portal URL too.
- pkg/infra/provisioning: ErrDeploymentCancelFailed doc comment now
  references errors.Is/errors.As (matches the multi-%w joined-error
  wrapping pattern used here).
- pkg/infra/provisioning/bicep/bicep_provider: tear down the interrupt
  handler immediately after deployModule returns (sync.OnceFunc) to
  avoid a small window where a late Ctrl+C could surface the prompt
  over post-processing output.
- internal/cmd/errors: map ErrCancelNotSupported in classifySentinel.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: close interrupt-vs-natural-completion race (iteration 3)

If Ctrl+C arrives but the ARM deployment happens to finish naturally
before the user picks an option in the prompt, the previous design
could take the success path and silently drop the interrupt.

- installDeploymentInterruptHandler now exposes a 'started' channel
  that is closed the instant Ctrl+C is received, before the prompt is
  shown. deployCtx is also cancelled immediately so PollUntilDone
  unblocks ASAP.
- BicepProvider.Deploy block-receives the outcome whenever 'started'
  is closed (instead of a non-blocking drain), so the user's choice is
  always honored regardless of who wins the race.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: re-entrant Ctrl+C suppression hardening (iteration 4)

- pkg/input/console: watchTerminalInterrupt now reserves the running
  slot before consulting the handler stack so re-entrant Ctrl+C is
  suppressed even if the stack is briefly empty (e.g. handler popped
  but still executing the prompt).
- pkg/infra/provisioning/bicep/bicep_provider: defer cleanup until
  after the interrupt outcome is received so a second Ctrl+C during
  the prompt is still suppressed; the no-interrupt path tears down
  immediately as before.
- pkg/infra/provisioning/cancel: doc reads 'sentinel errors' instead
  of 'typed errors' to match the implementation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot review feedback (iteration 5)

- pkg/input/interrupt: enforce strict LIFO when popping handlers
  (only pop when this handler is still top-of-stack), so out-of-order
  pops never accidentally remove unrelated newer handlers.
- pkg/infra/provisioning/bicep/interrupt: defensive default in
  terminalToOutcome now stops the spinner and emits a warning with
  the observed state and portal URL, leaving the UI clean if an
  unexpected terminal state is ever observed.
- pkg/infra/provisioning/bicep/interrupt: treat
  DeploymentProvisioningStateDeleted as terminal in the cancel poll
  so we don't keep polling until the deadline if the deployment is
  deleted out from under us. Test updated accordingly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot review feedback (iteration 6)

- pkg/infra/provisioning/bicep/interrupt: wrap the interrupt handler
  closure with sync.OnceValue so close(started), cancelDeploy() and
  the outcome channel send all run at most once. Combined with the
  in-flight guard from tryStartInterruptHandler and the strict LIFO
  pop, additional Ctrl+C signals after the prompt completes can no
  longer panic or block on the buffered channel.
- pkg/infra/provisioning/bicep/interrupt: print the portal URL on
  the prompt-failure leave-running path so the user always has a
  link to follow up when the URL is available.
- docs/provision-cancellation: clarify that the portal URL is
  printed when available (not 'in every case').

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot review feedback (iteration 7)

- pkg/input/interrupt: nil out the popped slot before truncating
  the interrupt stack so the GC can reclaim the popped handler and
  any state it captured, even before the underlying array is
  reallocated.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot review feedback (iteration 8)

- pkg/input/console: run the registered interrupt handler inline on
  the signal goroutine instead of in a nested goroutine. This
  removes the scheduling window where SIGINT was received but the
  handler had not yet run, which could let a deploy goroutine
  complete naturally and silently drop the Ctrl+C. Re-entrant signals
  remain suppressed via tryStartInterruptHandler.
- pkg/infra/provisioning/bicep/interrupt: switch the cancel poll
  loop to a time.Ticker and move the wait before each Get, so a
  slow Get cannot produce back-to-back ARM polls (preventing
  throttling).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address review findings from wbreza and jongio on PR #7795

Fixes from wbreza's review:
- H1/N1: Race between deploy-success and interrupt handler — replaced
  select-based check with atomic CAS state machine (deployStateRunning →
  deployStateInterrupting or deployStateCompleted) so the handler and
  Deploy goroutine never conflict.
- H2: Panic in interrupt handler — added recover() with stack trace
  logging in watchTerminalInterrupt so a handler panic doesn't leave the
  process unkillable.
- H3: Second Ctrl+C force-exit — added forceExitPending counter in
  interrupt.go; second suppressed Ctrl+C while a handler is running
  triggers os.Exit(130) matching POSIX convention (kubectl, terraform).
- M13: terminalToOutcome now a BicepProvider method with ctx as first
  parameter per AGENTS.md convention.
- L7: Spelling consistency — 'Cancelling' → 'Canceling' to match ARM
  API and codebase convention.
- L8: Removed stray blank line in cmd/middleware/error.go.

Fixes from jongio's review:
- N1: Same race fix as H1 above (CAS state machine).
- N2: Panic recovery (defense-in-depth per Jon's suggestion).
- N3: Test cleanup — added t.Cleanup() for PushInterruptHandler pops
  and finishInterruptHandler to prevent global state leaks on assertion
  failure.

Fixes from Copilot bot review:
- Unbounded Get call in cancel-request error path — added
  context.WithTimeout wrapper (30s).
- DeploymentUrl fetch in prompt — added timeout to prevent indefinite
  blocking on slow/unreachable ARM.
- Deleted state mismatch — added explicit case in terminalToOutcome for
  DeploymentProvisioningStateDeleted.
- Test cleanup in interrupt_test.go (same as N3 above).

New tests:
- TestForceExitCounter: validates force-exit on 2nd suppressed Ctrl+C.
- TestForceExitCounter_ResetsOnNewHandler: ensures counter resets
  between handler lifecycles.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test(bicep): add unit tests for interrupt prompt/cancel/install flow

Addresses follow-up review feedback from @wbreza on PR #7795:

- Adds targeted unit tests for runInterruptPrompt,
  cancelAndAwaitTerminal, and installDeploymentInterruptHandler
  using a programmable fake infra.Deployment and the existing
  MockConsole. Tests cover the leave-running, cancel,
  prompt-failure, URL-fetch-failure, cancel-not-supported,
  cancel-failed-with-fallback-Get, polled-canceled, and
  poll-timeout paths, plus the markCompleted/interrupt CAS race.
- Promotes cancelRequestTimeout, cancelTerminalTimeout, and
  cancelPollInterval from const to package-level var so unit
  tests can shrink them to keep the suite sub-second.
- Logs the post-cancel Get error when the cancel API itself
  failed and the fallback Get also fails (it was previously
  silently dropped, hurting production diagnosability).
- Exposes input.SnapshotInterruptStack as a test-only helper so
  cross-package tests can invoke the registered handler without
  installing the OS signal pipeline.

Refs: #7933 (follow-up
for replacing the process-global interrupt state with an
injectable InterruptBroker).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* perf(bicep): issue first cancel-poll Get immediately

Previously cancelAndAwaitTerminal entered a ticker-driven loop that
waited cancelPollInterval (5s in production) BEFORE every Get,
including the first one issued right after the cancel API succeeded.
For deployments that Azure transitions to Canceled quickly (e.g.
deployments that just started), the user saw a needless ~5s pause
before azd reported the cancellation.

Fix: do an immediate Get right after the cancel request returns; only
the subsequent retries are ticker-spaced. This preserves the original
'no back-to-back Gets' guarantee for the slow path while removing the
unnecessary delay on the fast path.

Adds TestCancelAndAwaitTerminal_FirstGetIsImmediate which sets
cancelPollInterval to a deliberately large value and asserts the call
returns in well under a poll interval when the first Get already
returns Canceled.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(bicep): wait for nested deployments after cancel + URL formatting

Addresses review comments on PR #7795:

- #5/#6: Wrap portal URLs in output.WithLinkFormat across all
  user-facing emission sites; extract printLeaveRunningMessage helper
  to deduplicate the leave-running prompt body.

- #7: After the top-level deployment reaches Canceled, walk the
  operations tree to discover descendant (nested) deployments,
  best-effort cancel any that are still non-terminal, and wait for
  them to reach a terminal state. The whole interrupt flow now lives
  under a single 5-minute global budget (previously 2-minute terminal
  timeout). If one or more nested deployments remain non-terminal at
  budget exhaustion, azd surfaces them by name with portal links and
  records a new 'cancel_timed_out_nested' telemetry value (still
  ErrDeploymentCancelTimeout).

- #9: Fix misleading 'second Ctrl+C is treated as a force-exit'
  comment in console.go — the second additional press arms the
  force-exit latch (and is suppressed); the next press triggers exit.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* ux(bicep): clearer interrupt copy + per-state telemetry split

Addresses customer-experience review on PR #7795 (kristenwomack):

- R1/R11 Branch terminalToOutcome by state. Succeeded is reframed as a
  *success* ("completed successfully before cancellation took effect —
  your resources are deployed") so users who Ctrl+C suspecting a hang
  aren't told their successful deployment was a 'too-late' failure.
  Failed/Deleted get distinct copy. Telemetry value split into
  cancel_raced_succeeded / _failed / _deleted; cancel_too_late kept as
  the fallback for unexpected terminal states.
- R2 Non-interactive prompt fallback now always emits a breadcrumb
  (portal URL when available, otherwise 'find it under
  Subscription → Deployments') plus the az-deployment-cancel hint, so
  CI runs can't silently leak abandoned Azure deployments.
- R3 Prompt title is now active and names the cause: 'You pressed
  Ctrl+C. An Azure deployment is still running — what do you want to
  do?'.
- R4 Prompt help text and leave-running message no longer drop the
  pointer when the URL fetch fails — they degrade to a portal-search
  hint that includes the deployment name.
- R9 Replace the leaking Go duration in the cancel-timeout message
  ('within 5m0s') with prose ('within 5 minutes'). Title updated to
  'Azure is still canceling — azd will exit'.
- R10 Cancel-failed copy reframed: 'Couldn't cancel — Azure deployment
  is still running. The cancel request was rejected by Azure. The
  deployment will continue.'
- R15 'Deployment was deleted' message now explains it's unusual and
  suggests checking audit logs.
- R16 Leave-running path always prints the
  'az deployment sub|group cancel --name <n>' hint so users have a
  copy-pasteable next step.

Docs (provision-cancellation.md) and the ProvisionCancellationKey field
comment updated to describe the new telemetry values.

R5 (option ordering), R6 (5-min wait UX), R7 (discoverability),
R8 (docs site), R12 (skip prompt for Stacks), R13 (a11y),
R14 (color/WCAG) are tracked in a follow-up issue.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

azd-ext-azure-ai-agents_0.1.28-preview

Toggle azd-ext-azure-ai-agents_0.1.28-preview's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
Unify host gRPC error transport with a structured ActionableErrorDeta…

…il (#7919)

* Unify host gRPC error transport with structured ActionableErrorDetail

Replace the ad-hoc "<err>\n<suggestion>" concatenation in the host gRPC
error path with a structured proto detail, and consolidate the helpers
that serialize/deserialize host errors so suggestion and links travel as
typed data instead of being parsed out of the message string.

- Add ActionableErrorDetail { suggestion, links } proto (host -> extension)
- Rename wrapErrorWithSuggestion -> mapHostError; statusMessage no longer
  concatenates the suggestion into status.Message
- Remove duplicated grpcStatusFromError / wrapErrorLinks helpers in
  internal/grpcserver in favor of exported azdext counterparts
- Factor WrapError through populateExtensionErrorFromStatus; drop the
  extErr.Message == err.Error() heuristic
- Extend ErrorSuggestion / ErrorMessage / ErrorLinks to read host-attached
  ActionableErrorDetail so links survive the wire

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Address feedback

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

cli/azd/v1.24.2

Toggle cli/azd/v1.24.2's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
TME test config, mage record command, and re-recorded PreflightQuota …

…cassettes (#7779)

* Support azd config defaults.test.* keys for functional test config

Update cliConfig.init() resolution order to check test-specific azd config
keys (defaults.test.subscription, defaults.test.tenant, defaults.test.location)
before falling back to general defaults (defaults.subscription, defaults.location).

This enables a one-time setup for developers:
  azd config set defaults.test.subscription <TME-SUB-ID>
  azd config set defaults.test.tenant <TME-TENANT-ID>
  azd config set defaults.test.location eastus2

No more manual env var exports per session.

Fixes #7777

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* docs: add mage record and defaults.test.* config documentation

Update CONTRIBUTING.md, AGENTS.md, recording guide, and environment
variables docs to document the new mage record command and
defaults.test.* azd config keys for test subscription configuration.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* exclude stale recordings from preflight playback

VsServer, Deploy_SlotDeployment, and Up_Down_ContainerAppJob recordings are stale and require TME subscription access to re-record. Exclude them from automatic playback so preflight passes for contributors without TME access. Tracked in #7780 and #7014.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* revert: restore original PreflightQuota recordings

The cassettes I re-recorded in 519138c used my personal subscription ID
(25fd0362-...) instead of the TME subscription (4d042dc6-...) that CI
expects. This caused 'requested interaction not found' errors on all 3
build platforms because azd in CI generates URLs with the TME sub but the
cassette URLs use my personal sub.

Reverting these 6 cassettes back to the originals from fe57152 (which
were recorded against TME and worked in CI).

Note: re-recording these requires TME subscription access (see #7780).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* address review feedback: simplify mage record, clarify maintainer workflow

- magefile.go: remove manual go build; delegate to azdcli.NewCLI's buildRecordOnce (addresses weikanglim feedback)

- AGENTS.md / CONTRIBUTING.md / recording-functional-tests-guide.md: clarify re-recording is a core-maintainer workflow; any subscription works

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address Copilot PR review feedback

- magefile.go: only apply excludedPlaybackTests in playback mode so `mage record -filter=<name>` can re-record stale tests (the whole point of excluding them was to enable re-recording)

- magefile.go: include opts.mode in 'no tests match filter' message

- cli_test.go: clarify config fallbacks only apply when CI is unset

- environment-variables.md: note AZD_TEST_TENANT_ID has no defaults.tenant global fallback; clarify CI-gating

- recording-functional-tests-guide.md: same doc clarifications

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Re-record PreflightQuota cassettes against TME subscription

All 6 preflight quota tests re-recorded and verified in both
record and playback modes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: address wbreza review feedback

- Extract configFallback helper in cli_test.go to remove DRY violation
  across subscription/tenant/location config lookups
- Add opts.mode validation in runFunctionalTests to make the
  record/playback contract explicit

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Rajesh Kamal <rajeshkamal@microsoft.com>