feat: add ClaudeCodeProvider for subscription users

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.
This commit is contained in:
2026-05-21 14:16:11 +02:00
parent 6298a0027d
commit e10ce7f53a
7 changed files with 590 additions and 6 deletions

View File

@@ -21,8 +21,8 @@
"build": "bun run build:clean && bun run build:types && bun run build:esm && bun run build:cjs",
"build:clean": "rm -rf dist",
"build:types": "tsc --project tsconfig.build.json",
"build:esm": "bun build src/index.ts --outfile dist/index.mjs --format esm",
"build:cjs": "bun build src/index.ts --outfile dist/index.js --format cjs",
"build:esm": "bun build src/index.ts --outfile dist/index.mjs --format esm --target node",
"build:cjs": "bun build src/index.ts --outfile dist/index.js --format cjs --target node",
"dev": "bun run src/index.ts",
"test": "bun test",
"prepublishOnly": "bun run build"
@@ -52,6 +52,7 @@
"url": "https://gitea.jleibl.net/jleibl/simple-ai-provider.git"
},
"dependencies": {
"@anthropic-ai/claude-agent-sdk": "^0.3.146",
"@anthropic-ai/sdk": "^0.97.0",
"@google/genai": "^2.5.0",
"openai": "^6.0.0"