## 中文 内网环境显式使用 Office skill 校验含 `docProps/core.xml` 的文件时,Schema 仍引用远程 Dublin Core XSD;Windows 默认 GBK 读取中文 UTF-8 XML 也会报错。本修改让 docx/pptx/xlsx 独立携带完整本地 Schema 闭包,并按 XML 编码声明读取文件,保留完整校验。 - 三个 Office skill 分别随包加入 Dublin Core 三份 XSD,复用本地 xml.xsd,补齐来源、原始摘要、许可与适配说明。 - 修正两个 Microsoft XSD 的 ST_String 类型引用,以及 presentation-forge 编辑器脚本路径。 - 市场版本 1.5.11;docx 1.0.4、pptx 1.0.5、xlsx 1.0.4、presentation-forge 0.1.1,同步目录元数据。 - 新增定向回归:遍历所有内置技能的 XSD,拒绝远程依赖并离线编译;模拟 GBK 校验中文 XML,确认非法 Word 节点仍被拒绝。 验证:126 份 XSD 离线编译、2 项回归通过;i18n/catalog 校验均为 0 errors / 105 既有 warnings;translate --check 与 git diff --check 通过。README 两种语言同步。工作树、路径、Git 元数据与发布正文隐私检查通过。 Windows x64 dev 10.0.181 已通过产品 prepare-static 准备随包依赖,并真实调用 Skill(docx):创建、全校验、解包编辑、重新打包、再全校验均退出 0,两次校验各 18 valid / 0 skipped / 0 errors。该实验禁用 pip/npm 依赖索引,保留模型连接;不等同于正式包或全机断网验收。辅助 Grep 有一次旧参数错误,改正后成功;Python 缓存污染安装摘要另列真机测试跟踪。主仓 market.zip 尚未刷新,源 PR 合并后需通过 sync-market 纳入产品。 ## English Office validation in an intranet deployment still depended on remote Dublin Core schemas, and reading Chinese UTF-8 XML with the Windows GBK default could fail. Each Office skill now includes its local schema dependency closure, and validators read XML as bytes so its declared encoding is respected without weakening validation. This also fixes two Microsoft schema type references and the presentation-forge editor script path. Market version becomes 1.5.11; skill versions become docx 1.0.4, pptx 1.0.5, xlsx 1.0.4 and presentation-forge 0.1.1. Vendored schemas include attribution, licensing, original hashes and adaptation notes. Validation: 126 schemas compile offline; both targeted regression tests pass, including GBK input and invalid-node rejection. Catalog/i18n checks pass with 105 existing warnings each; translation freshness and whitespace checks pass. Bilingual README and publication privacy checks are complete. The actual Windows x64 dev session passed explicit docx loading, creation, full validation, editing, repacking and revalidation using product-prepared dependencies. Dependency indexes were disabled while model connectivity remained available. Packaged/cross-platform testing and the observed Python-cache installation-digest drift remain follow-ups. The product bootstrap ZIP will require sync-market after this source PR merges. 真机测试与剩余验收 / Hardware testing and remaining acceptance: https://github.com/desirecore/desirecore/issues/4819 --------- Co-authored-by: Johnson <yeslee1126@gmail.com>
16 KiB
license, name, description, version, type, risk_level, status, disable-model-invocation, tags, metadata, market
| license | name | description | version | type | risk_level | status | disable-model-invocation | tags | metadata | market | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Anthropic Source Available License | pptx | Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions "deck," "slides," "presentation," or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill. Use when 用户提到 PPT、演示文稿、幻灯片、演讲稿、汇报材料、 pptx、创建演示、编辑幻灯片。 | 1.0.5 | procedural | low | enabled | true |
|
|
|
pptx skill
L0: One-Sentence Summary
Create, edit, and process PowerPoint presentations (.pptx), with support for template editing and creation from scratch.
L1: Overview and Use Cases
Capability Description
pptx is a Procedural Skill providing full PowerPoint presentation processing capabilities. It supports creating presentations from scratch via pptxgenjs (Node.js), editing existing templates by unpacking XML, plus content extraction and visual quality checks.
Use Cases
- The user needs to create a new presentation (briefing materials, pitch deck, etc.)
- The user needs to edit or modify an existing .pptx file
- The user needs to extract text content from a .pptx file
- The user needs to convert a presentation to PDF or images
L2: Detailed Specification
Script Path Rule (mandatory)
The Python scripts bundled with this skill live inside the skill installation directory. You MUST use full paths when invoking them — never use bare relative paths.
The skill directory is provided by the <skill-dir> tag in the context. Prefix all scripts/ commands accordingly:
python "<skill-dir>/scripts/office/unpack.py" presentation.pptx unpacked/
python "<skill-dir>/scripts/office/pack.py" unpacked/ output.pptx
python "<skill-dir>/scripts/office/soffice.py" --headless --convert-to pdf output.pptx
python "<skill-dir>/scripts/thumbnail.py" presentation.pptx
NEVER run python scripts/office/unpack.py directly — that relative path does not exist in the user's working directory.
Prerequisites
Python 3 (required — needed when reading and editing existing PPTX)
Before running any Python script, check that Python is available:
python3 --version 2>/dev/null || python --version 2>/dev/null
If the command fails (Python is not available), you must stop and tell the user to install Python 3:
- macOS:
brew install python3, or download from https://www.python.org/downloads/ - Windows:
winget install Python.Python.3, or download from python.org (check "Add Python to PATH" during installation) - Linux (Debian/Ubuntu):
sudo apt install python3 python3-pip - Linux (Fedora/RHEL):
sudo dnf install python3 python3-pip
Note: Creating PPTX from scratch uses pptxgenjs (Node.js), and does not require Python.
For more detailed environment setup help: load the python-runtime skill for Python issues;
load the nodejs-runtime skill for Node.js (pptxgenjs) issues; load the dev-environment-setup skill for everything else (system tools / containers / WSL).
Python Package Dependencies
This skill's Python operations depend on the following packages (checked on demand):
markitdown[pptx]— PPTX content readingPillow— Thumbnail generation
Detection method:
python3 -c "import markitdown; import PIL" 2>/dev/null || echo "MISSING"
If missing, tell the user to install: pip install "markitdown[pptx]" Pillow
Output Rule
When you create or modify a .pptx file, you MUST tell the user the absolute path of the output file in your response. Example: "File saved to: /path/to/output.pptx"
Quick Reference
| Task | Guide |
|---|---|
| Read/analyze content | python -m markitdown presentation.pptx |
| Edit or create from template | Read editing.md |
| Create from scratch | Read pptxgenjs.md |
Reading Content
# Text extraction
python -m markitdown presentation.pptx
# Visual overview
python scripts/thumbnail.py presentation.pptx
# Raw XML
python scripts/office/unpack.py presentation.pptx unpacked/
Editing Workflow
Read editing.md for full details.
- Analyze template with
thumbnail.py - Unpack → manipulate slides → edit content → clean → pack
Creating from Scratch
Read pptxgenjs.md for full details.
Use when no template or reference presentation is available.
Design Ideas
Don't create boring slides. Plain bullets on a white background won't impress anyone. Consider ideas from this list for each slide.
Before Starting
- Pick a bold, content-informed color palette: The palette should feel designed for THIS topic. If swapping your colors into a completely different presentation would still "work," you haven't made specific enough choices.
- Dominance over equality: One color should dominate (60-70% visual weight), with 1-2 supporting tones and one sharp accent. Never give all colors equal weight.
- Dark/light contrast: Dark backgrounds for title + conclusion slides, light for content ("sandwich" structure). Or commit to dark throughout for a premium feel.
- Commit to a visual motif: Pick ONE distinctive element and repeat it — rounded image frames, icons in colored circles, thick single-side borders. Carry it across every slide.
Color Palettes
Choose colors that match your topic — don't default to generic blue. Use these palettes as inspiration:
| Theme | Primary | Secondary | Accent |
|---|---|---|---|
| Midnight Executive | 1E2761 (navy) |
CADCFC (ice blue) |
FFFFFF (white) |
| Forest & Moss | 2C5F2D (forest) |
97BC62 (moss) |
F5F5F5 (cream) |
| Coral Energy | F96167 (coral) |
F9E795 (gold) |
2F3C7E (navy) |
| Warm Terracotta | B85042 (terracotta) |
E7E8D1 (sand) |
A7BEAE (sage) |
| Ocean Gradient | 065A82 (deep blue) |
1C7293 (teal) |
21295C (midnight) |
| Charcoal Minimal | 36454F (charcoal) |
F2F2F2 (off-white) |
212121 (black) |
| Teal Trust | 028090 (teal) |
00A896 (seafoam) |
02C39A (mint) |
| Berry & Cream | 6D2E46 (berry) |
A26769 (dusty rose) |
ECE2D0 (cream) |
| Sage Calm | 84B59F (sage) |
69A297 (eucalyptus) |
50808E (slate) |
| Cherry Bold | 990011 (cherry) |
FCF6F5 (off-white) |
2F3C7E (navy) |
For Each Slide
Every slide needs a visual element — image, chart, icon, or shape. Text-only slides are forgettable.
Layout options:
- Two-column (text left, illustration on right)
- Icon + text rows (icon in colored circle, bold header, description below)
- 2x2 or 2x3 grid (image on one side, grid of content blocks on other)
- Half-bleed image (full left or right side) with content overlay
Data display:
- Large stat callouts (big numbers 60-72pt with small labels below)
- Comparison columns (before/after, pros/cons, side-by-side options)
- Timeline or process flow (numbered steps, arrows)
Visual polish:
- Icons in small colored circles next to section headers
- Italic accent text for key stats or taglines
Typography
Choose an interesting font pairing — don't default to Arial. Pick a header font with personality and pair it with a clean body font.
| Header Font | Body Font |
|---|---|
| Georgia | Calibri |
| Arial Black | Arial |
| Calibri | Calibri Light |
| Cambria | Calibri |
| Trebuchet MS | Calibri |
| Impact | Arial |
| Palatino | Garamond |
| Consolas | Calibri |
| Element | Size |
|---|---|
| Slide title | 36-44pt bold |
| Section header | 20-24pt bold |
| Body text | 14-16pt |
| Captions | 10-12pt muted |
Spacing
- 0.5" minimum margins
- 0.3-0.5" between content blocks
- Leave breathing room—don't fill every inch
Avoid (Common Mistakes)
- Don't repeat the same layout — vary columns, cards, and callouts across slides
- Don't center body text — left-align paragraphs and lists; center only titles
- Don't skimp on size contrast — titles need 36pt+ to stand out from 14-16pt body
- Don't default to blue — pick colors that reflect the specific topic
- Don't mix spacing randomly — choose 0.3" or 0.5" gaps and use consistently
- Don't style one slide and leave the rest plain — commit fully or keep it simple throughout
- Don't create text-only slides — add images, icons, charts, or visual elements; avoid plain title + bullets
- Don't forget text box padding — when aligning lines or shapes with text edges, set
margin: 0on the text box or offset the shape to account for padding - Don't use low-contrast elements — icons AND text need strong contrast against the background; avoid light text on light backgrounds or dark text on dark backgrounds
- NEVER use accent lines under titles — these are a hallmark of AI-generated slides; use whitespace or background color instead
QA (Required)
Assume there are problems. Your job is to find them.
Your first render is almost never correct. Approach QA as a bug hunt, not a confirmation step. If you found zero issues on first inspection, you weren't looking hard enough.
Content QA
python -m markitdown output.pptx
Check for missing content, typos, wrong order.
When using templates, check for leftover placeholder text:
python -m markitdown output.pptx | grep -iE "xxxx|lorem|ipsum|this.*(page|slide).*layout"
If grep returns results, fix them before declaring success.
Visual QA
⚠️ USE DELEGATE TOOL — even for 2-3 slides. You've been staring at the code and will see what you expect, not what's there. Delegated agents have fresh eyes.
Convert slides to images (see Converting to Images), then use this prompt:
Visually inspect these slides. Assume there are issues — find them.
Look for:
- Overlapping elements (text through shapes, lines through words, stacked elements)
- Text overflow or cut off at edges/box boundaries
- Decorative lines positioned for single-line text but title wrapped to two lines
- Source citations or footers colliding with content above
- Elements too close (< 0.3" gaps) or cards/sections nearly touching
- Uneven gaps (large empty area in one place, cramped in another)
- Insufficient margin from slide edges (< 0.5")
- Columns or similar elements not aligned consistently
- Low-contrast text (e.g., light gray text on cream-colored background)
- Low-contrast icons (e.g., dark icons on dark backgrounds without a contrasting circle)
- Text boxes too narrow causing excessive wrapping
- Leftover placeholder content
For each slide, list issues or areas of concern, even if minor.
Read and analyze these images:
1. /path/to/slide-01.jpg (Expected: [brief description])
2. /path/to/slide-02.jpg (Expected: [brief description])
Report ALL issues found, including minor ones.
Verification Loop
- Generate slides → Convert to images → Inspect
- List issues found (if none found, look again more critically)
- Fix issues
- Re-verify affected slides — one fix often creates another problem
- Repeat until a full pass reveals no new issues
Do not declare success until you've completed at least one fix-and-verify cycle.
Converting to Images
Convert presentations to individual slide images for visual inspection:
python scripts/office/soffice.py --headless --convert-to pdf output.pptx
pdftoppm -jpeg -r 150 output.pdf slide
This creates slide-01.jpg, slide-02.jpg, etc.
To re-render specific slides after fixes:
pdftoppm -jpeg -r 150 -f N -l N output.pdf slide-fixed
Dependencies
pip install "markitdown[pptx]"- text extractionpip install Pillow- thumbnail gridsnpm install -g pptxgenjs- creating from scratch- LibreOffice (
soffice) - PDF conversion (auto-configured for sandboxed environments viascripts/office/soffice.py) - Poppler (
pdftoppm) - PDF to images