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