feat(skills): add PowerPoint automation skill with YAML-driven deck generation#868
Merged
WilliamBerryiii merged 44 commits intomainfrom Mar 9, 2026
Merged
feat(skills): add PowerPoint automation skill with YAML-driven deck generation#868WilliamBerryiii merged 44 commits intomainfrom
WilliamBerryiii merged 44 commits intomainfrom
Conversation
Contributor
Dependency ReviewThe following issues were found:
License Issues.github/skills/experimental/powerpoint/pyproject.toml
.github/skills/experimental/powerpoint/uv.lock
OpenSSF ScorecardScorecard details
Scanned Files
|
katriendg
reviewed
Mar 4, 2026
katriendg
reviewed
Mar 4, 2026
Member
|
Not for the scope of this PR ... but I am specking all the build changes that need to happen for us to maintain our OSSF attestation in response to this. Just as an FYI. We can merge this and I'll fast follow with the build work. |
This was referenced Mar 5, 2026
8193765 to
77e19cb
Compare
6 tasks
Member
|
Hi @agreaves-ms — Thanks for putting this together! A quick note on project conventions: we ask that pull requests be paired with a corresponding backlog issue for tracking purposes. I wasn't able to find an existing issue related to PowerPoint skill support. When you get a chance, could you file an issue describing the feature this PR addresses and link it here using |
26 tasks
JasonOA888
added a commit
to JasonOA888/hve-core
that referenced
this pull request
Mar 9, 2026
Changes: - Add discover-python-skills job that finds all pyproject.toml under .github/skills/ - Replace hardcoded pytest-powerpoint job with matrix-based pytest job - Adding new Python skill now only requires dropping pyproject.toml in skill folder This follows the project convention of dynamic discovery (see extension-package.yml). Note: Tests will pass with empty matrix until PowerPoint skill (microsoft#868) lands.
30 tasks
- implement lifecycle management for PowerPoint slide decks - define working directory structure and required phases - include detailed instructions for content preparation and validation 🔧 - Generated by Copilot
…ting, rendering, and validating slides - implement export_slides.py for PPTX to PDF conversion with optional slide filtering - create extract_content.py to extract content and styles from PPTX into YAML - develop render_pdf_images.py to convert PDF pages to JPG images - introduce validate_deck.py to validate PPTX against content definitions and styling rules - add style YAML template for consistent styling across slides 🎨 - Generated by Copilot
…ation improvements - add support for extracting specific slides from PPTX files - implement in-place rebuilding of existing slides - improve validation checks for font consistency and text overlay - update documentation for extraction limitations and usage examples 🔧 - Generated by Copilot
…ndling - add rotation extraction for shapes and textboxes - implement per-slide background fill support - update text box and shape element handling for rotation - improve font extraction from paragraphs 🎨 - Generated by Copilot
Add 8 shared Python modules for the PowerPoint Agent Skill: pptx_utils, pptx_colors, pptx_fonts, pptx_shapes, pptx_fills, pptx_text, pptx_tables, and pptx_charts. New capabilities: - 4 new element types: table, chart, connector, group - Theme colors (@accent_1 syntax) and gradient/pattern fills - Template loading via --template with layout selection - Placeholder population for themed layouts - Presentation metadata read/write - Enhanced text properties (hyperlinks, spacing, margins, auto-size) - 29 shape types (up from 9) with enum-based detection - 6 new validation checks (10 total) Update content-yaml-template.md, style-yaml-template.md, SKILL.md, and pptx.instructions.md with documentation for all new features.
…olor preservation - add --strict flag to validate_deck.py and -Strict to Invoke-PptxPipeline.ps1 - add freeform shape extraction with path vertex data in extract_content.py - fix theme color preservation across all fill types and line colors in pptx_fills.py 🎨 - Generated by Copilot
This was referenced Mar 15, 2026
6 tasks
This was referenced Mar 16, 2026
WilliamBerryiii
added a commit
that referenced
this pull request
Mar 20, 2026
🤖 I have created a release *beep* *boop* --- ## [3.2.0](hve-core-v3.1.46...hve-core-v3.2.0) (2026-03-20) ### ✨ Features * add -OutputPath parameter to Validate-MarkdownFrontmatter.ps1 ([#1134](#1134)) ([fdf1bcf](fdf1bcf)), closes [#1006](#1006) * add action version consistency scan workflow ([#1127](#1127)) ([4229df1](4229df1)) * **agent:** MVE Experiment Designer ([#976](#976)) ([70f86ca](70f86ca)) * **agents:** add ADO Backlog Manager orchestrator agent ([#800](#800)) ([fae3987](fae3987)) * **agents:** add meeting analyst agent for transcript analysis using work-iq ([#502](#502)) ([5345b5b](5345b5b)) * **agents:** add quick-reference line to RPI Phase 5 suggestions ([#897](#897)) ([9a90f39](9a90f39)) * **agents:** add RAI Planner, enhance SSSC Planner, and redesign Security Planner ([#979](#979)) ([06f826c](06f826c)) * **agents:** add symmetric cross-system handoff to GitHub Backlog Manager ([#952](#952)) ([ba34a35](ba34a35)) * **agents:** Functional Code Review Agent — pre-PR functional correctness reviewer ([#733](#733)) ([9cf63b7](9cf63b7)) * **build:** add Python extensions and uv 0.10.8 to devcontainer ([#920](#920)) ([9ca0579](9ca0579)) * **build:** add uv ecosystem to Dependabot configuration ([#913](#913)) ([2a4bd39](2a4bd39)) * **build:** enable npm pinning enforcement in dependency scan ([#838](#838)) ([4e9e31f](4e9e31f)) * **build:** migrate attestation actions to v4.1.0 and add SBOM verification docs ([#841](#841)) ([ca1e65b](ca1e65b)) * **collections:** add four new validator checks (orphan, duplicate, companion, coverage) ([#869](#869)) ([1a96b73](1a96b73)) * **devcontainer,security:** add enterprise artifact hub configuration ([#1032](#1032)) ([1d56d25](1d56d25)) * **docs:** add Rust coding standards and guidelines ([#809](#809)) ([d4c4899](d4c4899)) * **extension:** add Microsoft logo icon to VS Code Marketplace listings ([#906](#906)) ([82aca41](82aca41)) * **github:** add declarative label management ([#953](#953)) ([a1a6845](a1a6845)) * **instructions:** add ADO backlog shared infrastructure ([#786](#786)) ([1914078](1914078)) * **instructions:** add ADO backlog sprint planning and capacity tracking ([#788](#788)) ([d6fb77d](d6fb77d)) * **instructions:** add ADO triage workflow and prompt ([#787](#787)) ([cde0190](cde0190)) * **instructions:** add shared story quality conventions and sprint planning ([#803](#803)) ([a2f18e3](a2f18e3)) * **prompts:** add ADO discovery and work item prompts with agent routing ([#790](#790)) ([7e74523](7e74523)) * **prompts:** add security review prompts ([#1118](#1118)) ([ad30967](ad30967)) * **scripts:** add dynamic Python skill discovery for lint/test ([#957](#957)) ([0a90f57](0a90f57)) * **scripts:** add Get-StandardTimestamp utility to CIHelpers module ([#1126](#1126)) ([b273a4b](b273a4b)) * **scripts:** add Python copyright header validation ([#905](#905)) ([67df902](67df902)) * **scripts:** add Python skill support to Validate-SkillStructure ([#903](#903)) ([68479d9](68479d9)) * **scripts:** add workflow npm command scanning to dependency pinning ([#837](#837)) ([6b5ae06](6b5ae06)) * **security:** add basic security reviewer agent with owasp skills ([#1008](#1008)) ([cb1fd05](cb1fd05)) * **security:** add sigstore attestation bundles and fix component-detection action ([#1148](#1148)) ([f79c272](f79c272)) * **skills:** add Atheris fuzz harness with CI workflow integration ([#1102](#1102)) ([d337e1d](d337e1d)) * **skills:** add PowerPoint automation skill with YAML-driven deck generation ([#868](#868)) ([00465cd](00465cd)) * **skills:** convert hve-core-installer agent to self-contained skill ([#846](#846)) ([1d821fb](1d821fb)) * **skills:** enhance pr-reference skill with flexible filtering and base branch detection ([#1095](#1095)) ([26a32ea](26a32ea)) * **workflows:** add devcontainer infrastructure change log workflow ([#899](#899)) ([8aca446](8aca446)) * **workflows:** add milestone auto-close on stable and pre-release publishes ([#834](#834)) ([79362b1](79362b1)) * **workflows:** add ms.date documentation freshness checking ([#969](#969)) ([3ed441c](3ed441c)) * **workflows:** add Python linting CI workflow with Ruff ([#951](#951)) ([f89f0eb](f89f0eb)) * **workflows:** add Python testing CI workflow with pytest and Codecov ([#934](#934)) ([5e8306f](5e8306f)) * **workflows:** add uv and Python package sync to copilot-setup-steps ([#921](#921)) ([45d517d](45d517d)) ### 🐛 Bug Fixes * **build:** override Linguist vendored flag for Python skill files ([#1155](#1155)) ([0eee5b6](0eee5b6)) * **build:** override serialize-javascript to >=7.0.3 for RCE fix ([#876](#876)) ([e49039a](e49039a)) * **build:** resolve Pinned-Dependencies alerts for vsce npm commands in extension workflows ([#782](#782)) ([89dad9d](89dad9d)) * **build:** update undici and yauzl overrides for security audit ([#1030](#1030)) ([2c2f92f](2c2f92f)) * **docs:** add CLI Plugins to install.md navigation surfaces ([#902](#902)) ([79d6595](79d6595)) * **docs:** add sidebar ordering for Design Thinking documentation ([#832](#832)) ([551fddc](551fddc)), closes [#830](#830) * **docs:** graduate design-thinking to preview and correct stale collection references ([#831](#831)) ([5110e35](5110e35)) * **docs:** include project-planning in UX Designer install guidance ([#908](#908)) ([e7aa9bc](e7aa9bc)) * **docs:** remediate writing-style convention violations ([#865](#865)) ([68b04bc](68b04bc)) * **docs:** remove draft content announcement banner ([#825](#825)) ([b45de80](b45de80)) * **docs:** remove unbounded path-to-regexp override breaking SSG ([#1153](#1153)) ([d810018](d810018)) * **docs:** use actual clone paths instead of folder display names in multi-root workspace settings ([#984](#984)) ([5dbab82](5dbab82)) * **instructions:** replace black with ruff in uv-projects ([#898](#898)) ([b0c06d9](b0c06d9)) * **scripts:** cover .github/ skill files in copyright header validation ([#1055](#1055)) ([#1098](#1098)) ([27fbd33](27fbd33)) * **scripts:** eliminate phantom git changes from plugin generation ([#1035](#1035)) ([e49a1b5](e49a1b5)) * **scripts:** enable JSON log output for lint:version-consistency ([#1033](#1033)) ([52b0885](52b0885)) * **security:** calculate compliance score from total scanned dependencies ([#930](#930)) ([c112c3d](c112c3d)) * **skills:** add AST validation and namespace restriction for content-extra.py ([#1027](#1027)) ([c50c7a3](c50c7a3)) * **skills:** add depth limits to recursive PowerPoint processing functions ([#1028](#1028)) ([bf08994](bf08994)) * **skills:** harden XML parsing and blob writes in powerpoint extract ([#1053](#1053)) ([89d24b1](89d24b1)) * **skills:** resolve ruff lint and format violations in powerpoint skill ([#1048](#1048)) ([17bbe7a](17bbe7a)) * **workflows:** add uv.lock dependencies submission have fork-skip condition ([#1109](#1109)) ([dec56ac](dec56ac)) * **workflows:** automate weekly SHA staleness check with issue creation ([#975](#975)) ([1ea4caa](1ea4caa)) * **workflows:** close Codecov integration gaps for Pester and pytest flags ([#1106](#1106)) ([cca29b7](cca29b7)) * **workflows:** propagate uv sync errors in copilot-setup-steps ([#961](#961)) ([df88d7c](df88d7c)) * **workflows:** resolve release-please skip cascade and Python project discovery ([#1043](#1043)) ([79993e2](79993e2)) * **workflows:** scan only commit subjects for breaking change detection ([#1157](#1157)) ([a38a657](a38a657)) ### 📚 Documentation * clarify HVE Core Extension vs Installer messaging across documentation ([#965](#965)) ([0fceb8f](0fceb8f)) * **docs:** add ADO integration user documentation ([#935](#935)) ([ec89302](ec89302)) * **docs:** add Project Planning agent documentation ([#936](#936)) ([3a3a0fd](3a3a0fd)) * **onboarding:** overhaul marketplace onboarding and documentation site ([#982](#982)) ([4309e10](4309e10)) ### ♻️ Refactoring * **build:** merge code-review collection into coding-standards ([#863](#863)) ([8027e7b](8027e7b)) * **workflows:** rename release pipeline workflows and add marketplace automation triggers ([#829](#829)) ([b6397f4](b6397f4)) ### 🔧 Maintenance * **build:** add clean:logs npm script ([#1122](#1122)) ([f85fe02](f85fe02)), closes [#988](#988) * **build:** add JSON reporter for cspell ([#1123](#1123)) ([6d59f67](6d59f67)) * **ci:** add multi-arch support to copilot-setup-steps binary downloads ([#955](#955)) ([8d0c706](8d0c706)) * **deps-dev:** bump cspell from 9.6.4 to 9.7.0 in the npm-dependencies group ([#839](#839)) ([3fa16ff](3fa16ff)) * **deps:** bump actions/dependency-review-action from 4.8.3 to 4.9.0 in the github-actions group across 1 directory ([#942](#942)) ([1a9b858](1a9b858)) * **deps:** bump cairosvg from 2.8.2 to 2.9.0 in /.github/skills/experimental/powerpoint ([#1025](#1025)) ([f4deda7](f4deda7)) * **deps:** bump dompurify from 3.3.1 to 3.3.2 in /docs/docusaurus ([#924](#924)) ([d2060d6](d2060d6)) * **deps:** bump svgo from 3.3.2 to 3.3.3 in /docs/docusaurus ([#880](#880)) ([6dc2406](6dc2406)) * **deps:** bump the github-actions group across 1 directory with 4 updates ([#1100](#1100)) ([2290dc0](2290dc0)) * **deps:** bump the github-actions group with 6 updates ([#840](#840)) ([f57bc01](f57bc01)) * **docs:** correct New-MsDateReport table rendering and refresh stale docs ([#1114](#1114)) ([c2b806f](c2b806f)) * **settings:** remove orphaned Checkov config and stale gitignore entries ([#870](#870)) ([98fcd74](98fcd74)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: hve-core-release-please[bot] <254602402+hve-core-release-please[bot]@users.noreply.github.com> Co-authored-by: Bill Berry <wberry@microsoft.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.
This PR introduces a comprehensive PowerPoint automation skill under the experimental collection, enabling AI-assisted creation, extraction, and validation of slide decks through a YAML-driven content pipeline. The implementation delivers a three-agent orchestration system, bidirectional PPTX-to-YAML conversion across 14 Python scripts, a PowerShell orchestrator, and dual-path validation combining PPTX property checks with Copilot SDK vision model analysis. Supporting changes include a new VS Code Playwright screenshot skill, collection manifest updates, Python virtual environment gitignore patterns, and a documentation file rename.
Description
PowerPoint Skill Architecture
--template) and partial in-place regeneration of specific slides (--source+--slides). Uses anELEMENT_BUILDERSregistry dictionary for element dispatch supporting 11 element types (shape, textbox, rich_text, image, card, arrow_flow, numbered_step, table, chart, connector, group), z-order sorting, turbo mode for dense slides, and content-extra.py post-hooks for custom rendering.@theme_namepreservation.Utility Module Library
Shared patterns were consolidated into modular utilities following a bidirectional apply/extract design for PPTX-to-YAML round-trip fidelity.
alphaModFixmanipulation, line properties, and outer shadow effects viaeffectLst.Agent and Prompt System
Skill Documentation and Configuration
uv sync, platform-specific Python path resolution, and delegation to Python scripts.Test Suite
VS Code Playwright Screenshot Skill
serve-web, covering server lifecycle, viewport configuration, UI cleanup, theme seeding, and screenshot validation.Infrastructure and Documentation
venv/and.venv/patterns for Python virtual environments.Related Issue(s)
None
Type of Change
Select all that apply:
Code & Documentation:
Infrastructure & Configuration:
AI Artifacts:
prompt-builderagent and addressed all feedback.github/instructions/*.instructions.md).github/prompts/*.prompt.md).github/agents/*.agent.md).github/skills/*/SKILL.md)Other:
.ps1,.sh,.py)Sample Prompts (for AI Artifact Contributions)
User Request:
Invoke the PowerPoint Builder workflow using
@pptx build me a slide deck about cloud-native architecture for a customer presentation. The prompt supports topic-based generation, extraction from existing PPTX files, and iterative validation with vision model feedback.Execution Flow:
build-contentto generate per-slide YAML content files from research findings.build-deckvia Invoke-PptxPipeline.ps1, which manages the Python virtual environment and calls build_deck.py to produce the PPTX file.validateto check PPTX properties (speaker notes, slide count) and optionally sends rendered images to the Copilot SDK vision model for quality analysis.exportto render final slide images for visual review.Output Artifacts:
.copilot-tracking/ppt/{session}/content/slide-NNN/content.yaml— Per-slide YAML definitions.copilot-tracking/ppt/{session}/content/style.yaml— Global style configuration.copilot-tracking/ppt/{session}/output/*.pptx— Generated PowerPoint deck.copilot-tracking/ppt/{session}/output/slide-NNN.jpg— Rendered slide images.copilot-tracking/ppt/{session}/validation/report.md— Validation findingsSuccess Indicators:
Testing
Note
Manual testing of the PowerPoint skill pipeline is recommended before merging.
Checklist
Required Checks
AI Artifact Contributions
/prompt-analyzeto review contributionprompt-builderreviewRequired Automated Checks
The following validation commands must pass before merging:
npm run lint:mdnpm run spell-checknpm run lint:frontmatternpm run validate:skillsnpm run lint:md-linksnpm run lint:psnpm run plugin:generateWarning
This PR includes experimental GHCP artifacts that may have breaking changes.
.github/skills/experimental/powerpoint/SKILL.md.github/skills/experimental/vscode-playwright/SKILL.mdGHCP Artifact Maturity
.github/agents/pptx.agent.md.github/agents/pptx-subagent.agent.md.github/instructions/pptx.instructions.md.github/prompts/pptx.prompt.md.github/skills/experimental/powerpoint/SKILL.md.github/skills/experimental/vscode-playwright/SKILL.mdGHCP Maturity Acknowledgment
Security Considerations
Additional Notes
experimental.collection.ymlmanifest. Plugin generation auto-added it tohve-core-all.collection.yml; consider also adding it to the experimental collection for consistency..shfile inscripts/.PSUseBOMForUnicodeEncodedFilewarning.plugins/experimental/README.mdrow for powerpoint showspowerpoint | powerpointwith duplicate description text — this is generated output and may warrant updating the collection metadata to include a proper description.