You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
├── app/ ← Spring Boot entry point, onboarding UI, web routes, chat channel
31
+
├── providers/
32
+
│ ├── anthropic/ ← Anthropic (Claude) provider + Claude Code OAuth support
33
+
│ ├── openai/ ← OpenAI (GPT) provider
34
+
│ ├── ollama/ ← Ollama local provider (no API key required)
35
+
│ └── google/ ← Google Gen AI (Gemini) provider
36
+
└── plugins/
37
+
├── telegram/ ← Telegram long-poll channel
38
+
├── brave/ ← Brave web search tool
39
+
└── playwright/ ← Playwright browser tool
33
40
```
34
41
35
-
`app` depends on `base` + `channels:telegram`. `ChatChannel` lives inside `app/`.
42
+
`app` depends on `base` + all `providers/` + all `plugins/`. `ChatChannel` lives inside `app/`.
43
+
44
+
Each **provider** implements `AgentOnboardingProvider` (in `base`) and is auto-discovered by Spring. Each **plugin** is an optional Spring Boot auto-configuration module that contributes tools or channels.
The `AnthropicAgentOnboardingProvider` additionally supports a **system-wide token** via `AnthropicClaudeCodeOAuthTokenExtractor` — if a Claude Code OAuth token is found locally, it is offered as a zero-config option during onboarding.
-**htmx v2.0.8 (https://htmx.org/docs/):** htmx is a strong fit for this app because it keeps the interaction model server-driven: the server returns HTML fragments, not JSON, and htmx swaps them into the DOM. We are using `hx-boost` which "boosts" normal anchors and form tags to use AJAX instead (preventing reloading of css and js). This has the nice fallback that, if the user does not have javascript enabled, the site will continue to work. Both Bulma and htmx are already included in `base.html.peb`.
2. Provider selection — dynamically populated from all `AgentOnboardingProvider` beans (Anthropic, OpenAI, Ollama, Google Gen AI, + any future providers)
167
+
3. Credentials (API key + model — skipped for providers where `requiresApiKey()` is `false`)
0 commit comments