Skip to content

V2 shared conversations: mention pills, agent activity lines, generated documents and media (0.261.255) - #1652

Merged
Paul Lizer (paullizer) merged 3 commits into
microsoft:paullizer-react-v2-uifrom
paullizer:paullizer-v2-shared-conversation-ux
Oct 6, 2026
Merged

Paul Lizer (paullizer) merged 3 commits into
microsoft:paullizer-react-v2-uifrom
paullizer:paullizer-v2-shared-conversation-ux

Conversation

@paullizer

Copy link
Copy Markdown
Contributor

Summary

  • Mentions as pills and chips. In a shared conversation, a message shows the agent that was asked and the people it was addressed to as pills above its text, instead of repeating @Name in the sentence. A name used to address someone takes its comma with it, so "Sam Smoot (@sam), start with the route." reads "Start with the route." Picking from the @ menu adds removable chips above the message box: any number of people, and one model or agent (a second agent replaces the first). The names are still sent in front of the message, so the server, the classic client and the assistant read mentions exactly as before. Reply quotes read the same way and drop markdown markers.
  • Agent activity lines. Every running AI request shows as one slim line at the end of the thread, for every participant: which agent, who asked, how long it has been running, and what it is doing in plain words ("Looking up order status", "Asking Data Analyst", "Writing the answer"). Several can run at once, and the line replaces the large "Thinking" bubble in shared conversations. Steps never include plugin, function or model names, arguments or timings.
  • Generated documents and media in the Documents drawer. The drawer lists the documents agents generated in the conversation, with a Markdown preview and a download that follows the workspace's own download rules for the reader. It also gathers every image, video and audio clip the thread shows, including signed links from remote services.

Server side: CollaborationAiActivity (route_backend_collaboration.py) publishes collaboration.ai.started, progress and finished on the conversation's event stream. finished always fires, from a finally block, and publishing never raises. functions_collaboration_ai_activity.py describes each step in plain words. Two new routes for accepted participants list and download generated documents (functions_collaboration_generated_documents.py): a group document needs Owner, Admin or DocumentManager plus the group's download settings, and a personal document only its owner.

Stacked on #1637. The Media list skips messages that a workflow reply replaced (isSupersededByWorkflowReply, added in #1637), so this branch is built on it. Until #1637 merges, its commit shows here as well.

Exercised on a SimpleChat POC deployment: four people and twelve agent requests in one shared conversation.

Linked issue

None.

Release Notes & Latest Features

  • New Feature
  • Bug Fix
  • UI Enhancement
  • Breaking Change
  • Internal only

Is this visible to end users?

  • Yes
  • No

Is this admin-facing (Admin Settings, governance, deployment, config)?

  • Yes
  • No

Should this become a Latest Feature card?

  • Yes
  • No
  • Already added

Screenshot needed for the card?

  • Yes
  • No
  • Attached

Version bump

Testing / validation

  • python functional_tests/test_collaboration_ai_activity_events.py (6), test_collaboration_generated_documents.py (4), test_workflow_reply_replaces_agent_posted_message.py (10)
  • node functional_tests/test_v2_collaboration_mention_pills_logic.mjs (9), test_v2_collaboration_ai_activity_logic.mjs (6), test_v2_drawer_media_logic.mjs, test_v2_shared_conversation_logic.mjs (51)
  • Prompt tests the chips touch: test_v2_prompt_attachment_persistence.py (84), test_v2_prompt_composer_card.py (11), test_v2_prompts_workbench.py (22)
  • Route policy tests (12, 7, 2), test_docs_site_quality.py (6), test_docs_app_surface_coverage.py (7), and scripts/check_broken_access_control.py on the changed Python files
  • npm --prefix application/v2_ui run build (type check and build)
  • ui_tests/test_v2_collaboration_ux.py (4) and the 19 other V2 UI test files that mount the message list, composer or drawer: 255 passed in one session. Three files hit Playwright's "Sync API inside the asyncio loop" only when run in that same session and pass on their own (56, 33, 5). test_v2_orchestration_composer.py and test_v2_orchestration_pending_approval_resume.py pass through their own runners (6/6, 5/5).

Documentation

  • Release notes updated, or not needed (not added yet)
  • Feature documentation updated, or not needed: docs/explanation/features/V2_COLLABORATION_UX.md, docs/reference/chat-controls.md
  • Fix documentation updated, or not needed

Security checklist

  • New Flask routes include @swagger_route(security=get_auth_security())
  • Settings sent to non-admin frontends use sanitize_settings_for_user() (the new routes send no settings)
  • Browser JavaScript is served from local SimpleChat static assets only; no CDN-hosted JS
  • No secrets, keys, connection strings, or local-only artifacts are included

Hide the run's own post once its full reply is mirrored into the created conversation, and hide the workflow conversation from the chat list after the first delivery.
…a conversation produced

V2 shared conversations:
- Mentions show as pills above a message and as removable chips in the composer. The @name text is left out of what is shown, including reply quotes; the stored text keeps it, so the server, the classic client and the assistant read mentions as before.
- Every running AI request shows as one slim activity line for all participants: which agent, who asked, the elapsed time and what it is doing in plain words. It replaces the large Thinking bubble in shared conversations.
- The Documents drawer lists the documents agents generated in the conversation (Markdown preview, download only where the workspace's rules allow it) and every image, video and audio clip in the thread.

Version 0.261.255.
Comment thread application/single_app/route_backend_collaboration.py Fixed
Comment thread application/single_app/route_backend_collaboration.py Fixed
The list and download routes returned a PermissionError's text with their 403. They now return a fixed message and log the reason on the server, which resolves CodeQL py/stack-trace-exposure alerts 4012 and 4013. A test checks that no error response from either route carries a caught exception.
@paullizer
Paul Lizer (paullizer) merged commit 6154f95 into microsoft:paullizer-react-v2-ui Oct 6, 2026
11 checks passed
Paul Lizer (paullizer) added a commit to paullizer/simplechat that referenced this pull request Oct 6, 2026
microsoft#1652 merged into paullizer-react-v2-ui as 0.261.255, above the
0.261.254 this branch had taken, so this fix moves one above it again.
Only version references change: config.py, the release notes heading,
the fix and feature docs, and the version headers of the tests this
branch added or updated. No behaviour changes.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer) added a commit to paullizer/simplechat that referenced this pull request Oct 6, 2026
…icator

Bring in origin/paullizer-react-v2-ui at 6154f95, the merge of microsoft#1652
(0.261.255), which went above the 0.261.254 this branch had taken; the
previous commit renumbers this fix to 0.261.256.

Only two files conflicted:
- config.py keeps VERSION = "0.261.256", one above V2.
- MessageList.tsx: both sides changed the top of StreamingBubble. The
  resolution keeps this branch's store read (orchestrationSurface,
  activeConversationId) and adds V2's collaborative selector, so every
  hook still runs before either early return. Both early returns stay:
  a run shown on its plan card, and a shared conversation whose
  activity line stands in for the bubble. Orchestration routes only
  accept personal conversations, so the two cannot apply at once.

chatStore.ts merged cleanly; V2's change adds no new streaming writes.
For MessageList.tsx and chatStore.ts the merge adds exactly V2's change
to this branch and exactly this branch's change to V2. The release notes
did not conflict: microsoft#1652 left them alone, so this PR's v0.261.256 section
still sits directly above V2's v0.261.253 section. Every other file
matches the side that changed it. No earlier recorded resolution was
applied.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer) added a commit that referenced this pull request Oct 6, 2026
…masked

Brings in the five commits from #1637 and #1652. Conflicts resolved:

- config.py: the base moved to 0.261.255, so this fix takes 0.261.256.
- release_notes.md: the base's v0.261.253 section stays as it is, and this
  fix's entries move to a new v0.261.256 section at the top.

The new shared-conversation generated-documents routes read messages through
list_collaboration_messages, which already leaves out soft-deleted copies.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer) added a commit to paullizer/simplechat that referenced this pull request Oct 6, 2026
…esign to 0.261.256

The base moved to 0.261.255, and open PRs microsoft#1654 and microsoft#1638 both hold
0.261.254, so this branch takes the next free number.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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.

2 participants