skillware 0.5.2__tar.gz → 0.5.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {skillware-0.5.2/skillware.egg-info → skillware-0.5.3}/PKG-INFO +18 -16
- {skillware-0.5.2 → skillware-0.5.3}/README.md +16 -15
- {skillware-0.5.2 → skillware-0.5.3}/pyproject.toml +3 -1
- {skillware-0.5.2 → skillware-0.5.3}/skills/creative/bg_remover/card.json +1 -1
- {skillware-0.5.2 → skillware-0.5.3}/skills/creative/bg_remover/manifest.yaml +1 -1
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/novelty_extractor/card.json +3 -2
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/novelty_extractor/manifest.yaml +1 -1
- skillware-0.5.3/skills/monitoring/kpi_gate/__init__.py +5 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/card.json +33 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/benchmarks_missing_ref.json +11 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/charter_floor_boundary.yaml +10 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/example_charter.yaml +19 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/example_snapshot.json +13 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/expected_findings.json +24 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/invalid_benchmarks_schema.json +9 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/invalid_charter_dependent_required.yaml +9 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/invalid_charter_schema.yaml +8 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/invalid_charter_unknown_denominator.yaml +9 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/invalid_charter_unknown_rule_metric.yaml +8 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/invalid_snapshot_schema.json +5 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/snapshot_empty_metrics.json +5 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/snapshot_floor_at_min.json +5 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/snapshot_floor_below_min.json +5 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/fixtures/snapshot_unknown_key.json +14 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/instructions.md +97 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/kb/benchmarks_demo.json +15 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/manifest.yaml +67 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/schemas/benchmarks.schema.json +25 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/schemas/metrics.schema.json +26 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/schemas/policy.schema.json +52 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/skill.py +565 -0
- skillware-0.5.3/skills/monitoring/kpi_gate/test_skill.py +491 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/card.json +1 -1
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/manifest.yaml +1 -1
- {skillware-0.5.2 → skillware-0.5.3/skillware.egg-info}/PKG-INFO +18 -16
- {skillware-0.5.2 → skillware-0.5.3}/skillware.egg-info/SOURCES.txt +26 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware.egg-info/requires.txt +2 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_discovery.py +31 -1
- skillware-0.5.3/tests/test_examples_smoke.py +166 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_loader.py +49 -1
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_version_policy.py +1 -1
- {skillware-0.5.2 → skillware-0.5.3}/LICENSE +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/MANIFEST.in +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/setup.cfg +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/mica_module/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/mica_module/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/mica_module/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/mica_module/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/mica_module/mica_corpus.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/mica_module/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/mica_module/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/pii_masker/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/pii_masker/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/pii_masker/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/pii_masker/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/pii_masker/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/pii_masker/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/tos_evaluator/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/tos_evaluator/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/tos_evaluator/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/tos_evaluator/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/tos_evaluator/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/compliance/tos_evaluator/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/creative/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/creative/bg_remover/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/creative/bg_remover/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/creative/bg_remover/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/creative/bg_remover/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/novelty_extractor/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/novelty_extractor/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/novelty_extractor/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/novelty_extractor/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/synthetic_generator/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/synthetic_generator/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/synthetic_generator/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/synthetic_generator/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/synthetic_generator/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/data_engineering/synthetic_generator/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/abis.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/config.yaml.example +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/data/addressbook.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/data/chains.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/data/tokens.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/defi/evm_tx_handler/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/dev_tools/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/dev_tools/issue_resolver/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/dev_tools/issue_resolver/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/dev_tools/issue_resolver/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/dev_tools/issue_resolver/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/dev_tools/issue_resolver/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/dev_tools/issue_resolver/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/dev_tools/issue_resolver/workflow.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/uk_companies_house_handler/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/uk_companies_house_handler/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/uk_companies_house_handler/data/api_index.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/uk_companies_house_handler/data/terminology_map.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/uk_companies_house_handler/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/uk_companies_house_handler/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/uk_companies_house_handler/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/uk_companies_house_handler/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/data/entities.ftm.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/data/malicious_scs_2025.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/data/normalized_fbi_lazarus_20250722_180019.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/data/normalized_israel_nbctf_20250722_180019.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/data/normalized_uniswap_trm.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/maintenance/normalization_tool.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/maintenance/normalize_uniswap_trm.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/finance/wallet_screening/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/token_limiter/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/token_limiter/budget.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/token_limiter/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/token_limiter/data/model_pricing.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/token_limiter/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/token_limiter/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/token_limiter/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/monitoring/token_limiter/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/addressbook.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/attachments.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/data/.gitignore +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/data/addressbook.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/data/config.yaml.example +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/file_ref.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/mail.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/gmail_handler/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/pdf_form_filler/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/pdf_form_filler/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/pdf_form_filler/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/pdf_form_filler/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/pdf_form_filler/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/pdf_form_filler/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/office/pdf_form_filler/utils.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/optimization/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/optimization/prompt_rewriter/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/optimization/prompt_rewriter/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/optimization/prompt_rewriter/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/optimization/prompt_rewriter/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/optimization/prompt_rewriter/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/optimization/prompt_rewriter/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/deceptive_ui_guard/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/deceptive_ui_guard/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/deceptive_ui_guard/guard.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/deceptive_ui_guard/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/deceptive_ui_guard/kb/deception_lexicon.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/deceptive_ui_guard/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/deceptive_ui_guard/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/deceptive_ui_guard/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/firewall.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/kb/confusables.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/kb/injection_patterns.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/security/prompt_injection_firewall/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/card.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/constraints.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/crisis_gate.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/instructions.md +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/kb/corpus.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/kb/crisis_resources.json +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/kb/hard_constraints.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/kb_provider.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/manifest.yaml +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/resources.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skills/wellness/mental_coach/test_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/__main__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/branding/skillware_logo.png +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/cli.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/cli_mail.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/__init__.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/base_skill.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/config.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/discovery.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/env.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/extras.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/loader.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/mail_config.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/core/ui_schema.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware/version_policy.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware.egg-info/dependency_links.txt +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware.egg-info/entry_points.txt +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/skillware.egg-info/top_level.txt +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_card_ui_schema.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_cli.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_config.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_extras_sync.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_github_labels.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_mail_config.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_registry_docs.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_registry_identity.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_requirements_check.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_skill_issuer.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_ui_schema.py +0 -0
- {skillware-0.5.2 → skillware-0.5.3}/tests/test_validate_params.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skillware
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.3
|
|
4
4
|
Summary: A framework for modular, self-contained AI skills.
|
|
5
5
|
Author-email: ARPA Hellenic Logical Systems <skillware-os@arpacorp.net>
|
|
6
6
|
License: MIT License
|
|
@@ -105,6 +105,7 @@ Requires-Dist: web3>=6.0.0; extra == "defi-evm-tx-handler"
|
|
|
105
105
|
Provides-Extra: dev-tools-issue-resolver
|
|
106
106
|
Provides-Extra: finance-uk-companies-house-handler
|
|
107
107
|
Provides-Extra: finance-wallet-screening
|
|
108
|
+
Provides-Extra: monitoring-kpi-gate
|
|
108
109
|
Provides-Extra: monitoring-token-limiter
|
|
109
110
|
Provides-Extra: office-gmail-handler
|
|
110
111
|
Provides-Extra: office-pdf-form-filler
|
|
@@ -170,10 +171,13 @@ The AI ecosystem is fragmented. Developers often re-invent tool definitions, sys
|
|
|
170
171
|
|
|
171
172
|
A **Skill** in this framework provides everything an Agent needs to master a domain:
|
|
172
173
|
|
|
173
|
-
1. **
|
|
174
|
-
2. **
|
|
175
|
-
3. **
|
|
176
|
-
4. **
|
|
174
|
+
1. **Contract**: Constitution, safety boundaries, and typed I/O baked into the bundle.
|
|
175
|
+
2. **Effect**: Executable Python so agents run real work, not guess it.
|
|
176
|
+
3. **Directive**: System instructions and cognitive maps so any host uses the capability as intended.
|
|
177
|
+
4. **Assurance**: Offline tests that Effect honors Contract before a skill joins the registry.
|
|
178
|
+
5. **Interface**: Standardized tool schemas for any LLM or agent runtime.
|
|
179
|
+
|
|
180
|
+
Optional **Corpus**, **Reference**, and **Presentation** assets extend bundles when needed. Full reference: [Introduction — Skill anatomy](docs/introduction.md#skill-anatomy).
|
|
177
181
|
|
|
178
182
|
### Skill library
|
|
179
183
|
|
|
@@ -184,12 +188,10 @@ Browse capabilities by category in the [Skill library](docs/skills/README.md) or
|
|
|
184
188
|
```mermaid
|
|
185
189
|
flowchart LR
|
|
186
190
|
Registry[Registry] -->|Load| Loader[Loader]
|
|
187
|
-
Loader -->|Adapt|
|
|
188
|
-
Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
|
|
189
|
-
LogicalSystems -->|Tool Call| Host
|
|
191
|
+
Loader -->|Adapt| AnyHost([Any Host])
|
|
190
192
|
```
|
|
191
193
|
|
|
192
|
-
Install the registry once. Skillware loads a bundle
|
|
194
|
+
Install the registry once. Skillware loads a bundle, adapts it to your host's tool format, and your app runs the agent loop (Gemini, Claude, Ollama, custom scripts, …). For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
|
|
193
195
|
|
|
194
196
|
## Architecture
|
|
195
197
|
|
|
@@ -204,11 +206,11 @@ Skillware/
|
|
|
204
206
|
├── skills/ # Skill Registry
|
|
205
207
|
│ └── category/ # Domain boundaries (e.g., finance)
|
|
206
208
|
│ └── skill_name/ # The Skill bundle
|
|
207
|
-
│ ├── manifest.yaml #
|
|
208
|
-
│ ├── skill.py #
|
|
209
|
-
│ ├── instructions.md #
|
|
210
|
-
│ ├── card.json #
|
|
211
|
-
│ └── test_skill.py #
|
|
209
|
+
│ ├── manifest.yaml # Contract: schema, constitution, issuer
|
|
210
|
+
│ ├── skill.py # Effect: deterministic execution
|
|
211
|
+
│ ├── instructions.md # Directive: host guidance
|
|
212
|
+
│ ├── card.json # Presentation (optional)
|
|
213
|
+
│ └── test_skill.py # Assurance (required for registry skills)
|
|
212
214
|
├── skillware/ # Core Framework Package
|
|
213
215
|
│ ├── cli.py # Command-line interface
|
|
214
216
|
│ └── core/
|
|
@@ -315,7 +317,7 @@ skill = skill_bundle["class"](
|
|
|
315
317
|
# 2. Client & Tool Setup
|
|
316
318
|
client = genai.Client()
|
|
317
319
|
tool = SkillLoader.to_gemini_tool(skill_bundle) # The "Adapter"
|
|
318
|
-
system_instruction = skill_bundle['instructions'] #
|
|
320
|
+
system_instruction = skill_bundle['instructions'] # Directive
|
|
319
321
|
|
|
320
322
|
# 3. Agent Loop
|
|
321
323
|
response = client.models.generate_content(
|
|
@@ -392,7 +394,7 @@ PyPI download counts show how often `skillware` is installed from the package in
|
|
|
392
394
|
|
|
393
395
|
<a href="https://doi.org/10.5281/zenodo.21552745"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.21552745-c7d2fe?style=flat-square" alt="DOI 10.5281/zenodo.21552745"></a>
|
|
394
396
|
|
|
395
|
-
If you use Skillware in research or products, please cite it using [CITATION.cff](CITATION.cff) (GitHub **Cite this repository**) or the Zenodo **concept DOI** above. That DOI is stable across releases. For reproducibility, also record the **Skillware version** you used (PyPI or Git tag, for example `0.5.
|
|
397
|
+
If you use Skillware in research or products, please cite it using [CITATION.cff](CITATION.cff) (GitHub **Cite this repository**) or the Zenodo **concept DOI** above. That DOI is stable across releases. For reproducibility, also record the **Skillware version** you used (PyPI or Git tag, for example `0.5.3`).
|
|
396
398
|
|
|
397
399
|
## Contact
|
|
398
400
|
|
|
@@ -41,10 +41,13 @@ The AI ecosystem is fragmented. Developers often re-invent tool definitions, sys
|
|
|
41
41
|
|
|
42
42
|
A **Skill** in this framework provides everything an Agent needs to master a domain:
|
|
43
43
|
|
|
44
|
-
1. **
|
|
45
|
-
2. **
|
|
46
|
-
3. **
|
|
47
|
-
4. **
|
|
44
|
+
1. **Contract**: Constitution, safety boundaries, and typed I/O baked into the bundle.
|
|
45
|
+
2. **Effect**: Executable Python so agents run real work, not guess it.
|
|
46
|
+
3. **Directive**: System instructions and cognitive maps so any host uses the capability as intended.
|
|
47
|
+
4. **Assurance**: Offline tests that Effect honors Contract before a skill joins the registry.
|
|
48
|
+
5. **Interface**: Standardized tool schemas for any LLM or agent runtime.
|
|
49
|
+
|
|
50
|
+
Optional **Corpus**, **Reference**, and **Presentation** assets extend bundles when needed. Full reference: [Introduction — Skill anatomy](docs/introduction.md#skill-anatomy).
|
|
48
51
|
|
|
49
52
|
### Skill library
|
|
50
53
|
|
|
@@ -55,12 +58,10 @@ Browse capabilities by category in the [Skill library](docs/skills/README.md) or
|
|
|
55
58
|
```mermaid
|
|
56
59
|
flowchart LR
|
|
57
60
|
Registry[Registry] -->|Load| Loader[Loader]
|
|
58
|
-
Loader -->|Adapt|
|
|
59
|
-
Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
|
|
60
|
-
LogicalSystems -->|Tool Call| Host
|
|
61
|
+
Loader -->|Adapt| AnyHost([Any Host])
|
|
61
62
|
```
|
|
62
63
|
|
|
63
|
-
Install the registry once. Skillware loads a bundle
|
|
64
|
+
Install the registry once. Skillware loads a bundle, adapts it to your host's tool format, and your app runs the agent loop (Gemini, Claude, Ollama, custom scripts, …). For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
|
|
64
65
|
|
|
65
66
|
## Architecture
|
|
66
67
|
|
|
@@ -75,11 +76,11 @@ Skillware/
|
|
|
75
76
|
├── skills/ # Skill Registry
|
|
76
77
|
│ └── category/ # Domain boundaries (e.g., finance)
|
|
77
78
|
│ └── skill_name/ # The Skill bundle
|
|
78
|
-
│ ├── manifest.yaml #
|
|
79
|
-
│ ├── skill.py #
|
|
80
|
-
│ ├── instructions.md #
|
|
81
|
-
│ ├── card.json #
|
|
82
|
-
│ └── test_skill.py #
|
|
79
|
+
│ ├── manifest.yaml # Contract: schema, constitution, issuer
|
|
80
|
+
│ ├── skill.py # Effect: deterministic execution
|
|
81
|
+
│ ├── instructions.md # Directive: host guidance
|
|
82
|
+
│ ├── card.json # Presentation (optional)
|
|
83
|
+
│ └── test_skill.py # Assurance (required for registry skills)
|
|
83
84
|
├── skillware/ # Core Framework Package
|
|
84
85
|
│ ├── cli.py # Command-line interface
|
|
85
86
|
│ └── core/
|
|
@@ -186,7 +187,7 @@ skill = skill_bundle["class"](
|
|
|
186
187
|
# 2. Client & Tool Setup
|
|
187
188
|
client = genai.Client()
|
|
188
189
|
tool = SkillLoader.to_gemini_tool(skill_bundle) # The "Adapter"
|
|
189
|
-
system_instruction = skill_bundle['instructions'] #
|
|
190
|
+
system_instruction = skill_bundle['instructions'] # Directive
|
|
190
191
|
|
|
191
192
|
# 3. Agent Loop
|
|
192
193
|
response = client.models.generate_content(
|
|
@@ -263,7 +264,7 @@ PyPI download counts show how often `skillware` is installed from the package in
|
|
|
263
264
|
|
|
264
265
|
<a href="https://doi.org/10.5281/zenodo.21552745"><img src="https://img.shields.io/badge/DOI-10.5281%2Fzenodo.21552745-c7d2fe?style=flat-square" alt="DOI 10.5281/zenodo.21552745"></a>
|
|
265
266
|
|
|
266
|
-
If you use Skillware in research or products, please cite it using [CITATION.cff](CITATION.cff) (GitHub **Cite this repository**) or the Zenodo **concept DOI** above. That DOI is stable across releases. For reproducibility, also record the **Skillware version** you used (PyPI or Git tag, for example `0.5.
|
|
267
|
+
If you use Skillware in research or products, please cite it using [CITATION.cff](CITATION.cff) (GitHub **Cite this repository**) or the Zenodo **concept DOI** above. That DOI is stable across releases. For reproducibility, also record the **Skillware version** you used (PyPI or Git tag, for example `0.5.3`).
|
|
267
268
|
|
|
268
269
|
## Contact
|
|
269
270
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "skillware"
|
|
7
|
-
version = "0.5.
|
|
7
|
+
version = "0.5.3"
|
|
8
8
|
description = "A framework for modular, self-contained AI skills."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [
|
|
@@ -140,6 +140,8 @@ finance_uk_companies_house_handler = []
|
|
|
140
140
|
|
|
141
141
|
finance_wallet_screening = []
|
|
142
142
|
|
|
143
|
+
monitoring_kpi_gate = []
|
|
144
|
+
|
|
143
145
|
monitoring_token_limiter = []
|
|
144
146
|
|
|
145
147
|
office_gmail_handler = []
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "KPI Gate",
|
|
3
|
+
"description": "Deterministic business-KPI gate: metrics snapshot vs policy charter with fail-closed findings.",
|
|
4
|
+
"issuer": {
|
|
5
|
+
"name": "Masa",
|
|
6
|
+
"email": "masa88keith@gmail.com",
|
|
7
|
+
"github": "mrmasa88",
|
|
8
|
+
"org": "AO"
|
|
9
|
+
},
|
|
10
|
+
"icon": "gauge",
|
|
11
|
+
"color": "#0f766e",
|
|
12
|
+
"ui_schema": {
|
|
13
|
+
"type": "card",
|
|
14
|
+
"fields": [
|
|
15
|
+
{
|
|
16
|
+
"key": "status",
|
|
17
|
+
"label": "Status"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"key": "policy_id",
|
|
21
|
+
"label": "Policy"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"key": "benchmark_version",
|
|
25
|
+
"label": "Benchmark Version"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"key": "findings",
|
|
29
|
+
"label": "Findings"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
schema_version: 2
|
|
2
|
+
policy_id: floor_boundary_demo
|
|
3
|
+
metrics: [replies, reply_to_booking_rate_pct]
|
|
4
|
+
rules:
|
|
5
|
+
- id: BOOKING_CONVERSION_TRACKED
|
|
6
|
+
metric: reply_to_booking_rate_pct
|
|
7
|
+
check: {op: gte, threshold: 10}
|
|
8
|
+
severity: warning
|
|
9
|
+
requires: {denominator_metric: replies, min_denominator: 25,
|
|
10
|
+
granularity: weekly, reason_code: cohort_attribution_unavailable}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
schema_version: 2
|
|
2
|
+
policy_id: coaching_funnel_demo_v1
|
|
3
|
+
metrics: [outreach_sends, replies, bookings, lp_sessions, downloads,
|
|
4
|
+
download_rate_pct, reply_to_booking_rate_pct]
|
|
5
|
+
rules:
|
|
6
|
+
- id: NO_BOOKING
|
|
7
|
+
metric: bookings
|
|
8
|
+
check: {op: gte, threshold: 1}
|
|
9
|
+
severity: error
|
|
10
|
+
- id: DOWNLOAD_RATE_BELOW_DOCTRINE
|
|
11
|
+
metric: download_rate_pct
|
|
12
|
+
check: {op: gte, benchmark_ref: lead_magnet_download_rate_pct}
|
|
13
|
+
severity: warning
|
|
14
|
+
- id: BOOKING_CONVERSION_TRACKED
|
|
15
|
+
metric: reply_to_booking_rate_pct
|
|
16
|
+
check: {op: gte, threshold: 10}
|
|
17
|
+
severity: warning
|
|
18
|
+
requires: {denominator_metric: replies, min_denominator: 25,
|
|
19
|
+
granularity: weekly, reason_code: cohort_attribution_unavailable}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"period": {"start": "2026-08-17", "end": "2026-08-23", "granularity": "weekly"},
|
|
4
|
+
"metrics": {
|
|
5
|
+
"outreach_sends": 40,
|
|
6
|
+
"replies": 6,
|
|
7
|
+
"bookings": 0,
|
|
8
|
+
"lp_sessions": 180,
|
|
9
|
+
"downloads": 22,
|
|
10
|
+
"download_rate_pct": 12.2,
|
|
11
|
+
"reply_to_booking_rate_pct": 0
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"status": "completed",
|
|
3
|
+
"policy_id": "coaching_funnel_demo_v1",
|
|
4
|
+
"benchmark_version": "demo-1",
|
|
5
|
+
"findings": [
|
|
6
|
+
{
|
|
7
|
+
"finding": "NO_BOOKING",
|
|
8
|
+
"severity": "error",
|
|
9
|
+
"detail": {"metric": "bookings", "threshold": ">= 1", "observed": 0},
|
|
10
|
+
"action": "blocked — requires operator override"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"finding": "DOWNLOAD_RATE_BELOW_DOCTRINE",
|
|
14
|
+
"severity": "warning",
|
|
15
|
+
"detail": {"metric": "download_rate_pct", "threshold": ">= 25.0 (benchmark)", "observed": 12.2},
|
|
16
|
+
"action": "none — surfaced for the operator"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"state": "insufficient_data",
|
|
20
|
+
"detail": {"metric": "reply_to_booking_rate_pct"},
|
|
21
|
+
"reason": "cohort_attribution_unavailable"
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
schema_version: 2
|
|
2
|
+
policy_id: dependent_required_violation_demo
|
|
3
|
+
metrics: [replies, reply_to_booking_rate_pct]
|
|
4
|
+
rules:
|
|
5
|
+
- id: BOOKING_CONVERSION_TRACKED
|
|
6
|
+
metric: reply_to_booking_rate_pct
|
|
7
|
+
check: {op: gte, threshold: 10}
|
|
8
|
+
severity: warning
|
|
9
|
+
requires: {min_denominator: 25, reason_code: cohort_attribution_unavailable}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
schema_version: 2
|
|
2
|
+
policy_id: unknown_denominator_demo
|
|
3
|
+
metrics: [reply_to_booking_rate_pct]
|
|
4
|
+
rules:
|
|
5
|
+
- id: BOOKING_CONVERSION_TRACKED
|
|
6
|
+
metric: reply_to_booking_rate_pct
|
|
7
|
+
check: {op: gte, threshold: 10}
|
|
8
|
+
severity: warning
|
|
9
|
+
requires: {denominator_metric: replies, min_denominator: 25}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"period": {"start": "2026-08-17", "end": "2026-08-23", "granularity": "weekly"},
|
|
4
|
+
"metrics": {
|
|
5
|
+
"outreach_sends": 40,
|
|
6
|
+
"replies": 6,
|
|
7
|
+
"bookings": 0,
|
|
8
|
+
"lp_sessions": 180,
|
|
9
|
+
"downloads": 22,
|
|
10
|
+
"download_rate_pct": 12.2,
|
|
11
|
+
"reply_to_booking_rate_pct": 0,
|
|
12
|
+
"undeclared_extra_metric": 7
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Cognition Instructions: KPI Gate
|
|
2
|
+
|
|
3
|
+
You have access to the `monitoring/kpi_gate` tool.
|
|
4
|
+
|
|
5
|
+
This skill is a **deterministic, offline KPI gate**: a metrics snapshot plus a
|
|
6
|
+
policy charter (and optional versioned benchmark data) go in, structured
|
|
7
|
+
findings come out. `execute()` is a pure function with no network calls and no
|
|
8
|
+
side effects; identical input always returns identical output.
|
|
9
|
+
|
|
10
|
+
Limits: it is an auditor, not a data pipeline. It never fetches CRM, email, or
|
|
11
|
+
analytics data, never estimates missing values, and never optimizes thresholds.
|
|
12
|
+
|
|
13
|
+
## Agent-loop contract
|
|
14
|
+
|
|
15
|
+
- `error` finding → the host blocks the dependent action until an operator
|
|
16
|
+
override is recorded.
|
|
17
|
+
- `warning` finding → surface to the operator; never block on a warning.
|
|
18
|
+
- `insufficient_data` → treat the metric as absent. The host must not
|
|
19
|
+
substitute, estimate, or backfill a value.
|
|
20
|
+
|
|
21
|
+
## When to invoke
|
|
22
|
+
|
|
23
|
+
- Gating a scheduled action (send, publish, spend) on business-KPI health
|
|
24
|
+
- Auditing a periodic metrics snapshot against operator-declared thresholds
|
|
25
|
+
- Comparing observed metrics against versioned benchmark doctrine
|
|
26
|
+
|
|
27
|
+
Do not invoke it to collect metrics, to explain why a metric moved (no causal
|
|
28
|
+
inference), or to pick thresholds (no optimization).
|
|
29
|
+
|
|
30
|
+
## Inputs
|
|
31
|
+
|
|
32
|
+
- `metrics` (required): snapshot object — `schema_version: 1`, a `period`
|
|
33
|
+
(`start`, `end`, `granularity`), and a map of `lower_snake_case` keys to
|
|
34
|
+
non-negative numbers. Every key must be declared by the policy.
|
|
35
|
+
- `policy` (required): charter object — `schema_version: 2`, `policy_id`, the
|
|
36
|
+
closed `metrics` declaration, and ordered `rules`. Finding ids (for example
|
|
37
|
+
`NO_BOOKING`) are declared here, not in the skill. Typically maintained as
|
|
38
|
+
versioned YAML and parsed by the host before the call.
|
|
39
|
+
- `benchmarks` (optional): versioned benchmark data — required only when a
|
|
40
|
+
rule uses `benchmark_ref`. A demo file ships at `kb/benchmarks_demo.json`.
|
|
41
|
+
|
|
42
|
+
Reference JSON Schemas for all three inputs ship under `schemas/` in this
|
|
43
|
+
bundle. The skill enforces the same constraints with explicit stdlib checks
|
|
44
|
+
(`requirements: []` is deliberate); the schema files are documentation, not a
|
|
45
|
+
runtime dependency. Hosts that call `validate_params()` also get top-level
|
|
46
|
+
argument validation from the manifest.
|
|
47
|
+
|
|
48
|
+
## How to interpret results
|
|
49
|
+
|
|
50
|
+
A completed run returns `status: "completed"` with `policy_id`,
|
|
51
|
+
`benchmark_version` (`null` when no benchmarks input was supplied), and
|
|
52
|
+
`findings` in rule-declaration order:
|
|
53
|
+
|
|
54
|
+
- Rule finding: `finding` (charter-declared id), `severity`, `detail`
|
|
55
|
+
(`metric`, `threshold`, `observed`), `action`
|
|
56
|
+
(`blocked — requires operator override` or
|
|
57
|
+
`none — surfaced for the operator`).
|
|
58
|
+
- Refusal: `state: "insufficient_data"`, `detail.metric`, and `reason` — the
|
|
59
|
+
rule's declared `reason_code`, or `honesty_floor_unmet` when the rule
|
|
60
|
+
declared none, or `metric_missing_from_snapshot` when the rule's metric is
|
|
61
|
+
absent from the snapshot. When a granularity floor or a missing denominator
|
|
62
|
+
caused the refusal, `detail.unmet_floor` names it (`granularity` or
|
|
63
|
+
`denominator`); the canonical below-minimum-denominator refusal keeps the
|
|
64
|
+
exact shape pinned by issue #317.
|
|
65
|
+
|
|
66
|
+
A contract violation returns `status: "error"` with
|
|
67
|
+
`error.code` from the closed registry (`INVALID_METRICS_SCHEMA`,
|
|
68
|
+
`INVALID_POLICY_SCHEMA`, `INVALID_BENCHMARKS_SCHEMA`, `NO_METRICS_PROVIDED`,
|
|
69
|
+
`UNKNOWN_METRIC_KEY`, `UNKNOWN_RULE_METRIC`, `UNKNOWN_DENOMINATOR_METRIC`,
|
|
70
|
+
`BENCHMARK_VERSION_MISSING`, `BENCHMARK_REF_UNRESOLVED`) and a deterministic
|
|
71
|
+
`error.detail`. Errors and honest non-computability never mix: a refusal is a
|
|
72
|
+
finding inside a completed run, never an error envelope.
|
|
73
|
+
|
|
74
|
+
## Reserved fields (v1)
|
|
75
|
+
|
|
76
|
+
`check.applies_to` is shape-validated and echoed into `detail.applies_to` on a
|
|
77
|
+
finding, but carries no evaluation semantics in v1. Do not assume it filters
|
|
78
|
+
or scopes rule evaluation.
|
|
79
|
+
|
|
80
|
+
## Validation order (fail-closed)
|
|
81
|
+
|
|
82
|
+
1. Strict schema checks on `metrics`, then `policy`, then `benchmarks` — the
|
|
83
|
+
first violation returns a contract error.
|
|
84
|
+
2. Cross-checks: rule metrics and denominator metrics must be declared by the
|
|
85
|
+
policy; snapshot keys must be declared by the policy; every
|
|
86
|
+
`benchmark_ref` must resolve.
|
|
87
|
+
3. Honesty floors: declared preconditions only — the evaluator never infers
|
|
88
|
+
which metric backs a rate. An unmet floor refuses with the declared reason
|
|
89
|
+
code.
|
|
90
|
+
4. Rules evaluate in declared order; a passing rule emits nothing.
|
|
91
|
+
|
|
92
|
+
## What this skill cannot do
|
|
93
|
+
|
|
94
|
+
- Data acquisition: it never fetches, scrapes, or polls anything.
|
|
95
|
+
- Causal inference: it reports threshold breaches, not why they happened.
|
|
96
|
+
- Threshold optimization: thresholds come from the charter and benchmarks;
|
|
97
|
+
the skill never tunes them.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema_version": 1,
|
|
3
|
+
"benchmark_version": "demo-1",
|
|
4
|
+
"as_of": "2026-08-01",
|
|
5
|
+
"sources": [
|
|
6
|
+
"https://github.com/ARPAHLS/skillware/issues/317"
|
|
7
|
+
],
|
|
8
|
+
"values": {
|
|
9
|
+
"lead_magnet_download_rate_pct": {
|
|
10
|
+
"value": 25.0,
|
|
11
|
+
"unit": "pct",
|
|
12
|
+
"denominator_scope": "unique landing-page sessions"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
name: monitoring/kpi_gate
|
|
2
|
+
version: 0.1.0
|
|
3
|
+
description: >
|
|
4
|
+
Deterministic business-KPI gate. Evaluates a metrics snapshot against an
|
|
5
|
+
operator-maintained policy charter and optional versioned benchmark data,
|
|
6
|
+
returning structured findings with two severities (error, warning) and one
|
|
7
|
+
honest third state (insufficient_data with reason codes). Strict schemas on
|
|
8
|
+
all three inputs, a closed rule set, and fail-closed contract errors from a
|
|
9
|
+
closed registry. Pure evaluation only: no network calls, no data fetching,
|
|
10
|
+
no side effects; identical input always returns identical output.
|
|
11
|
+
short_description: "Deterministic KPI gate: metrics snapshot vs policy charter, fail-closed findings."
|
|
12
|
+
issuer:
|
|
13
|
+
name: Masa
|
|
14
|
+
email: masa88keith@gmail.com
|
|
15
|
+
github: mrmasa88
|
|
16
|
+
org: AO
|
|
17
|
+
category: monitoring
|
|
18
|
+
parameters:
|
|
19
|
+
type: object
|
|
20
|
+
properties:
|
|
21
|
+
metrics:
|
|
22
|
+
type: object
|
|
23
|
+
description: >
|
|
24
|
+
Metrics snapshot object (metrics schema v1): schema_version, period
|
|
25
|
+
(start, end, granularity), and a metrics map of lower_snake_case keys
|
|
26
|
+
to non-negative numbers. Assembled upstream; this skill never fetches data.
|
|
27
|
+
policy:
|
|
28
|
+
type: object
|
|
29
|
+
description: >
|
|
30
|
+
Policy charter object (policy schema v2): schema_version, policy_id, the
|
|
31
|
+
closed declaration of metric keys, and the ordered rule list. Typically
|
|
32
|
+
maintained as versioned YAML and parsed by the host before the call.
|
|
33
|
+
benchmarks:
|
|
34
|
+
type: object
|
|
35
|
+
description: >
|
|
36
|
+
Optional benchmark data object (benchmarks schema v1) with
|
|
37
|
+
benchmark_version, as_of date, sources, and named values. Required only
|
|
38
|
+
when the policy references benchmark_ref checks.
|
|
39
|
+
required:
|
|
40
|
+
- metrics
|
|
41
|
+
- policy
|
|
42
|
+
additionalProperties: false
|
|
43
|
+
outputs:
|
|
44
|
+
status:
|
|
45
|
+
type: string
|
|
46
|
+
description: completed for an evaluation run; error for a contract violation.
|
|
47
|
+
policy_id:
|
|
48
|
+
type: string
|
|
49
|
+
description: The policy_id of the evaluated charter.
|
|
50
|
+
benchmark_version:
|
|
51
|
+
type: string
|
|
52
|
+
description: benchmark_version of the supplied benchmark data, or null when none was supplied.
|
|
53
|
+
findings:
|
|
54
|
+
type: array
|
|
55
|
+
description: >
|
|
56
|
+
Ordered findings. Rule findings carry finding, severity, detail, and
|
|
57
|
+
action; refusals carry state insufficient_data, detail, and reason.
|
|
58
|
+
requirements: []
|
|
59
|
+
constitution: |
|
|
60
|
+
1. Evaluate only - no data fetching, no side effects, no automated remediation.
|
|
61
|
+
2. Deterministic, offline core - no network in execute(); identical input returns identical output.
|
|
62
|
+
3. Refuse rather than guess - what cannot be computed honestly returns insufficient_data with a reason code; no default substitution.
|
|
63
|
+
4. Every finding explained - code, metric, threshold, and observed value always attached.
|
|
64
|
+
5. Honest limits documented - what this skill does not do (data acquisition, causal inference, threshold optimization) is stated explicitly.
|
|
65
|
+
presentation:
|
|
66
|
+
icon: gauge
|
|
67
|
+
color: "#0f766e"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "skillware:monitoring/kpi_gate:benchmarks:1",
|
|
4
|
+
"type": "object",
|
|
5
|
+
"required": ["schema_version", "benchmark_version", "as_of", "sources", "values"],
|
|
6
|
+
"additionalProperties": false,
|
|
7
|
+
"properties": {
|
|
8
|
+
"schema_version": {"const": 1},
|
|
9
|
+
"benchmark_version": {"type": "string"},
|
|
10
|
+
"as_of": {"type": "string", "format": "date"},
|
|
11
|
+
"sources": {"type": "array", "minItems": 1, "items": {"type": "string", "format": "uri"}},
|
|
12
|
+
"values": {
|
|
13
|
+
"type": "object", "minProperties": 1,
|
|
14
|
+
"patternProperties": {
|
|
15
|
+
"^[a-z][a-z0-9_]*$": {
|
|
16
|
+
"type": "object", "required": ["value"], "additionalProperties": false,
|
|
17
|
+
"properties": {"value": {"type": "number"},
|
|
18
|
+
"unit": {"type": "string"},
|
|
19
|
+
"denominator_scope": {"type": "string"}}
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"additionalProperties": false
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|