AGENTS.md@pkg/capability · git:20260724.87ce252 · 2026-07-24 · sha256 3faea063fe3e6036
AGENTS.md@pkg/capability git:20260724.87ce252A
Immutable. This exact content is served forever at /api/v1/blob/3faea063fe3e6036.
# Capability Guide
Decouples modules from providers. Provider-backed caps live in `pkg/capability/<provider>/`, register via `capability.Register(Spec)`.
## Entry points
- Core: `invoke.go`, `register.go`, ops/eventsource/polling helpers
- Reference: `example/` (`service.go`, `adapter.go`, `register.go`)
- Provider caps: `karakeep/`, `miniflux/`, …; multi-provider: `devops/`; internal (no provider): `notify/`, `agent/`, `clip/`
```go
capability.Invoke(ctx, hub.CapKarakeep, karakeep.OpList, map[string]any{"limit": 20})
```
## Boundaries
- Modules never import `pkg/providers/*` — use `capability.Invoke`
- Adapters never call hub/pipeline/emit DataEvent
- CapType == provider ID for provider-backed caps
- **Exception:** `devops` (`hub.CapDevops`) aggregates beszel/uptimekuma/traefik/grafana/wakapi/dozzle/netalertx (sole multi-provider CapType≠provider). Ops use underscores (`beszel_list_systems`)
- Domain event names stay stable; set `DataEvent.Capability` to provider ID
- Pagination: limit + opaque cursor; hide provider pagination internals in the adapter
- New caps: follow `pkg/capability/example/`