gen-inventory.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. #!/usr/bin/env python3
  2. """重生成 inventory (剔除 ffmpeg/qiwei 后) + 更新文档描述"""
  3. import os, json, datetime
  4. BASE = '/opt/data/projects/fmode-skillhub/skills'
  5. # 删除旧的 inventory 保留目录
  6. all_skills = sorted(os.listdir(BASE))
  7. all_skills = [s for s in all_skills if os.path.isdir(os.path.join(BASE, s))]
  8. inventory = {
  9. "name": "fmode-skillhub",
  10. "version": "0.2.0",
  11. "generatedAt": datetime.datetime.now().isoformat(),
  12. "format": "esm",
  13. "architecture": "纯接口驱动: 子技能只依赖公开HTTP接口+用户token(env)+agent原生工具, 不依赖任何需另行安装的软件/本地二进制",
  14. "skills": [],
  15. }
  16. for name in all_skills:
  17. full = os.path.join(BASE, name)
  18. slug=version=level=summary=""
  19. try:
  20. md = open(os.path.join(full,'SKILL.md'),encoding='utf-8').read()
  21. fm = md.split('---')[1]
  22. for line in fm.split('\n'):
  23. if line.startswith('slug:'): slug = line.split(':',1)[1].strip()
  24. if line.startswith('version:'): version = line.split(':',1)[1].strip()
  25. if line.startswith('level:'): level = line.split(':',1)[1].strip()
  26. if line.startswith('description:'): summary = line.split(':',1)[1].strip()[:60]
  27. except: pass
  28. inventory["skills"].append({"name":name,"slug":slug or f"fmode-skill-{name}","version":version,"level":level,"summary":summary})
  29. with open(os.path.join(BASE,'inventory.json'),'w',encoding='utf-8') as f:
  30. json.dump(inventory, f, ensure_ascii=False, indent=2)
  31. print(f"✅ inventory.json 更新: {len(inventory['skills'])} 个子技能")
  32. for s in inventory['skills']:
  33. print(f" {s['name']} [{s['level']}] v{s['version']}")