Repository navigation
V2 media galleries, a media viewer and a richer drawer Media section (0.261.262) - #1664
Merged
Paul Lizer (paullizer) merged 2 commits intoOct 6, 2026
Conversation
Runs of images and clips in a V2 reply render as tiles, three to a row, with captions; evidence lists put each item's clip and still in a row. A viewer steps through a gallery (buttons and arrow keys), plays clips, shows images at actual size and downloads. The drawer groups Images, Videos and Audio, plays and downloads recordings, and scrolls to an item's message. Escape in a drawer dialog no longer closes the drawer.
… renumber the media galleries to 0.261.262
Paul Lizer (paullizer)
merged commit Oct 6, 2026
9948fbe
into
microsoft:paullizer-react-v2-ui
11 checks passed
Paul Lizer (paullizer)
added a commit
that referenced
this pull request
Oct 6, 2026
… to 0.261.263 #1664 merged as 0.261.262, the number this branch had taken. Both release note sections are kept, with this branch's on top. The fix doc, feature doc note, test headers and the new check's assert_app_version_at_least move to 0.261.263. 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
…Indexer deployer fix to 0.261.264 Resolve the config.py VERSION, release notes, and fixes index conflicts. The base already used 0.261.260 through 0.261.263, so this fix moves to 0.261.264 in its release notes section, fix document, deployer READMEs, preflight script header, and test headers. The base's own 0.261.260 Web Search entry is unchanged. Deployer version stays 1.0.33 because no incoming commit changed deployers/. Refs #1666 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
… Enhanced Extraction section to 0.261.265 Resolve the conflicts with paullizer-react-v2-ui, keeping both sides: - config.py: VERSION 0.261.265, after 0.261.264 on the base. - release_notes.md: this change on top as v0.261.265. - SettingsSection.tsx: pass both fieldsByKey (#1662) and runtimeFlags to isFieldVisible; the open_until_set reader passes fieldsByKey too. - test_v2_admin_section_logic.ts: both header lines, both imports and both sets of appended checks. - test_v2_admin_capability_placement.py: header version. #1662 renamed readDependencyValue to readSettingValue, which the text merge did not flag, so applyEnableEffect now calls readSettingValue. Renumber this change's own 0.261.260 references to 0.261.265. The base's 0.261.260 (the Web Search nested settings fix) is unchanged. 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
…ber the File Sync single card to 0.261.266 Keep both sides of each conflict: the group `anchor` descriptor alongside `open_until_set`, both new vocabulary and section-logic checks, and both Knowledge doc entries. Anchored panels and their placement now pass the field index and runtime flags, and use the open-until-set group reader, the same way the base's card body does. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
14 of 24 tasks
Paul Lizer (paullizer)
added a commit
that referenced
this pull request
Oct 6, 2026
, #1671, #1674) and renumber the Operations settings parity to 0.261.269 Conflict resolutions: - admin_settings_fields.py: keep the full Operations block. The Application Insights and Health Check declarations #1670 added beside Appearance are superseded by it, and its mixed-source telemetry switch moves into the Operations Application Insights section, after the global logging readouts. Keep #1668's on_enable documentation and both sides' V2_ONLY_FIELDS entries. - route_backend_v2.py: fold content_understanding_supported into _build_runtime_flags. - SettingsSection.tsx, AdminSettingsPage.tsx, adminFields.ts: keep both the section guide and runtimeFlags props, and on_enable beside the Operations field properties. - operations.md, release_notes.md and tests: keep both sides. Both enable_dai_debug and enable_mixed_source_development_telemetry are documented rather than exempted, and Workspaces and Operations are both fully described. - Renumber this branch's 0.261.260 references to 0.261.269; the base's own 0.261.260 Web Search fix references are unchanged. 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 7, 2026
…rosoft#1665, microsoft#1667, microsoft#1668) and renumber the mixed-source settings fix to 0.261.266 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Agents that pull evidence from remote services answer with many images and clips: a dozen stills and a couple of clips in one reply, each under a one-line caption, or a timeline where every entry links a clip and shows a still. Until now each image rendered as a full-width card and each clip as a full-width player, so one such reply filled several screens. The Documents drawer listed clips and recordings as plain text rows.
This PR lays reply media out as compact tiles, adds one viewer for all of it, and rebuilds the drawer's Media section.
Galleries in replies
lib/mediaGallery.ts) over the parsed tree, so paragraphs, line breaks and list items come from the parser rather than a text scanner.Media viewer
Modal, so Escape, Tab trapping and focus returning to the tile behave like every other dialog.Drawer Media section
Downloads
Bug fix
Security
imgandaelements markdown already produced intodiv > figure > figcaptionwrappers. react-markdown's URL transform still runs on every image and link afterwards; a Node test proves this with a custom transform.safeMediaUrlorresolveImageSource, whichtest_v2_media_gallery_wiring.pyasserts. New-tab links userel="noopener noreferrer", andwindow.opensevers the opener.credentials: 'omit'.#t=0.1media fragment, which never reaches the server, so signed links are untouched. Tiles load only once on screen.Validation
node functional_tests/test_v2_media_gallery_logic.mjs: 16 checks pass. They run the real plugin inside the real react-markdown pipeline over:data:sources, block quotes, tables, and placeholders in captionspytestpasses 104 functional tests: the newtest_v2_media_gallery_wiring.py, the updatedtest_v2_inline_media_players.pyandtest_v2_rich_rendering.py, and the renderer, citation, masking, lightbox and image editor tests that read the same files.ui_tests/test_v2_media_galleries.pypasses 5 tests in Chromium with production CSS:ui_tests/test_v2_collaboration_ux.py(4) and the image upload and generated image UI tests also pass.tsc -b --noEmitis clean.Pre-existing failures, identical on the base before this change:
functional_tests/test_v2_inline_image_proposals.py::test_no_third_party_browser_assets_were_addedreports@xyflow/reactas an added dependency. It was added by 31e7d16; this PR does not touchpackage.json.ui_tests/test_v2_orchestration_drawer_views.pyandui_tests/test_v2_orchestration_elicitation.pyfail with'NoneType' object has no attribute 'evaluate'. They fail the same way on c269964.Docs
docs/explanation/features/V2_MEDIA_GALLERIES_AND_VIEWER.mddocs/reference/chat-controls.md(new "Media in replies" section, drawer Media row),V2_INLINE_MEDIA_AND_AGENT_MESSAGES.md,V2_COLLABORATION_UX.md, the features index, and the release notesVersion
0.261.262. React V2 is at 0.261.261 (#1663). Renumber on merge if the order changes.Not in this PR
Ideas for follow-ups: