feat: add Claude Agent SDK wrapper with session create/resume
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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<ClaudeResult> {
|
||||||
|
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<string> {
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user