feat(agents): add Microsoft Teams bridge integration#2433
Conversation
Add AIAgentTeamsBridge proto message and wire it into the console UI as a new Integrations tab on the agent detail page. The tab exposes enable toggle, bot app ID, tenant ID, and client secret fields. When saved and enabled, the computed messaging endpoint URL is displayed for Azure Bot registration. Proto: AIAgentTeamsBridge message added to AIAgent (field 18), AIAgentCreate (field 15), and AIAgentUpdate (field 15).
…ndpoint The agent URL pattern is <id>.ai-agents.<cluster>.clusters.ign.rdpa.co. The old code only stripped the first subdomain, leaving ai-agents in place. Now we find the ai-agents segment and take everything after it as the cluster domain.
|
The latest Buf updates on your PR. Results from workflow Buf CI / validate (pull_request).
|
Add optional OUTPUT_ONLY teams_bridge_endpoint field to AIAgent. The bridge controller populates this when it starts serving, so console just displays it -- no URL gymnastics needed.
malinskibeniamin
left a comment
There was a problem hiding this comment.
Seems a bit specific to put teams bridge in AI agent service but otherwise LGTM
The bridge expects a bare key (e.g. TEAMS_BOT_SECRET) that it
resolves directly from the secret store. The ${secrets.} template
pattern is for interpolation in deployment env vars, not for ref
fields read by external services.
Removes extractSecretName regex and SECRET_TEMPLATE_REGEX. Proto
validation updated to accept bare UPPER_SNAKE_CASE keys.
yeah that's fair. as per the design, it is a per agent configuration. Other systems, e.g. copilot studio do it the same way |
bot_app_secret_ref validation changed from ${secrets.X} pattern
to bare UPPER_SNAKE_CASE key. Regenerate pb.go and pb.ts.
72affdb to
1dc0b31
Compare
|
@claude review plz |
|
Claude finished @birdayz's task in 2m 36s —— View job Claude PR Review
Overall this looks clean and well-scoped: a new proto message, generated code, and a single new tab gated behind a feature flag. The field-mask update flow is correctly scoped to 🟡 Notable1. PR description is out of date re: secret format — The PR description says "The secret ref uses the same string bot_app_secret_ref = 4 [
(buf.validate.field).ignore = IGNORE_IF_ZERO_VALUE,
(buf.validate.field).string.pattern = "^[A-Za-z_][A-Za-z0-9_]*$"
];vs. provider API keys which still require 2. No client-side validation when enabling the bridge —
3.
🟢 Minor4. Read-only display boxes use hardcoded gray — <div className="flex h-10 items-center rounded-md border border-gray-200 bg-gray-50 px-3 py-2">These won't adapt to dark mode. The same pattern appears in 5. const [isEditing, setIsEditing] = useState(false);
const [editedState, setEditedState] = useState<TeamsBridgeState | null>(null);These move in lockstep ( 6. The biome-ignore is a smell; the component renders two parallel UIs (view vs. edit) per row. A 7. Edit-mode state is lost on tab switch — by design, the component unmounts when the user navigates to another tab, dropping unsaved edits silently. The Configuration tab next door behaves the same way, so this is consistent — flagging in case you want a 8. Feature flag gate is duplicated —
✅ Good
SummaryLGTM modulo the validation gap in (2) — that one is worth fixing before merge so users get feedback when their config is incomplete. (1) is a small PR-description / proto-comment update. Everything else is polish that could be follow-up. |
1dc0b31 to
eaf1612
Compare
|
@claude re review |
|
Claude finished @birdayz's task in 1m 19s —— View job Claude PR Re-review
Re-reviewed at ✅ Addressed since prior review
🟡 Still open1. Proto comment for bare-secret-key divergence — The 🟢 Minor / non-blockers (unchanged from prior review)
SummaryLGTM to merge. The proto comment in (1) is the only thing I'd still nudge on, and it's small enough to be a follow-up if needed. The validation, state, theming, and feature-flag cleanups all look good. |
eaf1612 to
997305f
Compare
Off by default. Cloud-ui pipes the LaunchDarkly value through useConsoleFeatureFlags; without it the tab and its content are not rendered. Also: disable Save when enabled with incomplete fields, consolidate isEditing into editedState, fix dark-mode classes on read-only fields, document proto fields including bare-key divergence on bot_app_secret_ref.
997305f to
32ed960
Compare
What
Add Microsoft Teams integration to the AI Agent system. New proto message, generated code, and an Integrations tab on the agent detail page.
Why
Users need to connect AI agents to Microsoft Teams for conversational interactions through a Teams bot. This requires configuring Azure Bot credentials on the agent side so the Teams bridge knows how to authenticate.
Implementation details
Proto
New
AIAgentTeamsBridgemessage with four fields:enabled,bot_app_id,bot_tenant_id,bot_app_secret_ref. The secret ref uses the same${secrets.NAME}template pattern as the existing provider API keys.Added as
teams_bridgetoAIAgent(field 18),AIAgentCreate(field 15), andAIAgentUpdate(field 15).UI
New Integrations tab on the agent detail page, positioned between Configuration and A2A. Contains a Microsoft Teams section with:
AI_AGENT)Update flow uses field masks targeting only
teams_bridge.*fields, so it won't interfere with other agent configuration.References
CRD struct:
AIAgentTeamsBridgein cloudv2