Context
The CLI needs a typed client for listing, downloading, verifying, and installing Hub skills without hardcoding HTTP and JSON parsing.
Scope
Non-Goals
- Does not implement the Hub server.
- Does not bypass signature verification.
- Does not execute downloaded skill code.
Technical Specification
SkillHubClient should provide list_available(), fetch_metadata(name), download_tarball(entry), and install(name, target_dir). Install refuses invalid signatures and path traversal.
Acceptance Criteria
Tests Required
| Test |
Verifies |
test_list_available_parses_entries |
Hub list response parsed. |
test_install_refuses_invalid_signature |
Signature gate enforced. |
test_download_http_error_maps_to_sdk_error |
HTTP failures are typed. |
Additional Test Coverage / Edge Cases
Invariants — Do Not Violate
- SDK must not execute skill hooks.
- All community skill installs verify signature before extraction.
Dependencies
Blocked by:
Unblocks:
Contract References
- Skills Hub API contract
ori-specs/signing/v1.md
Priority
post-poc
Suggested Labels
blocked, post-poc
Context
The CLI needs a typed client for listing, downloading, verifying, and installing Hub skills without hardcoding HTTP and JSON parsing.
Scope
ori_sdk/hub.py.HubSkillEntry,HubInstallResult, andSkillHubClient.httpximport.Non-Goals
Technical Specification
SkillHubClientshould providelist_available(),fetch_metadata(name),download_tarball(entry), andinstall(name, target_dir). Install refuses invalid signatures and path traversal.Acceptance Criteria
pytest,mypy, andruffpass.Tests Required
test_list_available_parses_entriestest_install_refuses_invalid_signaturetest_download_http_error_maps_to_sdk_errorAdditional Test Coverage / Edge Cases
Invariants — Do Not Violate
Dependencies
Blocked by:
Unblocks:
Contract References
ori-specs/signing/v1.mdPriority
post-pocSuggested Labels
blocked,post-poc