Feature Description
Two manifest contract gaps in the registry after v0.3.1:
-
BaseSkill.validate_params() is a stub, always returns True (skillware/core/base_skill.py). Agent loops can call skills with missing or wrong-typed args, basically failures happen inside execute() instead of upfront.
-
output vs outputs drift, finance/wallet_screening uses output:; template and newer skills use outputs: (novelty_extractor, tos_evaluator, issue_resolver).
Deliver in one PR:
- Implement
validate_params() using each skill's manifest.yaml parameters JSON Schema (fail with a clear error on missing required fields / wrong types).
- Standardize on
outputs everywhere; fix wallet_screening/manifest.yaml.
- Extend
tests/test_skill_issuer.py to reject manifests that use output instead of outputs.
- Add tests for
validate_params() (valid params pass, missing required fail).
Out of scope: loader API changes; adding outputs blocks to skills that never declared them (fix the wrong key name only).
Rationale
Agents and contributors rely on manifest.yaml as the tool contract. Validation at the framework level catches bad tool calls before skill logic runs, especially important as the registry grows (e.g. novelty_extractor in 0.3.1).
The output/outputs split is small but causes confusion when reading manifests, catalog pages, and tests. One standard key reduces noise for humans and autonomous contributors.
Implementation Idea
- Add
jsonschema as a dependency (core or [dev] only for tests first, prefer core if validation runs at runtime in validate_params).
- In
BaseSkill.validate_params(), load schema from the skill bundle manifest (subclasses may override to read from disk like tests do today).
- Optional: call
validate_params() at the start of execute() in a shared helper or document that agent loops should call it before execute(), pick one pattern and test it.
- Issuer test:
assert "output" not in manifest (or only allow outputs).
- Fix
skills/finance/wallet_screening/manifest.yaml: rename output → outputs (same structure).
Feature Description
Two manifest contract gaps in the registry after v0.3.1:
BaseSkill.validate_params()is a stub, always returnsTrue(skillware/core/base_skill.py). Agent loops can call skills with missing or wrong-typed args, basically failures happen insideexecute()instead of upfront.outputvsoutputsdrift,finance/wallet_screeningusesoutput:; template and newer skills useoutputs:(novelty_extractor,tos_evaluator,issue_resolver).Deliver in one PR:
validate_params()using each skill'smanifest.yamlparametersJSON Schema (fail with a clear error on missing required fields / wrong types).outputseverywhere; fixwallet_screening/manifest.yaml.tests/test_skill_issuer.pyto reject manifests that useoutputinstead ofoutputs.validate_params()(valid params pass, missing required fail).Out of scope: loader API changes; adding
outputsblocks to skills that never declared them (fix the wrong key name only).Rationale
Agents and contributors rely on
manifest.yamlas the tool contract. Validation at the framework level catches bad tool calls before skill logic runs, especially important as the registry grows (e.g.novelty_extractorin 0.3.1).The
output/outputssplit is small but causes confusion when reading manifests, catalog pages, and tests. One standard key reduces noise for humans and autonomous contributors.Implementation Idea
jsonschemaas a dependency (core or[dev]only for tests first, prefer core if validation runs at runtime invalidate_params).BaseSkill.validate_params(), load schema from the skill bundle manifest (subclasses may override to read from disk like tests do today).validate_params()at the start ofexecute()in a shared helper or document that agent loops should call it beforeexecute(), pick one pattern and test it.assert "output" not in manifest(or only allowoutputs).skills/finance/wallet_screening/manifest.yaml: renameoutput→outputs(same structure).