@nimblebrain/sdk
Advanced tools
| /** | ||
| * NimbleBrain SDK - High-level wrapper for the NimbleBrain Studio API | ||
| * | ||
| * This file provides a clean, intuitive interface on top of the auto-generated | ||
| * OpenAPI client functions. | ||
| */ | ||
| import { type Client } from './client'; | ||
| export interface NimbleBrainConfig { | ||
| /** Your NimbleBrain API key (e.g., 'nb_live_...') */ | ||
| apiKey: string; | ||
| /** Base URL for the API. Defaults to 'https://api.nimblebrain.ai' */ | ||
| baseUrl?: string; | ||
| } | ||
| export interface Agent { | ||
| id: string; | ||
| name: string; | ||
| type?: 'custom' | 'nira' | 'system'; | ||
| description?: string; | ||
| createdAt?: string; | ||
| updatedAt?: string; | ||
| } | ||
| export interface Playbook { | ||
| id: string; | ||
| name: string; | ||
| description?: string; | ||
| createdAt?: string; | ||
| updatedAt?: string; | ||
| } | ||
| export interface Conversation { | ||
| id: string; | ||
| title?: string; | ||
| context?: string; | ||
| status?: string; | ||
| messageCount?: number; | ||
| lastMessageAt?: string; | ||
| createdAt?: string; | ||
| } | ||
| export interface Message { | ||
| id: string; | ||
| role: 'user' | 'assistant' | 'system'; | ||
| content: string; | ||
| createdAt?: string; | ||
| } | ||
| export interface SendMessageResponse { | ||
| messageId?: string; | ||
| content?: string; | ||
| role?: string; | ||
| executionId?: string; | ||
| tokensUsed?: number; | ||
| } | ||
| export interface ExecutePlaybookResponse { | ||
| id: string; | ||
| status: 'queued'; | ||
| message?: string; | ||
| } | ||
| export interface Execution { | ||
| id: string; | ||
| status: 'queued' | 'pending' | 'running' | 'completed' | 'completed_with_errors' | 'failed' | 'cancelled'; | ||
| targetType?: 'playbook' | 'agent'; | ||
| targetId?: string; | ||
| targetName?: string; | ||
| result?: string | Record<string, unknown> | null; | ||
| startedAt?: string; | ||
| completedAt?: string; | ||
| durationMs?: number; | ||
| } | ||
| export interface StreamEvent { | ||
| type: 'message.start' | 'content' | 'tool.start' | 'tool.complete' | 'message.complete' | 'error' | 'done'; | ||
| data: Record<string, unknown>; | ||
| } | ||
| export interface WaitForCompletionOptions { | ||
| /** Maximum time to wait in milliseconds. Defaults to 60000 (1 minute) */ | ||
| timeoutMs?: number; | ||
| /** Interval between polling requests in milliseconds. Defaults to 1000 */ | ||
| pollIntervalMs?: number; | ||
| } | ||
| export declare class NimbleBrain { | ||
| private client; | ||
| private baseUrl; | ||
| private apiKey; | ||
| readonly agents: AgentsAPI; | ||
| readonly conversations: ConversationsAPI; | ||
| readonly messages: MessagesAPI; | ||
| readonly playbooks: PlaybooksAPI; | ||
| readonly executions: ExecutionsAPI; | ||
| constructor(config: NimbleBrainConfig); | ||
| } | ||
| declare class AgentsAPI { | ||
| private client; | ||
| constructor(client: Client); | ||
| /** | ||
| * List all agents in your workspace | ||
| */ | ||
| list(): Promise<Agent[]>; | ||
| } | ||
| declare class ConversationsAPI { | ||
| private client; | ||
| constructor(client: Client); | ||
| /** | ||
| * Create a new conversation with an agent | ||
| */ | ||
| create(agentId: string, title?: string): Promise<Conversation>; | ||
| /** | ||
| * Get details of a conversation | ||
| */ | ||
| get(agentId: string, conversationId: string): Promise<Conversation>; | ||
| } | ||
| declare class MessagesAPI { | ||
| private client; | ||
| private baseUrl; | ||
| private apiKey; | ||
| constructor(client: Client, baseUrl: string, apiKey: string); | ||
| /** | ||
| * List messages in a conversation | ||
| */ | ||
| list(agentId: string, conversationId: string): Promise<Message[]>; | ||
| /** | ||
| * Send a message and wait for the complete response (non-streaming) | ||
| */ | ||
| send(agentId: string, conversationId: string, content: string): Promise<SendMessageResponse>; | ||
| /** | ||
| * Send a message with streaming response (SSE) | ||
| * Returns an async generator that yields streaming events | ||
| */ | ||
| stream(agentId: string, conversationId: string, content: string): AsyncGenerator<StreamEvent>; | ||
| } | ||
| declare class PlaybooksAPI { | ||
| private client; | ||
| constructor(client: Client); | ||
| /** | ||
| * List all playbooks in your workspace | ||
| */ | ||
| list(): Promise<Playbook[]>; | ||
| /** | ||
| * Execute a playbook with optional parameters | ||
| */ | ||
| execute(playbookId: string, parameters?: Record<string, unknown>): Promise<ExecutePlaybookResponse>; | ||
| } | ||
| declare class ExecutionsAPI { | ||
| private client; | ||
| constructor(client: Client); | ||
| /** | ||
| * Get the status of an execution | ||
| */ | ||
| get(id: string): Promise<Execution>; | ||
| /** | ||
| * Wait for an execution to complete, polling at regular intervals | ||
| */ | ||
| waitForCompletion(id: string, options?: WaitForCompletionOptions): Promise<Execution>; | ||
| } | ||
| export {}; | ||
| //# sourceMappingURL=nimblebrain.d.ts.map |
| {"version":3,"file":"nimblebrain.d.ts","sourceRoot":"","sources":["../src/nimblebrain.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * NimbleBrain SDK - High-level wrapper for the NimbleBrain Studio API | ||
| * | ||
| * This file provides a clean, intuitive interface on top of the auto-generated | ||
| * OpenAPI client functions. | ||
| */ | ||
| import { createClient, createConfig } from './client'; | ||
| import { getV1Agents, getV1Playbooks, postV1AgentsByAgentIdConversations, getV1AgentsByAgentIdConversationsByConversationId, getV1AgentsByAgentIdConversationsByConversationIdMessages, postV1AgentsByAgentIdConversationsByConversationIdMessages, postV1PlaybooksByPlaybookIdExecute, getV1ExecutionsById, } from './sdk.gen'; | ||
| // ============================================================================ | ||
| // NimbleBrain SDK Class | ||
| // ============================================================================ | ||
| export class NimbleBrain { | ||
| client; | ||
| baseUrl; | ||
| apiKey; | ||
| agents; | ||
| conversations; | ||
| messages; | ||
| playbooks; | ||
| executions; | ||
| constructor(config) { | ||
| this.apiKey = config.apiKey; | ||
| this.baseUrl = config.baseUrl || 'https://api.nimblebrain.ai'; | ||
| this.client = createClient(createConfig({ | ||
| baseUrl: this.baseUrl, | ||
| headers: { | ||
| Authorization: `Bearer ${this.apiKey}`, | ||
| }, | ||
| })); | ||
| // Initialize API namespaces | ||
| this.agents = new AgentsAPI(this.client); | ||
| this.conversations = new ConversationsAPI(this.client); | ||
| this.messages = new MessagesAPI(this.client, this.baseUrl, this.apiKey); | ||
| this.playbooks = new PlaybooksAPI(this.client); | ||
| this.executions = new ExecutionsAPI(this.client); | ||
| } | ||
| } | ||
| // ============================================================================ | ||
| // API Namespace Classes | ||
| // ============================================================================ | ||
| class AgentsAPI { | ||
| client; | ||
| constructor(client) { | ||
| this.client = client; | ||
| } | ||
| /** | ||
| * List all agents in your workspace | ||
| */ | ||
| async list() { | ||
| const response = await getV1Agents({ client: this.client, throwOnError: true }); | ||
| return (response.data?.agents || []); | ||
| } | ||
| } | ||
| class ConversationsAPI { | ||
| client; | ||
| constructor(client) { | ||
| this.client = client; | ||
| } | ||
| /** | ||
| * Create a new conversation with an agent | ||
| */ | ||
| async create(agentId, title) { | ||
| const response = await postV1AgentsByAgentIdConversations({ | ||
| client: this.client, | ||
| path: { agentId }, | ||
| body: { title }, | ||
| throwOnError: true, | ||
| }); | ||
| return response.data; | ||
| } | ||
| /** | ||
| * Get details of a conversation | ||
| */ | ||
| async get(agentId, conversationId) { | ||
| const response = await getV1AgentsByAgentIdConversationsByConversationId({ | ||
| client: this.client, | ||
| path: { agentId, conversationId }, | ||
| throwOnError: true, | ||
| }); | ||
| return response.data; | ||
| } | ||
| } | ||
| class MessagesAPI { | ||
| client; | ||
| baseUrl; | ||
| apiKey; | ||
| constructor(client, baseUrl, apiKey) { | ||
| this.client = client; | ||
| this.baseUrl = baseUrl; | ||
| this.apiKey = apiKey; | ||
| } | ||
| /** | ||
| * List messages in a conversation | ||
| */ | ||
| async list(agentId, conversationId) { | ||
| const response = await getV1AgentsByAgentIdConversationsByConversationIdMessages({ | ||
| client: this.client, | ||
| path: { agentId, conversationId }, | ||
| throwOnError: true, | ||
| }); | ||
| return (response.data?.messages || []); | ||
| } | ||
| /** | ||
| * Send a message and wait for the complete response (non-streaming) | ||
| */ | ||
| async send(agentId, conversationId, content) { | ||
| const response = await postV1AgentsByAgentIdConversationsByConversationIdMessages({ | ||
| client: this.client, | ||
| path: { agentId, conversationId }, | ||
| body: { content }, | ||
| throwOnError: true, | ||
| }); | ||
| return response.data; | ||
| } | ||
| /** | ||
| * Send a message with streaming response (SSE) | ||
| * Returns an async generator that yields streaming events | ||
| */ | ||
| async *stream(agentId, conversationId, content) { | ||
| const url = `${this.baseUrl}/v1/agents/${agentId}/conversations/${conversationId}/messages`; | ||
| const response = await fetch(url, { | ||
| method: 'POST', | ||
| headers: { | ||
| 'Content-Type': 'application/json', | ||
| 'Accept': 'text/event-stream', | ||
| 'Authorization': `Bearer ${this.apiKey}`, | ||
| }, | ||
| body: JSON.stringify({ content, stream: true }), | ||
| }); | ||
| if (!response.ok) { | ||
| const errorText = await response.text(); | ||
| throw new Error(`Stream request failed: ${response.status} ${errorText}`); | ||
| } | ||
| if (!response.body) { | ||
| throw new Error('No response body for streaming'); | ||
| } | ||
| const reader = response.body.pipeThrough(new TextDecoderStream()).getReader(); | ||
| let buffer = ''; | ||
| try { | ||
| while (true) { | ||
| const { done, value } = await reader.read(); | ||
| if (done) | ||
| break; | ||
| buffer += value; | ||
| const chunks = buffer.split('\n\n'); | ||
| buffer = chunks.pop() ?? ''; | ||
| for (const chunk of chunks) { | ||
| const lines = chunk.split('\n'); | ||
| let eventType; | ||
| const dataLines = []; | ||
| for (const line of lines) { | ||
| if (line.startsWith('event:')) { | ||
| eventType = line.replace(/^event:\s*/, ''); | ||
| } | ||
| else if (line.startsWith('data:')) { | ||
| dataLines.push(line.replace(/^data:\s*/, '')); | ||
| } | ||
| } | ||
| if (dataLines.length > 0) { | ||
| const rawData = dataLines.join('\n'); | ||
| let data = {}; | ||
| try { | ||
| data = JSON.parse(rawData); | ||
| } | ||
| catch { | ||
| data = { raw: rawData }; | ||
| } | ||
| yield { | ||
| type: (eventType || 'content'), | ||
| data, | ||
| }; | ||
| // Stop on done event | ||
| if (eventType === 'done') { | ||
| return; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| finally { | ||
| reader.releaseLock(); | ||
| } | ||
| } | ||
| } | ||
| class PlaybooksAPI { | ||
| client; | ||
| constructor(client) { | ||
| this.client = client; | ||
| } | ||
| /** | ||
| * List all playbooks in your workspace | ||
| */ | ||
| async list() { | ||
| const response = await getV1Playbooks({ client: this.client, throwOnError: true }); | ||
| return (response.data?.playbooks || []); | ||
| } | ||
| /** | ||
| * Execute a playbook with optional parameters | ||
| */ | ||
| async execute(playbookId, parameters) { | ||
| const response = await postV1PlaybooksByPlaybookIdExecute({ | ||
| client: this.client, | ||
| path: { playbookId }, | ||
| body: parameters ? { parameters } : {}, | ||
| throwOnError: true, | ||
| }); | ||
| return response.data; | ||
| } | ||
| } | ||
| class ExecutionsAPI { | ||
| client; | ||
| constructor(client) { | ||
| this.client = client; | ||
| } | ||
| /** | ||
| * Get the status of an execution | ||
| */ | ||
| async get(id) { | ||
| const response = await getV1ExecutionsById({ | ||
| client: this.client, | ||
| path: { id }, | ||
| throwOnError: true, | ||
| }); | ||
| return response.data; | ||
| } | ||
| /** | ||
| * Wait for an execution to complete, polling at regular intervals | ||
| */ | ||
| async waitForCompletion(id, options) { | ||
| const timeoutMs = options?.timeoutMs ?? 60000; | ||
| const pollIntervalMs = options?.pollIntervalMs ?? 1000; | ||
| const startTime = Date.now(); | ||
| while (true) { | ||
| const execution = await this.get(id); | ||
| // Check if execution is complete (success or failure) | ||
| if (['completed', 'completed_with_errors', 'failed', 'cancelled'].includes(execution.status)) { | ||
| return execution; | ||
| } | ||
| // Check for timeout | ||
| if (Date.now() - startTime > timeoutMs) { | ||
| throw new Error(`Execution ${id} timed out after ${timeoutMs}ms (status: ${execution.status})`); | ||
| } | ||
| // Wait before next poll | ||
| await new Promise((resolve) => setTimeout(resolve, pollIntervalMs)); | ||
| } | ||
| } | ||
| } | ||
| //# sourceMappingURL=nimblebrain.js.map |
| {"version":3,"file":"nimblebrain.js","sourceRoot":"","sources":["../src/nimblebrain.ts"],"names":[],"mappings":"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"} |
| export {}; | ||
| //# sourceMappingURL=nimblebrain.test.d.ts.map |
| {"version":3,"file":"nimblebrain.test.d.ts","sourceRoot":"","sources":["../src/nimblebrain.test.ts"],"names":[],"mappings":""} |
| import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; | ||
| import { NimbleBrain } from './nimblebrain'; | ||
| // Mock the auto-generated SDK functions | ||
| vi.mock('./sdk.gen', () => ({ | ||
| getV1Agents: vi.fn(), | ||
| getV1Playbooks: vi.fn(), | ||
| postV1AgentsByAgentIdConversations: vi.fn(), | ||
| getV1AgentsByAgentIdConversationsByConversationId: vi.fn(), | ||
| getV1AgentsByAgentIdConversationsByConversationIdMessages: vi.fn(), | ||
| postV1AgentsByAgentIdConversationsByConversationIdMessages: vi.fn(), | ||
| postV1PlaybooksByPlaybookIdExecute: vi.fn(), | ||
| getV1ExecutionsById: vi.fn(), | ||
| })); | ||
| // Import mocked functions | ||
| import { getV1Agents, getV1Playbooks, postV1AgentsByAgentIdConversations, getV1AgentsByAgentIdConversationsByConversationId, getV1AgentsByAgentIdConversationsByConversationIdMessages, postV1AgentsByAgentIdConversationsByConversationIdMessages, postV1PlaybooksByPlaybookIdExecute, getV1ExecutionsById, } from './sdk.gen'; | ||
| describe('NimbleBrain', () => { | ||
| let sdk; | ||
| beforeEach(() => { | ||
| vi.clearAllMocks(); | ||
| sdk = new NimbleBrain({ apiKey: 'test-api-key' }); | ||
| }); | ||
| describe('constructor', () => { | ||
| it('should use default baseUrl when not provided', () => { | ||
| const client = new NimbleBrain({ apiKey: 'test-key' }); | ||
| expect(client).toBeDefined(); | ||
| }); | ||
| it('should use custom baseUrl when provided', () => { | ||
| const client = new NimbleBrain({ | ||
| apiKey: 'test-key', | ||
| baseUrl: 'https://custom.api.com', | ||
| }); | ||
| expect(client).toBeDefined(); | ||
| }); | ||
| }); | ||
| describe('agents', () => { | ||
| it('should list agents', async () => { | ||
| const mockAgents = [ | ||
| { id: 'agent-1', name: 'Agent 1', type: 'custom' }, | ||
| { id: 'agent-2', name: 'Agent 2', type: 'nira' }, | ||
| ]; | ||
| vi.mocked(getV1Agents).mockResolvedValue({ | ||
| data: { agents: mockAgents, total: 2 }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const agents = await sdk.agents.list(); | ||
| expect(agents).toEqual(mockAgents); | ||
| expect(getV1Agents).toHaveBeenCalledWith({ | ||
| client: expect.anything(), | ||
| throwOnError: true, | ||
| }); | ||
| }); | ||
| it('should return empty array when no agents', async () => { | ||
| vi.mocked(getV1Agents).mockResolvedValue({ | ||
| data: { agents: undefined, total: 0 }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const agents = await sdk.agents.list(); | ||
| expect(agents).toEqual([]); | ||
| }); | ||
| }); | ||
| describe('playbooks', () => { | ||
| it('should list playbooks', async () => { | ||
| const mockPlaybooks = [ | ||
| { id: 'pb-1', name: 'Playbook 1' }, | ||
| { id: 'pb-2', name: 'Playbook 2' }, | ||
| ]; | ||
| vi.mocked(getV1Playbooks).mockResolvedValue({ | ||
| data: { playbooks: mockPlaybooks, total: 2 }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const playbooks = await sdk.playbooks.list(); | ||
| expect(playbooks).toEqual(mockPlaybooks); | ||
| }); | ||
| it('should execute playbook without parameters', async () => { | ||
| vi.mocked(postV1PlaybooksByPlaybookIdExecute).mockResolvedValue({ | ||
| data: { id: 'exec-1', status: 'queued' }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const result = await sdk.playbooks.execute('pb-1'); | ||
| expect(result).toEqual({ id: 'exec-1', status: 'queued' }); | ||
| expect(postV1PlaybooksByPlaybookIdExecute).toHaveBeenCalledWith({ | ||
| client: expect.anything(), | ||
| path: { playbookId: 'pb-1' }, | ||
| body: {}, | ||
| throwOnError: true, | ||
| }); | ||
| }); | ||
| it('should execute playbook with parameters', async () => { | ||
| vi.mocked(postV1PlaybooksByPlaybookIdExecute).mockResolvedValue({ | ||
| data: { id: 'exec-2', status: 'queued' }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const result = await sdk.playbooks.execute('pb-1', { param1: 'value1' }); | ||
| expect(result).toEqual({ id: 'exec-2', status: 'queued' }); | ||
| expect(postV1PlaybooksByPlaybookIdExecute).toHaveBeenCalledWith({ | ||
| client: expect.anything(), | ||
| path: { playbookId: 'pb-1' }, | ||
| body: { parameters: { param1: 'value1' } }, | ||
| throwOnError: true, | ||
| }); | ||
| }); | ||
| }); | ||
| describe('conversations', () => { | ||
| it('should create a conversation', async () => { | ||
| const mockConversation = { | ||
| id: 'conv-1', | ||
| title: 'Test Chat', | ||
| status: 'active', | ||
| }; | ||
| vi.mocked(postV1AgentsByAgentIdConversations).mockResolvedValue({ | ||
| data: mockConversation, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const conversation = await sdk.conversations.create('agent-1', 'Test Chat'); | ||
| expect(conversation).toEqual(mockConversation); | ||
| expect(postV1AgentsByAgentIdConversations).toHaveBeenCalledWith({ | ||
| client: expect.anything(), | ||
| path: { agentId: 'agent-1' }, | ||
| body: { title: 'Test Chat' }, | ||
| throwOnError: true, | ||
| }); | ||
| }); | ||
| it('should get a conversation', async () => { | ||
| const mockConversation = { | ||
| id: 'conv-1', | ||
| title: 'Test Chat', | ||
| messageCount: 5, | ||
| }; | ||
| vi.mocked(getV1AgentsByAgentIdConversationsByConversationId).mockResolvedValue({ | ||
| data: mockConversation, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const conversation = await sdk.conversations.get('agent-1', 'conv-1'); | ||
| expect(conversation).toEqual(mockConversation); | ||
| }); | ||
| }); | ||
| describe('messages', () => { | ||
| it('should list messages', async () => { | ||
| const mockMessages = [ | ||
| { id: 'msg-1', role: 'user', content: 'Hello' }, | ||
| { id: 'msg-2', role: 'assistant', content: 'Hi there!' }, | ||
| ]; | ||
| vi.mocked(getV1AgentsByAgentIdConversationsByConversationIdMessages).mockResolvedValue({ | ||
| data: { messages: mockMessages, total: 2 }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const messages = await sdk.messages.list('agent-1', 'conv-1'); | ||
| expect(messages).toEqual(mockMessages); | ||
| }); | ||
| it('should send a message (non-streaming)', async () => { | ||
| const mockResponse = { | ||
| messageId: 'msg-3', | ||
| content: 'Hello! How can I help?', | ||
| role: 'assistant', | ||
| }; | ||
| vi.mocked(postV1AgentsByAgentIdConversationsByConversationIdMessages).mockResolvedValue({ | ||
| data: mockResponse, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const response = await sdk.messages.send('agent-1', 'conv-1', 'Hello!'); | ||
| expect(response).toEqual(mockResponse); | ||
| expect(postV1AgentsByAgentIdConversationsByConversationIdMessages).toHaveBeenCalledWith({ | ||
| client: expect.anything(), | ||
| path: { agentId: 'agent-1', conversationId: 'conv-1' }, | ||
| body: { content: 'Hello!' }, | ||
| throwOnError: true, | ||
| }); | ||
| }); | ||
| }); | ||
| describe('executions', () => { | ||
| it('should get execution status', async () => { | ||
| const mockExecution = { | ||
| id: 'exec-1', | ||
| status: 'running', | ||
| targetType: 'playbook', | ||
| }; | ||
| vi.mocked(getV1ExecutionsById).mockResolvedValue({ | ||
| data: mockExecution, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const execution = await sdk.executions.get('exec-1'); | ||
| expect(execution).toEqual(mockExecution); | ||
| }); | ||
| it('should wait for completion - immediate success', async () => { | ||
| const mockExecution = { | ||
| id: 'exec-1', | ||
| status: 'completed', | ||
| result: 'Success!', | ||
| }; | ||
| vi.mocked(getV1ExecutionsById).mockResolvedValue({ | ||
| data: mockExecution, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const execution = await sdk.executions.waitForCompletion('exec-1'); | ||
| expect(execution).toEqual(mockExecution); | ||
| expect(getV1ExecutionsById).toHaveBeenCalledTimes(1); | ||
| }); | ||
| it('should wait for completion - polls until complete', async () => { | ||
| vi.mocked(getV1ExecutionsById) | ||
| .mockResolvedValueOnce({ | ||
| data: { id: 'exec-1', status: 'running' }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }) | ||
| .mockResolvedValueOnce({ | ||
| data: { id: 'exec-1', status: 'running' }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }) | ||
| .mockResolvedValueOnce({ | ||
| data: { id: 'exec-1', status: 'completed', result: 'Done!' }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const execution = await sdk.executions.waitForCompletion('exec-1', { | ||
| pollIntervalMs: 10, | ||
| }); | ||
| expect(execution.status).toBe('completed'); | ||
| expect(getV1ExecutionsById).toHaveBeenCalledTimes(3); | ||
| }); | ||
| it('should wait for completion - handles failed status', async () => { | ||
| vi.mocked(getV1ExecutionsById).mockResolvedValue({ | ||
| data: { id: 'exec-1', status: 'failed' }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| const execution = await sdk.executions.waitForCompletion('exec-1'); | ||
| expect(execution.status).toBe('failed'); | ||
| }); | ||
| it('should wait for completion - times out', async () => { | ||
| vi.mocked(getV1ExecutionsById).mockResolvedValue({ | ||
| data: { id: 'exec-1', status: 'running' }, | ||
| request: new Request('http://test'), | ||
| response: new Response(), | ||
| }); | ||
| await expect(sdk.executions.waitForCompletion('exec-1', { | ||
| timeoutMs: 50, | ||
| pollIntervalMs: 20, | ||
| })).rejects.toThrow(/timed out/); | ||
| }); | ||
| }); | ||
| }); | ||
| describe('NimbleBrain.messages.stream', () => { | ||
| let sdk; | ||
| let originalFetch; | ||
| beforeEach(() => { | ||
| originalFetch = global.fetch; | ||
| sdk = new NimbleBrain({ | ||
| apiKey: 'test-api-key', | ||
| baseUrl: 'https://api.test.com', | ||
| }); | ||
| }); | ||
| afterEach(() => { | ||
| global.fetch = originalFetch; | ||
| }); | ||
| it('should stream SSE events', async () => { | ||
| const sseData = [ | ||
| 'event: message.start\ndata: {"messageId":"msg-1"}\n\n', | ||
| 'event: content\ndata: {"text":"Hello"}\n\n', | ||
| 'event: content\ndata: {"text":" world"}\n\n', | ||
| 'event: done\ndata: {}\n\n', | ||
| ].join(''); | ||
| const mockStream = new ReadableStream({ | ||
| start(controller) { | ||
| controller.enqueue(new TextEncoder().encode(sseData)); | ||
| controller.close(); | ||
| }, | ||
| }); | ||
| global.fetch = vi.fn().mockResolvedValue({ | ||
| ok: true, | ||
| body: mockStream, | ||
| }); | ||
| const events = []; | ||
| for await (const event of sdk.messages.stream('agent-1', 'conv-1', 'Hello!')) { | ||
| events.push(event); | ||
| } | ||
| expect(events).toHaveLength(4); | ||
| expect(events[0]).toEqual({ type: 'message.start', data: { messageId: 'msg-1' } }); | ||
| expect(events[1]).toEqual({ type: 'content', data: { text: 'Hello' } }); | ||
| expect(events[2]).toEqual({ type: 'content', data: { text: ' world' } }); | ||
| expect(events[3]).toEqual({ type: 'done', data: {} }); | ||
| expect(global.fetch).toHaveBeenCalledWith('https://api.test.com/v1/agents/agent-1/conversations/conv-1/messages', expect.objectContaining({ | ||
| method: 'POST', | ||
| headers: expect.objectContaining({ | ||
| 'Content-Type': 'application/json', | ||
| 'Accept': 'text/event-stream', | ||
| 'Authorization': 'Bearer test-api-key', | ||
| }), | ||
| body: JSON.stringify({ content: 'Hello!', stream: true }), | ||
| })); | ||
| }); | ||
| it('should handle chunked SSE data', async () => { | ||
| // Simulate data arriving in chunks that split across event boundaries | ||
| const mockStream = new ReadableStream({ | ||
| start(controller) { | ||
| controller.enqueue(new TextEncoder().encode('event: content\ndata: {"te')); | ||
| controller.enqueue(new TextEncoder().encode('xt":"chunk1"}\n\nevent: done\ndata: {}\n\n')); | ||
| controller.close(); | ||
| }, | ||
| }); | ||
| global.fetch = vi.fn().mockResolvedValue({ | ||
| ok: true, | ||
| body: mockStream, | ||
| }); | ||
| const events = []; | ||
| for await (const event of sdk.messages.stream('agent-1', 'conv-1', 'test')) { | ||
| events.push(event); | ||
| } | ||
| expect(events).toHaveLength(2); | ||
| expect(events[0]).toEqual({ type: 'content', data: { text: 'chunk1' } }); | ||
| expect(events[1]).toEqual({ type: 'done', data: {} }); | ||
| }); | ||
| it('should throw on non-ok response', async () => { | ||
| global.fetch = vi.fn().mockResolvedValue({ | ||
| ok: false, | ||
| status: 401, | ||
| text: () => Promise.resolve('Unauthorized'), | ||
| }); | ||
| await expect(async () => { | ||
| for await (const _ of sdk.messages.stream('agent-1', 'conv-1', 'test')) { | ||
| // consume | ||
| } | ||
| }).rejects.toThrow(/401/); | ||
| }); | ||
| it('should throw when no response body', async () => { | ||
| global.fetch = vi.fn().mockResolvedValue({ | ||
| ok: true, | ||
| body: null, | ||
| }); | ||
| await expect(async () => { | ||
| for await (const _ of sdk.messages.stream('agent-1', 'conv-1', 'test')) { | ||
| // consume | ||
| } | ||
| }).rejects.toThrow(/No response body/); | ||
| }); | ||
| it('should handle tool events', async () => { | ||
| const sseData = [ | ||
| 'event: tool.start\ndata: {"tool":"search","display":"Searching..."}\n\n', | ||
| 'event: tool.complete\ndata: {"tool":"search"}\n\n', | ||
| 'event: done\ndata: {}\n\n', | ||
| ].join(''); | ||
| const mockStream = new ReadableStream({ | ||
| start(controller) { | ||
| controller.enqueue(new TextEncoder().encode(sseData)); | ||
| controller.close(); | ||
| }, | ||
| }); | ||
| global.fetch = vi.fn().mockResolvedValue({ | ||
| ok: true, | ||
| body: mockStream, | ||
| }); | ||
| const events = []; | ||
| for await (const event of sdk.messages.stream('agent-1', 'conv-1', 'search something')) { | ||
| events.push(event); | ||
| } | ||
| expect(events).toHaveLength(3); | ||
| expect(events[0].type).toBe('tool.start'); | ||
| expect(events[1].type).toBe('tool.complete'); | ||
| }); | ||
| }); | ||
| //# sourceMappingURL=nimblebrain.test.js.map |
| {"version":3,"file":"nimblebrain.test.js","sourceRoot":"","sources":["../src/nimblebrain.test.ts"],"names":[],"mappings":"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"} |
+2
-0
@@ -0,3 +1,5 @@ | ||
| export { NimbleBrain } from './nimblebrain'; | ||
| export type { NimbleBrainConfig, Agent, Playbook, Conversation, Message, SendMessageResponse, ExecutePlaybookResponse, Execution, StreamEvent, WaitForCompletionOptions, } from './nimblebrain'; | ||
| export type * from './types.gen'; | ||
| export * from './sdk.gen'; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,mBAAmB,aAAa,CAAC;AACjC,cAAc,WAAW,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,iBAAiB,EACjB,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,SAAS,EACT,WAAW,EACX,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAGvB,mBAAmB,aAAa,CAAC;AACjC,cAAc,WAAW,CAAC"} |
+2
-1
@@ -1,3 +0,4 @@ | ||
| // This file is auto-generated by @hey-api/openapi-ts | ||
| // High-level SDK (recommended) | ||
| export { NimbleBrain } from './nimblebrain'; | ||
| export * from './sdk.gen'; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qDAAqD;AAGrD,cAAc,WAAW,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAgB5C,cAAc,WAAW,CAAC"} |
+5
-2
| { | ||
| "name": "@nimblebrain/sdk", | ||
| "version": "0.1.1", | ||
| "version": "0.2.0", | ||
| "description": "Official TypeScript SDK for NimbleBrain Studio API - AI agents, playbooks, and streaming conversations", | ||
@@ -30,2 +30,4 @@ "type": "module", | ||
| "typecheck": "tsc --noEmit", | ||
| "test": "vitest run", | ||
| "test:watch": "vitest", | ||
| "prepublishOnly": "npm run clean && npm run build", | ||
@@ -64,4 +66,5 @@ "dev": "npm run build" | ||
| "@hey-api/openapi-ts": "^0.88.1", | ||
| "typescript": "^5.6.0" | ||
| "typescript": "^5.6.0", | ||
| "vitest": "^4.0.15" | ||
| } | ||
| } |
+1
-0
@@ -6,2 +6,3 @@ # NimbleBrain SDK for TypeScript | ||
|  | ||
|  | ||
|  | ||
@@ -8,0 +9,0 @@ [](https://www.nimblebrain.ai/discord?utm_source=github&utm_medium=readme&utm_campaign=sdk-typescript&utm_content=header-badge) |
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
No tests
QualityPackage does not have any tests. This is a strong signal of a poorly maintained or low quality package.
210041
34.79%75
11.94%2821
37.88%1
-50%216
0.47%3
50%1
Infinity%20
81.82%