Skip to content

Add Teams meeting assistant Autopilot sample - #1054

Merged
Tom Wagner (thwagne) merged 5 commits into
mainfrom
thwagne/autopilot-meeting-sample
Oct 9, 2026
Merged

Tom Wagner (thwagne) merged 5 commits into
mainfrom
thwagne/autopilot-meeting-sample

Conversation

@thwagne

Copy link
Copy Markdown
Contributor

Summary

  • Add a Python Meeting Assistant Autopilot sample that greets meeting chats, posts agenda reminders at meeting start, and produces transcript-grounded agenda closure reports after meeting end.
  • Use native Teams meeting SDK handlers and Work IQ MCP with the agent-user identity; retry pending reports on recording/transcript availability notifications.
  • Include direct-code deployment configuration, Bicep infrastructure, pinned dependencies, offline tests, sanitized SDK replay fixtures, and a focused sample README.
  • Share the guided provisioning helper with Hello World and reduce the parent README to a sample index. Hello World agent code and manifest are unchanged.

Configuration and preview limitations

  • Document transcript API access, Work IQ permission/consent, billing prerequisites, deployment/publication steps, and runtime environment settings.
  • Raw Activity and Work IQ logging remain enabled in the hosted sample and are configurable. The README calls out unredacted content, synthetic meetings, and restricted log access/retention.
  • Keep the isolated AgentServer/M365 compatibility bridge for the pinned preview SDKs. This demo does not provide durable event recovery or cross-replica exactly-once delivery.

Validation

  • Existing offline suite: 142 tests passed.
  • README relative links and anchors resolve; no raw meeting captures, local environments, or generated caches are included.
  • No cloud deployment or Microsoft 365 publication performed as part of this PR.

Add native meeting lifecycle handlers, Work IQ transcript reads, evidence-checked agenda closure reports, deployment infrastructure, documentation, and offline coverage. Share guided provisioning with Hello World and simplify the parent sample index.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 7, 2026 15:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Untrusted notification and agenda data can affect posted links or formatting, while transcript validation and raw logging have reliability gaps.

5 open findings
What changed in this PR

Adds a deployable Teams Meeting Assistant Autopilot with transcript-grounded agenda reporting.

Changes:

  • Implements meeting lifecycle handling, Work IQ access, analysis, and hosting.
  • Adds deployment infrastructure, documentation, and shared provisioning.
  • Adds extensive offline tests and sanitized SDK replay fixtures.
File Description
samples/​python/​autopilot-agents/​scripts/​prepare-provision.ps1 Adds shared provisioning logic.
samples/​python/​autopilot-agents/​README.md Adds Meeting Assistant to the index.
meeting-assistant/​tests/​test_workiq.py Tests Work IQ contracts and transport.
meeting-assistant/​tests/​test_sdk_dispatch.py Tests native SDK event dispatch.
meeting-assistant/​tests/​test_request_logging.py Tests raw request capture.
meeting-assistant/​tests/​test_meeting_lifecycle.py Tests lifecycle processing and persistence.
meeting-assistant/​tests/​test_meeting_assistant.py Tests configuration and routing.
meeting-assistant/​tests/​test_meeting_analysis.py Tests structured agenda analysis.
meeting-assistant/​tests/​test_hosting.py Tests AgentServer integration.
meeting-assistant/​tests/​fixtures/​meeting-start.json Adds sanitized start event.
meeting-assistant/​tests/​fixtures/​meeting-end.json Adds sanitized end event.
meeting-assistant/​scripts/​replay-sdk-payloads.py Adds offline SDK replay utility.
meeting-assistant/​scripts/​prepare-provision.ps1 Wraps shared provisioning.
meeting-assistant/​requirements.txt Pins resolved dependencies.
meeting-assistant/​README.md Documents setup, operation, and limitations.
meeting-assistant/​pyproject.toml Defines the Python package.
meeting-assistant/​main.py Adds the service entry point.
meeting-assistant/​infra/​modules/​foundry.bicep Provisions Foundry resources.
meeting-assistant/​infra/​main.parameters.json Maps azd deployment parameters.
meeting-assistant/​infra/​main.bicep Orchestrates infrastructure deployment.
meeting-assistant/​azure.yaml Configures hosting and publication.
meeting-assistant/​agent/​workiq.py Implements bounded Work IQ access.
meeting-assistant/​agent/​request_logging.py Implements raw payload logging.
meeting-assistant/​agent/​meeting_lifecycle.py Implements meeting state and reports.
meeting-assistant/​agent/​meeting_analysis.py Implements evidence-checked analysis.
meeting-assistant/​agent/​hosting.py Adds the preview SDK bridge.
meeting-assistant/​agent/​app.py Wires hosting, authorization, and handlers.
meeting-assistant/​agent/​__init__.py Defines the agent package.
meeting-assistant/​.gitignore Excludes local artifacts.
meeting-assistant/​.agentignore Limits deployment contents.
hello-world/​scripts/​prepare-provision.ps1 Switches to shared provisioning.
hello-world/​README.md Documents the shared helper.
hello-world/​AGENTS.md Updates key-file guidance.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread samples/python/autopilot-agents/meeting-assistant/agent/meeting_lifecycle.py Outdated
Fix WebVTT regex backtracking and escape agenda reminders. Read transcripts only on readiness notifications received after meeting end, retain usable transcript metadata fallbacks, and remove exact quote matching. Restore the parent README with the meeting sample link and update documentation and regression coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 7, 2026 20:30

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Unbounded pre-authentication logging, forgeable notification handling, weak evidence validation, and lifecycle scalability limits create unresolved security and reliability risks.

6 open findings
1 resolved since last review
Previously missed (2)

In code that hasn't changed since last review

Medium severity Global lock serializes meetings and blocks on slow operations

samples/​python/​autopilot-agents/​meeting-assistant/​agent/​app.py:233

This single lock serializes lifecycle processing for every meeting handled by the replica, not just turns sharing conversation state. Because the protected block includes network calls, model inference, posting, and up to 10 seconds of artifact retry sleeps, one slow meeting can delay unrelated meetings long enough to time out. Scope locking by conversation/state key (and avoid sleeping while holding a global lock).

Medium severity Occurrence cap permanently blocks future recurring meetings

samples/​python/​autopilot-agents/​meeting-assistant/​agent/​meeting_lifecycle.py:151

This cap permanently disables future meeting starts after 20 occurrences because no code removes completed records and no administrative cleanup mechanism is provided. Recurring chats—including meetings with no agenda—will inevitably hit this branch. Prune safely completed occurrences (while retaining pending reports and replay protection) before rejecting a new start.

🧠 Review effort: Balanced

Comment thread samples/python/autopilot-agents/meeting-assistant/agent/app.py
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 7, 2026 21:39

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Transcript matching can permanently reject valid delayed transcripts, and request handling has routing and concurrency defects.

1 open finding
6 resolved since last review
Previously missed (2)

In code that hasn't changed since last review

Medium severity Guard None channel_data before accessing meeting

samples/​python/​autopilot-agents/​meeting-assistant/​agent/​app.py:137

is_supported_teams_group_chat deliberately treats missing channel_data as {} and can still return true when the conversation tenant is present. This branch then calls .get() on None, so an otherwise valid conversation update without channel data crashes route selection instead of being ignored. Guard the raw value as a dictionary before reading meeting.

Medium severity Avoid handler-wide lock blocking unrelated conversations

samples/​python/​autopilot-agents/​meeting-assistant/​agent/​app.py:231

This single handler-wide lock serializes every meeting and chat handled by the replica, while it remains held across Work IQ calls, model inference, posts, and up to 10 seconds of artifact retry sleeps. A delayed transcript turn can therefore block unrelated start/end events long enough for their requests to time out. Scope locking to the conversation/state key (or only to load/checkpoint transitions) so independent meetings can progress concurrently.

🧠 Review effort: Balanced

Comment thread samples/python/autopilot-agents/meeting-assistant/agent/meeting_lifecycle.py Outdated
Bind ready notifications to call-specific transcripts, preserve timestamp fallback, and show reviewed sources without evidence quotes. Guard missing Teams channel data and document hosted session lock scope.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 8, 2026 18:03

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔵 Needs a closer look

The pinned 1.9.0.dev0 Agents SDK packages are unpublished, preventing clean installation and deployment.

0 open findings

1 resolved since last review
Previously missed (1)

In code that hasn't changed since last review

Low severity Correct middleware description to reflect production use

samples/​python/​autopilot-agents/​meeting-assistant/​agent/​request_logging.py:1

This middleware is enabled in the hosted manifest, so describing it as test-only is inaccurate and obscures that it executes in deployed environments. Rename the module description to match its production use.

🧠 Review effort: Balanced

Copilot AI balanced review requested due to automatic review settings October 9, 2026 18:50
@thwagne
Tom Wagner (thwagne) merged commit c73f325 into main Oct 9, 2026
14 checks passed
@thwagne
Tom Wagner (thwagne) deleted the thwagne/autopilot-meeting-sample branch October 9, 2026 18:57

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

The pinned unreleased Microsoft Agents SDK versions prevent public dependency restoration and deployment.

0 open findings

🧠 Review effort: Balanced

This branch was successfully deployed

1 active deployment
L4-validation — 32c60e3c Deployed Oct 9, 2026 by adyada via trusted #485
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants