skillware 0.5.2__tar.gz → 0.5.4__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.
Files changed (234) hide show
  1. {skillware-0.5.2/skillware.egg-info → skillware-0.5.4}/PKG-INFO +41 -77
  2. {skillware-0.5.2 → skillware-0.5.4}/README.md +37 -76
  3. {skillware-0.5.2 → skillware-0.5.4}/pyproject.toml +6 -1
  4. {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/card.json +1 -1
  5. {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/manifest.yaml +1 -1
  6. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/card.json +3 -2
  7. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/manifest.yaml +1 -1
  8. skillware-0.5.4/skills/monitoring/kpi_gate/__init__.py +5 -0
  9. skillware-0.5.4/skills/monitoring/kpi_gate/card.json +33 -0
  10. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/benchmarks_missing_ref.json +11 -0
  11. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/charter_floor_boundary.yaml +10 -0
  12. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/example_charter.yaml +19 -0
  13. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/example_snapshot.json +13 -0
  14. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/expected_findings.json +24 -0
  15. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_benchmarks_schema.json +9 -0
  16. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_charter_dependent_required.yaml +9 -0
  17. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_charter_schema.yaml +8 -0
  18. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_charter_unknown_denominator.yaml +9 -0
  19. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_charter_unknown_rule_metric.yaml +8 -0
  20. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/invalid_snapshot_schema.json +5 -0
  21. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/snapshot_empty_metrics.json +5 -0
  22. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/snapshot_floor_at_min.json +5 -0
  23. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/snapshot_floor_below_min.json +5 -0
  24. skillware-0.5.4/skills/monitoring/kpi_gate/fixtures/snapshot_unknown_key.json +14 -0
  25. skillware-0.5.4/skills/monitoring/kpi_gate/instructions.md +97 -0
  26. skillware-0.5.4/skills/monitoring/kpi_gate/kb/benchmarks_demo.json +15 -0
  27. skillware-0.5.4/skills/monitoring/kpi_gate/manifest.yaml +67 -0
  28. skillware-0.5.4/skills/monitoring/kpi_gate/schemas/benchmarks.schema.json +25 -0
  29. skillware-0.5.4/skills/monitoring/kpi_gate/schemas/metrics.schema.json +26 -0
  30. skillware-0.5.4/skills/monitoring/kpi_gate/schemas/policy.schema.json +52 -0
  31. skillware-0.5.4/skills/monitoring/kpi_gate/skill.py +565 -0
  32. skillware-0.5.4/skills/monitoring/kpi_gate/test_skill.py +491 -0
  33. {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/card.json +10 -2
  34. skillware-0.5.4/skills/security/deceptive_ui_guard/guard.py +1108 -0
  35. {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/instructions.md +17 -12
  36. skillware-0.5.4/skills/security/deceptive_ui_guard/kb/allowlist_cmp.json +48 -0
  37. skillware-0.5.4/skills/security/deceptive_ui_guard/kb/allowlist_seo.json +24 -0
  38. skillware-0.5.4/skills/security/deceptive_ui_guard/kb/allowlist_sr_only.json +42 -0
  39. {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/kb/deception_lexicon.json +36 -4
  40. {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/manifest.yaml +33 -7
  41. {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/skill.py +25 -3
  42. {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/test_skill.py +164 -0
  43. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/card.json +1 -1
  44. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/manifest.yaml +1 -1
  45. skillware-0.5.4/skillware/__init__.py +5 -0
  46. skillware-0.5.4/skillware/chains.py +412 -0
  47. {skillware-0.5.2 → skillware-0.5.4}/skillware/cli.py +502 -68
  48. {skillware-0.5.2 → skillware-0.5.4}/skillware/cli_mail.py +63 -31
  49. skillware-0.5.4/skillware/cli_theme.py +70 -0
  50. skillware-0.5.4/skillware/context.py +281 -0
  51. skillware-0.5.4/skillware/core/chains_config.py +140 -0
  52. {skillware-0.5.2 → skillware-0.5.4}/skillware/core/config.py +74 -6
  53. {skillware-0.5.2 → skillware-0.5.4}/skillware/version_policy.py +4 -4
  54. {skillware-0.5.2 → skillware-0.5.4/skillware.egg-info}/PKG-INFO +41 -77
  55. {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/SOURCES.txt +38 -0
  56. {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/requires.txt +5 -0
  57. skillware-0.5.4/tests/test_chains.py +125 -0
  58. skillware-0.5.4/tests/test_chains_config.py +40 -0
  59. {skillware-0.5.2 → skillware-0.5.4}/tests/test_cli.py +185 -0
  60. {skillware-0.5.2 → skillware-0.5.4}/tests/test_config.py +105 -1
  61. skillware-0.5.4/tests/test_context_and_chains_integration.py +384 -0
  62. {skillware-0.5.2 → skillware-0.5.4}/tests/test_discovery.py +31 -1
  63. skillware-0.5.4/tests/test_examples_smoke.py +184 -0
  64. skillware-0.5.4/tests/test_host_simulation_stress.py +505 -0
  65. {skillware-0.5.2 → skillware-0.5.4}/tests/test_loader.py +49 -1
  66. skillware-0.5.4/tests/test_skill_context.py +45 -0
  67. {skillware-0.5.2 → skillware-0.5.4}/tests/test_version_policy.py +12 -11
  68. skillware-0.5.2/skills/security/deceptive_ui_guard/guard.py +0 -585
  69. skillware-0.5.2/skillware/core/__init__.py +0 -0
  70. {skillware-0.5.2 → skillware-0.5.4}/LICENSE +0 -0
  71. {skillware-0.5.2 → skillware-0.5.4}/MANIFEST.in +0 -0
  72. {skillware-0.5.2 → skillware-0.5.4}/setup.cfg +0 -0
  73. {skillware-0.5.2 → skillware-0.5.4}/skills/__init__.py +0 -0
  74. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/__init__.py +0 -0
  75. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/__init__.py +0 -0
  76. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/card.json +0 -0
  77. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/instructions.md +0 -0
  78. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/manifest.yaml +0 -0
  79. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/mica_corpus.json +0 -0
  80. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/skill.py +0 -0
  81. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/mica_module/test_skill.py +0 -0
  82. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/__init__.py +0 -0
  83. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/card.json +0 -0
  84. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/instructions.md +0 -0
  85. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/manifest.yaml +0 -0
  86. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/skill.py +0 -0
  87. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/pii_masker/test_skill.py +0 -0
  88. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/__init__.py +0 -0
  89. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/card.json +0 -0
  90. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/instructions.md +0 -0
  91. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/manifest.yaml +0 -0
  92. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/skill.py +0 -0
  93. {skillware-0.5.2 → skillware-0.5.4}/skills/compliance/tos_evaluator/test_skill.py +0 -0
  94. {skillware-0.5.2 → skillware-0.5.4}/skills/creative/__init__.py +0 -0
  95. {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/__init__.py +0 -0
  96. {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/instructions.md +0 -0
  97. {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/skill.py +0 -0
  98. {skillware-0.5.2 → skillware-0.5.4}/skills/creative/bg_remover/test_skill.py +0 -0
  99. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/__init__.py +0 -0
  100. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/__init__.py +0 -0
  101. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/instructions.md +0 -0
  102. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/skill.py +0 -0
  103. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/novelty_extractor/test_skill.py +0 -0
  104. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/__init__.py +0 -0
  105. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/card.json +0 -0
  106. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/instructions.md +0 -0
  107. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/manifest.yaml +0 -0
  108. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/skill.py +0 -0
  109. {skillware-0.5.2 → skillware-0.5.4}/skills/data_engineering/synthetic_generator/test_skill.py +0 -0
  110. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/__init__.py +0 -0
  111. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/__init__.py +0 -0
  112. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/abis.py +0 -0
  113. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/card.json +0 -0
  114. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/config.yaml.example +0 -0
  115. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/data/addressbook.yaml +0 -0
  116. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/data/chains.yaml +0 -0
  117. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/data/tokens.yaml +0 -0
  118. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/instructions.md +0 -0
  119. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/manifest.yaml +0 -0
  120. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/skill.py +0 -0
  121. {skillware-0.5.2 → skillware-0.5.4}/skills/defi/evm_tx_handler/test_skill.py +0 -0
  122. {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/__init__.py +0 -0
  123. {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/__init__.py +0 -0
  124. {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/card.json +0 -0
  125. {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/instructions.md +0 -0
  126. {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/manifest.yaml +0 -0
  127. {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/skill.py +0 -0
  128. {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/test_skill.py +0 -0
  129. {skillware-0.5.2 → skillware-0.5.4}/skills/dev_tools/issue_resolver/workflow.py +0 -0
  130. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/__init__.py +0 -0
  131. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/__init__.py +0 -0
  132. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/card.json +0 -0
  133. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/data/api_index.json +0 -0
  134. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/data/terminology_map.yaml +0 -0
  135. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/instructions.md +0 -0
  136. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/manifest.yaml +0 -0
  137. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/skill.py +0 -0
  138. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/uk_companies_house_handler/test_skill.py +0 -0
  139. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/__init__.py +0 -0
  140. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/card.json +0 -0
  141. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/entities.ftm.json +0 -0
  142. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/malicious_scs_2025.json +0 -0
  143. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/normalized_fbi_lazarus_20250722_180019.json +0 -0
  144. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/normalized_israel_nbctf_20250722_180019.json +0 -0
  145. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/data/normalized_uniswap_trm.json +0 -0
  146. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/instructions.md +0 -0
  147. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/maintenance/normalization_tool.py +0 -0
  148. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/maintenance/normalize_uniswap_trm.py +0 -0
  149. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/manifest.yaml +0 -0
  150. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/skill.py +0 -0
  151. {skillware-0.5.2 → skillware-0.5.4}/skills/finance/wallet_screening/test_skill.py +0 -0
  152. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/__init__.py +0 -0
  153. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/__init__.py +0 -0
  154. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/budget.py +0 -0
  155. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/card.json +0 -0
  156. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/data/model_pricing.json +0 -0
  157. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/instructions.md +0 -0
  158. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/manifest.yaml +0 -0
  159. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/skill.py +0 -0
  160. {skillware-0.5.2 → skillware-0.5.4}/skills/monitoring/token_limiter/test_skill.py +0 -0
  161. {skillware-0.5.2 → skillware-0.5.4}/skills/office/__init__.py +0 -0
  162. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/__init__.py +0 -0
  163. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/addressbook.py +0 -0
  164. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/attachments.py +0 -0
  165. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/card.json +0 -0
  166. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/data/.gitignore +0 -0
  167. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/data/addressbook.yaml +0 -0
  168. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/data/config.yaml.example +0 -0
  169. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/file_ref.py +0 -0
  170. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/instructions.md +0 -0
  171. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/mail.py +0 -0
  172. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/manifest.yaml +0 -0
  173. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/skill.py +0 -0
  174. {skillware-0.5.2 → skillware-0.5.4}/skills/office/gmail_handler/test_skill.py +0 -0
  175. {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/__init__.py +0 -0
  176. {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/card.json +0 -0
  177. {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/instructions.md +0 -0
  178. {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/manifest.yaml +0 -0
  179. {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/skill.py +0 -0
  180. {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/test_skill.py +0 -0
  181. {skillware-0.5.2 → skillware-0.5.4}/skills/office/pdf_form_filler/utils.py +0 -0
  182. {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/__init__.py +0 -0
  183. {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/__init__.py +0 -0
  184. {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/card.json +0 -0
  185. {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/instructions.md +0 -0
  186. {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/manifest.yaml +0 -0
  187. {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/skill.py +0 -0
  188. {skillware-0.5.2 → skillware-0.5.4}/skills/optimization/prompt_rewriter/test_skill.py +0 -0
  189. {skillware-0.5.2 → skillware-0.5.4}/skills/security/__init__.py +0 -0
  190. {skillware-0.5.2 → skillware-0.5.4}/skills/security/deceptive_ui_guard/__init__.py +0 -0
  191. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/__init__.py +0 -0
  192. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/firewall.py +0 -0
  193. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/instructions.md +0 -0
  194. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/kb/confusables.json +0 -0
  195. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/kb/injection_patterns.json +0 -0
  196. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/skill.py +0 -0
  197. {skillware-0.5.2 → skillware-0.5.4}/skills/security/prompt_injection_firewall/test_skill.py +0 -0
  198. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/__init__.py +0 -0
  199. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/__init__.py +0 -0
  200. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/card.json +0 -0
  201. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/constraints.py +0 -0
  202. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/crisis_gate.py +0 -0
  203. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/instructions.md +0 -0
  204. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/kb/corpus.json +0 -0
  205. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/kb/crisis_resources.json +0 -0
  206. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/kb/hard_constraints.yaml +0 -0
  207. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/kb_provider.py +0 -0
  208. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/manifest.yaml +0 -0
  209. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/resources.py +0 -0
  210. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/skill.py +0 -0
  211. {skillware-0.5.2 → skillware-0.5.4}/skills/wellness/mental_coach/test_skill.py +0 -0
  212. {skillware-0.5.2 → skillware-0.5.4}/skillware/__main__.py +0 -0
  213. {skillware-0.5.2 → skillware-0.5.4}/skillware/branding/skillware_logo.png +0 -0
  214. {skillware-0.5.2/skillware → skillware-0.5.4/skillware/core}/__init__.py +0 -0
  215. {skillware-0.5.2 → skillware-0.5.4}/skillware/core/base_skill.py +0 -0
  216. {skillware-0.5.2 → skillware-0.5.4}/skillware/core/discovery.py +0 -0
  217. {skillware-0.5.2 → skillware-0.5.4}/skillware/core/env.py +0 -0
  218. {skillware-0.5.2 → skillware-0.5.4}/skillware/core/extras.py +0 -0
  219. {skillware-0.5.2 → skillware-0.5.4}/skillware/core/loader.py +0 -0
  220. {skillware-0.5.2 → skillware-0.5.4}/skillware/core/mail_config.py +0 -0
  221. {skillware-0.5.2 → skillware-0.5.4}/skillware/core/ui_schema.py +0 -0
  222. {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/dependency_links.txt +0 -0
  223. {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/entry_points.txt +0 -0
  224. {skillware-0.5.2 → skillware-0.5.4}/skillware.egg-info/top_level.txt +0 -0
  225. {skillware-0.5.2 → skillware-0.5.4}/tests/test_card_ui_schema.py +0 -0
  226. {skillware-0.5.2 → skillware-0.5.4}/tests/test_extras_sync.py +0 -0
  227. {skillware-0.5.2 → skillware-0.5.4}/tests/test_github_labels.py +0 -0
  228. {skillware-0.5.2 → skillware-0.5.4}/tests/test_mail_config.py +0 -0
  229. {skillware-0.5.2 → skillware-0.5.4}/tests/test_registry_docs.py +0 -0
  230. {skillware-0.5.2 → skillware-0.5.4}/tests/test_registry_identity.py +0 -0
  231. {skillware-0.5.2 → skillware-0.5.4}/tests/test_requirements_check.py +0 -0
  232. {skillware-0.5.2 → skillware-0.5.4}/tests/test_skill_issuer.py +0 -0
  233. {skillware-0.5.2 → skillware-0.5.4}/tests/test_ui_schema.py +0 -0
  234. {skillware-0.5.2 → skillware-0.5.4}/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.2
3
+ Version: 0.5.4
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
@@ -67,6 +67,8 @@ Provides-Extra: agents
67
67
  Requires-Dist: google-genai; extra == "agents"
68
68
  Requires-Dist: anthropic; extra == "agents"
69
69
  Requires-Dist: openai; extra == "agents"
70
+ Provides-Extra: security-deceptive-ui-guard-render
71
+ Requires-Dist: playwright; extra == "security-deceptive-ui-guard-render"
70
72
  Provides-Extra: compliance
71
73
  Requires-Dist: google-genai; extra == "compliance"
72
74
  Provides-Extra: creative
@@ -105,6 +107,7 @@ Requires-Dist: web3>=6.0.0; extra == "defi-evm-tx-handler"
105
107
  Provides-Extra: dev-tools-issue-resolver
106
108
  Provides-Extra: finance-uk-companies-house-handler
107
109
  Provides-Extra: finance-wallet-screening
110
+ Provides-Extra: monitoring-kpi-gate
108
111
  Provides-Extra: monitoring-token-limiter
109
112
  Provides-Extra: office-gmail-handler
110
113
  Provides-Extra: office-pdf-form-filler
@@ -160,20 +163,23 @@ Dynamic: license-file
160
163
 
161
164
  ---
162
165
 
163
- **Skillware** is an open-source framework and registry for modular, actionable Agent capabilities. It treats **Skills** as installable content, decoupling capability from intelligence. Just as `apt-get` installs software and `pip` installs libraries, `skillware` installs *know-how* for AI agents.
166
+ **Skillware** is an open-source framework and registry for modular, actionable Agent capabilities. It installs know-how for AI agents, or modular **Skills** (code, contract, and host guidance) decoupling capability from intelligence. In short, don't prompt your agents, equip them.
164
167
 
165
168
  > "I know Kung Fu." - Neo
166
169
 
167
170
  ## Mission
168
171
 
169
- The AI ecosystem is fragmented. Developers often re-invent tool definitions, system prompts, and safety rules for every project. **Skillware** supplies a standard to package capabilities into self-contained, installable units that work across **Gemini**, **Claude**, **Ollama**, **GPT**, and **Llama**. For the full story and roadmap, see our **[Vision](docs/vision.md)**.
172
+ Every new agent stack tends to reinvent tool schemas, system prompts, and safety rules. **Skillware** packages each capability as a self-contained bundle and adapts it to **Gemini**, **Claude**, **OpenAI**, **Ollama**, and other OpenAI-compatible hosts. For the full story and roadmap, see **[Vision](docs/vision.md)**.
170
173
 
171
174
  A **Skill** in this framework provides everything an Agent needs to master a domain:
172
175
 
173
- 1. **Logic**: Executable Python so agents run real work, not guess it.
174
- 2. **Cognition**: System instructions and cognitive maps so any logical system uses the capability as intended.
175
- 3. **Governance**: Constitution, safety boundaries, and hard limits baked into the bundle.
176
- 4. **Interface**: Standardized tool schemas for any LLM or agent runtime.
176
+ 1. **Contract**: Constitution, safety boundaries, and typed I/O baked into the bundle.
177
+ 2. **Effect**: Executable Python so agents run real work, not guess it.
178
+ 3. **Directive**: System instructions and cognitive maps so any host uses the capability as intended.
179
+ 4. **Assurance**: Offline tests that Effect honors Contract before a skill joins the registry.
180
+ 5. **Interface**: Standardized tool schemas for any LLM or agent runtime.
181
+
182
+ Optional **Corpus** and **Reference** assets extend bundles when needed. Every bundled registry skill also ships **Presentation** (`card.json`) for catalog and UI metadata. Full reference: [Introduction — Skill anatomy](docs/introduction.md#skill-anatomy).
177
183
 
178
184
  ### Skill library
179
185
 
@@ -184,12 +190,10 @@ Browse capabilities by category in the [Skill library](docs/skills/README.md) or
184
190
  ```mermaid
185
191
  flowchart LR
186
192
  Registry[Registry] -->|Load| Loader[Loader]
187
- Loader -->|Adapt| Host[Host]
188
- Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
189
- LogicalSystems -->|Tool Call| Host
193
+ Loader -->|Adapt| AnyHost["Any Host"]
190
194
  ```
191
195
 
192
- Install the registry once. Skillware loads a bundle and adapts it to your model's tool format — you run the loop. For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
196
+ 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, …). See the [Introduction](docs/introduction.md) for loader details, [Agent loops](docs/usage/agent_loops.md) for the execution pattern, and [Skill chaining](docs/usage/skill_chaining.md) for multi-skill sessions (`SkillContext`, named `chains:`).
193
197
 
194
198
  ## Architecture
195
199
 
@@ -204,15 +208,18 @@ Skillware/
204
208
  ├── skills/ # Skill Registry
205
209
  │ └── category/ # Domain boundaries (e.g., finance)
206
210
  │ └── skill_name/ # The Skill bundle
207
- │ ├── manifest.yaml # Definition, schema, and constitution
208
- │ ├── skill.py # Executable Python logic
209
- │ ├── instructions.md # Cognitive map for the LLM
210
- │ ├── card.json # Optional UI presentation metadata
211
- │ └── test_skill.py # Bundle test (required for new skills; see docs/TESTING.md)
211
+ │ ├── manifest.yaml # Contract: schema, constitution, issuer
212
+ │ ├── skill.py # Effect: deterministic execution
213
+ │ ├── instructions.md # Directive: host guidance
214
+ │ ├── card.json # Presentation: catalog / UI metadata
215
+ │ └── test_skill.py # Assurance (required for registry skills)
212
216
  ├── skillware/ # Core Framework Package
213
217
  │ ├── cli.py # Command-line interface
218
+ │ ├── context.py # SkillContext — multi-skill registry host context
219
+ │ ├── chains.py # Named skill chain runner (run_chain, validate_chain)
214
220
  │ └── core/
215
221
  │ ├── base_skill.py # Abstract Base Class for skills
222
+ │ ├── chains_config.py # chains: YAML parsing
216
223
  │ ├── env.py # Environment Management
217
224
  │ └── loader.py # Universal Skill Loader and Model Adapter
218
225
  ├── templates/ # Boilerplate templates for new skills
@@ -253,20 +260,9 @@ skillware list
253
260
  skillware paths
254
261
  ```
255
262
 
256
- This prints a table of all locally available skills and confirms the install
257
- and path resolution are working. `skillware paths` shows the **live** root order
258
- the loader uses (legacy without config: external → project → bundled; with
259
- `.skillware.yaml` or global config: project → external → bundled by default),
260
- tier labels, and shadowing. **Bundled registry skills from `pip install skillware`
261
- are always available** — an empty or missing local `skills/` folder does not
262
- disable them. Running `skillware` with no arguments opens the interactive menu.
263
- As optional checks you can also run `skillware test` to execute bundle tests,
264
- and `skillware examples` to browse the runnable example index (fetched from
265
- GitHub when no local `examples/README.md` is present).
266
-
267
- If `skillware` is not recognized, Python's `Scripts` directory may not be on
268
- your PATH — use `python -m skillware list` as a fallback. See
269
- [CLI Reference](docs/usage/cli.md#running-the-cli) for details.
263
+ You should see a table of bundled registry skills and a paths summary confirming install and discovery. **Bundled skills from `pip install skillware` are always available** — an empty local `skills/` folder does not disable them.
264
+
265
+ For path tiers, shadowing, config files, and the interactive menu, see [CLI — paths & tiers](docs/usage/cli.md#skillware-paths), [CLI — config](docs/usage/cli.md#skillware-config), and [Finding skills on disk](docs/usage/README.md#finding-skills-on-disk). If `skillware` is not on your PATH, use `python -m skillware list` ([CLI Reference](docs/usage/cli.md#running-the-cli)).
270
266
 
271
267
  ### 3. Configuration
272
268
 
@@ -292,83 +288,51 @@ Edit `.env` with agent keys (for example Gemini) and any keys your skills need.
292
288
 
293
289
  ### 4. Usage Example (Gemini)
294
290
 
295
- This example requires the Google SDK optional extra: `pip install "skillware[gemini]"` (local dev: `pip install -e ".[gemini]"`). See the [Gemini usage guide](docs/usage/gemini.md) for setup details.
291
+ Requires `pip install "skillware[gemini]"` (dev: `pip install -e ".[gemini]"`) and `GOOGLE_API_KEY`. The skill itself is offline — no skill API keys. For setup details see [Gemini usage guide](docs/usage/gemini.md). Multi-turn loops: [Agent loops](docs/usage/agent_loops.md).
296
292
 
297
293
  ```python
298
- import os
299
294
  import google.genai as genai
300
295
  from google.genai import types
301
296
  from skillware.core.loader import SkillLoader
302
- from skillware.core.env import load_env_file
303
297
 
304
- # Load Environment
305
- load_env_file()
306
-
307
- # 1. Load the Skill from the Registry
308
- # The loader reads the code, manifest, and instructions automatically
309
- skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
310
- skill = skill_bundle["class"](
311
- config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
312
- )
313
- # Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
298
+ bundle = SkillLoader.load_skill("monitoring/token_limiter")
299
+ skill = bundle["class"]()
300
+ tool = SkillLoader.to_gemini_tool(bundle)
314
301
 
315
- # 2. Client & Tool Setup
316
302
  client = genai.Client()
317
- tool = SkillLoader.to_gemini_tool(skill_bundle) # The "Adapter"
318
- system_instruction = skill_bundle['instructions'] # The "Mind"
319
-
320
- # 3. Agent Loop
321
303
  response = client.models.generate_content(
322
304
  model="gemini-2.5-flash",
323
- contents="Screen wallet 0xd8dA... for risks.",
305
+ contents=(
306
+ "Check token budget for task_id demo_run: "
307
+ "current_token_count 95000, max_allowed_tokens 100000."
308
+ ),
324
309
  config=types.GenerateContentConfig(
325
310
  tools=[tool],
326
- system_instruction=system_instruction,
311
+ system_instruction=bundle["instructions"],
327
312
  ),
328
313
  )
329
314
 
330
315
  for part in response.candidates[0].content.parts:
331
316
  if part.function_call:
332
- result = skill.execute(dict(part.function_call.args))
333
- follow_up = client.models.generate_content(
334
- model="gemini-2.5-flash",
335
- contents=[
336
- "Use this tool result to answer the original request.",
337
- {
338
- "function_response": {
339
- "name": part.function_call.name,
340
- "response": {"result": result},
341
- }
342
- },
343
- ],
344
- config=types.GenerateContentConfig(
345
- tools=[tool],
346
- system_instruction=system_instruction,
347
- ),
348
- )
349
- print(follow_up.text)
317
+ print(skill.execute(dict(part.function_call.args)))
350
318
  else:
351
319
  print(part.text)
352
320
  ```
353
321
 
354
- For other providers and shared integration patterns, see the [usage guides index](docs/usage/README.md), [agent loops](docs/usage/agent_loops.md), [Gemini](docs/usage/gemini.md), [Claude](docs/usage/claude.md), [OpenAI](docs/usage/openai.md), [OpenAI-compatible hosts](docs/usage/openai_compatible.md), [DeepSeek](docs/usage/deepseek.md), [Ollama](docs/usage/ollama.md), [API keys for skills](docs/usage/api_keys.md), and the [skill usage template](docs/usage/skill_usage_template.md) for contributors.
322
+ For other providers and integration patterns, see the [usage guides](docs/usage/README.md).
355
323
 
356
324
  ## Documentation
357
325
 
358
326
  | Topic | Links |
359
327
  | :--- | :--- |
360
328
  | **Introduction** | [Introduction](docs/introduction.md) · [Vision](docs/vision.md) · [Comparison](COMPARISON.md) |
361
- | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [OpenAI-compatible hosts](docs/usage/openai_compatible.md) · [Install extras](docs/usage/install_extras.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
329
+ | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [Skill chaining](docs/usage/skill_chaining.md) · [OpenAI-compatible hosts](docs/usage/openai_compatible.md) · [Install extras](docs/usage/install_extras.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
362
330
  | **Security** | [Skill trust model](docs/security/skill-trust-model.md) · [SECURITY.md](SECURITY.md) |
363
331
  | **Contributing** | [Contributing](CONTRIBUTING.md) · [Agent Native Workflow](docs/contributing/ai_native_workflow.md) · [Testing](docs/TESTING.md) · [Changelog](CHANGELOG.md) |
364
332
 
365
333
  ## Contributing
366
334
 
367
- We are building the "App Store" for Agents. Skills are the main contribution, but documentation, tests, and framework fixes are welcome too. Human operators and supervised agents follow the same standards: scoped PRs, deterministic behavior, and verified tests.
368
-
369
- Start with [Contributing](CONTRIBUTING.md) (types, skill standard, PR process), [Agent Native Workflow](docs/contributing/ai_native_workflow.md) (for autonomous and semi-autonomous agents), [Testing](docs/TESTING.md) (Black, Flake8, framework and skill pytest, pre-PR checklist), and [Changelog](CHANGELOG.md) (user-facing entries under `[Unreleased]`).
370
-
371
- Also read the [Agent Code of Conduct](CODE_OF_CONDUCT.md). Open PRs with the [pull request template](.github/PULL_REQUEST_TEMPLATE.md) and complete only the sections that apply.
335
+ Skills, docs, tests, and framework fixes are welcome. Start with [Contributing](CONTRIBUTING.md), [Agent Native Workflow](docs/contributing/ai_native_workflow.md), and [Testing](docs/TESTING.md). See the [Agent Code of Conduct](CODE_OF_CONDUCT.md). Open PRs with the [pull request template](.github/PULL_REQUEST_TEMPLATE.md).
372
336
 
373
337
  ## Comparison
374
338
 
@@ -386,13 +350,13 @@ Skillware differs from the Model Context Protocol (MCP), and Agent Skills (SKILL
386
350
  <a href="https://pypistats.org/packages/skillware"><img src="https://img.shields.io/badge/Stats-PyPiStats-ffdac1?style=flat-square" alt="PyPI Stats dashboard"></a>
387
351
  <a href="https://pepy.tech/projects/skillware"><img src="https://img.shields.io/pepy/dt/skillware?style=flat-square&label=DLs%20%E2%86%93%20total&color=bbf7d0" alt="Total downloads (PePy)"></a>
388
352
 
389
- PyPI download counts show how often `skillware` is installed from the package index. Numbers come from public third-party aggregators, and they include CI and mirror traffic, so they measure **install activity**, not unique users. Totals may differ slightly between services because each source uses its own window and methodology. Use the stats dashboards in the above badges for charts, version breakdowns, and longer history.
353
+ PyPI download counts measure **install activity** from public aggregators (including CI and mirrors), not unique users. Use the badge links above for charts and version breakdowns.
390
354
 
391
355
  ## Citing
392
356
 
393
357
  <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
358
 
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.2`).
359
+ 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.4`).
396
360
 
397
361
  ## Contact
398
362
 
@@ -31,20 +31,23 @@
31
31
 
32
32
  ---
33
33
 
34
- **Skillware** is an open-source framework and registry for modular, actionable Agent capabilities. It treats **Skills** as installable content, decoupling capability from intelligence. Just as `apt-get` installs software and `pip` installs libraries, `skillware` installs *know-how* for AI agents.
34
+ **Skillware** is an open-source framework and registry for modular, actionable Agent capabilities. It installs know-how for AI agents, or modular **Skills** (code, contract, and host guidance) decoupling capability from intelligence. In short, don't prompt your agents, equip them.
35
35
 
36
36
  > "I know Kung Fu." - Neo
37
37
 
38
38
  ## Mission
39
39
 
40
- The AI ecosystem is fragmented. Developers often re-invent tool definitions, system prompts, and safety rules for every project. **Skillware** supplies a standard to package capabilities into self-contained, installable units that work across **Gemini**, **Claude**, **Ollama**, **GPT**, and **Llama**. For the full story and roadmap, see our **[Vision](docs/vision.md)**.
40
+ Every new agent stack tends to reinvent tool schemas, system prompts, and safety rules. **Skillware** packages each capability as a self-contained bundle and adapts it to **Gemini**, **Claude**, **OpenAI**, **Ollama**, and other OpenAI-compatible hosts. For the full story and roadmap, see **[Vision](docs/vision.md)**.
41
41
 
42
42
  A **Skill** in this framework provides everything an Agent needs to master a domain:
43
43
 
44
- 1. **Logic**: Executable Python so agents run real work, not guess it.
45
- 2. **Cognition**: System instructions and cognitive maps so any logical system uses the capability as intended.
46
- 3. **Governance**: Constitution, safety boundaries, and hard limits baked into the bundle.
47
- 4. **Interface**: Standardized tool schemas for any LLM or agent runtime.
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** and **Reference** assets extend bundles when needed. Every bundled registry skill also ships **Presentation** (`card.json`) for catalog and UI metadata. 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| Host[Host]
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 and adapts it to your model's tool format — you run the loop. For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
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, …). See the [Introduction](docs/introduction.md) for loader details, [Agent loops](docs/usage/agent_loops.md) for the execution pattern, and [Skill chaining](docs/usage/skill_chaining.md) for multi-skill sessions (`SkillContext`, named `chains:`).
64
65
 
65
66
  ## Architecture
66
67
 
@@ -75,15 +76,18 @@ Skillware/
75
76
  ├── skills/ # Skill Registry
76
77
  │ └── category/ # Domain boundaries (e.g., finance)
77
78
  │ └── skill_name/ # The Skill bundle
78
- │ ├── manifest.yaml # Definition, schema, and constitution
79
- │ ├── skill.py # Executable Python logic
80
- │ ├── instructions.md # Cognitive map for the LLM
81
- │ ├── card.json # Optional UI presentation metadata
82
- │ └── test_skill.py # Bundle test (required for new skills; see docs/TESTING.md)
79
+ │ ├── manifest.yaml # Contract: schema, constitution, issuer
80
+ │ ├── skill.py # Effect: deterministic execution
81
+ │ ├── instructions.md # Directive: host guidance
82
+ │ ├── card.json # Presentation: catalog / UI metadata
83
+ │ └── test_skill.py # Assurance (required for registry skills)
83
84
  ├── skillware/ # Core Framework Package
84
85
  │ ├── cli.py # Command-line interface
86
+ │ ├── context.py # SkillContext — multi-skill registry host context
87
+ │ ├── chains.py # Named skill chain runner (run_chain, validate_chain)
85
88
  │ └── core/
86
89
  │ ├── base_skill.py # Abstract Base Class for skills
90
+ │ ├── chains_config.py # chains: YAML parsing
87
91
  │ ├── env.py # Environment Management
88
92
  │ └── loader.py # Universal Skill Loader and Model Adapter
89
93
  ├── templates/ # Boilerplate templates for new skills
@@ -124,20 +128,9 @@ skillware list
124
128
  skillware paths
125
129
  ```
126
130
 
127
- This prints a table of all locally available skills and confirms the install
128
- and path resolution are working. `skillware paths` shows the **live** root order
129
- the loader uses (legacy without config: external → project → bundled; with
130
- `.skillware.yaml` or global config: project → external → bundled by default),
131
- tier labels, and shadowing. **Bundled registry skills from `pip install skillware`
132
- are always available** — an empty or missing local `skills/` folder does not
133
- disable them. Running `skillware` with no arguments opens the interactive menu.
134
- As optional checks you can also run `skillware test` to execute bundle tests,
135
- and `skillware examples` to browse the runnable example index (fetched from
136
- GitHub when no local `examples/README.md` is present).
137
-
138
- If `skillware` is not recognized, Python's `Scripts` directory may not be on
139
- your PATH — use `python -m skillware list` as a fallback. See
140
- [CLI Reference](docs/usage/cli.md#running-the-cli) for details.
131
+ You should see a table of bundled registry skills and a paths summary confirming install and discovery. **Bundled skills from `pip install skillware` are always available** — an empty local `skills/` folder does not disable them.
132
+
133
+ For path tiers, shadowing, config files, and the interactive menu, see [CLI — paths & tiers](docs/usage/cli.md#skillware-paths), [CLI — config](docs/usage/cli.md#skillware-config), and [Finding skills on disk](docs/usage/README.md#finding-skills-on-disk). If `skillware` is not on your PATH, use `python -m skillware list` ([CLI Reference](docs/usage/cli.md#running-the-cli)).
141
134
 
142
135
  ### 3. Configuration
143
136
 
@@ -163,83 +156,51 @@ Edit `.env` with agent keys (for example Gemini) and any keys your skills need.
163
156
 
164
157
  ### 4. Usage Example (Gemini)
165
158
 
166
- This example requires the Google SDK optional extra: `pip install "skillware[gemini]"` (local dev: `pip install -e ".[gemini]"`). See the [Gemini usage guide](docs/usage/gemini.md) for setup details.
159
+ Requires `pip install "skillware[gemini]"` (dev: `pip install -e ".[gemini]"`) and `GOOGLE_API_KEY`. The skill itself is offline — no skill API keys. For setup details see [Gemini usage guide](docs/usage/gemini.md). Multi-turn loops: [Agent loops](docs/usage/agent_loops.md).
167
160
 
168
161
  ```python
169
- import os
170
162
  import google.genai as genai
171
163
  from google.genai import types
172
164
  from skillware.core.loader import SkillLoader
173
- from skillware.core.env import load_env_file
174
165
 
175
- # Load Environment
176
- load_env_file()
177
-
178
- # 1. Load the Skill from the Registry
179
- # The loader reads the code, manifest, and instructions automatically
180
- skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
181
- skill = skill_bundle["class"](
182
- config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
183
- )
184
- # Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
166
+ bundle = SkillLoader.load_skill("monitoring/token_limiter")
167
+ skill = bundle["class"]()
168
+ tool = SkillLoader.to_gemini_tool(bundle)
185
169
 
186
- # 2. Client & Tool Setup
187
170
  client = genai.Client()
188
- tool = SkillLoader.to_gemini_tool(skill_bundle) # The "Adapter"
189
- system_instruction = skill_bundle['instructions'] # The "Mind"
190
-
191
- # 3. Agent Loop
192
171
  response = client.models.generate_content(
193
172
  model="gemini-2.5-flash",
194
- contents="Screen wallet 0xd8dA... for risks.",
173
+ contents=(
174
+ "Check token budget for task_id demo_run: "
175
+ "current_token_count 95000, max_allowed_tokens 100000."
176
+ ),
195
177
  config=types.GenerateContentConfig(
196
178
  tools=[tool],
197
- system_instruction=system_instruction,
179
+ system_instruction=bundle["instructions"],
198
180
  ),
199
181
  )
200
182
 
201
183
  for part in response.candidates[0].content.parts:
202
184
  if part.function_call:
203
- result = skill.execute(dict(part.function_call.args))
204
- follow_up = client.models.generate_content(
205
- model="gemini-2.5-flash",
206
- contents=[
207
- "Use this tool result to answer the original request.",
208
- {
209
- "function_response": {
210
- "name": part.function_call.name,
211
- "response": {"result": result},
212
- }
213
- },
214
- ],
215
- config=types.GenerateContentConfig(
216
- tools=[tool],
217
- system_instruction=system_instruction,
218
- ),
219
- )
220
- print(follow_up.text)
185
+ print(skill.execute(dict(part.function_call.args)))
221
186
  else:
222
187
  print(part.text)
223
188
  ```
224
189
 
225
- For other providers and shared integration patterns, see the [usage guides index](docs/usage/README.md), [agent loops](docs/usage/agent_loops.md), [Gemini](docs/usage/gemini.md), [Claude](docs/usage/claude.md), [OpenAI](docs/usage/openai.md), [OpenAI-compatible hosts](docs/usage/openai_compatible.md), [DeepSeek](docs/usage/deepseek.md), [Ollama](docs/usage/ollama.md), [API keys for skills](docs/usage/api_keys.md), and the [skill usage template](docs/usage/skill_usage_template.md) for contributors.
190
+ For other providers and integration patterns, see the [usage guides](docs/usage/README.md).
226
191
 
227
192
  ## Documentation
228
193
 
229
194
  | Topic | Links |
230
195
  | :--- | :--- |
231
196
  | **Introduction** | [Introduction](docs/introduction.md) · [Vision](docs/vision.md) · [Comparison](COMPARISON.md) |
232
- | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [OpenAI-compatible hosts](docs/usage/openai_compatible.md) · [Install extras](docs/usage/install_extras.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
197
+ | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [Skill chaining](docs/usage/skill_chaining.md) · [OpenAI-compatible hosts](docs/usage/openai_compatible.md) · [Install extras](docs/usage/install_extras.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
233
198
  | **Security** | [Skill trust model](docs/security/skill-trust-model.md) · [SECURITY.md](SECURITY.md) |
234
199
  | **Contributing** | [Contributing](CONTRIBUTING.md) · [Agent Native Workflow](docs/contributing/ai_native_workflow.md) · [Testing](docs/TESTING.md) · [Changelog](CHANGELOG.md) |
235
200
 
236
201
  ## Contributing
237
202
 
238
- We are building the "App Store" for Agents. Skills are the main contribution, but documentation, tests, and framework fixes are welcome too. Human operators and supervised agents follow the same standards: scoped PRs, deterministic behavior, and verified tests.
239
-
240
- Start with [Contributing](CONTRIBUTING.md) (types, skill standard, PR process), [Agent Native Workflow](docs/contributing/ai_native_workflow.md) (for autonomous and semi-autonomous agents), [Testing](docs/TESTING.md) (Black, Flake8, framework and skill pytest, pre-PR checklist), and [Changelog](CHANGELOG.md) (user-facing entries under `[Unreleased]`).
241
-
242
- Also read the [Agent Code of Conduct](CODE_OF_CONDUCT.md). Open PRs with the [pull request template](.github/PULL_REQUEST_TEMPLATE.md) and complete only the sections that apply.
203
+ Skills, docs, tests, and framework fixes are welcome. Start with [Contributing](CONTRIBUTING.md), [Agent Native Workflow](docs/contributing/ai_native_workflow.md), and [Testing](docs/TESTING.md). See the [Agent Code of Conduct](CODE_OF_CONDUCT.md). Open PRs with the [pull request template](.github/PULL_REQUEST_TEMPLATE.md).
243
204
 
244
205
  ## Comparison
245
206
 
@@ -257,13 +218,13 @@ Skillware differs from the Model Context Protocol (MCP), and Agent Skills (SKILL
257
218
  <a href="https://pypistats.org/packages/skillware"><img src="https://img.shields.io/badge/Stats-PyPiStats-ffdac1?style=flat-square" alt="PyPI Stats dashboard"></a>
258
219
  <a href="https://pepy.tech/projects/skillware"><img src="https://img.shields.io/pepy/dt/skillware?style=flat-square&label=DLs%20%E2%86%93%20total&color=bbf7d0" alt="Total downloads (PePy)"></a>
259
220
 
260
- PyPI download counts show how often `skillware` is installed from the package index. Numbers come from public third-party aggregators, and they include CI and mirror traffic, so they measure **install activity**, not unique users. Totals may differ slightly between services because each source uses its own window and methodology. Use the stats dashboards in the above badges for charts, version breakdowns, and longer history.
221
+ PyPI download counts measure **install activity** from public aggregators (including CI and mirrors), not unique users. Use the badge links above for charts and version breakdowns.
261
222
 
262
223
  ## Citing
263
224
 
264
225
  <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
226
 
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.2`).
227
+ 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.4`).
267
228
 
268
229
  ## Contact
269
230
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "skillware"
7
- version = "0.5.2"
7
+ version = "0.5.4"
8
8
  description = "A framework for modular, self-contained AI skills."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -68,6 +68,9 @@ agents = [
68
68
  "anthropic",
69
69
  "openai",
70
70
  ]
71
+ security_deceptive_ui_guard_render = [
72
+ "playwright",
73
+ ]
71
74
 
72
75
  # --- extras: begin generated by scripts/sync_extras.py ---
73
76
 
@@ -140,6 +143,8 @@ finance_uk_companies_house_handler = []
140
143
 
141
144
  finance_wallet_screening = []
142
145
 
146
+ monitoring_kpi_gate = []
147
+
143
148
  monitoring_token_limiter = []
144
149
 
145
150
  office_gmail_handler = []
@@ -5,7 +5,7 @@
5
5
  "name": "Ayush Srivastava",
6
6
  "email": "ayush.sri0705@gmail.com",
7
7
  "github": "AyushSrivastava1818",
8
- "org": ""
8
+ "org": "ARPAHLS"
9
9
  },
10
10
  "icon": "photo",
11
11
  "color": "violet",
@@ -7,7 +7,7 @@ issuer:
7
7
  name: Ayush Srivastava
8
8
  email: "ayush.sri0705@gmail.com"
9
9
  github: AyushSrivastava1818
10
- org: ""
10
+ org: ARPAHLS
11
11
 
12
12
  category: "creative"
13
13
 
@@ -32,6 +32,7 @@
32
32
  "issuer": {
33
33
  "name": "Martin Rizzo Lozano",
34
34
  "email": "rizzolozanomartin@gmail.com",
35
- "github": "rizzoMartin"
35
+ "github": "rizzoMartin",
36
+ "org": "ARPAHLS"
36
37
  }
37
- }
38
+ }
@@ -6,7 +6,7 @@ issuer:
6
6
  name: Martin Rizzo Lozano
7
7
  email: rizzolozanomartin@gmail.com
8
8
  github: rizzoMartin
9
- org: ""
9
+ org: ARPAHLS
10
10
  parameters:
11
11
  type: object
12
12
  properties:
@@ -0,0 +1,5 @@
1
+ # Deterministic business-KPI gate skill package.
2
+
3
+ from .skill import KpiGateSkill
4
+
5
+ __all__ = ["KpiGateSkill"]
@@ -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,11 @@
1
+ {
2
+ "schema_version": 1,
3
+ "benchmark_version": "demo-missing-ref",
4
+ "as_of": "2026-08-01",
5
+ "sources": [
6
+ "https://github.com/ARPAHLS/skillware/issues/317"
7
+ ],
8
+ "values": {
9
+ "some_other_benchmark_pct": {"value": 10.0, "unit": "pct"}
10
+ }
11
+ }
@@ -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
+ }