feat: publish workphone SDK deployment and API docs
This commit is contained in:
78
sdk/scripts/skill_registry_audit.py
Normal file
78
sdk/scripts/skill_registry_audit.py
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
"""校验中台 Skill 注册表与设备端 Skill 类 public method 对齐"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import inspect
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
from pathlib import Path
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
sys.path.insert(0, str(ROOT / "app"))
|
||||
sys.path.insert(0, str(ROOT / "agent"))
|
||||
|
||||
from services.brain_skill_registry import DEVICE_EXECUTABLE_SCRIPTS, SKILL_REGISTRY, flatten_actions # noqa: E402
|
||||
|
||||
SKIP_METHODS = frozenset({
|
||||
"execute_compound_task", "send_message_with_vision", "send_message_with_search",
|
||||
"get_current_screen_info",
|
||||
})
|
||||
|
||||
|
||||
def _public_methods(cls) -> set[str]:
|
||||
return {
|
||||
n for n, m in inspect.getmembers(cls, predicate=inspect.isfunction)
|
||||
if not n.startswith("_") and n not in SKIP_METHODS
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
from skills import get_skill # noqa: WPS433
|
||||
|
||||
missing_on_device: list[str] = []
|
||||
extra_on_device: list[str] = []
|
||||
ok = 0
|
||||
|
||||
for script in sorted(DEVICE_EXECUTABLE_SCRIPTS):
|
||||
registry_actions = set(flatten_actions(script))
|
||||
try:
|
||||
cls = get_skill(script)
|
||||
except ImportError as e:
|
||||
print(f"❌ {script}: 无法加载 Skill 类: {e}")
|
||||
return 1
|
||||
device_actions = _public_methods(cls)
|
||||
for action in sorted(registry_actions):
|
||||
if action not in device_actions:
|
||||
missing_on_device.append(f"{script}.{action}")
|
||||
else:
|
||||
ok += 1
|
||||
for action in sorted(device_actions - registry_actions):
|
||||
extra_on_device.append(f"{script}.{action}")
|
||||
|
||||
report = {
|
||||
"timestamp": time.strftime("%Y-%m-%dT%H:%M:%S"),
|
||||
"registry_actions_checked": ok,
|
||||
"missing_on_device": missing_on_device,
|
||||
"extra_on_device_not_in_registry": extra_on_device,
|
||||
"complete": len(missing_on_device) == 0,
|
||||
}
|
||||
out = ROOT / "tmp" / f"skill_registry_audit_{int(time.time())}.json"
|
||||
out.parent.mkdir(parents=True, exist_ok=True)
|
||||
out.write_text(json.dumps(report, ensure_ascii=False, indent=2), encoding="utf-8")
|
||||
|
||||
print(f"registry 校验 action 数: {ok}")
|
||||
print(f"设备缺失: {len(missing_on_device)}")
|
||||
print(f"注册表未收录(设备有): {len(extra_on_device)}")
|
||||
if missing_on_device:
|
||||
print("缺失示例:", missing_on_device[:10])
|
||||
if extra_on_device:
|
||||
print("未收录示例:", extra_on_device[:10])
|
||||
print("完整对齐:", "✅" if report["complete"] else "❌")
|
||||
print("报告:", out)
|
||||
return 0 if report["complete"] else 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user