takt/src/infra/providers/claude.ts
nrs 680f0a6df5
github-issue-237-fix-ctrl-c-provider-graceful-timeout-force (#253)
* dist-tag 検証をリトライ付きに変更(npm レジストリの結果整合性対策)

* takt run 実行時に蓋閉じスリープを抑制

* takt: github-issue-237-fix-ctrl-c-provider-graceful-timeout-force
2026-02-12 11:52:07 +09:00

61 lines
2.1 KiB
TypeScript

/**
* Claude provider implementation
*/
import { callClaude, callClaudeCustom, callClaudeAgent, callClaudeSkill, type ClaudeCallOptions } from '../claude/index.js';
import { resolveAnthropicApiKey } from '../config/index.js';
import type { AgentResponse } from '../../core/models/index.js';
import type { AgentSetup, Provider, ProviderAgent, ProviderCallOptions } from './types.js';
function toClaudeOptions(options: ProviderCallOptions): ClaudeCallOptions {
return {
cwd: options.cwd,
abortSignal: options.abortSignal,
sessionId: options.sessionId,
allowedTools: options.allowedTools,
mcpServers: options.mcpServers,
model: options.model,
maxTurns: options.maxTurns,
permissionMode: options.permissionMode,
onStream: options.onStream,
onPermissionRequest: options.onPermissionRequest,
onAskUserQuestion: options.onAskUserQuestion,
bypassPermissions: options.bypassPermissions,
anthropicApiKey: options.anthropicApiKey ?? resolveAnthropicApiKey(),
};
}
/** Claude provider — delegates to Claude Code SDK */
export class ClaudeProvider implements Provider {
setup(config: AgentSetup): ProviderAgent {
if (config.claudeAgent) {
const agentName = config.claudeAgent;
return {
call: (prompt: string, options: ProviderCallOptions): Promise<AgentResponse> =>
callClaudeAgent(agentName, prompt, toClaudeOptions(options)),
};
}
if (config.claudeSkill) {
const skillName = config.claudeSkill;
return {
call: (prompt: string, options: ProviderCallOptions): Promise<AgentResponse> =>
callClaudeSkill(skillName, prompt, toClaudeOptions(options)),
};
}
const { name, systemPrompt } = config;
if (systemPrompt) {
return {
call: (prompt: string, options: ProviderCallOptions): Promise<AgentResponse> =>
callClaudeCustom(name, prompt, systemPrompt, toClaudeOptions(options)),
};
}
return {
call: (prompt: string, options: ProviderCallOptions): Promise<AgentResponse> =>
callClaude(name, prompt, toClaudeOptions(options)),
};
}
}