skillware 0.4.2__tar.gz → 0.4.5__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 (154) hide show
  1. {skillware-0.4.2/skillware.egg-info → skillware-0.4.5}/PKG-INFO +68 -20
  2. {skillware-0.4.2 → skillware-0.4.5}/README.md +14 -8
  3. {skillware-0.4.2 → skillware-0.4.5}/pyproject.toml +91 -10
  4. skillware-0.4.5/skills/creative/bg_remover/card.json +41 -0
  5. skillware-0.4.5/skills/creative/bg_remover/instructions.md +118 -0
  6. skillware-0.4.5/skills/creative/bg_remover/manifest.yaml +96 -0
  7. skillware-0.4.5/skills/creative/bg_remover/skill.py +96 -0
  8. skillware-0.4.5/skills/creative/bg_remover/test_skill.py +252 -0
  9. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/manifest.yaml +4 -3
  10. skillware-0.4.5/skillware/__init__.py +0 -0
  11. {skillware-0.4.2 → skillware-0.4.5}/skillware/cli.py +125 -26
  12. skillware-0.4.5/skillware/core/__init__.py +0 -0
  13. skillware-0.4.5/skillware/core/base_skill.py +62 -0
  14. skillware-0.4.5/skillware/core/discovery.py +249 -0
  15. skillware-0.4.5/skillware/core/extras.py +229 -0
  16. {skillware-0.4.2 → skillware-0.4.5}/skillware/core/loader.py +82 -97
  17. {skillware-0.4.2 → skillware-0.4.5/skillware.egg-info}/PKG-INFO +68 -20
  18. {skillware-0.4.2 → skillware-0.4.5}/skillware.egg-info/SOURCES.txt +13 -0
  19. skillware-0.4.5/skillware.egg-info/requires.txt +106 -0
  20. {skillware-0.4.2 → skillware-0.4.5}/tests/test_cli.py +84 -9
  21. skillware-0.4.5/tests/test_discovery.py +111 -0
  22. skillware-0.4.5/tests/test_extras_sync.py +95 -0
  23. skillware-0.4.5/tests/test_github_labels.py +64 -0
  24. {skillware-0.4.2 → skillware-0.4.5}/tests/test_loader.py +44 -4
  25. {skillware-0.4.2 → skillware-0.4.5}/tests/test_registry_docs.py +56 -0
  26. {skillware-0.4.2 → skillware-0.4.5}/tests/test_skill_issuer.py +11 -0
  27. skillware-0.4.5/tests/test_validate_params.py +79 -0
  28. {skillware-0.4.2 → skillware-0.4.5}/tests/test_version_policy.py +1 -1
  29. skillware-0.4.2/skillware/core/base_skill.py +0 -34
  30. skillware-0.4.2/skillware.egg-info/requires.txt +0 -43
  31. {skillware-0.4.2 → skillware-0.4.5}/LICENSE +0 -0
  32. {skillware-0.4.2 → skillware-0.4.5}/MANIFEST.in +0 -0
  33. {skillware-0.4.2 → skillware-0.4.5}/setup.cfg +0 -0
  34. {skillware-0.4.2 → skillware-0.4.5}/skills/__init__.py +0 -0
  35. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/__init__.py +0 -0
  36. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/mica_module/__init__.py +0 -0
  37. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/mica_module/card.json +0 -0
  38. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/mica_module/instructions.md +0 -0
  39. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/mica_module/manifest.yaml +0 -0
  40. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/mica_module/mica_corpus.json +0 -0
  41. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/mica_module/skill.py +0 -0
  42. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/mica_module/test_skill.py +0 -0
  43. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/pii_masker/__init__.py +0 -0
  44. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/pii_masker/card.json +0 -0
  45. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/pii_masker/instructions.md +0 -0
  46. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/pii_masker/manifest.yaml +0 -0
  47. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/pii_masker/skill.py +0 -0
  48. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/pii_masker/test_skill.py +0 -0
  49. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/tos_evaluator/__init__.py +0 -0
  50. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/tos_evaluator/card.json +0 -0
  51. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/tos_evaluator/instructions.md +0 -0
  52. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/tos_evaluator/manifest.yaml +0 -0
  53. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/tos_evaluator/skill.py +0 -0
  54. {skillware-0.4.2 → skillware-0.4.5}/skills/compliance/tos_evaluator/test_skill.py +0 -0
  55. {skillware-0.4.2/skills/data_engineering → skillware-0.4.5/skills/creative}/__init__.py +0 -0
  56. {skillware-0.4.2/skills/defi → skillware-0.4.5/skills/creative/bg_remover}/__init__.py +0 -0
  57. {skillware-0.4.2/skills/defi/evm_tx_handler → skillware-0.4.5/skills/data_engineering}/__init__.py +0 -0
  58. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/novelty_extractor/__init__.py +0 -0
  59. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/novelty_extractor/card.json +0 -0
  60. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/novelty_extractor/instructions.md +0 -0
  61. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/novelty_extractor/manifest.yaml +0 -0
  62. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/novelty_extractor/skill.py +0 -0
  63. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/novelty_extractor/test_skill.py +0 -0
  64. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/synthetic_generator/__init__.py +0 -0
  65. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/synthetic_generator/card.json +0 -0
  66. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/synthetic_generator/instructions.md +0 -0
  67. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/synthetic_generator/manifest.yaml +0 -0
  68. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/synthetic_generator/skill.py +0 -0
  69. {skillware-0.4.2 → skillware-0.4.5}/skills/data_engineering/synthetic_generator/test_skill.py +0 -0
  70. {skillware-0.4.2/skills/finance → skillware-0.4.5/skills/defi}/__init__.py +0 -0
  71. {skillware-0.4.2/skills/finance/uk_companies_house_handler → skillware-0.4.5/skills/defi/evm_tx_handler}/__init__.py +0 -0
  72. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/abis.py +0 -0
  73. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/card.json +0 -0
  74. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/config.yaml.example +0 -0
  75. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/data/addressbook.yaml +0 -0
  76. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/data/chains.yaml +0 -0
  77. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/data/tokens.yaml +0 -0
  78. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/instructions.md +0 -0
  79. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/manifest.yaml +0 -0
  80. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/skill.py +0 -0
  81. {skillware-0.4.2 → skillware-0.4.5}/skills/defi/evm_tx_handler/test_skill.py +0 -0
  82. {skillware-0.4.2 → skillware-0.4.5}/skills/dev_tools/__init__.py +0 -0
  83. {skillware-0.4.2 → skillware-0.4.5}/skills/dev_tools/issue_resolver/__init__.py +0 -0
  84. {skillware-0.4.2 → skillware-0.4.5}/skills/dev_tools/issue_resolver/card.json +0 -0
  85. {skillware-0.4.2 → skillware-0.4.5}/skills/dev_tools/issue_resolver/instructions.md +0 -0
  86. {skillware-0.4.2 → skillware-0.4.5}/skills/dev_tools/issue_resolver/manifest.yaml +0 -0
  87. {skillware-0.4.2 → skillware-0.4.5}/skills/dev_tools/issue_resolver/skill.py +0 -0
  88. {skillware-0.4.2 → skillware-0.4.5}/skills/dev_tools/issue_resolver/test_skill.py +0 -0
  89. {skillware-0.4.2 → skillware-0.4.5}/skills/dev_tools/issue_resolver/workflow.py +0 -0
  90. {skillware-0.4.2/skills/office → skillware-0.4.5/skills/finance}/__init__.py +0 -0
  91. {skillware-0.4.2/skills/office/pdf_form_filler → skillware-0.4.5/skills/finance/uk_companies_house_handler}/__init__.py +0 -0
  92. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/uk_companies_house_handler/card.json +0 -0
  93. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/uk_companies_house_handler/data/api_index.json +0 -0
  94. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/uk_companies_house_handler/data/terminology_map.yaml +0 -0
  95. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/uk_companies_house_handler/instructions.md +0 -0
  96. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/uk_companies_house_handler/manifest.yaml +0 -0
  97. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/uk_companies_house_handler/skill.py +0 -0
  98. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/uk_companies_house_handler/test_skill.py +0 -0
  99. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/__init__.py +0 -0
  100. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/card.json +0 -0
  101. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/data/entities.ftm.json +0 -0
  102. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/data/malicious_scs_2025.json +0 -0
  103. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/data/normalized_fbi_lazarus_20250722_180019.json +0 -0
  104. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/data/normalized_israel_nbctf_20250722_180019.json +0 -0
  105. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/data/normalized_uniswap_trm.json +0 -0
  106. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/instructions.md +0 -0
  107. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/maintenance/normalization_tool.py +0 -0
  108. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/maintenance/normalize_uniswap_trm.py +0 -0
  109. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/skill.py +0 -0
  110. {skillware-0.4.2 → skillware-0.4.5}/skills/finance/wallet_screening/test_skill.py +0 -0
  111. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/__init__.py +0 -0
  112. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/token_limiter/__init__.py +0 -0
  113. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/token_limiter/budget.py +0 -0
  114. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/token_limiter/card.json +0 -0
  115. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/token_limiter/data/model_pricing.json +0 -0
  116. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/token_limiter/instructions.md +0 -0
  117. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/token_limiter/manifest.yaml +0 -0
  118. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/token_limiter/skill.py +0 -0
  119. {skillware-0.4.2 → skillware-0.4.5}/skills/monitoring/token_limiter/test_skill.py +0 -0
  120. {skillware-0.4.2/skills/optimization → skillware-0.4.5/skills/office}/__init__.py +0 -0
  121. {skillware-0.4.2/skills/wellness → skillware-0.4.5/skills/office/pdf_form_filler}/__init__.py +0 -0
  122. {skillware-0.4.2 → skillware-0.4.5}/skills/office/pdf_form_filler/card.json +0 -0
  123. {skillware-0.4.2 → skillware-0.4.5}/skills/office/pdf_form_filler/instructions.md +0 -0
  124. {skillware-0.4.2 → skillware-0.4.5}/skills/office/pdf_form_filler/manifest.yaml +0 -0
  125. {skillware-0.4.2 → skillware-0.4.5}/skills/office/pdf_form_filler/skill.py +0 -0
  126. {skillware-0.4.2 → skillware-0.4.5}/skills/office/pdf_form_filler/test_skill.py +0 -0
  127. {skillware-0.4.2 → skillware-0.4.5}/skills/office/pdf_form_filler/utils.py +0 -0
  128. {skillware-0.4.2/skillware → skillware-0.4.5/skills/optimization}/__init__.py +0 -0
  129. {skillware-0.4.2 → skillware-0.4.5}/skills/optimization/prompt_rewriter/__init__.py +0 -0
  130. {skillware-0.4.2 → skillware-0.4.5}/skills/optimization/prompt_rewriter/card.json +0 -0
  131. {skillware-0.4.2 → skillware-0.4.5}/skills/optimization/prompt_rewriter/instructions.md +0 -0
  132. {skillware-0.4.2 → skillware-0.4.5}/skills/optimization/prompt_rewriter/manifest.yaml +0 -0
  133. {skillware-0.4.2 → skillware-0.4.5}/skills/optimization/prompt_rewriter/skill.py +0 -0
  134. {skillware-0.4.2 → skillware-0.4.5}/skills/optimization/prompt_rewriter/test_skill.py +0 -0
  135. {skillware-0.4.2/skillware/core → skillware-0.4.5/skills/wellness}/__init__.py +0 -0
  136. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/__init__.py +0 -0
  137. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/card.json +0 -0
  138. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/constraints.py +0 -0
  139. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/crisis_gate.py +0 -0
  140. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/instructions.md +0 -0
  141. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/kb/corpus.json +0 -0
  142. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/kb/crisis_resources.json +0 -0
  143. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/kb/hard_constraints.yaml +0 -0
  144. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/kb_provider.py +0 -0
  145. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/manifest.yaml +0 -0
  146. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/resources.py +0 -0
  147. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/skill.py +0 -0
  148. {skillware-0.4.2 → skillware-0.4.5}/skills/wellness/mental_coach/test_skill.py +0 -0
  149. {skillware-0.4.2 → skillware-0.4.5}/skillware/__main__.py +0 -0
  150. {skillware-0.4.2 → skillware-0.4.5}/skillware/core/env.py +0 -0
  151. {skillware-0.4.2 → skillware-0.4.5}/skillware/version_policy.py +0 -0
  152. {skillware-0.4.2 → skillware-0.4.5}/skillware.egg-info/dependency_links.txt +0 -0
  153. {skillware-0.4.2 → skillware-0.4.5}/skillware.egg-info/entry_points.txt +0 -0
  154. {skillware-0.4.2 → skillware-0.4.5}/skillware.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skillware
3
- Version: 0.4.2
3
+ Version: 0.4.5
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
@@ -38,35 +38,77 @@ Requires-Dist: pyyaml
38
38
  Requires-Dist: python-dotenv
39
39
  Requires-Dist: beautifulsoup4
40
40
  Requires-Dist: packaging
41
+ Requires-Dist: jsonschema>=4.0
41
42
  Requires-Dist: rich>=13.0
42
43
  Provides-Extra: dev
43
44
  Requires-Dist: pytest; extra == "dev"
44
45
  Requires-Dist: pytest-mock; extra == "dev"
45
46
  Requires-Dist: flake8; extra == "dev"
46
47
  Requires-Dist: black; extra == "dev"
47
- Provides-Extra: cli
48
48
  Provides-Extra: gemini
49
49
  Requires-Dist: google-genai; extra == "gemini"
50
50
  Provides-Extra: claude
51
51
  Requires-Dist: anthropic; extra == "claude"
52
52
  Provides-Extra: openai
53
53
  Requires-Dist: openai; extra == "openai"
54
- Provides-Extra: office
55
- Requires-Dist: pymupdf; extra == "office"
54
+ Provides-Extra: agents
55
+ Requires-Dist: google-genai; extra == "agents"
56
+ Requires-Dist: anthropic; extra == "agents"
57
+ Requires-Dist: openai; extra == "agents"
58
+ Provides-Extra: compliance
59
+ Requires-Dist: google-genai; extra == "compliance"
60
+ Provides-Extra: creative
61
+ Requires-Dist: onnxruntime; extra == "creative"
62
+ Requires-Dist: pillow; extra == "creative"
63
+ Requires-Dist: rembg>=2.0.0; extra == "creative"
64
+ Provides-Extra: data-engineering
65
+ Requires-Dist: fastembed; extra == "data-engineering"
66
+ Requires-Dist: numpy; extra == "data-engineering"
56
67
  Provides-Extra: defi
57
68
  Requires-Dist: web3>=6.0.0; extra == "defi"
58
- Provides-Extra: embeddings
59
- Requires-Dist: fastembed; extra == "embeddings"
60
- Requires-Dist: numpy; extra == "embeddings"
69
+ Provides-Extra: dev-tools
70
+ Provides-Extra: finance
71
+ Provides-Extra: monitoring
72
+ Provides-Extra: office
73
+ Requires-Dist: anthropic; extra == "office"
74
+ Requires-Dist: pymupdf; extra == "office"
75
+ Provides-Extra: optimization
76
+ Provides-Extra: wellness
77
+ Requires-Dist: google-genai; extra == "wellness"
78
+ Provides-Extra: compliance-mica-module
79
+ Requires-Dist: google-genai; extra == "compliance-mica-module"
80
+ Provides-Extra: compliance-pii-masker
81
+ Provides-Extra: compliance-tos-evaluator
82
+ Provides-Extra: creative-bg-remover
83
+ Requires-Dist: rembg>=2.0.0; extra == "creative-bg-remover"
84
+ Requires-Dist: pillow; extra == "creative-bg-remover"
85
+ Requires-Dist: onnxruntime; extra == "creative-bg-remover"
86
+ Provides-Extra: data-engineering-novelty-extractor
87
+ Requires-Dist: fastembed; extra == "data-engineering-novelty-extractor"
88
+ Requires-Dist: numpy; extra == "data-engineering-novelty-extractor"
89
+ Provides-Extra: data-engineering-synthetic-generator
90
+ Provides-Extra: defi-evm-tx-handler
91
+ Requires-Dist: web3>=6.0.0; extra == "defi-evm-tx-handler"
92
+ Provides-Extra: dev-tools-issue-resolver
93
+ Provides-Extra: finance-uk-companies-house-handler
94
+ Provides-Extra: finance-wallet-screening
95
+ Provides-Extra: monitoring-token-limiter
96
+ Provides-Extra: office-pdf-form-filler
97
+ Requires-Dist: pymupdf; extra == "office-pdf-form-filler"
98
+ Requires-Dist: anthropic; extra == "office-pdf-form-filler"
99
+ Provides-Extra: optimization-prompt-rewriter
100
+ Provides-Extra: wellness-mental-coach
101
+ Requires-Dist: google-genai; extra == "wellness-mental-coach"
61
102
  Provides-Extra: all
62
- Requires-Dist: rich>=13.0; extra == "all"
63
- Requires-Dist: google-genai; extra == "all"
64
103
  Requires-Dist: anthropic; extra == "all"
65
- Requires-Dist: openai; extra == "all"
66
- Requires-Dist: pymupdf; extra == "all"
67
- Requires-Dist: web3>=6.0.0; extra == "all"
68
104
  Requires-Dist: fastembed; extra == "all"
105
+ Requires-Dist: google-genai; extra == "all"
69
106
  Requires-Dist: numpy; extra == "all"
107
+ Requires-Dist: onnxruntime; extra == "all"
108
+ Requires-Dist: pillow; extra == "all"
109
+ Requires-Dist: pymupdf; extra == "all"
110
+ Requires-Dist: rembg>=2.0.0; extra == "all"
111
+ Requires-Dist: web3>=6.0.0; extra == "all"
70
112
  Dynamic: license-file
71
113
 
72
114
  <div align="center">
@@ -183,21 +225,24 @@ cd skillware
183
225
  pip install -e ".[dev,all]"
184
226
  ```
185
227
 
186
- For documentation-only work, `pip install -e ".[dev]"` is enough. Skill and framework contributors should use `[dev,all]` to match CI (see [TESTING.md](docs/TESTING.md)).
228
+ For documentation-only work, `pip install -e ".[dev]"` is enough. Skill and framework contributors should use `[dev,all]` to match CI (see [TESTING.md](docs/TESTING.md) and [Install extras](docs/usage/install_extras.md)).
187
229
 
188
- > **Note**: Individual skills may have their own dependencies. The `SkillLoader` validates `manifest.yaml` and warns of missing packages (e.g., `requests`, `pandas`) upon loading a skill.
230
+ > **Note**: Every skill has a dedicated pip extra (`pip install "skillware[category_skill]"`). The `SkillLoader` validates `manifest.yaml` on load and suggests the matching extra when packages are missing. See [Install extras](docs/usage/install_extras.md).
189
231
 
190
232
  ### 2. Verify your installation
191
233
 
192
234
  ```bash
193
235
  skillware list
236
+ skillware paths
194
237
  ```
195
238
 
196
239
  This prints a table of all locally available skills and confirms the install
197
- and path resolution are working. Running `skillware` with no arguments opens
198
- the interactive menu. As optional checks you can also run `skillware test` to
199
- execute bundle tests, and `skillware examples` to browse the runnable example
200
- index (fetched from GitHub when no local `examples/README.md` is present).
240
+ and path resolution are working. `skillware paths` shows the same root order
241
+ the loader uses (external → project → bundled), tier labels, and shadowing.
242
+ Running `skillware` with no arguments opens the interactive menu. As optional
243
+ checks you can also run `skillware test` to execute bundle tests, and
244
+ `skillware examples` to browse the runnable example index (fetched from GitHub
245
+ when no local `examples/README.md` is present).
201
246
 
202
247
  If `skillware` is not recognized, Python's `Scripts` directory may not be on
203
248
  your PATH — use `python -m skillware list` as a fallback. See
@@ -221,6 +266,8 @@ Copy-Item .env.example .env
221
266
 
222
267
  Edit `.env` with agent keys (for example Gemini) and any keys your skills need. Agent keys power your LLM client; skill keys are declared per skill in the [Skill library](docs/skills/README.md). See [API keys for skills](docs/usage/api_keys.md) for setup, security, and framework variables.
223
268
 
269
+ > Note: any loaded skill runs in your process and can read every variable in `os.environ`. Before wiring in real keys — especially with skills you did not write — see the [skill trust model](docs/security/skill-trust-model.md).
270
+
224
271
  ### 4. Usage Example (Gemini)
225
272
 
226
273
  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.
@@ -289,14 +336,15 @@ For other providers and shared integration patterns, see the [usage guides index
289
336
  | Topic | Links |
290
337
  | :--- | :--- |
291
338
  | **Introduction** | [Introduction](docs/introduction.md) · [Vision](docs/vision.md) · [Comparison](COMPARISON.md) |
292
- | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
339
+ | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.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) |
340
+ | **Security** | [Skill trust model](docs/security/skill-trust-model.md) · [SECURITY.md](SECURITY.md) |
293
341
  | **Contributing** | [Contributing](CONTRIBUTING.md) · [Agent Native Workflow](docs/contributing/ai_native_workflow.md) · [Testing](docs/TESTING.md) · [Changelog](CHANGELOG.md) |
294
342
 
295
343
  ## Contributing
296
344
 
297
345
  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.
298
346
 
299
- See the **Contributing** row in [Documentation](#documentation) for the full path, [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]`).
347
+ 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]`).
300
348
 
301
349
  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.
302
350
 
@@ -112,21 +112,24 @@ cd skillware
112
112
  pip install -e ".[dev,all]"
113
113
  ```
114
114
 
115
- For documentation-only work, `pip install -e ".[dev]"` is enough. Skill and framework contributors should use `[dev,all]` to match CI (see [TESTING.md](docs/TESTING.md)).
115
+ For documentation-only work, `pip install -e ".[dev]"` is enough. Skill and framework contributors should use `[dev,all]` to match CI (see [TESTING.md](docs/TESTING.md) and [Install extras](docs/usage/install_extras.md)).
116
116
 
117
- > **Note**: Individual skills may have their own dependencies. The `SkillLoader` validates `manifest.yaml` and warns of missing packages (e.g., `requests`, `pandas`) upon loading a skill.
117
+ > **Note**: Every skill has a dedicated pip extra (`pip install "skillware[category_skill]"`). The `SkillLoader` validates `manifest.yaml` on load and suggests the matching extra when packages are missing. See [Install extras](docs/usage/install_extras.md).
118
118
 
119
119
  ### 2. Verify your installation
120
120
 
121
121
  ```bash
122
122
  skillware list
123
+ skillware paths
123
124
  ```
124
125
 
125
126
  This prints a table of all locally available skills and confirms the install
126
- and path resolution are working. Running `skillware` with no arguments opens
127
- the interactive menu. As optional checks you can also run `skillware test` to
128
- execute bundle tests, and `skillware examples` to browse the runnable example
129
- index (fetched from GitHub when no local `examples/README.md` is present).
127
+ and path resolution are working. `skillware paths` shows the same root order
128
+ the loader uses (external → project → bundled), tier labels, and shadowing.
129
+ Running `skillware` with no arguments opens the interactive menu. As optional
130
+ checks you can also run `skillware test` to execute bundle tests, and
131
+ `skillware examples` to browse the runnable example index (fetched from GitHub
132
+ when no local `examples/README.md` is present).
130
133
 
131
134
  If `skillware` is not recognized, Python's `Scripts` directory may not be on
132
135
  your PATH — use `python -m skillware list` as a fallback. See
@@ -150,6 +153,8 @@ Copy-Item .env.example .env
150
153
 
151
154
  Edit `.env` with agent keys (for example Gemini) and any keys your skills need. Agent keys power your LLM client; skill keys are declared per skill in the [Skill library](docs/skills/README.md). See [API keys for skills](docs/usage/api_keys.md) for setup, security, and framework variables.
152
155
 
156
+ > Note: any loaded skill runs in your process and can read every variable in `os.environ`. Before wiring in real keys — especially with skills you did not write — see the [skill trust model](docs/security/skill-trust-model.md).
157
+
153
158
  ### 4. Usage Example (Gemini)
154
159
 
155
160
  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.
@@ -218,14 +223,15 @@ For other providers and shared integration patterns, see the [usage guides index
218
223
  | Topic | Links |
219
224
  | :--- | :--- |
220
225
  | **Introduction** | [Introduction](docs/introduction.md) · [Vision](docs/vision.md) · [Comparison](COMPARISON.md) |
221
- | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.md) · [Examples](examples/README.md) · [Agent Loops](docs/usage/agent_loops.md) · [API Keys](docs/usage/api_keys.md) · [CLI](docs/usage/cli.md) |
226
+ | **Usage guides** | [Skill Library](docs/skills/README.md) · [Usage Guide](docs/usage/README.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) |
227
+ | **Security** | [Skill trust model](docs/security/skill-trust-model.md) · [SECURITY.md](SECURITY.md) |
222
228
  | **Contributing** | [Contributing](CONTRIBUTING.md) · [Agent Native Workflow](docs/contributing/ai_native_workflow.md) · [Testing](docs/TESTING.md) · [Changelog](CHANGELOG.md) |
223
229
 
224
230
  ## Contributing
225
231
 
226
232
  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.
227
233
 
228
- See the **Contributing** row in [Documentation](#documentation) for the full path, [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]`).
234
+ 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]`).
229
235
 
230
236
  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.
231
237
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "skillware"
7
- version = "0.4.2"
7
+ version = "0.4.5"
8
8
  description = "A framework for modular, self-contained AI skills."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -23,6 +23,7 @@ dependencies = [
23
23
  "python-dotenv",
24
24
  "beautifulsoup4",
25
25
  "packaging",
26
+ "jsonschema>=4.0",
26
27
  "rich>=13.0",
27
28
  ]
28
29
  requires-python = ">=3.10"
@@ -37,7 +38,6 @@ dev = [
37
38
  "flake8",
38
39
  "black",
39
40
  ]
40
- cli = []
41
41
  gemini = [
42
42
  "google-genai",
43
43
  ]
@@ -47,27 +47,108 @@ claude = [
47
47
  openai = [
48
48
  "openai",
49
49
  ]
50
- office = [
51
- "pymupdf",
50
+ agents = [
51
+ "google-genai",
52
+ "anthropic",
53
+ "openai",
54
+ ]
55
+
56
+ # --- extras: begin generated by scripts/sync_extras.py ---
57
+
58
+ compliance = [
59
+ "google-genai",
60
+ ]
61
+
62
+ creative = [
63
+ "onnxruntime",
64
+ "pillow",
65
+ "rembg>=2.0.0",
66
+ ]
67
+
68
+ data_engineering = [
69
+ "fastembed",
70
+ "numpy",
52
71
  ]
72
+
53
73
  defi = [
54
74
  "web3>=6.0.0",
55
75
  ]
56
- embeddings = [
76
+
77
+ dev_tools = []
78
+
79
+ finance = []
80
+
81
+ monitoring = []
82
+
83
+ office = [
84
+ "anthropic",
85
+ "pymupdf",
86
+ ]
87
+
88
+ optimization = []
89
+
90
+ wellness = [
91
+ "google-genai",
92
+ ]
93
+
94
+ compliance_mica_module = [
95
+ "google-genai",
96
+ ]
97
+
98
+ compliance_pii_masker = []
99
+
100
+ compliance_tos_evaluator = []
101
+
102
+ creative_bg_remover = [
103
+ "rembg>=2.0.0",
104
+ "pillow",
105
+ "onnxruntime",
106
+ ]
107
+
108
+ data_engineering_novelty_extractor = [
57
109
  "fastembed",
58
110
  "numpy",
59
111
  ]
60
- all = [
61
- "rich>=13.0",
112
+
113
+ data_engineering_synthetic_generator = []
114
+
115
+ defi_evm_tx_handler = [
116
+ "web3>=6.0.0",
117
+ ]
118
+
119
+ dev_tools_issue_resolver = []
120
+
121
+ finance_uk_companies_house_handler = []
122
+
123
+ finance_wallet_screening = []
124
+
125
+ monitoring_token_limiter = []
126
+
127
+ office_pdf_form_filler = [
128
+ "pymupdf",
129
+ "anthropic",
130
+ ]
131
+
132
+ optimization_prompt_rewriter = []
133
+
134
+ wellness_mental_coach = [
62
135
  "google-genai",
136
+ ]
137
+
138
+ all = [
63
139
  "anthropic",
64
- "openai",
65
- "pymupdf",
66
- "web3>=6.0.0",
67
140
  "fastembed",
141
+ "google-genai",
68
142
  "numpy",
143
+ "onnxruntime",
144
+ "pillow",
145
+ "pymupdf",
146
+ "rembg>=2.0.0",
147
+ "web3>=6.0.0",
69
148
  ]
70
149
 
150
+ # --- extras: end generated by scripts/sync_extras.py ---
151
+
71
152
  [tool.setuptools]
72
153
  include-package-data = true
73
154
 
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "Background Remover",
3
+ "description": "Remove image backgrounds locally using rembg and return transparent PNGs.",
4
+ "issuer": {
5
+ "name": "Ayush Srivastava",
6
+ "email": "ayush.sri0705@gmail.com",
7
+ "github": "AyushSrivastava1818",
8
+ "org": ""
9
+ },
10
+ "icon": "photo",
11
+ "color": "violet",
12
+ "ui_schema": {
13
+ "type": "card",
14
+ "fields": [
15
+ {
16
+ "key": "success",
17
+ "label": "Status",
18
+ "type": "status_badge"
19
+ },
20
+ {
21
+ "key": "width",
22
+ "label": "Width",
23
+ "type": "count"
24
+ },
25
+ {
26
+ "key": "height",
27
+ "label": "Height",
28
+ "type": "count"
29
+ },
30
+ {
31
+ "key": "model_used",
32
+ "label": "Model"
33
+ },
34
+ {
35
+ "key": "output_path",
36
+ "label": "Output",
37
+ "type": "file_path"
38
+ }
39
+ ]
40
+ }
41
+ }
@@ -0,0 +1,118 @@
1
+ # Background Remover (`creative/bg_remover`)
2
+
3
+ Removes backgrounds from **still images** locally using rembg. Accepts base64 or a local file path; returns a transparent PNG in `image_base64` and optionally writes to `output_path`. Does not fetch URLs or call cloud APIs.
4
+
5
+ ## When to use
6
+
7
+ Invoke when the user asks to:
8
+
9
+ - remove the background from an image
10
+ - create a transparent PNG or PNG with alpha
11
+ - cut out, isolate, or extract a product, person, logo, or subject
12
+ - prepare an image for design, e-commerce, or compositing workflows
13
+
14
+ Trigger phrases include: "remove background", "transparent background", "cut out", "isolate product/person", "PNG with alpha", "no background".
15
+
16
+ ## When not to use
17
+
18
+ Do **not** invoke for:
19
+
20
+ - videos or animated media
21
+ - batch folders or bulk directory processing
22
+ - requests to edit only in Photoshop, Canva, or other cloud editors when no local image bytes are available to pass in
23
+ - workflows where neither `image` nor `input_path` can be supplied
24
+
25
+ ## Before calling
26
+
27
+ If the user wants background removal but has **not** provided an image, file path, or chat attachment, **ask** for one first. Do not call until input exists.
28
+
29
+ This skill does **not** fetch URLs. When the user provides an `https://…` link, download to a temp file first, then pass `input_path`.
30
+
31
+ For S3, GCS, Azure Blob, or Cloudflare R2: download the object to a temp file → `input_path` → after success upload from `output_path`. Auth and SDK calls stay in the host; this skill is local-only.
32
+
33
+ On the **first run** in a fresh environment, processing may take a few minutes while rembg downloads the ONNX model (~176 MB for `isnet-general-use`). Later runs reuse the cache and are much faster.
34
+
35
+ ## Input (one required: `image` OR `input_path`)
36
+
37
+ | Scenario | Parameter |
38
+ | :--- | :--- |
39
+ | Uploaded, pasted, or **attached** image in chat | `image` (base64 from host encoding) |
40
+ | Local path (e.g. `D:\photos\cat.png`) | `input_path` (absolute path preferred on Windows) |
41
+ | URL | Download to temp file, then `input_path` |
42
+ | Cloud object storage | Download object → temp file → `input_path` |
43
+
44
+ If **both** `image` and `input_path` are sent, **`image` wins** (do not double-submit).
45
+
46
+ ### Example payloads
47
+
48
+ Chat / attachment:
49
+
50
+ ```json
51
+ {"image": "<base64>"}
52
+ ```
53
+
54
+ Local file with output beside source:
55
+
56
+ ```json
57
+ {
58
+ "input_path": "D:\\photos\\1223.png",
59
+ "output_path": "D:\\photos\\1223_no_bg.png"
60
+ }
61
+ ```
62
+
63
+ URL (host downloads first; URL is not a skill parameter):
64
+
65
+ 1. Download `https://example.com/product.jpg` → `/tmp/product.jpg`
66
+ 2. Execute:
67
+
68
+ ```json
69
+ {
70
+ "input_path": "/tmp/product.jpg",
71
+ "output_path": "/tmp/product_no_bg.png"
72
+ }
73
+ ```
74
+
75
+ ## Model and quality options
76
+
77
+ | User intent | Suggested args |
78
+ | :--- | :--- |
79
+ | General product, logo, or scene (default) | `model`: `isnet-general-use` |
80
+ | Person, portrait, or human subject | `model`: `u2net_human_seg` |
81
+ | Legacy / simple scenes | `model`: `u2net` or `silueta` |
82
+ | Hair, fur, glass, or fine edges need cleaner alpha | `alpha_matting`: `true` (slower) |
83
+
84
+ Omit `model` for default `isnet-general-use`. Set `alpha_matting` only when edge quality matters or the user mentions hair, fur, or wispy details.
85
+
86
+ ## Output
87
+
88
+ | Scenario | Parameters / handling |
89
+ | :--- | :--- |
90
+ | File on disk | Set `output_path`. Prefer `{same_dir}/{stem}_no_bg.png`. Do **not** overwrite the source unless asked. |
91
+ | Chat or API only | Omit `output_path`; use `image_base64` from the result (always present on success). |
92
+ | Save next to original | Same directory, new name (e.g. `1223_no_bg.png`). |
93
+
94
+ ## Interpreting a successful result
95
+
96
+ When `success` is `true`:
97
+
98
+ - `image_base64` — transparent PNG bytes (always set); decode or attach for the user when no file path was requested
99
+ - `mime_type` — always `image/png`
100
+ - `width`, `height` — output dimensions; mention when useful
101
+ - `model_used` — rembg model that ran
102
+ - `output_path` — echo of the path written when provided; confirm the file exists on disk
103
+
104
+ Do not call again for the same request unless the user asks for another image or different settings.
105
+
106
+ ## Dependencies
107
+
108
+ Runtime: `rembg`, `pillow`, `onnxruntime`. Install: `pip install "skillware[creative_bg_remover]"` or `pip install "skillware[creative]"`.
109
+
110
+ First `execute()` downloads the ONNX model to the rembg cache (`~/.u2net/` on Linux/macOS, `%USERPROFILE%\.u2net\` on Windows).
111
+
112
+ ## Errors
113
+
114
+ | `error_code` | Response |
115
+ | :--- | :--- |
116
+ | `INVALID_INPUT` | Ask for an upload, attachment, base64 payload, or local `input_path`. |
117
+ | `MISSING_DEPENDENCY` | Ask the user to run `pip install "skillware[creative_bg_remover]"` (or `pip install rembg pillow onnxruntime`), then retry. |
118
+ | `PROCESSING_FAILED` | Surface the `error` string; input may be missing, corrupt, or unsupported. |
@@ -0,0 +1,96 @@
1
+ name: "creative/bg_remover"
2
+ version: "0.1.0"
3
+ description: "Remove image backgrounds locally using rembg."
4
+ short_description: "Offline background removal using rembg with transparent PNG output."
5
+
6
+ issuer:
7
+ name: Ayush Srivastava
8
+ email: "ayush.sri0705@gmail.com"
9
+ github: AyushSrivastava1818
10
+ org: ""
11
+
12
+ category: "creative"
13
+
14
+ parameters:
15
+ type: object
16
+ properties:
17
+ image:
18
+ type: string
19
+ description: "Base64-encoded still image (preferred for chat/upload handoff)."
20
+
21
+ input_path:
22
+ type: string
23
+ description: "Absolute or relative path to a local still image file."
24
+
25
+ output_path:
26
+ type: string
27
+ description: "Optional path to write PNG; if omitted, result is base64-only in image_base64."
28
+
29
+ model:
30
+ type: string
31
+ description: "rembg model; default isnet-general-use. Use u2net_human_seg for people."
32
+ enum:
33
+ - isnet-general-use
34
+ - u2net
35
+ - u2net_human_seg
36
+ - silueta
37
+ default: isnet-general-use
38
+
39
+ alpha_matting:
40
+ type: boolean
41
+ description: "Enable alpha matting for finer edges (hair, fur); slower when true."
42
+ default: false
43
+ required: []
44
+
45
+ outputs:
46
+ success:
47
+ type: boolean
48
+ description: "True when background removal completed successfully."
49
+
50
+ image_base64:
51
+ type: string
52
+ description: "Base64-encoded transparent PNG (always set on success)."
53
+
54
+ mime_type:
55
+ type: string
56
+ description: "Output MIME type (image/png on success)."
57
+
58
+ output_path:
59
+ type: string
60
+ description: "Echo of the requested output path when provided."
61
+
62
+ width:
63
+ type: integer
64
+ description: "Output image width in pixels."
65
+
66
+ height:
67
+ type: integer
68
+ description: "Output image height in pixels."
69
+
70
+ model_used:
71
+ type: string
72
+ description: "rembg model used for processing."
73
+
74
+ error:
75
+ type: string
76
+ description: "Human-readable error message when success is false."
77
+
78
+ error_code:
79
+ type: string
80
+ description: "INVALID_INPUT, MISSING_DEPENDENCY, or PROCESSING_FAILED."
81
+
82
+ requirements:
83
+ - rembg>=2.0.0
84
+ - pillow
85
+ - onnxruntime
86
+
87
+ constitution: |
88
+ 1. IMAGE_ONLY: Process still images only.
89
+ 2. LOCAL_FIRST: Never use cloud APIs.
90
+ 3. PRIVACY: Never store image bytes.
91
+ 4. DETERMINISTIC: Same input produces same output.
92
+ 5. FAIL_CLOSED: Return structured errors on invalid input.
93
+
94
+ presentation:
95
+ icon: "photo"
96
+ color: "#8b5cf6"