feat: expose repository navigation queries
Some checks failed
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / pytest-smoke (push) Failing after 2s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a0230c-b06c-7641-808a-e191b6d1da49
This commit is contained in:
tegwick 2026-08-22 00:40:42 +02:00
parent 283bbf048e
commit e3e542f76c
9 changed files with 446 additions and 3 deletions

View file

@ -27,6 +27,8 @@ CORE_TOOL_NAMES = frozenset({
"register_repo",
"update_repo_path",
"list_domain_repos",
"query_repository_navigation",
"get_repository_navigation_facet",
"check_repo_doi",
"get_doi_summary",
"register_service",
@ -298,6 +300,50 @@ class HubCoreMCPServer:
def list_domain_repos(domain_slug: str) -> str:
return self._json(self._get("/repos/", {"domain": domain_slug}))
@register("query_repository_navigation")
def query_repository_navigation(
primary_domain: list[str] | None = None,
secondary_domain: list[str] | None = None,
category: list[str] | None = None,
capability_tag: list[str] | None = None,
business_stake: list[str] | None = None,
business_mechanic: list[str] | None = None,
cursor: str | None = None,
limit: int = 100,
) -> str:
"""Navigate repositories across any combination of classification facets."""
return self._json(
self._get(
"/ports/projections/repository-navigation/repositories",
{
"primary_domain": primary_domain,
"secondary_domain": secondary_domain,
"category": category,
"capability_tag": capability_tag,
"business_stake": business_stake,
"business_mechanic": business_mechanic,
"cursor": cursor,
"limit": limit,
},
)
)
@register("get_repository_navigation_facet")
def get_repository_navigation_facet(
facet_kind: str,
facet_value: str,
cursor: str | None = None,
limit: int = 100,
) -> str:
"""Navigate one domain, category, tag, stake, or mechanic facet."""
return self._json(
self._get(
"/ports/projections/repository-navigation/"
f"facets/{facet_kind}/{facet_value}",
{"cursor": cursor, "limit": limit},
)
)
@register("check_repo_doi")
def check_repo_doi(repo_slug: str, force_refresh: bool = False) -> str:
return self._json(