feat(skills): make skill scripts self-executing with uv hashbang
The Python scripts in mpi-pptx-translate, mpi-pdf-to-docx-conversion, and mpi-chinese-text-normalize previously required users to type manually. That is easy to forget and adds friction every time the skill runs. Switch all four scripts to a shebang, so they can be invoked directly: . The PEP 723 metadata blocks remain, so uv still installs the dependencies automatically. Also made the scripts executable and updated their usage messages and SKILL.md instructions to match the direct-execution style.
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
name: mpi-pptx-translate
|
||||
description: Translate PowerPoint files between Chinese and English — extract strings to YAML, translate, quality review, and write back with font-shrink + auto-fit for layout. Use only for .pptx files. Do not use for .ppt, Google Slides exports, or PDFs.
|
||||
category: productivity
|
||||
compatibility: Requires Python 3.9+ and uv. Dependencies (python-pptx, pyyaml) are declared in the scripts' /// script metadata.
|
||||
compatibility: Requires Python 3.9+ and uv. The scripts' shebang invokes `uv run --script`; dependencies (python-pptx, pyyaml) are declared in the `/// script` metadata.
|
||||
---
|
||||
|
||||
# PPTX Translation
|
||||
@@ -13,13 +13,13 @@ Translate `.pptx` files between Chinese and English. Covers the full pipeline: e
|
||||
|
||||
### 1. Extract strings to YAML
|
||||
|
||||
Run with `uv`:
|
||||
Run the script directly:
|
||||
|
||||
```bash
|
||||
uv run skills/mpi-pptx-translate/scripts/extract.py original.pptx strings.yaml
|
||||
skills/mpi-pptx-translate/scripts/extract.py original.pptx strings.yaml
|
||||
```
|
||||
|
||||
`uv` reads the `/// script` metadata block and installs `python-pptx` and `pyyaml` automatically. Produces YAML with entries:
|
||||
The shebang invokes `uv run --script`, which reads the `/// script` metadata block and installs `python-pptx` and `pyyaml` automatically. Produces YAML with entries:
|
||||
|
||||
```yaml
|
||||
- slide: 1
|
||||
@@ -65,7 +65,7 @@ Scan for:
|
||||
### 4. Write back with layout fixes
|
||||
|
||||
```bash
|
||||
uv run skills/mpi-pptx-translate/scripts/build.py strings.yaml original.pptx translated.pptx
|
||||
skills/mpi-pptx-translate/scripts/build.py strings.yaml original.pptx translated.pptx
|
||||
```
|
||||
|
||||
The script:
|
||||
@@ -89,5 +89,5 @@ The absorbed `pptx-translation` skill had alternate script names: `extract_pptx.
|
||||
|
||||
## Scripts
|
||||
|
||||
- `uv run skills/mpi-pptx-translate/scripts/extract.py` — extract strings from PPTX to YAML
|
||||
- `uv run skills/mpi-pptx-translate/scripts/build.py` — write translations back with font shrink + auto-fit
|
||||
- `skills/mpi-pptx-translate/scripts/extract.py` — extract strings from PPTX to YAML
|
||||
- `skills/mpi-pptx-translate/scripts/build.py` — write translations back with font shrink + auto-fit
|
||||
|
||||
Regular → Executable
+2
-1
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env -S uv run --script
|
||||
# /// script
|
||||
# requires-python = ">=3.9"
|
||||
# dependencies = [
|
||||
@@ -77,6 +78,6 @@ def build(yaml_path, src_path, out_path):
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 4:
|
||||
print("Usage: uv run build.py <strings.yaml> <input.pptx> <output.pptx>", file=sys.stderr)
|
||||
print("Usage: ./build.py <strings.yaml> <input.pptx> <output.pptx>", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
build(sys.argv[1], sys.argv[2], sys.argv[3])
|
||||
|
||||
Regular → Executable
+2
-1
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env -S uv run --script
|
||||
# /// script
|
||||
# requires-python = ">=3.9"
|
||||
# dependencies = [
|
||||
@@ -71,7 +72,7 @@ def extract(pptx_path):
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) != 3:
|
||||
print("Usage: uv run extract.py <input.pptx> <output.yaml>", file=sys.stderr)
|
||||
print("Usage: ./extract.py <input.pptx> <output.yaml>", file=sys.stderr)
|
||||
sys.exit(1)
|
||||
entries = extract(sys.argv[1])
|
||||
with open(sys.argv[2], "w") as f:
|
||||
|
||||
Reference in New Issue
Block a user