Task
The Foundry extensions currently do not share a consistent interface for reporting
usage telemetry through azd. Some extensions call the generated
TelemetryService.ReportUsage gRPC client directly, while others have no
extension-level telemetry boundary.
Add a consistent, best-effort telemetry interface to the seven Foundry extensions
owned by the team:
azure.ai.agents
azure.ai.connections
azure.ai.inspector
azure.ai.projects
azure.ai.routines
azure.ai.skills
azure.ai.toolboxes
Migrate the existing Agents and Inspector telemetry producers to the new interface
without changing their event schemas. Do not introduce new product usage events
for the other five extensions.
This work builds on the host-controlled telemetry API delivered by
#9174. It does not modify the
gRPC contract, the azd host telemetry pipeline, or registry admission behavior.
Scope
- Add an extension-local
internal/telemetry package to each of the seven
independent Go modules.
- Provide a common
Reporter.Report(ctx, Event) interface that:
- is best effort and never affects command or lifecycle results;
- applies a one-second timeout;
- never retries;
- treats
Accepted: false as a normal outcome;
- tolerates a nil client or nil host response;
- logs only the event name and gRPC status code in debug mode;
- never logs attribute values or transport error details.
- Keep event names, attribute keys, and bounded values in each extension's
internal/telemetry/events.go.
- Migrate the existing Agents event:
local_client.route.selected
route = inspector | playground | suppressed
- Migrate the existing Inspector event:
inspector.funnel.stage
stage = ui_ready
outcome = succeeded
- Keep the existing event names, attributes, emission timing, and semantics
unchanged.
- Do not add usage events to Connections, Projects, Routines, Skills, or
Toolboxes.
- Upgrade Connections, Routines, Skills, and Toolboxes to azd SDK
v1.31.0
and set requiredAzdVersion: ">=1.31.0".
- Document the telemetry interface, best-effort behavior, registry gate, and
customer-content restrictions in all seven extension READMEs.
Because the seven extensions are independently built and released, and the team
does not own pkg/azdext, each module carries the same small adapter rather than
depending on another extension.
Acceptance criteria
- All seven extensions expose the same
internal/telemetry Reporter and Event
contract.
- Command and provider code do not call the generated
ReportUsage RPC directly.
- Telemetry failure, timeout, rejection, or host incompatibility never changes
extension command behavior, output, or result.
- Reporter calls are bounded by a timeout and are never retried.
- Debug logging does not expose attributes, customer content, or raw transport
error details.
- Agents and Inspector continue emitting their existing telemetry with unchanged
event names and attribute values.
- The remaining five extensions emit no new product usage events.
- All telemetry event definitions are centralized in
events.go and use bounded,
reviewed values.
- The four upgraded extensions require a host version that provides
TelemetryService.
- Unit tests, lint, build, and documentation spell checks pass for all seven
extensions.
Related
- Core telemetry API:
Let extensions report named telemetry events with attributes #9174
- The azd host remains responsible for extension identity, the
ext.* namespace,
official-registry admission, request bounds, per-invocation event budget, trace
correlation, consent, transport, and export.
- New product events remain follow-up work and require an explicit product
question, bounded schema, documentation, and privacy review.
Task
The Foundry extensions currently do not share a consistent interface for reporting
usage telemetry through
azd. Some extensions call the generatedTelemetryService.ReportUsagegRPC client directly, while others have noextension-level telemetry boundary.
Add a consistent, best-effort telemetry interface to the seven Foundry extensions
owned by the team:
azure.ai.agentsazure.ai.connectionsazure.ai.inspectorazure.ai.projectsazure.ai.routinesazure.ai.skillsazure.ai.toolboxesMigrate the existing Agents and Inspector telemetry producers to the new interface
without changing their event schemas. Do not introduce new product usage events
for the other five extensions.
This work builds on the host-controlled telemetry API delivered by
#9174. It does not modify the
gRPC contract, the azd host telemetry pipeline, or registry admission behavior.
Scope
internal/telemetrypackage to each of the sevenindependent Go modules.
Reporter.Report(ctx, Event)interface that:Accepted: falseas a normal outcome;internal/telemetry/events.go.local_client.route.selectedroute = inspector | playground | suppressedinspector.funnel.stagestage = ui_readyoutcome = succeededunchanged.
Toolboxes.
v1.31.0and set
requiredAzdVersion: ">=1.31.0".customer-content restrictions in all seven extension READMEs.
Because the seven extensions are independently built and released, and the team
does not own
pkg/azdext, each module carries the same small adapter rather thandepending on another extension.
Acceptance criteria
internal/telemetryReporter and Eventcontract.
ReportUsageRPC directly.extension command behavior, output, or result.
error details.
event names and attribute values.
events.goand use bounded,reviewed values.
TelemetryService.extensions.
Related
Let extensions report named telemetry events with attributes #9174
ext.*namespace,official-registry admission, request bounds, per-invocation event budget, trace
correlation, consent, transport, and export.
question, bounded schema, documentation, and privacy review.