skillware 0.5.7__tar.gz → 0.5.8__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 (341) hide show
  1. {skillware-0.5.7/skillware.egg-info → skillware-0.5.8}/PKG-INFO +20 -9
  2. {skillware-0.5.7 → skillware-0.5.8}/README.md +8 -8
  3. {skillware-0.5.7 → skillware-0.5.8}/pyproject.toml +50 -2
  4. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/mica_module/card.json +4 -0
  5. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/mica_module/instructions.md +2 -1
  6. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/mica_module/manifest.yaml +2 -1
  7. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/mica_module/skill.py +5 -1
  8. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/mica_module/test_skill.py +4 -0
  9. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/pii_masker/skill.py +2 -1
  10. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/novelty_extractor/skill.py +2 -8
  11. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/test_skill.py +2 -1
  12. {skillware-0.5.7 → skillware-0.5.8}/skills/office/pdf_form_filler/manifest.yaml +1 -1
  13. {skillware-0.5.7 → skillware-0.5.8}/skills/office/pdf_form_filler/skill.py +29 -9
  14. skillware-0.5.8/skills/office/pdf_form_filler/test_skill.py +167 -0
  15. skillware-0.5.8/skills/office/web_form_mapper/__init__.py +1 -0
  16. skillware-0.5.8/skills/office/web_form_mapper/card.json +29 -0
  17. skillware-0.5.8/skills/office/web_form_mapper/dom_parser.py +228 -0
  18. skillware-0.5.8/skills/office/web_form_mapper/instructions.md +51 -0
  19. skillware-0.5.8/skills/office/web_form_mapper/kb/form_profiles/delaware_corp_filing.yaml +12 -0
  20. skillware-0.5.8/skills/office/web_form_mapper/kb/form_profiles/irs_portal.yaml +14 -0
  21. skillware-0.5.8/skills/office/web_form_mapper/manifest.yaml +131 -0
  22. skillware-0.5.8/skills/office/web_form_mapper/matcher.py +430 -0
  23. skillware-0.5.8/skills/office/web_form_mapper/models.py +85 -0
  24. skillware-0.5.8/skills/office/web_form_mapper/skill.py +421 -0
  25. skillware-0.5.8/skills/office/web_form_mapper/submitter.py +246 -0
  26. skillware-0.5.8/skills/office/web_form_mapper/test_skill.py +328 -0
  27. skillware-0.5.8/skills/office/web_form_mapper/tests/fixtures/aspnet_legacy_form.html +58 -0
  28. skillware-0.5.8/skills/office/web_form_mapper/tests/fixtures/captcha_blocked_form.html +14 -0
  29. skillware-0.5.8/skills/office/web_form_mapper/tests/fixtures/modern_spa_form.html +30 -0
  30. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/prompt_rewriter/skill.py +2 -4
  31. skillware-0.5.8/skills/security/deepfake_guard/__init__.py +5 -0
  32. skillware-0.5.8/skills/security/deepfake_guard/card.json +50 -0
  33. skillware-0.5.8/skills/security/deepfake_guard/constants.py +113 -0
  34. skillware-0.5.8/skills/security/deepfake_guard/document.py +410 -0
  35. skillware-0.5.8/skills/security/deepfake_guard/forensics.py +397 -0
  36. skillware-0.5.8/skills/security/deepfake_guard/guard.py +342 -0
  37. skillware-0.5.8/skills/security/deepfake_guard/instructions.md +54 -0
  38. skillware-0.5.8/skills/security/deepfake_guard/manifest.yaml +132 -0
  39. skillware-0.5.8/skills/security/deepfake_guard/provenance.py +139 -0
  40. skillware-0.5.8/skills/security/deepfake_guard/skill.py +337 -0
  41. skillware-0.5.8/skills/security/deepfake_guard/test_skill.py +351 -0
  42. {skillware-0.5.7 → skillware-0.5.8}/skillware/chains.py +193 -0
  43. {skillware-0.5.7 → skillware-0.5.8}/skillware/cli_os.py +2 -0
  44. {skillware-0.5.7 → skillware-0.5.8}/skillware/context.py +58 -6
  45. skillware-0.5.8/skillware/core/base_skill.py +147 -0
  46. {skillware-0.5.7 → skillware-0.5.8}/skillware/version_policy.py +2 -2
  47. {skillware-0.5.7 → skillware-0.5.8/skillware.egg-info}/PKG-INFO +20 -9
  48. {skillware-0.5.7 → skillware-0.5.8}/skillware.egg-info/SOURCES.txt +30 -0
  49. {skillware-0.5.7 → skillware-0.5.8}/skillware.egg-info/requires.txt +13 -0
  50. skillware-0.5.8/tests/test_async_concurrency_stress.py +174 -0
  51. skillware-0.5.8/tests/test_async_execution.py +196 -0
  52. skillware-0.5.8/tests/test_base_skill.py +99 -0
  53. skillware-0.5.8/tests/test_chains_async.py +166 -0
  54. {skillware-0.5.7 → skillware-0.5.8}/tests/test_cli.py +1 -1
  55. {skillware-0.5.7 → skillware-0.5.8}/tests/test_examples_smoke.py +46 -0
  56. skillware-0.5.8/tests/test_security_audit.py +142 -0
  57. {skillware-0.5.7 → skillware-0.5.8}/tests/test_version_policy.py +23 -13
  58. skillware-0.5.7/skills/office/pdf_form_filler/test_skill.py +0 -86
  59. skillware-0.5.7/skillware/core/base_skill.py +0 -82
  60. skillware-0.5.7/tests/test_base_skill.py +0 -30
  61. {skillware-0.5.7 → skillware-0.5.8}/LICENSE +0 -0
  62. {skillware-0.5.7 → skillware-0.5.8}/MANIFEST.in +0 -0
  63. {skillware-0.5.7 → skillware-0.5.8}/setup.cfg +0 -0
  64. {skillware-0.5.7 → skillware-0.5.8}/skills/__init__.py +0 -0
  65. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/__init__.py +0 -0
  66. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/mica_module/__init__.py +0 -0
  67. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/mica_module/mica_corpus.json +0 -0
  68. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/pii_masker/__init__.py +0 -0
  69. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/pii_masker/card.json +0 -0
  70. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/pii_masker/instructions.md +0 -0
  71. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/pii_masker/manifest.yaml +0 -0
  72. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/pii_masker/test_skill.py +0 -0
  73. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/tos_evaluator/__init__.py +0 -0
  74. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/tos_evaluator/card.json +0 -0
  75. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/tos_evaluator/instructions.md +0 -0
  76. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/tos_evaluator/manifest.yaml +0 -0
  77. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/tos_evaluator/skill.py +0 -0
  78. {skillware-0.5.7 → skillware-0.5.8}/skills/compliance/tos_evaluator/test_skill.py +0 -0
  79. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/__init__.py +0 -0
  80. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/bg_remover/__init__.py +0 -0
  81. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/bg_remover/card.json +0 -0
  82. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/bg_remover/instructions.md +0 -0
  83. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/bg_remover/manifest.yaml +0 -0
  84. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/bg_remover/skill.py +0 -0
  85. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/bg_remover/test_skill.py +0 -0
  86. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/__init__.py +0 -0
  87. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/archetypes.py +0 -0
  88. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/builder.py +0 -0
  89. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/card.json +0 -0
  90. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/instructions.md +0 -0
  91. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/lint.py +0 -0
  92. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/manifest.yaml +0 -0
  93. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/placeholders.py +0 -0
  94. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/schemas/deck_spec.schema.json +0 -0
  95. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/skill.py +0 -0
  96. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/templates/corporate_v1.pptx +0 -0
  97. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/templates/minimal_v1.pptx +0 -0
  98. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/templates/pitch_v1.pptx +0 -0
  99. {skillware-0.5.7 → skillware-0.5.8}/skills/creative/deck_builder/test_skill.py +0 -0
  100. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/__init__.py +0 -0
  101. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/novelty_extractor/__init__.py +0 -0
  102. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/novelty_extractor/card.json +0 -0
  103. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/novelty_extractor/instructions.md +0 -0
  104. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/novelty_extractor/manifest.yaml +0 -0
  105. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/novelty_extractor/test_skill.py +0 -0
  106. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/semantic_web_proxy/__init__.py +0 -0
  107. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/semantic_web_proxy/card.json +0 -0
  108. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/semantic_web_proxy/instructions.md +0 -0
  109. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/semantic_web_proxy/manifest.yaml +0 -0
  110. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/semantic_web_proxy/proxy.py +0 -0
  111. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/semantic_web_proxy/skill.py +0 -0
  112. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/semantic_web_proxy/test_skill.py +0 -0
  113. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/synthetic_generator/__init__.py +0 -0
  114. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/synthetic_generator/card.json +0 -0
  115. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/synthetic_generator/instructions.md +0 -0
  116. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/synthetic_generator/manifest.yaml +0 -0
  117. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/synthetic_generator/skill.py +0 -0
  118. {skillware-0.5.7 → skillware-0.5.8}/skills/data_engineering/synthetic_generator/test_skill.py +0 -0
  119. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/__init__.py +0 -0
  120. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_reader/__init__.py +0 -0
  121. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_reader/abis.py +0 -0
  122. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_reader/card.json +0 -0
  123. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_reader/instructions.md +0 -0
  124. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_reader/manifest.yaml +0 -0
  125. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_reader/skill.py +0 -0
  126. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_reader/test_skill.py +0 -0
  127. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/__init__.py +0 -0
  128. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/abis.py +0 -0
  129. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/card.json +0 -0
  130. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/config.yaml.example +0 -0
  131. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/data/addressbook.yaml +0 -0
  132. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/data/chains.yaml +0 -0
  133. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/data/tokens.yaml +0 -0
  134. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/instructions.md +0 -0
  135. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/manifest.yaml +0 -0
  136. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/skill.py +0 -0
  137. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/evm_tx_handler/test_skill.py +0 -0
  138. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/__init__.py +0 -0
  139. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/card.json +0 -0
  140. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/fixtures/goplus_clean_base.json +0 -0
  141. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/fixtures/goplus_closed_source_unknown.json +0 -0
  142. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/fixtures/goplus_honeypot.json +0 -0
  143. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/fixtures/goplus_medium.json +0 -0
  144. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/instructions.md +0 -0
  145. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/manifest.yaml +0 -0
  146. {skillware-0.5.7 → skillware-0.5.8}/skills/defi/token_security_scanner/skill.py +0 -0
  147. {skillware-0.5.7 → skillware-0.5.8}/skills/dev_tools/__init__.py +0 -0
  148. {skillware-0.5.7 → skillware-0.5.8}/skills/dev_tools/issue_resolver/__init__.py +0 -0
  149. {skillware-0.5.7 → skillware-0.5.8}/skills/dev_tools/issue_resolver/card.json +0 -0
  150. {skillware-0.5.7 → skillware-0.5.8}/skills/dev_tools/issue_resolver/instructions.md +0 -0
  151. {skillware-0.5.7 → skillware-0.5.8}/skills/dev_tools/issue_resolver/manifest.yaml +0 -0
  152. {skillware-0.5.7 → skillware-0.5.8}/skills/dev_tools/issue_resolver/skill.py +0 -0
  153. {skillware-0.5.7 → skillware-0.5.8}/skills/dev_tools/issue_resolver/test_skill.py +0 -0
  154. {skillware-0.5.7 → skillware-0.5.8}/skills/dev_tools/issue_resolver/workflow.py +0 -0
  155. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/__init__.py +0 -0
  156. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/uk_companies_house_handler/__init__.py +0 -0
  157. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/uk_companies_house_handler/card.json +0 -0
  158. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/uk_companies_house_handler/data/api_index.json +0 -0
  159. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/uk_companies_house_handler/data/terminology_map.yaml +0 -0
  160. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/uk_companies_house_handler/instructions.md +0 -0
  161. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/uk_companies_house_handler/manifest.yaml +0 -0
  162. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/uk_companies_house_handler/skill.py +0 -0
  163. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/uk_companies_house_handler/test_skill.py +0 -0
  164. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/__init__.py +0 -0
  165. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/card.json +0 -0
  166. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/data/entities.ftm.json +0 -0
  167. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/data/malicious_scs_2025.json +0 -0
  168. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/data/normalized_fbi_lazarus_20250722_180019.json +0 -0
  169. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/data/normalized_israel_nbctf_20250722_180019.json +0 -0
  170. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/data/normalized_uniswap_trm.json +0 -0
  171. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/instructions.md +0 -0
  172. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/maintenance/normalization_tool.py +0 -0
  173. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/maintenance/normalize_uniswap_trm.py +0 -0
  174. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/manifest.yaml +0 -0
  175. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/skill.py +0 -0
  176. {skillware-0.5.7 → skillware-0.5.8}/skills/finance/wallet_screening/test_skill.py +0 -0
  177. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/__init__.py +0 -0
  178. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/__init__.py +0 -0
  179. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/card.json +0 -0
  180. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/instructions.md +0 -0
  181. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/kb/constitution.json +0 -0
  182. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/kb/entries.json +0 -0
  183. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/kb/generation.json +0 -0
  184. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/kb/pack_meta.json +0 -0
  185. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/lexicon.py +0 -0
  186. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/manifest.yaml +0 -0
  187. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/skill.py +0 -0
  188. {skillware-0.5.7 → skillware-0.5.8}/skills/linguistics/korean_slang/test_skill.py +0 -0
  189. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/__init__.py +0 -0
  190. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/__init__.py +0 -0
  191. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/card.json +0 -0
  192. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/benchmarks_missing_ref.json +0 -0
  193. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/charter_floor_boundary.yaml +0 -0
  194. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/example_charter.yaml +0 -0
  195. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/example_snapshot.json +0 -0
  196. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/expected_findings.json +0 -0
  197. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/invalid_benchmarks_schema.json +0 -0
  198. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/invalid_charter_dependent_required.yaml +0 -0
  199. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/invalid_charter_schema.yaml +0 -0
  200. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/invalid_charter_unknown_denominator.yaml +0 -0
  201. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/invalid_charter_unknown_rule_metric.yaml +0 -0
  202. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/invalid_snapshot_schema.json +0 -0
  203. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/snapshot_empty_metrics.json +0 -0
  204. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/snapshot_floor_at_min.json +0 -0
  205. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/snapshot_floor_below_min.json +0 -0
  206. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/fixtures/snapshot_unknown_key.json +0 -0
  207. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/instructions.md +0 -0
  208. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/kb/benchmarks_demo.json +0 -0
  209. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/manifest.yaml +0 -0
  210. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/schemas/benchmarks.schema.json +0 -0
  211. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/schemas/metrics.schema.json +0 -0
  212. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/schemas/policy.schema.json +0 -0
  213. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/skill.py +0 -0
  214. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/kpi_gate/test_skill.py +0 -0
  215. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/token_limiter/__init__.py +0 -0
  216. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/token_limiter/budget.py +0 -0
  217. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/token_limiter/card.json +0 -0
  218. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/token_limiter/data/model_pricing.json +0 -0
  219. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/token_limiter/instructions.md +0 -0
  220. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/token_limiter/manifest.yaml +0 -0
  221. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/token_limiter/skill.py +0 -0
  222. {skillware-0.5.7 → skillware-0.5.8}/skills/monitoring/token_limiter/test_skill.py +0 -0
  223. {skillware-0.5.7 → skillware-0.5.8}/skills/office/__init__.py +0 -0
  224. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/__init__.py +0 -0
  225. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/addressbook.py +0 -0
  226. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/attachments.py +0 -0
  227. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/card.json +0 -0
  228. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/data/.gitignore +0 -0
  229. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/data/addressbook.yaml +0 -0
  230. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/data/config.yaml.example +0 -0
  231. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/file_ref.py +0 -0
  232. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/instructions.md +0 -0
  233. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/mail.py +0 -0
  234. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/manifest.yaml +0 -0
  235. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/skill.py +0 -0
  236. {skillware-0.5.7 → skillware-0.5.8}/skills/office/gmail_handler/test_skill.py +0 -0
  237. {skillware-0.5.7 → skillware-0.5.8}/skills/office/pdf_form_filler/__init__.py +0 -0
  238. {skillware-0.5.7 → skillware-0.5.8}/skills/office/pdf_form_filler/card.json +0 -0
  239. {skillware-0.5.7 → skillware-0.5.8}/skills/office/pdf_form_filler/instructions.md +0 -0
  240. {skillware-0.5.7 → skillware-0.5.8}/skills/office/pdf_form_filler/utils.py +0 -0
  241. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/__init__.py +0 -0
  242. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/context_optimizer/__init__.py +0 -0
  243. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/context_optimizer/card.json +0 -0
  244. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/context_optimizer/data/sample_policy.txt +0 -0
  245. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/context_optimizer/instructions.md +0 -0
  246. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/context_optimizer/manifest.yaml +0 -0
  247. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/context_optimizer/skill.py +0 -0
  248. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/context_optimizer/test_skill.py +0 -0
  249. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/prompt_rewriter/__init__.py +0 -0
  250. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/prompt_rewriter/card.json +0 -0
  251. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/prompt_rewriter/instructions.md +0 -0
  252. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/prompt_rewriter/manifest.yaml +0 -0
  253. {skillware-0.5.7 → skillware-0.5.8}/skills/optimization/prompt_rewriter/test_skill.py +0 -0
  254. {skillware-0.5.7 → skillware-0.5.8}/skills/security/__init__.py +0 -0
  255. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/__init__.py +0 -0
  256. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/card.json +0 -0
  257. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/guard.py +0 -0
  258. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/instructions.md +0 -0
  259. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/kb/allowlist_cmp.json +0 -0
  260. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/kb/allowlist_seo.json +0 -0
  261. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/kb/allowlist_sr_only.json +0 -0
  262. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/kb/deception_lexicon.json +0 -0
  263. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/manifest.yaml +0 -0
  264. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/skill.py +0 -0
  265. {skillware-0.5.7 → skillware-0.5.8}/skills/security/deceptive_ui_guard/test_skill.py +0 -0
  266. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/__init__.py +0 -0
  267. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/card.json +0 -0
  268. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/firewall.py +0 -0
  269. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/fixtures/adversarial/leetspeak_override.txt +0 -0
  270. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/fixtures/adversarial/markdown_image_exfil.txt +0 -0
  271. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/fixtures/adversarial/mixed_script_injection.txt +0 -0
  272. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/fixtures/adversarial/rot13_jailbreak.txt +0 -0
  273. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/fixtures/adversarial/typoglycemia_attack.txt +0 -0
  274. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/fixtures/benign/academic_jailbreak_paper.txt +0 -0
  275. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/fixtures/benign/prompt_injection_advisory.md +0 -0
  276. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/fixtures/benign/security_research_blog.txt +0 -0
  277. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/instructions.md +0 -0
  278. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/kb/confusables.json +0 -0
  279. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/kb/injection_patterns.json +0 -0
  280. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/manifest.yaml +0 -0
  281. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/skill.py +0 -0
  282. {skillware-0.5.7 → skillware-0.5.8}/skills/security/prompt_injection_firewall/test_skill.py +0 -0
  283. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/__init__.py +0 -0
  284. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/__init__.py +0 -0
  285. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/card.json +0 -0
  286. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/constraints.py +0 -0
  287. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/crisis_gate.py +0 -0
  288. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/instructions.md +0 -0
  289. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/kb/corpus.json +0 -0
  290. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/kb/crisis_resources.json +0 -0
  291. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/kb/hard_constraints.yaml +0 -0
  292. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/kb_provider.py +0 -0
  293. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/manifest.yaml +0 -0
  294. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/resources.py +0 -0
  295. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/skill.py +0 -0
  296. {skillware-0.5.7 → skillware-0.5.8}/skills/wellness/mental_coach/test_skill.py +0 -0
  297. {skillware-0.5.7 → skillware-0.5.8}/skillware/__init__.py +0 -0
  298. {skillware-0.5.7 → skillware-0.5.8}/skillware/__main__.py +0 -0
  299. {skillware-0.5.7 → skillware-0.5.8}/skillware/branding/skillware_logo.png +0 -0
  300. {skillware-0.5.7 → skillware-0.5.8}/skillware/cli.py +0 -0
  301. {skillware-0.5.7 → skillware-0.5.8}/skillware/cli_addressbook.py +0 -0
  302. {skillware-0.5.7 → skillware-0.5.8}/skillware/cli_evm.py +0 -0
  303. {skillware-0.5.7 → skillware-0.5.8}/skillware/cli_mail.py +0 -0
  304. {skillware-0.5.7 → skillware-0.5.8}/skillware/cli_theme.py +0 -0
  305. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/__init__.py +0 -0
  306. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/chains_config.py +0 -0
  307. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/config.py +0 -0
  308. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/discovery.py +0 -0
  309. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/env.py +0 -0
  310. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/evm_config.py +0 -0
  311. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/extras.py +0 -0
  312. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/loader.py +0 -0
  313. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/mail_config.py +0 -0
  314. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/secrets.py +0 -0
  315. {skillware-0.5.7 → skillware-0.5.8}/skillware/core/ui_schema.py +0 -0
  316. {skillware-0.5.7 → skillware-0.5.8}/skillware/data/evm_defaults.yaml +0 -0
  317. {skillware-0.5.7 → skillware-0.5.8}/skillware.egg-info/dependency_links.txt +0 -0
  318. {skillware-0.5.7 → skillware-0.5.8}/skillware.egg-info/entry_points.txt +0 -0
  319. {skillware-0.5.7 → skillware-0.5.8}/skillware.egg-info/top_level.txt +0 -0
  320. {skillware-0.5.7 → skillware-0.5.8}/tests/test_card_ui_schema.py +0 -0
  321. {skillware-0.5.7 → skillware-0.5.8}/tests/test_chains.py +0 -0
  322. {skillware-0.5.7 → skillware-0.5.8}/tests/test_chains_config.py +0 -0
  323. {skillware-0.5.7 → skillware-0.5.8}/tests/test_config.py +0 -0
  324. {skillware-0.5.7 → skillware-0.5.8}/tests/test_context_and_chains_integration.py +0 -0
  325. {skillware-0.5.7 → skillware-0.5.8}/tests/test_discovery.py +0 -0
  326. {skillware-0.5.7 → skillware-0.5.8}/tests/test_evm_config.py +0 -0
  327. {skillware-0.5.7 → skillware-0.5.8}/tests/test_evm_integration.py +0 -0
  328. {skillware-0.5.7 → skillware-0.5.8}/tests/test_extras_sync.py +0 -0
  329. {skillware-0.5.7 → skillware-0.5.8}/tests/test_github_labels.py +0 -0
  330. {skillware-0.5.7 → skillware-0.5.8}/tests/test_host_simulation_stress.py +0 -0
  331. {skillware-0.5.7 → skillware-0.5.8}/tests/test_loader.py +0 -0
  332. {skillware-0.5.7 → skillware-0.5.8}/tests/test_mail_config.py +0 -0
  333. {skillware-0.5.7 → skillware-0.5.8}/tests/test_registry_docs.py +0 -0
  334. {skillware-0.5.7 → skillware-0.5.8}/tests/test_registry_identity.py +0 -0
  335. {skillware-0.5.7 → skillware-0.5.8}/tests/test_requirements_check.py +0 -0
  336. {skillware-0.5.7 → skillware-0.5.8}/tests/test_secrets.py +0 -0
  337. {skillware-0.5.7 → skillware-0.5.8}/tests/test_skill_context.py +0 -0
  338. {skillware-0.5.7 → skillware-0.5.8}/tests/test_skill_docs.py +0 -0
  339. {skillware-0.5.7 → skillware-0.5.8}/tests/test_skill_issuer.py +0 -0
  340. {skillware-0.5.7 → skillware-0.5.8}/tests/test_ui_schema.py +0 -0
  341. {skillware-0.5.7 → skillware-0.5.8}/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.7
3
+ Version: 0.5.8
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
@@ -55,8 +55,13 @@ Requires-Dist: rich>=13.0
55
55
  Provides-Extra: dev
56
56
  Requires-Dist: pytest; extra == "dev"
57
57
  Requires-Dist: pytest-mock; extra == "dev"
58
+ Requires-Dist: pytest-asyncio; extra == "dev"
58
59
  Requires-Dist: flake8; extra == "dev"
59
60
  Requires-Dist: black; extra == "dev"
61
+ Requires-Dist: ruff; extra == "dev"
62
+ Requires-Dist: bandit; extra == "dev"
63
+ Requires-Dist: pip-audit; extra == "dev"
64
+ Requires-Dist: mypy; extra == "dev"
60
65
  Provides-Extra: gemini
61
66
  Requires-Dist: google-genai; extra == "gemini"
62
67
  Provides-Extra: claude
@@ -97,6 +102,8 @@ Provides-Extra: optimization
97
102
  Requires-Dist: fastembed; extra == "optimization"
98
103
  Requires-Dist: numpy; extra == "optimization"
99
104
  Provides-Extra: security
105
+ Requires-Dist: numpy; extra == "security"
106
+ Requires-Dist: pillow; extra == "security"
100
107
  Provides-Extra: wellness
101
108
  Requires-Dist: google-genai; extra == "wellness"
102
109
  Provides-Extra: compliance-mica-module
@@ -131,11 +138,15 @@ Provides-Extra: office-gmail-handler
131
138
  Provides-Extra: office-pdf-form-filler
132
139
  Requires-Dist: pymupdf; extra == "office-pdf-form-filler"
133
140
  Requires-Dist: anthropic; extra == "office-pdf-form-filler"
141
+ Provides-Extra: office-web-form-mapper
134
142
  Provides-Extra: optimization-context-optimizer
135
143
  Requires-Dist: fastembed; extra == "optimization-context-optimizer"
136
144
  Requires-Dist: numpy; extra == "optimization-context-optimizer"
137
145
  Provides-Extra: optimization-prompt-rewriter
138
146
  Provides-Extra: security-deceptive-ui-guard
147
+ Provides-Extra: security-deepfake-guard
148
+ Requires-Dist: pillow; extra == "security-deepfake-guard"
149
+ Requires-Dist: numpy; extra == "security-deepfake-guard"
139
150
  Provides-Extra: security-prompt-injection-firewall
140
151
  Provides-Extra: wellness-mental-coach
141
152
  Requires-Dist: google-genai; extra == "wellness-mental-coach"
@@ -259,18 +270,18 @@ Category hubs live under `docs/skills/<category>/`. Full catalog: [Skill library
259
270
 
260
271
  | Category | Skills | Description |
261
272
  | :--- | :---: | :--- |
262
- | [Office](docs/skills/office/README.md) | 2 | Documents, desktop work, and productivity automation |
273
+ | [Compliance](docs/skills/compliance/README.md) | 3 | Privacy, policy, and regulatory guardrails |
274
+ | [Data Engineering](docs/skills/data_engineering/README.md) | 3 | Datasets, generation, and ETL-style tooling |
275
+ | [DeFi](docs/skills/defi/README.md) | 3 | On-chain ops, trading, and agent wallet management |
276
+ | [Office](docs/skills/office/README.md) | 3 | Documents, desktop work, and productivity automation |
277
+ | [Security](docs/skills/security/README.md) | 3 | Defenses for untrusted input reaching logical systems |
263
278
  | [Creative](docs/skills/creative/README.md) | 2 | Image processing, media editing, and creative utilities |
264
279
  | [Finance](docs/skills/finance/README.md) | 2 | Fintech, blockchain, payments, and financial services |
265
- | [DeFi](docs/skills/defi/README.md) | 3 | On-chain ops, trading, and agent wallet management |
280
+ | [Monitoring](docs/skills/monitoring/README.md) | 2 | Agent loop observability, budget gates, and task control |
266
281
  | [Optimization](docs/skills/optimization/README.md) | 2 | Middleware, efficiency, and token economics |
267
- | [Data Engineering](docs/skills/data_engineering/README.md) | 3 | Datasets, generation, and ETL-style tooling |
268
- | [Compliance](docs/skills/compliance/README.md) | 3 | Privacy, policy, and regulatory guardrails |
269
- | [Security](docs/skills/security/README.md) | 2 | Defenses for untrusted input reaching logical systems |
270
282
  | [Dev Tools](docs/skills/dev_tools/README.md) | 1 | Developer workflows, repo tooling, and coding |
271
- | [Monitoring](docs/skills/monitoring/README.md) | 2 | Agent loop observability, budget gates, and task control |
272
- | [Wellness](docs/skills/wellness/README.md) | 1 | Coaching guardrails and mental health support |
273
283
  | [Linguistics](docs/skills/linguistics/README.md) | 1 | Language adapters and internet-register lexicons |
284
+ | [Wellness](docs/skills/wellness/README.md) | 1 | Coaching guardrails and mental health support |
274
285
 
275
286
  ## Quick Start
276
287
 
@@ -400,7 +411,7 @@ PyPI download counts measure **install activity** from public aggregators (inclu
400
411
 
401
412
  <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>
402
413
 
403
- 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.7`).
414
+ 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.8`).
404
415
 
405
416
  ## Contact
406
417
 
@@ -104,18 +104,18 @@ Category hubs live under `docs/skills/<category>/`. Full catalog: [Skill library
104
104
 
105
105
  | Category | Skills | Description |
106
106
  | :--- | :---: | :--- |
107
- | [Office](docs/skills/office/README.md) | 2 | Documents, desktop work, and productivity automation |
107
+ | [Compliance](docs/skills/compliance/README.md) | 3 | Privacy, policy, and regulatory guardrails |
108
+ | [Data Engineering](docs/skills/data_engineering/README.md) | 3 | Datasets, generation, and ETL-style tooling |
109
+ | [DeFi](docs/skills/defi/README.md) | 3 | On-chain ops, trading, and agent wallet management |
110
+ | [Office](docs/skills/office/README.md) | 3 | Documents, desktop work, and productivity automation |
111
+ | [Security](docs/skills/security/README.md) | 3 | Defenses for untrusted input reaching logical systems |
108
112
  | [Creative](docs/skills/creative/README.md) | 2 | Image processing, media editing, and creative utilities |
109
113
  | [Finance](docs/skills/finance/README.md) | 2 | Fintech, blockchain, payments, and financial services |
110
- | [DeFi](docs/skills/defi/README.md) | 3 | On-chain ops, trading, and agent wallet management |
114
+ | [Monitoring](docs/skills/monitoring/README.md) | 2 | Agent loop observability, budget gates, and task control |
111
115
  | [Optimization](docs/skills/optimization/README.md) | 2 | Middleware, efficiency, and token economics |
112
- | [Data Engineering](docs/skills/data_engineering/README.md) | 3 | Datasets, generation, and ETL-style tooling |
113
- | [Compliance](docs/skills/compliance/README.md) | 3 | Privacy, policy, and regulatory guardrails |
114
- | [Security](docs/skills/security/README.md) | 2 | Defenses for untrusted input reaching logical systems |
115
116
  | [Dev Tools](docs/skills/dev_tools/README.md) | 1 | Developer workflows, repo tooling, and coding |
116
- | [Monitoring](docs/skills/monitoring/README.md) | 2 | Agent loop observability, budget gates, and task control |
117
- | [Wellness](docs/skills/wellness/README.md) | 1 | Coaching guardrails and mental health support |
118
117
  | [Linguistics](docs/skills/linguistics/README.md) | 1 | Language adapters and internet-register lexicons |
118
+ | [Wellness](docs/skills/wellness/README.md) | 1 | Coaching guardrails and mental health support |
119
119
 
120
120
  ## Quick Start
121
121
 
@@ -245,7 +245,7 @@ PyPI download counts measure **install activity** from public aggregators (inclu
245
245
 
246
246
  <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>
247
247
 
248
- 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.7`).
248
+ 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.8`).
249
249
 
250
250
  ## Contact
251
251
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "skillware"
7
- version = "0.5.7"
7
+ version = "0.5.8"
8
8
  description = "A framework for modular, self-contained AI skills."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -51,8 +51,13 @@ skillware = "skillware.cli:main"
51
51
  dev = [
52
52
  "pytest",
53
53
  "pytest-mock",
54
+ "pytest-asyncio",
54
55
  "flake8",
55
56
  "black",
57
+ "ruff",
58
+ "bandit",
59
+ "pip-audit",
60
+ "mypy",
56
61
  ]
57
62
  gemini = [
58
63
  "google-genai",
@@ -119,7 +124,10 @@ optimization = [
119
124
  "numpy",
120
125
  ]
121
126
 
122
- security = []
127
+ security = [
128
+ "numpy",
129
+ "pillow",
130
+ ]
123
131
 
124
132
  wellness = [
125
133
  "google-genai",
@@ -184,6 +192,8 @@ office_pdf_form_filler = [
184
192
  "anthropic",
185
193
  ]
186
194
 
195
+ office_web_form_mapper = []
196
+
187
197
  optimization_context_optimizer = [
188
198
  "fastembed",
189
199
  "numpy",
@@ -193,6 +203,11 @@ optimization_prompt_rewriter = []
193
203
 
194
204
  security_deceptive_ui_guard = []
195
205
 
206
+ security_deepfake_guard = [
207
+ "pillow",
208
+ "numpy",
209
+ ]
210
+
196
211
  security_prompt_injection_firewall = []
197
212
 
198
213
  wellness_mental_coach = [
@@ -237,3 +252,36 @@ markers = [
237
252
  [tool.black]
238
253
  line-length = 88
239
254
  target-version = ["py310"]
255
+
256
+ [tool.ruff]
257
+ line-length = 120
258
+ target-version = "py310"
259
+
260
+ [tool.ruff.lint]
261
+ select = [
262
+ "E4", "E7", "E9",
263
+ "F",
264
+ ]
265
+ ignore = [
266
+ "E501",
267
+ ]
268
+
269
+ [tool.mypy]
270
+ python_version = "3.10"
271
+ ignore_missing_imports = true
272
+ warn_unused_configs = true
273
+
274
+ [[tool.mypy.overrides]]
275
+ module = [
276
+ "skillware.cli",
277
+ "skillware.core.loader",
278
+ "skillware.core.config",
279
+ "skillware.core.mail_config",
280
+ "skillware.core.ui_schema",
281
+ "skillware.version_policy",
282
+ ]
283
+ ignore_errors = true
284
+
285
+ [tool.bandit]
286
+ exclude_dirs = ["tests", "build", "dist"]
287
+ skips = ["B101", "B104", "B108", "B310"]
@@ -12,6 +12,10 @@
12
12
  "ui_schema": {
13
13
  "type": "card",
14
14
  "fields": [
15
+ {
16
+ "key": "statutory_snapshot",
17
+ "label": "Statutory Snapshot"
18
+ },
15
19
  {
16
20
  "key": "policy_status",
17
21
  "label": "Policy Status",
@@ -6,4 +6,5 @@ Use this skill whenever a user asks questions regarding the Markets in Crypto-As
6
6
  **Core Directives:**
7
7
  1. **RAG-Driven Answers**: You MUST use the `user_prompt` parameter to retrieve specific statutory text before answering.
8
8
  2. **Traceability**: Your final response MUST explicitly cite the Article numbers provided in the context (e.g., "According to Article 59...").
9
- 3. **Policy Enforcement**: If the evaluator flags `HIGH_RISK_DETECTED`, you must prioritize regulatory safety and clearly state the compliance barriers.
9
+ 3. **Policy Enforcement**: If the evaluator flags `HIGH_RISK_DETECTED`, you must prioritize regulatory safety and clearly state the compliance barriers.
10
+ 4. **Statutory Snapshot Framing**: Remind users that citations reflect the bundled MiCA snapshot (Regulation (EU) 2023/1114, OJ L 150/40, 9 June 2023) and serve as informational reference for offline decision-support — not formal legal advice. Advise verifying current amendments with qualified counsel for binding compliance determinations.
@@ -1,5 +1,5 @@
1
1
  name: compliance/mica_module
2
- version: 0.1.1
2
+ version: 0.1.2
3
3
  description: A highly specialized, localized RAG and policy enforcement engine for the Markets in Crypto-Assets (MiCA) regulation.
4
4
  short_description: "Local RAG and policy enforcement engine for MiCA regulation."
5
5
  issuer:
@@ -31,3 +31,4 @@ constitution: |
31
31
  1. COMPLIANCE: Do not invent or hallucinate financial regulations. Base all enforcement strictly on the provided MiCA corpus blocks.
32
32
  2. FOCUS: Act exclusively as a compliance firewall and RAG engine; retrieve relevant chunks incrementally.
33
33
  3. EVALUATION: If the evaluator is run, strictly flag HIGH_RISK_DETECTED if the user's intent violates MiCA or misses required filings.
34
+ 4. INFORMATIONAL REFERENCE: Retrieved regulatory provisions and evaluations are decision-support material from a bundled statutory snapshot. Do not present outputs as formal legal counsel; remind users that MiCA evolves and qualified professionals should confirm binding determinations.
@@ -4,6 +4,9 @@ from typing import Any, Dict, List
4
4
 
5
5
  from skillware.core.base_skill import BaseSkill
6
6
 
7
+ # Bundled MiCA corpus snapshot — informational reference, not live legal portal data.
8
+ STATUTORY_SNAPSHOT = "Regulation (EU) 2023/1114 (MiCA), OJ L 150/40, 9 June 2023"
9
+
7
10
 
8
11
  class MiCAModuleSkill(BaseSkill):
9
12
  """
@@ -12,7 +15,7 @@ class MiCAModuleSkill(BaseSkill):
12
15
 
13
16
  @property
14
17
  def manifest(self) -> Dict[str, Any]:
15
- return {"name": "compliance/mica_module", "version": "0.1.1"}
18
+ return self.load_manifest_from_dir(os.path.dirname(__file__))
16
19
 
17
20
  _corpus_cache: List[Dict[str, Any]] = None
18
21
 
@@ -90,6 +93,7 @@ class MiCAModuleSkill(BaseSkill):
90
93
  final_context = eval_result.get("final_context_for_agent", final_context)
91
94
 
92
95
  return {
96
+ "statutory_snapshot": STATUTORY_SNAPSHOT,
93
97
  "retrieved_sections": list(set(retrieved_sections)),
94
98
  "policy_status": policy_status,
95
99
  "gemini_evaluator_feedback": gemini_feedback,
@@ -22,6 +22,7 @@ def test_skill_manifest_consistency(skill, manifest):
22
22
  skill_manifest = skill.manifest
23
23
  assert skill_manifest["name"] == manifest["name"]
24
24
  assert skill_manifest["version"] == manifest["version"]
25
+ assert "informational reference" in skill_manifest["constitution"].lower()
25
26
 
26
27
 
27
28
  def test_stateless_rag_execution(skill):
@@ -34,6 +35,9 @@ def test_stateless_rag_execution(skill):
34
35
  "run_evaluator": False,
35
36
  }
36
37
  )
38
+ assert result["statutory_snapshot"] == (
39
+ "Regulation (EU) 2023/1114 (MiCA), OJ L 150/40, 9 June 2023"
40
+ )
37
41
  assert result["policy_status"] == "CAUTION"
38
42
  assert "retrieved_sections" in result
39
43
  assert "final_context_for_agent" in result
@@ -1,3 +1,4 @@
1
+ import os
1
2
  import re
2
3
  import requests
3
4
  from typing import Any, Dict, List, Tuple
@@ -11,7 +12,7 @@ class PIIMaskerSkill(BaseSkill):
11
12
 
12
13
  @property
13
14
  def manifest(self) -> Dict[str, Any]:
14
- return {"name": "compliance/pii_masker", "version": "0.1.0"}
15
+ return self.load_manifest_from_dir(os.path.dirname(__file__))
15
16
 
16
17
  def execute(self, params: Dict[str, Any]) -> Dict[str, Any]:
17
18
  text = params.get("text", "")
@@ -1,3 +1,4 @@
1
+ import os
1
2
  from typing import Any, Dict, List
2
3
  import numpy as np
3
4
  from fastembed import TextEmbedding
@@ -18,14 +19,7 @@ class NoveltyExtractor(BaseSkill):
18
19
 
19
20
  @property
20
21
  def manifest(self) -> Dict[str, Any]:
21
- return {
22
- "name": "data_engineering/novelty_extractor",
23
- "version": "0.1.0",
24
- "description": (
25
- "Filters a text dataset by semantic novelty, retaining only "
26
- "chunks that carry new information above a configurable threshold."
27
- ),
28
- }
22
+ return self.load_manifest_from_dir(os.path.dirname(__file__))
29
23
 
30
24
  def _chunk_text(self, text: str, strategy: str) -> List[str]:
31
25
  """Split text into chunks using the given strategy."""
@@ -7,6 +7,7 @@ import os
7
7
  from unittest.mock import MagicMock, patch
8
8
 
9
9
  import pytest
10
+ import requests
10
11
  import yaml
11
12
 
12
13
  from skillware.core.loader import SkillLoader
@@ -177,7 +178,7 @@ def test_scan_medium_proxy_mint(mock_get, skill):
177
178
  def test_rate_limited(mock_get, skill):
178
179
  response = MagicMock()
179
180
  response.status_code = 429
180
- response.raise_for_status.side_effect = __import__("requests").exceptions.HTTPError(
181
+ response.raise_for_status.side_effect = requests.exceptions.HTTPError(
181
182
  response=response
182
183
  )
183
184
  mock_get.return_value = response
@@ -1,5 +1,5 @@
1
1
  name: office/pdf_form_filler
2
- version: 0.1.0
2
+ version: 0.1.1
3
3
  description: Fills PDF forms based on natural language instructions.
4
4
  short_description: "Fills AcroForm PDFs by mapping natural-language instructions to detected fields."
5
5
  issuer:
@@ -5,6 +5,35 @@ import anthropic
5
5
  import yaml
6
6
  from skillware.core.base_skill import BaseSkill
7
7
 
8
+ # SkillLoader runs this file as a standalone module, so the relative import only
9
+ # works when the bundle is imported as a package. Fall back to the package path,
10
+ # then load the sibling utils.py under a unique module name. Do not modify
11
+ # sys.path or import a top-level "utils" module, which can clash with the host.
12
+ try:
13
+ from .utils import detect_form_fields, apply_edits, FieldEdit
14
+ except (ImportError, ValueError):
15
+ try:
16
+ from skills.office.pdf_form_filler.utils import (
17
+ detect_form_fields,
18
+ apply_edits,
19
+ FieldEdit,
20
+ )
21
+ except (ImportError, ValueError):
22
+ import importlib.util
23
+
24
+ _utils_spec = importlib.util.spec_from_file_location(
25
+ "pdf_form_filler_utils",
26
+ os.path.join(os.path.dirname(os.path.abspath(__file__)), "utils.py"),
27
+ )
28
+ if _utils_spec and _utils_spec.loader:
29
+ _utils_module = importlib.util.module_from_spec(_utils_spec)
30
+ _utils_spec.loader.exec_module(_utils_module)
31
+ detect_form_fields = _utils_module.detect_form_fields
32
+ apply_edits = _utils_module.apply_edits
33
+ FieldEdit = _utils_module.FieldEdit
34
+ else:
35
+ raise ImportError("Could not load utils.py for office/pdf_form_filler")
36
+
8
37
 
9
38
  class PDFFormFillerSkill(BaseSkill):
10
39
  """
@@ -26,15 +55,6 @@ class PDFFormFillerSkill(BaseSkill):
26
55
  return {}
27
56
 
28
57
  def execute(self, params: Dict[str, Any]) -> Any:
29
- # Import here to avoid top-level linter issues with relative imports
30
- try:
31
- from .utils import detect_form_fields, apply_edits, FieldEdit
32
- except ImportError:
33
- import sys
34
-
35
- sys.path.append(os.path.dirname(__file__))
36
- from utils import detect_form_fields, apply_edits, FieldEdit
37
-
38
58
  # 1. Parse Inputs
39
59
  pdf_path = params.get("pdf_path")
40
60
  instructions = params.get("instructions")
@@ -0,0 +1,167 @@
1
+ import os
2
+ import sys
3
+ import types
4
+ from unittest.mock import MagicMock, patch
5
+
6
+ import fitz
7
+ import pytest
8
+ import yaml
9
+
10
+ from skillware.core.loader import SkillLoader
11
+
12
+ from .skill import PDFFormFillerSkill
13
+
14
+ # Module that provides detect_form_fields for each helper import route in skill.py.
15
+ HELPER_MODULE_BY_ROUTE = {
16
+ "package": "skills.office.pdf_form_filler.utils",
17
+ "file": "pdf_form_filler_utils",
18
+ }
19
+
20
+
21
+ @pytest.fixture
22
+ def skill():
23
+ return PDFFormFillerSkill()
24
+
25
+
26
+ @pytest.fixture
27
+ def manifest():
28
+ manifest_path = os.path.join(os.path.dirname(__file__), "manifest.yaml")
29
+ with open(manifest_path, "r", encoding="utf-8") as f:
30
+ return yaml.safe_load(f)
31
+
32
+
33
+ def test_skill_manifest_consistency(skill, manifest):
34
+ skill_manifest = skill.manifest
35
+ assert skill_manifest["name"] == manifest["name"]
36
+ assert manifest["name"] == "office/pdf_form_filler"
37
+ assert skill_manifest["version"] == manifest["version"]
38
+
39
+
40
+ def test_missing_pdf_returns_error(skill):
41
+ result = skill.execute(
42
+ {
43
+ "pdf_path": "/nonexistent/form.pdf",
44
+ "instructions": "Fill name with Alice",
45
+ }
46
+ )
47
+ assert "error" in result
48
+ assert "PDF file not found" in result["error"]
49
+
50
+
51
+ def test_missing_instructions_returns_error(skill, tmp_path):
52
+ pdf_path = tmp_path / "blank.pdf"
53
+ doc = fitz.open()
54
+ doc.new_page()
55
+ doc.save(str(pdf_path))
56
+ doc.close()
57
+
58
+ result = skill.execute({"pdf_path": str(pdf_path), "instructions": ""})
59
+ assert "error" in result
60
+ assert "No instructions provided" in result["error"]
61
+
62
+
63
+ @patch("skills.office.pdf_form_filler.skill.anthropic.Anthropic")
64
+ def test_execute_mocked(mock_anthropic_cls, tmp_path, monkeypatch):
65
+ mock_client = mock_anthropic_cls.return_value
66
+ mock_message = MagicMock()
67
+ mock_message.content = [MagicMock(text='{"page0_test_field": "Hello World"}')]
68
+ mock_client.messages.create.return_value = mock_message
69
+ monkeypatch.setenv("ANTHROPIC_API_KEY", "test")
70
+
71
+ skill = PDFFormFillerSkill()
72
+
73
+ pdf_path = tmp_path / "form.pdf"
74
+ doc = fitz.open()
75
+ page = doc.new_page()
76
+ widget = fitz.Widget()
77
+ widget.rect = fitz.Rect(10, 10, 100, 30)
78
+ widget.field_name = "test_field"
79
+ widget.field_type = 7
80
+ page.add_widget(widget)
81
+ doc.save(str(pdf_path))
82
+ doc.close()
83
+
84
+ result = skill.execute(
85
+ {
86
+ "pdf_path": str(pdf_path),
87
+ "instructions": "Fill test field with Hello World",
88
+ }
89
+ )
90
+
91
+ assert result["status"] == "success"
92
+ assert "page0_test_field" in result["filled_fields"]
93
+ assert os.path.exists(result["output_path"])
94
+
95
+ if os.path.exists(result["output_path"]):
96
+ os.remove(result["output_path"])
97
+
98
+
99
+ @pytest.fixture(params=sorted(HELPER_MODULE_BY_ROUTE))
100
+ def import_route(request, monkeypatch):
101
+ """Helper import route taken when SkillLoader runs skill.py as ``skill_module``.
102
+
103
+ ``package`` resolves the helpers through the installed ``skills`` package.
104
+ ``file`` blocks that import so the sibling ``utils.py`` is loaded by path,
105
+ as it would be for a bundle outside the package.
106
+ """
107
+ monkeypatch.setattr(sys, "path", list(sys.path))
108
+ if request.param == "file":
109
+ monkeypatch.setitem(sys.modules, HELPER_MODULE_BY_ROUTE["package"], None)
110
+ return request.param
111
+
112
+
113
+ def _load_via_skill_loader():
114
+ bundle = SkillLoader.load_skill("office/pdf_form_filler")
115
+ assert bundle["module"].__name__ == "skill_module"
116
+ return bundle
117
+
118
+
119
+ def _blank_pdf(tmp_path):
120
+ pdf_path = tmp_path / "blank.pdf"
121
+ doc = fitz.open()
122
+ doc.new_page()
123
+ doc.save(str(pdf_path))
124
+ doc.close()
125
+ return pdf_path
126
+
127
+
128
+ def test_loader_execute_leaves_sys_path_unchanged(import_route):
129
+ before = list(sys.path)
130
+ skill = _load_via_skill_loader()["class"]()
131
+
132
+ for _ in range(3):
133
+ result = skill.execute(
134
+ {"pdf_path": "/nonexistent/form.pdf", "instructions": "Fill name"}
135
+ )
136
+ assert "PDF file not found" in result["error"]
137
+
138
+ assert sys.path == before
139
+
140
+
141
+ def test_loader_execute_with_host_utils_module(import_route, monkeypatch, tmp_path):
142
+ host_utils = types.ModuleType("utils")
143
+ monkeypatch.setitem(sys.modules, "utils", host_utils)
144
+ bundle = _load_via_skill_loader()
145
+
146
+ result = bundle["class"]().execute(
147
+ {"pdf_path": str(_blank_pdf(tmp_path)), "instructions": "Fill name"}
148
+ )
149
+
150
+ assert result == {
151
+ "status": "warning",
152
+ "message": "No fillable fields found in PDF.",
153
+ }
154
+ assert sys.modules["utils"] is host_utils
155
+ assert (
156
+ bundle["module"].detect_form_fields.__module__
157
+ == HELPER_MODULE_BY_ROUTE[import_route]
158
+ )
159
+
160
+
161
+ def test_loader_execute_does_not_register_top_level_utils(import_route, monkeypatch):
162
+ monkeypatch.delitem(sys.modules, "utils", raising=False)
163
+ skill = _load_via_skill_loader()["class"]()
164
+
165
+ skill.execute({"pdf_path": "/nonexistent/form.pdf", "instructions": "Fill name"})
166
+
167
+ assert "utils" not in sys.modules
@@ -0,0 +1 @@
1
+ """office/web_form_mapper skill package."""
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "Web Form Mapper",
3
+ "description": "Inspects, maps identity profiles to, previews, and submits web forms with confirmation gates.",
4
+ "issuer": {
5
+ "name": "Ross Peili",
6
+ "email": "vpeilivanidis@gmail.com",
7
+ "github": "rosspeili",
8
+ "org": "ARPAHLS"
9
+ },
10
+ "icon": "globe",
11
+ "color": "blue",
12
+ "ui_schema": {
13
+ "type": "card",
14
+ "fields": [
15
+ {
16
+ "key": "status",
17
+ "label": "Status"
18
+ },
19
+ {
20
+ "key": "action",
21
+ "label": "Action"
22
+ },
23
+ {
24
+ "key": "form_action",
25
+ "label": "Endpoint"
26
+ }
27
+ ]
28
+ }
29
+ }