Implements the per-resource service-target design of unified azure.yaml spec #8590 (docs/specs/unify-azure-yaml/spec.md) §2.2, §2.6, §2.8, plus §1.4 (endpoint:).
#8675 writes each Foundry resource as its own azure.yaml service (azure.ai.project / azure.ai.connection / azure.ai.toolbox) but registers all three as no-op service targets inside azure.ai.agents; the resources are still provisioned by Bicep at provision time and re-sourced through the pre/postprovision + postdeploy hooks in listen.go. This issue moves each host to its owning sibling extension with a real deploy-time upsert.
Summary
Turn azure.ai.project, azure.ai.connection, and azure.ai.toolbox into real service targets owned by their sibling extensions, so azd deploy reconciles each resource (upsert) in uses: order, with native per-service progress and failure attribution.
Scope
Per host — each a vertical slice that: registers the host + service target, publishes <kind>.json, adds the core-schema conditional, removes the host from the agents no-op ResourceServiceTargetProvider, and moves its reconcile out of the listen.go hooks into the resource's Deploy:
azure.ai.project -> azure.ai.projects: resolve the project (provisioned, or via endpoint: §1.4) and upsert each deployment.
azure.ai.connection -> azure.ai.connections: upsert the connection; resolve env secrets.
azure.ai.toolbox -> azure.ai.toolboxes: upsert the toolbox; resolve named connection references.
Note: azure.ai.skill and azure.ai.routine real service targets are covered in #8779.
Ordering stays in azure.yaml via uses: (project -> connections -> toolboxes -> agents); azd core topologically orders them.
Out of scope (follow-ups)
Related
Follow-up to #8590 / #8675:
Implements the per-resource service-target design of unified
azure.yamlspec #8590 (docs/specs/unify-azure-yaml/spec.md) §2.2, §2.6, §2.8, plus §1.4 (endpoint:).#8675 writes each Foundry resource as its own
azure.yamlservice (azure.ai.project/azure.ai.connection/azure.ai.toolbox) but registers all three as no-op service targets insideazure.ai.agents; the resources are still provisioned by Bicep atprovisiontime and re-sourced through thepre/postprovision+postdeployhooks inlisten.go. This issue moves each host to its owning sibling extension with a real deploy-time upsert.Summary
Turn
azure.ai.project,azure.ai.connection, andazure.ai.toolboxinto real service targets owned by their sibling extensions, soazd deployreconciles each resource (upsert) inuses:order, with native per-service progress and failure attribution.Scope
Per host — each a vertical slice that: registers the host + service target, publishes
<kind>.json, adds the core-schema conditional, removes the host from the agents no-opResourceServiceTargetProvider, and moves its reconcile out of thelisten.gohooks into the resource'sDeploy:azure.ai.project->azure.ai.projects: resolve the project (provisioned, or viaendpoint:§1.4) and upsert each deployment.azure.ai.connection->azure.ai.connections: upsert the connection; resolve env secrets.azure.ai.toolbox->azure.ai.toolboxes: upsert the toolbox; resolve named connection references.Ordering stays in
azure.yamlviauses:(project -> connections -> toolboxes -> agents); azd core topologically orders them.Out of scope (follow-ups)
$reffile includes / overlay overrides -> [ext-foundry]: wire $ref file includes + overlay overrides for separate-services azure.yaml #8775.Related
Follow-up to #8590 / #8675:
$reffile includes