Sources: extracted from two upstream archives (skill-repo, skills-main),
merged with the following policy:
- 15 broken symlinks (pointing to /Users/jameslee/.cc-switch/skills or
../../.agents/skills on a foreign machine) discarded
- 3 real name collisions with identical content (ai-pair, ifind-http-api,
zhipu-websearch) kept as one copy
- Functional overlaps deduped keeping the strongest variant:
- docx family: kept docx (official, full toolchain) + docx-cn
(GB/T 9704 Chinese official-document constants),
dropped docx_writer (no scripts, name collided with docx)
- humanizer family: kept humanizer-zh (6 zh reference docs),
dropped humanizer (en, redundant for CN workflow)
- Skills that only ran in a foreign environment removed:
ablemind-ops, app-publish, hlb-design-system, openclaw-adj-skill,
claude-driver
- alphapai excluded from this public repo because its SKILL.md hard-coded
live credentials
Result: 25 skills, 572 files, ~7.5 MB.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.7 KiB
2.7 KiB
Flow B — Job JSON 声明式编排
使用 PptEngine 引擎,通过一个 Job JSON 文件声明全部数据源、变换、幻灯片渲染逻辑。
端到端流程
Step 1: 编写 job.json
参考 job-schema.md 了解完整结构。
最小示例:
{
"template": {"path": "aim/aim03.pptx"},
"datasources": {},
"slides": [
{
"id": "cover",
"texts": [{"target": "标题", "value": "年度报告"}]
}
],
"output": {"path": "/tmp/output.pptx"}
}
Step 2: 验证(可选)
python scripts/run_job.py job.json --dry-run
输出: {"status": "ok", "message": "schema 验证通过", "slides": 1, "datasources": []}
Step 3: 渲染
python scripts/run_job.py job.json
输出: {"status": "ok", "output": "/tmp/output.pptx"}
引擎日志输出到 stderr。
Flow A vs Flow B 选择矩阵
| 维度 | Flow A (generate_ppt) | Flow B (run_job) |
|---|---|---|
| 配置格式 | config.json + CSV | job.json(含数据源声明) |
| 数据来源 | 本地 CSV | CSV/Excel/Tushare |
| 数据变换 | 手动预处理 | 声明式 ops |
| 图表创建 | 通过占位符替换 | 通过 ChartSpec |
| 文本替换 | 通过 text_data | 通过 SlideSpec.texts |
| 适用场景 | 模板已有占位符 | 从零编排 |
完整 job.json 示例
{
"template": {"path": "aim/aim03.pptx"},
"datasources": {
"ytd": {
"type": "csv",
"path": "/tmp/ytd_chart.csv"
}
},
"transforms": {
"ytd_sorted": {
"from": "ytd",
"ops": [
{"type": "sort", "sort_by": ["日期"]}
]
}
},
"slides": [
{
"id": "cover",
"texts": [
{"target": "标题", "value": "2024年度报告"},
{"target": "日期", "value": "2024-12-31"}
]
},
{
"id": "chart_page",
"charts": [
{
"mode": "update",
"target": "当年收益率走势图",
"source": "ytd_sorted",
"categories": "日期",
"series": [
{"key": "沪深300指数", "name": "沪深300", "axis": "secondary"},
{"key": "组合收益率", "name": "收益率", "axis": "primary"}
]
}
]
}
],
"output": {
"path": "/tmp/report.pptx",
"overwrite": true,
"add_metadata": true
}
}
已知限制
- 图表渲染分支不完整: engine.py 中的图表渲染仅传递基础参数(slide, data, shape_name),不传递 series_config/style_config/layout_config。复杂图表(双轴、自定义样式)建议用 Flow A。
- 图表渲染异常会被 catch 为 warning,不会导致整个任务失败。
run_job.py的--dry-run仅验证 JSON schema,不检查数据源是否可访问。