Skip to content

0.5.1 — Provider-neutral declarative capabilities + dashboard browse

Choose a tag to compare

@satya-anguluri satya-anguluri released this 13 Jul 13:14
· 31 commits to main since this release

Capstead 0.5.1

Declarative capabilities are now provider-neutral, and the dashboard is browsable even before any executions.

✨ Provider-neutral declarative capabilities

@CapabilityClient no longer requires Spring AI. Capstead renders prompts, resolves model profiles, binds structured output, and governs the call — and delegates only the model call to a one-method SPI you implement (or the Spring AI default):

@Bean
CapabilityModelInvoker modelInvoker(MyLlmClient llm) {          // LangChain4j, an SDK, raw HTTP…
    return req -> llm.complete(req.model(), req.systemPrompt(), req.userPrompt());
}
  • New SPI in capstead-runtime: CapabilityModelInvoker + CapabilityModelRequest.
  • The declarative engine moved into capstead-starter (no Spring AI dependency).
  • capstead-spring-ai now provides the default Spring AI ChatClient-backed invoker — Spring AI users need no bean.
  • Structured output is bound provider-neutrally (JSON → your return type).

Full guide: docs/DECLARATIVE-CAPABILITIES.md.

🖥️ Dashboard: browse registered capabilities with no executions

The dashboard now merges the catalog with scorecards, so every registered @Capability is listed even before it runs — unexecuted capabilities show a "No runs" badge and are still clickable to their metadata (owner, domain, version, tags). Fixes the dead-end where clicking a domain with no recorded executions showed a blank page.

📦 Get it

<dependency>
  <groupId>io.capstead</groupId>
  <artifactId>capstead-starter</artifactId>
  <version>0.5.1</version>
</dependency>
<!-- Optional: default Spring AI ChatClient invoker for declarative capabilities -->
<dependency>
  <groupId>io.capstead</groupId>
  <artifactId>capstead-spring-ai</artifactId>
  <version>0.5.1</version>
</dependency>

Runnable example (no API keys, no Spring AI): samples/.