agi 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +463 -14
- package/dist/index.d.mts +824 -0
- package/dist/index.d.ts +824 -0
- package/dist/index.js +959 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +946 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +68 -32
- package/LICENSE.pdf +0 -0
- package/scripts/install-dmg.js +0 -74
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/http.ts","../src/types/screenshot.ts","../src/context/session-context.ts","../src/utils.ts","../src/resources/sessions.ts","../src/client.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Error classes for AGI SDK\n */\n\n/**\n * Base error class for all AGI API errors\n */\nexport class AGIError extends Error {\n constructor(\n message: string,\n public readonly statusCode?: number,\n public readonly response?: unknown\n ) {\n super(message);\n this.name = 'AGIError';\n Object.setPrototypeOf(this, AGIError.prototype);\n }\n}\n\n/**\n * Authentication error (401)\n */\nexport class AuthenticationError extends AGIError {\n constructor(message: string, response?: unknown) {\n super(message, 401, response);\n this.name = 'AuthenticationError';\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\n/**\n * Not found error (404)\n */\nexport class NotFoundError extends AGIError {\n constructor(message: string, response?: unknown) {\n super(message, 404, response);\n this.name = 'NotFoundError';\n Object.setPrototypeOf(this, NotFoundError.prototype);\n }\n}\n\n/**\n * Rate limit error (429)\n */\nexport class RateLimitError extends AGIError {\n constructor(message: string, response?: unknown) {\n super(message, 429, response);\n this.name = 'RateLimitError';\n Object.setPrototypeOf(this, RateLimitError.prototype);\n }\n}\n\n/**\n * Agent execution error (task failed)\n */\nexport class AgentExecutionError extends AGIError {\n constructor(message: string, response?: unknown) {\n super(message, undefined, response);\n this.name = 'AgentExecutionError';\n Object.setPrototypeOf(this, AgentExecutionError.prototype);\n }\n}\n\n/**\n * Validation error (422)\n */\nexport class ValidationError extends AGIError {\n constructor(message: string, response?: unknown) {\n super(message, 422, response);\n this.name = 'ValidationError';\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n\n/**\n * Permission error (403)\n */\nexport class PermissionError extends AGIError {\n constructor(message: string, response?: unknown) {\n super(message, 403, response);\n this.name = 'PermissionError';\n Object.setPrototypeOf(this, PermissionError.prototype);\n }\n}\n\n/**\n * API error (5xx server errors)\n */\nexport class APIError extends AGIError {\n constructor(message: string, statusCode?: number, response?: unknown) {\n super(message, statusCode, response);\n this.name = 'APIError';\n Object.setPrototypeOf(this, APIError.prototype);\n }\n}\n","/**\n * HTTP client for AGI API with fetch and SSE support\n */\n\nimport { createParser, type EventSourceParser } from 'eventsource-parser';\nimport type { AGIClientOptions, EventType, SSEEvent } from './types';\nimport {\n AGIError,\n APIError,\n AuthenticationError,\n NotFoundError,\n PermissionError,\n RateLimitError,\n ValidationError,\n} from './errors';\n\nexport interface RequestOptions {\n json?: unknown;\n query?: Record<string, string>;\n headers?: Record<string, string>;\n}\n\nexport class HTTPClient {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly timeout: number;\n private readonly maxRetries: number;\n\n constructor(options: AGIClientOptions) {\n this.apiKey = options.apiKey;\n this.baseUrl = options.baseUrl ?? 'https://api.agi.tech';\n this.timeout = options.timeout ?? 60000;\n this.maxRetries = options.maxRetries ?? 3;\n }\n\n /**\n * Make an HTTP request with retries and error handling\n */\n async request<T>(method: string, path: string, options?: RequestOptions): Promise<T> {\n const url = this.buildUrl(path, options?.query);\n const headers = this.buildHeaders(options?.headers);\n\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n const response = await fetch(url, {\n method,\n headers,\n body: options?.json ? JSON.stringify(options.json) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n // Handle errors\n if (!response.ok) {\n await this.handleErrorResponse(response);\n }\n\n // Parse JSON response\n const data = await response.json();\n return data as T;\n } catch (error) {\n lastError = error as Error;\n\n // Don't retry on client errors (4xx except 429)\n if (error instanceof AGIError && error.statusCode && error.statusCode < 500) {\n if (error.statusCode !== 429) {\n throw error;\n }\n }\n\n // Don't retry on abort/timeout on last attempt\n if (attempt === this.maxRetries) {\n break;\n }\n\n // Exponential backoff\n await this.sleep(Math.pow(2, attempt) * 1000);\n }\n }\n\n throw lastError || new AGIError('Request failed after retries');\n }\n\n /**\n * Stream Server-Sent Events from an endpoint\n */\n async *streamEvents(path: string, query?: Record<string, string>): AsyncGenerator<SSEEvent> {\n const url = this.buildUrl(path, query);\n const headers = this.buildHeaders();\n\n const controller = new AbortController();\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n ...headers,\n Accept: 'text/event-stream',\n },\n signal: controller.signal,\n });\n\n if (!response.ok) {\n await this.handleErrorResponse(response);\n }\n\n if (!response.body) {\n throw new AGIError('Response body is null');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = '';\n\n const parser: EventSourceParser = createParser((event) => {\n if (event.type === 'event') {\n try {\n const data = JSON.parse(event.data);\n this.pendingEvents.push({\n id: event.id,\n event: event.event as EventType,\n data,\n });\n } catch {\n // Skip unparseable events\n }\n }\n });\n\n const pendingEvents: SSEEvent[] = [];\n this.pendingEvents = pendingEvents;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n parser.feed(buffer);\n buffer = '';\n\n // Yield all pending events\n while (pendingEvents.length > 0) {\n const event = pendingEvents.shift();\n if (event) {\n yield event;\n }\n }\n }\n } finally {\n controller.abort();\n reader.releaseLock();\n }\n }\n\n private pendingEvents: SSEEvent[] = [];\n\n private buildUrl(path: string, query?: Record<string, string>): string {\n const url = new URL(path, this.baseUrl);\n\n if (query) {\n Object.entries(query).forEach(([key, value]) => {\n url.searchParams.append(key, value);\n });\n }\n\n return url.toString();\n }\n\n private buildHeaders(additional?: Record<string, string>): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${this.apiKey}`,\n 'User-Agent': 'agi-sdk-node/1.0.0',\n ...additional,\n };\n }\n\n private async handleErrorResponse(response: Response): Promise<never> {\n let errorData: Record<string, unknown> | string | undefined;\n\n try {\n errorData = (await response.json()) as Record<string, unknown>;\n } catch {\n errorData = await response.text();\n }\n\n const errorMessage =\n typeof errorData === 'object' && errorData.message\n ? errorData.message\n : typeof errorData === 'string'\n ? errorData\n : `HTTP ${response.status}: ${response.statusText}`;\n\n switch (response.status) {\n case 401:\n throw new AuthenticationError(`Authentication failed: ${errorMessage}`, errorData);\n case 403:\n throw new PermissionError(`Permission denied: ${errorMessage}`, errorData);\n case 404:\n throw new NotFoundError(`Resource not found: ${errorMessage}`, errorData);\n case 422:\n throw new ValidationError(`Validation error: ${errorMessage}`, errorData);\n case 429:\n throw new RateLimitError(`Rate limit exceeded: ${errorMessage}`, errorData);\n default:\n if (response.status >= 500) {\n throw new APIError(\n `Server error (${response.status}): ${errorMessage}`,\n response.status,\n errorData\n );\n }\n throw new AGIError(\n `API error (${response.status}): ${errorMessage}`,\n response.status,\n errorData\n );\n }\n }\n\n private sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Screenshot handling with image data and metadata\n */\n\n/**\n * Browser screenshot with decoded image data and metadata\n *\n * @example\n * ```typescript\n * const screenshot = await session.screenshot();\n * await screenshot.save(\"page.png\");\n * console.log(`Size: ${screenshot.width}x${screenshot.height}`);\n * console.log(`URL: ${screenshot.url}`);\n * ```\n */\nexport class Screenshot {\n constructor(\n public readonly data: Buffer,\n public readonly format: 'png' | 'jpg',\n public readonly timestamp: Date,\n public readonly width: number,\n public readonly height: number,\n public readonly url: string,\n public readonly title: string\n ) {}\n\n /**\n * Save screenshot to file\n *\n * @param path - File path to save to (e.g., \"screenshot.png\")\n *\n * @example\n * ```typescript\n * const screenshot = await session.screenshot();\n * await screenshot.save(\"amazon.png\");\n * ```\n */\n async save(path: string): Promise<void> {\n const fs = await import('fs/promises');\n await fs.writeFile(path, this.data);\n }\n\n /**\n * Create Screenshot from base64 data URL\n *\n * @param base64Data - Base64-encoded data URL (e.g., \"data:image/jpeg;base64,...\")\n * @param url - Current page URL\n * @param title - Current page title\n * @param timestamp - Screenshot timestamp (defaults to now)\n * @returns Screenshot instance with decoded image data\n */\n static fromBase64(base64Data: string, url: string, title: string, timestamp?: Date): Screenshot {\n // Parse data URL format: \"data:image/jpeg;base64,...\"\n let header: string;\n let encoded: string;\n\n if (base64Data.includes(',')) {\n [header, encoded] = base64Data.split(',', 2);\n } else {\n // Assume it's just base64 without header\n encoded = base64Data;\n header = 'data:image/png;base64';\n }\n\n // Decode base64 to buffer\n const imageData = Buffer.from(encoded, 'base64');\n\n // Determine format from header\n const format =\n header.toLowerCase().includes('jpeg') || header.toLowerCase().includes('jpg') ? 'jpg' : 'png';\n\n // Extract image dimensions\n const { width, height } = Screenshot.getImageDimensions(imageData, format);\n\n return new Screenshot(imageData, format, timestamp || new Date(), width, height, url, title);\n }\n\n /**\n * Extract width and height from image data\n *\n * @param data - Raw image bytes\n * @param format - Image format (png, jpg)\n * @returns Tuple of (width, height)\n */\n private static getImageDimensions(\n data: Buffer,\n format: 'png' | 'jpg'\n ): { width: number; height: number } {\n try {\n if (format === 'png' && data.length >= 24) {\n // PNG: width/height at bytes 16-24\n const width = data.readUInt32BE(16);\n const height = data.readUInt32BE(20);\n return { width, height };\n } else if (format === 'jpg') {\n // JPEG: scan for SOF0 marker (0xFFC0)\n for (let i = 0; i < data.length - 9; i++) {\n if (data[i] === 0xff && data[i + 1] === 0xc0) {\n const height = data.readUInt16BE(i + 5);\n const width = data.readUInt16BE(i + 7);\n return { width, height };\n }\n }\n }\n } catch (error) {\n // Fallback if parsing fails\n }\n\n return { width: 0, height: 0 };\n }\n}\n","/**\n * Session context manager for high-level API\n */\n\nimport type { AGIClient } from '../client';\nimport type {\n TaskResult,\n TaskMetadata,\n ExecuteStatusResponse,\n MessagesResponse,\n NavigateResponse,\n SSEEvent,\n SuccessResponse,\n} from '../types';\nimport { Screenshot } from '../types/screenshot';\nimport { AgentExecutionError } from '../errors';\n\n/**\n * High-level session context manager with automatic cleanup\n *\n * Use with `await using` for automatic session deletion:\n *\n * @example\n * ```typescript\n * await using session = client.session('agi-0');\n * const result = await session.runTask('Find flights...');\n * // Session automatically deleted\n * ```\n */\nexport class SessionContext {\n public sessionId?: string;\n public vncUrl?: string;\n public agentUrl?: string;\n\n constructor(\n private readonly client: AGIClient,\n private readonly agentName: string = 'agi-0',\n private readonly createOptions?: {\n webhookUrl?: string;\n goal?: string;\n maxSteps?: number;\n restoreFromEnvironmentId?: string;\n }\n ) {}\n\n /**\n * Automatic cleanup via explicit resource management\n */\n async [Symbol.asyncDispose](): Promise<void> {\n if (this.sessionId) {\n try {\n await this.client.sessions.delete(this.sessionId);\n } catch (error) {\n // Ignore cleanup errors\n }\n }\n }\n\n /**\n * Ensure session is created\n */\n private async ensureSession(): Promise<void> {\n if (this.sessionId) return;\n\n const response = await this.client.sessions.create(this.agentName, this.createOptions);\n this.sessionId = response.sessionId;\n this.vncUrl = response.vncUrl;\n this.agentUrl = response.agentUrl;\n }\n\n /**\n * Run a task and wait for completion using HTTP polling\n *\n * This method uses HTTP polling instead of SSE streaming for better reliability\n * with long-running tasks and network instability.\n *\n * @param task - Natural language task description\n * @param options - Task execution options\n * @returns TaskResult with data and execution metadata\n *\n * @example\n * ```typescript\n * const result = await session.runTask(\n * 'Find cheapest iPhone 15 Pro',\n * { timeout: 300000, pollInterval: 2000 } // 5 min timeout, 2s polling\n * );\n * console.log(result.data);\n * console.log(`Took ${result.metadata.duration}s, ${result.metadata.steps} steps`);\n * ```\n */\n async runTask(\n task: string,\n options?: {\n startUrl?: string;\n timeout?: number;\n pollInterval?: number;\n }\n ): Promise<TaskResult> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n\n const timeout = options?.timeout ?? 600000; // 10 minutes\n const pollInterval = options?.pollInterval ?? 3000; // 3 seconds\n\n await this.client.sessions.sendMessage(this.sessionId, task, {\n startUrl: options?.startUrl,\n });\n\n const startTime = Date.now();\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const elapsed = Date.now() - startTime;\n\n if (elapsed > timeout) {\n throw new AgentExecutionError(\n `Task exceeded timeout of ${timeout}ms (elapsed: ${elapsed}ms)`\n );\n }\n\n const statusResponse = await this.client.sessions.getStatus(this.sessionId);\n\n if (statusResponse.status === 'finished' || statusResponse.status === 'waiting_for_input') {\n const messagesResponse = await this.client.sessions.getMessages(this.sessionId);\n const messages = messagesResponse.messages;\n\n const doneMsg = messages.find((msg) => msg.type === 'DONE' || msg.type === 'QUESTION');\n\n if (!doneMsg) {\n throw new AgentExecutionError(\n `Task status '${statusResponse.status}' but no DONE/QUESTION message found`\n );\n }\n\n const content = doneMsg.content;\n const data =\n typeof content === 'object' && content !== null ? content : { content: content ?? {} };\n\n const duration = (Date.now() - startTime) / 1000;\n const steps = messages.filter((msg) =>\n ['THOUGHT', 'QUESTION', 'DONE'].includes(msg.type)\n ).length;\n\n const metadata: TaskMetadata = {\n taskId: doneMsg.id,\n sessionId: this.sessionId,\n duration,\n cost: 0.0,\n timestamp: new Date(),\n steps,\n success: true,\n };\n\n return { data, metadata };\n }\n\n if (statusResponse.status === 'error') {\n const messagesResponse = await this.client.sessions.getMessages(this.sessionId);\n const errorMsg = messagesResponse.messages.find((msg) => msg.type === 'ERROR');\n const errorDetails = errorMsg\n ? typeof errorMsg.content === 'string'\n ? errorMsg.content\n : JSON.stringify(errorMsg.content)\n : 'Unknown error';\n\n throw new AgentExecutionError(`Task failed: ${errorDetails}`);\n }\n\n await new Promise((resolve) => setTimeout(resolve, pollInterval));\n }\n }\n\n /**\n * Send a message to the agent\n *\n * @param message - Message content\n * @param options - Message options\n * @returns SuccessResponse confirming message was sent\n *\n * @example\n * ```typescript\n * await session.sendMessage('Find flights from SFO to JFK under $450');\n * ```\n */\n async sendMessage(\n message: string,\n options?: {\n startUrl?: string;\n configUpdates?: Record<string, unknown>;\n }\n ): Promise<SuccessResponse> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n return this.client.sessions.sendMessage(this.sessionId, message, options);\n }\n\n /**\n * Get current execution status\n *\n * @returns ExecuteStatusResponse with status\n *\n * @example\n * ```typescript\n * const status = await session.getStatus();\n * console.log(status.status);\n * ```\n */\n async getStatus(): Promise<ExecuteStatusResponse> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n return this.client.sessions.getStatus(this.sessionId);\n }\n\n /**\n * Get messages from the session\n *\n * @param afterId - Return messages with ID > afterId (for polling)\n * @param sanitize - Filter out system messages, prompts, and images\n * @returns MessagesResponse with messages list and status\n *\n * @example\n * ```typescript\n * const messages = await session.getMessages(0);\n * for (const msg of messages.messages) {\n * console.log(`[${msg.type}] ${msg.content}`);\n * }\n * ```\n */\n async getMessages(afterId?: number, sanitize: boolean = true): Promise<MessagesResponse> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n return this.client.sessions.getMessages(this.sessionId, afterId, sanitize);\n }\n\n /**\n * Stream real-time events from the session via Server-Sent Events\n *\n * @param options - Stream options\n * @yields SSEEvent objects\n *\n * @example\n * ```typescript\n * for await (const event of session.streamEvents()) {\n * if (event.event === 'thought') {\n * console.log('Agent:', event.data);\n * }\n * if (event.event === 'done') {\n * console.log('Result:', event.data);\n * break;\n * }\n * }\n * ```\n */\n async *streamEvents(options?: {\n eventTypes?: string[];\n sanitize?: boolean;\n includeHistory?: boolean;\n }): AsyncGenerator<SSEEvent> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n yield* this.client.sessions.streamEvents(this.sessionId, options);\n }\n\n /**\n * Pause task execution\n *\n * @returns SuccessResponse confirming pause\n *\n * @example\n * ```typescript\n * await session.pause();\n * ```\n */\n async pause(): Promise<SuccessResponse> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n return this.client.sessions.pause(this.sessionId);\n }\n\n /**\n * Resume paused task\n *\n * @returns SuccessResponse confirming resume\n *\n * @example\n * ```typescript\n * await session.resume();\n * ```\n */\n async resume(): Promise<SuccessResponse> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n return this.client.sessions.resume(this.sessionId);\n }\n\n /**\n * Cancel task execution\n *\n * @returns SuccessResponse confirming cancellation\n *\n * @example\n * ```typescript\n * await session.cancel();\n * ```\n */\n async cancel(): Promise<SuccessResponse> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n return this.client.sessions.cancel(this.sessionId);\n }\n\n /**\n * Navigate browser to URL\n *\n * @param url - URL to navigate to\n * @returns NavigateResponse with current URL\n *\n * @example\n * ```typescript\n * await session.navigate('https://amazon.com');\n * ```\n */\n async navigate(url: string): Promise<NavigateResponse> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n return this.client.sessions.navigate(this.sessionId, url);\n }\n\n /**\n * Get browser screenshot\n *\n * @returns Screenshot with decoded image data and save() method\n *\n * @example\n * ```typescript\n * const screenshot = await session.screenshot();\n * await screenshot.save('page.png');\n * console.log(`Size: ${screenshot.width}x${screenshot.height}`);\n * ```\n */\n async screenshot(): Promise<Screenshot> {\n await this.ensureSession();\n if (!this.sessionId) throw new Error('Session not created');\n const response = await this.client.sessions.screenshot(this.sessionId);\n return Screenshot.fromBase64(response.screenshot, response.url, response.title);\n }\n}\n","/**\n * Utility functions for the AGI SDK\n */\n\nimport type { SessionResponse, SessionStatus } from './types';\n\n/**\n * Get value from object supporting both snake_case and camelCase\n */\nexport function getField<T>(\n obj: Record<string, unknown>,\n camelCase: string,\n snakeCase: string\n): T | undefined {\n return (obj[snakeCase] ?? obj[camelCase]) as T | undefined;\n}\n\n/**\n * Normalize API response from snake_case to camelCase for SessionResponse\n */\nexport function normalizeSessionResponse(data: Record<string, unknown>): SessionResponse {\n return {\n sessionId: (data.session_id ?? data.sessionId) as string,\n vncUrl: (data.vnc_url ?? data.vncUrl) as string,\n agentUrl: (data.agent_url ?? data.agentUrl) as string | undefined,\n agentName: (data.agent_name ?? data.agentName) as string,\n status: data.status as SessionStatus,\n createdAt: (data.created_at ?? data.createdAt) as string,\n environmentId: (data.environment_id ?? data.environmentId) as string | undefined,\n goal: data.goal as string | undefined,\n };\n}\n","/**\n * Sessions API resource\n */\n\nimport type { HTTPClient } from '../http';\nimport type {\n SessionResponse,\n ExecuteStatusResponse,\n MessagesResponse,\n SuccessResponse,\n DeleteResponse,\n NavigateResponse,\n ScreenshotResponse,\n SSEEvent,\n SnapshotMode,\n} from '../types';\nimport { normalizeSessionResponse } from '../utils';\n\n/**\n * Sessions API resource providing all session-related operations\n */\nexport class SessionsResource {\n constructor(private readonly http: HTTPClient) {}\n\n // ===== SESSION MANAGEMENT =====\n\n /**\n * Create a new agent session\n *\n * @param agentName - Agent model to use (e.g., \"agi-0\", \"agi-0-fast\", \"agi-1\")\n * @param options - Session creation options\n * @returns SessionResponse with session_id, vnc_url, status, etc.\n *\n * @example\n * ```typescript\n * const session = await client.sessions.create('agi-0', {\n * webhookUrl: 'https://yourapp.com/webhook',\n * maxSteps: 200\n * });\n * ```\n */\n async create(\n agentName: string = 'agi-0',\n options?: {\n webhookUrl?: string;\n goal?: string;\n maxSteps?: number;\n restoreFromEnvironmentId?: string;\n }\n ): Promise<SessionResponse> {\n const payload: Record<string, unknown> = {\n agent_name: agentName,\n max_steps: options?.maxSteps ?? 100,\n };\n\n if (options?.webhookUrl) payload.webhook_url = options.webhookUrl;\n if (options?.goal) payload.goal = options.goal;\n if (options?.restoreFromEnvironmentId) {\n payload.restore_from_environment_id = options.restoreFromEnvironmentId;\n }\n\n const response = await this.http.request<Record<string, unknown>>('POST', '/v1/sessions', {\n json: payload,\n });\n\n return normalizeSessionResponse(response);\n }\n\n /**\n * List all sessions for the authenticated user\n *\n * @returns Array of SessionResponse objects\n *\n * @example\n * ```typescript\n * const sessions = await client.sessions.list();\n * for (const session of sessions) {\n * console.log(`${session.sessionId}: ${session.status}`);\n * }\n * ```\n */\n async list(): Promise<SessionResponse[]> {\n const responses = await this.http.request<Array<Record<string, unknown>>>(\n 'GET',\n '/v1/sessions'\n );\n return responses.map(normalizeSessionResponse);\n }\n\n /**\n * Get details for a specific session\n *\n * @param sessionId - Session UUID\n * @returns SessionResponse with session details\n *\n * @example\n * ```typescript\n * const session = await client.sessions.get('session-uuid');\n * console.log(session.status);\n * ```\n */\n async get(sessionId: string): Promise<SessionResponse> {\n const response = await this.http.request<Record<string, unknown>>(\n 'GET',\n `/v1/sessions/${sessionId}`\n );\n return normalizeSessionResponse(response);\n }\n\n /**\n * Delete a session and cleanup its resources\n *\n * @param sessionId - Session UUID\n * @param saveSnapshotMode - Snapshot mode: \"none\", \"memory\", or \"filesystem\"\n * @returns DeleteResponse confirming deletion\n *\n * @example\n * ```typescript\n * await client.sessions.delete('session-uuid', 'filesystem');\n * ```\n */\n async delete(\n sessionId: string,\n saveSnapshotMode: SnapshotMode = 'none'\n ): Promise<DeleteResponse> {\n return this.http.request<DeleteResponse>('DELETE', `/v1/sessions/${sessionId}`, {\n query: { save_snapshot_mode: saveSnapshotMode },\n });\n }\n\n /**\n * Delete all sessions for the authenticated user\n *\n * @returns DeleteResponse with count of deleted sessions\n *\n * @example\n * ```typescript\n * const result = await client.sessions.deleteAll();\n * console.log(result.message);\n * ```\n */\n async deleteAll(): Promise<DeleteResponse> {\n return this.http.request<DeleteResponse>('DELETE', '/v1/sessions');\n }\n\n // ===== AGENT INTERACTION =====\n\n /**\n * Send a message to the agent to start a task or respond to questions\n *\n * @param sessionId - Session UUID\n * @param message - Message content (task instruction or response)\n * @param options - Message options\n * @returns SuccessResponse confirming message was sent\n *\n * @example\n * ```typescript\n * await client.sessions.sendMessage(\n * 'session-uuid',\n * 'Find flights from SFO to JFK under $450'\n * );\n * ```\n */\n async sendMessage(\n sessionId: string,\n message: string,\n options?: {\n startUrl?: string;\n configUpdates?: Record<string, unknown>;\n }\n ): Promise<SuccessResponse> {\n return this.http.request<SuccessResponse>('POST', `/v1/sessions/${sessionId}/message`, {\n json: {\n message,\n start_url: options?.startUrl,\n config_updates: options?.configUpdates,\n },\n });\n }\n\n /**\n * Get the current execution status of a session\n *\n * @param sessionId - Session UUID\n * @returns ExecuteStatusResponse with status\n *\n * @example\n * ```typescript\n * const status = await client.sessions.getStatus('session-uuid');\n * if (status.status === 'finished') {\n * console.log('Task completed!');\n * }\n * ```\n */\n async getStatus(sessionId: string): Promise<ExecuteStatusResponse> {\n return this.http.request<ExecuteStatusResponse>('GET', `/v1/sessions/${sessionId}/status`);\n }\n\n /**\n * Poll for messages and updates from the agent\n *\n * @param sessionId - Session UUID\n * @param afterId - Return messages with ID > afterId (for polling)\n * @param sanitize - Filter out system messages, prompts, and images\n * @returns MessagesResponse with messages list and status\n *\n * @example\n * ```typescript\n * const messages = await client.sessions.getMessages('session-uuid', 0);\n * for (const msg of messages.messages) {\n * console.log(`[${msg.type}] ${msg.content}`);\n * }\n * ```\n */\n async getMessages(\n sessionId: string,\n afterId: number = 0,\n sanitize: boolean = true\n ): Promise<MessagesResponse> {\n const response = await this.http.request<Record<string, unknown>>(\n 'GET',\n `/v1/sessions/${sessionId}/messages`,\n {\n query: {\n after_id: String(afterId),\n sanitize: String(sanitize),\n },\n }\n );\n\n return {\n messages: (response.messages || []) as MessagesResponse['messages'],\n status: response.status as string,\n hasAgent: (response.has_agent ?? response.hasAgent ?? false) as boolean,\n };\n }\n\n /**\n * Stream real-time events from the session via Server-Sent Events\n *\n * @param sessionId - Session UUID\n * @param options - Stream options\n * @yields SSEEvent objects\n *\n * @example\n * ```typescript\n * for await (const event of client.sessions.streamEvents('session-uuid')) {\n * if (event.event === 'thought') {\n * console.log('Agent:', event.data);\n * }\n * if (event.event === 'done') {\n * console.log('Result:', event.data);\n * break;\n * }\n * }\n * ```\n */\n async *streamEvents(\n sessionId: string,\n options?: {\n eventTypes?: string[];\n sanitize?: boolean;\n includeHistory?: boolean;\n }\n ): AsyncGenerator<SSEEvent> {\n const query: Record<string, string> = {\n sanitize: String(options?.sanitize ?? true),\n include_history: String(options?.includeHistory ?? true),\n };\n\n if (options?.eventTypes) {\n query.event_types = options.eventTypes.join(',');\n }\n\n yield* this.http.streamEvents(`/v1/sessions/${sessionId}/events`, query);\n }\n\n // ===== SESSION CONTROL =====\n\n /**\n * Temporarily pause task execution\n *\n * @param sessionId - Session UUID\n * @returns SuccessResponse confirming pause\n *\n * @example\n * ```typescript\n * await client.sessions.pause('session-uuid');\n * ```\n */\n async pause(sessionId: string): Promise<SuccessResponse> {\n return this.http.request<SuccessResponse>('POST', `/v1/sessions/${sessionId}/pause`);\n }\n\n /**\n * Resume a paused task\n *\n * @param sessionId - Session UUID\n * @returns SuccessResponse confirming resume\n *\n * @example\n * ```typescript\n * await client.sessions.resume('session-uuid');\n * ```\n */\n async resume(sessionId: string): Promise<SuccessResponse> {\n return this.http.request<SuccessResponse>('POST', `/v1/sessions/${sessionId}/resume`);\n }\n\n /**\n * Cancel task execution\n *\n * @param sessionId - Session UUID\n * @returns SuccessResponse confirming cancellation\n *\n * @example\n * ```typescript\n * await client.sessions.cancel('session-uuid');\n * ```\n */\n async cancel(sessionId: string): Promise<SuccessResponse> {\n return this.http.request<SuccessResponse>('POST', `/v1/sessions/${sessionId}/cancel`);\n }\n\n // ===== BROWSER CONTROL =====\n\n /**\n * Navigate the browser to a specific URL\n *\n * @param sessionId - Session UUID\n * @param url - URL to navigate to\n * @returns NavigateResponse with current URL\n *\n * @example\n * ```typescript\n * await client.sessions.navigate('session-uuid', 'https://amazon.com');\n * ```\n */\n async navigate(sessionId: string, url: string): Promise<NavigateResponse> {\n const response = await this.http.request<Record<string, unknown>>(\n 'POST',\n `/v1/sessions/${sessionId}/navigate`,\n {\n json: { url },\n }\n );\n\n return {\n currentUrl: (response.current_url ?? response.currentUrl) as string,\n };\n }\n\n /**\n * Get a screenshot of the browser\n *\n * @param sessionId - Session UUID\n * @returns ScreenshotResponse with base64-encoded image, URL, and title\n *\n * @example\n * ```typescript\n * const screenshot = await client.sessions.screenshot('session-uuid');\n * console.log(screenshot.url);\n * ```\n */\n async screenshot(sessionId: string): Promise<ScreenshotResponse> {\n return this.http.request<ScreenshotResponse>('GET', `/v1/sessions/${sessionId}/screenshot`);\n }\n}\n","/**\n * Main AGI API client\n */\n\nimport { HTTPClient } from './http';\nimport { SessionContext } from './context/session-context';\nimport { SessionsResource } from './resources/sessions';\nimport type { AGIClientOptions } from './types';\n\n/**\n * Official TypeScript/JavaScript client for the AGI.tech API\n *\n * The AGIClient provides access to the AGI API for creating and managing\n * AI agent sessions that can perform complex web tasks.\n *\n * @example\n * Simple usage with context manager (recommended):\n * ```typescript\n * import { AGIClient } from 'agi-sdk';\n *\n * const client = new AGIClient({ apiKey: 'your_api_key' });\n *\n * await using session = client.session('agi-0');\n * const result = await session.runTask('Find cheapest iPhone 15 on Amazon');\n * console.log(result.data);\n * console.log(`Duration: ${result.metadata.duration}s`);\n * ```\n *\n * @example\n * Advanced usage with low-level API:\n * ```typescript\n * const session = await client.sessions.create('agi-0', {\n * webhookUrl: 'https://yourapp.com/webhook'\n * });\n *\n * await client.sessions.sendMessage(session.sessionId, 'Find flights...');\n *\n * for await (const event of client.sessions.streamEvents(session.sessionId)) {\n * if (event.event === 'thought') {\n * console.log('Agent:', event.data);\n * }\n * if (event.event === 'done') {\n * break;\n * }\n * }\n *\n * await client.sessions.delete(session.sessionId);\n * ```\n */\nexport class AGIClient {\n private readonly http: HTTPClient;\n\n /** Sessions resource for low-level API access */\n public readonly sessions: SessionsResource;\n\n /**\n * Create a new AGI client\n *\n * @param options - Client configuration options\n *\n * @example\n * ```typescript\n * // With explicit API key\n * const client = new AGIClient({ apiKey: 'your_api_key' });\n *\n * // With custom base URL\n * const client = new AGIClient({\n * apiKey: 'your_api_key',\n * baseUrl: 'https://custom-api.example.com',\n * timeout: 120000,\n * });\n * ```\n */\n constructor(options: AGIClientOptions) {\n if (!options.apiKey) {\n throw new Error(\n 'api_key is required. Either pass it as a parameter or set the AGI_API_KEY environment variable.'\n );\n }\n\n this.http = new HTTPClient(options);\n this.sessions = new SessionsResource(this.http);\n }\n\n /**\n * Create a session context manager for easy session lifecycle management (recommended)\n *\n * This is the recommended way to use the SDK. The context manager automatically\n * creates and deletes the session using `await using` syntax.\n *\n * @param agentName - Agent model to use (e.g., \"agi-0\", \"agi-0-fast\", \"agi-1\")\n * @param options - Session creation options\n * @returns SessionContext manager\n *\n * @example\n * ```typescript\n * // Simple usage\n * await using session = client.session('agi-0');\n * const result = await session.runTask('Find flights SFO→JFK under $450');\n * console.log(result.data);\n * // Session automatically deleted\n *\n * // With options\n * await using session = client.session('agi-0', {\n * webhookUrl: 'https://yourapp.com/webhook',\n * maxSteps: 200\n * });\n * const result = await session.runTask('Research company XYZ');\n * ```\n */\n session(\n agentName: string = 'agi-0',\n options?: {\n webhookUrl?: string;\n goal?: string;\n maxSteps?: number;\n restoreFromEnvironmentId?: string;\n }\n ): SessionContext {\n return new SessionContext(this, agentName, options);\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,35 +1,71 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
"homepage": "https://agi.app",
|
|
14
|
-
"license": "MIT",
|
|
15
|
-
"author": "AGI, Inc.",
|
|
16
|
-
"type": "commonjs",
|
|
17
|
-
"main": "index.js",
|
|
18
|
-
"files": [
|
|
19
|
-
"scripts/",
|
|
20
|
-
"README.md",
|
|
21
|
-
"LICENSE"
|
|
22
|
-
],
|
|
23
|
-
"scripts": {
|
|
24
|
-
"postinstall": "node scripts/install-dmg.js"
|
|
25
|
-
},
|
|
26
|
-
"engines": {
|
|
27
|
-
"node": ">=18.0.0"
|
|
28
|
-
},
|
|
29
|
-
"os": [
|
|
30
|
-
"darwin"
|
|
31
|
-
],
|
|
32
|
-
"dependencies": {
|
|
33
|
-
"path": "^0.12.7"
|
|
2
|
+
"name": "agi",
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"description": "Official TypeScript/JavaScript SDK for AGI.tech API",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.mjs",
|
|
12
|
+
"require": "./dist/index.js"
|
|
34
13
|
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md",
|
|
18
|
+
"LICENSE"
|
|
19
|
+
],
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "tsup",
|
|
22
|
+
"dev": "tsup --watch",
|
|
23
|
+
"test": "vitest run tests/unit",
|
|
24
|
+
"test:watch": "vitest",
|
|
25
|
+
"test:smoke": "AGI_API_KEY=f94a74fa-bcdf-429f-97b0-37b7a1df6ab2 vitest run tests/smoke-simple.test.ts --reporter=verbose",
|
|
26
|
+
"test:coverage": "vitest run --coverage",
|
|
27
|
+
"lint": "eslint src --ext .ts",
|
|
28
|
+
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" \"examples/**/*.ts\"",
|
|
29
|
+
"typecheck": "tsc --noEmit",
|
|
30
|
+
"prepublishOnly": "npm run build"
|
|
31
|
+
},
|
|
32
|
+
"keywords": [
|
|
33
|
+
"agi",
|
|
34
|
+
"automation",
|
|
35
|
+
"browser",
|
|
36
|
+
"ai",
|
|
37
|
+
"agent",
|
|
38
|
+
"api",
|
|
39
|
+
"sdk",
|
|
40
|
+
"typescript",
|
|
41
|
+
"web-automation"
|
|
42
|
+
],
|
|
43
|
+
"author": "AGI Inc <sdk@agi.tech>",
|
|
44
|
+
"license": "MIT",
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "git+https://github.com/agi-inc/agi-node.git"
|
|
48
|
+
},
|
|
49
|
+
"bugs": {
|
|
50
|
+
"url": "https://github.com/agi-inc/agi-node/issues"
|
|
51
|
+
},
|
|
52
|
+
"homepage": "https://docs.agi.tech",
|
|
53
|
+
"engines": {
|
|
54
|
+
"node": ">=20.4.0"
|
|
55
|
+
},
|
|
56
|
+
"dependencies": {
|
|
57
|
+
"eventsource-parser": "^1.1.2"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/node": "^20.10.0",
|
|
61
|
+
"@typescript-eslint/eslint-plugin": "^6.13.0",
|
|
62
|
+
"@typescript-eslint/parser": "^6.13.0",
|
|
63
|
+
"@vitest/coverage-v8": "^1.6.1",
|
|
64
|
+
"eslint": "^8.55.0",
|
|
65
|
+
"eslint-config-prettier": "^9.1.0",
|
|
66
|
+
"prettier": "^3.1.0",
|
|
67
|
+
"tsup": "^8.0.1",
|
|
68
|
+
"typescript": "^5.3.3",
|
|
69
|
+
"vitest": "^1.0.4"
|
|
70
|
+
}
|
|
35
71
|
}
|
package/LICENSE.pdf
DELETED
|
Binary file
|
package/scripts/install-dmg.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
const fs = require("fs");
|
|
3
|
-
const { pipeline } = require("stream");
|
|
4
|
-
const { promisify } = require("util");
|
|
5
|
-
const { execSync } = require("child_process");
|
|
6
|
-
const path = require("path");
|
|
7
|
-
const os = require("os");
|
|
8
|
-
|
|
9
|
-
const DMG_URL = "https://agi-app.s3.us-east-1.amazonaws.com/agi-app/AGI-latest-mac.dmg";
|
|
10
|
-
const dmgPath = path.join(os.tmpdir(), "AGI.dmg");
|
|
11
|
-
|
|
12
|
-
(async () => {
|
|
13
|
-
try {
|
|
14
|
-
console.log(`• Downloading ${DMG_URL}`);
|
|
15
|
-
const res = await fetch(DMG_URL);
|
|
16
|
-
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
|
|
17
|
-
await promisify(pipeline)(res.body, fs.createWriteStream(dmgPath));
|
|
18
|
-
|
|
19
|
-
console.log("• Mounting DMG …");
|
|
20
|
-
const attachOut = execSync(`hdiutil attach "${dmgPath}" -nobrowse`).toString();
|
|
21
|
-
|
|
22
|
-
// Look for /Volumes path in the output - it's usually on the last line
|
|
23
|
-
const lines = attachOut.split('\n').filter(line => line.trim());
|
|
24
|
-
const mountLine = lines.find(line => line.includes('/Volumes/'));
|
|
25
|
-
const mount = mountLine ? mountLine.split('\t').pop().trim() : null;
|
|
26
|
-
|
|
27
|
-
if (!mount) {
|
|
28
|
-
console.error("Full hdiutil output:", attachOut);
|
|
29
|
-
throw new Error("Failed to find mount point");
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
console.log("• Copying to /Applications …");
|
|
33
|
-
const systemAppsDir = "/Applications";
|
|
34
|
-
const appSrc = path.join(mount, "AGI.app");
|
|
35
|
-
const appDest = path.join(systemAppsDir, "AGI.app");
|
|
36
|
-
|
|
37
|
-
// Use ditto for robust app bundle copy. Try without admin first, then prompt via AppleScript.
|
|
38
|
-
const dittoCmd = `ditto "${appSrc}" "${appDest}"`;
|
|
39
|
-
try {
|
|
40
|
-
execSync(dittoCmd, { stdio: "inherit" });
|
|
41
|
-
} catch (err) {
|
|
42
|
-
console.log("• Admin permission required. Prompting…");
|
|
43
|
-
const escapedCmd = dittoCmd.replace(/"/g, '\\"');
|
|
44
|
-
execSync(`osascript -e 'do shell script "${escapedCmd}" with administrator privileges'`, { stdio: "inherit" });
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
// Best-effort: remove quarantine to avoid gatekeeper warnings on first launch
|
|
48
|
-
try {
|
|
49
|
-
execSync(`xattr -dr com.apple.quarantine "${appDest}"`, { stdio: "ignore" });
|
|
50
|
-
} catch {}
|
|
51
|
-
|
|
52
|
-
// Remove any duplicate in the user's Applications folder to avoid confusion
|
|
53
|
-
try {
|
|
54
|
-
const userAppsDir = path.join(os.homedir(), 'Applications');
|
|
55
|
-
const userApp = path.join(userAppsDir, 'AGI.app');
|
|
56
|
-
if (fs.existsSync(userApp)) {
|
|
57
|
-
console.log("• Removing duplicate from ~/Applications …");
|
|
58
|
-
fs.rmSync(userApp, { recursive: true, force: true });
|
|
59
|
-
}
|
|
60
|
-
} catch {}
|
|
61
|
-
|
|
62
|
-
console.log("• Detaching …");
|
|
63
|
-
execSync(`hdiutil detach "${mount}"`);
|
|
64
|
-
fs.unlinkSync(dmgPath);
|
|
65
|
-
|
|
66
|
-
console.log("✅ AGI installed!");
|
|
67
|
-
|
|
68
|
-
console.log("• Opening AGI …");
|
|
69
|
-
execSync(`open "${appDest}"`);
|
|
70
|
-
} catch (e) {
|
|
71
|
-
console.error("⚠️ DMG install failed:", e.message);
|
|
72
|
-
process.exit(1);
|
|
73
|
-
}
|
|
74
|
-
})();
|