sn-da-excel-workflow
Excel 数据分析多步编排器。覆盖:(1) 读取多 Sheet Excel 文件并统计行数,(2) 大文件检测(≥10k 行自动 Parquet 优化),(3) 数据清洗(缺失值、文本标准化、无效字符),(4) 条件筛选与分类提取,(5) 跨 Sheet 统计聚合,(6) 导出 Excel/CSV…
Creative-mode PPT pipeline. One full-page 16:9 PNG per slide. LLM / VLM calls go through sn-ppt-standard/lib/model_client.py (shared thin client). Text-to-image (the actual png rendering) goes through sn-image-base/scripts/sn_agent_runner.py. Falls back to web image search when
$ npx -y skills add OpenSenseNova/SenseNova-Skills --skill sn-ppt-creative --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/sn-ppt-creativeContext preview
The summary Claude sees to decide when to auto-load this skill.
Creative-mode PPT pipeline. One full-page 16:9 PNG per slide. LLM / VLM calls go through sn-ppt-standard/lib/model_client.py (shared thin client). Text-to-image (the actual png rendering) goes through sn-image-base/scripts/sn_agent_runner.py. Falls back to web image search when
name: sn-ppt-creative description: | Creative-mode PPT pipeline. One full-page 16:9 PNG per slide. LLM / VLM calls go through sn-ppt-standard/lib/model_client.py (shared thin client). Text-to-image (the actual png rendering) goes through sn-image-base/scripts/sn_agent_runner.py. Falls back to web image search when T2I generation fails. Expects task_pack.json + info_pack.json already written by sn-ppt-entry. metadata: project: SenseNova-Skills tier: 1 category: scene user_visible: false triggers: - "sn-ppt-creative"
> **⚠️ This skill must be invoked through `/skill sn-ppt-entry`.** Never start here directly — the entry skill collects parameters and writes `task_pack.json` + `info_pack.json` that this skill requires. If you arrived here without those files, stop and tell the user to enter via `/skill sn-ppt-entry` or "生成 PPT".
| Kind | Backend | |---|---| | LLM (text) | `$PPT_STANDARD_DIR/lib/model_client.py` → `llm(sys, user)` | | VLM (image understanding) | `$PPT_STANDARD_DIR/lib/model_client.py` → `vlm(sys, user, images)` | | T2I (image generation) | `$SN_IMAGE_BASE/scripts/sn_agent_runner.py sn-image-generate` |
Never mix — LLM / VLM through sn-image-base, or T2I through model_client — both violate policy.
Any missing → stop and tell user to enter via `/skill sn-ppt-entry`.
`sn-ppt-entry` starts the generation progress WebUI after `task_pack.json` / `info_pack.json` are written. During creative-mode generation, publish progress with the shared writer from `sn-ppt-standard`:
P="python3 $PPT_STANDARD_DIR/scripts/progress_event.py" $P --deck-dir <deck_dir> --stage creative-style --status running $P --deck-dir <deck_dir> --stage creative-style --status ok --artifact style_spec.md $P --deck-dir <deck_dir> --stage creative-outline --status running $P --deck-dir <deck_dir> --stage creative-outline --status ok --artifact outline.json $P --deck-dir <deck_dir> --stage creative-prompt --page N --status running $P --deck-dir <deck_dir> --stage creative-prompt --page N --status ok $P --deck-dir <deck_dir> --stage creative-render --page N --status running $P --deck-dir <deck_dir> --stage creative-render --page N --status ok $P --deck-dir <deck_dir> --stage export --status running $P --deck-dir <deck_dir> --stage export --status ok
On failure, write the same stage with `--status failed --error "<short reason>"` before moving on or aborting. On native Windows, use `python` if `python3` is unavailable.
python3 $SKILL_DIR/scripts/resume_scan.py --deck-dir <deck_dir>
# => {"style_spec_done": bool, "outline_done": bool, "pptx_done": bool,
# "pages": [{"page_no": 1, "action": "skip|render_only|full"}, ...]}Dispatch:
| Manifest | Do | |---|---| | `style_spec_done == false` | Run Stage 2 | | `outline_done == false` | Run Stage 3 | | per-page `action == "full"` | Run Stage 4.1 + 4.2 | | per-page `action == "render_only"` | Run Stage 4.2 only (prompt.txt already on disk) | | per-page `action == "skip"` | Skip | | `pptx_done == false` (all pages done or failed) | Run Stage 5 |
One independent exec tool_call. Two branches based on reference images.
**Branch A (no ref images, or all missing on disk)** — use `model_client.llm`:
python3 -c "
import sys, pathlib, json
sys.path.insert(0, '$PPT_STANDARD_DIR/lib')
from model_client import llm
deck = pathlib.Path('<deck_dir>')
tp = json.loads((deck / 'task_pack.json').read_text())
ip = json.loads((deck / 'info_pack.json').read_text())
sys_prompt = open('$SKILL_DIR/prompts/style_from_query.md').read()
user_prompt = json.dumps({
'params': tp['params'],
'query': ip.get('user_query'),
'digest': ip.get('document_digest'),
}, ensure_ascii=False)
md = llm(sys_prompt, user_prompt)
(deck / 'style_spec.md').write_text(md, encoding='utf-8')
print('style_spec.md ok')
"**Branch B (≥1 reference image on disk)** — use `model_client.vlm`:
python3 -c "
import sys, pathlib, json
sys.path.insert(0, '$PPT_STANDARD_DIR/lib')
from model_client import vlm
deck = pathlib.Path('<deck_dir>')
ip = json.loads((deck / 'info_pack.json').read_text())
tp = json.loads((deck / 'task_pack.json').read_text())
refs = [p for p in (ip.get('user_assets') or {}).get('reference_images', []) if pathlib.Path(p).exists()]
sys_prompt = open('$SKILL_DIR/prompts/style_from_image.md').read()
user_prompt = f'PPT 主题/参数: {json.dumps(tp[\"params\"], ensure_ascii=False)}\nuser_query: {ip.get(\"user_query\") or \"\"}'
md = vlm(sys_prompt, user_prompt, images=refs)
(deck / 'style_spec.md').write_text(md, encoding='utf-8')
print(f'style_spec.md ok (from {len(refs)} ref images)')
"If `user_assets.reference_images` is non-empty but **all** paths missing on disk: fall through to Branch A and prepend a line `reference_images_missing: <original paths>` at the top of style_spec.md.
The SenseNova model family plugs directly into agent runtimes such as OpenClaw and hermes-agent, with the skills in this repository extending the models with concrete, end-to-end office capabilities.
Repo: OpenSenseNova/SenseNova-Skills
Excel 数据分析多步编排器。覆盖:(1) 读取多 Sheet Excel 文件并统计行数,(2) 大文件检测(≥10k 行自动 Parquet 优化),(3) 数据清洗(缺失值、文本标准化、无效字符),(4) 条件筛选与分类提取,(5) 跨 Sheet 统计聚合,(6) 导出 Excel/CSV…
当Excel文件总行数超过1万行时,通过转换为Parquet格式提升读取性能,提取目标指标并计算最大值,最后将结果输出为Excel并对特定行进行高亮标注。
根据Excel总行数自动切换Parquet加速读取,计算特定维度的时间序列平均值,并使用openpyxl输出带有条件格式(如低于均值标绿)和自定义样式的分析报告。
根据数据规模动态选择处理策略,对多表数据进行合并、统计筛选,并利用 openpyxl 实现关键指标的自动化样式高亮与格式化导出。