skillware 0.4.1__tar.gz → 0.4.2__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 (139) hide show
  1. {skillware-0.4.1/skillware.egg-info → skillware-0.4.2}/PKG-INFO +7 -6
  2. {skillware-0.4.1 → skillware-0.4.2}/README.md +6 -5
  3. {skillware-0.4.1 → skillware-0.4.2}/pyproject.toml +1 -1
  4. {skillware-0.4.1 → skillware-0.4.2}/skillware/cli.py +68 -18
  5. {skillware-0.4.1 → skillware-0.4.2/skillware.egg-info}/PKG-INFO +7 -6
  6. {skillware-0.4.1 → skillware-0.4.2}/tests/test_version_policy.py +1 -1
  7. {skillware-0.4.1 → skillware-0.4.2}/LICENSE +0 -0
  8. {skillware-0.4.1 → skillware-0.4.2}/MANIFEST.in +0 -0
  9. {skillware-0.4.1 → skillware-0.4.2}/setup.cfg +0 -0
  10. {skillware-0.4.1 → skillware-0.4.2}/skills/__init__.py +0 -0
  11. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/__init__.py +0 -0
  12. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/mica_module/__init__.py +0 -0
  13. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/mica_module/card.json +0 -0
  14. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/mica_module/instructions.md +0 -0
  15. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/mica_module/manifest.yaml +0 -0
  16. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/mica_module/mica_corpus.json +0 -0
  17. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/mica_module/skill.py +0 -0
  18. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/mica_module/test_skill.py +0 -0
  19. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/pii_masker/__init__.py +0 -0
  20. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/pii_masker/card.json +0 -0
  21. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/pii_masker/instructions.md +0 -0
  22. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/pii_masker/manifest.yaml +0 -0
  23. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/pii_masker/skill.py +0 -0
  24. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/pii_masker/test_skill.py +0 -0
  25. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/tos_evaluator/__init__.py +0 -0
  26. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/tos_evaluator/card.json +0 -0
  27. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/tos_evaluator/instructions.md +0 -0
  28. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/tos_evaluator/manifest.yaml +0 -0
  29. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/tos_evaluator/skill.py +0 -0
  30. {skillware-0.4.1 → skillware-0.4.2}/skills/compliance/tos_evaluator/test_skill.py +0 -0
  31. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/__init__.py +0 -0
  32. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/__init__.py +0 -0
  33. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/card.json +0 -0
  34. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/instructions.md +0 -0
  35. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/manifest.yaml +0 -0
  36. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/skill.py +0 -0
  37. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/novelty_extractor/test_skill.py +0 -0
  38. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/__init__.py +0 -0
  39. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/card.json +0 -0
  40. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/instructions.md +0 -0
  41. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/manifest.yaml +0 -0
  42. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/skill.py +0 -0
  43. {skillware-0.4.1 → skillware-0.4.2}/skills/data_engineering/synthetic_generator/test_skill.py +0 -0
  44. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/__init__.py +0 -0
  45. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/__init__.py +0 -0
  46. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/abis.py +0 -0
  47. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/card.json +0 -0
  48. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/config.yaml.example +0 -0
  49. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/data/addressbook.yaml +0 -0
  50. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/data/chains.yaml +0 -0
  51. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/data/tokens.yaml +0 -0
  52. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/instructions.md +0 -0
  53. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/manifest.yaml +0 -0
  54. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/skill.py +0 -0
  55. {skillware-0.4.1 → skillware-0.4.2}/skills/defi/evm_tx_handler/test_skill.py +0 -0
  56. {skillware-0.4.1 → skillware-0.4.2}/skills/dev_tools/__init__.py +0 -0
  57. {skillware-0.4.1 → skillware-0.4.2}/skills/dev_tools/issue_resolver/__init__.py +0 -0
  58. {skillware-0.4.1 → skillware-0.4.2}/skills/dev_tools/issue_resolver/card.json +0 -0
  59. {skillware-0.4.1 → skillware-0.4.2}/skills/dev_tools/issue_resolver/instructions.md +0 -0
  60. {skillware-0.4.1 → skillware-0.4.2}/skills/dev_tools/issue_resolver/manifest.yaml +0 -0
  61. {skillware-0.4.1 → skillware-0.4.2}/skills/dev_tools/issue_resolver/skill.py +0 -0
  62. {skillware-0.4.1 → skillware-0.4.2}/skills/dev_tools/issue_resolver/test_skill.py +0 -0
  63. {skillware-0.4.1 → skillware-0.4.2}/skills/dev_tools/issue_resolver/workflow.py +0 -0
  64. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/__init__.py +0 -0
  65. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/uk_companies_house_handler/__init__.py +0 -0
  66. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/uk_companies_house_handler/card.json +0 -0
  67. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/uk_companies_house_handler/data/api_index.json +0 -0
  68. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/uk_companies_house_handler/data/terminology_map.yaml +0 -0
  69. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/uk_companies_house_handler/instructions.md +0 -0
  70. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/uk_companies_house_handler/manifest.yaml +0 -0
  71. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/uk_companies_house_handler/skill.py +0 -0
  72. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/uk_companies_house_handler/test_skill.py +0 -0
  73. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/__init__.py +0 -0
  74. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/card.json +0 -0
  75. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/data/entities.ftm.json +0 -0
  76. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/data/malicious_scs_2025.json +0 -0
  77. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/data/normalized_fbi_lazarus_20250722_180019.json +0 -0
  78. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/data/normalized_israel_nbctf_20250722_180019.json +0 -0
  79. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/data/normalized_uniswap_trm.json +0 -0
  80. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/instructions.md +0 -0
  81. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/maintenance/normalization_tool.py +0 -0
  82. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/maintenance/normalize_uniswap_trm.py +0 -0
  83. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/manifest.yaml +0 -0
  84. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/skill.py +0 -0
  85. {skillware-0.4.1 → skillware-0.4.2}/skills/finance/wallet_screening/test_skill.py +0 -0
  86. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/__init__.py +0 -0
  87. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/token_limiter/__init__.py +0 -0
  88. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/token_limiter/budget.py +0 -0
  89. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/token_limiter/card.json +0 -0
  90. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/token_limiter/data/model_pricing.json +0 -0
  91. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/token_limiter/instructions.md +0 -0
  92. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/token_limiter/manifest.yaml +0 -0
  93. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/token_limiter/skill.py +0 -0
  94. {skillware-0.4.1 → skillware-0.4.2}/skills/monitoring/token_limiter/test_skill.py +0 -0
  95. {skillware-0.4.1 → skillware-0.4.2}/skills/office/__init__.py +0 -0
  96. {skillware-0.4.1 → skillware-0.4.2}/skills/office/pdf_form_filler/__init__.py +0 -0
  97. {skillware-0.4.1 → skillware-0.4.2}/skills/office/pdf_form_filler/card.json +0 -0
  98. {skillware-0.4.1 → skillware-0.4.2}/skills/office/pdf_form_filler/instructions.md +0 -0
  99. {skillware-0.4.1 → skillware-0.4.2}/skills/office/pdf_form_filler/manifest.yaml +0 -0
  100. {skillware-0.4.1 → skillware-0.4.2}/skills/office/pdf_form_filler/skill.py +0 -0
  101. {skillware-0.4.1 → skillware-0.4.2}/skills/office/pdf_form_filler/test_skill.py +0 -0
  102. {skillware-0.4.1 → skillware-0.4.2}/skills/office/pdf_form_filler/utils.py +0 -0
  103. {skillware-0.4.1 → skillware-0.4.2}/skills/optimization/__init__.py +0 -0
  104. {skillware-0.4.1 → skillware-0.4.2}/skills/optimization/prompt_rewriter/__init__.py +0 -0
  105. {skillware-0.4.1 → skillware-0.4.2}/skills/optimization/prompt_rewriter/card.json +0 -0
  106. {skillware-0.4.1 → skillware-0.4.2}/skills/optimization/prompt_rewriter/instructions.md +0 -0
  107. {skillware-0.4.1 → skillware-0.4.2}/skills/optimization/prompt_rewriter/manifest.yaml +0 -0
  108. {skillware-0.4.1 → skillware-0.4.2}/skills/optimization/prompt_rewriter/skill.py +0 -0
  109. {skillware-0.4.1 → skillware-0.4.2}/skills/optimization/prompt_rewriter/test_skill.py +0 -0
  110. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/__init__.py +0 -0
  111. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/__init__.py +0 -0
  112. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/card.json +0 -0
  113. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/constraints.py +0 -0
  114. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/crisis_gate.py +0 -0
  115. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/instructions.md +0 -0
  116. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/kb/corpus.json +0 -0
  117. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/kb/crisis_resources.json +0 -0
  118. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/kb/hard_constraints.yaml +0 -0
  119. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/kb_provider.py +0 -0
  120. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/manifest.yaml +0 -0
  121. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/resources.py +0 -0
  122. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/skill.py +0 -0
  123. {skillware-0.4.1 → skillware-0.4.2}/skills/wellness/mental_coach/test_skill.py +0 -0
  124. {skillware-0.4.1 → skillware-0.4.2}/skillware/__init__.py +0 -0
  125. {skillware-0.4.1 → skillware-0.4.2}/skillware/__main__.py +0 -0
  126. {skillware-0.4.1 → skillware-0.4.2}/skillware/core/__init__.py +0 -0
  127. {skillware-0.4.1 → skillware-0.4.2}/skillware/core/base_skill.py +0 -0
  128. {skillware-0.4.1 → skillware-0.4.2}/skillware/core/env.py +0 -0
  129. {skillware-0.4.1 → skillware-0.4.2}/skillware/core/loader.py +0 -0
  130. {skillware-0.4.1 → skillware-0.4.2}/skillware/version_policy.py +0 -0
  131. {skillware-0.4.1 → skillware-0.4.2}/skillware.egg-info/SOURCES.txt +0 -0
  132. {skillware-0.4.1 → skillware-0.4.2}/skillware.egg-info/dependency_links.txt +0 -0
  133. {skillware-0.4.1 → skillware-0.4.2}/skillware.egg-info/entry_points.txt +0 -0
  134. {skillware-0.4.1 → skillware-0.4.2}/skillware.egg-info/requires.txt +0 -0
  135. {skillware-0.4.1 → skillware-0.4.2}/skillware.egg-info/top_level.txt +0 -0
  136. {skillware-0.4.1 → skillware-0.4.2}/tests/test_cli.py +0 -0
  137. {skillware-0.4.1 → skillware-0.4.2}/tests/test_loader.py +0 -0
  138. {skillware-0.4.1 → skillware-0.4.2}/tests/test_registry_docs.py +0 -0
  139. {skillware-0.4.1 → skillware-0.4.2}/tests/test_skill_issuer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skillware
3
- Version: 0.4.1
3
+ Version: 0.4.2
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
@@ -124,10 +124,10 @@ Browse capabilities by category in the [Skill library](docs/skills/README.md) or
124
124
 
125
125
  ```mermaid
126
126
  flowchart LR
127
- Registry[(Registry / Disk)] -->|Load| Skillware[Skillware Loader]
128
- Skillware -->|Adapt| Host[Host App]
129
- Host -->|Prompt + Tools| Model([AI Model])
130
- Model -->|Tool Call| Host
127
+ Registry[Registry] -->|Load| Loader[Loader]
128
+ Loader -->|Adapt| Host[Host]
129
+ Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
130
+ LogicalSystems -->|Tool Call| Host
131
131
  ```
132
132
 
133
133
  Install the registry once. Skillware loads a bundle and adapts it to your model's tool format — you run the loop. For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
@@ -238,9 +238,10 @@ load_env_file()
238
238
  # 1. Load the Skill from the Registry
239
239
  # The loader reads the code, manifest, and instructions automatically
240
240
  skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
241
- skill = skill_bundle["module"].WalletScreeningSkill(
241
+ skill = skill_bundle["class"](
242
242
  config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
243
243
  )
244
+ # Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
244
245
 
245
246
  # 2. Client & Tool Setup
246
247
  client = genai.Client()
@@ -53,10 +53,10 @@ Browse capabilities by category in the [Skill library](docs/skills/README.md) or
53
53
 
54
54
  ```mermaid
55
55
  flowchart LR
56
- Registry[(Registry / Disk)] -->|Load| Skillware[Skillware Loader]
57
- Skillware -->|Adapt| Host[Host App]
58
- Host -->|Prompt + Tools| Model([AI Model])
59
- Model -->|Tool Call| Host
56
+ Registry[Registry] -->|Load| Loader[Loader]
57
+ Loader -->|Adapt| Host[Host]
58
+ Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
59
+ LogicalSystems -->|Tool Call| Host
60
60
  ```
61
61
 
62
62
  Install the registry once. Skillware loads a bundle and adapts it to your model's tool format — you run the loop. For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
@@ -167,9 +167,10 @@ load_env_file()
167
167
  # 1. Load the Skill from the Registry
168
168
  # The loader reads the code, manifest, and instructions automatically
169
169
  skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
170
- skill = skill_bundle["module"].WalletScreeningSkill(
170
+ skill = skill_bundle["class"](
171
171
  config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
172
172
  )
173
+ # Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
173
174
 
174
175
  # 2. Client & Tool Setup
175
176
  client = genai.Client()
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "skillware"
7
- version = "0.4.1"
7
+ version = "0.4.2"
8
8
  description = "A framework for modular, self-contained AI skills."
9
9
  readme = "README.md"
10
10
  authors = [
@@ -27,6 +27,19 @@ BORDER_STYLE = "#C7CEEA" # lavender - table border
27
27
  SPLASH_STYLE = "#C7CEEA" # lavender - skillware splash color
28
28
  MENU_STYLE = "#FFDAC1" # peach - menu category
29
29
 
30
+ SPLASH_GRADIENT_START = (0xD4, 0xE4, 0xF1)
31
+ SPLASH_GRADIENT_MID = (0x79, 0xB6, 0xD8)
32
+ SPLASH_GRADIENT_END = (0xEB, 0xD8, 0xDC)
33
+
34
+ _SPLASH_LOGO_LINES = (
35
+ " ███████╗██╗ ██╗██╗██╗ ██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗",
36
+ " ██╔════╝██║ ██╔╝██║██║ ██║ ██║ ██║██╔══██╗██╔══██╗██╔════╝",
37
+ " ███████╗█████╔╝ ██║██║ ██║ ██║ █╗ ██║███████║██████╔╝█████╗",
38
+ " ╚════██║██╔═██╗ ██║██║ ██║ ██║███╗██║██╔══██║██╔══██╗██╔══╝",
39
+ " ███████║██║ ██╗██║███████╗███████╗╚███╔███╔╝██║ ██║██║ ██║███████╗",
40
+ " ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝",
41
+ )
42
+
30
43
  _EXAMPLES_README_REL = Path("examples") / "README.md"
31
44
  _PARENT_WALK_LIMIT = 6
32
45
  _SKILL_ID_PATTERN = re.compile(r"`([\w-]+/[\w-]+)`")
@@ -549,29 +562,67 @@ def cmd_help(console=None) -> None:
549
562
  )
550
563
 
551
564
 
565
+ def _rgb_to_hex(rgb: Tuple[int, int, int]) -> str:
566
+ r, g, b = rgb
567
+ return f"#{r:02x}{g:02x}{b:02x}"
568
+
569
+
570
+ def _lerp_rgb(
571
+ start: Tuple[int, int, int], end: Tuple[int, int, int], t: float
572
+ ) -> Tuple[int, int, int]:
573
+ return tuple(int(start[i] + (end[i] - start[i]) * t) for i in range(3))
574
+
575
+
576
+ def _splash_gradient_color(column: int, width: int) -> str:
577
+ if width <= 1:
578
+ return _rgb_to_hex(SPLASH_GRADIENT_START)
579
+ t = column / (width - 1)
580
+ if t <= 0.5:
581
+ rgb = _lerp_rgb(SPLASH_GRADIENT_START, SPLASH_GRADIENT_MID, t / 0.5)
582
+ else:
583
+ rgb = _lerp_rgb(SPLASH_GRADIENT_MID, SPLASH_GRADIENT_END, (t - 0.5) / 0.5)
584
+ return _rgb_to_hex(rgb)
585
+
586
+
587
+ def _gradient_text_line(line: str, width: int) -> Text:
588
+ text = Text()
589
+ for column, char in enumerate(line):
590
+ text.append(char, style=_splash_gradient_color(column, width))
591
+ return text
592
+
593
+
594
+ def _gradient_splash_text(logo_lines: Tuple[str, ...]) -> Text:
595
+ width = max(len(line) for line in logo_lines)
596
+ text = Text()
597
+ for line in logo_lines:
598
+ text.append(_gradient_text_line(line, width))
599
+ text.append("\n")
600
+ return text
601
+
602
+
603
+ def _package_version_str() -> str:
604
+ installed = get_installed_version()
605
+ if installed is not None:
606
+ return str(installed)
607
+ try:
608
+ return importlib.metadata.version("skillware")
609
+ except importlib.metadata.PackageNotFoundError:
610
+ return "dev"
611
+
612
+
552
613
  def cmd_interactive(console=None, parser=None) -> None:
553
614
  """Launch ASCII splash screen and interactive menu."""
554
615
  if console is None:
555
616
  console = Console()
556
617
 
557
- try:
558
- version = importlib.metadata.version("skillware")
559
- except importlib.metadata.PackageNotFoundError:
560
- version = "dev"
561
-
562
- splash = r"""
563
- ███████╗██╗ ██╗██╗██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗
564
- ██╔════╝██║ ██╔╝██║██║ ██║ ██║██╔══██╗██╔══██╗██╔════╝
565
- ███████╗█████╔╝ ██║██║ ██║ █╗ ██║███████║██████╔╝█████╗
566
- ╚════██║██╔═██╗ ██║██║ ██║███╗██║██╔══██║██╔══██╗██╔══╝
567
- ███████║██║ ██╗██║███████╗╚███╔███╔╝██║ ██║██║ ██║███████╗
568
- ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝ ╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝"""
618
+ version = _package_version_str()
619
+ logo_width = max(len(line) for line in _SPLASH_LOGO_LINES)
569
620
 
570
- console.print(Text(splash, style=SPLASH_STYLE))
621
+ console.print(_gradient_splash_text(_SPLASH_LOGO_LINES))
571
622
  console.print(
572
- Text(
573
- f" Skill Management Framework — v{version}",
574
- style=f"dim {SPLASH_STYLE}",
623
+ _gradient_text_line(
624
+ f" Skillware v{version} — Skill Management Framework",
625
+ logo_width,
575
626
  )
576
627
  )
577
628
 
@@ -653,8 +704,7 @@ def main() -> None:
653
704
  help="Show this help message and exit.",
654
705
  )
655
706
 
656
- _ver = get_installed_version()
657
- _version_str = str(_ver) if _ver else "dev"
707
+ _version_str = _package_version_str()
658
708
 
659
709
  parser.add_argument(
660
710
  "--version",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skillware
3
- Version: 0.4.1
3
+ Version: 0.4.2
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
@@ -124,10 +124,10 @@ Browse capabilities by category in the [Skill library](docs/skills/README.md) or
124
124
 
125
125
  ```mermaid
126
126
  flowchart LR
127
- Registry[(Registry / Disk)] -->|Load| Skillware[Skillware Loader]
128
- Skillware -->|Adapt| Host[Host App]
129
- Host -->|Prompt + Tools| Model([AI Model])
130
- Model -->|Tool Call| Host
127
+ Registry[Registry] -->|Load| Loader[Loader]
128
+ Loader -->|Adapt| Host[Host]
129
+ Host -->|Prompt + Tools| LogicalSystems([Logical Systems])
130
+ LogicalSystems -->|Tool Call| Host
131
131
  ```
132
132
 
133
133
  Install the registry once. Skillware loads a bundle and adapts it to your model's tool format — you run the loop. For details on how the loader turns the manifest into a tool, see the [Introduction](docs/introduction.md).
@@ -238,9 +238,10 @@ load_env_file()
238
238
  # 1. Load the Skill from the Registry
239
239
  # The loader reads the code, manifest, and instructions automatically
240
240
  skill_bundle = SkillLoader.load_skill("finance/wallet_screening")
241
- skill = skill_bundle["module"].WalletScreeningSkill(
241
+ skill = skill_bundle["class"](
242
242
  config={"ETHERSCAN_API_KEY": os.environ.get("ETHERSCAN_API_KEY")}
243
243
  )
244
+ # Or: skill = skill_bundle["module"].WalletScreeningSkill(config={...})
244
245
 
245
246
  # 2. Client & Tool Setup
246
247
  client = genai.Client()
@@ -39,7 +39,7 @@ def test_emit_advisory_silent_for_current_release(monkeypatch, capsys):
39
39
  monkeypatch.setattr(
40
40
  version_policy.metadata,
41
41
  "version",
42
- lambda _name: "0.4.1",
42
+ lambda _name: "0.4.2",
43
43
  )
44
44
  version_policy.emit_upgrade_advisory()
45
45
  assert capsys.readouterr().err == ""
File without changes
File without changes
File without changes
File without changes
File without changes