Skip to content

feat(tui): show advertised skill count for remote skill servers#1452

Merged
Aaronontheweb merged 2 commits into
netclaw-dev:devfrom
Aaronontheweb:feature/skill-sources-count
Jun 22, 2026
Merged

feat(tui): show advertised skill count for remote skill servers#1452
Aaronontheweb merged 2 commits into
netclaw-dev:devfrom
Aaronontheweb:feature/skill-sources-count

Conversation

@Aaronontheweb

Copy link
Copy Markdown
Collaborator

Summary

The Skill Sources config screen now shows how many skills each remote server advertises, so operators can see what a feed offers without leaving the TUI.

  • The reachability probe parses the RFC agent-skills index (/.well-known/agent-skills/index.json) it already fetches and returns the count. It shows in the add / Test-connection feedback and, after Rescan all, as a | N advertised badge on the inventory row.
  • "advertised", not "loaded": it's the count the server publishes. The daemon may load fewer after content-scan / hash / minimumDaemonVersion filtering — the label is honest about what it measures.
  • Rescan all refreshes counts off the loop (one probe per enabled remote server) through a shared probe helper, caches them by source name, and posts a completion summary (Updated skill counts for K of N skill server(s); J did not respond) instead of a premature green success.
  • The count cache is invalidated on every config reload (rename / remove / URL change / disable), so a stale or misattributed count can't survive a config change.
  • A stored bearer token that won't decrypt is skipped (no anonymous probe) and surfaced as a Rescan warning — never silently degraded to an unauthenticated request.
  • Timeouts: interactive add / test probes stay capped at 10s for snappy feedback; the background Rescan refresh honors the feed's full configured timeout (matching the daemon).

This shipped with a /code-review ultra-style pass folded in — the cache-staleness, disabled-feed, silent-fallback, network-failure-visibility, and reuse findings were all addressed before this PR.

Validation

  • Netclaw.Cli.Tests: 1112/1112 (38 SkillSources tests — advertised-count parsing, disabled / undecryptable-token / unreachable paths, cache invalidation on disable)
  • dotnet slopwatch analyze: no new violations
  • copyright headers ✓
  • Validated against the real ghcr.io/netclaw-dev/skillserver (seeded with 5 skills via skillserver publish-all): a netclaw image built from this branch reads the RFC index and renders | 5 advertised on the Rescan-all'd row.

Smoke note

No native smoke tape: a render-level tape would need a fake skill-server stood up inside the tape (no existing tape stands up a data server, and there's no pre-tape setup hook). The count is a render-independent string covered by the VM integration tests, and the behavior is validated end-to-end against the real skillserver image above.

The Skill Sources config screen now surfaces how many skills each remote server
advertises, so operators can see what a feed offers without leaving the TUI.

- The reachability probe parses the RFC agent-skills index it already fetches and
  returns the skill count; it shows in the add / Test-connection feedback and, after
  "Rescan all", as a "| N advertised" badge on the inventory row.
- "advertised", not "loaded": it is the count the server publishes. The daemon may
  load fewer after content-scan / hash / minimum-version filtering, so the label is
  honest about what the number measures.
- Rescan all refreshes counts off the loop (one probe per ENABLED remote server) via
  a shared probe helper, caches them by source name, and posts a completion summary
  ("Updated skill counts for K of N skill server(s); J did not respond") instead of a
  premature green success.
- The count cache is invalidated on every config reload (rename / remove / URL change /
  disable), so a stale or misattributed count cannot survive a config change.
- A stored bearer token that will not decrypt is skipped (no anonymous probe) and
  surfaced as a Rescan warning, never silently degraded to an unauthenticated request.
- Interactive add / test probes stay capped at 10s for snappy feedback; the background
  Rescan refresh honors the feed's full configured timeout (matching the daemon).

Tests cover advertised-count parsing, the disabled / undecryptable-token / unreachable
paths, and cache invalidation on disable.
@Aaronontheweb
Aaronontheweb enabled auto-merge (squash) June 19, 2026 19:26
@Aaronontheweb
Aaronontheweb merged commit 6f9f45c into netclaw-dev:dev Jun 22, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant