HKUDS/DeepTutor · error · HubError

{self.name}: HTTP {response.status_code}: {response.text[:20

Error message

{self.name}: HTTP {response.status_code}: {response.text[:200]}

What it means

Raised by list_my_skills when the hub returns an unexpected HTTP >= 400 (other than 401/403) to the owner=me listing. The message includes the status code and first 200 characters of the response body for diagnosis.

Source

Thrown at deeptutor/services/skill/hub.py:506

        """List the authenticated user's skills via ``GET /skills?owner=me``.

        Each row carries the slug, current ``version`` (latest), the full
        ``versions`` list (for rollback) and the current classification (for
        pre-filling an upgrade's tagging) — see ``buildMySkills`` on the hub.
        """
        url = f"{self._base_url}/skills"
        try:
            response = self._client.get(
                url, params={"owner": "me"}, headers={"Authorization": f"Bearer {token}"}
            )
        except httpx.HTTPError as exc:
            raise HubError(f"{self.name}: request failed: {exc}") from exc
        if response.status_code in (401, 403):
            raise HubError(
                f"{self.name}: not authenticated — run `skill login` or pass a valid token."
            )
        if response.status_code >= 400:
            raise HubError(f"{self.name}: HTTP {response.status_code}: {response.text[:200]}")
        try:
            payload = response.json()
        except ValueError as exc:
            raise HubError(f"{self.name}: invalid JSON listing skills") from exc
        rows = payload.get("skills") if isinstance(payload, dict) else None
        return [row for row in (rows or []) if isinstance(row, dict)]

    def set_dist_tag(
        self,
        slug: str,
        *,
        version: str,
        token: str,
        tag: str = "latest",
    ) -> dict[str, Any]:
        """Move a dist-tag (default ``latest``) to an existing version (rollback)."""
        url = f"{self._base_url}/skills/{slug}/dist-tags"
        try:

View on GitHub (pinned to 3e82f13042)

Solutions

  1. Read the embedded body snippet to identify the server-side cause
  2. Retry after a delay if rate-limited (429)
  3. Upgrade/align the hub version so /skills?owner=me exists
  4. Report 5xx errors to the hub operator
Defensive patterns

Strategy: try-catch

Try / catch

try:
    hub.list_my_skills(token)
except HubError as e:
    if "HTTP 429" in str(e):
        time.sleep(int(e_retry_after or 30)); return hub.list_my_skills(token)
    raise

Prevention

When it happens

Trigger: Calling list_my_skills when the hub hits 500, returns 404 (endpoint absent in that hub version), or 429 (rate limited).

Common situations: Hub version that lacks the owner=me filter; server-side error; rate limiting from aggressive polling.

Related errors


AI-assisted analysis of HKUDS/DeepTutor@3e82f13042 (2026-08-27). Data as JSON: /api/errors/867f51c8272fd977. Report an issue: GitHub.