chore: import upstream snapshot with attribution
Deploy to GitHub Pages / deploy (push) Has been cancelled
Deploy to GitHub Pages / build (push) Has been cancelled

This commit is contained in:
wehub-resource-sync
2026-07-13 12:56:49 +08:00
commit 8ef9db2513
13533 changed files with 371727 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
custom:
- https://paypal.me/hugohe3
+91
View File
@@ -0,0 +1,91 @@
name: Bug Report
description: Report a problem with PPT Master
labels: ["bug"]
body:
- type: markdown
attributes:
value: |
Thanks for reporting! Please check the [FAQ](https://github.com/hugohe3/ppt-master/blob/main/docs/faq.md) first — your issue may already have a known solution.
- type: dropdown
id: area
attributes:
label: Problem area
options:
- SVG generation / layout
- PPTX export (svg_to_pptx.py)
- Post-processing (finalize_svg.py / total_md_split.py)
- Source conversion (PDF / DOCX / PPTX / URL to Markdown)
- Template (create-template / template selection)
- Image generation
- Installation / dependencies
- Other
validations:
required: true
- type: textarea
id: description
attributes:
label: What happened?
placeholder: Describe the problem clearly. Include error messages if any.
validations:
required: true
- type: textarea
id: steps
attributes:
label: Steps to reproduce
placeholder: |
1. ...
2. ...
3. ...
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
placeholder: What did you expect to happen?
validations:
required: false
- type: input
id: ai-tool
attributes:
label: AI editor / tool
placeholder: "e.g. Claude Code, VS Code Copilot, Cursor, Codex"
validations:
required: true
- type: input
id: model
attributes:
label: AI model
placeholder: "e.g. Claude Opus, Claude Sonnet, GPT-5.4, Gemini 3.1"
validations:
required: false
- type: input
id: os
attributes:
label: OS
placeholder: "e.g. macOS 15, Windows 11, Ubuntu 24.04"
validations:
required: false
- type: input
id: python-version
attributes:
label: Python version
placeholder: "e.g. 3.12.4"
validations:
required: false
- type: textarea
id: screenshots
attributes:
label: Screenshots or files
description: Attach screenshots, SVG files, or the generated PPTX if relevant.
validations:
required: false
+8
View File
@@ -0,0 +1,8 @@
blank_issues_enabled: false
contact_links:
- name: FAQ
url: https://github.com/hugohe3/ppt-master/blob/main/docs/faq.md
about: Check known solutions before opening an issue
- name: Discussions
url: https://github.com/hugohe3/ppt-master/discussions
about: Ask questions or share your work
@@ -0,0 +1,43 @@
name: Feature Request
description: Suggest an improvement or new feature
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: What problem does this solve?
placeholder: Describe the pain point or use case that motivates this request.
validations:
required: true
- type: textarea
id: solution
attributes:
label: Proposed solution
placeholder: How do you think this could be implemented? (optional but helpful)
validations:
required: false
- type: dropdown
id: area
attributes:
label: Area
options:
- Templates / styles
- Charts / visualization
- Export / post-processing
- Source conversion
- Image generation
- Workflow / UX
- Documentation
- Other
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
placeholder: Any workarounds you've tried or other approaches you've considered?
validations:
required: false
+109
View File
@@ -0,0 +1,109 @@
# Maintainer Playbook — PR triage
Internal reference for deciding what to merge or close, and how. This is a
maintainer aid, **not an outward promise** — contributor-facing rules live in
[CONTRIBUTING.md](../CONTRIBUTING.md) and the PR template. Precedent PR numbers
are cited so a close can point at a concrete prior decision.
## Decision order
Run a PR through these gates in order. **The first gate it fails is the close
reason** — no need to keep going.
1. **Foundational** — does it change an out-of-the-box setting we don't move?
2. **Capability boundary** — is it outside the "AI-generates-PPT" main line?
3. **Already-solved** — does the repo already do this, via an existing path or on `main`?
4. **Root cause & layer** — does it fix the actual cause, at the right layer?
5. **Evidence & process** — verified against real code, human-reviewed, focused, right entry point?
Passing all five is the bar for merge. Attitude (last section) applies to every
outcome, merge or close.
## The five gates
### A. Foundational non-negotiables
Not merged regardless of implementation quality — these are the project's
factory settings.
- **License stays MIT** — a deliberate founding choice, not changed midway (#203).
- **`pip + requirements.txt` is the only official install path** — no `uv`/`poetry` as a required dependency; multiple dependency sources are a lifetime sync cost that lands on the maintainer (#92, #116).
- **No CI / test frameworks / lint infra**; `tests/` and `test_*.py` are disallowed by `docs/rules/code-style.md` §11 (#200, #203).
- **No fixed numeric quotas** (`max_cards`/`max_bullets`/`max_table_rows` …) — density is governed by narrative rhythm and one primary focus per page (#203).
- **No `_CN` (or other translated) copies of governance docs** — they drift without a sync owner (#179).
- **AI generates a deck; it does not template-fill one** — DrawingML component reuse / native-diagram is outside the current direction (#153#168).
### B. Capability boundary
The project is a tool around the "AI generates PPT" main line, not an
everything-repo. "We know our limits" is itself the rule.
- **Post-processing is for compatibility, not quality smoothing** — we fix things that are *broken/unusable if not done* (AI-image size/format/alpha). Loudness normalization, kerning polish, etc. are quality smoothing and stay out (#194).
- **If a model/service doesn't work, switch it — don't make the project adapt to it.** A weak agent/provider is a capability gap on their side (#194; also the prompt-change rule).
- **Secondary opt-in features don't get to add heavy deps or change global defaults** — e.g. a narration sub-issue may not push tens-of-MB ffmpeg into core `requirements.txt` default-on (#194).
- **Fidelity yes, authoring deferred** — preserving existing links/structure is in scope; inventing new links/structure on the generation side waits until the core is stable (#155).
- **Personal / vertical preferences belong in the contributor's own copy** (`CLAUDE.md` / fork), so the shared skill stays general-purpose (#177).
### C. Already-solved / redundant
Verify current behavior before accepting a "fix" or "feature".
- **The capability already exists, docs were just unclear** — manual image gen was already covered by `Needs-Manual` (#88).
- **Already supported via an existing path** — Agnes runs under `IMAGE_BACKEND=openai`; a separate backend duplicates the compatibility layer (#202).
- **`main` already solves it more completely** — text-box width is handled at run level (#200).
- **Don't duplicate an existing abstraction/path** (#202, #88).
### D. Root cause & correct layer
- **Fix the root cause; don't paper over an attribute/state nobody consumes** — removing an unconsumed `width`/`height` requirement beat backfilling it (#221).
- **Checks/validation should guard only what downstream actually consumes** (#221).
- **Respect abstraction layers and the single confirmation point** — image strategy is a Step 4 (Eight Confirmations) decision; Step 5 is execution, not a place to re-decide (#88).
- **Take the valid signal, land it our way** — fold the real gain into the existing path instead of swapping an engine or adding a dependency (#207).
### E. Evidence & process
Mirrors CONTRIBUTING; these are close-on-sight.
- Every factual claim must be verified against this repo's actual code — AI-invented problem narratives are closed regardless of diff quality.
- Purely AI-generated, personally-unreviewed PRs are closed unmerged.
- **The PR template's three confirmation boxes: any one left unchecked = closed without review.**
- One PR, one thing; focused bug-fix PRs are prioritized (#206).
- **Prompt/instruction changes** (`SKILL.md`, `references/*.md`, `workflows/*.md`) require a prior agreed issue before a PR.
## How I close (applies to every outcome)
1. **Thank sincerely, and separate "not merging" from "your work is poor."** Name the gate (boundary / direction / already-solved), not the person.
2. **Take and credit the valid signal**`Co-authored-by`, land it in our structure (#155, #207).
3. **When it's timing/direction, leave the door open** — "we can reopen and restart from here" (#168).
4. **Redirect to the right entry point** — open an issue first, use existing config, keep it in your fork (#177, #202, #206).
## Canned closes
Reusable openers — adapt specifics, keep the tone above. Fill `<…>`.
**Unchecked confirmation box**
> Thanks for the PR. Closing per CONTRIBUTING — the template's three confirmation boxes must all be checked (personal review + claim verification, and the code-only/prompt-issue line), and `<box>` is unchecked. Once you've done `<X>` and can confirm it, feel free to reopen.
**Prompt change without a prior issue**
> Thanks. This edits prompt/instruction text (`<file>`), which per CONTRIBUTING needs a prior agreed issue before a PR — these files steer AI behavior deck-wide and sit near a fixed token budget, and restating a rule the docs already state rarely fixes a non-compliant agent. Please open an issue describing the failure so we can agree the direction first.
**Already supported via existing path**
> Thanks for the contribution. Closing because `<capability>` is already available through `<existing path>` — use `<config/command>`. A separate `<thing>` duplicates the existing path and runs against the current design in `<doc>`. If `<provider/case>` later needs behavior the existing path can't express, we can revisit with a focused change.
**Already solved on main**
> Thanks — the root-cause analysis is correct and matched ours. Closing because `main` already handles this, more completely, via `<mechanism>` in `<file>`. It just landed first through a different structure. Really appreciate the issue and the PR.
**Out of scope / capability boundary**
> Thanks, and for the careful write-up 🙏 After weighing it I'm not taking this direction — it's a capability-boundary call, not an implementation-quality one. `<Reason: quality-smoothing vs compatibility / disproportionate dependency cost / belongs on the provider side>`. If `<X>` blocks you, the more reliable path is `<user-side one-liner / switch provider>` rather than welding it into the default pipeline.
**Foundational setting won't change**
> Thanks for the PR, but this isn't something I'll merge: `<setting>` is a foundational choice from the start and won't change midway. `<one line why>`. Closing that outright.
**Personal / vertical → own copy**
> Thanks for your interest! This looks meant for your own workspace/fork — the best home is your project `CLAUDE.md` or a personal fork, so you get exactly the behavior you want without changing the shared skill (which stays general-purpose). Closing here, but please don't take it as discouragement — an issue is always a great way to float an idea first.
**Tiny fix → issue**
> Thanks! For a fix this small, an issue is usually faster for me to apply directly than a PR round-trip. Closing this, but the report is genuinely useful — mind opening an issue with `<detail>`?
**Not a hard no (timing/direction)**
> Thanks for all the work here 🙏 This sits outside the project's current focus rather than being a problem with the implementation. To keep the PR list manageable I'll close it as not-planned for now — not a hard no; when we revisit this direction we can reopen and restart from here.
+20
View File
@@ -0,0 +1,20 @@
<!-- Before opening a PR, read CONTRIBUTING.md in full — especially
"Before You Open a PR" and "AI-assisted PRs". -->
## What & why
<!-- What changed and why. For bug fixes: reproduction steps. -->
## Verification
<!-- What you ran locally and what you observed. -->
## Confirmations
<!-- All three boxes must be checked. Any unchecked box = the PR is closed without review. -->
**All three of the following must be checked. If any one is left unchecked, the PR is closed without review.**
- [ ] I have read [CONTRIBUTING.md](../CONTRIBUTING.md)
- [ ] I personally reviewed the full diff and verified every claim in this description against this repository's actual code — including that the problem is real here and the capability isn't already provided by an existing path or already fixed on `main` (purely AI-generated PRs without human review are closed unmerged)
- [ ] This PR is code-only, **or** it touches prompt/instruction text (`SKILL.md`, `references/*.md`, `workflows/*.md`, …) and was discussed and agreed in an issue first — link it here: #___
+58
View File
@@ -0,0 +1,58 @@
# GitHub Pages 部署工作流
# 自动将 PPT Master 示例项目部署到 GitHub Pages
name: Deploy to GitHub Pages
on:
# 推送到 main 分支时,仅网页相关文件变更才触发
push:
branches: ["main"]
paths:
- 'index.html'
- 'viewer.html'
- 'examples/**'
- '.github/workflows/deploy-pages.yml'
# 允许手动触发(不受路径限制)
workflow_dispatch:
# 设置 GITHUB_TOKEN 权限
permissions:
contents: read
pages: write
id-token: write
# 防止并发部署
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
# 构建任务
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v4
with:
enablement: true
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
# 上传整个仓库(包含 examples、templates 等)
path: '.'
# 部署任务
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4