feat: add ClaudeCodeProvider for subscription users #10

Merged
jleibl merged 2 commits from feat/claude-code-provider into main 2026-05-21 12:25:35 +00:00
Owner

Wraps @anthropic-ai/claude-agent-sdk so Claude Pro/Max subscribers (who
do not have a console API key) can use this library by authenticating
through the local claude CLI. Subscribers run claude login once and
the provider picks up the credentials automatically.

Provider behavior:

  • query() is invoked in single-turn mode (maxTurns: 1, allowedTools: [])
    to behave as plain text completion by default. Both knobs are
    configurable for agentic use cases.
  • Conversation history is flattened to a single prompt with role labels.
  • doStream() emits text deltas as the SDK yields successive assistant
    messages. doComplete() accumulates and returns the final result.
  • SDKAssistantMessageError codes (authentication_failed, billing_error,
    rate_limit, model_not_found, ...) map to AIErrorType variants.
  • ClaudeCodeConfig.apiKey is optional — when omitted the SDK falls back
    to ANTHROPIC_API_KEY or local subscription credentials. The base
    validator is overridden to allow this.

Tradeoffs:

  • Requires the claude CLI installed and logged in on the host. This
    is not suitable for typical server-side production deployments; it is
    the official path for subscription accounts.
  • Higher latency (CLI process spawn) than the direct Anthropic API.
  • The agent SDK is heavy. Bundle grows ~750KB; bun build now uses
    --target node so the SDK's Node built-in imports resolve correctly.

Wired into PROVIDER_REGISTRY ('claude-code'), createClaudeCodeProvider,
SUPPORTED_PROVIDERS, and re-exported from the package entry.

Wraps @anthropic-ai/claude-agent-sdk so Claude Pro/Max subscribers (who do not have a console API key) can use this library by authenticating through the local `claude` CLI. Subscribers run `claude login` once and the provider picks up the credentials automatically. Provider behavior: - query() is invoked in single-turn mode (maxTurns: 1, allowedTools: []) to behave as plain text completion by default. Both knobs are configurable for agentic use cases. - Conversation history is flattened to a single prompt with role labels. - doStream() emits text deltas as the SDK yields successive assistant messages. doComplete() accumulates and returns the final result. - SDKAssistantMessageError codes (authentication_failed, billing_error, rate_limit, model_not_found, ...) map to AIErrorType variants. - ClaudeCodeConfig.apiKey is optional — when omitted the SDK falls back to ANTHROPIC_API_KEY or local subscription credentials. The base validator is overridden to allow this. Tradeoffs: - Requires the `claude` CLI installed and logged in on the host. This is not suitable for typical server-side production deployments; it is the official path for subscription accounts. - Higher latency (CLI process spawn) than the direct Anthropic API. - The agent SDK is heavy. Bundle grows ~750KB; bun build now uses --target node so the SDK's Node built-in imports resolve correctly. Wired into PROVIDER_REGISTRY ('claude-code'), createClaudeCodeProvider, SUPPORTED_PROVIDERS, and re-exported from the package entry.
jleibl added 1 commit 2026-05-21 12:21:52 +00:00
Wraps @anthropic-ai/claude-agent-sdk so Claude Pro/Max subscribers (who
do not have a console API key) can use this library by authenticating
through the local `claude` CLI. Subscribers run `claude login` once and
the provider picks up the credentials automatically.

Provider behavior:
- query() is invoked in single-turn mode (maxTurns: 1, allowedTools: [])
  to behave as plain text completion by default. Both knobs are
  configurable for agentic use cases.
- Conversation history is flattened to a single prompt with role labels.
- doStream() emits text deltas as the SDK yields successive assistant
  messages. doComplete() accumulates and returns the final result.
- SDKAssistantMessageError codes (authentication_failed, billing_error,
  rate_limit, model_not_found, ...) map to AIErrorType variants.
- ClaudeCodeConfig.apiKey is optional — when omitted the SDK falls back
  to ANTHROPIC_API_KEY or local subscription credentials. The base
  validator is overridden to allow this.

Tradeoffs:
- Requires the `claude` CLI installed and logged in on the host. This
  is not suitable for typical server-side production deployments; it is
  the official path for subscription accounts.
- Higher latency (CLI process spawn) than the direct Anthropic API.
- The agent SDK is heavy. Bundle grows ~750KB; bun build now uses
  --target node so the SDK's Node built-in imports resolve correctly.

Wired into PROVIDER_REGISTRY ('claude-code'), createClaudeCodeProvider,
SUPPORTED_PROVIDERS, and re-exported from the package entry.
jleibl added 1 commit 2026-05-21 12:25:05 +00:00
Full rewrite focused on what consumers actually need: install, a
working snippet per provider, and the public API surface.

Changes vs the previous version:
- Document ClaudeCodeProvider, including the subscription-via-CLI
  auth path that the new provider enables.
- Remove the ProviderRegistry section (the class was removed in R1).
- Drop the stale Provider Comparison and Detailed Capabilities
  tables; vendor capabilities and model lists move too fast for a
  README to track.
- Remove the inaccurate Zero Dependencies and Comprehensive Testing
  claims (post-refactor 44/91 tests need updating).
- Refresh default models (Gemini 1.5 -> 2.5) and the package list to
  match the current build.
- Add a brief Architecture note covering the base hooks introduced
  in R2 and the OpenWebUI strategy split from R3.

README is 315 lines (was 701).
jleibl merged commit 93ef2611c0 into main 2026-05-21 12:25:35 +00:00
jleibl deleted branch feat/claude-code-provider 2026-05-21 12:25:39 +00:00
jleibl referenced this issue from a commit 2026-05-21 12:39:39 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jleibl/simple-ai-provider#10