From 9d409be5b9271d1fd171160dc253716d8d7c698d Mon Sep 17 00:00:00 2001 From: neken Date: Fri, 10 Apr 2026 15:10:10 +0500 Subject: [PATCH] feat: add Claude Agent SDK wrapper with session create/resume Co-Authored-By: Claude Sonnet 4.6 --- src/services/claude.ts | 52 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/services/claude.ts 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; + } +}