@nebula-ai/sdk 1.1.21 → 1.1.22
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/dist/index.d.mts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
package/dist/index.d.ts
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/client.ts","../src/content.ts","../src/index.ts"],"names":["GraphSearchResultType","memRecord","multimodalParts","response","Memory"],"mappings":"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","file":"index.js","sourcesContent":["// Data models matching the actual Nebula Python SDK exactly\n\n// Enums\nexport enum GraphSearchResultType {\n ENTITY = \"entity\",\n RELATIONSHIP = \"relationship\",\n COMMUNITY = \"community\"\n}\n\n// Core interfaces matching Python SDK exactly\nexport interface Chunk {\n id: string;\n content: string;\n metadata: Record<string, unknown>;\n role?: string; // For conversation messages\n}\n\n/**\n * Structured chunk format returned by backend for conversation messages.\n * Contains message text and role metadata inline.\n */\nexport interface StructuredChunk {\n text: string;\n role: 'user' | 'assistant' | 'system';\n}\n\n\n\n// Multimodal content part types\nexport interface TextContentPart {\n type: 'text';\n text: string;\n}\n\nexport interface FileContentPart {\n type?: 'image' | 'audio' | 'document' | 'file';\n data: string; // Base64 encoded data\n media_type: string; // MIME type\n filename?: string;\n duration_seconds?: number; // Specific to audio\n}\n\nexport interface S3FileReferencePart {\n type: 's3_ref';\n s3_key: string;\n bucket?: string;\n media_type: string;\n filename?: string;\n size_bytes?: number;\n}\n\nexport type MultimodalContentPart =\n | TextContentPart\n | FileContentPart\n | S3FileReferencePart;\n\nexport interface Memory {\n collection_id?: string;\n content?: string | string[] | MultimodalContentPart[] | Array<{ content: string | MultimodalContentPart[]; role: string; metadata?: Record<string, unknown>; authority?: number }>;\n role?: string; // user, assistant, or custom\n id?: string; // Memory/Engram UUID\n memory_id?: string; // Alias for id, for backward compatibility\n metadata: Record<string, unknown>;\n authority?: number; // Optional authority score (0.0 - 1.0)\n\n // Read-only fields (populated from server response)\n chunks?: Chunk[];\n collection_ids?: string[];\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface Collection {\n id: string;\n name: string;\n description?: string;\n metadata: Record<string, unknown>;\n created_at?: string;\n updated_at?: string;\n memory_count: number;\n owner_id?: string;\n}\n\nexport interface SearchResult {\n id: string; // chunk_id\n score: number;\n metadata: Record<string, unknown>;\n source?: string;\n timestamp?: string;\n display_name?: string;\n source_role?: string;\n memory_id?: string; // Parent memory/conversation container\n owner_id?: string;\n engram_id?: string; // Engram ID for graph results\n\n // Chunk fields\n content?: string;\n\n // Graph variant discriminator and payload\n graph_result_type?: GraphSearchResultType;\n graph_entity?: GraphEntityResult;\n graph_relationship?: GraphRelationshipResult;\n graph_community?: GraphCommunityResult;\n chunk_ids?: string[];\n}\n\nexport interface GraphEntityResult {\n id?: string;\n name: string;\n description: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface GraphRelationshipResult {\n id?: string;\n subject: string;\n predicate: string;\n object: string;\n subject_id?: string;\n object_id?: string;\n description?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface GraphCommunityResult {\n id?: string;\n name: string;\n summary: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface SearchOptions {\n limit: number;\n filters?: Record<string, unknown>;\n search_mode?: 'fast' | 'super';\n}\n\n// Hierarchical Memory Recall types (matches backend MemoryRecall structure)\nexport interface RecallFocus {\n schema_weight: number;\n fact_weight: number;\n episodic_weight: number;\n}\n\nexport interface ActivatedEntity {\n entity_id: string;\n entity_name: string;\n entity_category?: string;\n activation_score: number;\n activation_reason?: string;\n profile?: any;\n facets?: ActivatedFacet[];\n}\n\nexport interface ActivatedFacet {\n facet_id: string;\n facet_name: string;\n relevance_score: number;\n facts: ActivatedFact[];\n coherence_score?: number;\n is_noise: boolean;\n}\n\nexport interface ActivatedFact {\n fact_id: string;\n entity_id?: string;\n entity_name?: string;\n facet_name?: string;\n subject: string;\n predicate: string;\n object_value: string;\n activation_score: number;\n extraction_confidence: number;\n corroboration_count: number;\n source_chunk_ids: string[];\n}\n\nexport interface GroundedUtterance {\n chunk_id: string;\n text: string;\n activation_score: number;\n timestamp?: string;\n source_role?: string;\n speaker_name?: string;\n display_name?: string;\n engram_id?: string;\n owner_id?: string;\n supporting_fact_ids: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface InferenceHint {\n term: string;\n predicate: string;\n object: string;\n\n inferred?: boolean;\n confidence?: number;\n\n ledger_p_use?: number;\n ledger_p_true?: number;\n ledger_p_stable?: number;\n\n usable_for_rewrite?: boolean;\n used_for_rewrite?: boolean;\n\n relationship_id?: string;\n subject_id?: string;\n object_id?: string;\n\n metadata?: Record<string, unknown>;\n inference_metadata?: Record<string, unknown>;\n}\n\nexport interface MemoryResponse {\n query: string;\n entities: ActivatedEntity[];\n facts: ActivatedFact[];\n utterances: GroundedUtterance[];\n inference_hints?: InferenceHint[];\n focus?: RecallFocus;\n fact_to_chunks: Record<string, string[]>;\n entity_to_facts: Record<string, string[]>;\n retrieved_at: string;\n total_traversal_time_ms?: number;\n query_intent?: string;\n}\n\n// Configuration interface\nexport interface NebulaClientConfig {\n apiKey: string;\n baseUrl?: string;\n timeout?: number;\n}\n\n// Error types matching Python SDK\nexport class NebulaException extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public details?: unknown\n ) {\n super(message);\n this.name = 'NebulaException';\n }\n}\n\nexport class NebulaClientException extends NebulaException {\n constructor(message: string, public cause?: Error) {\n super(message);\n this.name = 'NebulaClientException';\n }\n}\n\nexport class NebulaAuthenticationException extends NebulaException {\n constructor(message: string = 'Invalid API key') {\n super(message, 401);\n this.name = 'NebulaAuthenticationException';\n }\n}\n\nexport class NebulaRateLimitException extends NebulaException {\n constructor(message: string = 'Rate limit exceeded') {\n super(message, 429);\n this.name = 'NebulaRateLimitException';\n }\n}\n\nexport class NebulaValidationException extends NebulaException {\n constructor(message: string = 'Validation error', public details?: unknown) {\n super(message, 400);\n this.name = 'NebulaValidationException';\n }\n}\n\nexport class NebulaCollectionNotFoundException extends NebulaException {\n constructor(message: string = 'Collection not found') {\n super(message, 404);\n this.name = 'NebulaCollectionNotFoundException';\n }\n}\n\nexport class NebulaNotFoundException extends NebulaException {\n constructor(resourceId: string, resourceType: string = 'Resource') {\n super(`${resourceType} not found: ${resourceId}`, 404);\n this.name = 'NebulaNotFoundException';\n }\n}\n","import {\n Memory,\n MemoryResponse,\n Collection,\n SearchResult,\n GraphSearchResultType,\n GraphEntityResult,\n GraphRelationshipResult,\n GraphCommunityResult,\n NebulaClientConfig,\n NebulaException,\n NebulaClientException,\n NebulaAuthenticationException,\n NebulaRateLimitException,\n NebulaValidationException,\n NebulaNotFoundException,\n Chunk,\n MultimodalContentPart,\n FileContentPart,\n} from './types';\n\ntype ApiEnvelope<T> = { results: T };\n\n/**\n * Official Nebula JavaScript/TypeScript SDK\n * Mirrors the exact Nebula Python SDK client.py implementation\n */\nexport class Nebula {\n private apiKey: string;\n private baseUrl: string;\n private timeout: number;\n\n // Files larger than 5MB are automatically uploaded to S3\n private static readonly MAX_INLINE_SIZE = 5 * 1024 * 1024; // 5MB\n\n constructor(config: NebulaClientConfig = {} as NebulaClientConfig) {\n this.apiKey = config.apiKey;\n if (!this.apiKey) {\n throw new NebulaClientException(\n 'API key is required. Pass it to the constructor or set NEBULA_API_KEY environment variable.'\n );\n }\n\n this.baseUrl = (config.baseUrl || 'https://api.nebulacloud.app').replace(/\\/$/, '');\n this.timeout = config.timeout || 30000;\n }\n\n // Public mutators used by tests\n setApiKey(next: string) {\n this.apiKey = next;\n }\n setBaseUrl(next: string) {\n this.baseUrl = (next || this.baseUrl).replace(/\\/$/, '');\n }\n // Kept for backwards-compat tests; no-op in current implementation\n setCorsProxy(_next: string) {\n // no-op\n }\n\n /** Check if API key is set */\n isApiKeySet(): boolean {\n return !!(this.apiKey && this.apiKey.trim() !== '');\n }\n\n /** Detect if a token looks like a Nebula API key (public.raw) */\n private _isNebulaApiKey(token?: string): boolean {\n const candidate = token || this.apiKey;\n if (!candidate) return false;\n const parts = candidate.split('.');\n if (parts.length !== 2) return false;\n const [publicPart, rawPart] = parts;\n return (publicPart.startsWith('key_') || publicPart.startsWith('neb_')) && !!rawPart && rawPart.length > 0;\n }\n\n /** Build authentication headers */\n private _buildAuthHeaders(includeContentType: boolean = true): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (this._isNebulaApiKey()) {\n headers['X-API-Key'] = this.apiKey;\n } else {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n }\n\n if (includeContentType) {\n headers['Content-Type'] = 'application/json';\n }\n\n return headers;\n }\n\n private _isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private _unwrapResults<T>(value: unknown): T {\n if (this._isRecord(value) && 'results' in value) {\n return (value as ApiEnvelope<T>).results;\n }\n return value as T;\n }\n\n private _unwrapResultsArray<T>(value: unknown): T[] {\n const unwrapped = this._unwrapResults<unknown>(value);\n if (Array.isArray(unwrapped)) {\n return unwrapped as T[];\n }\n if (unwrapped === undefined || unwrapped === null) {\n return [];\n }\n return [unwrapped as T];\n }\n\n private _looksLikeMultimodalContent(content: unknown): content is unknown[] {\n if (!Array.isArray(content)) return false;\n return content.some((part) => {\n if (!this._isRecord(part)) return false;\n if (typeof part.type === 'string') return true;\n if ('data' in part || 's3_key' in part || 'url' in part) return true;\n return false;\n });\n }\n\n private _normalizeContentParts(contentParts: unknown[]): MultimodalContentPart[] {\n return contentParts.map((part) => {\n if (typeof part === 'string') {\n return { type: 'text', text: part } satisfies MultimodalContentPart;\n }\n\n if (!this._isRecord(part)) {\n return { type: 'text', text: String(part) } satisfies MultimodalContentPart;\n }\n\n if (typeof part.type === 'string') {\n return part as unknown as MultimodalContentPart;\n }\n\n if ('s3_key' in part && typeof part.s3_key === 'string') {\n return {\n type: 's3_ref',\n s3_key: part.s3_key,\n bucket: typeof part.bucket === 'string' ? part.bucket : undefined,\n media_type: typeof part.media_type === 'string' ? part.media_type : 'application/octet-stream',\n filename: typeof part.filename === 'string' ? part.filename : undefined,\n size_bytes: typeof part.size_bytes === 'number' ? part.size_bytes : undefined,\n } satisfies MultimodalContentPart;\n }\n\n if ('data' in part && typeof part.data === 'string') {\n return {\n type: 'file',\n data: part.data,\n media_type: typeof part.media_type === 'string' ? part.media_type : 'application/octet-stream',\n filename: typeof part.filename === 'string' ? part.filename : undefined,\n duration_seconds: typeof part.duration_seconds === 'number' ? part.duration_seconds : undefined,\n } satisfies MultimodalContentPart;\n }\n\n return { type: 'text', text: String(part) } satisfies MultimodalContentPart;\n });\n }\n\n private async _serializeContentAsText(content: unknown): Promise<string> {\n if (this._looksLikeMultimodalContent(content)) {\n const normalized = this._normalizeContentParts(content);\n const processed = await this._processContentParts(normalized);\n return JSON.stringify(processed);\n }\n if (typeof content === 'object' && content !== null) {\n return JSON.stringify(content);\n }\n return String(content ?? '');\n }\n\n private async _serializeContentAsParts(content: unknown): Promise<MultimodalContentPart[] | null> {\n if (!this._looksLikeMultimodalContent(content)) return null;\n const normalized = this._normalizeContentParts(content as unknown[]);\n return await this._processContentParts(normalized);\n }\n\n /** Make an HTTP request to the Nebula API */\n private async _makeRequest(\n method: string,\n endpoint: string,\n jsonData?: unknown, // Can be object, array, or primitive for JSON body\n params?: Record<string, unknown>\n ): Promise<unknown> {\n const url = new URL(endpoint, this.baseUrl);\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n // Handle array parameters (e.g., collection_ids)\n if (Array.isArray(value)) {\n value.forEach((item) => {\n url.searchParams.append(key, String(item));\n });\n } else {\n url.searchParams.append(key, String(value));\n }\n }\n });\n }\n\n const headers = this._buildAuthHeaders(true);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url.toString(), {\n method,\n headers,\n body: jsonData ? JSON.stringify(jsonData) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.status === 200 || response.status === 202) {\n return await response.json();\n } else if (response.status === 401) {\n throw new NebulaAuthenticationException('Invalid API key');\n } else if (response.status === 429) {\n throw new NebulaRateLimitException('Rate limit exceeded');\n } else if (response.status === 400) {\n const errorData = await response.json().catch(() => ({}));\n throw new NebulaValidationException(errorData.message || 'Validation error', errorData.details);\n } else if (response.status === 422) {\n const errorData = await response.json().catch(() => ({}));\n console.error('[SDK] 422 Validation error - Full details:');\n console.error(' Status:', response.status);\n console.error(' Error data:', JSON.stringify(errorData, null, 2));\n console.error(' Message:', errorData.message);\n console.error(' Detail:', errorData.detail);\n throw new NebulaValidationException(\n errorData.message || (typeof errorData.detail === 'string' ? errorData.detail : JSON.stringify(errorData.detail)) || 'Validation error',\n errorData\n );\n } else {\n const errorData = await response.json().catch(() => ({}));\n throw new NebulaException(errorData.message || `API error: ${response.status}`, response.status, errorData);\n }\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof NebulaException) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new NebulaClientException(`Request timed out after ${this.timeout} milliseconds`);\n }\n\n if (error instanceof Error) {\n throw new NebulaClientException(`Request failed: ${error.message}`, error);\n }\n\n throw new NebulaClientException(`Request failed: ${String(error)}`);\n }\n }\n\n // Collection Management Methods\n\n /** Create a new collection */\n async createCollection(options: {\n name: string;\n description?: string;\n metadata?: Record<string, unknown>;\n }): Promise<Collection> {\n const data: Record<string, unknown> = { name: options.name };\n if (options.description) data.description = options.description;\n if (options.metadata) data.metadata = options.metadata;\n\n const response = await this._makeRequest('POST', '/v1/collections', data) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get a specific collection by ID */\n async getCollection(collectionId: string): Promise<Collection> {\n const response = await this._makeRequest('GET', `/v1/collections/${collectionId}`) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get a specific collection by name */\n async getCollectionByName(name: string): Promise<Collection> {\n const response = await this._makeRequest('GET', `/v1/collections/name/${name}`) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get all collections */\n async listCollections(options?: {\n limit?: number;\n offset?: number;\n name?: string;\n }): Promise<Collection[]> {\n const params: Record<string, unknown> = {\n limit: options?.limit ?? 100,\n offset: options?.offset ?? 0\n };\n if (options?.name !== undefined) {\n params.name = options.name;\n }\n const response = await this._makeRequest('GET', '/v1/collections', undefined, params) as { results?: unknown[] } | unknown[] | unknown;\n\n let collections: unknown[];\n if (typeof response === 'object' && response !== null && 'results' in response) {\n collections = (response as { results: unknown[] }).results;\n } else if (Array.isArray(response)) {\n collections = response;\n } else {\n collections = [response];\n }\n\n return collections.map((collection) => this._collectionFromDict(collection as Record<string, unknown>));\n }\n\n /** Update a collection */\n async updateCollection(options: {\n collectionId: string;\n name?: string;\n description?: string;\n metadata?: Record<string, unknown>;\n }): Promise<Collection> {\n const data: Record<string, unknown> = {};\n if (options.name !== undefined) data.name = options.name;\n if (options.description !== undefined) data.description = options.description;\n if (options.metadata !== undefined) data.metadata = options.metadata;\n\n const response = await this._makeRequest('POST', `/v1/collections/${options.collectionId}`, data) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Delete a collection */\n async deleteCollection(collectionId: string): Promise<boolean> {\n await this._makeRequest('DELETE', `/v1/collections/${collectionId}`);\n return true;\n }\n\n // Memory Management Methods\n\n /**\n * Legacy convenience: store raw text content into a collection as a document\n */\n async store(content: string, collectionId: string, metadata: Record<string, unknown> = {}): Promise<Memory> {\n const docMetadata = {\n ...metadata,\n memory_type: 'memory',\n timestamp: new Date().toISOString(),\n } as Record<string, unknown>;\n\n const payload = {\n collection_id: collectionId,\n raw_text: String(content || ''),\n metadata: docMetadata,\n ingestion_mode: 'fast',\n } as const;\n\n const response = await this._makeRequest('POST', '/v1/memories', payload) as { results?: { engram_id?: string; id?: string }; id?: string };\n const id = response?.results?.engram_id || response?.results?.id || response?.id || '';\n\n const timestamp = docMetadata.timestamp as string | undefined;\n const result: Memory = {\n id: String(id),\n memory_id: String(id),\n content: String(content || ''),\n metadata: docMetadata,\n collection_ids: [collectionId],\n created_at: timestamp,\n updated_at: timestamp,\n };\n return result;\n }\n\n /**\n * Store a single memory using the unified engrams API.\n *\n * Automatically infers memory type:\n * - If role is present, creates a conversation\n * - Otherwise, creates a document\n */\n async storeMemory(\n memory: Memory | Record<string, unknown>,\n name?: string\n ): Promise<string> {\n let mem: Memory;\n\n if ('collection_id' in memory) {\n mem = memory as Memory;\n } else {\n // Support both camelCase (collectionId) and snake_case (collection_id)\n const memRecord = memory as Record<string, unknown>;\n mem = {\n collection_id: (memRecord.collection_id as string) || (memRecord.collectionId as string) || '',\n content: (memRecord.content as Memory['content']) || '',\n role: memRecord.role as string | undefined,\n memory_id: (memRecord.memory_id as string) || (memRecord.memoryId as string) || undefined,\n metadata: (memRecord.metadata as Record<string, unknown>) || {},\n };\n }\n\n // If memory_id is present, append to existing memory\n if (mem.memory_id) {\n return await this._appendToMemory(mem.memory_id, mem);\n }\n\n // Automatically infer memory type from role presence\n const memoryType = mem.role ? 'conversation' : 'document';\n\n // Handle conversation creation\n if (memoryType === 'conversation') {\n // Use new unified POST /v1/memories endpoint with JSON body\n const messages = [];\n\n // If content and role provided, include as initial message\n if (mem.content && mem.role) {\n const multimodalParts = await this._serializeContentAsParts(mem.content);\n const msgContent = multimodalParts ?? await this._serializeContentAsText(mem.content);\n\n const memRecord = mem as Memory & { authority?: number };\n messages.push({\n content: msgContent,\n role: mem.role,\n metadata: mem.metadata || {},\n ...(typeof memRecord.authority === 'number' ? { authority: Number(memRecord.authority) } : {})\n });\n }\n\n // Backend requires at least one message for conversation creation\n if (messages.length === 0) {\n throw new NebulaClientException('Cannot create conversation without messages. Provide content and role.');\n }\n\n const data = {\n collection_id: mem.collection_id,\n name: name || 'Conversation',\n messages: messages,\n metadata: mem.metadata || {},\n };\n\n const response = await this._makeRequest('POST', '/v1/memories', data) as { results?: { memory_id?: string; id?: string } };\n\n if (response.results) {\n const convId = response.results.memory_id || response.results.id;\n if (!convId) {\n throw new NebulaClientException('Failed to create conversation: no id returned');\n }\n return String(convId);\n }\n throw new NebulaClientException('Failed to create conversation: invalid response format');\n }\n\n // Handle document/text memory\n const docMetadata = { ...mem.metadata } as Record<string, unknown>;\n docMetadata.memory_type = 'memory';\n\n // If authority provided for document, persist in metadata for ranking\n const memRecord = mem as Memory & { authority?: number };\n if (typeof memRecord.authority === 'number') {\n const v = Number(memRecord.authority);\n if (!Number.isNaN(v) && v >= 0 && v <= 1) {\n docMetadata.authority = v;\n }\n }\n\n // If content is multimodal, send content_parts so the backend can run OCR/transcription.\n // If content is an array of strings, send `chunks` (backend supports both raw_text and chunks).\n let payload: Record<string, unknown>;\n const multimodalParts = await this._serializeContentAsParts(mem.content);\n if (multimodalParts) {\n payload = {\n collection_id: mem.collection_id,\n content_parts: multimodalParts,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n } else if (Array.isArray(mem.content) && mem.content.every((x) => typeof x === 'string')) {\n payload = {\n collection_id: mem.collection_id,\n chunks: mem.content,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n } else {\n const contentText = await this._serializeContentAsText(mem.content);\n if (!contentText || contentText === '\"\"' || contentText === '[]' || contentText === '{}') {\n throw new NebulaClientException('Content is required for document memories');\n }\n payload = {\n collection_id: mem.collection_id,\n raw_text: contentText,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n }\n\n const response = await this._makeRequest('POST', '/v1/memories', payload) as { results?: { engram_id?: string; id?: string }; id?: string };\n const id = response?.results?.engram_id || response?.results?.id || response?.id || '';\n return String(id || '');\n }\n\n /**\n * Internal method to append content to an existing memory\n *\n * @throws NebulaNotFoundException if memory_id doesn't exist\n */\n private async _appendToMemory(memoryId: string, memory: Memory): Promise<string> {\n const collectionId = memory.collection_id;\n const content = memory.content;\n const metadata = memory.metadata;\n\n if (!collectionId) {\n throw new NebulaClientException('collection_id is required');\n }\n\n const payload: Record<string, unknown> = {\n collection_id: collectionId,\n };\n\n // Determine content type and set appropriate field\n if (Array.isArray(content)) {\n if (content.length > 0 && typeof content[0] === 'object' && 'content' in content[0]) {\n // Array of message objects (conversation)\n payload.messages = content;\n } else {\n // Array of strings (chunks)\n payload.chunks = content;\n }\n } else if (typeof content === 'string') {\n // Raw text string\n payload.raw_text = content;\n } else {\n throw new NebulaClientException(\n 'content must be a string, array of strings, or array of message objects'\n );\n }\n\n if (metadata) {\n payload.metadata = metadata;\n }\n\n try {\n await this._makeRequest('POST', `/v1/memories/${memoryId}/append`, payload);\n return memoryId;\n } catch (error) {\n // Convert 404 errors to NebulaNotFoundException\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(memoryId, 'Memory');\n }\n throw error;\n }\n }\n\n /** Store multiple memories using the unified engrams API */\n async storeMemories(memories: Memory[]): Promise<string[]> {\n const results: string[] = [];\n const convGroups: Record<string, Memory[]> = {};\n const others: Memory[] = [];\n\n for (const m of memories) {\n if (m.role) {\n const key = m.memory_id || `__new__::${m.collection_id}`;\n if (!convGroups[key]) convGroups[key] = [];\n convGroups[key].push(m);\n } else {\n others.push(m);\n }\n }\n\n // Process conversation groups using new unified API\n for (const [key, group] of Object.entries(convGroups)) {\n const collectionId = group[0].collection_id;\n let convId: string;\n\n // Prepare messages for the conversation\n const messages: Array<{ content: string | MultimodalContentPart[]; role: string; metadata?: Record<string, unknown>; authority?: number }> = [];\n for (const m of group) {\n const multimodalParts = await this._serializeContentAsParts(m.content);\n const msgContent = multimodalParts ?? await this._serializeContentAsText(m.content);\n if (typeof msgContent === 'string') {\n if (!msgContent.trim()) continue;\n } else if (msgContent.length === 0) {\n continue;\n }\n\n const mRecord = m as Memory & { authority?: number };\n messages.push({\n content: msgContent,\n role: m.role!,\n metadata: m.metadata || {},\n ...(typeof mRecord.authority === 'number' ? { authority: Number(mRecord.authority) } : {}),\n });\n }\n\n if (!messages.length) {\n throw new NebulaClientException(\n 'Cannot create/append conversation without messages. Provide non-empty content.'\n );\n }\n\n // Create conversation if needed\n if (key.startsWith('__new__::')) {\n // Create conversation with initial messages using JSON body\n const data = {\n collection_id: collectionId,\n name: 'Conversation',\n messages: messages,\n metadata: {},\n };\n\n const response = await this._makeRequest('POST', '/v1/memories', data) as { results?: { memory_id?: string; id?: string } };\n\n if (response.results) {\n convId = response.results.memory_id || response.results.id || '';\n if (!convId) {\n throw new NebulaClientException('Failed to create conversation: no id returned');\n }\n } else {\n throw new NebulaClientException('Failed to create conversation: invalid response format');\n }\n } else {\n // Append to existing conversation\n convId = key;\n\n const appendMem: Memory = {\n collection_id: collectionId,\n content: messages as Memory['content'],\n memory_id: convId,\n metadata: {},\n };\n await this._appendToMemory(convId, appendMem);\n }\n\n results.push(...Array(group.length).fill(String(convId)));\n }\n\n // Process others (text/json) individually\n for (const m of others) {\n results.push(await this.storeMemory(m));\n }\n\n return results;\n }\n\n /** Delete one or more memories */\n async delete(memoryIds: string | string[]): Promise<boolean | {\n message: string;\n results: {\n successful: string[];\n failed: Array<{ id: string; error: string }>;\n summary: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n }> {\n try {\n console.log('[SDK] delete() called with:', { memoryIds, type: typeof memoryIds, isArray: Array.isArray(memoryIds) });\n\n // Handle single ID vs array\n if (typeof memoryIds === 'string') {\n console.log('[SDK] Single deletion path for ID:', memoryIds);\n // Single deletion - try existing endpoint first for backward compatibility\n try {\n await this._makeRequest('DELETE', `/v1/memories/${memoryIds}`);\n return true;\n } catch {\n // Fall back to new unified endpoint\n console.log('[SDK] Falling back to POST /v1/memories/delete with single ID');\n // Send the UUID string directly as body (not wrapped in {ids: ...})\n const response = await this._makeRequest('POST', '/v1/memories/delete', memoryIds) as { success?: boolean } | boolean;\n return typeof response === 'object' && response.success !== undefined\n ? response.success\n : true;\n }\n } else {\n console.log('[SDK] Batch deletion path for IDs:', memoryIds);\n console.log('[SDK] Sending POST request with body:', memoryIds);\n // Batch deletion - send array directly as body (not wrapped in {ids: ...})\n // FastAPI Body() without embed=True expects the value directly\n const response = await this._makeRequest('POST', '/v1/memories/delete', memoryIds) as boolean | {\n message: string;\n results: {\n successful: string[];\n failed: Array<{ id: string; error: string }>;\n summary: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n };\n console.log('[SDK] Batch deletion response:', response);\n return response;\n }\n } catch (error) {\n console.error('[SDK] Delete error:', error);\n if (error instanceof Error) {\n throw error;\n }\n throw new NebulaClientException(`Unknown error: ${String(error)}`);\n }\n }\n\n /** Delete a specific chunk or message within a memory */\n async deleteChunk(chunkId: string): Promise<boolean> {\n try {\n await this._makeRequest('DELETE', `/v1/chunks/${chunkId}`);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(chunkId, 'Chunk');\n }\n throw error;\n }\n }\n\n /** Update a specific chunk or message within a memory */\n async updateChunk(\n chunkId: string,\n content: string,\n metadata?: Record<string, unknown>\n ): Promise<boolean> {\n const payload: Record<string, unknown> = { content };\n if (metadata !== undefined) {\n payload.metadata = metadata;\n }\n\n try {\n await this._makeRequest('PATCH', `/v1/chunks/${chunkId}`, payload);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(chunkId, 'Chunk');\n }\n throw error;\n }\n }\n\n /**\n * Update memory-level properties including name, metadata, and collection associations.\n *\n * This method allows updating properties of an entire memory (document or conversation)\n * without modifying its content. For updating individual chunks or messages within a memory,\n * use updateChunk(). For updating content, use storeMemory() to append.\n *\n * @param options - Update configuration\n * @param options.memoryId - The ID of the memory to update\n * @param options.name - New name for the memory (useful for conversations and documents)\n * @param options.metadata - Metadata to set. By default, replaces existing metadata.\n * Set mergeMetadata=true to merge with existing metadata instead.\n * @param options.collectionIds - New collection associations. Must specify at least one valid collection.\n * @param options.mergeMetadata - If true, merges provided metadata with existing metadata.\n * If false (default), replaces existing metadata entirely.\n *\n * @returns Promise resolving to true if successful\n *\n * @throws NebulaNotFoundException if memory_id doesn't exist\n * @throws NebulaValidationException if validation fails (e.g., no fields provided)\n * @throws NebulaAuthenticationException if user doesn't have permission to update this memory\n */\n async updateMemory(options: {\n memoryId: string;\n name?: string;\n metadata?: Record<string, unknown>;\n collectionIds?: string[];\n mergeMetadata?: boolean;\n }): Promise<boolean> {\n const payload: Record<string, unknown> = {};\n\n if (options.name !== undefined) {\n payload.name = options.name;\n }\n if (options.metadata !== undefined) {\n payload.metadata = options.metadata;\n payload.merge_metadata = options.mergeMetadata ?? false;\n }\n if (options.collectionIds !== undefined) {\n payload.collection_ids = options.collectionIds;\n }\n\n if (Object.keys(payload).length === 0) {\n throw new NebulaValidationException(\n 'At least one field (name, metadata, or collectionIds) must be provided to update'\n );\n }\n\n try {\n await this._makeRequest('PATCH', `/v1/memories/${options.memoryId}`, payload);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(options.memoryId, 'Memory');\n }\n throw error;\n }\n }\n\n /**\n * Get all memories from specific collections with optional metadata filtering\n *\n * @param options - Configuration for listing memories\n * @param options.collection_ids - One or more collection IDs to retrieve memories from\n * @param options.limit - Maximum number of memories to return (default: 100)\n * @param options.offset - Number of memories to skip for pagination (default: 0)\n * @param options.metadata_filters - Optional metadata filters using MongoDB-like operators.\n * Supported operators: $eq, $ne, $in, $nin, $exists, $and, $or\n *\n * @returns Promise resolving to array of MemoryResponse objects\n *\n * @example\n * // Get all playground memories excluding conversations\n * const memories = await client.listMemories({\n * collection_ids: ['collection-id'],\n * metadata_filters: {\n * 'metadata.content_type': { $ne: 'conversation' }\n * }\n * });\n *\n * @example\n * // Complex filter with multiple conditions\n * const memories = await client.listMemories({\n * collection_ids: ['collection-id'],\n * metadata_filters: {\n * $and: [\n * { 'metadata.playground': { $eq: true } },\n * { 'metadata.session_id': { $exists: true } }\n * ]\n * }\n * });\n */\n async listMemories(options: {\n collection_ids: string | string[];\n limit?: number;\n offset?: number;\n metadata_filters?: Record<string, unknown>;\n }): Promise<Memory[]> {\n const ids = Array.isArray(options.collection_ids) ? options.collection_ids : [options.collection_ids];\n if (!ids.length) {\n throw new NebulaClientException('collection_ids must be provided to list_memories().');\n }\n\n const params: Record<string, unknown> = {\n limit: options.limit ?? 100,\n offset: options.offset ?? 0,\n collection_ids: ids\n };\n\n // Add metadata_filters if provided (serialize to JSON string for query parameter)\n if (options.metadata_filters) {\n params.metadata_filters = JSON.stringify(options.metadata_filters);\n }\n\n const response = await this._makeRequest('GET', '/v1/memories', undefined, params) as { results?: unknown[] } | unknown[] | unknown;\n\n let documents: unknown[];\n if (typeof response === 'object' && response !== null && 'results' in response) {\n documents = (response as { results: unknown[] }).results;\n } else if (Array.isArray(response)) {\n documents = response;\n } else {\n documents = [response];\n }\n\n return documents.map((doc) => this._memoryResponseFromDict(doc as Record<string, unknown>, ids));\n }\n\n /** Get a specific memory by engram ID */\n async getMemory(memoryId: string): Promise<Memory> {\n const response = await this._makeRequest('GET', `/v1/memories/${memoryId}`) as { text?: string; content?: string; chunks?: unknown[]; id?: string; metadata?: Record<string, unknown>; collection_ids?: string[] };\n\n const content = response.text || response.content;\n const chunks = Array.isArray(response.chunks) ? response.chunks : undefined;\n\n const memoryData = {\n id: response.id,\n content,\n chunks,\n metadata: response.metadata || {},\n collection_ids: response.collection_ids || [],\n };\n\n return this._memoryResponseFromDict(memoryData, []);\n }\n\n // Search Methods\n\n /**\n * Search within specific collections with optional metadata filtering.\n *\n * @param options - Search configuration\n * @param options.query - Search query string\n * @param options.collection_ids - One or more collection IDs to search within\n * @param options.effort - Compute effort budget (auto/low/medium/high). Controls traversal compute, not MemoryResponse size.\n * @param options.filters - Optional filters to apply to the search. Supports comprehensive metadata filtering\n * with MongoDB-like operators for both vector/chunk search and graph search.\n * @param options.searchSettings - Optional search configuration\n *\n * @returns Promise resolving to array of SearchResult objects containing both vector/chunk and graph search results\n *\n * @example\n * // Basic equality filter\n * await client.search({\n * query: \"machine learning\",\n * collection_ids: [\"research-collection\"],\n * filters: {\n * \"metadata.category\": { $eq: \"research\" },\n * \"metadata.verified\": true // Shorthand for $eq\n * }\n * });\n *\n * @example\n * // Numeric comparisons\n * await client.search({\n * query: \"high priority\",\n * collection_ids: [\"tasks\"],\n * filters: {\n * \"metadata.priority\": { $gte: 8 },\n * \"metadata.score\": { $lt: 100 }\n * }\n * });\n *\n * @example\n * // String matching\n * await client.search({\n * query: \"employees\",\n * collection_ids: [\"team\"],\n * filters: {\n * \"metadata.email\": { $ilike: \"%@company.com\" } // Case-insensitive\n * }\n * });\n *\n * @example\n * // Array operations\n * await client.search({\n * query: \"developers\",\n * collection_ids: [\"team\"],\n * filters: {\n * \"metadata.skills\": { $overlap: [\"python\", \"typescript\"] } // Has any\n * }\n * });\n *\n * @example\n * // Nested paths\n * await client.search({\n * query: \"users\",\n * collection_ids: [\"profiles\"],\n * filters: {\n * \"metadata.user.preferences.theme\": { $eq: \"dark\" }\n * }\n * });\n *\n * @example\n * // Complex logical combinations\n * await client.search({\n * query: \"candidates\",\n * collection_ids: [\"hiring\"],\n * filters: {\n * $and: [\n * { \"metadata.verified\": true },\n * { \"metadata.level\": { $gte: 5 } },\n * {\n * $or: [\n * { \"metadata.skills\": { $overlap: [\"python\", \"go\"] } },\n * { \"metadata.years_experience\": { $gte: 8 } }\n * ]\n * }\n * ]\n * }\n * });\n *\n * @remarks\n * Supported Operators:\n * - Comparison: $eq, $ne, $lt, $lte, $gt, $gte\n * - String: $like (case-sensitive), $ilike (case-insensitive)\n * - Array: $in, $nin, $overlap, $contains\n * - JSONB: $json_contains\n * - Logical: $and, $or\n *\n * For comprehensive filtering documentation, see the Metadata Filtering Guide:\n * https://docs.nebulacloud.app/guides/metadata-filtering\n */\n async search(options: {\n query: string;\n collection_ids?: string | string[];\n effort?: 'auto' | 'low' | 'medium' | 'high';\n filters?: Record<string, unknown>;\n searchSettings?: Record<string, unknown>;\n }): Promise<MemoryResponse> {\n // Build request data - pass params directly to API (no wrapping needed)\n const data: Record<string, unknown> = {\n query: options.query,\n };\n\n if (options.effort) {\n data.effort = options.effort;\n }\n\n // Add collection_ids if provided\n if (options.collection_ids) {\n const collectionIds = Array.isArray(options.collection_ids) ? options.collection_ids : [options.collection_ids];\n const validCollectionIds = collectionIds.filter(id => id && id.trim() !== '');\n if (validCollectionIds.length) {\n data.collection_ids = validCollectionIds;\n }\n }\n\n // Add filters if provided\n if (options.filters) {\n data.filters = options.filters;\n }\n\n // Add advanced search settings if provided\n if (options.searchSettings) {\n data.search_settings = options.searchSettings;\n }\n\n const response = await this._makeRequest('POST', '/v1/memories/search', data) as { results?: MemoryResponse };\n\n // Backend returns MemoryRecall wrapped in { results: MemoryResponse }\n // The @base_endpoint decorator always wraps successful responses as {\"results\": MemoryResponse}\n const memoryResponseData = response.results as MemoryResponse;\n\n // Ensure we have a proper MemoryResponse structure with all fields\n const memoryResponse: MemoryResponse = {\n query: memoryResponseData.query || options.query,\n entities: memoryResponseData.entities || [],\n facts: memoryResponseData.facts || [],\n utterances: memoryResponseData.utterances || [],\n inference_hints: (memoryResponseData as any).inference_hints || [],\n fact_to_chunks: memoryResponseData.fact_to_chunks || {},\n entity_to_facts: memoryResponseData.entity_to_facts || {},\n retrieved_at: memoryResponseData.retrieved_at || new Date().toISOString(),\n focus: memoryResponseData.focus,\n total_traversal_time_ms: memoryResponseData.total_traversal_time_ms,\n query_intent: memoryResponseData.query_intent,\n };\n\n return memoryResponse;\n }\n\n // Health Check\n async healthCheck(): Promise<Record<string, unknown>> {\n return this._makeRequest('GET', '/v1/health') as Promise<Record<string, unknown>>;\n }\n\n // Helpers\n\n private _collectionFromDict(data: Record<string, unknown>): Collection {\n let createdAt: string | undefined;\n if (data.created_at) {\n if (typeof data.created_at === 'string') {\n createdAt = data.created_at;\n } else if (data.created_at instanceof Date) {\n createdAt = data.created_at.toISOString();\n }\n }\n\n let updatedAt: string | undefined;\n if (data.updated_at) {\n if (typeof data.updated_at === 'string') {\n updatedAt = data.updated_at;\n } else if (data.updated_at instanceof Date) {\n updatedAt = data.updated_at.toISOString();\n }\n }\n\n const collectionId = String(data.id || '');\n const collectionName = String(data.name || '');\n const collectionDescription = typeof data.description === 'string' ? data.description : undefined;\n const collectionOwnerId = data.owner_id ? String(data.owner_id) : undefined;\n const memoryCount = typeof data.memory_count === 'number' ? data.memory_count : 0;\n\n const metadata: Record<string, unknown> = {\n graph_collection_status: String(data.graph_collection_status || ''),\n graph_sync_status: String(data.graph_sync_status || ''),\n user_count: typeof data.user_count === 'number' ? data.user_count : 0,\n };\n\n return {\n id: collectionId,\n name: collectionName,\n description: collectionDescription,\n metadata,\n created_at: createdAt,\n updated_at: updatedAt,\n memory_count: memoryCount,\n owner_id: collectionOwnerId,\n };\n }\n\n private _memoryResponseFromDict(data: Record<string, unknown>, collectionIds: string[]): Memory {\n let createdAt: string | undefined;\n if (data.created_at) {\n if (typeof data.created_at === 'string') {\n createdAt = data.created_at;\n } else if (data.created_at instanceof Date) {\n createdAt = data.created_at.toISOString();\n }\n }\n\n let updatedAt: string | undefined;\n if (data.updated_at) {\n if (typeof data.updated_at === 'string') {\n updatedAt = data.updated_at;\n } else if (data.updated_at instanceof Date) {\n updatedAt = data.updated_at.toISOString();\n }\n }\n\n const engramId = String(data.id || '');\n const content = typeof data.content === 'string' ? data.content : (typeof data.text === 'string' ? data.text : undefined);\n let chunks: Chunk[] | undefined;\n\n if (data.chunks && Array.isArray(data.chunks)) {\n if (data.chunks.every((x: unknown) => typeof x === 'string')) {\n chunks = (data.chunks as string[]).map((text: string) => ({\n id: '',\n content: text,\n metadata: {},\n }));\n } else {\n chunks = (data.chunks as Array<Record<string, unknown>>)\n .filter((item: Record<string, unknown>) => item && typeof item === 'object' && ('text' in item || 'content' in item))\n .map((item: Record<string, unknown>) => ({\n id: String(item.id || ''),\n content: String(item.text || item.content || ''),\n metadata: typeof item.metadata === 'object' && item.metadata !== null ? item.metadata as Record<string, unknown> : {},\n role: typeof item.role === 'string' ? item.role : undefined,\n }));\n }\n }\n\n const metadata: Record<string, unknown> = { ...(typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {}) };\n if (data.engram_id) {\n metadata.engram_id = data.engram_id;\n }\n\n let finalId = engramId;\n if (data.engram_id && !engramId) {\n finalId = String(data.engram_id);\n }\n\n if (data.document_metadata && typeof data.document_metadata === 'object') {\n Object.assign(metadata, data.document_metadata as Record<string, unknown>);\n }\n\n return {\n id: finalId,\n memory_id: finalId,\n content,\n chunks,\n metadata,\n collection_ids: Array.isArray(data.collection_ids) ? data.collection_ids as string[] : collectionIds,\n created_at: createdAt,\n updated_at: updatedAt,\n };\n }\n\n private _searchResultFromDict(data: Record<string, unknown>): SearchResult {\n const content = typeof data.content === 'string' ? data.content : (typeof data.text === 'string' ? data.text : '');\n const resultId = String(data.id || data.chunk_id || '');\n\n return {\n id: String(resultId),\n content: String(content),\n score: typeof data.score === 'number' ? data.score : Number(data.score || 0.0),\n metadata: typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {},\n source: typeof data.source === 'string' ? data.source : undefined,\n };\n }\n\n private _searchResultFromGraphDict(data: Record<string, unknown>): SearchResult {\n const rid = data.id ? String(data.id) : '';\n const resultTypeStr = typeof data.result_type === 'string' ? data.result_type : 'entity';\n const rtype =\n GraphSearchResultType[resultTypeStr.toUpperCase() as keyof typeof GraphSearchResultType] ||\n GraphSearchResultType.ENTITY;\n const content = (typeof data.content === 'object' && data.content !== null ? data.content : {}) as Record<string, unknown>;\n const score = data.score !== undefined ? Number(data.score) : 0.0;\n const metadata: Record<string, unknown> = typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {};\n const chunkIds = Array.isArray(data.chunk_ids) ? data.chunk_ids as string[] : undefined;\n let timestamp: string | undefined;\n if (data.timestamp) {\n if (typeof data.timestamp === 'string') {\n timestamp = data.timestamp;\n } else if (data.timestamp instanceof Date) {\n timestamp = data.timestamp.toISOString();\n } else {\n const parsed = new Date(String(data.timestamp));\n if (!Number.isNaN(parsed.valueOf())) {\n timestamp = parsed.toISOString();\n }\n }\n }\n\n const displayName = typeof data.display_name === 'string' ? data.display_name : undefined;\n const sourceRole = typeof data.source_role === 'string' ? data.source_role : undefined;\n const engramId = data.engram_id ? String(data.engram_id) : undefined;\n const ownerId = data.owner_id ? String(data.owner_id) : undefined;\n\n let entity: GraphEntityResult | undefined;\n let rel: GraphRelationshipResult | undefined;\n let comm: GraphCommunityResult | undefined;\n\n if (rtype === GraphSearchResultType.ENTITY) {\n entity = {\n id: content.id ? String(content.id) : undefined,\n name: String(content.name || ''),\n description: String(content.description || ''),\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n } else if (rtype === GraphSearchResultType.RELATIONSHIP) {\n rel = {\n id: content.id ? String(content.id) : undefined,\n subject: String(content.subject || ''),\n predicate: String(content.predicate || ''),\n object: String(content.object || ''),\n subject_id: content.subject_id ? String(content.subject_id) : undefined,\n object_id: content.object_id ? String(content.object_id) : undefined,\n description: typeof content.description === 'string' ? content.description : undefined,\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n } else {\n comm = {\n id: content.id ? String(content.id) : undefined,\n name: String(content.name || ''),\n summary: String(content.summary || ''),\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n }\n\n return {\n id: rid,\n score,\n metadata,\n source: 'graph',\n content: undefined,\n graph_result_type: rtype,\n graph_entity: entity,\n graph_relationship: rel,\n graph_community: comm,\n chunk_ids: chunkIds,\n timestamp,\n display_name: displayName,\n source_role: sourceRole,\n engram_id: engramId,\n owner_id: ownerId,\n };\n }\n\n private async _sha256(message: string): Promise<string> {\n const msgBuffer = new TextEncoder().encode(message);\n // Use Web Crypto API: prefer globalThis.crypto (browser/Node 18+), fallback to Node's crypto.webcrypto\n let crypto: Crypto;\n if (typeof globalThis.crypto !== 'undefined' && globalThis.crypto.subtle) {\n crypto = globalThis.crypto;\n } else {\n // Node.js environment: use built-in crypto module's webcrypto\n const nodeCrypto = await import('crypto');\n crypto = nodeCrypto.webcrypto as Crypto;\n }\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n }\n\n private _formDataFromObject(obj: Record<string, unknown>): FormData {\n const formData = new FormData();\n Object.entries(obj).forEach(([key, value]) => {\n formData.append(key, value as string | Blob);\n });\n return formData;\n }\n\n /**\n * Convert and process multimodal content parts, auto-uploading large base64 files to S3.\n *\n * - Binary parts (`image`/`audio`/`document` with `data`) larger than 5MB are uploaded to S3 and converted to `s3_ref`.\n */\n private async _processContentParts(contentParts: MultimodalContentPart[]): Promise<MultimodalContentPart[]> {\n const processed: MultimodalContentPart[] = [];\n\n for (const part of contentParts) {\n // Safe check for binary file content parts\n // We check if it is NOT a known non-binary type (text, s3_ref, url, image_url)\n // And explicitly check for 'data' property presence to satisfy TS\n if (\n part.type !== 'text' &&\n part.type !== 's3_ref' &&\n 'data' in part &&\n part.data\n ) {\n // Now TS knows 'part' has 'data'\n const filePart = part as FileContentPart;\n\n // Calculate decoded size (base64 is ~4/3 of original)\n const dataSize = Math.floor(String(filePart.data).length * 3 / 4);\n\n if (dataSize > Nebula.MAX_INLINE_SIZE) {\n const filename = filePart.filename || `file.bin`;\n const mediaType = filePart.media_type || 'application/octet-stream';\n\n const uploadInfo = await this.getUploadUrl({\n filename,\n content_type: mediaType,\n file_size: dataSize,\n });\n\n // Decode base64 and upload to S3\n let bytes: Uint8Array;\n const atobFn = (globalThis as unknown as { atob?: (data: string) => string }).atob;\n if (typeof atobFn === 'function') {\n const binaryString = atobFn(String(filePart.data));\n bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n } else {\n // Node.js fallback\n const { Buffer } = await import('buffer');\n bytes = Uint8Array.from(Buffer.from(String(filePart.data), 'base64'));\n }\n\n await fetch(uploadInfo.upload_url, {\n method: 'PUT',\n body: bytes as unknown as BodyInit,\n headers: { 'Content-Type': mediaType },\n });\n\n processed.push({\n type: 's3_ref',\n s3_key: uploadInfo.s3_key,\n media_type: mediaType,\n filename,\n });\n continue;\n }\n }\n\n processed.push(part);\n }\n\n return processed;\n }\n\n /**\n * Get a presigned URL for uploading large files to S3.\n */\n async getUploadUrl(options: {\n filename: string;\n content_type: string;\n file_size: number;\n }): Promise<{ upload_url: string; s3_key: string; bucket: string; expires_in: number }> {\n const response = await this._makeRequest('POST', '/v1/memories/upload', undefined, {\n filename: options.filename,\n content_type: options.content_type,\n file_size: options.file_size,\n }) as { results?: { upload_url: string; s3_key: string; bucket: string; expires_in: number }; upload_url?: string; s3_key?: string; bucket?: string; expires_in?: number };\n\n if (response.results) {\n return response.results;\n }\n return response as { upload_url: string; s3_key: string; bucket: string; expires_in: number };\n }\n}\n","import {\n FileContentPart\n} from './types';\n\nconst MIME_TYPES: Record<string, string> = {\n // Images\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".png\": \"image/png\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".heic\": \"image/heic\",\n \".bmp\": \"image/bmp\",\n \".tiff\": \"image/tiff\",\n // Audio\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/wav\",\n \".m4a\": \"audio/m4a\",\n \".ogg\": \"audio/ogg\",\n \".flac\": \"audio/flac\",\n \".aac\": \"audio/aac\",\n \".webm\": \"audio/webm\",\n // Documents\n \".pdf\": \"application/pdf\",\n \".doc\": \"application/msword\",\n \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".ppt\": \"application/vnd.ms-powerpoint\",\n \".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \".txt\": \"text/plain\",\n \".csv\": \"text/csv\",\n \".rtf\": \"application/rtf\",\n \".epub\": \"application/epub+zip\",\n};\n\n/**\n * Utility for creating multimodal content from files.\n * Note: These methods only work in Node.js environments.\n */\nexport class NebulaContent {\n /**\n * Create a FileContentPart from a file path.\n * Automatically deduces media_type and the backend 'type' (image, audio, document).\n */\n static async fromFile(filePath: string, mediaType?: string): Promise<FileContentPart> {\n let fs: typeof import('fs/promises');\n let path: typeof import('path');\n\n try {\n fs = await import('fs/promises');\n path = await import('path');\n } catch (e) {\n throw new Error('File system operations are only supported in Node.js environments.');\n }\n\n const absolutePath = path.resolve(filePath);\n const fileName = path.basename(absolutePath);\n const ext = path.extname(absolutePath).toLowerCase();\n\n const detectedMime = mediaType || MIME_TYPES[ext] || \"application/octet-stream\";\n\n const buffer = await fs.readFile(absolutePath);\n const data = buffer.toString('base64');\n\n return {\n data,\n media_type: detectedMime,\n filename: fileName\n };\n }\n}\n","// Main Client\nexport { Nebula } from './client';\nexport { Nebula as default } from './client';\n\n// Content Helper (Legacy/Internal)\nexport { NebulaContent } from './content';\n\n// Import Types to Merge/Re-export\nimport { NebulaContent } from './content';\nimport { Memory as MemoryType } from './types';\n\n// 1. Export Memory Factory Function (Value) - Acts like Python's class constructor\n// Using Object.assign pattern to avoid @typescript-eslint/no-namespace error\n\ntype MemoryFactory = {\n (data: MemoryType): MemoryType;\n File: typeof NebulaContent.fromFile;\n fromFile: (\n filePath: string,\n collection_id: string,\n metadata?: Record<string, unknown>,\n role?: string\n ) => Promise<MemoryType>;\n};\n\nconst MemoryBase = (data: MemoryType): MemoryType => data;\n\nexport const Memory: MemoryFactory = Object.assign(MemoryBase, {\n /**\n * Helper to create a file content part from a file path.\n * Alias for NebulaContent.fromFile().\n */\n File: NebulaContent.fromFile,\n\n /**\n * Helper to create a complete Memory object from a single file.\n */\n async fromFile(\n filePath: string,\n collection_id: string,\n metadata?: Record<string, unknown>,\n role?: string\n ): Promise<MemoryType> {\n return {\n collection_id,\n content: [await NebulaContent.fromFile(filePath)],\n metadata: metadata || {},\n role\n };\n }\n});\n\n// 3. Export Memory Interface (Type) - Merged with Value\nexport type Memory = MemoryType;\n\n// 4. Re-export all other types explicitly (excluding Memory to avoid conflict)\nexport {\n GraphSearchResultType,\n Chunk,\n StructuredChunk,\n MemoryResponse,\n TextContentPart,\n FileContentPart,\n S3FileReferencePart,\n MultimodalContentPart,\n // Memory is exported above\n Collection,\n SearchResult,\n GraphEntityResult,\n GraphRelationshipResult,\n GraphCommunityResult,\n SearchOptions,\n RecallFocus,\n ActivatedEntity,\n ActivatedFact,\n ActivatedFacet,\n GroundedUtterance,\n NebulaClientConfig,\n NebulaException,\n NebulaClientException,\n NebulaAuthenticationException,\n NebulaRateLimitException,\n NebulaValidationException,\n NebulaCollectionNotFoundException,\n NebulaNotFoundException\n} from './types';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/client.ts","../src/content.ts","../src/index.ts"],"names":["GraphSearchResultType","memRecord","multimodalParts","response","Memory"],"mappings":"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","file":"index.js","sourcesContent":["// Data models matching the actual Nebula Python SDK exactly\n\n// Enums\nexport enum GraphSearchResultType {\n ENTITY = \"entity\",\n RELATIONSHIP = \"relationship\",\n COMMUNITY = \"community\"\n}\n\n// Core interfaces matching Python SDK exactly\nexport interface Chunk {\n id: string;\n content: string;\n metadata: Record<string, unknown>;\n role?: string; // For conversation messages\n}\n\n/**\n * Structured chunk format returned by backend for conversation messages.\n * Contains message text and role metadata inline.\n */\nexport interface StructuredChunk {\n text: string;\n role: 'user' | 'assistant' | 'system';\n}\n\n\n\n// Multimodal content part types\nexport interface TextContentPart {\n type: 'text';\n text: string;\n}\n\nexport interface FileContentPart {\n type?: 'image' | 'audio' | 'document' | 'file';\n data: string; // Base64 encoded data\n media_type: string; // MIME type\n filename?: string;\n duration_seconds?: number; // Specific to audio\n}\n\nexport interface S3FileReferencePart {\n type: 's3_ref';\n s3_key: string;\n bucket?: string;\n media_type: string;\n filename?: string;\n size_bytes?: number;\n}\n\nexport type MultimodalContentPart =\n | TextContentPart\n | FileContentPart\n | S3FileReferencePart;\n\nexport interface Memory {\n collection_id?: string;\n content?: string | string[] | MultimodalContentPart[] | Array<{ content: string | MultimodalContentPart[]; role: string; metadata?: Record<string, unknown>; authority?: number }>;\n role?: string; // user, assistant, or custom\n id?: string; // Memory/Engram UUID\n memory_id?: string; // Alias for id, for backward compatibility\n metadata: Record<string, unknown>;\n authority?: number; // Optional authority score (0.0 - 1.0)\n\n // Read-only fields (populated from server response)\n chunks?: Chunk[];\n collection_ids?: string[];\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface Collection {\n id: string;\n name: string;\n description?: string;\n metadata: Record<string, unknown>;\n created_at?: string;\n updated_at?: string;\n memory_count: number;\n owner_id?: string;\n}\n\nexport interface SearchResult {\n id: string; // chunk_id\n score: number;\n metadata: Record<string, unknown>;\n source?: string;\n timestamp?: string;\n display_name?: string;\n source_role?: string;\n memory_id?: string; // Parent memory/conversation container\n owner_id?: string;\n engram_id?: string; // Engram ID for graph results\n\n // Chunk fields\n content?: string;\n\n // Graph variant discriminator and payload\n graph_result_type?: GraphSearchResultType;\n graph_entity?: GraphEntityResult;\n graph_relationship?: GraphRelationshipResult;\n graph_community?: GraphCommunityResult;\n chunk_ids?: string[];\n}\n\nexport interface GraphEntityResult {\n id?: string;\n name: string;\n description: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface GraphRelationshipResult {\n id?: string;\n subject: string;\n predicate: string;\n object: string;\n subject_id?: string;\n object_id?: string;\n description?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface GraphCommunityResult {\n id?: string;\n name: string;\n summary: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface SearchOptions {\n limit: number;\n filters?: Record<string, unknown>;\n}\n\n// Hierarchical Memory Recall types (matches backend MemoryRecall structure)\nexport interface RecallFocus {\n schema_weight: number;\n fact_weight: number;\n episodic_weight: number;\n}\n\nexport interface ActivatedEntity {\n entity_id: string;\n entity_name: string;\n entity_category?: string;\n activation_score: number;\n activation_reason?: string;\n profile?: any;\n facets?: ActivatedFacet[];\n}\n\nexport interface ActivatedFacet {\n facet_id: string;\n facet_name: string;\n relevance_score: number;\n facts: ActivatedFact[];\n coherence_score?: number;\n is_noise: boolean;\n}\n\nexport interface ActivatedFact {\n fact_id: string;\n entity_id?: string;\n entity_name?: string;\n facet_name?: string;\n subject: string;\n predicate: string;\n object_value: string;\n activation_score: number;\n extraction_confidence: number;\n corroboration_count: number;\n source_chunk_ids: string[];\n}\n\nexport interface GroundedUtterance {\n chunk_id: string;\n text: string;\n activation_score: number;\n timestamp?: string;\n source_role?: string;\n speaker_name?: string;\n display_name?: string;\n engram_id?: string;\n owner_id?: string;\n supporting_fact_ids: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface InferenceHint {\n term: string;\n predicate: string;\n object: string;\n\n inferred?: boolean;\n confidence?: number;\n\n ledger_p_use?: number;\n ledger_p_true?: number;\n ledger_p_stable?: number;\n\n usable_for_rewrite?: boolean;\n used_for_rewrite?: boolean;\n\n relationship_id?: string;\n subject_id?: string;\n object_id?: string;\n\n metadata?: Record<string, unknown>;\n inference_metadata?: Record<string, unknown>;\n}\n\nexport interface MemoryResponse {\n query: string;\n entities: ActivatedEntity[];\n facts: ActivatedFact[];\n utterances: GroundedUtterance[];\n inference_hints?: InferenceHint[];\n focus?: RecallFocus;\n fact_to_chunks: Record<string, string[]>;\n entity_to_facts: Record<string, string[]>;\n retrieved_at: string;\n total_traversal_time_ms?: number;\n query_intent?: string;\n}\n\n// Configuration interface\nexport interface NebulaClientConfig {\n apiKey: string;\n baseUrl?: string;\n timeout?: number;\n}\n\n// Error types matching Python SDK\nexport class NebulaException extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public details?: unknown\n ) {\n super(message);\n this.name = 'NebulaException';\n }\n}\n\nexport class NebulaClientException extends NebulaException {\n constructor(message: string, public cause?: Error) {\n super(message);\n this.name = 'NebulaClientException';\n }\n}\n\nexport class NebulaAuthenticationException extends NebulaException {\n constructor(message: string = 'Invalid API key') {\n super(message, 401);\n this.name = 'NebulaAuthenticationException';\n }\n}\n\nexport class NebulaRateLimitException extends NebulaException {\n constructor(message: string = 'Rate limit exceeded') {\n super(message, 429);\n this.name = 'NebulaRateLimitException';\n }\n}\n\nexport class NebulaValidationException extends NebulaException {\n constructor(message: string = 'Validation error', public details?: unknown) {\n super(message, 400);\n this.name = 'NebulaValidationException';\n }\n}\n\nexport class NebulaCollectionNotFoundException extends NebulaException {\n constructor(message: string = 'Collection not found') {\n super(message, 404);\n this.name = 'NebulaCollectionNotFoundException';\n }\n}\n\nexport class NebulaNotFoundException extends NebulaException {\n constructor(resourceId: string, resourceType: string = 'Resource') {\n super(`${resourceType} not found: ${resourceId}`, 404);\n this.name = 'NebulaNotFoundException';\n }\n}\n","import {\n Memory,\n MemoryResponse,\n Collection,\n SearchResult,\n GraphSearchResultType,\n GraphEntityResult,\n GraphRelationshipResult,\n GraphCommunityResult,\n NebulaClientConfig,\n NebulaException,\n NebulaClientException,\n NebulaAuthenticationException,\n NebulaRateLimitException,\n NebulaValidationException,\n NebulaNotFoundException,\n Chunk,\n MultimodalContentPart,\n FileContentPart,\n} from './types';\n\ntype ApiEnvelope<T> = { results: T };\n\n/**\n * Official Nebula JavaScript/TypeScript SDK\n * Mirrors the exact Nebula Python SDK client.py implementation\n */\nexport class Nebula {\n private apiKey: string;\n private baseUrl: string;\n private timeout: number;\n\n // Files larger than 5MB are automatically uploaded to S3\n private static readonly MAX_INLINE_SIZE = 5 * 1024 * 1024; // 5MB\n\n constructor(config: NebulaClientConfig = {} as NebulaClientConfig) {\n this.apiKey = config.apiKey;\n if (!this.apiKey) {\n throw new NebulaClientException(\n 'API key is required. Pass it to the constructor or set NEBULA_API_KEY environment variable.'\n );\n }\n\n this.baseUrl = (config.baseUrl || 'https://api.nebulacloud.app').replace(/\\/$/, '');\n this.timeout = config.timeout || 30000;\n }\n\n // Public mutators used by tests\n setApiKey(next: string) {\n this.apiKey = next;\n }\n setBaseUrl(next: string) {\n this.baseUrl = (next || this.baseUrl).replace(/\\/$/, '');\n }\n // Kept for backwards-compat tests; no-op in current implementation\n setCorsProxy(_next: string) {\n // no-op\n }\n\n /** Check if API key is set */\n isApiKeySet(): boolean {\n return !!(this.apiKey && this.apiKey.trim() !== '');\n }\n\n /** Detect if a token looks like a Nebula API key (public.raw) */\n private _isNebulaApiKey(token?: string): boolean {\n const candidate = token || this.apiKey;\n if (!candidate) return false;\n const parts = candidate.split('.');\n if (parts.length !== 2) return false;\n const [publicPart, rawPart] = parts;\n return (publicPart.startsWith('key_') || publicPart.startsWith('neb_')) && !!rawPart && rawPart.length > 0;\n }\n\n /** Build authentication headers */\n private _buildAuthHeaders(includeContentType: boolean = true): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (this._isNebulaApiKey()) {\n headers['X-API-Key'] = this.apiKey;\n } else {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n }\n\n if (includeContentType) {\n headers['Content-Type'] = 'application/json';\n }\n\n return headers;\n }\n\n private _isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private _unwrapResults<T>(value: unknown): T {\n if (this._isRecord(value) && 'results' in value) {\n return (value as ApiEnvelope<T>).results;\n }\n return value as T;\n }\n\n private _unwrapResultsArray<T>(value: unknown): T[] {\n const unwrapped = this._unwrapResults<unknown>(value);\n if (Array.isArray(unwrapped)) {\n return unwrapped as T[];\n }\n if (unwrapped === undefined || unwrapped === null) {\n return [];\n }\n return [unwrapped as T];\n }\n\n private _looksLikeMultimodalContent(content: unknown): content is unknown[] {\n if (!Array.isArray(content)) return false;\n return content.some((part) => {\n if (!this._isRecord(part)) return false;\n if (typeof part.type === 'string') return true;\n if ('data' in part || 's3_key' in part || 'url' in part) return true;\n return false;\n });\n }\n\n private _normalizeContentParts(contentParts: unknown[]): MultimodalContentPart[] {\n return contentParts.map((part) => {\n if (typeof part === 'string') {\n return { type: 'text', text: part } satisfies MultimodalContentPart;\n }\n\n if (!this._isRecord(part)) {\n return { type: 'text', text: String(part) } satisfies MultimodalContentPart;\n }\n\n if (typeof part.type === 'string') {\n return part as unknown as MultimodalContentPart;\n }\n\n if ('s3_key' in part && typeof part.s3_key === 'string') {\n return {\n type: 's3_ref',\n s3_key: part.s3_key,\n bucket: typeof part.bucket === 'string' ? part.bucket : undefined,\n media_type: typeof part.media_type === 'string' ? part.media_type : 'application/octet-stream',\n filename: typeof part.filename === 'string' ? part.filename : undefined,\n size_bytes: typeof part.size_bytes === 'number' ? part.size_bytes : undefined,\n } satisfies MultimodalContentPart;\n }\n\n if ('data' in part && typeof part.data === 'string') {\n return {\n type: 'file',\n data: part.data,\n media_type: typeof part.media_type === 'string' ? part.media_type : 'application/octet-stream',\n filename: typeof part.filename === 'string' ? part.filename : undefined,\n duration_seconds: typeof part.duration_seconds === 'number' ? part.duration_seconds : undefined,\n } satisfies MultimodalContentPart;\n }\n\n return { type: 'text', text: String(part) } satisfies MultimodalContentPart;\n });\n }\n\n private async _serializeContentAsText(content: unknown): Promise<string> {\n if (this._looksLikeMultimodalContent(content)) {\n const normalized = this._normalizeContentParts(content);\n const processed = await this._processContentParts(normalized);\n return JSON.stringify(processed);\n }\n if (typeof content === 'object' && content !== null) {\n return JSON.stringify(content);\n }\n return String(content ?? '');\n }\n\n private async _serializeContentAsParts(content: unknown): Promise<MultimodalContentPart[] | null> {\n if (!this._looksLikeMultimodalContent(content)) return null;\n const normalized = this._normalizeContentParts(content as unknown[]);\n return await this._processContentParts(normalized);\n }\n\n /** Make an HTTP request to the Nebula API */\n private async _makeRequest(\n method: string,\n endpoint: string,\n jsonData?: unknown, // Can be object, array, or primitive for JSON body\n params?: Record<string, unknown>\n ): Promise<unknown> {\n const url = new URL(endpoint, this.baseUrl);\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n // Handle array parameters (e.g., collection_ids)\n if (Array.isArray(value)) {\n value.forEach((item) => {\n url.searchParams.append(key, String(item));\n });\n } else {\n url.searchParams.append(key, String(value));\n }\n }\n });\n }\n\n const headers = this._buildAuthHeaders(true);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url.toString(), {\n method,\n headers,\n body: jsonData ? JSON.stringify(jsonData) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.status === 200 || response.status === 202) {\n return await response.json();\n } else if (response.status === 401) {\n throw new NebulaAuthenticationException('Invalid API key');\n } else if (response.status === 429) {\n throw new NebulaRateLimitException('Rate limit exceeded');\n } else if (response.status === 400) {\n const errorData = await response.json().catch(() => ({}));\n throw new NebulaValidationException(errorData.message || 'Validation error', errorData.details);\n } else if (response.status === 422) {\n const errorData = await response.json().catch(() => ({}));\n console.error('[SDK] 422 Validation error - Full details:');\n console.error(' Status:', response.status);\n console.error(' Error data:', JSON.stringify(errorData, null, 2));\n console.error(' Message:', errorData.message);\n console.error(' Detail:', errorData.detail);\n throw new NebulaValidationException(\n errorData.message || (typeof errorData.detail === 'string' ? errorData.detail : JSON.stringify(errorData.detail)) || 'Validation error',\n errorData\n );\n } else {\n const errorData = await response.json().catch(() => ({}));\n throw new NebulaException(errorData.message || `API error: ${response.status}`, response.status, errorData);\n }\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof NebulaException) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new NebulaClientException(`Request timed out after ${this.timeout} milliseconds`);\n }\n\n if (error instanceof Error) {\n throw new NebulaClientException(`Request failed: ${error.message}`, error);\n }\n\n throw new NebulaClientException(`Request failed: ${String(error)}`);\n }\n }\n\n // Collection Management Methods\n\n /** Create a new collection */\n async createCollection(options: {\n name: string;\n description?: string;\n metadata?: Record<string, unknown>;\n }): Promise<Collection> {\n const data: Record<string, unknown> = { name: options.name };\n if (options.description) data.description = options.description;\n if (options.metadata) data.metadata = options.metadata;\n\n const response = await this._makeRequest('POST', '/v1/collections', data) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get a specific collection by ID */\n async getCollection(collectionId: string): Promise<Collection> {\n const response = await this._makeRequest('GET', `/v1/collections/${collectionId}`) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get a specific collection by name */\n async getCollectionByName(name: string): Promise<Collection> {\n const response = await this._makeRequest('GET', `/v1/collections/name/${name}`) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get all collections */\n async listCollections(options?: {\n limit?: number;\n offset?: number;\n name?: string;\n }): Promise<Collection[]> {\n const params: Record<string, unknown> = {\n limit: options?.limit ?? 100,\n offset: options?.offset ?? 0\n };\n if (options?.name !== undefined) {\n params.name = options.name;\n }\n const response = await this._makeRequest('GET', '/v1/collections', undefined, params) as { results?: unknown[] } | unknown[] | unknown;\n\n let collections: unknown[];\n if (typeof response === 'object' && response !== null && 'results' in response) {\n collections = (response as { results: unknown[] }).results;\n } else if (Array.isArray(response)) {\n collections = response;\n } else {\n collections = [response];\n }\n\n return collections.map((collection) => this._collectionFromDict(collection as Record<string, unknown>));\n }\n\n /** Update a collection */\n async updateCollection(options: {\n collectionId: string;\n name?: string;\n description?: string;\n metadata?: Record<string, unknown>;\n }): Promise<Collection> {\n const data: Record<string, unknown> = {};\n if (options.name !== undefined) data.name = options.name;\n if (options.description !== undefined) data.description = options.description;\n if (options.metadata !== undefined) data.metadata = options.metadata;\n\n const response = await this._makeRequest('POST', `/v1/collections/${options.collectionId}`, data) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Delete a collection */\n async deleteCollection(collectionId: string): Promise<boolean> {\n await this._makeRequest('DELETE', `/v1/collections/${collectionId}`);\n return true;\n }\n\n // Memory Management Methods\n\n /**\n * Legacy convenience: store raw text content into a collection as a document\n */\n async store(content: string, collectionId: string, metadata: Record<string, unknown> = {}): Promise<Memory> {\n const docMetadata = {\n ...metadata,\n memory_type: 'memory',\n timestamp: new Date().toISOString(),\n } as Record<string, unknown>;\n\n const payload = {\n collection_id: collectionId,\n raw_text: String(content || ''),\n metadata: docMetadata,\n ingestion_mode: 'fast',\n } as const;\n\n const response = await this._makeRequest('POST', '/v1/memories', payload) as { results?: { engram_id?: string; id?: string }; id?: string };\n const id = response?.results?.engram_id || response?.results?.id || response?.id || '';\n\n const timestamp = docMetadata.timestamp as string | undefined;\n const result: Memory = {\n id: String(id),\n memory_id: String(id),\n content: String(content || ''),\n metadata: docMetadata,\n collection_ids: [collectionId],\n created_at: timestamp,\n updated_at: timestamp,\n };\n return result;\n }\n\n /**\n * Store a single memory using the unified engrams API.\n *\n * Automatically infers memory type:\n * - If role is present, creates a conversation\n * - Otherwise, creates a document\n */\n async storeMemory(\n memory: Memory | Record<string, unknown>,\n name?: string\n ): Promise<string> {\n let mem: Memory;\n\n if ('collection_id' in memory) {\n mem = memory as Memory;\n } else {\n // Support both camelCase (collectionId) and snake_case (collection_id)\n const memRecord = memory as Record<string, unknown>;\n mem = {\n collection_id: (memRecord.collection_id as string) || (memRecord.collectionId as string) || '',\n content: (memRecord.content as Memory['content']) || '',\n role: memRecord.role as string | undefined,\n memory_id: (memRecord.memory_id as string) || (memRecord.memoryId as string) || undefined,\n metadata: (memRecord.metadata as Record<string, unknown>) || {},\n };\n }\n\n // If memory_id is present, append to existing memory\n if (mem.memory_id) {\n return await this._appendToMemory(mem.memory_id, mem);\n }\n\n // Automatically infer memory type from role presence\n const memoryType = mem.role ? 'conversation' : 'document';\n\n // Handle conversation creation\n if (memoryType === 'conversation') {\n // Use new unified POST /v1/memories endpoint with JSON body\n const messages = [];\n\n // If content and role provided, include as initial message\n if (mem.content && mem.role) {\n const multimodalParts = await this._serializeContentAsParts(mem.content);\n const msgContent = multimodalParts ?? await this._serializeContentAsText(mem.content);\n\n const memRecord = mem as Memory & { authority?: number };\n messages.push({\n content: msgContent,\n role: mem.role,\n metadata: mem.metadata || {},\n ...(typeof memRecord.authority === 'number' ? { authority: Number(memRecord.authority) } : {})\n });\n }\n\n // Backend requires at least one message for conversation creation\n if (messages.length === 0) {\n throw new NebulaClientException('Cannot create conversation without messages. Provide content and role.');\n }\n\n const data = {\n collection_id: mem.collection_id,\n name: name || 'Conversation',\n messages: messages,\n metadata: mem.metadata || {},\n };\n\n const response = await this._makeRequest('POST', '/v1/memories', data) as { results?: { memory_id?: string; id?: string } };\n\n if (response.results) {\n const convId = response.results.memory_id || response.results.id;\n if (!convId) {\n throw new NebulaClientException('Failed to create conversation: no id returned');\n }\n return String(convId);\n }\n throw new NebulaClientException('Failed to create conversation: invalid response format');\n }\n\n // Handle document/text memory\n const docMetadata = { ...mem.metadata } as Record<string, unknown>;\n docMetadata.memory_type = 'memory';\n\n // If authority provided for document, persist in metadata for ranking\n const memRecord = mem as Memory & { authority?: number };\n if (typeof memRecord.authority === 'number') {\n const v = Number(memRecord.authority);\n if (!Number.isNaN(v) && v >= 0 && v <= 1) {\n docMetadata.authority = v;\n }\n }\n\n // If content is multimodal, send content_parts so the backend can run OCR/transcription.\n // If content is an array of strings, send `chunks` (backend supports both raw_text and chunks).\n let payload: Record<string, unknown>;\n const multimodalParts = await this._serializeContentAsParts(mem.content);\n if (multimodalParts) {\n payload = {\n collection_id: mem.collection_id,\n content_parts: multimodalParts,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n } else if (Array.isArray(mem.content) && mem.content.every((x) => typeof x === 'string')) {\n payload = {\n collection_id: mem.collection_id,\n chunks: mem.content,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n } else {\n const contentText = await this._serializeContentAsText(mem.content);\n if (!contentText || contentText === '\"\"' || contentText === '[]' || contentText === '{}') {\n throw new NebulaClientException('Content is required for document memories');\n }\n payload = {\n collection_id: mem.collection_id,\n raw_text: contentText,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n }\n\n const response = await this._makeRequest('POST', '/v1/memories', payload) as { results?: { engram_id?: string; id?: string }; id?: string };\n const id = response?.results?.engram_id || response?.results?.id || response?.id || '';\n return String(id || '');\n }\n\n /**\n * Internal method to append content to an existing memory\n *\n * @throws NebulaNotFoundException if memory_id doesn't exist\n */\n private async _appendToMemory(memoryId: string, memory: Memory): Promise<string> {\n const collectionId = memory.collection_id;\n const content = memory.content;\n const metadata = memory.metadata;\n\n if (!collectionId) {\n throw new NebulaClientException('collection_id is required');\n }\n\n const payload: Record<string, unknown> = {\n collection_id: collectionId,\n };\n\n // Determine content type and set appropriate field\n if (Array.isArray(content)) {\n if (content.length > 0 && typeof content[0] === 'object' && 'content' in content[0]) {\n // Array of message objects (conversation)\n payload.messages = content;\n } else {\n // Array of strings (chunks)\n payload.chunks = content;\n }\n } else if (typeof content === 'string') {\n // Raw text string\n payload.raw_text = content;\n } else {\n throw new NebulaClientException(\n 'content must be a string, array of strings, or array of message objects'\n );\n }\n\n if (metadata) {\n payload.metadata = metadata;\n }\n\n try {\n await this._makeRequest('POST', `/v1/memories/${memoryId}/append`, payload);\n return memoryId;\n } catch (error) {\n // Convert 404 errors to NebulaNotFoundException\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(memoryId, 'Memory');\n }\n throw error;\n }\n }\n\n /** Store multiple memories using the unified engrams API */\n async storeMemories(memories: Memory[]): Promise<string[]> {\n const results: string[] = [];\n const convGroups: Record<string, Memory[]> = {};\n const others: Memory[] = [];\n\n for (const m of memories) {\n if (m.role) {\n const key = m.memory_id || `__new__::${m.collection_id}`;\n if (!convGroups[key]) convGroups[key] = [];\n convGroups[key].push(m);\n } else {\n others.push(m);\n }\n }\n\n // Process conversation groups using new unified API\n for (const [key, group] of Object.entries(convGroups)) {\n const collectionId = group[0].collection_id;\n let convId: string;\n\n // Prepare messages for the conversation\n const messages: Array<{ content: string | MultimodalContentPart[]; role: string; metadata?: Record<string, unknown>; authority?: number }> = [];\n for (const m of group) {\n const multimodalParts = await this._serializeContentAsParts(m.content);\n const msgContent = multimodalParts ?? await this._serializeContentAsText(m.content);\n if (typeof msgContent === 'string') {\n if (!msgContent.trim()) continue;\n } else if (msgContent.length === 0) {\n continue;\n }\n\n const mRecord = m as Memory & { authority?: number };\n messages.push({\n content: msgContent,\n role: m.role!,\n metadata: m.metadata || {},\n ...(typeof mRecord.authority === 'number' ? { authority: Number(mRecord.authority) } : {}),\n });\n }\n\n if (!messages.length) {\n throw new NebulaClientException(\n 'Cannot create/append conversation without messages. Provide non-empty content.'\n );\n }\n\n // Create conversation if needed\n if (key.startsWith('__new__::')) {\n // Create conversation with initial messages using JSON body\n const data = {\n collection_id: collectionId,\n name: 'Conversation',\n messages: messages,\n metadata: {},\n };\n\n const response = await this._makeRequest('POST', '/v1/memories', data) as { results?: { memory_id?: string; id?: string } };\n\n if (response.results) {\n convId = response.results.memory_id || response.results.id || '';\n if (!convId) {\n throw new NebulaClientException('Failed to create conversation: no id returned');\n }\n } else {\n throw new NebulaClientException('Failed to create conversation: invalid response format');\n }\n } else {\n // Append to existing conversation\n convId = key;\n\n const appendMem: Memory = {\n collection_id: collectionId,\n content: messages as Memory['content'],\n memory_id: convId,\n metadata: {},\n };\n await this._appendToMemory(convId, appendMem);\n }\n\n results.push(...Array(group.length).fill(String(convId)));\n }\n\n // Process others (text/json) individually\n for (const m of others) {\n results.push(await this.storeMemory(m));\n }\n\n return results;\n }\n\n /** Delete one or more memories */\n async delete(memoryIds: string | string[]): Promise<boolean | {\n message: string;\n results: {\n successful: string[];\n failed: Array<{ id: string; error: string }>;\n summary: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n }> {\n try {\n console.log('[SDK] delete() called with:', { memoryIds, type: typeof memoryIds, isArray: Array.isArray(memoryIds) });\n\n // Handle single ID vs array\n if (typeof memoryIds === 'string') {\n console.log('[SDK] Single deletion path for ID:', memoryIds);\n // Single deletion - try existing endpoint first for backward compatibility\n try {\n await this._makeRequest('DELETE', `/v1/memories/${memoryIds}`);\n return true;\n } catch {\n // Fall back to new unified endpoint\n console.log('[SDK] Falling back to POST /v1/memories/delete with single ID');\n // Send the UUID string directly as body (not wrapped in {ids: ...})\n const response = await this._makeRequest('POST', '/v1/memories/delete', memoryIds) as { success?: boolean } | boolean;\n return typeof response === 'object' && response.success !== undefined\n ? response.success\n : true;\n }\n } else {\n console.log('[SDK] Batch deletion path for IDs:', memoryIds);\n console.log('[SDK] Sending POST request with body:', memoryIds);\n // Batch deletion - send array directly as body (not wrapped in {ids: ...})\n // FastAPI Body() without embed=True expects the value directly\n const response = await this._makeRequest('POST', '/v1/memories/delete', memoryIds) as boolean | {\n message: string;\n results: {\n successful: string[];\n failed: Array<{ id: string; error: string }>;\n summary: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n };\n console.log('[SDK] Batch deletion response:', response);\n return response;\n }\n } catch (error) {\n console.error('[SDK] Delete error:', error);\n if (error instanceof Error) {\n throw error;\n }\n throw new NebulaClientException(`Unknown error: ${String(error)}`);\n }\n }\n\n /** Delete a specific chunk or message within a memory */\n async deleteChunk(chunkId: string): Promise<boolean> {\n try {\n await this._makeRequest('DELETE', `/v1/chunks/${chunkId}`);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(chunkId, 'Chunk');\n }\n throw error;\n }\n }\n\n /** Update a specific chunk or message within a memory */\n async updateChunk(\n chunkId: string,\n content: string,\n metadata?: Record<string, unknown>\n ): Promise<boolean> {\n const payload: Record<string, unknown> = { content };\n if (metadata !== undefined) {\n payload.metadata = metadata;\n }\n\n try {\n await this._makeRequest('PATCH', `/v1/chunks/${chunkId}`, payload);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(chunkId, 'Chunk');\n }\n throw error;\n }\n }\n\n /**\n * Update memory-level properties including name, metadata, and collection associations.\n *\n * This method allows updating properties of an entire memory (document or conversation)\n * without modifying its content. For updating individual chunks or messages within a memory,\n * use updateChunk(). For updating content, use storeMemory() to append.\n *\n * @param options - Update configuration\n * @param options.memoryId - The ID of the memory to update\n * @param options.name - New name for the memory (useful for conversations and documents)\n * @param options.metadata - Metadata to set. By default, replaces existing metadata.\n * Set mergeMetadata=true to merge with existing metadata instead.\n * @param options.collectionIds - New collection associations. Must specify at least one valid collection.\n * @param options.mergeMetadata - If true, merges provided metadata with existing metadata.\n * If false (default), replaces existing metadata entirely.\n *\n * @returns Promise resolving to true if successful\n *\n * @throws NebulaNotFoundException if memory_id doesn't exist\n * @throws NebulaValidationException if validation fails (e.g., no fields provided)\n * @throws NebulaAuthenticationException if user doesn't have permission to update this memory\n */\n async updateMemory(options: {\n memoryId: string;\n name?: string;\n metadata?: Record<string, unknown>;\n collectionIds?: string[];\n mergeMetadata?: boolean;\n }): Promise<boolean> {\n const payload: Record<string, unknown> = {};\n\n if (options.name !== undefined) {\n payload.name = options.name;\n }\n if (options.metadata !== undefined) {\n payload.metadata = options.metadata;\n payload.merge_metadata = options.mergeMetadata ?? false;\n }\n if (options.collectionIds !== undefined) {\n payload.collection_ids = options.collectionIds;\n }\n\n if (Object.keys(payload).length === 0) {\n throw new NebulaValidationException(\n 'At least one field (name, metadata, or collectionIds) must be provided to update'\n );\n }\n\n try {\n await this._makeRequest('PATCH', `/v1/memories/${options.memoryId}`, payload);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(options.memoryId, 'Memory');\n }\n throw error;\n }\n }\n\n /**\n * Get all memories from specific collections with optional metadata filtering\n *\n * @param options - Configuration for listing memories\n * @param options.collection_ids - One or more collection IDs to retrieve memories from\n * @param options.limit - Maximum number of memories to return (default: 100)\n * @param options.offset - Number of memories to skip for pagination (default: 0)\n * @param options.metadata_filters - Optional metadata filters using MongoDB-like operators.\n * Supported operators: $eq, $ne, $in, $nin, $exists, $and, $or\n *\n * @returns Promise resolving to array of MemoryResponse objects\n *\n * @example\n * // Get all playground memories excluding conversations\n * const memories = await client.listMemories({\n * collection_ids: ['collection-id'],\n * metadata_filters: {\n * 'metadata.content_type': { $ne: 'conversation' }\n * }\n * });\n *\n * @example\n * // Complex filter with multiple conditions\n * const memories = await client.listMemories({\n * collection_ids: ['collection-id'],\n * metadata_filters: {\n * $and: [\n * { 'metadata.playground': { $eq: true } },\n * { 'metadata.session_id': { $exists: true } }\n * ]\n * }\n * });\n */\n async listMemories(options: {\n collection_ids: string | string[];\n limit?: number;\n offset?: number;\n metadata_filters?: Record<string, unknown>;\n }): Promise<Memory[]> {\n const ids = Array.isArray(options.collection_ids) ? options.collection_ids : [options.collection_ids];\n if (!ids.length) {\n throw new NebulaClientException('collection_ids must be provided to list_memories().');\n }\n\n const params: Record<string, unknown> = {\n limit: options.limit ?? 100,\n offset: options.offset ?? 0,\n collection_ids: ids\n };\n\n // Add metadata_filters if provided (serialize to JSON string for query parameter)\n if (options.metadata_filters) {\n params.metadata_filters = JSON.stringify(options.metadata_filters);\n }\n\n const response = await this._makeRequest('GET', '/v1/memories', undefined, params) as { results?: unknown[] } | unknown[] | unknown;\n\n let documents: unknown[];\n if (typeof response === 'object' && response !== null && 'results' in response) {\n documents = (response as { results: unknown[] }).results;\n } else if (Array.isArray(response)) {\n documents = response;\n } else {\n documents = [response];\n }\n\n return documents.map((doc) => this._memoryResponseFromDict(doc as Record<string, unknown>, ids));\n }\n\n /** Get a specific memory by engram ID */\n async getMemory(memoryId: string): Promise<Memory> {\n const response = await this._makeRequest('GET', `/v1/memories/${memoryId}`) as { text?: string; content?: string; chunks?: unknown[]; id?: string; metadata?: Record<string, unknown>; collection_ids?: string[] };\n\n const content = response.text || response.content;\n const chunks = Array.isArray(response.chunks) ? response.chunks : undefined;\n\n const memoryData = {\n id: response.id,\n content,\n chunks,\n metadata: response.metadata || {},\n collection_ids: response.collection_ids || [],\n };\n\n return this._memoryResponseFromDict(memoryData, []);\n }\n\n // Search Methods\n\n /**\n * Search within specific collections with optional metadata filtering.\n *\n * @param options - Search configuration\n * @param options.query - Search query string\n * @param options.collection_ids - One or more collection IDs to search within\n * @param options.effort - Compute effort budget (auto/low/medium/high). Controls traversal compute, not MemoryResponse size.\n * @param options.filters - Optional filters to apply to the search. Supports comprehensive metadata filtering\n * with MongoDB-like operators for both vector/chunk search and graph search.\n * @param options.searchSettings - Optional search configuration\n *\n * @returns Promise resolving to array of SearchResult objects containing both vector/chunk and graph search results\n *\n * @example\n * // Basic equality filter\n * await client.search({\n * query: \"machine learning\",\n * collection_ids: [\"research-collection\"],\n * filters: {\n * \"metadata.category\": { $eq: \"research\" },\n * \"metadata.verified\": true // Shorthand for $eq\n * }\n * });\n *\n * @example\n * // Numeric comparisons\n * await client.search({\n * query: \"high priority\",\n * collection_ids: [\"tasks\"],\n * filters: {\n * \"metadata.priority\": { $gte: 8 },\n * \"metadata.score\": { $lt: 100 }\n * }\n * });\n *\n * @example\n * // String matching\n * await client.search({\n * query: \"employees\",\n * collection_ids: [\"team\"],\n * filters: {\n * \"metadata.email\": { $ilike: \"%@company.com\" } // Case-insensitive\n * }\n * });\n *\n * @example\n * // Array operations\n * await client.search({\n * query: \"developers\",\n * collection_ids: [\"team\"],\n * filters: {\n * \"metadata.skills\": { $overlap: [\"python\", \"typescript\"] } // Has any\n * }\n * });\n *\n * @example\n * // Nested paths\n * await client.search({\n * query: \"users\",\n * collection_ids: [\"profiles\"],\n * filters: {\n * \"metadata.user.preferences.theme\": { $eq: \"dark\" }\n * }\n * });\n *\n * @example\n * // Complex logical combinations\n * await client.search({\n * query: \"candidates\",\n * collection_ids: [\"hiring\"],\n * filters: {\n * $and: [\n * { \"metadata.verified\": true },\n * { \"metadata.level\": { $gte: 5 } },\n * {\n * $or: [\n * { \"metadata.skills\": { $overlap: [\"python\", \"go\"] } },\n * { \"metadata.years_experience\": { $gte: 8 } }\n * ]\n * }\n * ]\n * }\n * });\n *\n * @remarks\n * Supported Operators:\n * - Comparison: $eq, $ne, $lt, $lte, $gt, $gte\n * - String: $like (case-sensitive), $ilike (case-insensitive)\n * - Array: $in, $nin, $overlap, $contains\n * - JSONB: $json_contains\n * - Logical: $and, $or\n *\n * For comprehensive filtering documentation, see the Metadata Filtering Guide:\n * https://docs.nebulacloud.app/guides/metadata-filtering\n */\n async search(options: {\n query: string;\n collection_ids?: string | string[];\n effort?: 'auto' | 'low' | 'medium' | 'high';\n filters?: Record<string, unknown>;\n searchSettings?: Record<string, unknown>;\n }): Promise<MemoryResponse> {\n // Build request data - pass params directly to API (no wrapping needed)\n const data: Record<string, unknown> = {\n query: options.query,\n };\n\n if (options.effort) {\n data.effort = options.effort;\n }\n\n // Add collection_ids if provided\n if (options.collection_ids) {\n const collectionIds = Array.isArray(options.collection_ids) ? options.collection_ids : [options.collection_ids];\n const validCollectionIds = collectionIds.filter(id => id && id.trim() !== '');\n if (validCollectionIds.length) {\n data.collection_ids = validCollectionIds;\n }\n }\n\n // Add filters if provided\n if (options.filters) {\n data.filters = options.filters;\n }\n\n // Add advanced search settings if provided\n if (options.searchSettings) {\n data.search_settings = options.searchSettings;\n }\n\n const response = await this._makeRequest('POST', '/v1/memories/search', data) as { results?: MemoryResponse };\n\n // Backend returns MemoryRecall wrapped in { results: MemoryResponse }\n // The @base_endpoint decorator always wraps successful responses as {\"results\": MemoryResponse}\n const memoryResponseData = response.results as MemoryResponse;\n\n // Ensure we have a proper MemoryResponse structure with all fields\n const memoryResponse: MemoryResponse = {\n query: memoryResponseData.query || options.query,\n entities: memoryResponseData.entities || [],\n facts: memoryResponseData.facts || [],\n utterances: memoryResponseData.utterances || [],\n inference_hints: (memoryResponseData as any).inference_hints || [],\n fact_to_chunks: memoryResponseData.fact_to_chunks || {},\n entity_to_facts: memoryResponseData.entity_to_facts || {},\n retrieved_at: memoryResponseData.retrieved_at || new Date().toISOString(),\n focus: memoryResponseData.focus,\n total_traversal_time_ms: memoryResponseData.total_traversal_time_ms,\n query_intent: memoryResponseData.query_intent,\n };\n\n return memoryResponse;\n }\n\n // Health Check\n async healthCheck(): Promise<Record<string, unknown>> {\n return this._makeRequest('GET', '/v1/health') as Promise<Record<string, unknown>>;\n }\n\n // Helpers\n\n private _collectionFromDict(data: Record<string, unknown>): Collection {\n let createdAt: string | undefined;\n if (data.created_at) {\n if (typeof data.created_at === 'string') {\n createdAt = data.created_at;\n } else if (data.created_at instanceof Date) {\n createdAt = data.created_at.toISOString();\n }\n }\n\n let updatedAt: string | undefined;\n if (data.updated_at) {\n if (typeof data.updated_at === 'string') {\n updatedAt = data.updated_at;\n } else if (data.updated_at instanceof Date) {\n updatedAt = data.updated_at.toISOString();\n }\n }\n\n const collectionId = String(data.id || '');\n const collectionName = String(data.name || '');\n const collectionDescription = typeof data.description === 'string' ? data.description : undefined;\n const collectionOwnerId = data.owner_id ? String(data.owner_id) : undefined;\n const memoryCount = typeof data.memory_count === 'number' ? data.memory_count : 0;\n\n const metadata: Record<string, unknown> = {\n graph_collection_status: String(data.graph_collection_status || ''),\n graph_sync_status: String(data.graph_sync_status || ''),\n user_count: typeof data.user_count === 'number' ? data.user_count : 0,\n };\n\n return {\n id: collectionId,\n name: collectionName,\n description: collectionDescription,\n metadata,\n created_at: createdAt,\n updated_at: updatedAt,\n memory_count: memoryCount,\n owner_id: collectionOwnerId,\n };\n }\n\n private _memoryResponseFromDict(data: Record<string, unknown>, collectionIds: string[]): Memory {\n let createdAt: string | undefined;\n if (data.created_at) {\n if (typeof data.created_at === 'string') {\n createdAt = data.created_at;\n } else if (data.created_at instanceof Date) {\n createdAt = data.created_at.toISOString();\n }\n }\n\n let updatedAt: string | undefined;\n if (data.updated_at) {\n if (typeof data.updated_at === 'string') {\n updatedAt = data.updated_at;\n } else if (data.updated_at instanceof Date) {\n updatedAt = data.updated_at.toISOString();\n }\n }\n\n const engramId = String(data.id || '');\n const content = typeof data.content === 'string' ? data.content : (typeof data.text === 'string' ? data.text : undefined);\n let chunks: Chunk[] | undefined;\n\n if (data.chunks && Array.isArray(data.chunks)) {\n if (data.chunks.every((x: unknown) => typeof x === 'string')) {\n chunks = (data.chunks as string[]).map((text: string) => ({\n id: '',\n content: text,\n metadata: {},\n }));\n } else {\n chunks = (data.chunks as Array<Record<string, unknown>>)\n .filter((item: Record<string, unknown>) => item && typeof item === 'object' && ('text' in item || 'content' in item))\n .map((item: Record<string, unknown>) => ({\n id: String(item.id || ''),\n content: String(item.text || item.content || ''),\n metadata: typeof item.metadata === 'object' && item.metadata !== null ? item.metadata as Record<string, unknown> : {},\n role: typeof item.role === 'string' ? item.role : undefined,\n }));\n }\n }\n\n const metadata: Record<string, unknown> = { ...(typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {}) };\n if (data.engram_id) {\n metadata.engram_id = data.engram_id;\n }\n\n let finalId = engramId;\n if (data.engram_id && !engramId) {\n finalId = String(data.engram_id);\n }\n\n if (data.document_metadata && typeof data.document_metadata === 'object') {\n Object.assign(metadata, data.document_metadata as Record<string, unknown>);\n }\n\n return {\n id: finalId,\n memory_id: finalId,\n content,\n chunks,\n metadata,\n collection_ids: Array.isArray(data.collection_ids) ? data.collection_ids as string[] : collectionIds,\n created_at: createdAt,\n updated_at: updatedAt,\n };\n }\n\n private _searchResultFromDict(data: Record<string, unknown>): SearchResult {\n const content = typeof data.content === 'string' ? data.content : (typeof data.text === 'string' ? data.text : '');\n const resultId = String(data.id || data.chunk_id || '');\n\n return {\n id: String(resultId),\n content: String(content),\n score: typeof data.score === 'number' ? data.score : Number(data.score || 0.0),\n metadata: typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {},\n source: typeof data.source === 'string' ? data.source : undefined,\n };\n }\n\n private _searchResultFromGraphDict(data: Record<string, unknown>): SearchResult {\n const rid = data.id ? String(data.id) : '';\n const resultTypeStr = typeof data.result_type === 'string' ? data.result_type : 'entity';\n const rtype =\n GraphSearchResultType[resultTypeStr.toUpperCase() as keyof typeof GraphSearchResultType] ||\n GraphSearchResultType.ENTITY;\n const content = (typeof data.content === 'object' && data.content !== null ? data.content : {}) as Record<string, unknown>;\n const score = data.score !== undefined ? Number(data.score) : 0.0;\n const metadata: Record<string, unknown> = typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {};\n const chunkIds = Array.isArray(data.chunk_ids) ? data.chunk_ids as string[] : undefined;\n let timestamp: string | undefined;\n if (data.timestamp) {\n if (typeof data.timestamp === 'string') {\n timestamp = data.timestamp;\n } else if (data.timestamp instanceof Date) {\n timestamp = data.timestamp.toISOString();\n } else {\n const parsed = new Date(String(data.timestamp));\n if (!Number.isNaN(parsed.valueOf())) {\n timestamp = parsed.toISOString();\n }\n }\n }\n\n const displayName = typeof data.display_name === 'string' ? data.display_name : undefined;\n const sourceRole = typeof data.source_role === 'string' ? data.source_role : undefined;\n const engramId = data.engram_id ? String(data.engram_id) : undefined;\n const ownerId = data.owner_id ? String(data.owner_id) : undefined;\n\n let entity: GraphEntityResult | undefined;\n let rel: GraphRelationshipResult | undefined;\n let comm: GraphCommunityResult | undefined;\n\n if (rtype === GraphSearchResultType.ENTITY) {\n entity = {\n id: content.id ? String(content.id) : undefined,\n name: String(content.name || ''),\n description: String(content.description || ''),\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n } else if (rtype === GraphSearchResultType.RELATIONSHIP) {\n rel = {\n id: content.id ? String(content.id) : undefined,\n subject: String(content.subject || ''),\n predicate: String(content.predicate || ''),\n object: String(content.object || ''),\n subject_id: content.subject_id ? String(content.subject_id) : undefined,\n object_id: content.object_id ? String(content.object_id) : undefined,\n description: typeof content.description === 'string' ? content.description : undefined,\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n } else {\n comm = {\n id: content.id ? String(content.id) : undefined,\n name: String(content.name || ''),\n summary: String(content.summary || ''),\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n }\n\n return {\n id: rid,\n score,\n metadata,\n source: 'graph',\n content: undefined,\n graph_result_type: rtype,\n graph_entity: entity,\n graph_relationship: rel,\n graph_community: comm,\n chunk_ids: chunkIds,\n timestamp,\n display_name: displayName,\n source_role: sourceRole,\n engram_id: engramId,\n owner_id: ownerId,\n };\n }\n\n private async _sha256(message: string): Promise<string> {\n const msgBuffer = new TextEncoder().encode(message);\n // Use Web Crypto API: prefer globalThis.crypto (browser/Node 18+), fallback to Node's crypto.webcrypto\n let crypto: Crypto;\n if (typeof globalThis.crypto !== 'undefined' && globalThis.crypto.subtle) {\n crypto = globalThis.crypto;\n } else {\n // Node.js environment: use built-in crypto module's webcrypto\n const nodeCrypto = await import('crypto');\n crypto = nodeCrypto.webcrypto as Crypto;\n }\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n }\n\n private _formDataFromObject(obj: Record<string, unknown>): FormData {\n const formData = new FormData();\n Object.entries(obj).forEach(([key, value]) => {\n formData.append(key, value as string | Blob);\n });\n return formData;\n }\n\n /**\n * Convert and process multimodal content parts, auto-uploading large base64 files to S3.\n *\n * - Binary parts (`image`/`audio`/`document` with `data`) larger than 5MB are uploaded to S3 and converted to `s3_ref`.\n */\n private async _processContentParts(contentParts: MultimodalContentPart[]): Promise<MultimodalContentPart[]> {\n const processed: MultimodalContentPart[] = [];\n\n for (const part of contentParts) {\n // Safe check for binary file content parts\n // We check if it is NOT a known non-binary type (text, s3_ref, url, image_url)\n // And explicitly check for 'data' property presence to satisfy TS\n if (\n part.type !== 'text' &&\n part.type !== 's3_ref' &&\n 'data' in part &&\n part.data\n ) {\n // Now TS knows 'part' has 'data'\n const filePart = part as FileContentPart;\n\n // Calculate decoded size (base64 is ~4/3 of original)\n const dataSize = Math.floor(String(filePart.data).length * 3 / 4);\n\n if (dataSize > Nebula.MAX_INLINE_SIZE) {\n const filename = filePart.filename || `file.bin`;\n const mediaType = filePart.media_type || 'application/octet-stream';\n\n const uploadInfo = await this.getUploadUrl({\n filename,\n content_type: mediaType,\n file_size: dataSize,\n });\n\n // Decode base64 and upload to S3\n let bytes: Uint8Array;\n const atobFn = (globalThis as unknown as { atob?: (data: string) => string }).atob;\n if (typeof atobFn === 'function') {\n const binaryString = atobFn(String(filePart.data));\n bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n } else {\n // Node.js fallback\n const { Buffer } = await import('buffer');\n bytes = Uint8Array.from(Buffer.from(String(filePart.data), 'base64'));\n }\n\n await fetch(uploadInfo.upload_url, {\n method: 'PUT',\n body: bytes as unknown as BodyInit,\n headers: { 'Content-Type': mediaType },\n });\n\n processed.push({\n type: 's3_ref',\n s3_key: uploadInfo.s3_key,\n media_type: mediaType,\n filename,\n });\n continue;\n }\n }\n\n processed.push(part);\n }\n\n return processed;\n }\n\n /**\n * Get a presigned URL for uploading large files to S3.\n */\n async getUploadUrl(options: {\n filename: string;\n content_type: string;\n file_size: number;\n }): Promise<{ upload_url: string; s3_key: string; bucket: string; expires_in: number }> {\n const response = await this._makeRequest('POST', '/v1/memories/upload', undefined, {\n filename: options.filename,\n content_type: options.content_type,\n file_size: options.file_size,\n }) as { results?: { upload_url: string; s3_key: string; bucket: string; expires_in: number }; upload_url?: string; s3_key?: string; bucket?: string; expires_in?: number };\n\n if (response.results) {\n return response.results;\n }\n return response as { upload_url: string; s3_key: string; bucket: string; expires_in: number };\n }\n}\n","import {\n FileContentPart\n} from './types';\n\nconst MIME_TYPES: Record<string, string> = {\n // Images\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".png\": \"image/png\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".heic\": \"image/heic\",\n \".bmp\": \"image/bmp\",\n \".tiff\": \"image/tiff\",\n // Audio\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/wav\",\n \".m4a\": \"audio/m4a\",\n \".ogg\": \"audio/ogg\",\n \".flac\": \"audio/flac\",\n \".aac\": \"audio/aac\",\n \".webm\": \"audio/webm\",\n // Documents\n \".pdf\": \"application/pdf\",\n \".doc\": \"application/msword\",\n \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".ppt\": \"application/vnd.ms-powerpoint\",\n \".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \".txt\": \"text/plain\",\n \".csv\": \"text/csv\",\n \".rtf\": \"application/rtf\",\n \".epub\": \"application/epub+zip\",\n};\n\n/**\n * Utility for creating multimodal content from files.\n * Note: These methods only work in Node.js environments.\n */\nexport class NebulaContent {\n /**\n * Create a FileContentPart from a file path.\n * Automatically deduces media_type and the backend 'type' (image, audio, document).\n */\n static async fromFile(filePath: string, mediaType?: string): Promise<FileContentPart> {\n let fs: typeof import('fs/promises');\n let path: typeof import('path');\n\n try {\n fs = await import('fs/promises');\n path = await import('path');\n } catch (e) {\n throw new Error('File system operations are only supported in Node.js environments.');\n }\n\n const absolutePath = path.resolve(filePath);\n const fileName = path.basename(absolutePath);\n const ext = path.extname(absolutePath).toLowerCase();\n\n const detectedMime = mediaType || MIME_TYPES[ext] || \"application/octet-stream\";\n\n const buffer = await fs.readFile(absolutePath);\n const data = buffer.toString('base64');\n\n return {\n data,\n media_type: detectedMime,\n filename: fileName\n };\n }\n}\n","// Main Client\nexport { Nebula } from './client';\nexport { Nebula as default } from './client';\n\n// Content Helper (Legacy/Internal)\nexport { NebulaContent } from './content';\n\n// Import Types to Merge/Re-export\nimport { NebulaContent } from './content';\nimport { Memory as MemoryType } from './types';\n\n// 1. Export Memory Factory Function (Value) - Acts like Python's class constructor\n// Using Object.assign pattern to avoid @typescript-eslint/no-namespace error\n\ntype MemoryFactory = {\n (data: MemoryType): MemoryType;\n File: typeof NebulaContent.fromFile;\n fromFile: (\n filePath: string,\n collection_id: string,\n metadata?: Record<string, unknown>,\n role?: string\n ) => Promise<MemoryType>;\n};\n\nconst MemoryBase = (data: MemoryType): MemoryType => data;\n\nexport const Memory: MemoryFactory = Object.assign(MemoryBase, {\n /**\n * Helper to create a file content part from a file path.\n * Alias for NebulaContent.fromFile().\n */\n File: NebulaContent.fromFile,\n\n /**\n * Helper to create a complete Memory object from a single file.\n */\n async fromFile(\n filePath: string,\n collection_id: string,\n metadata?: Record<string, unknown>,\n role?: string\n ): Promise<MemoryType> {\n return {\n collection_id,\n content: [await NebulaContent.fromFile(filePath)],\n metadata: metadata || {},\n role\n };\n }\n});\n\n// 3. Export Memory Interface (Type) - Merged with Value\nexport type Memory = MemoryType;\n\n// 4. Re-export all other types explicitly (excluding Memory to avoid conflict)\nexport {\n GraphSearchResultType,\n Chunk,\n StructuredChunk,\n MemoryResponse,\n TextContentPart,\n FileContentPart,\n S3FileReferencePart,\n MultimodalContentPart,\n // Memory is exported above\n Collection,\n SearchResult,\n GraphEntityResult,\n GraphRelationshipResult,\n GraphCommunityResult,\n SearchOptions,\n RecallFocus,\n ActivatedEntity,\n ActivatedFact,\n ActivatedFacet,\n GroundedUtterance,\n NebulaClientConfig,\n NebulaException,\n NebulaClientException,\n NebulaAuthenticationException,\n NebulaRateLimitException,\n NebulaValidationException,\n NebulaCollectionNotFoundException,\n NebulaNotFoundException\n} from './types';\n"]}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types.ts","../src/client.ts","../src/content.ts","../src/index.ts"],"names":["GraphSearchResultType","memRecord","multimodalParts","response","Memory"],"mappings":"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","file":"index.mjs","sourcesContent":["// Data models matching the actual Nebula Python SDK exactly\n\n// Enums\nexport enum GraphSearchResultType {\n ENTITY = \"entity\",\n RELATIONSHIP = \"relationship\",\n COMMUNITY = \"community\"\n}\n\n// Core interfaces matching Python SDK exactly\nexport interface Chunk {\n id: string;\n content: string;\n metadata: Record<string, unknown>;\n role?: string; // For conversation messages\n}\n\n/**\n * Structured chunk format returned by backend for conversation messages.\n * Contains message text and role metadata inline.\n */\nexport interface StructuredChunk {\n text: string;\n role: 'user' | 'assistant' | 'system';\n}\n\n\n\n// Multimodal content part types\nexport interface TextContentPart {\n type: 'text';\n text: string;\n}\n\nexport interface FileContentPart {\n type?: 'image' | 'audio' | 'document' | 'file';\n data: string; // Base64 encoded data\n media_type: string; // MIME type\n filename?: string;\n duration_seconds?: number; // Specific to audio\n}\n\nexport interface S3FileReferencePart {\n type: 's3_ref';\n s3_key: string;\n bucket?: string;\n media_type: string;\n filename?: string;\n size_bytes?: number;\n}\n\nexport type MultimodalContentPart =\n | TextContentPart\n | FileContentPart\n | S3FileReferencePart;\n\nexport interface Memory {\n collection_id?: string;\n content?: string | string[] | MultimodalContentPart[] | Array<{ content: string | MultimodalContentPart[]; role: string; metadata?: Record<string, unknown>; authority?: number }>;\n role?: string; // user, assistant, or custom\n id?: string; // Memory/Engram UUID\n memory_id?: string; // Alias for id, for backward compatibility\n metadata: Record<string, unknown>;\n authority?: number; // Optional authority score (0.0 - 1.0)\n\n // Read-only fields (populated from server response)\n chunks?: Chunk[];\n collection_ids?: string[];\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface Collection {\n id: string;\n name: string;\n description?: string;\n metadata: Record<string, unknown>;\n created_at?: string;\n updated_at?: string;\n memory_count: number;\n owner_id?: string;\n}\n\nexport interface SearchResult {\n id: string; // chunk_id\n score: number;\n metadata: Record<string, unknown>;\n source?: string;\n timestamp?: string;\n display_name?: string;\n source_role?: string;\n memory_id?: string; // Parent memory/conversation container\n owner_id?: string;\n engram_id?: string; // Engram ID for graph results\n\n // Chunk fields\n content?: string;\n\n // Graph variant discriminator and payload\n graph_result_type?: GraphSearchResultType;\n graph_entity?: GraphEntityResult;\n graph_relationship?: GraphRelationshipResult;\n graph_community?: GraphCommunityResult;\n chunk_ids?: string[];\n}\n\nexport interface GraphEntityResult {\n id?: string;\n name: string;\n description: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface GraphRelationshipResult {\n id?: string;\n subject: string;\n predicate: string;\n object: string;\n subject_id?: string;\n object_id?: string;\n description?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface GraphCommunityResult {\n id?: string;\n name: string;\n summary: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface SearchOptions {\n limit: number;\n filters?: Record<string, unknown>;\n search_mode?: 'fast' | 'super';\n}\n\n// Hierarchical Memory Recall types (matches backend MemoryRecall structure)\nexport interface RecallFocus {\n schema_weight: number;\n fact_weight: number;\n episodic_weight: number;\n}\n\nexport interface ActivatedEntity {\n entity_id: string;\n entity_name: string;\n entity_category?: string;\n activation_score: number;\n activation_reason?: string;\n profile?: any;\n facets?: ActivatedFacet[];\n}\n\nexport interface ActivatedFacet {\n facet_id: string;\n facet_name: string;\n relevance_score: number;\n facts: ActivatedFact[];\n coherence_score?: number;\n is_noise: boolean;\n}\n\nexport interface ActivatedFact {\n fact_id: string;\n entity_id?: string;\n entity_name?: string;\n facet_name?: string;\n subject: string;\n predicate: string;\n object_value: string;\n activation_score: number;\n extraction_confidence: number;\n corroboration_count: number;\n source_chunk_ids: string[];\n}\n\nexport interface GroundedUtterance {\n chunk_id: string;\n text: string;\n activation_score: number;\n timestamp?: string;\n source_role?: string;\n speaker_name?: string;\n display_name?: string;\n engram_id?: string;\n owner_id?: string;\n supporting_fact_ids: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface InferenceHint {\n term: string;\n predicate: string;\n object: string;\n\n inferred?: boolean;\n confidence?: number;\n\n ledger_p_use?: number;\n ledger_p_true?: number;\n ledger_p_stable?: number;\n\n usable_for_rewrite?: boolean;\n used_for_rewrite?: boolean;\n\n relationship_id?: string;\n subject_id?: string;\n object_id?: string;\n\n metadata?: Record<string, unknown>;\n inference_metadata?: Record<string, unknown>;\n}\n\nexport interface MemoryResponse {\n query: string;\n entities: ActivatedEntity[];\n facts: ActivatedFact[];\n utterances: GroundedUtterance[];\n inference_hints?: InferenceHint[];\n focus?: RecallFocus;\n fact_to_chunks: Record<string, string[]>;\n entity_to_facts: Record<string, string[]>;\n retrieved_at: string;\n total_traversal_time_ms?: number;\n query_intent?: string;\n}\n\n// Configuration interface\nexport interface NebulaClientConfig {\n apiKey: string;\n baseUrl?: string;\n timeout?: number;\n}\n\n// Error types matching Python SDK\nexport class NebulaException extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public details?: unknown\n ) {\n super(message);\n this.name = 'NebulaException';\n }\n}\n\nexport class NebulaClientException extends NebulaException {\n constructor(message: string, public cause?: Error) {\n super(message);\n this.name = 'NebulaClientException';\n }\n}\n\nexport class NebulaAuthenticationException extends NebulaException {\n constructor(message: string = 'Invalid API key') {\n super(message, 401);\n this.name = 'NebulaAuthenticationException';\n }\n}\n\nexport class NebulaRateLimitException extends NebulaException {\n constructor(message: string = 'Rate limit exceeded') {\n super(message, 429);\n this.name = 'NebulaRateLimitException';\n }\n}\n\nexport class NebulaValidationException extends NebulaException {\n constructor(message: string = 'Validation error', public details?: unknown) {\n super(message, 400);\n this.name = 'NebulaValidationException';\n }\n}\n\nexport class NebulaCollectionNotFoundException extends NebulaException {\n constructor(message: string = 'Collection not found') {\n super(message, 404);\n this.name = 'NebulaCollectionNotFoundException';\n }\n}\n\nexport class NebulaNotFoundException extends NebulaException {\n constructor(resourceId: string, resourceType: string = 'Resource') {\n super(`${resourceType} not found: ${resourceId}`, 404);\n this.name = 'NebulaNotFoundException';\n }\n}\n","import {\n Memory,\n MemoryResponse,\n Collection,\n SearchResult,\n GraphSearchResultType,\n GraphEntityResult,\n GraphRelationshipResult,\n GraphCommunityResult,\n NebulaClientConfig,\n NebulaException,\n NebulaClientException,\n NebulaAuthenticationException,\n NebulaRateLimitException,\n NebulaValidationException,\n NebulaNotFoundException,\n Chunk,\n MultimodalContentPart,\n FileContentPart,\n} from './types';\n\ntype ApiEnvelope<T> = { results: T };\n\n/**\n * Official Nebula JavaScript/TypeScript SDK\n * Mirrors the exact Nebula Python SDK client.py implementation\n */\nexport class Nebula {\n private apiKey: string;\n private baseUrl: string;\n private timeout: number;\n\n // Files larger than 5MB are automatically uploaded to S3\n private static readonly MAX_INLINE_SIZE = 5 * 1024 * 1024; // 5MB\n\n constructor(config: NebulaClientConfig = {} as NebulaClientConfig) {\n this.apiKey = config.apiKey;\n if (!this.apiKey) {\n throw new NebulaClientException(\n 'API key is required. Pass it to the constructor or set NEBULA_API_KEY environment variable.'\n );\n }\n\n this.baseUrl = (config.baseUrl || 'https://api.nebulacloud.app').replace(/\\/$/, '');\n this.timeout = config.timeout || 30000;\n }\n\n // Public mutators used by tests\n setApiKey(next: string) {\n this.apiKey = next;\n }\n setBaseUrl(next: string) {\n this.baseUrl = (next || this.baseUrl).replace(/\\/$/, '');\n }\n // Kept for backwards-compat tests; no-op in current implementation\n setCorsProxy(_next: string) {\n // no-op\n }\n\n /** Check if API key is set */\n isApiKeySet(): boolean {\n return !!(this.apiKey && this.apiKey.trim() !== '');\n }\n\n /** Detect if a token looks like a Nebula API key (public.raw) */\n private _isNebulaApiKey(token?: string): boolean {\n const candidate = token || this.apiKey;\n if (!candidate) return false;\n const parts = candidate.split('.');\n if (parts.length !== 2) return false;\n const [publicPart, rawPart] = parts;\n return (publicPart.startsWith('key_') || publicPart.startsWith('neb_')) && !!rawPart && rawPart.length > 0;\n }\n\n /** Build authentication headers */\n private _buildAuthHeaders(includeContentType: boolean = true): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (this._isNebulaApiKey()) {\n headers['X-API-Key'] = this.apiKey;\n } else {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n }\n\n if (includeContentType) {\n headers['Content-Type'] = 'application/json';\n }\n\n return headers;\n }\n\n private _isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private _unwrapResults<T>(value: unknown): T {\n if (this._isRecord(value) && 'results' in value) {\n return (value as ApiEnvelope<T>).results;\n }\n return value as T;\n }\n\n private _unwrapResultsArray<T>(value: unknown): T[] {\n const unwrapped = this._unwrapResults<unknown>(value);\n if (Array.isArray(unwrapped)) {\n return unwrapped as T[];\n }\n if (unwrapped === undefined || unwrapped === null) {\n return [];\n }\n return [unwrapped as T];\n }\n\n private _looksLikeMultimodalContent(content: unknown): content is unknown[] {\n if (!Array.isArray(content)) return false;\n return content.some((part) => {\n if (!this._isRecord(part)) return false;\n if (typeof part.type === 'string') return true;\n if ('data' in part || 's3_key' in part || 'url' in part) return true;\n return false;\n });\n }\n\n private _normalizeContentParts(contentParts: unknown[]): MultimodalContentPart[] {\n return contentParts.map((part) => {\n if (typeof part === 'string') {\n return { type: 'text', text: part } satisfies MultimodalContentPart;\n }\n\n if (!this._isRecord(part)) {\n return { type: 'text', text: String(part) } satisfies MultimodalContentPart;\n }\n\n if (typeof part.type === 'string') {\n return part as unknown as MultimodalContentPart;\n }\n\n if ('s3_key' in part && typeof part.s3_key === 'string') {\n return {\n type: 's3_ref',\n s3_key: part.s3_key,\n bucket: typeof part.bucket === 'string' ? part.bucket : undefined,\n media_type: typeof part.media_type === 'string' ? part.media_type : 'application/octet-stream',\n filename: typeof part.filename === 'string' ? part.filename : undefined,\n size_bytes: typeof part.size_bytes === 'number' ? part.size_bytes : undefined,\n } satisfies MultimodalContentPart;\n }\n\n if ('data' in part && typeof part.data === 'string') {\n return {\n type: 'file',\n data: part.data,\n media_type: typeof part.media_type === 'string' ? part.media_type : 'application/octet-stream',\n filename: typeof part.filename === 'string' ? part.filename : undefined,\n duration_seconds: typeof part.duration_seconds === 'number' ? part.duration_seconds : undefined,\n } satisfies MultimodalContentPart;\n }\n\n return { type: 'text', text: String(part) } satisfies MultimodalContentPart;\n });\n }\n\n private async _serializeContentAsText(content: unknown): Promise<string> {\n if (this._looksLikeMultimodalContent(content)) {\n const normalized = this._normalizeContentParts(content);\n const processed = await this._processContentParts(normalized);\n return JSON.stringify(processed);\n }\n if (typeof content === 'object' && content !== null) {\n return JSON.stringify(content);\n }\n return String(content ?? '');\n }\n\n private async _serializeContentAsParts(content: unknown): Promise<MultimodalContentPart[] | null> {\n if (!this._looksLikeMultimodalContent(content)) return null;\n const normalized = this._normalizeContentParts(content as unknown[]);\n return await this._processContentParts(normalized);\n }\n\n /** Make an HTTP request to the Nebula API */\n private async _makeRequest(\n method: string,\n endpoint: string,\n jsonData?: unknown, // Can be object, array, or primitive for JSON body\n params?: Record<string, unknown>\n ): Promise<unknown> {\n const url = new URL(endpoint, this.baseUrl);\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n // Handle array parameters (e.g., collection_ids)\n if (Array.isArray(value)) {\n value.forEach((item) => {\n url.searchParams.append(key, String(item));\n });\n } else {\n url.searchParams.append(key, String(value));\n }\n }\n });\n }\n\n const headers = this._buildAuthHeaders(true);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url.toString(), {\n method,\n headers,\n body: jsonData ? JSON.stringify(jsonData) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.status === 200 || response.status === 202) {\n return await response.json();\n } else if (response.status === 401) {\n throw new NebulaAuthenticationException('Invalid API key');\n } else if (response.status === 429) {\n throw new NebulaRateLimitException('Rate limit exceeded');\n } else if (response.status === 400) {\n const errorData = await response.json().catch(() => ({}));\n throw new NebulaValidationException(errorData.message || 'Validation error', errorData.details);\n } else if (response.status === 422) {\n const errorData = await response.json().catch(() => ({}));\n console.error('[SDK] 422 Validation error - Full details:');\n console.error(' Status:', response.status);\n console.error(' Error data:', JSON.stringify(errorData, null, 2));\n console.error(' Message:', errorData.message);\n console.error(' Detail:', errorData.detail);\n throw new NebulaValidationException(\n errorData.message || (typeof errorData.detail === 'string' ? errorData.detail : JSON.stringify(errorData.detail)) || 'Validation error',\n errorData\n );\n } else {\n const errorData = await response.json().catch(() => ({}));\n throw new NebulaException(errorData.message || `API error: ${response.status}`, response.status, errorData);\n }\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof NebulaException) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new NebulaClientException(`Request timed out after ${this.timeout} milliseconds`);\n }\n\n if (error instanceof Error) {\n throw new NebulaClientException(`Request failed: ${error.message}`, error);\n }\n\n throw new NebulaClientException(`Request failed: ${String(error)}`);\n }\n }\n\n // Collection Management Methods\n\n /** Create a new collection */\n async createCollection(options: {\n name: string;\n description?: string;\n metadata?: Record<string, unknown>;\n }): Promise<Collection> {\n const data: Record<string, unknown> = { name: options.name };\n if (options.description) data.description = options.description;\n if (options.metadata) data.metadata = options.metadata;\n\n const response = await this._makeRequest('POST', '/v1/collections', data) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get a specific collection by ID */\n async getCollection(collectionId: string): Promise<Collection> {\n const response = await this._makeRequest('GET', `/v1/collections/${collectionId}`) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get a specific collection by name */\n async getCollectionByName(name: string): Promise<Collection> {\n const response = await this._makeRequest('GET', `/v1/collections/name/${name}`) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get all collections */\n async listCollections(options?: {\n limit?: number;\n offset?: number;\n name?: string;\n }): Promise<Collection[]> {\n const params: Record<string, unknown> = {\n limit: options?.limit ?? 100,\n offset: options?.offset ?? 0\n };\n if (options?.name !== undefined) {\n params.name = options.name;\n }\n const response = await this._makeRequest('GET', '/v1/collections', undefined, params) as { results?: unknown[] } | unknown[] | unknown;\n\n let collections: unknown[];\n if (typeof response === 'object' && response !== null && 'results' in response) {\n collections = (response as { results: unknown[] }).results;\n } else if (Array.isArray(response)) {\n collections = response;\n } else {\n collections = [response];\n }\n\n return collections.map((collection) => this._collectionFromDict(collection as Record<string, unknown>));\n }\n\n /** Update a collection */\n async updateCollection(options: {\n collectionId: string;\n name?: string;\n description?: string;\n metadata?: Record<string, unknown>;\n }): Promise<Collection> {\n const data: Record<string, unknown> = {};\n if (options.name !== undefined) data.name = options.name;\n if (options.description !== undefined) data.description = options.description;\n if (options.metadata !== undefined) data.metadata = options.metadata;\n\n const response = await this._makeRequest('POST', `/v1/collections/${options.collectionId}`, data) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Delete a collection */\n async deleteCollection(collectionId: string): Promise<boolean> {\n await this._makeRequest('DELETE', `/v1/collections/${collectionId}`);\n return true;\n }\n\n // Memory Management Methods\n\n /**\n * Legacy convenience: store raw text content into a collection as a document\n */\n async store(content: string, collectionId: string, metadata: Record<string, unknown> = {}): Promise<Memory> {\n const docMetadata = {\n ...metadata,\n memory_type: 'memory',\n timestamp: new Date().toISOString(),\n } as Record<string, unknown>;\n\n const payload = {\n collection_id: collectionId,\n raw_text: String(content || ''),\n metadata: docMetadata,\n ingestion_mode: 'fast',\n } as const;\n\n const response = await this._makeRequest('POST', '/v1/memories', payload) as { results?: { engram_id?: string; id?: string }; id?: string };\n const id = response?.results?.engram_id || response?.results?.id || response?.id || '';\n\n const timestamp = docMetadata.timestamp as string | undefined;\n const result: Memory = {\n id: String(id),\n memory_id: String(id),\n content: String(content || ''),\n metadata: docMetadata,\n collection_ids: [collectionId],\n created_at: timestamp,\n updated_at: timestamp,\n };\n return result;\n }\n\n /**\n * Store a single memory using the unified engrams API.\n *\n * Automatically infers memory type:\n * - If role is present, creates a conversation\n * - Otherwise, creates a document\n */\n async storeMemory(\n memory: Memory | Record<string, unknown>,\n name?: string\n ): Promise<string> {\n let mem: Memory;\n\n if ('collection_id' in memory) {\n mem = memory as Memory;\n } else {\n // Support both camelCase (collectionId) and snake_case (collection_id)\n const memRecord = memory as Record<string, unknown>;\n mem = {\n collection_id: (memRecord.collection_id as string) || (memRecord.collectionId as string) || '',\n content: (memRecord.content as Memory['content']) || '',\n role: memRecord.role as string | undefined,\n memory_id: (memRecord.memory_id as string) || (memRecord.memoryId as string) || undefined,\n metadata: (memRecord.metadata as Record<string, unknown>) || {},\n };\n }\n\n // If memory_id is present, append to existing memory\n if (mem.memory_id) {\n return await this._appendToMemory(mem.memory_id, mem);\n }\n\n // Automatically infer memory type from role presence\n const memoryType = mem.role ? 'conversation' : 'document';\n\n // Handle conversation creation\n if (memoryType === 'conversation') {\n // Use new unified POST /v1/memories endpoint with JSON body\n const messages = [];\n\n // If content and role provided, include as initial message\n if (mem.content && mem.role) {\n const multimodalParts = await this._serializeContentAsParts(mem.content);\n const msgContent = multimodalParts ?? await this._serializeContentAsText(mem.content);\n\n const memRecord = mem as Memory & { authority?: number };\n messages.push({\n content: msgContent,\n role: mem.role,\n metadata: mem.metadata || {},\n ...(typeof memRecord.authority === 'number' ? { authority: Number(memRecord.authority) } : {})\n });\n }\n\n // Backend requires at least one message for conversation creation\n if (messages.length === 0) {\n throw new NebulaClientException('Cannot create conversation without messages. Provide content and role.');\n }\n\n const data = {\n collection_id: mem.collection_id,\n name: name || 'Conversation',\n messages: messages,\n metadata: mem.metadata || {},\n };\n\n const response = await this._makeRequest('POST', '/v1/memories', data) as { results?: { memory_id?: string; id?: string } };\n\n if (response.results) {\n const convId = response.results.memory_id || response.results.id;\n if (!convId) {\n throw new NebulaClientException('Failed to create conversation: no id returned');\n }\n return String(convId);\n }\n throw new NebulaClientException('Failed to create conversation: invalid response format');\n }\n\n // Handle document/text memory\n const docMetadata = { ...mem.metadata } as Record<string, unknown>;\n docMetadata.memory_type = 'memory';\n\n // If authority provided for document, persist in metadata for ranking\n const memRecord = mem as Memory & { authority?: number };\n if (typeof memRecord.authority === 'number') {\n const v = Number(memRecord.authority);\n if (!Number.isNaN(v) && v >= 0 && v <= 1) {\n docMetadata.authority = v;\n }\n }\n\n // If content is multimodal, send content_parts so the backend can run OCR/transcription.\n // If content is an array of strings, send `chunks` (backend supports both raw_text and chunks).\n let payload: Record<string, unknown>;\n const multimodalParts = await this._serializeContentAsParts(mem.content);\n if (multimodalParts) {\n payload = {\n collection_id: mem.collection_id,\n content_parts: multimodalParts,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n } else if (Array.isArray(mem.content) && mem.content.every((x) => typeof x === 'string')) {\n payload = {\n collection_id: mem.collection_id,\n chunks: mem.content,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n } else {\n const contentText = await this._serializeContentAsText(mem.content);\n if (!contentText || contentText === '\"\"' || contentText === '[]' || contentText === '{}') {\n throw new NebulaClientException('Content is required for document memories');\n }\n payload = {\n collection_id: mem.collection_id,\n raw_text: contentText,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n }\n\n const response = await this._makeRequest('POST', '/v1/memories', payload) as { results?: { engram_id?: string; id?: string }; id?: string };\n const id = response?.results?.engram_id || response?.results?.id || response?.id || '';\n return String(id || '');\n }\n\n /**\n * Internal method to append content to an existing memory\n *\n * @throws NebulaNotFoundException if memory_id doesn't exist\n */\n private async _appendToMemory(memoryId: string, memory: Memory): Promise<string> {\n const collectionId = memory.collection_id;\n const content = memory.content;\n const metadata = memory.metadata;\n\n if (!collectionId) {\n throw new NebulaClientException('collection_id is required');\n }\n\n const payload: Record<string, unknown> = {\n collection_id: collectionId,\n };\n\n // Determine content type and set appropriate field\n if (Array.isArray(content)) {\n if (content.length > 0 && typeof content[0] === 'object' && 'content' in content[0]) {\n // Array of message objects (conversation)\n payload.messages = content;\n } else {\n // Array of strings (chunks)\n payload.chunks = content;\n }\n } else if (typeof content === 'string') {\n // Raw text string\n payload.raw_text = content;\n } else {\n throw new NebulaClientException(\n 'content must be a string, array of strings, or array of message objects'\n );\n }\n\n if (metadata) {\n payload.metadata = metadata;\n }\n\n try {\n await this._makeRequest('POST', `/v1/memories/${memoryId}/append`, payload);\n return memoryId;\n } catch (error) {\n // Convert 404 errors to NebulaNotFoundException\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(memoryId, 'Memory');\n }\n throw error;\n }\n }\n\n /** Store multiple memories using the unified engrams API */\n async storeMemories(memories: Memory[]): Promise<string[]> {\n const results: string[] = [];\n const convGroups: Record<string, Memory[]> = {};\n const others: Memory[] = [];\n\n for (const m of memories) {\n if (m.role) {\n const key = m.memory_id || `__new__::${m.collection_id}`;\n if (!convGroups[key]) convGroups[key] = [];\n convGroups[key].push(m);\n } else {\n others.push(m);\n }\n }\n\n // Process conversation groups using new unified API\n for (const [key, group] of Object.entries(convGroups)) {\n const collectionId = group[0].collection_id;\n let convId: string;\n\n // Prepare messages for the conversation\n const messages: Array<{ content: string | MultimodalContentPart[]; role: string; metadata?: Record<string, unknown>; authority?: number }> = [];\n for (const m of group) {\n const multimodalParts = await this._serializeContentAsParts(m.content);\n const msgContent = multimodalParts ?? await this._serializeContentAsText(m.content);\n if (typeof msgContent === 'string') {\n if (!msgContent.trim()) continue;\n } else if (msgContent.length === 0) {\n continue;\n }\n\n const mRecord = m as Memory & { authority?: number };\n messages.push({\n content: msgContent,\n role: m.role!,\n metadata: m.metadata || {},\n ...(typeof mRecord.authority === 'number' ? { authority: Number(mRecord.authority) } : {}),\n });\n }\n\n if (!messages.length) {\n throw new NebulaClientException(\n 'Cannot create/append conversation without messages. Provide non-empty content.'\n );\n }\n\n // Create conversation if needed\n if (key.startsWith('__new__::')) {\n // Create conversation with initial messages using JSON body\n const data = {\n collection_id: collectionId,\n name: 'Conversation',\n messages: messages,\n metadata: {},\n };\n\n const response = await this._makeRequest('POST', '/v1/memories', data) as { results?: { memory_id?: string; id?: string } };\n\n if (response.results) {\n convId = response.results.memory_id || response.results.id || '';\n if (!convId) {\n throw new NebulaClientException('Failed to create conversation: no id returned');\n }\n } else {\n throw new NebulaClientException('Failed to create conversation: invalid response format');\n }\n } else {\n // Append to existing conversation\n convId = key;\n\n const appendMem: Memory = {\n collection_id: collectionId,\n content: messages as Memory['content'],\n memory_id: convId,\n metadata: {},\n };\n await this._appendToMemory(convId, appendMem);\n }\n\n results.push(...Array(group.length).fill(String(convId)));\n }\n\n // Process others (text/json) individually\n for (const m of others) {\n results.push(await this.storeMemory(m));\n }\n\n return results;\n }\n\n /** Delete one or more memories */\n async delete(memoryIds: string | string[]): Promise<boolean | {\n message: string;\n results: {\n successful: string[];\n failed: Array<{ id: string; error: string }>;\n summary: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n }> {\n try {\n console.log('[SDK] delete() called with:', { memoryIds, type: typeof memoryIds, isArray: Array.isArray(memoryIds) });\n\n // Handle single ID vs array\n if (typeof memoryIds === 'string') {\n console.log('[SDK] Single deletion path for ID:', memoryIds);\n // Single deletion - try existing endpoint first for backward compatibility\n try {\n await this._makeRequest('DELETE', `/v1/memories/${memoryIds}`);\n return true;\n } catch {\n // Fall back to new unified endpoint\n console.log('[SDK] Falling back to POST /v1/memories/delete with single ID');\n // Send the UUID string directly as body (not wrapped in {ids: ...})\n const response = await this._makeRequest('POST', '/v1/memories/delete', memoryIds) as { success?: boolean } | boolean;\n return typeof response === 'object' && response.success !== undefined\n ? response.success\n : true;\n }\n } else {\n console.log('[SDK] Batch deletion path for IDs:', memoryIds);\n console.log('[SDK] Sending POST request with body:', memoryIds);\n // Batch deletion - send array directly as body (not wrapped in {ids: ...})\n // FastAPI Body() without embed=True expects the value directly\n const response = await this._makeRequest('POST', '/v1/memories/delete', memoryIds) as boolean | {\n message: string;\n results: {\n successful: string[];\n failed: Array<{ id: string; error: string }>;\n summary: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n };\n console.log('[SDK] Batch deletion response:', response);\n return response;\n }\n } catch (error) {\n console.error('[SDK] Delete error:', error);\n if (error instanceof Error) {\n throw error;\n }\n throw new NebulaClientException(`Unknown error: ${String(error)}`);\n }\n }\n\n /** Delete a specific chunk or message within a memory */\n async deleteChunk(chunkId: string): Promise<boolean> {\n try {\n await this._makeRequest('DELETE', `/v1/chunks/${chunkId}`);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(chunkId, 'Chunk');\n }\n throw error;\n }\n }\n\n /** Update a specific chunk or message within a memory */\n async updateChunk(\n chunkId: string,\n content: string,\n metadata?: Record<string, unknown>\n ): Promise<boolean> {\n const payload: Record<string, unknown> = { content };\n if (metadata !== undefined) {\n payload.metadata = metadata;\n }\n\n try {\n await this._makeRequest('PATCH', `/v1/chunks/${chunkId}`, payload);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(chunkId, 'Chunk');\n }\n throw error;\n }\n }\n\n /**\n * Update memory-level properties including name, metadata, and collection associations.\n *\n * This method allows updating properties of an entire memory (document or conversation)\n * without modifying its content. For updating individual chunks or messages within a memory,\n * use updateChunk(). For updating content, use storeMemory() to append.\n *\n * @param options - Update configuration\n * @param options.memoryId - The ID of the memory to update\n * @param options.name - New name for the memory (useful for conversations and documents)\n * @param options.metadata - Metadata to set. By default, replaces existing metadata.\n * Set mergeMetadata=true to merge with existing metadata instead.\n * @param options.collectionIds - New collection associations. Must specify at least one valid collection.\n * @param options.mergeMetadata - If true, merges provided metadata with existing metadata.\n * If false (default), replaces existing metadata entirely.\n *\n * @returns Promise resolving to true if successful\n *\n * @throws NebulaNotFoundException if memory_id doesn't exist\n * @throws NebulaValidationException if validation fails (e.g., no fields provided)\n * @throws NebulaAuthenticationException if user doesn't have permission to update this memory\n */\n async updateMemory(options: {\n memoryId: string;\n name?: string;\n metadata?: Record<string, unknown>;\n collectionIds?: string[];\n mergeMetadata?: boolean;\n }): Promise<boolean> {\n const payload: Record<string, unknown> = {};\n\n if (options.name !== undefined) {\n payload.name = options.name;\n }\n if (options.metadata !== undefined) {\n payload.metadata = options.metadata;\n payload.merge_metadata = options.mergeMetadata ?? false;\n }\n if (options.collectionIds !== undefined) {\n payload.collection_ids = options.collectionIds;\n }\n\n if (Object.keys(payload).length === 0) {\n throw new NebulaValidationException(\n 'At least one field (name, metadata, or collectionIds) must be provided to update'\n );\n }\n\n try {\n await this._makeRequest('PATCH', `/v1/memories/${options.memoryId}`, payload);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(options.memoryId, 'Memory');\n }\n throw error;\n }\n }\n\n /**\n * Get all memories from specific collections with optional metadata filtering\n *\n * @param options - Configuration for listing memories\n * @param options.collection_ids - One or more collection IDs to retrieve memories from\n * @param options.limit - Maximum number of memories to return (default: 100)\n * @param options.offset - Number of memories to skip for pagination (default: 0)\n * @param options.metadata_filters - Optional metadata filters using MongoDB-like operators.\n * Supported operators: $eq, $ne, $in, $nin, $exists, $and, $or\n *\n * @returns Promise resolving to array of MemoryResponse objects\n *\n * @example\n * // Get all playground memories excluding conversations\n * const memories = await client.listMemories({\n * collection_ids: ['collection-id'],\n * metadata_filters: {\n * 'metadata.content_type': { $ne: 'conversation' }\n * }\n * });\n *\n * @example\n * // Complex filter with multiple conditions\n * const memories = await client.listMemories({\n * collection_ids: ['collection-id'],\n * metadata_filters: {\n * $and: [\n * { 'metadata.playground': { $eq: true } },\n * { 'metadata.session_id': { $exists: true } }\n * ]\n * }\n * });\n */\n async listMemories(options: {\n collection_ids: string | string[];\n limit?: number;\n offset?: number;\n metadata_filters?: Record<string, unknown>;\n }): Promise<Memory[]> {\n const ids = Array.isArray(options.collection_ids) ? options.collection_ids : [options.collection_ids];\n if (!ids.length) {\n throw new NebulaClientException('collection_ids must be provided to list_memories().');\n }\n\n const params: Record<string, unknown> = {\n limit: options.limit ?? 100,\n offset: options.offset ?? 0,\n collection_ids: ids\n };\n\n // Add metadata_filters if provided (serialize to JSON string for query parameter)\n if (options.metadata_filters) {\n params.metadata_filters = JSON.stringify(options.metadata_filters);\n }\n\n const response = await this._makeRequest('GET', '/v1/memories', undefined, params) as { results?: unknown[] } | unknown[] | unknown;\n\n let documents: unknown[];\n if (typeof response === 'object' && response !== null && 'results' in response) {\n documents = (response as { results: unknown[] }).results;\n } else if (Array.isArray(response)) {\n documents = response;\n } else {\n documents = [response];\n }\n\n return documents.map((doc) => this._memoryResponseFromDict(doc as Record<string, unknown>, ids));\n }\n\n /** Get a specific memory by engram ID */\n async getMemory(memoryId: string): Promise<Memory> {\n const response = await this._makeRequest('GET', `/v1/memories/${memoryId}`) as { text?: string; content?: string; chunks?: unknown[]; id?: string; metadata?: Record<string, unknown>; collection_ids?: string[] };\n\n const content = response.text || response.content;\n const chunks = Array.isArray(response.chunks) ? response.chunks : undefined;\n\n const memoryData = {\n id: response.id,\n content,\n chunks,\n metadata: response.metadata || {},\n collection_ids: response.collection_ids || [],\n };\n\n return this._memoryResponseFromDict(memoryData, []);\n }\n\n // Search Methods\n\n /**\n * Search within specific collections with optional metadata filtering.\n *\n * @param options - Search configuration\n * @param options.query - Search query string\n * @param options.collection_ids - One or more collection IDs to search within\n * @param options.effort - Compute effort budget (auto/low/medium/high). Controls traversal compute, not MemoryResponse size.\n * @param options.filters - Optional filters to apply to the search. Supports comprehensive metadata filtering\n * with MongoDB-like operators for both vector/chunk search and graph search.\n * @param options.searchSettings - Optional search configuration\n *\n * @returns Promise resolving to array of SearchResult objects containing both vector/chunk and graph search results\n *\n * @example\n * // Basic equality filter\n * await client.search({\n * query: \"machine learning\",\n * collection_ids: [\"research-collection\"],\n * filters: {\n * \"metadata.category\": { $eq: \"research\" },\n * \"metadata.verified\": true // Shorthand for $eq\n * }\n * });\n *\n * @example\n * // Numeric comparisons\n * await client.search({\n * query: \"high priority\",\n * collection_ids: [\"tasks\"],\n * filters: {\n * \"metadata.priority\": { $gte: 8 },\n * \"metadata.score\": { $lt: 100 }\n * }\n * });\n *\n * @example\n * // String matching\n * await client.search({\n * query: \"employees\",\n * collection_ids: [\"team\"],\n * filters: {\n * \"metadata.email\": { $ilike: \"%@company.com\" } // Case-insensitive\n * }\n * });\n *\n * @example\n * // Array operations\n * await client.search({\n * query: \"developers\",\n * collection_ids: [\"team\"],\n * filters: {\n * \"metadata.skills\": { $overlap: [\"python\", \"typescript\"] } // Has any\n * }\n * });\n *\n * @example\n * // Nested paths\n * await client.search({\n * query: \"users\",\n * collection_ids: [\"profiles\"],\n * filters: {\n * \"metadata.user.preferences.theme\": { $eq: \"dark\" }\n * }\n * });\n *\n * @example\n * // Complex logical combinations\n * await client.search({\n * query: \"candidates\",\n * collection_ids: [\"hiring\"],\n * filters: {\n * $and: [\n * { \"metadata.verified\": true },\n * { \"metadata.level\": { $gte: 5 } },\n * {\n * $or: [\n * { \"metadata.skills\": { $overlap: [\"python\", \"go\"] } },\n * { \"metadata.years_experience\": { $gte: 8 } }\n * ]\n * }\n * ]\n * }\n * });\n *\n * @remarks\n * Supported Operators:\n * - Comparison: $eq, $ne, $lt, $lte, $gt, $gte\n * - String: $like (case-sensitive), $ilike (case-insensitive)\n * - Array: $in, $nin, $overlap, $contains\n * - JSONB: $json_contains\n * - Logical: $and, $or\n *\n * For comprehensive filtering documentation, see the Metadata Filtering Guide:\n * https://docs.nebulacloud.app/guides/metadata-filtering\n */\n async search(options: {\n query: string;\n collection_ids?: string | string[];\n effort?: 'auto' | 'low' | 'medium' | 'high';\n filters?: Record<string, unknown>;\n searchSettings?: Record<string, unknown>;\n }): Promise<MemoryResponse> {\n // Build request data - pass params directly to API (no wrapping needed)\n const data: Record<string, unknown> = {\n query: options.query,\n };\n\n if (options.effort) {\n data.effort = options.effort;\n }\n\n // Add collection_ids if provided\n if (options.collection_ids) {\n const collectionIds = Array.isArray(options.collection_ids) ? options.collection_ids : [options.collection_ids];\n const validCollectionIds = collectionIds.filter(id => id && id.trim() !== '');\n if (validCollectionIds.length) {\n data.collection_ids = validCollectionIds;\n }\n }\n\n // Add filters if provided\n if (options.filters) {\n data.filters = options.filters;\n }\n\n // Add advanced search settings if provided\n if (options.searchSettings) {\n data.search_settings = options.searchSettings;\n }\n\n const response = await this._makeRequest('POST', '/v1/memories/search', data) as { results?: MemoryResponse };\n\n // Backend returns MemoryRecall wrapped in { results: MemoryResponse }\n // The @base_endpoint decorator always wraps successful responses as {\"results\": MemoryResponse}\n const memoryResponseData = response.results as MemoryResponse;\n\n // Ensure we have a proper MemoryResponse structure with all fields\n const memoryResponse: MemoryResponse = {\n query: memoryResponseData.query || options.query,\n entities: memoryResponseData.entities || [],\n facts: memoryResponseData.facts || [],\n utterances: memoryResponseData.utterances || [],\n inference_hints: (memoryResponseData as any).inference_hints || [],\n fact_to_chunks: memoryResponseData.fact_to_chunks || {},\n entity_to_facts: memoryResponseData.entity_to_facts || {},\n retrieved_at: memoryResponseData.retrieved_at || new Date().toISOString(),\n focus: memoryResponseData.focus,\n total_traversal_time_ms: memoryResponseData.total_traversal_time_ms,\n query_intent: memoryResponseData.query_intent,\n };\n\n return memoryResponse;\n }\n\n // Health Check\n async healthCheck(): Promise<Record<string, unknown>> {\n return this._makeRequest('GET', '/v1/health') as Promise<Record<string, unknown>>;\n }\n\n // Helpers\n\n private _collectionFromDict(data: Record<string, unknown>): Collection {\n let createdAt: string | undefined;\n if (data.created_at) {\n if (typeof data.created_at === 'string') {\n createdAt = data.created_at;\n } else if (data.created_at instanceof Date) {\n createdAt = data.created_at.toISOString();\n }\n }\n\n let updatedAt: string | undefined;\n if (data.updated_at) {\n if (typeof data.updated_at === 'string') {\n updatedAt = data.updated_at;\n } else if (data.updated_at instanceof Date) {\n updatedAt = data.updated_at.toISOString();\n }\n }\n\n const collectionId = String(data.id || '');\n const collectionName = String(data.name || '');\n const collectionDescription = typeof data.description === 'string' ? data.description : undefined;\n const collectionOwnerId = data.owner_id ? String(data.owner_id) : undefined;\n const memoryCount = typeof data.memory_count === 'number' ? data.memory_count : 0;\n\n const metadata: Record<string, unknown> = {\n graph_collection_status: String(data.graph_collection_status || ''),\n graph_sync_status: String(data.graph_sync_status || ''),\n user_count: typeof data.user_count === 'number' ? data.user_count : 0,\n };\n\n return {\n id: collectionId,\n name: collectionName,\n description: collectionDescription,\n metadata,\n created_at: createdAt,\n updated_at: updatedAt,\n memory_count: memoryCount,\n owner_id: collectionOwnerId,\n };\n }\n\n private _memoryResponseFromDict(data: Record<string, unknown>, collectionIds: string[]): Memory {\n let createdAt: string | undefined;\n if (data.created_at) {\n if (typeof data.created_at === 'string') {\n createdAt = data.created_at;\n } else if (data.created_at instanceof Date) {\n createdAt = data.created_at.toISOString();\n }\n }\n\n let updatedAt: string | undefined;\n if (data.updated_at) {\n if (typeof data.updated_at === 'string') {\n updatedAt = data.updated_at;\n } else if (data.updated_at instanceof Date) {\n updatedAt = data.updated_at.toISOString();\n }\n }\n\n const engramId = String(data.id || '');\n const content = typeof data.content === 'string' ? data.content : (typeof data.text === 'string' ? data.text : undefined);\n let chunks: Chunk[] | undefined;\n\n if (data.chunks && Array.isArray(data.chunks)) {\n if (data.chunks.every((x: unknown) => typeof x === 'string')) {\n chunks = (data.chunks as string[]).map((text: string) => ({\n id: '',\n content: text,\n metadata: {},\n }));\n } else {\n chunks = (data.chunks as Array<Record<string, unknown>>)\n .filter((item: Record<string, unknown>) => item && typeof item === 'object' && ('text' in item || 'content' in item))\n .map((item: Record<string, unknown>) => ({\n id: String(item.id || ''),\n content: String(item.text || item.content || ''),\n metadata: typeof item.metadata === 'object' && item.metadata !== null ? item.metadata as Record<string, unknown> : {},\n role: typeof item.role === 'string' ? item.role : undefined,\n }));\n }\n }\n\n const metadata: Record<string, unknown> = { ...(typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {}) };\n if (data.engram_id) {\n metadata.engram_id = data.engram_id;\n }\n\n let finalId = engramId;\n if (data.engram_id && !engramId) {\n finalId = String(data.engram_id);\n }\n\n if (data.document_metadata && typeof data.document_metadata === 'object') {\n Object.assign(metadata, data.document_metadata as Record<string, unknown>);\n }\n\n return {\n id: finalId,\n memory_id: finalId,\n content,\n chunks,\n metadata,\n collection_ids: Array.isArray(data.collection_ids) ? data.collection_ids as string[] : collectionIds,\n created_at: createdAt,\n updated_at: updatedAt,\n };\n }\n\n private _searchResultFromDict(data: Record<string, unknown>): SearchResult {\n const content = typeof data.content === 'string' ? data.content : (typeof data.text === 'string' ? data.text : '');\n const resultId = String(data.id || data.chunk_id || '');\n\n return {\n id: String(resultId),\n content: String(content),\n score: typeof data.score === 'number' ? data.score : Number(data.score || 0.0),\n metadata: typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {},\n source: typeof data.source === 'string' ? data.source : undefined,\n };\n }\n\n private _searchResultFromGraphDict(data: Record<string, unknown>): SearchResult {\n const rid = data.id ? String(data.id) : '';\n const resultTypeStr = typeof data.result_type === 'string' ? data.result_type : 'entity';\n const rtype =\n GraphSearchResultType[resultTypeStr.toUpperCase() as keyof typeof GraphSearchResultType] ||\n GraphSearchResultType.ENTITY;\n const content = (typeof data.content === 'object' && data.content !== null ? data.content : {}) as Record<string, unknown>;\n const score = data.score !== undefined ? Number(data.score) : 0.0;\n const metadata: Record<string, unknown> = typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {};\n const chunkIds = Array.isArray(data.chunk_ids) ? data.chunk_ids as string[] : undefined;\n let timestamp: string | undefined;\n if (data.timestamp) {\n if (typeof data.timestamp === 'string') {\n timestamp = data.timestamp;\n } else if (data.timestamp instanceof Date) {\n timestamp = data.timestamp.toISOString();\n } else {\n const parsed = new Date(String(data.timestamp));\n if (!Number.isNaN(parsed.valueOf())) {\n timestamp = parsed.toISOString();\n }\n }\n }\n\n const displayName = typeof data.display_name === 'string' ? data.display_name : undefined;\n const sourceRole = typeof data.source_role === 'string' ? data.source_role : undefined;\n const engramId = data.engram_id ? String(data.engram_id) : undefined;\n const ownerId = data.owner_id ? String(data.owner_id) : undefined;\n\n let entity: GraphEntityResult | undefined;\n let rel: GraphRelationshipResult | undefined;\n let comm: GraphCommunityResult | undefined;\n\n if (rtype === GraphSearchResultType.ENTITY) {\n entity = {\n id: content.id ? String(content.id) : undefined,\n name: String(content.name || ''),\n description: String(content.description || ''),\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n } else if (rtype === GraphSearchResultType.RELATIONSHIP) {\n rel = {\n id: content.id ? String(content.id) : undefined,\n subject: String(content.subject || ''),\n predicate: String(content.predicate || ''),\n object: String(content.object || ''),\n subject_id: content.subject_id ? String(content.subject_id) : undefined,\n object_id: content.object_id ? String(content.object_id) : undefined,\n description: typeof content.description === 'string' ? content.description : undefined,\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n } else {\n comm = {\n id: content.id ? String(content.id) : undefined,\n name: String(content.name || ''),\n summary: String(content.summary || ''),\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n }\n\n return {\n id: rid,\n score,\n metadata,\n source: 'graph',\n content: undefined,\n graph_result_type: rtype,\n graph_entity: entity,\n graph_relationship: rel,\n graph_community: comm,\n chunk_ids: chunkIds,\n timestamp,\n display_name: displayName,\n source_role: sourceRole,\n engram_id: engramId,\n owner_id: ownerId,\n };\n }\n\n private async _sha256(message: string): Promise<string> {\n const msgBuffer = new TextEncoder().encode(message);\n // Use Web Crypto API: prefer globalThis.crypto (browser/Node 18+), fallback to Node's crypto.webcrypto\n let crypto: Crypto;\n if (typeof globalThis.crypto !== 'undefined' && globalThis.crypto.subtle) {\n crypto = globalThis.crypto;\n } else {\n // Node.js environment: use built-in crypto module's webcrypto\n const nodeCrypto = await import('crypto');\n crypto = nodeCrypto.webcrypto as Crypto;\n }\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n }\n\n private _formDataFromObject(obj: Record<string, unknown>): FormData {\n const formData = new FormData();\n Object.entries(obj).forEach(([key, value]) => {\n formData.append(key, value as string | Blob);\n });\n return formData;\n }\n\n /**\n * Convert and process multimodal content parts, auto-uploading large base64 files to S3.\n *\n * - Binary parts (`image`/`audio`/`document` with `data`) larger than 5MB are uploaded to S3 and converted to `s3_ref`.\n */\n private async _processContentParts(contentParts: MultimodalContentPart[]): Promise<MultimodalContentPart[]> {\n const processed: MultimodalContentPart[] = [];\n\n for (const part of contentParts) {\n // Safe check for binary file content parts\n // We check if it is NOT a known non-binary type (text, s3_ref, url, image_url)\n // And explicitly check for 'data' property presence to satisfy TS\n if (\n part.type !== 'text' &&\n part.type !== 's3_ref' &&\n 'data' in part &&\n part.data\n ) {\n // Now TS knows 'part' has 'data'\n const filePart = part as FileContentPart;\n\n // Calculate decoded size (base64 is ~4/3 of original)\n const dataSize = Math.floor(String(filePart.data).length * 3 / 4);\n\n if (dataSize > Nebula.MAX_INLINE_SIZE) {\n const filename = filePart.filename || `file.bin`;\n const mediaType = filePart.media_type || 'application/octet-stream';\n\n const uploadInfo = await this.getUploadUrl({\n filename,\n content_type: mediaType,\n file_size: dataSize,\n });\n\n // Decode base64 and upload to S3\n let bytes: Uint8Array;\n const atobFn = (globalThis as unknown as { atob?: (data: string) => string }).atob;\n if (typeof atobFn === 'function') {\n const binaryString = atobFn(String(filePart.data));\n bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n } else {\n // Node.js fallback\n const { Buffer } = await import('buffer');\n bytes = Uint8Array.from(Buffer.from(String(filePart.data), 'base64'));\n }\n\n await fetch(uploadInfo.upload_url, {\n method: 'PUT',\n body: bytes as unknown as BodyInit,\n headers: { 'Content-Type': mediaType },\n });\n\n processed.push({\n type: 's3_ref',\n s3_key: uploadInfo.s3_key,\n media_type: mediaType,\n filename,\n });\n continue;\n }\n }\n\n processed.push(part);\n }\n\n return processed;\n }\n\n /**\n * Get a presigned URL for uploading large files to S3.\n */\n async getUploadUrl(options: {\n filename: string;\n content_type: string;\n file_size: number;\n }): Promise<{ upload_url: string; s3_key: string; bucket: string; expires_in: number }> {\n const response = await this._makeRequest('POST', '/v1/memories/upload', undefined, {\n filename: options.filename,\n content_type: options.content_type,\n file_size: options.file_size,\n }) as { results?: { upload_url: string; s3_key: string; bucket: string; expires_in: number }; upload_url?: string; s3_key?: string; bucket?: string; expires_in?: number };\n\n if (response.results) {\n return response.results;\n }\n return response as { upload_url: string; s3_key: string; bucket: string; expires_in: number };\n }\n}\n","import {\n FileContentPart\n} from './types';\n\nconst MIME_TYPES: Record<string, string> = {\n // Images\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".png\": \"image/png\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".heic\": \"image/heic\",\n \".bmp\": \"image/bmp\",\n \".tiff\": \"image/tiff\",\n // Audio\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/wav\",\n \".m4a\": \"audio/m4a\",\n \".ogg\": \"audio/ogg\",\n \".flac\": \"audio/flac\",\n \".aac\": \"audio/aac\",\n \".webm\": \"audio/webm\",\n // Documents\n \".pdf\": \"application/pdf\",\n \".doc\": \"application/msword\",\n \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".ppt\": \"application/vnd.ms-powerpoint\",\n \".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \".txt\": \"text/plain\",\n \".csv\": \"text/csv\",\n \".rtf\": \"application/rtf\",\n \".epub\": \"application/epub+zip\",\n};\n\n/**\n * Utility for creating multimodal content from files.\n * Note: These methods only work in Node.js environments.\n */\nexport class NebulaContent {\n /**\n * Create a FileContentPart from a file path.\n * Automatically deduces media_type and the backend 'type' (image, audio, document).\n */\n static async fromFile(filePath: string, mediaType?: string): Promise<FileContentPart> {\n let fs: typeof import('fs/promises');\n let path: typeof import('path');\n\n try {\n fs = await import('fs/promises');\n path = await import('path');\n } catch (e) {\n throw new Error('File system operations are only supported in Node.js environments.');\n }\n\n const absolutePath = path.resolve(filePath);\n const fileName = path.basename(absolutePath);\n const ext = path.extname(absolutePath).toLowerCase();\n\n const detectedMime = mediaType || MIME_TYPES[ext] || \"application/octet-stream\";\n\n const buffer = await fs.readFile(absolutePath);\n const data = buffer.toString('base64');\n\n return {\n data,\n media_type: detectedMime,\n filename: fileName\n };\n }\n}\n","// Main Client\nexport { Nebula } from './client';\nexport { Nebula as default } from './client';\n\n// Content Helper (Legacy/Internal)\nexport { NebulaContent } from './content';\n\n// Import Types to Merge/Re-export\nimport { NebulaContent } from './content';\nimport { Memory as MemoryType } from './types';\n\n// 1. Export Memory Factory Function (Value) - Acts like Python's class constructor\n// Using Object.assign pattern to avoid @typescript-eslint/no-namespace error\n\ntype MemoryFactory = {\n (data: MemoryType): MemoryType;\n File: typeof NebulaContent.fromFile;\n fromFile: (\n filePath: string,\n collection_id: string,\n metadata?: Record<string, unknown>,\n role?: string\n ) => Promise<MemoryType>;\n};\n\nconst MemoryBase = (data: MemoryType): MemoryType => data;\n\nexport const Memory: MemoryFactory = Object.assign(MemoryBase, {\n /**\n * Helper to create a file content part from a file path.\n * Alias for NebulaContent.fromFile().\n */\n File: NebulaContent.fromFile,\n\n /**\n * Helper to create a complete Memory object from a single file.\n */\n async fromFile(\n filePath: string,\n collection_id: string,\n metadata?: Record<string, unknown>,\n role?: string\n ): Promise<MemoryType> {\n return {\n collection_id,\n content: [await NebulaContent.fromFile(filePath)],\n metadata: metadata || {},\n role\n };\n }\n});\n\n// 3. Export Memory Interface (Type) - Merged with Value\nexport type Memory = MemoryType;\n\n// 4. Re-export all other types explicitly (excluding Memory to avoid conflict)\nexport {\n GraphSearchResultType,\n Chunk,\n StructuredChunk,\n MemoryResponse,\n TextContentPart,\n FileContentPart,\n S3FileReferencePart,\n MultimodalContentPart,\n // Memory is exported above\n Collection,\n SearchResult,\n GraphEntityResult,\n GraphRelationshipResult,\n GraphCommunityResult,\n SearchOptions,\n RecallFocus,\n ActivatedEntity,\n ActivatedFact,\n ActivatedFacet,\n GroundedUtterance,\n NebulaClientConfig,\n NebulaException,\n NebulaClientException,\n NebulaAuthenticationException,\n NebulaRateLimitException,\n NebulaValidationException,\n NebulaCollectionNotFoundException,\n NebulaNotFoundException\n} from './types';\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types.ts","../src/client.ts","../src/content.ts","../src/index.ts"],"names":["GraphSearchResultType","memRecord","multimodalParts","response","Memory"],"mappings":"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","file":"index.mjs","sourcesContent":["// Data models matching the actual Nebula Python SDK exactly\n\n// Enums\nexport enum GraphSearchResultType {\n ENTITY = \"entity\",\n RELATIONSHIP = \"relationship\",\n COMMUNITY = \"community\"\n}\n\n// Core interfaces matching Python SDK exactly\nexport interface Chunk {\n id: string;\n content: string;\n metadata: Record<string, unknown>;\n role?: string; // For conversation messages\n}\n\n/**\n * Structured chunk format returned by backend for conversation messages.\n * Contains message text and role metadata inline.\n */\nexport interface StructuredChunk {\n text: string;\n role: 'user' | 'assistant' | 'system';\n}\n\n\n\n// Multimodal content part types\nexport interface TextContentPart {\n type: 'text';\n text: string;\n}\n\nexport interface FileContentPart {\n type?: 'image' | 'audio' | 'document' | 'file';\n data: string; // Base64 encoded data\n media_type: string; // MIME type\n filename?: string;\n duration_seconds?: number; // Specific to audio\n}\n\nexport interface S3FileReferencePart {\n type: 's3_ref';\n s3_key: string;\n bucket?: string;\n media_type: string;\n filename?: string;\n size_bytes?: number;\n}\n\nexport type MultimodalContentPart =\n | TextContentPart\n | FileContentPart\n | S3FileReferencePart;\n\nexport interface Memory {\n collection_id?: string;\n content?: string | string[] | MultimodalContentPart[] | Array<{ content: string | MultimodalContentPart[]; role: string; metadata?: Record<string, unknown>; authority?: number }>;\n role?: string; // user, assistant, or custom\n id?: string; // Memory/Engram UUID\n memory_id?: string; // Alias for id, for backward compatibility\n metadata: Record<string, unknown>;\n authority?: number; // Optional authority score (0.0 - 1.0)\n\n // Read-only fields (populated from server response)\n chunks?: Chunk[];\n collection_ids?: string[];\n created_at?: string;\n updated_at?: string;\n}\n\nexport interface Collection {\n id: string;\n name: string;\n description?: string;\n metadata: Record<string, unknown>;\n created_at?: string;\n updated_at?: string;\n memory_count: number;\n owner_id?: string;\n}\n\nexport interface SearchResult {\n id: string; // chunk_id\n score: number;\n metadata: Record<string, unknown>;\n source?: string;\n timestamp?: string;\n display_name?: string;\n source_role?: string;\n memory_id?: string; // Parent memory/conversation container\n owner_id?: string;\n engram_id?: string; // Engram ID for graph results\n\n // Chunk fields\n content?: string;\n\n // Graph variant discriminator and payload\n graph_result_type?: GraphSearchResultType;\n graph_entity?: GraphEntityResult;\n graph_relationship?: GraphRelationshipResult;\n graph_community?: GraphCommunityResult;\n chunk_ids?: string[];\n}\n\nexport interface GraphEntityResult {\n id?: string;\n name: string;\n description: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface GraphRelationshipResult {\n id?: string;\n subject: string;\n predicate: string;\n object: string;\n subject_id?: string;\n object_id?: string;\n description?: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface GraphCommunityResult {\n id?: string;\n name: string;\n summary: string;\n metadata: Record<string, unknown>;\n}\n\nexport interface SearchOptions {\n limit: number;\n filters?: Record<string, unknown>;\n}\n\n// Hierarchical Memory Recall types (matches backend MemoryRecall structure)\nexport interface RecallFocus {\n schema_weight: number;\n fact_weight: number;\n episodic_weight: number;\n}\n\nexport interface ActivatedEntity {\n entity_id: string;\n entity_name: string;\n entity_category?: string;\n activation_score: number;\n activation_reason?: string;\n profile?: any;\n facets?: ActivatedFacet[];\n}\n\nexport interface ActivatedFacet {\n facet_id: string;\n facet_name: string;\n relevance_score: number;\n facts: ActivatedFact[];\n coherence_score?: number;\n is_noise: boolean;\n}\n\nexport interface ActivatedFact {\n fact_id: string;\n entity_id?: string;\n entity_name?: string;\n facet_name?: string;\n subject: string;\n predicate: string;\n object_value: string;\n activation_score: number;\n extraction_confidence: number;\n corroboration_count: number;\n source_chunk_ids: string[];\n}\n\nexport interface GroundedUtterance {\n chunk_id: string;\n text: string;\n activation_score: number;\n timestamp?: string;\n source_role?: string;\n speaker_name?: string;\n display_name?: string;\n engram_id?: string;\n owner_id?: string;\n supporting_fact_ids: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface InferenceHint {\n term: string;\n predicate: string;\n object: string;\n\n inferred?: boolean;\n confidence?: number;\n\n ledger_p_use?: number;\n ledger_p_true?: number;\n ledger_p_stable?: number;\n\n usable_for_rewrite?: boolean;\n used_for_rewrite?: boolean;\n\n relationship_id?: string;\n subject_id?: string;\n object_id?: string;\n\n metadata?: Record<string, unknown>;\n inference_metadata?: Record<string, unknown>;\n}\n\nexport interface MemoryResponse {\n query: string;\n entities: ActivatedEntity[];\n facts: ActivatedFact[];\n utterances: GroundedUtterance[];\n inference_hints?: InferenceHint[];\n focus?: RecallFocus;\n fact_to_chunks: Record<string, string[]>;\n entity_to_facts: Record<string, string[]>;\n retrieved_at: string;\n total_traversal_time_ms?: number;\n query_intent?: string;\n}\n\n// Configuration interface\nexport interface NebulaClientConfig {\n apiKey: string;\n baseUrl?: string;\n timeout?: number;\n}\n\n// Error types matching Python SDK\nexport class NebulaException extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public details?: unknown\n ) {\n super(message);\n this.name = 'NebulaException';\n }\n}\n\nexport class NebulaClientException extends NebulaException {\n constructor(message: string, public cause?: Error) {\n super(message);\n this.name = 'NebulaClientException';\n }\n}\n\nexport class NebulaAuthenticationException extends NebulaException {\n constructor(message: string = 'Invalid API key') {\n super(message, 401);\n this.name = 'NebulaAuthenticationException';\n }\n}\n\nexport class NebulaRateLimitException extends NebulaException {\n constructor(message: string = 'Rate limit exceeded') {\n super(message, 429);\n this.name = 'NebulaRateLimitException';\n }\n}\n\nexport class NebulaValidationException extends NebulaException {\n constructor(message: string = 'Validation error', public details?: unknown) {\n super(message, 400);\n this.name = 'NebulaValidationException';\n }\n}\n\nexport class NebulaCollectionNotFoundException extends NebulaException {\n constructor(message: string = 'Collection not found') {\n super(message, 404);\n this.name = 'NebulaCollectionNotFoundException';\n }\n}\n\nexport class NebulaNotFoundException extends NebulaException {\n constructor(resourceId: string, resourceType: string = 'Resource') {\n super(`${resourceType} not found: ${resourceId}`, 404);\n this.name = 'NebulaNotFoundException';\n }\n}\n","import {\n Memory,\n MemoryResponse,\n Collection,\n SearchResult,\n GraphSearchResultType,\n GraphEntityResult,\n GraphRelationshipResult,\n GraphCommunityResult,\n NebulaClientConfig,\n NebulaException,\n NebulaClientException,\n NebulaAuthenticationException,\n NebulaRateLimitException,\n NebulaValidationException,\n NebulaNotFoundException,\n Chunk,\n MultimodalContentPart,\n FileContentPart,\n} from './types';\n\ntype ApiEnvelope<T> = { results: T };\n\n/**\n * Official Nebula JavaScript/TypeScript SDK\n * Mirrors the exact Nebula Python SDK client.py implementation\n */\nexport class Nebula {\n private apiKey: string;\n private baseUrl: string;\n private timeout: number;\n\n // Files larger than 5MB are automatically uploaded to S3\n private static readonly MAX_INLINE_SIZE = 5 * 1024 * 1024; // 5MB\n\n constructor(config: NebulaClientConfig = {} as NebulaClientConfig) {\n this.apiKey = config.apiKey;\n if (!this.apiKey) {\n throw new NebulaClientException(\n 'API key is required. Pass it to the constructor or set NEBULA_API_KEY environment variable.'\n );\n }\n\n this.baseUrl = (config.baseUrl || 'https://api.nebulacloud.app').replace(/\\/$/, '');\n this.timeout = config.timeout || 30000;\n }\n\n // Public mutators used by tests\n setApiKey(next: string) {\n this.apiKey = next;\n }\n setBaseUrl(next: string) {\n this.baseUrl = (next || this.baseUrl).replace(/\\/$/, '');\n }\n // Kept for backwards-compat tests; no-op in current implementation\n setCorsProxy(_next: string) {\n // no-op\n }\n\n /** Check if API key is set */\n isApiKeySet(): boolean {\n return !!(this.apiKey && this.apiKey.trim() !== '');\n }\n\n /** Detect if a token looks like a Nebula API key (public.raw) */\n private _isNebulaApiKey(token?: string): boolean {\n const candidate = token || this.apiKey;\n if (!candidate) return false;\n const parts = candidate.split('.');\n if (parts.length !== 2) return false;\n const [publicPart, rawPart] = parts;\n return (publicPart.startsWith('key_') || publicPart.startsWith('neb_')) && !!rawPart && rawPart.length > 0;\n }\n\n /** Build authentication headers */\n private _buildAuthHeaders(includeContentType: boolean = true): Record<string, string> {\n const headers: Record<string, string> = {};\n\n if (this._isNebulaApiKey()) {\n headers['X-API-Key'] = this.apiKey;\n } else {\n headers['Authorization'] = `Bearer ${this.apiKey}`;\n }\n\n if (includeContentType) {\n headers['Content-Type'] = 'application/json';\n }\n\n return headers;\n }\n\n private _isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n }\n\n private _unwrapResults<T>(value: unknown): T {\n if (this._isRecord(value) && 'results' in value) {\n return (value as ApiEnvelope<T>).results;\n }\n return value as T;\n }\n\n private _unwrapResultsArray<T>(value: unknown): T[] {\n const unwrapped = this._unwrapResults<unknown>(value);\n if (Array.isArray(unwrapped)) {\n return unwrapped as T[];\n }\n if (unwrapped === undefined || unwrapped === null) {\n return [];\n }\n return [unwrapped as T];\n }\n\n private _looksLikeMultimodalContent(content: unknown): content is unknown[] {\n if (!Array.isArray(content)) return false;\n return content.some((part) => {\n if (!this._isRecord(part)) return false;\n if (typeof part.type === 'string') return true;\n if ('data' in part || 's3_key' in part || 'url' in part) return true;\n return false;\n });\n }\n\n private _normalizeContentParts(contentParts: unknown[]): MultimodalContentPart[] {\n return contentParts.map((part) => {\n if (typeof part === 'string') {\n return { type: 'text', text: part } satisfies MultimodalContentPart;\n }\n\n if (!this._isRecord(part)) {\n return { type: 'text', text: String(part) } satisfies MultimodalContentPart;\n }\n\n if (typeof part.type === 'string') {\n return part as unknown as MultimodalContentPart;\n }\n\n if ('s3_key' in part && typeof part.s3_key === 'string') {\n return {\n type: 's3_ref',\n s3_key: part.s3_key,\n bucket: typeof part.bucket === 'string' ? part.bucket : undefined,\n media_type: typeof part.media_type === 'string' ? part.media_type : 'application/octet-stream',\n filename: typeof part.filename === 'string' ? part.filename : undefined,\n size_bytes: typeof part.size_bytes === 'number' ? part.size_bytes : undefined,\n } satisfies MultimodalContentPart;\n }\n\n if ('data' in part && typeof part.data === 'string') {\n return {\n type: 'file',\n data: part.data,\n media_type: typeof part.media_type === 'string' ? part.media_type : 'application/octet-stream',\n filename: typeof part.filename === 'string' ? part.filename : undefined,\n duration_seconds: typeof part.duration_seconds === 'number' ? part.duration_seconds : undefined,\n } satisfies MultimodalContentPart;\n }\n\n return { type: 'text', text: String(part) } satisfies MultimodalContentPart;\n });\n }\n\n private async _serializeContentAsText(content: unknown): Promise<string> {\n if (this._looksLikeMultimodalContent(content)) {\n const normalized = this._normalizeContentParts(content);\n const processed = await this._processContentParts(normalized);\n return JSON.stringify(processed);\n }\n if (typeof content === 'object' && content !== null) {\n return JSON.stringify(content);\n }\n return String(content ?? '');\n }\n\n private async _serializeContentAsParts(content: unknown): Promise<MultimodalContentPart[] | null> {\n if (!this._looksLikeMultimodalContent(content)) return null;\n const normalized = this._normalizeContentParts(content as unknown[]);\n return await this._processContentParts(normalized);\n }\n\n /** Make an HTTP request to the Nebula API */\n private async _makeRequest(\n method: string,\n endpoint: string,\n jsonData?: unknown, // Can be object, array, or primitive for JSON body\n params?: Record<string, unknown>\n ): Promise<unknown> {\n const url = new URL(endpoint, this.baseUrl);\n\n if (params) {\n Object.entries(params).forEach(([key, value]) => {\n if (value !== undefined && value !== null) {\n // Handle array parameters (e.g., collection_ids)\n if (Array.isArray(value)) {\n value.forEach((item) => {\n url.searchParams.append(key, String(item));\n });\n } else {\n url.searchParams.append(key, String(value));\n }\n }\n });\n }\n\n const headers = this._buildAuthHeaders(true);\n\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const response = await fetch(url.toString(), {\n method,\n headers,\n body: jsonData ? JSON.stringify(jsonData) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (response.status === 200 || response.status === 202) {\n return await response.json();\n } else if (response.status === 401) {\n throw new NebulaAuthenticationException('Invalid API key');\n } else if (response.status === 429) {\n throw new NebulaRateLimitException('Rate limit exceeded');\n } else if (response.status === 400) {\n const errorData = await response.json().catch(() => ({}));\n throw new NebulaValidationException(errorData.message || 'Validation error', errorData.details);\n } else if (response.status === 422) {\n const errorData = await response.json().catch(() => ({}));\n console.error('[SDK] 422 Validation error - Full details:');\n console.error(' Status:', response.status);\n console.error(' Error data:', JSON.stringify(errorData, null, 2));\n console.error(' Message:', errorData.message);\n console.error(' Detail:', errorData.detail);\n throw new NebulaValidationException(\n errorData.message || (typeof errorData.detail === 'string' ? errorData.detail : JSON.stringify(errorData.detail)) || 'Validation error',\n errorData\n );\n } else {\n const errorData = await response.json().catch(() => ({}));\n throw new NebulaException(errorData.message || `API error: ${response.status}`, response.status, errorData);\n }\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof NebulaException) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new NebulaClientException(`Request timed out after ${this.timeout} milliseconds`);\n }\n\n if (error instanceof Error) {\n throw new NebulaClientException(`Request failed: ${error.message}`, error);\n }\n\n throw new NebulaClientException(`Request failed: ${String(error)}`);\n }\n }\n\n // Collection Management Methods\n\n /** Create a new collection */\n async createCollection(options: {\n name: string;\n description?: string;\n metadata?: Record<string, unknown>;\n }): Promise<Collection> {\n const data: Record<string, unknown> = { name: options.name };\n if (options.description) data.description = options.description;\n if (options.metadata) data.metadata = options.metadata;\n\n const response = await this._makeRequest('POST', '/v1/collections', data) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get a specific collection by ID */\n async getCollection(collectionId: string): Promise<Collection> {\n const response = await this._makeRequest('GET', `/v1/collections/${collectionId}`) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get a specific collection by name */\n async getCollectionByName(name: string): Promise<Collection> {\n const response = await this._makeRequest('GET', `/v1/collections/name/${name}`) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Get all collections */\n async listCollections(options?: {\n limit?: number;\n offset?: number;\n name?: string;\n }): Promise<Collection[]> {\n const params: Record<string, unknown> = {\n limit: options?.limit ?? 100,\n offset: options?.offset ?? 0\n };\n if (options?.name !== undefined) {\n params.name = options.name;\n }\n const response = await this._makeRequest('GET', '/v1/collections', undefined, params) as { results?: unknown[] } | unknown[] | unknown;\n\n let collections: unknown[];\n if (typeof response === 'object' && response !== null && 'results' in response) {\n collections = (response as { results: unknown[] }).results;\n } else if (Array.isArray(response)) {\n collections = response;\n } else {\n collections = [response];\n }\n\n return collections.map((collection) => this._collectionFromDict(collection as Record<string, unknown>));\n }\n\n /** Update a collection */\n async updateCollection(options: {\n collectionId: string;\n name?: string;\n description?: string;\n metadata?: Record<string, unknown>;\n }): Promise<Collection> {\n const data: Record<string, unknown> = {};\n if (options.name !== undefined) data.name = options.name;\n if (options.description !== undefined) data.description = options.description;\n if (options.metadata !== undefined) data.metadata = options.metadata;\n\n const response = await this._makeRequest('POST', `/v1/collections/${options.collectionId}`, data) as { results?: Record<string, unknown> } | Record<string, unknown>;\n const result = (response as { results?: Record<string, unknown> }).results || response as Record<string, unknown>;\n return this._collectionFromDict(result);\n }\n\n /** Delete a collection */\n async deleteCollection(collectionId: string): Promise<boolean> {\n await this._makeRequest('DELETE', `/v1/collections/${collectionId}`);\n return true;\n }\n\n // Memory Management Methods\n\n /**\n * Legacy convenience: store raw text content into a collection as a document\n */\n async store(content: string, collectionId: string, metadata: Record<string, unknown> = {}): Promise<Memory> {\n const docMetadata = {\n ...metadata,\n memory_type: 'memory',\n timestamp: new Date().toISOString(),\n } as Record<string, unknown>;\n\n const payload = {\n collection_id: collectionId,\n raw_text: String(content || ''),\n metadata: docMetadata,\n ingestion_mode: 'fast',\n } as const;\n\n const response = await this._makeRequest('POST', '/v1/memories', payload) as { results?: { engram_id?: string; id?: string }; id?: string };\n const id = response?.results?.engram_id || response?.results?.id || response?.id || '';\n\n const timestamp = docMetadata.timestamp as string | undefined;\n const result: Memory = {\n id: String(id),\n memory_id: String(id),\n content: String(content || ''),\n metadata: docMetadata,\n collection_ids: [collectionId],\n created_at: timestamp,\n updated_at: timestamp,\n };\n return result;\n }\n\n /**\n * Store a single memory using the unified engrams API.\n *\n * Automatically infers memory type:\n * - If role is present, creates a conversation\n * - Otherwise, creates a document\n */\n async storeMemory(\n memory: Memory | Record<string, unknown>,\n name?: string\n ): Promise<string> {\n let mem: Memory;\n\n if ('collection_id' in memory) {\n mem = memory as Memory;\n } else {\n // Support both camelCase (collectionId) and snake_case (collection_id)\n const memRecord = memory as Record<string, unknown>;\n mem = {\n collection_id: (memRecord.collection_id as string) || (memRecord.collectionId as string) || '',\n content: (memRecord.content as Memory['content']) || '',\n role: memRecord.role as string | undefined,\n memory_id: (memRecord.memory_id as string) || (memRecord.memoryId as string) || undefined,\n metadata: (memRecord.metadata as Record<string, unknown>) || {},\n };\n }\n\n // If memory_id is present, append to existing memory\n if (mem.memory_id) {\n return await this._appendToMemory(mem.memory_id, mem);\n }\n\n // Automatically infer memory type from role presence\n const memoryType = mem.role ? 'conversation' : 'document';\n\n // Handle conversation creation\n if (memoryType === 'conversation') {\n // Use new unified POST /v1/memories endpoint with JSON body\n const messages = [];\n\n // If content and role provided, include as initial message\n if (mem.content && mem.role) {\n const multimodalParts = await this._serializeContentAsParts(mem.content);\n const msgContent = multimodalParts ?? await this._serializeContentAsText(mem.content);\n\n const memRecord = mem as Memory & { authority?: number };\n messages.push({\n content: msgContent,\n role: mem.role,\n metadata: mem.metadata || {},\n ...(typeof memRecord.authority === 'number' ? { authority: Number(memRecord.authority) } : {})\n });\n }\n\n // Backend requires at least one message for conversation creation\n if (messages.length === 0) {\n throw new NebulaClientException('Cannot create conversation without messages. Provide content and role.');\n }\n\n const data = {\n collection_id: mem.collection_id,\n name: name || 'Conversation',\n messages: messages,\n metadata: mem.metadata || {},\n };\n\n const response = await this._makeRequest('POST', '/v1/memories', data) as { results?: { memory_id?: string; id?: string } };\n\n if (response.results) {\n const convId = response.results.memory_id || response.results.id;\n if (!convId) {\n throw new NebulaClientException('Failed to create conversation: no id returned');\n }\n return String(convId);\n }\n throw new NebulaClientException('Failed to create conversation: invalid response format');\n }\n\n // Handle document/text memory\n const docMetadata = { ...mem.metadata } as Record<string, unknown>;\n docMetadata.memory_type = 'memory';\n\n // If authority provided for document, persist in metadata for ranking\n const memRecord = mem as Memory & { authority?: number };\n if (typeof memRecord.authority === 'number') {\n const v = Number(memRecord.authority);\n if (!Number.isNaN(v) && v >= 0 && v <= 1) {\n docMetadata.authority = v;\n }\n }\n\n // If content is multimodal, send content_parts so the backend can run OCR/transcription.\n // If content is an array of strings, send `chunks` (backend supports both raw_text and chunks).\n let payload: Record<string, unknown>;\n const multimodalParts = await this._serializeContentAsParts(mem.content);\n if (multimodalParts) {\n payload = {\n collection_id: mem.collection_id,\n content_parts: multimodalParts,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n } else if (Array.isArray(mem.content) && mem.content.every((x) => typeof x === 'string')) {\n payload = {\n collection_id: mem.collection_id,\n chunks: mem.content,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n } else {\n const contentText = await this._serializeContentAsText(mem.content);\n if (!contentText || contentText === '\"\"' || contentText === '[]' || contentText === '{}') {\n throw new NebulaClientException('Content is required for document memories');\n }\n payload = {\n collection_id: mem.collection_id,\n raw_text: contentText,\n metadata: docMetadata,\n ingestion_mode: 'fast',\n };\n }\n\n const response = await this._makeRequest('POST', '/v1/memories', payload) as { results?: { engram_id?: string; id?: string }; id?: string };\n const id = response?.results?.engram_id || response?.results?.id || response?.id || '';\n return String(id || '');\n }\n\n /**\n * Internal method to append content to an existing memory\n *\n * @throws NebulaNotFoundException if memory_id doesn't exist\n */\n private async _appendToMemory(memoryId: string, memory: Memory): Promise<string> {\n const collectionId = memory.collection_id;\n const content = memory.content;\n const metadata = memory.metadata;\n\n if (!collectionId) {\n throw new NebulaClientException('collection_id is required');\n }\n\n const payload: Record<string, unknown> = {\n collection_id: collectionId,\n };\n\n // Determine content type and set appropriate field\n if (Array.isArray(content)) {\n if (content.length > 0 && typeof content[0] === 'object' && 'content' in content[0]) {\n // Array of message objects (conversation)\n payload.messages = content;\n } else {\n // Array of strings (chunks)\n payload.chunks = content;\n }\n } else if (typeof content === 'string') {\n // Raw text string\n payload.raw_text = content;\n } else {\n throw new NebulaClientException(\n 'content must be a string, array of strings, or array of message objects'\n );\n }\n\n if (metadata) {\n payload.metadata = metadata;\n }\n\n try {\n await this._makeRequest('POST', `/v1/memories/${memoryId}/append`, payload);\n return memoryId;\n } catch (error) {\n // Convert 404 errors to NebulaNotFoundException\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(memoryId, 'Memory');\n }\n throw error;\n }\n }\n\n /** Store multiple memories using the unified engrams API */\n async storeMemories(memories: Memory[]): Promise<string[]> {\n const results: string[] = [];\n const convGroups: Record<string, Memory[]> = {};\n const others: Memory[] = [];\n\n for (const m of memories) {\n if (m.role) {\n const key = m.memory_id || `__new__::${m.collection_id}`;\n if (!convGroups[key]) convGroups[key] = [];\n convGroups[key].push(m);\n } else {\n others.push(m);\n }\n }\n\n // Process conversation groups using new unified API\n for (const [key, group] of Object.entries(convGroups)) {\n const collectionId = group[0].collection_id;\n let convId: string;\n\n // Prepare messages for the conversation\n const messages: Array<{ content: string | MultimodalContentPart[]; role: string; metadata?: Record<string, unknown>; authority?: number }> = [];\n for (const m of group) {\n const multimodalParts = await this._serializeContentAsParts(m.content);\n const msgContent = multimodalParts ?? await this._serializeContentAsText(m.content);\n if (typeof msgContent === 'string') {\n if (!msgContent.trim()) continue;\n } else if (msgContent.length === 0) {\n continue;\n }\n\n const mRecord = m as Memory & { authority?: number };\n messages.push({\n content: msgContent,\n role: m.role!,\n metadata: m.metadata || {},\n ...(typeof mRecord.authority === 'number' ? { authority: Number(mRecord.authority) } : {}),\n });\n }\n\n if (!messages.length) {\n throw new NebulaClientException(\n 'Cannot create/append conversation without messages. Provide non-empty content.'\n );\n }\n\n // Create conversation if needed\n if (key.startsWith('__new__::')) {\n // Create conversation with initial messages using JSON body\n const data = {\n collection_id: collectionId,\n name: 'Conversation',\n messages: messages,\n metadata: {},\n };\n\n const response = await this._makeRequest('POST', '/v1/memories', data) as { results?: { memory_id?: string; id?: string } };\n\n if (response.results) {\n convId = response.results.memory_id || response.results.id || '';\n if (!convId) {\n throw new NebulaClientException('Failed to create conversation: no id returned');\n }\n } else {\n throw new NebulaClientException('Failed to create conversation: invalid response format');\n }\n } else {\n // Append to existing conversation\n convId = key;\n\n const appendMem: Memory = {\n collection_id: collectionId,\n content: messages as Memory['content'],\n memory_id: convId,\n metadata: {},\n };\n await this._appendToMemory(convId, appendMem);\n }\n\n results.push(...Array(group.length).fill(String(convId)));\n }\n\n // Process others (text/json) individually\n for (const m of others) {\n results.push(await this.storeMemory(m));\n }\n\n return results;\n }\n\n /** Delete one or more memories */\n async delete(memoryIds: string | string[]): Promise<boolean | {\n message: string;\n results: {\n successful: string[];\n failed: Array<{ id: string; error: string }>;\n summary: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n }> {\n try {\n console.log('[SDK] delete() called with:', { memoryIds, type: typeof memoryIds, isArray: Array.isArray(memoryIds) });\n\n // Handle single ID vs array\n if (typeof memoryIds === 'string') {\n console.log('[SDK] Single deletion path for ID:', memoryIds);\n // Single deletion - try existing endpoint first for backward compatibility\n try {\n await this._makeRequest('DELETE', `/v1/memories/${memoryIds}`);\n return true;\n } catch {\n // Fall back to new unified endpoint\n console.log('[SDK] Falling back to POST /v1/memories/delete with single ID');\n // Send the UUID string directly as body (not wrapped in {ids: ...})\n const response = await this._makeRequest('POST', '/v1/memories/delete', memoryIds) as { success?: boolean } | boolean;\n return typeof response === 'object' && response.success !== undefined\n ? response.success\n : true;\n }\n } else {\n console.log('[SDK] Batch deletion path for IDs:', memoryIds);\n console.log('[SDK] Sending POST request with body:', memoryIds);\n // Batch deletion - send array directly as body (not wrapped in {ids: ...})\n // FastAPI Body() without embed=True expects the value directly\n const response = await this._makeRequest('POST', '/v1/memories/delete', memoryIds) as boolean | {\n message: string;\n results: {\n successful: string[];\n failed: Array<{ id: string; error: string }>;\n summary: {\n total: number;\n succeeded: number;\n failed: number;\n };\n };\n };\n console.log('[SDK] Batch deletion response:', response);\n return response;\n }\n } catch (error) {\n console.error('[SDK] Delete error:', error);\n if (error instanceof Error) {\n throw error;\n }\n throw new NebulaClientException(`Unknown error: ${String(error)}`);\n }\n }\n\n /** Delete a specific chunk or message within a memory */\n async deleteChunk(chunkId: string): Promise<boolean> {\n try {\n await this._makeRequest('DELETE', `/v1/chunks/${chunkId}`);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(chunkId, 'Chunk');\n }\n throw error;\n }\n }\n\n /** Update a specific chunk or message within a memory */\n async updateChunk(\n chunkId: string,\n content: string,\n metadata?: Record<string, unknown>\n ): Promise<boolean> {\n const payload: Record<string, unknown> = { content };\n if (metadata !== undefined) {\n payload.metadata = metadata;\n }\n\n try {\n await this._makeRequest('PATCH', `/v1/chunks/${chunkId}`, payload);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(chunkId, 'Chunk');\n }\n throw error;\n }\n }\n\n /**\n * Update memory-level properties including name, metadata, and collection associations.\n *\n * This method allows updating properties of an entire memory (document or conversation)\n * without modifying its content. For updating individual chunks or messages within a memory,\n * use updateChunk(). For updating content, use storeMemory() to append.\n *\n * @param options - Update configuration\n * @param options.memoryId - The ID of the memory to update\n * @param options.name - New name for the memory (useful for conversations and documents)\n * @param options.metadata - Metadata to set. By default, replaces existing metadata.\n * Set mergeMetadata=true to merge with existing metadata instead.\n * @param options.collectionIds - New collection associations. Must specify at least one valid collection.\n * @param options.mergeMetadata - If true, merges provided metadata with existing metadata.\n * If false (default), replaces existing metadata entirely.\n *\n * @returns Promise resolving to true if successful\n *\n * @throws NebulaNotFoundException if memory_id doesn't exist\n * @throws NebulaValidationException if validation fails (e.g., no fields provided)\n * @throws NebulaAuthenticationException if user doesn't have permission to update this memory\n */\n async updateMemory(options: {\n memoryId: string;\n name?: string;\n metadata?: Record<string, unknown>;\n collectionIds?: string[];\n mergeMetadata?: boolean;\n }): Promise<boolean> {\n const payload: Record<string, unknown> = {};\n\n if (options.name !== undefined) {\n payload.name = options.name;\n }\n if (options.metadata !== undefined) {\n payload.metadata = options.metadata;\n payload.merge_metadata = options.mergeMetadata ?? false;\n }\n if (options.collectionIds !== undefined) {\n payload.collection_ids = options.collectionIds;\n }\n\n if (Object.keys(payload).length === 0) {\n throw new NebulaValidationException(\n 'At least one field (name, metadata, or collectionIds) must be provided to update'\n );\n }\n\n try {\n await this._makeRequest('PATCH', `/v1/memories/${options.memoryId}`, payload);\n return true;\n } catch (error) {\n if (error instanceof NebulaException && error.statusCode === 404) {\n throw new NebulaNotFoundException(options.memoryId, 'Memory');\n }\n throw error;\n }\n }\n\n /**\n * Get all memories from specific collections with optional metadata filtering\n *\n * @param options - Configuration for listing memories\n * @param options.collection_ids - One or more collection IDs to retrieve memories from\n * @param options.limit - Maximum number of memories to return (default: 100)\n * @param options.offset - Number of memories to skip for pagination (default: 0)\n * @param options.metadata_filters - Optional metadata filters using MongoDB-like operators.\n * Supported operators: $eq, $ne, $in, $nin, $exists, $and, $or\n *\n * @returns Promise resolving to array of MemoryResponse objects\n *\n * @example\n * // Get all playground memories excluding conversations\n * const memories = await client.listMemories({\n * collection_ids: ['collection-id'],\n * metadata_filters: {\n * 'metadata.content_type': { $ne: 'conversation' }\n * }\n * });\n *\n * @example\n * // Complex filter with multiple conditions\n * const memories = await client.listMemories({\n * collection_ids: ['collection-id'],\n * metadata_filters: {\n * $and: [\n * { 'metadata.playground': { $eq: true } },\n * { 'metadata.session_id': { $exists: true } }\n * ]\n * }\n * });\n */\n async listMemories(options: {\n collection_ids: string | string[];\n limit?: number;\n offset?: number;\n metadata_filters?: Record<string, unknown>;\n }): Promise<Memory[]> {\n const ids = Array.isArray(options.collection_ids) ? options.collection_ids : [options.collection_ids];\n if (!ids.length) {\n throw new NebulaClientException('collection_ids must be provided to list_memories().');\n }\n\n const params: Record<string, unknown> = {\n limit: options.limit ?? 100,\n offset: options.offset ?? 0,\n collection_ids: ids\n };\n\n // Add metadata_filters if provided (serialize to JSON string for query parameter)\n if (options.metadata_filters) {\n params.metadata_filters = JSON.stringify(options.metadata_filters);\n }\n\n const response = await this._makeRequest('GET', '/v1/memories', undefined, params) as { results?: unknown[] } | unknown[] | unknown;\n\n let documents: unknown[];\n if (typeof response === 'object' && response !== null && 'results' in response) {\n documents = (response as { results: unknown[] }).results;\n } else if (Array.isArray(response)) {\n documents = response;\n } else {\n documents = [response];\n }\n\n return documents.map((doc) => this._memoryResponseFromDict(doc as Record<string, unknown>, ids));\n }\n\n /** Get a specific memory by engram ID */\n async getMemory(memoryId: string): Promise<Memory> {\n const response = await this._makeRequest('GET', `/v1/memories/${memoryId}`) as { text?: string; content?: string; chunks?: unknown[]; id?: string; metadata?: Record<string, unknown>; collection_ids?: string[] };\n\n const content = response.text || response.content;\n const chunks = Array.isArray(response.chunks) ? response.chunks : undefined;\n\n const memoryData = {\n id: response.id,\n content,\n chunks,\n metadata: response.metadata || {},\n collection_ids: response.collection_ids || [],\n };\n\n return this._memoryResponseFromDict(memoryData, []);\n }\n\n // Search Methods\n\n /**\n * Search within specific collections with optional metadata filtering.\n *\n * @param options - Search configuration\n * @param options.query - Search query string\n * @param options.collection_ids - One or more collection IDs to search within\n * @param options.effort - Compute effort budget (auto/low/medium/high). Controls traversal compute, not MemoryResponse size.\n * @param options.filters - Optional filters to apply to the search. Supports comprehensive metadata filtering\n * with MongoDB-like operators for both vector/chunk search and graph search.\n * @param options.searchSettings - Optional search configuration\n *\n * @returns Promise resolving to array of SearchResult objects containing both vector/chunk and graph search results\n *\n * @example\n * // Basic equality filter\n * await client.search({\n * query: \"machine learning\",\n * collection_ids: [\"research-collection\"],\n * filters: {\n * \"metadata.category\": { $eq: \"research\" },\n * \"metadata.verified\": true // Shorthand for $eq\n * }\n * });\n *\n * @example\n * // Numeric comparisons\n * await client.search({\n * query: \"high priority\",\n * collection_ids: [\"tasks\"],\n * filters: {\n * \"metadata.priority\": { $gte: 8 },\n * \"metadata.score\": { $lt: 100 }\n * }\n * });\n *\n * @example\n * // String matching\n * await client.search({\n * query: \"employees\",\n * collection_ids: [\"team\"],\n * filters: {\n * \"metadata.email\": { $ilike: \"%@company.com\" } // Case-insensitive\n * }\n * });\n *\n * @example\n * // Array operations\n * await client.search({\n * query: \"developers\",\n * collection_ids: [\"team\"],\n * filters: {\n * \"metadata.skills\": { $overlap: [\"python\", \"typescript\"] } // Has any\n * }\n * });\n *\n * @example\n * // Nested paths\n * await client.search({\n * query: \"users\",\n * collection_ids: [\"profiles\"],\n * filters: {\n * \"metadata.user.preferences.theme\": { $eq: \"dark\" }\n * }\n * });\n *\n * @example\n * // Complex logical combinations\n * await client.search({\n * query: \"candidates\",\n * collection_ids: [\"hiring\"],\n * filters: {\n * $and: [\n * { \"metadata.verified\": true },\n * { \"metadata.level\": { $gte: 5 } },\n * {\n * $or: [\n * { \"metadata.skills\": { $overlap: [\"python\", \"go\"] } },\n * { \"metadata.years_experience\": { $gte: 8 } }\n * ]\n * }\n * ]\n * }\n * });\n *\n * @remarks\n * Supported Operators:\n * - Comparison: $eq, $ne, $lt, $lte, $gt, $gte\n * - String: $like (case-sensitive), $ilike (case-insensitive)\n * - Array: $in, $nin, $overlap, $contains\n * - JSONB: $json_contains\n * - Logical: $and, $or\n *\n * For comprehensive filtering documentation, see the Metadata Filtering Guide:\n * https://docs.nebulacloud.app/guides/metadata-filtering\n */\n async search(options: {\n query: string;\n collection_ids?: string | string[];\n effort?: 'auto' | 'low' | 'medium' | 'high';\n filters?: Record<string, unknown>;\n searchSettings?: Record<string, unknown>;\n }): Promise<MemoryResponse> {\n // Build request data - pass params directly to API (no wrapping needed)\n const data: Record<string, unknown> = {\n query: options.query,\n };\n\n if (options.effort) {\n data.effort = options.effort;\n }\n\n // Add collection_ids if provided\n if (options.collection_ids) {\n const collectionIds = Array.isArray(options.collection_ids) ? options.collection_ids : [options.collection_ids];\n const validCollectionIds = collectionIds.filter(id => id && id.trim() !== '');\n if (validCollectionIds.length) {\n data.collection_ids = validCollectionIds;\n }\n }\n\n // Add filters if provided\n if (options.filters) {\n data.filters = options.filters;\n }\n\n // Add advanced search settings if provided\n if (options.searchSettings) {\n data.search_settings = options.searchSettings;\n }\n\n const response = await this._makeRequest('POST', '/v1/memories/search', data) as { results?: MemoryResponse };\n\n // Backend returns MemoryRecall wrapped in { results: MemoryResponse }\n // The @base_endpoint decorator always wraps successful responses as {\"results\": MemoryResponse}\n const memoryResponseData = response.results as MemoryResponse;\n\n // Ensure we have a proper MemoryResponse structure with all fields\n const memoryResponse: MemoryResponse = {\n query: memoryResponseData.query || options.query,\n entities: memoryResponseData.entities || [],\n facts: memoryResponseData.facts || [],\n utterances: memoryResponseData.utterances || [],\n inference_hints: (memoryResponseData as any).inference_hints || [],\n fact_to_chunks: memoryResponseData.fact_to_chunks || {},\n entity_to_facts: memoryResponseData.entity_to_facts || {},\n retrieved_at: memoryResponseData.retrieved_at || new Date().toISOString(),\n focus: memoryResponseData.focus,\n total_traversal_time_ms: memoryResponseData.total_traversal_time_ms,\n query_intent: memoryResponseData.query_intent,\n };\n\n return memoryResponse;\n }\n\n // Health Check\n async healthCheck(): Promise<Record<string, unknown>> {\n return this._makeRequest('GET', '/v1/health') as Promise<Record<string, unknown>>;\n }\n\n // Helpers\n\n private _collectionFromDict(data: Record<string, unknown>): Collection {\n let createdAt: string | undefined;\n if (data.created_at) {\n if (typeof data.created_at === 'string') {\n createdAt = data.created_at;\n } else if (data.created_at instanceof Date) {\n createdAt = data.created_at.toISOString();\n }\n }\n\n let updatedAt: string | undefined;\n if (data.updated_at) {\n if (typeof data.updated_at === 'string') {\n updatedAt = data.updated_at;\n } else if (data.updated_at instanceof Date) {\n updatedAt = data.updated_at.toISOString();\n }\n }\n\n const collectionId = String(data.id || '');\n const collectionName = String(data.name || '');\n const collectionDescription = typeof data.description === 'string' ? data.description : undefined;\n const collectionOwnerId = data.owner_id ? String(data.owner_id) : undefined;\n const memoryCount = typeof data.memory_count === 'number' ? data.memory_count : 0;\n\n const metadata: Record<string, unknown> = {\n graph_collection_status: String(data.graph_collection_status || ''),\n graph_sync_status: String(data.graph_sync_status || ''),\n user_count: typeof data.user_count === 'number' ? data.user_count : 0,\n };\n\n return {\n id: collectionId,\n name: collectionName,\n description: collectionDescription,\n metadata,\n created_at: createdAt,\n updated_at: updatedAt,\n memory_count: memoryCount,\n owner_id: collectionOwnerId,\n };\n }\n\n private _memoryResponseFromDict(data: Record<string, unknown>, collectionIds: string[]): Memory {\n let createdAt: string | undefined;\n if (data.created_at) {\n if (typeof data.created_at === 'string') {\n createdAt = data.created_at;\n } else if (data.created_at instanceof Date) {\n createdAt = data.created_at.toISOString();\n }\n }\n\n let updatedAt: string | undefined;\n if (data.updated_at) {\n if (typeof data.updated_at === 'string') {\n updatedAt = data.updated_at;\n } else if (data.updated_at instanceof Date) {\n updatedAt = data.updated_at.toISOString();\n }\n }\n\n const engramId = String(data.id || '');\n const content = typeof data.content === 'string' ? data.content : (typeof data.text === 'string' ? data.text : undefined);\n let chunks: Chunk[] | undefined;\n\n if (data.chunks && Array.isArray(data.chunks)) {\n if (data.chunks.every((x: unknown) => typeof x === 'string')) {\n chunks = (data.chunks as string[]).map((text: string) => ({\n id: '',\n content: text,\n metadata: {},\n }));\n } else {\n chunks = (data.chunks as Array<Record<string, unknown>>)\n .filter((item: Record<string, unknown>) => item && typeof item === 'object' && ('text' in item || 'content' in item))\n .map((item: Record<string, unknown>) => ({\n id: String(item.id || ''),\n content: String(item.text || item.content || ''),\n metadata: typeof item.metadata === 'object' && item.metadata !== null ? item.metadata as Record<string, unknown> : {},\n role: typeof item.role === 'string' ? item.role : undefined,\n }));\n }\n }\n\n const metadata: Record<string, unknown> = { ...(typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {}) };\n if (data.engram_id) {\n metadata.engram_id = data.engram_id;\n }\n\n let finalId = engramId;\n if (data.engram_id && !engramId) {\n finalId = String(data.engram_id);\n }\n\n if (data.document_metadata && typeof data.document_metadata === 'object') {\n Object.assign(metadata, data.document_metadata as Record<string, unknown>);\n }\n\n return {\n id: finalId,\n memory_id: finalId,\n content,\n chunks,\n metadata,\n collection_ids: Array.isArray(data.collection_ids) ? data.collection_ids as string[] : collectionIds,\n created_at: createdAt,\n updated_at: updatedAt,\n };\n }\n\n private _searchResultFromDict(data: Record<string, unknown>): SearchResult {\n const content = typeof data.content === 'string' ? data.content : (typeof data.text === 'string' ? data.text : '');\n const resultId = String(data.id || data.chunk_id || '');\n\n return {\n id: String(resultId),\n content: String(content),\n score: typeof data.score === 'number' ? data.score : Number(data.score || 0.0),\n metadata: typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {},\n source: typeof data.source === 'string' ? data.source : undefined,\n };\n }\n\n private _searchResultFromGraphDict(data: Record<string, unknown>): SearchResult {\n const rid = data.id ? String(data.id) : '';\n const resultTypeStr = typeof data.result_type === 'string' ? data.result_type : 'entity';\n const rtype =\n GraphSearchResultType[resultTypeStr.toUpperCase() as keyof typeof GraphSearchResultType] ||\n GraphSearchResultType.ENTITY;\n const content = (typeof data.content === 'object' && data.content !== null ? data.content : {}) as Record<string, unknown>;\n const score = data.score !== undefined ? Number(data.score) : 0.0;\n const metadata: Record<string, unknown> = typeof data.metadata === 'object' && data.metadata !== null ? data.metadata as Record<string, unknown> : {};\n const chunkIds = Array.isArray(data.chunk_ids) ? data.chunk_ids as string[] : undefined;\n let timestamp: string | undefined;\n if (data.timestamp) {\n if (typeof data.timestamp === 'string') {\n timestamp = data.timestamp;\n } else if (data.timestamp instanceof Date) {\n timestamp = data.timestamp.toISOString();\n } else {\n const parsed = new Date(String(data.timestamp));\n if (!Number.isNaN(parsed.valueOf())) {\n timestamp = parsed.toISOString();\n }\n }\n }\n\n const displayName = typeof data.display_name === 'string' ? data.display_name : undefined;\n const sourceRole = typeof data.source_role === 'string' ? data.source_role : undefined;\n const engramId = data.engram_id ? String(data.engram_id) : undefined;\n const ownerId = data.owner_id ? String(data.owner_id) : undefined;\n\n let entity: GraphEntityResult | undefined;\n let rel: GraphRelationshipResult | undefined;\n let comm: GraphCommunityResult | undefined;\n\n if (rtype === GraphSearchResultType.ENTITY) {\n entity = {\n id: content.id ? String(content.id) : undefined,\n name: String(content.name || ''),\n description: String(content.description || ''),\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n } else if (rtype === GraphSearchResultType.RELATIONSHIP) {\n rel = {\n id: content.id ? String(content.id) : undefined,\n subject: String(content.subject || ''),\n predicate: String(content.predicate || ''),\n object: String(content.object || ''),\n subject_id: content.subject_id ? String(content.subject_id) : undefined,\n object_id: content.object_id ? String(content.object_id) : undefined,\n description: typeof content.description === 'string' ? content.description : undefined,\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n } else {\n comm = {\n id: content.id ? String(content.id) : undefined,\n name: String(content.name || ''),\n summary: String(content.summary || ''),\n metadata: typeof content.metadata === 'object' && content.metadata !== null ? content.metadata as Record<string, unknown> : {},\n };\n }\n\n return {\n id: rid,\n score,\n metadata,\n source: 'graph',\n content: undefined,\n graph_result_type: rtype,\n graph_entity: entity,\n graph_relationship: rel,\n graph_community: comm,\n chunk_ids: chunkIds,\n timestamp,\n display_name: displayName,\n source_role: sourceRole,\n engram_id: engramId,\n owner_id: ownerId,\n };\n }\n\n private async _sha256(message: string): Promise<string> {\n const msgBuffer = new TextEncoder().encode(message);\n // Use Web Crypto API: prefer globalThis.crypto (browser/Node 18+), fallback to Node's crypto.webcrypto\n let crypto: Crypto;\n if (typeof globalThis.crypto !== 'undefined' && globalThis.crypto.subtle) {\n crypto = globalThis.crypto;\n } else {\n // Node.js environment: use built-in crypto module's webcrypto\n const nodeCrypto = await import('crypto');\n crypto = nodeCrypto.webcrypto as Crypto;\n }\n const hashBuffer = await crypto.subtle.digest('SHA-256', msgBuffer);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n }\n\n private _formDataFromObject(obj: Record<string, unknown>): FormData {\n const formData = new FormData();\n Object.entries(obj).forEach(([key, value]) => {\n formData.append(key, value as string | Blob);\n });\n return formData;\n }\n\n /**\n * Convert and process multimodal content parts, auto-uploading large base64 files to S3.\n *\n * - Binary parts (`image`/`audio`/`document` with `data`) larger than 5MB are uploaded to S3 and converted to `s3_ref`.\n */\n private async _processContentParts(contentParts: MultimodalContentPart[]): Promise<MultimodalContentPart[]> {\n const processed: MultimodalContentPart[] = [];\n\n for (const part of contentParts) {\n // Safe check for binary file content parts\n // We check if it is NOT a known non-binary type (text, s3_ref, url, image_url)\n // And explicitly check for 'data' property presence to satisfy TS\n if (\n part.type !== 'text' &&\n part.type !== 's3_ref' &&\n 'data' in part &&\n part.data\n ) {\n // Now TS knows 'part' has 'data'\n const filePart = part as FileContentPart;\n\n // Calculate decoded size (base64 is ~4/3 of original)\n const dataSize = Math.floor(String(filePart.data).length * 3 / 4);\n\n if (dataSize > Nebula.MAX_INLINE_SIZE) {\n const filename = filePart.filename || `file.bin`;\n const mediaType = filePart.media_type || 'application/octet-stream';\n\n const uploadInfo = await this.getUploadUrl({\n filename,\n content_type: mediaType,\n file_size: dataSize,\n });\n\n // Decode base64 and upload to S3\n let bytes: Uint8Array;\n const atobFn = (globalThis as unknown as { atob?: (data: string) => string }).atob;\n if (typeof atobFn === 'function') {\n const binaryString = atobFn(String(filePart.data));\n bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n } else {\n // Node.js fallback\n const { Buffer } = await import('buffer');\n bytes = Uint8Array.from(Buffer.from(String(filePart.data), 'base64'));\n }\n\n await fetch(uploadInfo.upload_url, {\n method: 'PUT',\n body: bytes as unknown as BodyInit,\n headers: { 'Content-Type': mediaType },\n });\n\n processed.push({\n type: 's3_ref',\n s3_key: uploadInfo.s3_key,\n media_type: mediaType,\n filename,\n });\n continue;\n }\n }\n\n processed.push(part);\n }\n\n return processed;\n }\n\n /**\n * Get a presigned URL for uploading large files to S3.\n */\n async getUploadUrl(options: {\n filename: string;\n content_type: string;\n file_size: number;\n }): Promise<{ upload_url: string; s3_key: string; bucket: string; expires_in: number }> {\n const response = await this._makeRequest('POST', '/v1/memories/upload', undefined, {\n filename: options.filename,\n content_type: options.content_type,\n file_size: options.file_size,\n }) as { results?: { upload_url: string; s3_key: string; bucket: string; expires_in: number }; upload_url?: string; s3_key?: string; bucket?: string; expires_in?: number };\n\n if (response.results) {\n return response.results;\n }\n return response as { upload_url: string; s3_key: string; bucket: string; expires_in: number };\n }\n}\n","import {\n FileContentPart\n} from './types';\n\nconst MIME_TYPES: Record<string, string> = {\n // Images\n \".jpg\": \"image/jpeg\",\n \".jpeg\": \"image/jpeg\",\n \".png\": \"image/png\",\n \".gif\": \"image/gif\",\n \".webp\": \"image/webp\",\n \".heic\": \"image/heic\",\n \".bmp\": \"image/bmp\",\n \".tiff\": \"image/tiff\",\n // Audio\n \".mp3\": \"audio/mpeg\",\n \".wav\": \"audio/wav\",\n \".m4a\": \"audio/m4a\",\n \".ogg\": \"audio/ogg\",\n \".flac\": \"audio/flac\",\n \".aac\": \"audio/aac\",\n \".webm\": \"audio/webm\",\n // Documents\n \".pdf\": \"application/pdf\",\n \".doc\": \"application/msword\",\n \".docx\": \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n \".xls\": \"application/vnd.ms-excel\",\n \".xlsx\": \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n \".ppt\": \"application/vnd.ms-powerpoint\",\n \".pptx\": \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n \".txt\": \"text/plain\",\n \".csv\": \"text/csv\",\n \".rtf\": \"application/rtf\",\n \".epub\": \"application/epub+zip\",\n};\n\n/**\n * Utility for creating multimodal content from files.\n * Note: These methods only work in Node.js environments.\n */\nexport class NebulaContent {\n /**\n * Create a FileContentPart from a file path.\n * Automatically deduces media_type and the backend 'type' (image, audio, document).\n */\n static async fromFile(filePath: string, mediaType?: string): Promise<FileContentPart> {\n let fs: typeof import('fs/promises');\n let path: typeof import('path');\n\n try {\n fs = await import('fs/promises');\n path = await import('path');\n } catch (e) {\n throw new Error('File system operations are only supported in Node.js environments.');\n }\n\n const absolutePath = path.resolve(filePath);\n const fileName = path.basename(absolutePath);\n const ext = path.extname(absolutePath).toLowerCase();\n\n const detectedMime = mediaType || MIME_TYPES[ext] || \"application/octet-stream\";\n\n const buffer = await fs.readFile(absolutePath);\n const data = buffer.toString('base64');\n\n return {\n data,\n media_type: detectedMime,\n filename: fileName\n };\n }\n}\n","// Main Client\nexport { Nebula } from './client';\nexport { Nebula as default } from './client';\n\n// Content Helper (Legacy/Internal)\nexport { NebulaContent } from './content';\n\n// Import Types to Merge/Re-export\nimport { NebulaContent } from './content';\nimport { Memory as MemoryType } from './types';\n\n// 1. Export Memory Factory Function (Value) - Acts like Python's class constructor\n// Using Object.assign pattern to avoid @typescript-eslint/no-namespace error\n\ntype MemoryFactory = {\n (data: MemoryType): MemoryType;\n File: typeof NebulaContent.fromFile;\n fromFile: (\n filePath: string,\n collection_id: string,\n metadata?: Record<string, unknown>,\n role?: string\n ) => Promise<MemoryType>;\n};\n\nconst MemoryBase = (data: MemoryType): MemoryType => data;\n\nexport const Memory: MemoryFactory = Object.assign(MemoryBase, {\n /**\n * Helper to create a file content part from a file path.\n * Alias for NebulaContent.fromFile().\n */\n File: NebulaContent.fromFile,\n\n /**\n * Helper to create a complete Memory object from a single file.\n */\n async fromFile(\n filePath: string,\n collection_id: string,\n metadata?: Record<string, unknown>,\n role?: string\n ): Promise<MemoryType> {\n return {\n collection_id,\n content: [await NebulaContent.fromFile(filePath)],\n metadata: metadata || {},\n role\n };\n }\n});\n\n// 3. Export Memory Interface (Type) - Merged with Value\nexport type Memory = MemoryType;\n\n// 4. Re-export all other types explicitly (excluding Memory to avoid conflict)\nexport {\n GraphSearchResultType,\n Chunk,\n StructuredChunk,\n MemoryResponse,\n TextContentPart,\n FileContentPart,\n S3FileReferencePart,\n MultimodalContentPart,\n // Memory is exported above\n Collection,\n SearchResult,\n GraphEntityResult,\n GraphRelationshipResult,\n GraphCommunityResult,\n SearchOptions,\n RecallFocus,\n ActivatedEntity,\n ActivatedFact,\n ActivatedFacet,\n GroundedUtterance,\n NebulaClientConfig,\n NebulaException,\n NebulaClientException,\n NebulaAuthenticationException,\n NebulaRateLimitException,\n NebulaValidationException,\n NebulaCollectionNotFoundException,\n NebulaNotFoundException\n} from './types';\n"]}
|