diff --git a/CHANGELOG.md b/CHANGELOG.md index a9f28bf..4984928 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ Contributors add user-facing entries under `[Unreleased]` in the same PR. Mainta ### Fixed - **`novelty_extractor`**: Bundle tests mock fastembed embeddings so CI avoids HuggingFace downloads and rate limits (#159 follow-up). +- **`finance/wallet_screening`**: `WalletScreeningSkill.manifest` loads `manifest.yaml` from the bundle directory (#165). ### Changed - **CI**: GitHub Actions runs `pytest skills/` then `pytest tests/` after lint (bundle + framework/maintainer tests; closes #90) (#159). diff --git a/skills/finance/wallet_screening/manifest.yaml b/skills/finance/wallet_screening/manifest.yaml index 6a7feed..0bd7fd8 100644 --- a/skills/finance/wallet_screening/manifest.yaml +++ b/skills/finance/wallet_screening/manifest.yaml @@ -1,4 +1,4 @@ -name: wallet_screening +name: finance/wallet_screening version: 1.0.0 description: | A comprehensive crypto wallet screening tool. Checks Ethereum addresses against sanctions lists (OFAC, FBI, etc.) and known malicious contracts (Mixers, Scams). analyze transaction history for risk. diff --git a/skills/finance/wallet_screening/skill.py b/skills/finance/wallet_screening/skill.py index c71380e..c14db4c 100644 --- a/skills/finance/wallet_screening/skill.py +++ b/skills/finance/wallet_screening/skill.py @@ -3,6 +3,7 @@ import re import requests import glob +import yaml from typing import Any, Dict, List, Optional from datetime import datetime from skillware.core.base_skill import BaseSkill @@ -44,6 +45,10 @@ def __init__(self, config: Optional[Dict[str, Any]] = None): @property def manifest(self) -> Dict[str, Any]: + manifest_path = os.path.join(os.path.dirname(__file__), "manifest.yaml") + if os.path.exists(manifest_path): + with open(manifest_path, "r", encoding="utf-8") as f: + return yaml.safe_load(f) return {} def execute(self, params: Dict[str, Any]) -> Dict[str, Any]: diff --git a/skills/finance/wallet_screening/test_skill.py b/skills/finance/wallet_screening/test_skill.py index 9ec4fab..6ad5eb8 100644 --- a/skills/finance/wallet_screening/test_skill.py +++ b/skills/finance/wallet_screening/test_skill.py @@ -19,9 +19,10 @@ def manifest(): return yaml.safe_load(f) -def test_manifest_schema(manifest): - assert manifest["name"] == "wallet_screening" - assert "address" in manifest["parameters"]["properties"] +def test_skill_manifest_consistency(skill, manifest): + skill_manifest = skill.manifest + assert skill_manifest["name"] == manifest["name"] + assert skill_manifest["version"] == manifest["version"] def test_invalid_address(skill): diff --git a/tests/skills/finance/test_wallet_screening.py b/tests/skills/finance/test_wallet_screening.py index 1aff92d..358241c 100644 --- a/tests/skills/finance/test_wallet_screening.py +++ b/tests/skills/finance/test_wallet_screening.py @@ -1,4 +1,5 @@ from unittest.mock import patch, MagicMock + from skillware.core.loader import SkillLoader @@ -8,6 +9,15 @@ def get_skill(): return bundle["module"].WalletScreeningSkill() +def test_wallet_screening_manifest(): + bundle = SkillLoader.load_skill("finance/wallet_screening") + skill = bundle["module"].WalletScreeningSkill() + manifest = bundle["manifest"] + assert skill.manifest["name"] == manifest["name"] + assert skill.manifest["version"] == manifest["version"] + assert skill.manifest["issuer"] == manifest["issuer"] + + @patch("skills.finance.wallet_screening.skill.requests.get") def test_wallet_screening_success(mock_get): skill = get_skill()