94 lines
2.0 KiB
TypeScript
94 lines
2.0 KiB
TypeScript
/**
|
|
* Claude Agent SDK wrapper
|
|
*
|
|
* Uses @anthropic-ai/claude-agent-sdk for native TypeScript integration
|
|
* instead of spawning CLI processes.
|
|
*/
|
|
|
|
import {
|
|
hasActiveProcess,
|
|
interruptCurrentProcess,
|
|
} from './query-manager.js';
|
|
import { executeClaudeQuery } from './executor.js';
|
|
import type {
|
|
ClaudeSpawnOptions,
|
|
ClaudeResult,
|
|
} from './types.js';
|
|
|
|
export type {
|
|
StreamEvent,
|
|
StreamCallback,
|
|
PermissionRequest,
|
|
PermissionHandler,
|
|
AskUserQuestionInput,
|
|
AskUserQuestionHandler,
|
|
ClaudeResult,
|
|
ClaudeResultWithQueryId,
|
|
ClaudeSpawnOptions,
|
|
InitEventData,
|
|
ToolUseEventData,
|
|
ToolResultEventData,
|
|
ToolOutputEventData,
|
|
TextEventData,
|
|
ThinkingEventData,
|
|
ResultEventData,
|
|
ErrorEventData,
|
|
} from './types.js';
|
|
|
|
// Re-export query management functions
|
|
export {
|
|
generateQueryId,
|
|
hasActiveProcess,
|
|
isQueryActive,
|
|
getActiveQueryCount,
|
|
interruptQuery,
|
|
interruptAllQueries,
|
|
interruptCurrentProcess,
|
|
} from './query-manager.js';
|
|
|
|
/**
|
|
* Execute a Claude query using the Agent SDK.
|
|
* Supports concurrent execution with query ID tracking.
|
|
*/
|
|
export async function executeClaudeCli(
|
|
prompt: string,
|
|
options: ClaudeSpawnOptions,
|
|
): Promise<ClaudeResult> {
|
|
return executeClaudeQuery(prompt, options);
|
|
}
|
|
|
|
/**
|
|
* ClaudeProcess class wrapping the SDK query function.
|
|
* Wraps the SDK query function.
|
|
*/
|
|
export class ClaudeProcess {
|
|
private options: ClaudeSpawnOptions;
|
|
private currentSessionId?: string;
|
|
|
|
constructor(options: ClaudeSpawnOptions) {
|
|
this.options = options;
|
|
}
|
|
|
|
/** Execute a prompt */
|
|
async execute(prompt: string): Promise<ClaudeResult> {
|
|
const result = await executeClaudeCli(prompt, this.options);
|
|
this.currentSessionId = result.sessionId;
|
|
return result;
|
|
}
|
|
|
|
/** Interrupt the running query */
|
|
kill(): void {
|
|
interruptCurrentProcess();
|
|
}
|
|
|
|
/** Check if a query is running */
|
|
isRunning(): boolean {
|
|
return hasActiveProcess();
|
|
}
|
|
|
|
/** Get session ID */
|
|
getSessionId(): string | undefined {
|
|
return this.currentSessionId;
|
|
}
|
|
}
|