#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 技能入口脚本(模板) ==================== 【职责】 - 作为宿主调用时的统一 CLI 入口(子进程、终端、CI 均可)。 - 只做:参数解析、环境检查、分发到具体子命令;复杂逻辑放到同目录其它模块。 【如何扩展】 1. 在 main() 的 dispatch 字典中增加 "your_cmd": handler 项。 2. 实现 handler(argv) 或 handler();出错时打印 ERROR: 前缀信息并 sys.exit(非0)。 3. 在仓库根目录 SKILL.md「执行步骤」中补充示例命令。 【多宿主注意】 - 不要在本文件写死某一品牌宿主名。 - 路径与环境变量约定见 ../docs/RUNTIME.md;可选辅助代码见 ../optional/paths_snippet.py(需自行复制或 import 路径按项目调整)。 【编码】 Windows 下若宿主仍使用系统默认编码,可在宿主侧设置 UTF-8;本模板不强制改 sys.stdout(避免与宿主捕获冲突)。 """ from __future__ import annotations import argparse import json import sys from typing import Callable, Dict, List, Optional # 与 SKILL.md 中 metadata.openclaw.slug / metadata.skill.slug 保持一致 SKILL_SLUG = "toutiao-publisher" def cmd_version(_args: argparse.Namespace) -> int: """打印版本信息(与 SKILL.md frontmatter 中 version 应对齐,此处为占位)。""" payload = { "skill_slug": SKILL_SLUG, "version": "0.1.0", "entry": "skill_main.py", } print(json.dumps(payload, ensure_ascii=False)) return 0 def cmd_health(_args: argparse.Namespace) -> int: """ 健康检查:应快速、可离线(除非技能本身强依赖网络)。 失败时打印 ERROR: 前缀,便于宿主与自动化解析。 """ # 示例:检查 Python 版本(可按需改为检查关键依赖 import) if sys.version_info < (3, 9): print("ERROR:PYTHON_VERSION need >= 3.9", file=sys.stderr) return 1 print(f"OK skill={SKILL_SLUG} python={sys.version.split()[0]}") return 0 def build_parser() -> argparse.ArgumentParser: p = argparse.ArgumentParser( description="toutiao-publisher — Toutiao batch publish skill CLI (skeleton).", ) sub = p.add_subparsers(dest="command", required=True) sp = sub.add_parser("version", help="Print version JSON.") sp.set_defaults(handler=cmd_version) sp = sub.add_parser("health", help="Quick health check.") sp.set_defaults(handler=cmd_health) return p def main(argv: Optional[List[str]] = None) -> int: argv = argv if argv is not None else sys.argv[1:] parser = build_parser() args = parser.parse_args(argv) handler: Callable[[argparse.Namespace], int] = args.handler return handler(args) if __name__ == "__main__": raise SystemExit(main())