diff --git a/src/services/claude.ts b/src/services/claude.ts new file mode 100644 index 0000000..ab7c31d --- /dev/null +++ b/src/services/claude.ts @@ -0,0 +1,52 @@ +import { query } from "@anthropic-ai/claude-agent-sdk"; + +export interface ClaudeResult { + sessionId: string; + result: string; +} + +export class ClaudeService { + async createSession(prompt: string, cwd: string): Promise { + let sessionId = ""; + let result = ""; + + for await (const message of query({ + prompt, + options: { + cwd, + permissionMode: "bypassPermissions", + allowedTools: [ + "Read", "Write", "Edit", "Bash", "Glob", "Grep", + "WebSearch", "WebFetch", "Agent", + ], + }, + })) { + if (message.type === "system" && message.subtype === "init") { + sessionId = message.session_id; + } + if ("result" in message && typeof message.result === "string") { + result = message.result; + } + } + + return { sessionId, result }; + } + + async sendMessage(prompt: string, sessionId: string): Promise { + let result = ""; + + for await (const message of query({ + prompt, + options: { + resume: sessionId, + permissionMode: "bypassPermissions", + }, + })) { + if ("result" in message && typeof message.result === "string") { + result = message.result; + } + } + + return result; + } +}