Commit 00465cd
feat(skills): add PowerPoint automation skill with YAML-driven deck generation (#868)
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
> The skill establishes a full-featured PPTX automation toolkit at
`.github/skills/experimental/powerpoint/`, organized around a
YAML-driven content model and bidirectional conversion pipeline.
- Added **build_deck.py** implementing two exclusive build modes: full
rebuild from corporate templates (`--template`) and partial in-place
regeneration of specific slides (`--source` + `--slides`). Uses an
`ELEMENT_BUILDERS` registry 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.
- Added **extract_content.py** for reverse-engineering existing PPTX
files into structured YAML with type-specific dispatch, global style
detection via frequency analysis, light/dark slide classification,
multi-theme generation, and `@theme_name` preservation.
- Added **export_slides.py** and **render_pdf_images.py** for
PPTX-to-PDF conversion via LibreOffice with platform-specific executable
detection, optional slide filtering, and PDF-to-JPG rasterization with
original slide number mapping.
- Added **validate_deck.py** for offline PPTX property validation
(speaker notes, slide count) with per-slide JSON output, and
**validate_slides.py** for vision model-based quality analysis via
Copilot SDK with exponential backoff retry.
### Utility Module Library
Shared patterns were consolidated into modular utilities following a
bidirectional apply/extract design for PPTX-to-YAML round-trip fidelity.
- Added *pptx_text.py* with three populate modes (flat, per-paragraph,
rich-text), key-mapping abstraction for element-type-specific YAML
conventions, and comprehensive paragraph/run property support including
bullets, hyperlinks, and character spacing.
- Added *pptx_fills.py* for solid, gradient, and pattern fills with
alpha transparency via XML `alphaModFix` manipulation, line properties,
and outer shadow effects via `effectLst`.
- Added *pptx_charts.py* supporting 12 chart types, *pptx_tables.py*
with cell merging and banding, *pptx_colors.py* for hex/theme/brightness
color resolution, *pptx_fonts.py* for font normalization,
*pptx_shapes.py* with 30+ shape type mappings, and *pptx_utils.py*
centralizing exit codes, logging, EMU conversion, and slide filter
parsing.
### Agent and Prompt System
- Added **pptx.agent.md** as the PowerPoint Builder orchestrator
coordinating five phases: research, build-content, build-deck, validate,
and export. Delegates all execution to subagents while maintaining
coordination artifacts.
- Added **pptx-subagent.agent.md** executing delegated tasks (extract,
build-content, build-deck, validate, export) with a blocking failure
protocol that prevents silent degradation on unexpected results.
- Added **pptx.instructions.md** defining shared conventions for working
directory structure, content schemas, validation criteria, and build
modes.
- Added **pptx.prompt.md** as the user-facing entry point for initiating
PowerPoint workflows.
### Skill Documentation and Configuration
- Added comprehensive *SKILL.md* covering prerequisites, content
directory structure, YAML schemas, script reference, architecture,
constraints, validation rules, and troubleshooting.
- Added *content-yaml-template.md* (complete YAML schema for slide
content), *content-extra-py-template.md* (custom Python rendering), and
*style-yaml-template.md* (dimensions, layout mapping, metadata, theme
defaults).
- Added *pyproject.toml* declaring dependencies (python-pptx, pyyaml,
cairosvg, Pillow, pymupdf, github-copilot-sdk) with dev dependencies for
pytest and ruff.
- Added *Invoke-PptxPipeline.ps1* as the PowerShell orchestrator
managing virtual environment lifecycle via `uv sync`, platform-specific
Python path resolution, and delegation to Python scripts.
### Test Suite
- Added 14 Python test modules and 1 PowerShell Pester test suite with
shared *conftest.py* fixtures. Coverage spans all element types,
round-trip fidelity, platform-specific behavior, and mocked external
dependencies (LibreOffice, PyMuPDF, Copilot SDK).
- *test_build_deck.py* (1,270 lines) covers all 11 element types,
z-order, turbo mode, cards, arrow flows, numbered steps, and groups
- *test_extract_content.py* (1,169 lines) covers extraction, theme
resolution, and global style detection
- *test_pptx_text.py* (~800 lines) covers text frame operations,
bullets, and rich-text formatting
- Remaining modules verify charts, colors, fills, fonts, shapes, tables,
utils, PDF rendering, and validation
- *Invoke-PptxPipeline.Tests.ps1* (413 lines) validates pipeline
orchestration with platform-specific handling
- Added *uv.lock* pinning 30+ dependency versions.
### VS Code Playwright Screenshot Skill
- Added *.github/skills/experimental/vscode-playwright/SKILL.md*
providing a workflow for capturing VS Code screenshots via Playwright
MCP tools with `serve-web`, covering server lifecycle, viewport
configuration, UI cleanup, theme seeding, and screenshot validation.
### Infrastructure and Documentation
- Updated *.gitignore* with `venv/` and `.venv/` patterns for Python
virtual environments.
- Updated *collections/experimental.collection.yml* with the powerpoint
skill entry.
- Regenerated *plugins/experimental/README.md* and
*plugins/hve-core-all/README.md* with the powerpoint skill row.
- Renamed *docs/customization/agents.md* to
*docs/customization/custom-agents.md* and updated the corresponding link
in *docs/README.md*.
## Related Issue(s)
None
## Type of Change
Select all that apply:
**Code & Documentation:**
* [ ] Bug fix (non-breaking change fixing an issue)
* [x] New feature (non-breaking change adding functionality)
* [ ] Breaking change (fix or feature causing existing functionality to
change)
* [x] Documentation update
**Infrastructure & Configuration:**
* [ ] GitHub Actions workflow
* [ ] Linting configuration (markdown, PowerShell, etc.)
* [ ] Security configuration
* [ ] DevContainer configuration
* [ ] Dependency update
**AI Artifacts:**
* [ ] Reviewed contribution with `prompt-builder` agent and addressed
all feedback
* [x] Copilot instructions (`.github/instructions/*.instructions.md`)
* [x] Copilot prompt (`.github/prompts/*.prompt.md`)
* [x] Copilot agent (`.github/agents/*.agent.md`)
* [x] Copilot skill (`.github/skills/*/SKILL.md`)
> Note for AI Artifact Contributors:
>
> * Agents: Research, indexing/referencing other project (using standard
VS Code GitHub Copilot/MCP tools), planning, and general implementation
agents likely already exist. Review `.github/agents/` before creating
new ones.
> * Skills: Must include both bash and PowerShell scripts. See
[Skills](../docs/contributing/skills.md).
> * Model Versions: Only contributions targeting the **latest Anthropic
and OpenAI models** will be accepted. Older model versions (e.g.,
GPT-3.5, Claude 3) will be rejected.
> * See [Agents Not
Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and
[Model Version
Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements).
**Other:**
* [x] Script/automation (`.ps1`, `.sh`, `.py`)
* [ ] Other (please describe):
## 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:**
1. The orchestrator agent (*pptx.agent.md*) receives the request and
delegates research to the Researcher Subagent for topic investigation
and content gathering.
2. The PowerPoint Subagent executes `build-content` to generate
per-slide YAML content files from research findings.
3. The subagent runs `build-deck` via *Invoke-PptxPipeline.ps1*, which
manages the Python virtual environment and calls *build_deck.py* to
produce the PPTX file.
4. The subagent runs `validate` to check PPTX properties (speaker notes,
slide count) and optionally sends rendered images to the Copilot SDK
vision model for quality analysis.
5. Validation findings drive iteration back to content fixes or design
adjustments (up to 5 iterations).
6. The subagent runs `export` to 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
findings
**Success Indicators:**
- The generated PPTX opens in PowerPoint or LibreOffice and renders all
slides with correct layout, styling, and content. Validation reports
show no errors. Speaker notes are present on all slides. Slide count
matches the content directory structure.
## Testing
- Automated validation commands run during PR generation (see Checklist
below).
- Security analysis found no sensitive data exposure, dependency
vulnerabilities, or privilege escalation concerns.
- Diff-based assessment confirmed all 46 changed files follow repository
naming conventions.
- Manual testing was not performed during PR generation.
> [!NOTE]
> Manual testing of the PowerPoint skill pipeline is recommended before
merging.
## Checklist
### Required Checks
* [x] Documentation is updated (if applicable)
* [x] Files follow existing naming conventions
* [ ] Changes are backwards compatible (if applicable) (N/A — all files
are new additions)
* [x] Tests added for new functionality (if applicable)
### AI Artifact Contributions
<!-- If contributing an agent, prompt, instruction, or skill, complete
these checks -->
* [ ] Used `/prompt-analyze` to review contribution
* [ ] Addressed all feedback from `prompt-builder` review
* [ ] Verified contribution follows common standards and type-specific
requirements
### Required Automated Checks
The following validation commands must pass before merging:
* [x] Markdown linting: `npm run lint:md`
* [x] Spell checking: `npm run spell-check`
* [x] Frontmatter validation: `npm run lint:frontmatter`
* [x] Skill structure validation: `npm run validate:skills`
* [x] Link validation: `npm run lint:md-links`
* [x] PowerShell analysis: `npm run lint:ps`
* [x] Plugin freshness: `npm run plugin:generate`
> [!WARNING]
> This PR includes **experimental** GHCP artifacts that may have
breaking changes.
> - `.github/skills/experimental/powerpoint/SKILL.md`
> - `.github/skills/experimental/vscode-playwright/SKILL.md`
## GHCP Artifact Maturity
| File | Type | Maturity | Notes |
|---|---|---|---|
| `.github/agents/pptx.agent.md` | Agent | ✅ stable | Repo-specific |
| `.github/agents/pptx-subagent.agent.md` | Agent | ✅ stable |
Repo-specific |
| `.github/instructions/pptx.instructions.md` | Instructions | ✅ stable
| Repo-specific |
| `.github/prompts/pptx.prompt.md` | Prompt | ✅ stable | Repo-specific |
| `.github/skills/experimental/powerpoint/SKILL.md` | Skill | 1 parent ec89302 commit 00465cd
87 files changed
Lines changed: 14938 additions & 330 deletions
File tree
- .github
- agents
- ado
- experimental
- subagents
- github
- hve-core
- subagents
- instructions
- design-thinking
- experimental
- hve-core
- prompts
- design-thinking
- hve-core
- skills/experimental
- powerpoint
- scripts
- tests
- vscode-playwright
- .vscode
- collections
- docs
- customization
- plugins
- design-thinking
- experimental
- agents
- instructions
- skills
- hve-core-all
- agents
- instructions
- skills
- hve-core
- project-planning
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
50 | 50 | | |
51 | 51 | | |
52 | 52 | | |
| 53 | + | |
53 | 54 | | |
54 | 55 | | |
55 | 56 | | |
| |||
155 | 156 | | |
156 | 157 | | |
157 | 158 | | |
158 | | - | |
| 159 | + | |
159 | 160 | | |
160 | 161 | | |
161 | 162 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
0 commit comments