@lanonasis/mem-intel-sdk 2.0.1 → 2.0.3

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.
Files changed (68) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +81 -10
  3. package/dist/core/behavior-types.d.ts +336 -0
  4. package/dist/core/client.d.ts +97 -1
  5. package/dist/core/errors.d.ts +0 -1
  6. package/dist/core/index.cjs +205 -0
  7. package/dist/core/index.cjs.map +1 -1
  8. package/dist/core/index.d.ts +1 -1
  9. package/dist/core/index.js +203 -1
  10. package/dist/core/index.js.map +1 -1
  11. package/dist/core/prediction-types.d.ts +0 -1
  12. package/dist/core/types.d.ts +0 -1
  13. package/dist/index-sdk.d.ts +2 -1
  14. package/dist/index.cjs +245 -0
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.js +241 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/node/client.d.ts +0 -1
  19. package/dist/node/index.cjs +170 -0
  20. package/dist/node/index.cjs.map +1 -1
  21. package/dist/node/index.d.ts +0 -1
  22. package/dist/node/index.js +170 -0
  23. package/dist/node/index.js.map +1 -1
  24. package/dist/react/context/MemoryIntelligenceProvider.d.ts +0 -1
  25. package/dist/react/hooks/useMemoryIntelligence.d.ts +0 -1
  26. package/dist/react/index.cjs +170 -0
  27. package/dist/react/index.cjs.map +1 -1
  28. package/dist/react/index.d.ts +0 -1
  29. package/dist/react/index.js +170 -0
  30. package/dist/react/index.js.map +1 -1
  31. package/dist/server/index.cjs +170 -0
  32. package/dist/server/index.cjs.map +1 -1
  33. package/dist/server/index.d.ts +0 -1
  34. package/dist/server/index.js +170 -0
  35. package/dist/server/index.js.map +1 -1
  36. package/dist/server/mcp-server.d.ts +0 -1
  37. package/dist/utils/embeddings.d.ts +0 -1
  38. package/dist/utils/formatting.d.ts +0 -1
  39. package/dist/utils/http-client.d.ts +0 -1
  40. package/dist/utils/index.d.ts +0 -1
  41. package/dist/utils/prediction-engine.d.ts +0 -1
  42. package/dist/utils/response-adapter.d.ts +0 -1
  43. package/dist/utils/similarity.d.ts +0 -1
  44. package/dist/vue/composables/useMemoryIntelligence.d.ts +0 -1
  45. package/dist/vue/index.d.ts +0 -1
  46. package/package.json +2 -2
  47. package/dist/core/client.d.ts.map +0 -1
  48. package/dist/core/errors.d.ts.map +0 -1
  49. package/dist/core/index.d.ts.map +0 -1
  50. package/dist/core/prediction-types.d.ts.map +0 -1
  51. package/dist/core/types.d.ts.map +0 -1
  52. package/dist/index-sdk.d.ts.map +0 -1
  53. package/dist/node/client.d.ts.map +0 -1
  54. package/dist/node/index.d.ts.map +0 -1
  55. package/dist/react/context/MemoryIntelligenceProvider.d.ts.map +0 -1
  56. package/dist/react/hooks/useMemoryIntelligence.d.ts.map +0 -1
  57. package/dist/react/index.d.ts.map +0 -1
  58. package/dist/server/index.d.ts.map +0 -1
  59. package/dist/server/mcp-server.d.ts.map +0 -1
  60. package/dist/utils/embeddings.d.ts.map +0 -1
  61. package/dist/utils/formatting.d.ts.map +0 -1
  62. package/dist/utils/http-client.d.ts.map +0 -1
  63. package/dist/utils/index.d.ts.map +0 -1
  64. package/dist/utils/prediction-engine.d.ts.map +0 -1
  65. package/dist/utils/response-adapter.d.ts.map +0 -1
  66. package/dist/utils/similarity.d.ts.map +0 -1
  67. package/dist/vue/composables/useMemoryIntelligence.d.ts.map +0 -1
  68. package/dist/vue/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/core/errors.ts","../../src/utils/response-adapter.ts","../../src/utils/http-client.ts","../../src/core/client.ts","../../src/core/types.ts","../../src/utils/formatting.ts","../../src/server/mcp-server.ts"],"names":["z","McpServer"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * SDK-specific error classes\n */\n\nexport class MemoryIntelligenceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryIntelligenceError\";\n }\n}\n\nexport class ConfigurationError extends MemoryIntelligenceError {\n constructor(message: string) {\n super(message);\n this.name = \"ConfigurationError\";\n }\n}\n\nexport class MemoryNotFoundError extends MemoryIntelligenceError {\n constructor(memoryId: string) {\n super(`Memory not found: ${memoryId}`);\n this.name = \"MemoryNotFoundError\";\n }\n}\n\nexport class DatabaseError extends MemoryIntelligenceError {\n constructor(message: string, public originalError?: Error) {\n super(message);\n this.name = \"DatabaseError\";\n }\n}\n\nexport class EmbeddingError extends MemoryIntelligenceError {\n constructor(message: string, public originalError?: Error) {\n super(message);\n this.name = \"EmbeddingError\";\n }\n}\n\nexport class ValidationError extends MemoryIntelligenceError {\n constructor(message: string) {\n super(message);\n this.name = \"ValidationError\";\n }\n}\n","/**\n * Response Adapter for Edge Function envelope format\n * Handles the transition between direct API responses and Edge Function wrapped responses\n */\n\nimport { EdgeFunctionResponse } from \"../core/types.js\";\nimport { ApiResponse } from \"./http-client.js\";\n\nexport interface UsageInfo {\n tokens_used: number;\n cost_usd: number;\n cached: boolean;\n}\n\nexport interface TierInfo {\n tier: string;\n usage_remaining: number;\n}\n\nexport interface UnwrappedResponse<T> {\n data?: T;\n error?: {\n message: string;\n code?: string;\n };\n usage?: UsageInfo;\n tier_info?: TierInfo;\n status: number;\n}\n\n/**\n * Adapts Edge Function envelope response to SDK internal format\n * Edge Functions return: { success, data, error, usage, tier_info }\n * SDK expects: { data, error, status }\n */\nexport function adaptEdgeFunctionResponse<T>(\n httpResponse: ApiResponse<EdgeFunctionResponse<T>>\n): UnwrappedResponse<T> {\n // If HTTP request itself failed\n if (httpResponse.error) {\n return {\n status: httpResponse.status,\n error: httpResponse.error,\n };\n }\n\n const envelope = httpResponse.data;\n\n // If no envelope data (shouldn't happen)\n if (!envelope) {\n return {\n status: httpResponse.status,\n error: {\n message: \"Empty response from server\",\n code: \"EMPTY_RESPONSE\",\n },\n };\n }\n\n // If Edge Function returned an error\n if (!envelope.success && envelope.error) {\n return {\n status: httpResponse.status,\n error: envelope.error,\n usage: envelope.usage,\n tier_info: envelope.tier_info,\n };\n }\n\n // Successful response\n return {\n status: httpResponse.status,\n data: envelope.data,\n usage: envelope.usage,\n tier_info: envelope.tier_info,\n };\n}\n\n/**\n * Checks if a response appears to be an Edge Function envelope\n */\nexport function isEdgeFunctionEnvelope(data: unknown): data is EdgeFunctionResponse<unknown> {\n if (typeof data !== \"object\" || data === null) {\n return false;\n }\n\n const obj = data as Record<string, unknown>;\n return \"success\" in obj && typeof obj.success === \"boolean\";\n}\n\n/**\n * Smart adapter that detects response format and adapts accordingly\n * Supports both direct API responses and Edge Function envelopes\n */\nexport function adaptResponse<T>(\n httpResponse: ApiResponse<T | EdgeFunctionResponse<T>>\n): UnwrappedResponse<T> {\n // If HTTP request itself failed\n if (httpResponse.error) {\n return {\n status: httpResponse.status,\n error: httpResponse.error,\n };\n }\n\n const responseData = httpResponse.data;\n\n // Check if it's an Edge Function envelope\n if (isEdgeFunctionEnvelope(responseData)) {\n return adaptEdgeFunctionResponse({\n status: httpResponse.status,\n data: responseData as EdgeFunctionResponse<T>,\n });\n }\n\n // Direct API response (legacy format)\n return {\n status: httpResponse.status,\n data: responseData as T,\n };\n}\n\n/**\n * Cache entry for offline fallback support\n */\nexport interface CacheEntry<T> {\n data: T;\n timestamp: number;\n endpoint: string;\n params?: Record<string, unknown>;\n}\n\n/**\n * Simple in-memory cache for offline fallback\n */\nexport class ResponseCache {\n private cache: Map<string, CacheEntry<unknown>> = new Map();\n private ttl: number;\n\n constructor(ttlMs: number = 300000) { // Default 5 minutes\n this.ttl = ttlMs;\n }\n\n private generateKey(endpoint: string, params?: Record<string, unknown>): string {\n const paramStr = params ? JSON.stringify(params) : \"\";\n return `${endpoint}:${paramStr}`;\n }\n\n set<T>(endpoint: string, data: T, params?: Record<string, unknown>): void {\n const key = this.generateKey(endpoint, params);\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n endpoint,\n params,\n });\n }\n\n get<T>(endpoint: string, params?: Record<string, unknown>): T | null {\n const key = this.generateKey(endpoint, params);\n const entry = this.cache.get(key);\n\n if (!entry) {\n return null;\n }\n\n // Check if expired\n if (Date.now() - entry.timestamp > this.ttl) {\n this.cache.delete(key);\n return null;\n }\n\n return entry.data as T;\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Clean up expired entries\n */\n cleanup(): void {\n const now = Date.now();\n for (const [key, entry] of this.cache.entries()) {\n if (now - entry.timestamp > this.ttl) {\n this.cache.delete(key);\n }\n }\n }\n}\n","/**\n * HTTP client for Lanonasis API\n * Supports Edge Function envelope format with caching for offline fallback\n */\n\nimport { ConfigurationError } from \"../core/errors.js\";\nimport { EdgeFunctionResponse, ProcessingMode } from \"../core/types.js\";\nimport { adaptResponse, ResponseCache, UsageInfo, TierInfo } from \"./response-adapter.js\";\n\nexport interface HttpClientConfig {\n apiUrl: string;\n apiKey?: string;\n authToken?: string;\n authType?: \"apiKey\" | \"bearer\";\n allowMissingAuth?: boolean;\n timeout?: number;\n headers?: Record<string, string>;\n processingMode?: ProcessingMode;\n enableCache?: boolean;\n cacheTTL?: number;\n}\n\nexport interface ApiResponse<T = any> {\n data?: T;\n error?: {\n message: string;\n code?: string;\n };\n status: number;\n}\n\nexport interface EnhancedApiResponse<T = any> extends ApiResponse<T> {\n usage?: UsageInfo;\n tier_info?: TierInfo;\n fromCache?: boolean;\n}\n\nexport class HttpClient {\n private apiUrl: string;\n private apiKey: string | undefined;\n private timeout: number;\n private headers: Record<string, string>;\n private processingMode: ProcessingMode;\n private cache: ResponseCache | null;\n\n constructor(config: HttpClientConfig) {\n this.apiUrl = config.apiUrl.replace(/\\/$/, \"\"); // Remove trailing slash\n\n // Determine auth type: explicit config, or infer from provided credentials\n let authType: \"apiKey\" | \"bearer\";\n if (config.authType) {\n authType = config.authType;\n } else if (config.apiKey) {\n authType = \"apiKey\";\n } else if (config.authToken) {\n authType = \"bearer\";\n } else if (config.allowMissingAuth) {\n // Default to apiKey when no auth provided but missing auth is allowed\n authType = \"apiKey\";\n } else {\n throw new ConfigurationError(\n \"Authentication required: provide apiKey, authToken, or set allowMissingAuth to true\"\n );\n }\n\n const allowMissingAuth = Boolean(config.allowMissingAuth);\n\n if (authType === \"apiKey\") {\n if (!config.apiKey && !allowMissingAuth) {\n throw new ConfigurationError(\"API key is required when authType is 'apiKey'\");\n }\n if (config.apiKey && !config.apiKey.startsWith(\"lano_\")) {\n throw new ConfigurationError(\n \"Invalid API key format. API key should start with 'lano_'\"\n );\n }\n } else if (!config.authToken && !allowMissingAuth) {\n throw new ConfigurationError(\"Bearer token is required when authType is 'bearer'\");\n }\n\n this.apiKey = config.apiKey;\n this.timeout = config.timeout || 30000;\n this.processingMode = config.processingMode || \"api\";\n\n const baseHeaders: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...config.headers,\n };\n\n if (authType === \"apiKey\" && this.apiKey && !(\"X-API-Key\" in baseHeaders)) {\n baseHeaders[\"X-API-Key\"] = this.apiKey;\n }\n\n if (authType === \"bearer\" && config.authToken && !(\"Authorization\" in baseHeaders)) {\n baseHeaders[\"Authorization\"] = `Bearer ${config.authToken}`;\n }\n\n this.headers = baseHeaders;\n\n // Initialize cache for offline-fallback mode\n if (config.enableCache !== false && this.processingMode === \"offline-fallback\") {\n this.cache = new ResponseCache(config.cacheTTL || 300000);\n } else {\n this.cache = null;\n }\n }\n\n /**\n * Get the current processing mode\n */\n getProcessingMode(): ProcessingMode {\n return this.processingMode;\n }\n\n /**\n * Check if cache is enabled\n */\n isCacheEnabled(): boolean {\n return this.cache !== null;\n }\n\n /**\n * Clear the response cache\n */\n clearCache(): void {\n this.cache?.clear();\n }\n\n private async request<T>(\n method: string,\n endpoint: string,\n data?: any\n ): Promise<ApiResponse<T>> {\n const url = `${this.apiUrl}${endpoint}`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const options: RequestInit = {\n method,\n headers: this.headers,\n signal: controller.signal,\n };\n\n if (data && (method === \"POST\" || method === \"PUT\" || method === \"PATCH\")) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(url, options);\n clearTimeout(timeoutId);\n\n const responseData = await response.json() as any;\n\n if (!response.ok) {\n return {\n status: response.status,\n error: {\n message: responseData?.message || responseData?.error || \"Request failed\",\n code: responseData?.code,\n },\n };\n }\n\n return {\n status: response.status,\n data: responseData as T,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n return {\n status: 408,\n error: {\n message: `Request timeout after ${this.timeout}ms`,\n code: \"TIMEOUT\",\n },\n };\n }\n\n return {\n status: 0,\n error: {\n message: error.message,\n code: \"NETWORK_ERROR\",\n },\n };\n }\n\n return {\n status: 0,\n error: {\n message: \"Unknown error occurred\",\n code: \"UNKNOWN_ERROR\",\n },\n };\n }\n }\n\n /**\n * Enhanced request that handles Edge Function envelope format\n * and supports offline-fallback caching\n */\n private async enhancedRequest<T>(\n method: string,\n endpoint: string,\n data?: any\n ): Promise<EnhancedApiResponse<T>> {\n const cacheKey = data ? JSON.stringify(data) : undefined;\n\n // Try API request first\n const rawResponse = await this.request<EdgeFunctionResponse<T> | T>(method, endpoint, data);\n\n // Handle network errors with offline fallback\n if (rawResponse.error?.code === \"NETWORK_ERROR\" || rawResponse.error?.code === \"TIMEOUT\") {\n if (this.processingMode === \"offline-fallback\" && this.cache) {\n const cached = this.cache.get<T>(endpoint, cacheKey ? JSON.parse(cacheKey) : undefined);\n if (cached) {\n return {\n status: 200,\n data: cached,\n fromCache: true,\n };\n }\n }\n // No cache available, return original error\n return {\n status: rawResponse.status,\n error: rawResponse.error,\n fromCache: false,\n };\n }\n\n // Adapt response (handles both direct and envelope formats)\n const adapted = adaptResponse<T>(rawResponse);\n\n // Cache successful responses for offline fallback\n if (!adapted.error && adapted.data && this.cache) {\n this.cache.set(endpoint, adapted.data, cacheKey ? JSON.parse(cacheKey) : undefined);\n }\n\n return {\n status: adapted.status,\n data: adapted.data,\n error: adapted.error,\n usage: adapted.usage,\n tier_info: adapted.tier_info,\n fromCache: false,\n };\n }\n\n async get<T>(endpoint: string): Promise<ApiResponse<T>> {\n return this.request<T>(\"GET\", endpoint);\n }\n\n async post<T>(endpoint: string, data?: any): Promise<ApiResponse<T>> {\n return this.request<T>(\"POST\", endpoint, data);\n }\n\n async put<T>(endpoint: string, data?: any): Promise<ApiResponse<T>> {\n return this.request<T>(\"PUT\", endpoint, data);\n }\n\n async patch<T>(endpoint: string, data?: any): Promise<ApiResponse<T>> {\n return this.request<T>(\"PATCH\", endpoint, data);\n }\n\n async delete<T>(endpoint: string): Promise<ApiResponse<T>> {\n return this.request<T>(\"DELETE\", endpoint);\n }\n\n // Enhanced methods with Edge Function envelope support\n\n async getEnhanced<T>(endpoint: string): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"GET\", endpoint);\n }\n\n async postEnhanced<T>(endpoint: string, data?: any): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"POST\", endpoint, data);\n }\n\n async putEnhanced<T>(endpoint: string, data?: any): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"PUT\", endpoint, data);\n }\n\n async patchEnhanced<T>(endpoint: string, data?: any): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"PATCH\", endpoint, data);\n }\n\n async deleteEnhanced<T>(endpoint: string): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"DELETE\", endpoint);\n }\n}\n","/**\n * Core Memory Intelligence Client\n * Supports API-first with offline-fallback capability\n */\n\nimport {\n MemoryIntelligenceConfig,\n AnalyzePatternsParams,\n PatternAnalysis,\n SuggestTagsParams,\n TagSuggestionsResult,\n FindRelatedParams,\n RelatedMemoriesResult,\n DetectDuplicatesParams,\n DuplicatesResult,\n ExtractInsightsParams,\n InsightsResult,\n HealthCheckParams,\n MemoryHealth,\n QueryMemoriesOptions,\n MemoryEntry,\n ProcessingMode,\n} from \"./types.js\";\nimport {\n PredictiveRecallParams,\n PredictiveRecallResult,\n} from \"./prediction-types.js\";\nimport { DatabaseError } from \"./errors.js\";\nimport { HttpClient } from \"../utils/http-client.js\";\nimport { UsageInfo, TierInfo } from \"../utils/response-adapter.js\";\n\nconst DEFAULT_API_URL = \"https://api.lanonasis.com/api/v1\";\n\nexport interface IntelligenceResponse<T> {\n data: T;\n usage?: UsageInfo;\n tier_info?: TierInfo;\n fromCache?: boolean;\n}\n\nexport class MemoryIntelligenceClient {\n private httpClient: HttpClient;\n private defaultResponseFormat: \"json\" | \"markdown\";\n private processingMode: ProcessingMode;\n\n constructor(config: MemoryIntelligenceConfig) {\n this.processingMode = config.processingMode || \"api\";\n const authType = config.authType || (config.apiKey ? \"apiKey\" : \"bearer\");\n\n this.httpClient = new HttpClient({\n apiUrl: config.apiUrl || DEFAULT_API_URL,\n apiKey: config.apiKey,\n authToken: config.authToken,\n authType,\n allowMissingAuth: config.allowMissingAuth,\n timeout: config.timeout,\n headers: config.headers,\n processingMode: this.processingMode,\n enableCache: config.enableCache,\n cacheTTL: config.cacheTTL,\n });\n\n this.defaultResponseFormat = config.responseFormat || \"markdown\";\n }\n\n /**\n * Get the current processing mode\n */\n getProcessingMode(): ProcessingMode {\n return this.processingMode;\n }\n\n /**\n * Check if cache is enabled (for offline-fallback mode)\n */\n isCacheEnabled(): boolean {\n return this.httpClient.isCacheEnabled();\n }\n\n /**\n * Clear the response cache\n */\n clearCache(): void {\n this.httpClient.clearCache();\n }\n\n /**\n * Get HTTP client for direct API access\n */\n public getHttpClient(): HttpClient {\n return this.httpClient;\n }\n\n /**\n * Query memories from the API\n */\n public async queryMemories(\n userId: string,\n options: QueryMemoriesOptions = {}\n ): Promise<MemoryEntry[]> {\n const { type, limit = 100, offset = 0 } = options;\n\n const params = new URLSearchParams({\n user_id: userId,\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (type) {\n params.append(\"type\", type);\n }\n\n const response = await this.httpClient.get<{ memories: MemoryEntry[] }>(\n `/intelligence/memories?${params.toString()}`\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to query memories: ${response.error.message}`);\n }\n\n return response.data?.memories || [];\n }\n\n /**\n * Analyze usage patterns and trends in memory collection\n */\n async analyzePatterns(params: AnalyzePatternsParams): Promise<IntelligenceResponse<PatternAnalysis>> {\n const response = await this.httpClient.postEnhanced<PatternAnalysis>(\n \"/intelligence/analyze-patterns\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to analyze patterns: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Get AI-powered tag suggestions for a memory\n */\n async suggestTags(params: SuggestTagsParams): Promise<IntelligenceResponse<TagSuggestionsResult>> {\n const response = await this.httpClient.postEnhanced<TagSuggestionsResult>(\n \"/intelligence/suggest-tags\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to suggest tags: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Find semantically related memories using vector similarity\n */\n async findRelated(params: FindRelatedParams): Promise<IntelligenceResponse<RelatedMemoriesResult>> {\n const response = await this.httpClient.postEnhanced<RelatedMemoriesResult>(\n \"/intelligence/find-related\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to find related memories: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Detect potential duplicate memories\n */\n async detectDuplicates(params: DetectDuplicatesParams): Promise<IntelligenceResponse<DuplicatesResult>> {\n const response = await this.httpClient.postEnhanced<DuplicatesResult>(\n \"/intelligence/detect-duplicates\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to detect duplicates: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Extract insights and patterns from memories\n */\n async extractInsights(params: ExtractInsightsParams): Promise<IntelligenceResponse<InsightsResult>> {\n const response = await this.httpClient.postEnhanced<InsightsResult>(\n \"/intelligence/extract-insights\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to extract insights: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Check the health and organization quality of memories\n */\n async healthCheck(params: HealthCheckParams): Promise<IntelligenceResponse<MemoryHealth>> {\n const response = await this.httpClient.postEnhanced<MemoryHealth>(\n \"/intelligence/health-check\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to check health: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Predictive Memory Recall - AI that anticipates what you need\n *\n * Uses a weighted scoring algorithm:\n * - Semantic similarity to current context (40%)\n * - Temporal relevance (recency decay curve) (30%)\n * - Usage frequency (20%)\n * - Serendipity factor (adjacent discoveries) (10%)\n *\n * @example\n * ```typescript\n * const result = await client.predictiveRecall({\n * userId: \"user-123\",\n * context: {\n * currentProject: \"Building dashboard components\",\n * recentTopics: [\"React\", \"performance\", \"hooks\"],\n * contextText: \"Optimizing render performance for data tables\"\n * },\n * limit: 5,\n * minConfidence: 50\n * });\n *\n * for (const prediction of result.data.predictions) {\n * console.log(`[${prediction.confidence}%] ${prediction.title}`);\n * console.log(` Reason: ${prediction.reason}`);\n * console.log(` Action: ${prediction.suggestedAction}`);\n * }\n * ```\n */\n async predictiveRecall(\n params: PredictiveRecallParams\n ): Promise<IntelligenceResponse<PredictiveRecallResult>> {\n const response = await this.httpClient.postEnhanced<PredictiveRecallResult>(\n \"/intelligence/predictive-recall\",\n {\n userId: params.userId,\n context: params.context,\n limit: params.limit || 5,\n minConfidence: params.minConfidence || 40,\n includeSerendipity: params.includeSerendipity !== false,\n memoryTypes: params.memoryTypes,\n timeWindowDays: params.timeWindowDays || 90,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to get predictions: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Record feedback on a prediction (for improving accuracy over time)\n *\n * @example\n * ```typescript\n * await client.recordPredictionFeedback({\n * memoryId: \"mem-123\",\n * userId: \"user-123\",\n * useful: true,\n * action: \"clicked\"\n * });\n * ```\n */\n async recordPredictionFeedback(params: {\n memoryId: string;\n userId: string;\n useful: boolean;\n action: \"clicked\" | \"saved\" | \"dismissed\" | \"ignored\";\n dismissReason?: \"not_relevant\" | \"already_know\" | \"not_now\" | \"other\";\n }): Promise<void> {\n await this.httpClient.post(\"/intelligence/prediction-feedback\", params);\n }\n}\n","/**\n * Type definitions for Memory Intelligence SDK\n */\n\nimport { z } from \"zod\";\n\n// Response format enum\nexport const ResponseFormat = {\n JSON: \"json\",\n MARKDOWN: \"markdown\",\n} as const;\n\nexport type ResponseFormatType = (typeof ResponseFormat)[keyof typeof ResponseFormat];\n\n// Memory type enum\nexport const MemoryType = z.enum([\n \"context\",\n \"project\",\n \"knowledge\",\n \"reference\",\n \"personal\",\n \"workflow\",\n]);\n\nexport type MemoryTypeValue = z.infer<typeof MemoryType>;\n\n// Processing mode for SDK operations\nexport type ProcessingMode = 'api' | 'offline-fallback';\n\n// Configuration interface\nexport interface MemoryIntelligenceConfig {\n apiUrl?: string; // Lanonasis API URL (default: https://api.lanonasis.com/api/v1)\n apiKey?: string; // Lanonasis API key (format: lano_xxxxxxxxxx)\n authToken?: string; // Bearer token for user-scoped auth (dashboard/SSO)\n authType?: 'apiKey' | 'bearer'; // Explicitly set auth type; inferred from apiKey/authToken if not provided\n allowMissingAuth?: boolean; // Allow client creation without auth (SDK consumers should gate calls)\n timeout?: number; // Request timeout in milliseconds (default: 30000)\n responseFormat?: ResponseFormatType;\n headers?: Record<string, string>; // Custom headers\n\n /**\n * Processing mode for intelligence operations\n * - 'api': Always use Lanonasis API endpoints (default)\n * - 'offline-fallback': Use API, fall back to cached/local data if unreachable\n * @default 'api'\n */\n processingMode?: ProcessingMode;\n\n /**\n * Enable caching of API responses for offline fallback\n * Only used when processingMode is 'offline-fallback'\n * @default true\n */\n enableCache?: boolean;\n\n /**\n * Cache TTL in milliseconds (default: 5 minutes)\n * @default 300000\n */\n cacheTTL?: number;\n}\n\n// API response wrapper from Edge Functions\nexport interface EdgeFunctionResponse<T> {\n success: boolean;\n data?: T;\n error?: {\n message: string;\n code?: string;\n };\n usage?: {\n tokens_used: number;\n cost_usd: number;\n cached: boolean;\n };\n tier_info?: {\n tier: string;\n usage_remaining: number;\n };\n}\n\n// Tool parameter interfaces\nexport interface AnalyzePatternsParams {\n userId: string;\n timeRangeDays?: number;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface SuggestTagsParams {\n memoryId: string;\n userId: string;\n maxSuggestions?: number;\n includeExistingTags?: boolean;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface FindRelatedParams {\n memoryId: string;\n userId: string;\n limit?: number;\n similarityThreshold?: number;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface DetectDuplicatesParams {\n userId: string;\n similarityThreshold?: number;\n maxPairs?: number;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface ExtractInsightsParams {\n userId: string;\n topic?: string;\n memoryType?: MemoryTypeValue;\n maxMemories?: number;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface HealthCheckParams {\n userId: string;\n responseFormat?: ResponseFormatType;\n}\n\n// Tool result interfaces\nexport interface PatternAnalysis {\n total_memories: number;\n memories_by_type: Record<string, number>;\n memories_by_day_of_week: Record<string, number>;\n peak_creation_hours: number[];\n average_content_length: number;\n most_common_tags: Array<{ tag: string; count: number }>;\n creation_velocity: {\n daily_average: number;\n trend: \"increasing\" | \"stable\" | \"decreasing\";\n };\n insights: string[];\n}\n\nexport interface TagSuggestion {\n tag: string;\n confidence: number;\n reasoning: string;\n}\n\nexport interface TagSuggestionsResult {\n memory_id: string;\n existing_tags: string[];\n suggestions: TagSuggestion[];\n context: {\n memory_type: string;\n related_memories_analyzed: number;\n };\n}\n\nexport interface RelatedMemory {\n id: string;\n title: string;\n type: string;\n similarity_score: number;\n shared_tags: string[];\n content_preview: string;\n}\n\nexport interface RelatedMemoriesResult {\n source_memory: {\n id: string;\n title: string;\n type: string;\n };\n related_memories: RelatedMemory[];\n total_found: number;\n}\n\nexport interface DuplicateEntry {\n id: string;\n title: string;\n similarity: number;\n created_at: string;\n}\n\nexport interface DuplicateGroup {\n primary_id: string;\n primary_title: string;\n duplicates: DuplicateEntry[];\n similarity_score: number;\n}\n\nexport interface DuplicatesResult {\n duplicate_groups: DuplicateGroup[];\n total_groups: number;\n total_duplicates: number;\n detection_method: \"semantic\" | \"text\";\n threshold_used: number;\n memories_analyzed: number;\n potential_storage_savings: string;\n}\n\nexport interface Insight {\n type: \"themes\" | \"connections\" | \"gaps\" | \"actions\" | \"summary\";\n content: string;\n confidence: number;\n related_memory_ids: string[];\n}\n\nexport interface InsightsResult {\n insights: Insight[];\n overall_summary: string;\n memories_analyzed: number;\n insight_types: string[];\n topic_filter?: string | null;\n generated_at: string;\n}\n\nexport interface HealthScoreBreakdown {\n organization: number;\n tagging: number;\n recency: number;\n completeness: number;\n diversity: number;\n}\n\nexport interface HealthScore {\n overall: number;\n breakdown: HealthScoreBreakdown;\n}\n\nexport interface HealthStatistics {\n total_memories: number;\n active_memories: number;\n archived_memories: number;\n memories_with_tags: number;\n unique_tags: number;\n memory_types: number;\n recent_memories_30d: number;\n stale_memories_90d: number;\n}\n\nexport interface HealthIssue {\n severity: \"high\" | \"medium\" | \"low\";\n category: string;\n description: string;\n affected_count: number;\n recommendation: string;\n}\n\nexport interface MemoryHealth {\n health_score: HealthScore;\n status: \"excellent\" | \"good\" | \"needs_attention\" | \"poor\";\n statistics: HealthStatistics;\n issues: HealthIssue[];\n recommendations: string[];\n generated_at: string;\n}\n\n// Memory entry interface (from database)\nexport interface MemoryEntry {\n id: string;\n user_id: string;\n title: string;\n content: string;\n type: MemoryTypeValue;\n tags?: string[];\n metadata?: Record<string, any>;\n embedding?: number[];\n created_at: string;\n updated_at: string;\n}\n\n// Query options for internal use\nexport interface QueryMemoriesOptions {\n type?: string;\n limit?: number;\n offset?: number;\n includeEmbeddings?: boolean;\n}\n","/**\n * Response formatting utilities\n */\n\nimport { ResponseFormat, ResponseFormatType } from \"../core/types.js\";\n\n// Character limit for responses\nconst CHARACTER_LIMIT = 50000;\n\n/**\n * Format response based on requested format\n */\nexport function formatResponse<T>(\n data: T,\n format: ResponseFormatType,\n markdownFormatter: (data: T) => string\n): string {\n if (format === ResponseFormat.JSON) {\n return JSON.stringify(data, null, 2);\n }\n return markdownFormatter(data);\n}\n\n/**\n * Truncate response if too long\n */\nexport function truncateIfNeeded(text: string): string {\n if (text.length > CHARACTER_LIMIT) {\n return (\n text.substring(0, CHARACTER_LIMIT) +\n `\\n\\n... (truncated, ${text.length - CHARACTER_LIMIT} characters omitted)`\n );\n }\n return text;\n}\n","/**\n * MCP Server wrapper using the SDK\n */\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { MemoryIntelligenceClient } from \"../core/client.js\";\nimport { MemoryIntelligenceConfig, ResponseFormat, MemoryType } from \"../core/types.js\";\nimport { formatResponse, truncateIfNeeded } from \"../utils/formatting.js\";\nimport { PredictiveRecallResult } from \"../core/prediction-types.js\";\n\nexport function createMCPServer(config: MemoryIntelligenceConfig) {\n const client = new MemoryIntelligenceClient(config);\n const server = new McpServer({\n name: \"memory-intelligence-mcp-server\",\n version: \"1.1.0\",\n });\n\n // Register analyze patterns tool\n server.registerTool(\n \"memory_analyze_patterns\",\n {\n title: \"Analyze Memory Patterns\",\n description: `Analyze usage patterns and trends in the user's memory collection.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n time_range_days: z.number().int().min(1).max(365).default(30),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n timeRangeDays: rawParams.time_range_days,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.analyzePatterns(params);\n const analysis = response.data;\n const responseText = formatResponse(\n analysis,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Memory Pattern Analysis\\n\\n`;\n md += `**Time Range:** Last ${params.timeRangeDays || 30} days\\n`;\n md += `**Total Memories:** ${data.total_memories}\\n\\n`;\n md += `## Distribution by Type\\n`;\n for (const [type, count] of Object.entries(data.memories_by_type)) {\n const percentage = (((count as number) / data.total_memories) * 100).toFixed(1);\n md += `- **${type}**: ${count} (${percentage}%)\\n`;\n }\n md += `\\n## Activity Patterns\\n`;\n md += `- **Peak Hours (UTC):** ${data.peak_creation_hours.join(\", \")}\\n`;\n md += `- **Daily Average:** ${data.creation_velocity.daily_average} memories/day\\n`;\n md += `- **Trend:** ${data.creation_velocity.trend}\\n`;\n md += `\\n## Top Tags\\n`;\n for (const { tag, count } of data.most_common_tags.slice(0, 5)) {\n md += `- **${tag}**: ${count} uses\\n`;\n }\n md += `\\n## AI Insights\\n`;\n for (const insight of data.insights) {\n md += `${insight}\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register suggest tags tool\n server.registerTool(\n \"memory_suggest_tags\",\n {\n title: \"Suggest Tags for Memory\",\n description: `AI-powered tag suggestions for a memory.`,\n inputSchema: z.object({\n memory_id: z.string().uuid(),\n user_id: z.string().uuid(),\n max_suggestions: z.number().int().min(1).max(20).default(5),\n include_existing_tags: z.boolean().default(true),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n memoryId: rawParams.memory_id,\n userId: rawParams.user_id,\n maxSuggestions: rawParams.max_suggestions,\n includeExistingTags: rawParams.include_existing_tags,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.suggestTags(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Tag Suggestions\\n\\n`;\n md += `**Existing Tags:** ${data.existing_tags.join(\", \") || \"none\"}\\n\\n`;\n md += `## Suggested Tags\\n`;\n for (const suggestion of data.suggestions) {\n md += `\\n### \\`${suggestion.tag}\\`\\n`;\n md += `**Confidence:** ${(suggestion.confidence * 100).toFixed(0)}%\\n`;\n md += `**Reason:** ${suggestion.reasoning}\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register find related tool\n server.registerTool(\n \"memory_find_related\",\n {\n title: \"Find Related Memories\",\n description: `Find semantically related memories using vector similarity.`,\n inputSchema: z.object({\n memory_id: z.string().uuid(),\n user_id: z.string().uuid(),\n limit: z.number().int().min(1).max(50).default(10),\n similarity_threshold: z.number().min(0).max(1).default(0.7),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n memoryId: rawParams.memory_id,\n userId: rawParams.user_id,\n limit: rawParams.limit,\n similarityThreshold: rawParams.similarity_threshold,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.findRelated(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Related Memories\\n\\n`;\n md += `**Source:** ${data.source_memory.title}\\n`;\n md += `**Found:** ${data.total_found} related memories\\n\\n`;\n for (const mem of data.related_memories) {\n md += `## ${mem.title}\\n`;\n md += `**Similarity:** ${(mem.similarity_score * 100).toFixed(1)}%\\n`;\n if (mem.shared_tags.length > 0) {\n md += `**Shared Tags:** ${mem.shared_tags.join(\", \")}\\n`;\n }\n md += `**Preview:** ${mem.content_preview}\\n\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register detect duplicates tool\n server.registerTool(\n \"memory_detect_duplicates\",\n {\n title: \"Detect Duplicate Memories\",\n description: `Find potential duplicate memories.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n similarity_threshold: z.number().min(0.8).max(0.99).default(0.9),\n max_pairs: z.number().int().min(1).max(100).default(20),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n similarityThreshold: rawParams.similarity_threshold,\n maxPairs: rawParams.max_pairs,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.detectDuplicates(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Duplicate Detection\\n\\n`;\n md += `**Memories Analyzed:** ${data.memories_analyzed}\\n`;\n md += `**Duplicate Groups Found:** ${data.total_groups}\\n`;\n md += `**Total Duplicates:** ${data.total_duplicates}\\n`;\n md += `**Storage Savings:** ${data.potential_storage_savings}\\n\\n`;\n for (const group of data.duplicate_groups) {\n md += `### ${group.primary_title}\\n`;\n md += `**Similarity Score:** ${(group.similarity_score * 100).toFixed(1)}%\\n`;\n md += `**Duplicates:**\\n`;\n for (const dup of group.duplicates) {\n md += `- ${dup.title} (${(dup.similarity * 100).toFixed(1)}% similar)\\n`;\n }\n md += `\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register extract insights tool\n server.registerTool(\n \"memory_extract_insights\",\n {\n title: \"Extract Insights from Memories\",\n description: `Extract key insights and patterns from memories.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n topic: z.string().optional(),\n memory_type: z.string().optional(),\n max_memories: z.number().int().min(5).max(100).default(20),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n topic: rawParams.topic,\n memoryType: rawParams.memory_type,\n maxMemories: rawParams.max_memories,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.extractInsights(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Memory Insights\\n\\n`;\n md += `**Memories Analyzed:** ${data.memories_analyzed}\\n`;\n if (data.topic_filter) {\n md += `**Topic:** ${data.topic_filter}\\n`;\n }\n md += `\\n## Summary\\n${data.overall_summary}\\n\\n`;\n md += `## Insights\\n`;\n const typeIcons: Record<string, string> = {\n themes: \"🎯\",\n connections: \"🔗\",\n gaps: \"⚠️\",\n actions: \"✅\",\n summary: \"📋\",\n };\n for (const insight of data.insights) {\n const icon = typeIcons[insight.type] || \"📌\";\n md += `\\n### ${icon} ${insight.type.charAt(0).toUpperCase() + insight.type.slice(1)}\\n`;\n md += `${insight.content}\\n`;\n md += `**Confidence:** ${(insight.confidence * 100).toFixed(0)}%\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register health check tool\n server.registerTool(\n \"memory_health_check\",\n {\n title: \"Memory Health Check\",\n description: `Analyze the health and organization quality of memories.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.healthCheck(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Memory Health Check\\n\\n`;\n md += `**Health Score:** ${data.health_score.overall}/100\\n`;\n md += `**Status:** ${data.status}\\n\\n`;\n md += `## Score Breakdown\\n`;\n md += `- **Organization:** ${data.health_score.breakdown.organization}\\n`;\n md += `- **Tagging:** ${data.health_score.breakdown.tagging}\\n`;\n md += `- **Recency:** ${data.health_score.breakdown.recency}\\n`;\n md += `- **Completeness:** ${data.health_score.breakdown.completeness}\\n`;\n md += `- **Diversity:** ${data.health_score.breakdown.diversity}\\n\\n`;\n md += `## Statistics\\n`;\n md += `- **Total Memories:** ${data.statistics.total_memories}\\n`;\n md += `- **Active Memories:** ${data.statistics.active_memories}\\n`;\n md += `- **Memories with Tags:** ${data.statistics.memories_with_tags}\\n`;\n md += `- **Unique Tags:** ${data.statistics.unique_tags}\\n`;\n md += `- **Recent (30d):** ${data.statistics.recent_memories_30d}\\n\\n`;\n if (data.issues.length > 0) {\n md += `## Issues\\n`;\n for (const issue of data.issues) {\n const icon = issue.severity === \"high\" ? \"🔴\" : issue.severity === \"medium\" ? \"🟡\" : \"🟢\";\n md += `- ${icon} **${issue.category}:** ${issue.description}\\n`;\n }\n md += `\\n`;\n }\n md += `## Recommendations\\n`;\n for (const rec of data.recommendations) {\n md += `- ${rec}\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register predictive recall tool\n server.registerTool(\n \"memory_predictive_recall\",\n {\n title: \"Predictive Memory Recall\",\n description: `AI-powered prediction of memories you'll need based on your current context. Uses semantic similarity, temporal relevance, usage patterns, and serendipity scoring to anticipate what you need before you realize it.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n context: z.object({\n current_project: z.string().optional().describe(\"Current project or task description\"),\n recent_topics: z.array(z.string()).optional().describe(\"Recent topics you've been working on\"),\n active_files: z.array(z.string()).optional().describe(\"Files currently being worked on\"),\n context_text: z.string().optional().describe(\"Free-form context (current task, meeting notes, etc.)\"),\n team_context: z.string().optional().describe(\"Team discussion topics for team-aware predictions\"),\n }).describe(\"Your current work context for generating predictions\"),\n limit: z.number().int().min(1).max(20).default(5).describe(\"Maximum predictions to return\"),\n min_confidence: z.number().min(0).max(100).default(40).describe(\"Minimum confidence threshold (0-100)\"),\n include_serendipity: z.boolean().default(true).describe(\"Include surprising adjacent discoveries\"),\n memory_types: z.array(MemoryType).optional().describe(\"Filter by memory types\"),\n time_window_days: z.number().int().min(1).max(365).default(90).describe(\"Time window for recency scoring\"),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n context: {\n currentProject: rawParams.context?.current_project,\n recentTopics: rawParams.context?.recent_topics,\n activeFiles: rawParams.context?.active_files,\n contextText: rawParams.context?.context_text,\n teamContext: rawParams.context?.team_context,\n },\n limit: rawParams.limit,\n minConfidence: rawParams.min_confidence,\n includeSerendipity: rawParams.include_serendipity,\n memoryTypes: rawParams.memory_types,\n timeWindowDays: rawParams.time_window_days,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.predictiveRecall(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data: PredictiveRecallResult) => {\n let md = `# Predicted Memories for You\\n\\n`;\n md += `**Memories Analyzed:** ${data.memoriesAnalyzed}\\n`;\n md += `**Predictions Found:** ${data.totalPredictions}\\n\\n`;\n\n if (data.predictions.length === 0) {\n md += `_No predictions above the confidence threshold. Try providing more context or lowering the threshold._\\n`;\n return md;\n }\n\n md += `## Your Predictions\\n\\n`;\n\n for (const pred of data.predictions) {\n const confidenceIcon =\n pred.confidence >= 80 ? \"🎯\" :\n pred.confidence >= 60 ? \"✨\" :\n pred.confidence >= 40 ? \"💡\" : \"🔍\";\n\n const actionIcon =\n pred.suggestedAction === \"apply\" ? \"⚡\" :\n pred.suggestedAction === \"reference\" ? \"📚\" :\n pred.suggestedAction === \"explore\" ? \"🔭\" : \"👀\";\n\n md += `### ${confidenceIcon} ${pred.title}\\n`;\n md += `**Confidence:** ${pred.confidence}% | **Type:** ${pred.type}\\n`;\n md += `**Why:** ${pred.reason}\\n`;\n md += `**Suggested Action:** ${actionIcon} ${pred.suggestedAction}\\n`;\n\n if (pred.tags.length > 0) {\n md += `**Tags:** ${pred.tags.slice(0, 5).join(\", \")}\\n`;\n }\n\n md += `\\n> ${pred.contentPreview}\\n\\n`;\n\n // Score breakdown\n md += `<details>\\n<summary>Score Breakdown</summary>\\n\\n`;\n md += `- Semantic: ${pred.scoreBreakdown.semanticScore}%\\n`;\n md += `- Temporal: ${pred.scoreBreakdown.temporalScore}%\\n`;\n md += `- Frequency: ${pred.scoreBreakdown.frequencyScore}%\\n`;\n md += `- Serendipity: ${pred.scoreBreakdown.serendipityScore}%\\n`;\n md += `- **Combined:** ${pred.scoreBreakdown.combinedScore}%\\n`;\n md += `</details>\\n\\n`;\n md += `---\\n\\n`;\n }\n\n md += `## Algorithm Info\\n`;\n md += `- **Version:** ${data.algorithmInfo.version}\\n`;\n md += `- **Embedding Model:** ${data.algorithmInfo.embeddingModel}\\n`;\n md += `- **Time Window:** ${data.algorithmInfo.timeWindowDays} days\\n`;\n md += `- **Weights:** Semantic ${data.scoringWeights.semantic * 100}%, `;\n md += `Temporal ${data.scoringWeights.temporal * 100}%, `;\n md += `Frequency ${data.scoringWeights.frequency * 100}%, `;\n md += `Serendipity ${data.scoringWeights.serendipity * 100}%\\n`;\n\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register prediction feedback tool\n server.registerTool(\n \"memory_prediction_feedback\",\n {\n title: \"Record Prediction Feedback\",\n description: `Record whether a prediction was useful. This helps improve future predictions.`,\n inputSchema: z.object({\n memory_id: z.string().uuid(),\n user_id: z.string().uuid(),\n useful: z.boolean().describe(\"Was this prediction useful?\"),\n action: z.enum([\"clicked\", \"saved\", \"dismissed\", \"ignored\"]).describe(\"What action was taken\"),\n dismiss_reason: z.enum([\"not_relevant\", \"already_know\", \"not_now\", \"other\"]).optional().describe(\"Reason for dismissal\"),\n }).strict(),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n async (rawParams: any) => {\n try {\n await client.recordPredictionFeedback({\n memoryId: rawParams.memory_id,\n userId: rawParams.user_id,\n useful: rawParams.useful,\n action: rawParams.action,\n dismissReason: rawParams.dismiss_reason,\n });\n\n return {\n content: [{\n type: \"text\" as const,\n text: `Feedback recorded. Thank you for helping improve predictions!`,\n }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n return server;\n}\n"]}
1
+ {"version":3,"sources":["../../src/core/errors.ts","../../src/utils/response-adapter.ts","../../src/utils/http-client.ts","../../src/core/client.ts","../../src/core/types.ts","../../src/utils/formatting.ts","../../src/server/mcp-server.ts"],"names":["z","McpServer"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * SDK-specific error classes\n */\n\nexport class MemoryIntelligenceError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"MemoryIntelligenceError\";\n }\n}\n\nexport class ConfigurationError extends MemoryIntelligenceError {\n constructor(message: string) {\n super(message);\n this.name = \"ConfigurationError\";\n }\n}\n\nexport class MemoryNotFoundError extends MemoryIntelligenceError {\n constructor(memoryId: string) {\n super(`Memory not found: ${memoryId}`);\n this.name = \"MemoryNotFoundError\";\n }\n}\n\nexport class DatabaseError extends MemoryIntelligenceError {\n constructor(message: string, public originalError?: Error) {\n super(message);\n this.name = \"DatabaseError\";\n }\n}\n\nexport class EmbeddingError extends MemoryIntelligenceError {\n constructor(message: string, public originalError?: Error) {\n super(message);\n this.name = \"EmbeddingError\";\n }\n}\n\nexport class ValidationError extends MemoryIntelligenceError {\n constructor(message: string) {\n super(message);\n this.name = \"ValidationError\";\n }\n}\n","/**\n * Response Adapter for Edge Function envelope format\n * Handles the transition between direct API responses and Edge Function wrapped responses\n */\n\nimport { EdgeFunctionResponse } from \"../core/types.js\";\nimport { ApiResponse } from \"./http-client.js\";\n\nexport interface UsageInfo {\n tokens_used: number;\n cost_usd: number;\n cached: boolean;\n}\n\nexport interface TierInfo {\n tier: string;\n usage_remaining: number;\n}\n\nexport interface UnwrappedResponse<T> {\n data?: T;\n error?: {\n message: string;\n code?: string;\n };\n usage?: UsageInfo;\n tier_info?: TierInfo;\n status: number;\n}\n\n/**\n * Adapts Edge Function envelope response to SDK internal format\n * Edge Functions return: { success, data, error, usage, tier_info }\n * SDK expects: { data, error, status }\n */\nexport function adaptEdgeFunctionResponse<T>(\n httpResponse: ApiResponse<EdgeFunctionResponse<T>>\n): UnwrappedResponse<T> {\n // If HTTP request itself failed\n if (httpResponse.error) {\n return {\n status: httpResponse.status,\n error: httpResponse.error,\n };\n }\n\n const envelope = httpResponse.data;\n\n // If no envelope data (shouldn't happen)\n if (!envelope) {\n return {\n status: httpResponse.status,\n error: {\n message: \"Empty response from server\",\n code: \"EMPTY_RESPONSE\",\n },\n };\n }\n\n // If Edge Function returned an error\n if (!envelope.success && envelope.error) {\n return {\n status: httpResponse.status,\n error: envelope.error,\n usage: envelope.usage,\n tier_info: envelope.tier_info,\n };\n }\n\n // Successful response\n return {\n status: httpResponse.status,\n data: envelope.data,\n usage: envelope.usage,\n tier_info: envelope.tier_info,\n };\n}\n\n/**\n * Checks if a response appears to be an Edge Function envelope\n */\nexport function isEdgeFunctionEnvelope(data: unknown): data is EdgeFunctionResponse<unknown> {\n if (typeof data !== \"object\" || data === null) {\n return false;\n }\n\n const obj = data as Record<string, unknown>;\n return \"success\" in obj && typeof obj.success === \"boolean\";\n}\n\n/**\n * Smart adapter that detects response format and adapts accordingly\n * Supports both direct API responses and Edge Function envelopes\n */\nexport function adaptResponse<T>(\n httpResponse: ApiResponse<T | EdgeFunctionResponse<T>>\n): UnwrappedResponse<T> {\n // If HTTP request itself failed\n if (httpResponse.error) {\n return {\n status: httpResponse.status,\n error: httpResponse.error,\n };\n }\n\n const responseData = httpResponse.data;\n\n // Check if it's an Edge Function envelope\n if (isEdgeFunctionEnvelope(responseData)) {\n return adaptEdgeFunctionResponse({\n status: httpResponse.status,\n data: responseData as EdgeFunctionResponse<T>,\n });\n }\n\n // Direct API response (legacy format)\n return {\n status: httpResponse.status,\n data: responseData as T,\n };\n}\n\n/**\n * Cache entry for offline fallback support\n */\nexport interface CacheEntry<T> {\n data: T;\n timestamp: number;\n endpoint: string;\n params?: Record<string, unknown>;\n}\n\n/**\n * Simple in-memory cache for offline fallback\n */\nexport class ResponseCache {\n private cache: Map<string, CacheEntry<unknown>> = new Map();\n private ttl: number;\n\n constructor(ttlMs: number = 300000) { // Default 5 minutes\n this.ttl = ttlMs;\n }\n\n private generateKey(endpoint: string, params?: Record<string, unknown>): string {\n const paramStr = params ? JSON.stringify(params) : \"\";\n return `${endpoint}:${paramStr}`;\n }\n\n set<T>(endpoint: string, data: T, params?: Record<string, unknown>): void {\n const key = this.generateKey(endpoint, params);\n this.cache.set(key, {\n data,\n timestamp: Date.now(),\n endpoint,\n params,\n });\n }\n\n get<T>(endpoint: string, params?: Record<string, unknown>): T | null {\n const key = this.generateKey(endpoint, params);\n const entry = this.cache.get(key);\n\n if (!entry) {\n return null;\n }\n\n // Check if expired\n if (Date.now() - entry.timestamp > this.ttl) {\n this.cache.delete(key);\n return null;\n }\n\n return entry.data as T;\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n /**\n * Clean up expired entries\n */\n cleanup(): void {\n const now = Date.now();\n for (const [key, entry] of this.cache.entries()) {\n if (now - entry.timestamp > this.ttl) {\n this.cache.delete(key);\n }\n }\n }\n}\n","/**\n * HTTP client for Lanonasis API\n * Supports Edge Function envelope format with caching for offline fallback\n */\n\nimport { ConfigurationError } from \"../core/errors.js\";\nimport { EdgeFunctionResponse, ProcessingMode } from \"../core/types.js\";\nimport { adaptResponse, ResponseCache, UsageInfo, TierInfo } from \"./response-adapter.js\";\n\nexport interface HttpClientConfig {\n apiUrl: string;\n apiKey?: string;\n authToken?: string;\n authType?: \"apiKey\" | \"bearer\";\n allowMissingAuth?: boolean;\n timeout?: number;\n headers?: Record<string, string>;\n processingMode?: ProcessingMode;\n enableCache?: boolean;\n cacheTTL?: number;\n}\n\nexport interface ApiResponse<T = any> {\n data?: T;\n error?: {\n message: string;\n code?: string;\n };\n status: number;\n}\n\nexport interface EnhancedApiResponse<T = any> extends ApiResponse<T> {\n usage?: UsageInfo;\n tier_info?: TierInfo;\n fromCache?: boolean;\n}\n\nexport class HttpClient {\n private apiUrl: string;\n private apiKey: string | undefined;\n private timeout: number;\n private headers: Record<string, string>;\n private processingMode: ProcessingMode;\n private cache: ResponseCache | null;\n\n constructor(config: HttpClientConfig) {\n this.apiUrl = config.apiUrl.replace(/\\/$/, \"\"); // Remove trailing slash\n\n // Determine auth type: explicit config, or infer from provided credentials\n let authType: \"apiKey\" | \"bearer\";\n if (config.authType) {\n authType = config.authType;\n } else if (config.apiKey) {\n authType = \"apiKey\";\n } else if (config.authToken) {\n authType = \"bearer\";\n } else if (config.allowMissingAuth) {\n // Default to apiKey when no auth provided but missing auth is allowed\n authType = \"apiKey\";\n } else {\n throw new ConfigurationError(\n \"Authentication required: provide apiKey, authToken, or set allowMissingAuth to true\"\n );\n }\n\n const allowMissingAuth = Boolean(config.allowMissingAuth);\n\n if (authType === \"apiKey\") {\n if (!config.apiKey && !allowMissingAuth) {\n throw new ConfigurationError(\"API key is required when authType is 'apiKey'\");\n }\n if (config.apiKey && !config.apiKey.startsWith(\"lano_\")) {\n throw new ConfigurationError(\n \"Invalid API key format. API key should start with 'lano_'\"\n );\n }\n } else if (!config.authToken && !allowMissingAuth) {\n throw new ConfigurationError(\"Bearer token is required when authType is 'bearer'\");\n }\n\n this.apiKey = config.apiKey;\n this.timeout = config.timeout || 30000;\n this.processingMode = config.processingMode || \"api\";\n\n const baseHeaders: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n ...config.headers,\n };\n\n if (authType === \"apiKey\" && this.apiKey && !(\"X-API-Key\" in baseHeaders)) {\n baseHeaders[\"X-API-Key\"] = this.apiKey;\n }\n\n if (authType === \"bearer\" && config.authToken && !(\"Authorization\" in baseHeaders)) {\n baseHeaders[\"Authorization\"] = `Bearer ${config.authToken}`;\n }\n\n this.headers = baseHeaders;\n\n // Initialize cache for offline-fallback mode\n if (config.enableCache !== false && this.processingMode === \"offline-fallback\") {\n this.cache = new ResponseCache(config.cacheTTL || 300000);\n } else {\n this.cache = null;\n }\n }\n\n /**\n * Get the current processing mode\n */\n getProcessingMode(): ProcessingMode {\n return this.processingMode;\n }\n\n /**\n * Check if cache is enabled\n */\n isCacheEnabled(): boolean {\n return this.cache !== null;\n }\n\n /**\n * Clear the response cache\n */\n clearCache(): void {\n this.cache?.clear();\n }\n\n private async request<T>(\n method: string,\n endpoint: string,\n data?: any\n ): Promise<ApiResponse<T>> {\n const url = `${this.apiUrl}${endpoint}`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\n\n try {\n const options: RequestInit = {\n method,\n headers: this.headers,\n signal: controller.signal,\n };\n\n if (data && (method === \"POST\" || method === \"PUT\" || method === \"PATCH\")) {\n options.body = JSON.stringify(data);\n }\n\n const response = await fetch(url, options);\n clearTimeout(timeoutId);\n\n const responseData = await response.json() as any;\n\n if (!response.ok) {\n return {\n status: response.status,\n error: {\n message: responseData?.message || responseData?.error || \"Request failed\",\n code: responseData?.code,\n },\n };\n }\n\n return {\n status: response.status,\n data: responseData as T,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n return {\n status: 408,\n error: {\n message: `Request timeout after ${this.timeout}ms`,\n code: \"TIMEOUT\",\n },\n };\n }\n\n return {\n status: 0,\n error: {\n message: error.message,\n code: \"NETWORK_ERROR\",\n },\n };\n }\n\n return {\n status: 0,\n error: {\n message: \"Unknown error occurred\",\n code: \"UNKNOWN_ERROR\",\n },\n };\n }\n }\n\n /**\n * Enhanced request that handles Edge Function envelope format\n * and supports offline-fallback caching\n */\n private async enhancedRequest<T>(\n method: string,\n endpoint: string,\n data?: any\n ): Promise<EnhancedApiResponse<T>> {\n const cacheKey = data ? JSON.stringify(data) : undefined;\n\n // Try API request first\n const rawResponse = await this.request<EdgeFunctionResponse<T> | T>(method, endpoint, data);\n\n // Handle network errors with offline fallback\n if (rawResponse.error?.code === \"NETWORK_ERROR\" || rawResponse.error?.code === \"TIMEOUT\") {\n if (this.processingMode === \"offline-fallback\" && this.cache) {\n const cached = this.cache.get<T>(endpoint, cacheKey ? JSON.parse(cacheKey) : undefined);\n if (cached) {\n return {\n status: 200,\n data: cached,\n fromCache: true,\n };\n }\n }\n // No cache available, return original error\n return {\n status: rawResponse.status,\n error: rawResponse.error,\n fromCache: false,\n };\n }\n\n // Adapt response (handles both direct and envelope formats)\n const adapted = adaptResponse<T>(rawResponse);\n\n // Cache successful responses for offline fallback\n if (!adapted.error && adapted.data && this.cache) {\n this.cache.set(endpoint, adapted.data, cacheKey ? JSON.parse(cacheKey) : undefined);\n }\n\n return {\n status: adapted.status,\n data: adapted.data,\n error: adapted.error,\n usage: adapted.usage,\n tier_info: adapted.tier_info,\n fromCache: false,\n };\n }\n\n async get<T>(endpoint: string): Promise<ApiResponse<T>> {\n return this.request<T>(\"GET\", endpoint);\n }\n\n async post<T>(endpoint: string, data?: any): Promise<ApiResponse<T>> {\n return this.request<T>(\"POST\", endpoint, data);\n }\n\n async put<T>(endpoint: string, data?: any): Promise<ApiResponse<T>> {\n return this.request<T>(\"PUT\", endpoint, data);\n }\n\n async patch<T>(endpoint: string, data?: any): Promise<ApiResponse<T>> {\n return this.request<T>(\"PATCH\", endpoint, data);\n }\n\n async delete<T>(endpoint: string): Promise<ApiResponse<T>> {\n return this.request<T>(\"DELETE\", endpoint);\n }\n\n // Enhanced methods with Edge Function envelope support\n\n async getEnhanced<T>(endpoint: string): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"GET\", endpoint);\n }\n\n async postEnhanced<T>(endpoint: string, data?: any): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"POST\", endpoint, data);\n }\n\n async putEnhanced<T>(endpoint: string, data?: any): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"PUT\", endpoint, data);\n }\n\n async patchEnhanced<T>(endpoint: string, data?: any): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"PATCH\", endpoint, data);\n }\n\n async deleteEnhanced<T>(endpoint: string): Promise<EnhancedApiResponse<T>> {\n return this.enhancedRequest<T>(\"DELETE\", endpoint);\n }\n}\n","/**\n * Core Memory Intelligence Client\n * Supports API-first with offline-fallback capability\n */\n\nimport {\n MemoryIntelligenceConfig,\n AnalyzePatternsParams,\n PatternAnalysis,\n SuggestTagsParams,\n TagSuggestionsResult,\n FindRelatedParams,\n RelatedMemoriesResult,\n DetectDuplicatesParams,\n DuplicatesResult,\n ExtractInsightsParams,\n InsightsResult,\n HealthCheckParams,\n MemoryHealth,\n QueryMemoriesOptions,\n MemoryEntry,\n ProcessingMode,\n} from \"./types.js\";\nimport {\n PredictiveRecallParams,\n PredictiveRecallResult,\n} from \"./prediction-types.js\";\nimport {\n RecordBehaviorParams,\n RecordBehaviorResult,\n RecallBehaviorParams,\n RecallBehaviorResult,\n SuggestActionParams,\n SuggestActionResult,\n BehaviorPattern,\n} from \"./behavior-types.js\";\nimport { DatabaseError } from \"./errors.js\";\nimport { HttpClient } from \"../utils/http-client.js\";\nimport { UsageInfo, TierInfo } from \"../utils/response-adapter.js\";\n\nconst DEFAULT_API_URL = \"https://api.lanonasis.com/api/v1\";\n\nexport interface IntelligenceResponse<T> {\n data: T;\n usage?: UsageInfo;\n tier_info?: TierInfo;\n fromCache?: boolean;\n}\n\nexport class MemoryIntelligenceClient {\n private httpClient: HttpClient;\n private defaultResponseFormat: \"json\" | \"markdown\";\n private processingMode: ProcessingMode;\n\n constructor(config: MemoryIntelligenceConfig) {\n this.processingMode = config.processingMode || \"api\";\n const authType = config.authType || (config.apiKey ? \"apiKey\" : \"bearer\");\n\n this.httpClient = new HttpClient({\n apiUrl: config.apiUrl || DEFAULT_API_URL,\n apiKey: config.apiKey,\n authToken: config.authToken,\n authType,\n allowMissingAuth: config.allowMissingAuth,\n timeout: config.timeout,\n headers: config.headers,\n processingMode: this.processingMode,\n enableCache: config.enableCache,\n cacheTTL: config.cacheTTL,\n });\n\n this.defaultResponseFormat = config.responseFormat || \"markdown\";\n }\n\n /**\n * Get the current processing mode\n */\n getProcessingMode(): ProcessingMode {\n return this.processingMode;\n }\n\n /**\n * Check if cache is enabled (for offline-fallback mode)\n */\n isCacheEnabled(): boolean {\n return this.httpClient.isCacheEnabled();\n }\n\n /**\n * Clear the response cache\n */\n clearCache(): void {\n this.httpClient.clearCache();\n }\n\n /**\n * Get HTTP client for direct API access\n */\n public getHttpClient(): HttpClient {\n return this.httpClient;\n }\n\n /**\n * Query memories from the API\n */\n public async queryMemories(\n userId: string,\n options: QueryMemoriesOptions = {}\n ): Promise<MemoryEntry[]> {\n const { type, limit = 100, offset = 0 } = options;\n\n const params = new URLSearchParams({\n user_id: userId,\n limit: limit.toString(),\n offset: offset.toString(),\n });\n\n if (type) {\n params.append(\"type\", type);\n }\n\n const response = await this.httpClient.get<{ memories: MemoryEntry[] }>(\n `/intelligence/memories?${params.toString()}`\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to query memories: ${response.error.message}`);\n }\n\n return response.data?.memories || [];\n }\n\n /**\n * Analyze usage patterns and trends in memory collection\n */\n async analyzePatterns(params: AnalyzePatternsParams): Promise<IntelligenceResponse<PatternAnalysis>> {\n const response = await this.httpClient.postEnhanced<PatternAnalysis>(\n \"/intelligence/analyze-patterns\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to analyze patterns: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Get AI-powered tag suggestions for a memory\n */\n async suggestTags(params: SuggestTagsParams): Promise<IntelligenceResponse<TagSuggestionsResult>> {\n const response = await this.httpClient.postEnhanced<TagSuggestionsResult>(\n \"/intelligence/suggest-tags\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to suggest tags: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Find semantically related memories using vector similarity\n */\n async findRelated(params: FindRelatedParams): Promise<IntelligenceResponse<RelatedMemoriesResult>> {\n const response = await this.httpClient.postEnhanced<RelatedMemoriesResult>(\n \"/intelligence/find-related\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to find related memories: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Detect potential duplicate memories\n */\n async detectDuplicates(params: DetectDuplicatesParams): Promise<IntelligenceResponse<DuplicatesResult>> {\n const response = await this.httpClient.postEnhanced<DuplicatesResult>(\n \"/intelligence/detect-duplicates\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to detect duplicates: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Extract insights and patterns from memories\n */\n async extractInsights(params: ExtractInsightsParams): Promise<IntelligenceResponse<InsightsResult>> {\n const response = await this.httpClient.postEnhanced<InsightsResult>(\n \"/intelligence/extract-insights\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to extract insights: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Check the health and organization quality of memories\n */\n async healthCheck(params: HealthCheckParams): Promise<IntelligenceResponse<MemoryHealth>> {\n const response = await this.httpClient.postEnhanced<MemoryHealth>(\n \"/intelligence/health-check\",\n {\n ...params,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to check health: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Predictive Memory Recall - AI that anticipates what you need\n *\n * Uses a weighted scoring algorithm:\n * - Semantic similarity to current context (40%)\n * - Temporal relevance (recency decay curve) (30%)\n * - Usage frequency (20%)\n * - Serendipity factor (adjacent discoveries) (10%)\n *\n * @example\n * ```typescript\n * const result = await client.predictiveRecall({\n * userId: \"user-123\",\n * context: {\n * currentProject: \"Building dashboard components\",\n * recentTopics: [\"React\", \"performance\", \"hooks\"],\n * contextText: \"Optimizing render performance for data tables\"\n * },\n * limit: 5,\n * minConfidence: 50\n * });\n *\n * for (const prediction of result.data.predictions) {\n * console.log(`[${prediction.confidence}%] ${prediction.title}`);\n * console.log(` Reason: ${prediction.reason}`);\n * console.log(` Action: ${prediction.suggestedAction}`);\n * }\n * ```\n */\n async predictiveRecall(\n params: PredictiveRecallParams\n ): Promise<IntelligenceResponse<PredictiveRecallResult>> {\n const response = await this.httpClient.postEnhanced<PredictiveRecallResult>(\n \"/intelligence/predictive-recall\",\n {\n userId: params.userId,\n context: params.context,\n limit: params.limit || 5,\n minConfidence: params.minConfidence || 40,\n includeSerendipity: params.includeSerendipity !== false,\n memoryTypes: params.memoryTypes,\n timeWindowDays: params.timeWindowDays || 90,\n responseFormat: params.responseFormat || this.defaultResponseFormat,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to get predictions: ${response.error.message}`);\n }\n\n return {\n data: response.data!,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Record feedback on a prediction (for improving accuracy over time)\n *\n * @example\n * ```typescript\n * await client.recordPredictionFeedback({\n * memoryId: \"mem-123\",\n * userId: \"user-123\",\n * useful: true,\n * action: \"clicked\"\n * });\n * ```\n */\n async recordPredictionFeedback(params: {\n memoryId: string;\n userId: string;\n useful: boolean;\n action: \"clicked\" | \"saved\" | \"dismissed\" | \"ignored\";\n dismissReason?: \"not_relevant\" | \"already_know\" | \"not_now\" | \"other\";\n }): Promise<void> {\n await this.httpClient.post(\"/intelligence/prediction-feedback\", params);\n }\n\n // ============================================================================\n // Behavioral Learning Methods\n // ============================================================================\n\n /**\n * Record a successful behavior pattern for future recall\n *\n * The system automatically:\n * - Generates an embedding from the trigger description\n * - Detects and updates duplicates (>95% similarity)\n * - Tracks usage counts for pattern prioritization\n *\n * @example\n * ```typescript\n * const result = await client.recordBehavior({\n * user_id: \"user-123\",\n * trigger: \"User wants to refactor a React component to use hooks\",\n * context: {\n * project: \"dashboard-app\",\n * active_files: [\"src/components/DataTable.tsx\"]\n * },\n * actions: [\n * { tool: \"read_file\", params: { path: \"src/components/DataTable.tsx\" } },\n * { tool: \"analyze_code\", params: { focus: \"class_components\" } },\n * { tool: \"edit_file\", params: { path: \"src/components/DataTable.tsx\" } }\n * ],\n * final_outcome: \"Successfully converted class component to functional with hooks\"\n * });\n *\n * if (result.data.was_duplicate) {\n * console.log(\"Updated existing pattern:\", result.data.pattern.id);\n * }\n * ```\n */\n async recordBehavior(\n params: RecordBehaviorParams\n ): Promise<IntelligenceResponse<RecordBehaviorResult>> {\n const response = await this.httpClient.postEnhanced<RecordBehaviorResult>(\n \"/intelligence/behavior-record\",\n {\n user_id: params.user_id,\n trigger: params.trigger,\n context: params.context || {},\n actions: params.actions,\n final_outcome: params.final_outcome,\n confidence: params.confidence ?? 0.7,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to record behavior: ${response.error.message}`);\n }\n\n // Handle the edge function response format\n const data = response.data as any;\n return {\n data: {\n pattern: data.data || data,\n was_duplicate: data.message?.includes(\"duplicate\") || false,\n message: data.message || \"Behavior pattern recorded successfully\",\n },\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Recall similar behavior patterns based on current context\n *\n * Use this to find workflows that match the user's current task,\n * enabling AI assistants to suggest proven approaches.\n *\n * @example\n * ```typescript\n * const result = await client.recallBehavior({\n * user_id: \"user-123\",\n * context: {\n * current_task: \"Need to optimize database queries for user dashboard\"\n * },\n * limit: 5,\n * similarity_threshold: 0.7\n * });\n *\n * for (const match of result.data.patterns) {\n * console.log(`[${Math.round(match.similarity_score * 100)}%] ${match.pattern.trigger}`);\n * console.log(` Actions: ${match.pattern.actions.map(a => a.tool).join(\" → \")}`);\n * }\n * ```\n */\n async recallBehavior(\n params: RecallBehaviorParams\n ): Promise<IntelligenceResponse<RecallBehaviorResult>> {\n const response = await this.httpClient.postEnhanced<RecallBehaviorResult>(\n \"/intelligence/behavior-recall\",\n {\n user_id: params.user_id,\n context: params.context,\n limit: params.limit ?? 5,\n similarity_threshold: params.similarity_threshold ?? 0.7,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to recall behaviors: ${response.error.message}`);\n }\n\n // Handle the edge function response format\n const data = response.data as any;\n return {\n data: data.data || data,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * Get AI-powered action suggestions based on learned patterns\n *\n * Analyzes the current state and completed steps to predict\n * what action the user should take next based on similar workflows.\n *\n * @example\n * ```typescript\n * const result = await client.suggestAction({\n * user_id: \"user-123\",\n * current_state: {\n * task_description: \"Implementing user authentication with OAuth\",\n * completed_steps: [\n * { tool: \"create_file\", params: { path: \"src/auth/oauth.ts\" } },\n * { tool: \"read_file\", params: { path: \"package.json\" } }\n * ]\n * },\n * max_suggestions: 3\n * });\n *\n * for (const suggestion of result.data.suggestions) {\n * console.log(`[${Math.round(suggestion.confidence * 100)}%] ${suggestion.action}`);\n * console.log(` Tool: ${suggestion.tool}`);\n * console.log(` Why: ${suggestion.reasoning}`);\n * }\n * ```\n */\n async suggestAction(\n params: SuggestActionParams\n ): Promise<IntelligenceResponse<SuggestActionResult>> {\n const response = await this.httpClient.postEnhanced<SuggestActionResult>(\n \"/intelligence/behavior-suggest\",\n {\n user_id: params.user_id,\n current_state: params.current_state,\n max_suggestions: params.max_suggestions ?? 3,\n }\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to get action suggestions: ${response.error.message}`);\n }\n\n // Handle the edge function response format\n const data = response.data as any;\n return {\n data: data.data || data,\n usage: response.usage,\n tier_info: response.tier_info,\n fromCache: response.fromCache,\n };\n }\n\n /**\n * List all behavior patterns for a user\n *\n * @example\n * ```typescript\n * const patterns = await client.listBehaviorPatterns(\"user-123\", { limit: 20 });\n * console.log(`Found ${patterns.length} patterns`);\n * ```\n */\n async listBehaviorPatterns(\n userId: string,\n options: { limit?: number; offset?: number } = {}\n ): Promise<BehaviorPattern[]> {\n const { limit = 50, offset = 0 } = options;\n\n const response = await this.httpClient.get<{ patterns: BehaviorPattern[] }>(\n `/intelligence/behavior-patterns?user_id=${userId}&limit=${limit}&offset=${offset}`\n );\n\n if (response.error) {\n throw new DatabaseError(`Failed to list behavior patterns: ${response.error.message}`);\n }\n\n return response.data?.patterns || [];\n }\n}\n","/**\n * Type definitions for Memory Intelligence SDK\n */\n\nimport { z } from \"zod\";\n\n// Response format enum\nexport const ResponseFormat = {\n JSON: \"json\",\n MARKDOWN: \"markdown\",\n} as const;\n\nexport type ResponseFormatType = (typeof ResponseFormat)[keyof typeof ResponseFormat];\n\n// Memory type enum\nexport const MemoryType = z.enum([\n \"context\",\n \"project\",\n \"knowledge\",\n \"reference\",\n \"personal\",\n \"workflow\",\n]);\n\nexport type MemoryTypeValue = z.infer<typeof MemoryType>;\n\n// Processing mode for SDK operations\nexport type ProcessingMode = 'api' | 'offline-fallback';\n\n// Configuration interface\nexport interface MemoryIntelligenceConfig {\n apiUrl?: string; // Lanonasis API URL (default: https://api.lanonasis.com/api/v1)\n apiKey?: string; // Lanonasis API key (format: lano_xxxxxxxxxx)\n authToken?: string; // Bearer token for user-scoped auth (dashboard/SSO)\n authType?: 'apiKey' | 'bearer'; // Explicitly set auth type; inferred from apiKey/authToken if not provided\n allowMissingAuth?: boolean; // Allow client creation without auth (SDK consumers should gate calls)\n timeout?: number; // Request timeout in milliseconds (default: 30000)\n responseFormat?: ResponseFormatType;\n headers?: Record<string, string>; // Custom headers\n\n /**\n * Processing mode for intelligence operations\n * - 'api': Always use Lanonasis API endpoints (default)\n * - 'offline-fallback': Use API, fall back to cached/local data if unreachable\n * @default 'api'\n */\n processingMode?: ProcessingMode;\n\n /**\n * Enable caching of API responses for offline fallback\n * Only used when processingMode is 'offline-fallback'\n * @default true\n */\n enableCache?: boolean;\n\n /**\n * Cache TTL in milliseconds (default: 5 minutes)\n * @default 300000\n */\n cacheTTL?: number;\n}\n\n// API response wrapper from Edge Functions\nexport interface EdgeFunctionResponse<T> {\n success: boolean;\n data?: T;\n error?: {\n message: string;\n code?: string;\n };\n usage?: {\n tokens_used: number;\n cost_usd: number;\n cached: boolean;\n };\n tier_info?: {\n tier: string;\n usage_remaining: number;\n };\n}\n\n// Tool parameter interfaces\nexport interface AnalyzePatternsParams {\n userId: string;\n timeRangeDays?: number;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface SuggestTagsParams {\n memoryId: string;\n userId: string;\n maxSuggestions?: number;\n includeExistingTags?: boolean;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface FindRelatedParams {\n memoryId: string;\n userId: string;\n limit?: number;\n similarityThreshold?: number;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface DetectDuplicatesParams {\n userId: string;\n similarityThreshold?: number;\n maxPairs?: number;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface ExtractInsightsParams {\n userId: string;\n topic?: string;\n memoryType?: MemoryTypeValue;\n maxMemories?: number;\n responseFormat?: ResponseFormatType;\n}\n\nexport interface HealthCheckParams {\n userId: string;\n responseFormat?: ResponseFormatType;\n}\n\n// Tool result interfaces\nexport interface PatternAnalysis {\n total_memories: number;\n memories_by_type: Record<string, number>;\n memories_by_day_of_week: Record<string, number>;\n peak_creation_hours: number[];\n average_content_length: number;\n most_common_tags: Array<{ tag: string; count: number }>;\n creation_velocity: {\n daily_average: number;\n trend: \"increasing\" | \"stable\" | \"decreasing\";\n };\n insights: string[];\n}\n\nexport interface TagSuggestion {\n tag: string;\n confidence: number;\n reasoning: string;\n}\n\nexport interface TagSuggestionsResult {\n memory_id: string;\n existing_tags: string[];\n suggestions: TagSuggestion[];\n context: {\n memory_type: string;\n related_memories_analyzed: number;\n };\n}\n\nexport interface RelatedMemory {\n id: string;\n title: string;\n type: string;\n similarity_score: number;\n shared_tags: string[];\n content_preview: string;\n}\n\nexport interface RelatedMemoriesResult {\n source_memory: {\n id: string;\n title: string;\n type: string;\n };\n related_memories: RelatedMemory[];\n total_found: number;\n}\n\nexport interface DuplicateEntry {\n id: string;\n title: string;\n similarity: number;\n created_at: string;\n}\n\nexport interface DuplicateGroup {\n primary_id: string;\n primary_title: string;\n duplicates: DuplicateEntry[];\n similarity_score: number;\n}\n\nexport interface DuplicatesResult {\n duplicate_groups: DuplicateGroup[];\n total_groups: number;\n total_duplicates: number;\n detection_method: \"semantic\" | \"text\";\n threshold_used: number;\n memories_analyzed: number;\n potential_storage_savings: string;\n}\n\nexport interface Insight {\n type: \"themes\" | \"connections\" | \"gaps\" | \"actions\" | \"summary\";\n content: string;\n confidence: number;\n related_memory_ids: string[];\n}\n\nexport interface InsightsResult {\n insights: Insight[];\n overall_summary: string;\n memories_analyzed: number;\n insight_types: string[];\n topic_filter?: string | null;\n generated_at: string;\n}\n\nexport interface HealthScoreBreakdown {\n organization: number;\n tagging: number;\n recency: number;\n completeness: number;\n diversity: number;\n}\n\nexport interface HealthScore {\n overall: number;\n breakdown: HealthScoreBreakdown;\n}\n\nexport interface HealthStatistics {\n total_memories: number;\n active_memories: number;\n archived_memories: number;\n memories_with_tags: number;\n unique_tags: number;\n memory_types: number;\n recent_memories_30d: number;\n stale_memories_90d: number;\n}\n\nexport interface HealthIssue {\n severity: \"high\" | \"medium\" | \"low\";\n category: string;\n description: string;\n affected_count: number;\n recommendation: string;\n}\n\nexport interface MemoryHealth {\n health_score: HealthScore;\n status: \"excellent\" | \"good\" | \"needs_attention\" | \"poor\";\n statistics: HealthStatistics;\n issues: HealthIssue[];\n recommendations: string[];\n generated_at: string;\n}\n\n// Memory entry interface (from database)\nexport interface MemoryEntry {\n id: string;\n user_id: string;\n title: string;\n content: string;\n type: MemoryTypeValue;\n tags?: string[];\n metadata?: Record<string, any>;\n embedding?: number[];\n created_at: string;\n updated_at: string;\n}\n\n// Query options for internal use\nexport interface QueryMemoriesOptions {\n type?: string;\n limit?: number;\n offset?: number;\n includeEmbeddings?: boolean;\n}\n","/**\n * Response formatting utilities\n */\n\nimport { ResponseFormat, ResponseFormatType } from \"../core/types.js\";\n\n// Character limit for responses\nconst CHARACTER_LIMIT = 50000;\n\n/**\n * Format response based on requested format\n */\nexport function formatResponse<T>(\n data: T,\n format: ResponseFormatType,\n markdownFormatter: (data: T) => string\n): string {\n if (format === ResponseFormat.JSON) {\n return JSON.stringify(data, null, 2);\n }\n return markdownFormatter(data);\n}\n\n/**\n * Truncate response if too long\n */\nexport function truncateIfNeeded(text: string): string {\n if (text.length > CHARACTER_LIMIT) {\n return (\n text.substring(0, CHARACTER_LIMIT) +\n `\\n\\n... (truncated, ${text.length - CHARACTER_LIMIT} characters omitted)`\n );\n }\n return text;\n}\n","/**\n * MCP Server wrapper using the SDK\n */\n\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport { MemoryIntelligenceClient } from \"../core/client.js\";\nimport { MemoryIntelligenceConfig, ResponseFormat, MemoryType } from \"../core/types.js\";\nimport { formatResponse, truncateIfNeeded } from \"../utils/formatting.js\";\nimport { PredictiveRecallResult } from \"../core/prediction-types.js\";\n\nexport function createMCPServer(config: MemoryIntelligenceConfig): McpServer {\n const client = new MemoryIntelligenceClient(config);\n // Avoid massive generic inference across all tool registrations during\n // declaration emit; we return a strongly typed McpServer at the boundary.\n const server: any = new McpServer({\n name: \"memory-intelligence-mcp-server\",\n version: \"1.1.0\",\n });\n\n // Register analyze patterns tool\n server.registerTool(\n \"memory_analyze_patterns\",\n {\n title: \"Analyze Memory Patterns\",\n description: `Analyze usage patterns and trends in the user's memory collection.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n time_range_days: z.number().int().min(1).max(365).default(30),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n timeRangeDays: rawParams.time_range_days,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.analyzePatterns(params);\n const analysis = response.data;\n const responseText = formatResponse(\n analysis,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Memory Pattern Analysis\\n\\n`;\n md += `**Time Range:** Last ${params.timeRangeDays || 30} days\\n`;\n md += `**Total Memories:** ${data.total_memories}\\n\\n`;\n md += `## Distribution by Type\\n`;\n for (const [type, count] of Object.entries(data.memories_by_type)) {\n const percentage = (((count as number) / data.total_memories) * 100).toFixed(1);\n md += `- **${type}**: ${count} (${percentage}%)\\n`;\n }\n md += `\\n## Activity Patterns\\n`;\n md += `- **Peak Hours (UTC):** ${data.peak_creation_hours.join(\", \")}\\n`;\n md += `- **Daily Average:** ${data.creation_velocity.daily_average} memories/day\\n`;\n md += `- **Trend:** ${data.creation_velocity.trend}\\n`;\n md += `\\n## Top Tags\\n`;\n for (const { tag, count } of data.most_common_tags.slice(0, 5)) {\n md += `- **${tag}**: ${count} uses\\n`;\n }\n md += `\\n## AI Insights\\n`;\n for (const insight of data.insights) {\n md += `${insight}\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register suggest tags tool\n server.registerTool(\n \"memory_suggest_tags\",\n {\n title: \"Suggest Tags for Memory\",\n description: `AI-powered tag suggestions for a memory.`,\n inputSchema: z.object({\n memory_id: z.string().uuid(),\n user_id: z.string().uuid(),\n max_suggestions: z.number().int().min(1).max(20).default(5),\n include_existing_tags: z.boolean().default(true),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n memoryId: rawParams.memory_id,\n userId: rawParams.user_id,\n maxSuggestions: rawParams.max_suggestions,\n includeExistingTags: rawParams.include_existing_tags,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.suggestTags(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Tag Suggestions\\n\\n`;\n md += `**Existing Tags:** ${data.existing_tags.join(\", \") || \"none\"}\\n\\n`;\n md += `## Suggested Tags\\n`;\n for (const suggestion of data.suggestions) {\n md += `\\n### \\`${suggestion.tag}\\`\\n`;\n md += `**Confidence:** ${(suggestion.confidence * 100).toFixed(0)}%\\n`;\n md += `**Reason:** ${suggestion.reasoning}\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register find related tool\n server.registerTool(\n \"memory_find_related\",\n {\n title: \"Find Related Memories\",\n description: `Find semantically related memories using vector similarity.`,\n inputSchema: z.object({\n memory_id: z.string().uuid(),\n user_id: z.string().uuid(),\n limit: z.number().int().min(1).max(50).default(10),\n similarity_threshold: z.number().min(0).max(1).default(0.7),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n memoryId: rawParams.memory_id,\n userId: rawParams.user_id,\n limit: rawParams.limit,\n similarityThreshold: rawParams.similarity_threshold,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.findRelated(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Related Memories\\n\\n`;\n md += `**Source:** ${data.source_memory.title}\\n`;\n md += `**Found:** ${data.total_found} related memories\\n\\n`;\n for (const mem of data.related_memories) {\n md += `## ${mem.title}\\n`;\n md += `**Similarity:** ${(mem.similarity_score * 100).toFixed(1)}%\\n`;\n if (mem.shared_tags.length > 0) {\n md += `**Shared Tags:** ${mem.shared_tags.join(\", \")}\\n`;\n }\n md += `**Preview:** ${mem.content_preview}\\n\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register detect duplicates tool\n server.registerTool(\n \"memory_detect_duplicates\",\n {\n title: \"Detect Duplicate Memories\",\n description: `Find potential duplicate memories.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n similarity_threshold: z.number().min(0.8).max(0.99).default(0.9),\n max_pairs: z.number().int().min(1).max(100).default(20),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n similarityThreshold: rawParams.similarity_threshold,\n maxPairs: rawParams.max_pairs,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.detectDuplicates(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Duplicate Detection\\n\\n`;\n md += `**Memories Analyzed:** ${data.memories_analyzed}\\n`;\n md += `**Duplicate Groups Found:** ${data.total_groups}\\n`;\n md += `**Total Duplicates:** ${data.total_duplicates}\\n`;\n md += `**Storage Savings:** ${data.potential_storage_savings}\\n\\n`;\n for (const group of data.duplicate_groups) {\n md += `### ${group.primary_title}\\n`;\n md += `**Similarity Score:** ${(group.similarity_score * 100).toFixed(1)}%\\n`;\n md += `**Duplicates:**\\n`;\n for (const dup of group.duplicates) {\n md += `- ${dup.title} (${(dup.similarity * 100).toFixed(1)}% similar)\\n`;\n }\n md += `\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register extract insights tool\n server.registerTool(\n \"memory_extract_insights\",\n {\n title: \"Extract Insights from Memories\",\n description: `Extract key insights and patterns from memories.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n topic: z.string().optional(),\n memory_type: z.string().optional(),\n max_memories: z.number().int().min(5).max(100).default(20),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n topic: rawParams.topic,\n memoryType: rawParams.memory_type,\n maxMemories: rawParams.max_memories,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.extractInsights(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Memory Insights\\n\\n`;\n md += `**Memories Analyzed:** ${data.memories_analyzed}\\n`;\n if (data.topic_filter) {\n md += `**Topic:** ${data.topic_filter}\\n`;\n }\n md += `\\n## Summary\\n${data.overall_summary}\\n\\n`;\n md += `## Insights\\n`;\n const typeIcons: Record<string, string> = {\n themes: \"🎯\",\n connections: \"🔗\",\n gaps: \"⚠️\",\n actions: \"✅\",\n summary: \"📋\",\n };\n for (const insight of data.insights) {\n const icon = typeIcons[insight.type] || \"📌\";\n md += `\\n### ${icon} ${insight.type.charAt(0).toUpperCase() + insight.type.slice(1)}\\n`;\n md += `${insight.content}\\n`;\n md += `**Confidence:** ${(insight.confidence * 100).toFixed(0)}%\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register health check tool\n server.registerTool(\n \"memory_health_check\",\n {\n title: \"Memory Health Check\",\n description: `Analyze the health and organization quality of memories.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.healthCheck(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data) => {\n let md = `# Memory Health Check\\n\\n`;\n md += `**Health Score:** ${data.health_score.overall}/100\\n`;\n md += `**Status:** ${data.status}\\n\\n`;\n md += `## Score Breakdown\\n`;\n md += `- **Organization:** ${data.health_score.breakdown.organization}\\n`;\n md += `- **Tagging:** ${data.health_score.breakdown.tagging}\\n`;\n md += `- **Recency:** ${data.health_score.breakdown.recency}\\n`;\n md += `- **Completeness:** ${data.health_score.breakdown.completeness}\\n`;\n md += `- **Diversity:** ${data.health_score.breakdown.diversity}\\n\\n`;\n md += `## Statistics\\n`;\n md += `- **Total Memories:** ${data.statistics.total_memories}\\n`;\n md += `- **Active Memories:** ${data.statistics.active_memories}\\n`;\n md += `- **Memories with Tags:** ${data.statistics.memories_with_tags}\\n`;\n md += `- **Unique Tags:** ${data.statistics.unique_tags}\\n`;\n md += `- **Recent (30d):** ${data.statistics.recent_memories_30d}\\n\\n`;\n if (data.issues.length > 0) {\n md += `## Issues\\n`;\n for (const issue of data.issues) {\n const icon = issue.severity === \"high\" ? \"🔴\" : issue.severity === \"medium\" ? \"🟡\" : \"🟢\";\n md += `- ${icon} **${issue.category}:** ${issue.description}\\n`;\n }\n md += `\\n`;\n }\n md += `## Recommendations\\n`;\n for (const rec of data.recommendations) {\n md += `- ${rec}\\n`;\n }\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register predictive recall tool\n server.registerTool(\n \"memory_predictive_recall\",\n {\n title: \"Predictive Memory Recall\",\n description: `AI-powered prediction of memories you'll need based on your current context. Uses semantic similarity, temporal relevance, usage patterns, and serendipity scoring to anticipate what you need before you realize it.`,\n inputSchema: z.object({\n user_id: z.string().uuid(),\n context: z.object({\n current_project: z.string().optional().describe(\"Current project or task description\"),\n recent_topics: z.array(z.string()).optional().describe(\"Recent topics you've been working on\"),\n active_files: z.array(z.string()).optional().describe(\"Files currently being worked on\"),\n context_text: z.string().optional().describe(\"Free-form context (current task, meeting notes, etc.)\"),\n team_context: z.string().optional().describe(\"Team discussion topics for team-aware predictions\"),\n }).describe(\"Your current work context for generating predictions\"),\n limit: z.number().int().min(1).max(20).default(5).describe(\"Maximum predictions to return\"),\n min_confidence: z.number().min(0).max(100).default(40).describe(\"Minimum confidence threshold (0-100)\"),\n include_serendipity: z.boolean().default(true).describe(\"Include surprising adjacent discoveries\"),\n memory_types: z.array(MemoryType).optional().describe(\"Filter by memory types\"),\n time_window_days: z.number().int().min(1).max(365).default(90).describe(\"Time window for recency scoring\"),\n response_format: z\n .enum([ResponseFormat.JSON, ResponseFormat.MARKDOWN])\n .default(ResponseFormat.MARKDOWN),\n }).strict(),\n annotations: {\n readOnlyHint: true,\n destructiveHint: false,\n idempotentHint: false,\n openWorldHint: true,\n },\n },\n async (rawParams: any) => {\n try {\n const params = {\n userId: rawParams.user_id,\n context: {\n currentProject: rawParams.context?.current_project,\n recentTopics: rawParams.context?.recent_topics,\n activeFiles: rawParams.context?.active_files,\n contextText: rawParams.context?.context_text,\n teamContext: rawParams.context?.team_context,\n },\n limit: rawParams.limit,\n minConfidence: rawParams.min_confidence,\n includeSerendipity: rawParams.include_serendipity,\n memoryTypes: rawParams.memory_types,\n timeWindowDays: rawParams.time_window_days,\n responseFormat: rawParams.response_format,\n };\n\n const response = await client.predictiveRecall(params);\n const result = response.data;\n const responseText = formatResponse(\n result,\n params.responseFormat || \"markdown\",\n (data: PredictiveRecallResult) => {\n let md = `# Predicted Memories for You\\n\\n`;\n md += `**Memories Analyzed:** ${data.memoriesAnalyzed}\\n`;\n md += `**Predictions Found:** ${data.totalPredictions}\\n\\n`;\n\n if (data.predictions.length === 0) {\n md += `_No predictions above the confidence threshold. Try providing more context or lowering the threshold._\\n`;\n return md;\n }\n\n md += `## Your Predictions\\n\\n`;\n\n for (const pred of data.predictions) {\n const confidenceIcon =\n pred.confidence >= 80 ? \"🎯\" :\n pred.confidence >= 60 ? \"✨\" :\n pred.confidence >= 40 ? \"💡\" : \"🔍\";\n\n const actionIcon =\n pred.suggestedAction === \"apply\" ? \"⚡\" :\n pred.suggestedAction === \"reference\" ? \"📚\" :\n pred.suggestedAction === \"explore\" ? \"🔭\" : \"👀\";\n\n md += `### ${confidenceIcon} ${pred.title}\\n`;\n md += `**Confidence:** ${pred.confidence}% | **Type:** ${pred.type}\\n`;\n md += `**Why:** ${pred.reason}\\n`;\n md += `**Suggested Action:** ${actionIcon} ${pred.suggestedAction}\\n`;\n\n if (pred.tags.length > 0) {\n md += `**Tags:** ${pred.tags.slice(0, 5).join(\", \")}\\n`;\n }\n\n md += `\\n> ${pred.contentPreview}\\n\\n`;\n\n // Score breakdown\n md += `<details>\\n<summary>Score Breakdown</summary>\\n\\n`;\n md += `- Semantic: ${pred.scoreBreakdown.semanticScore}%\\n`;\n md += `- Temporal: ${pred.scoreBreakdown.temporalScore}%\\n`;\n md += `- Frequency: ${pred.scoreBreakdown.frequencyScore}%\\n`;\n md += `- Serendipity: ${pred.scoreBreakdown.serendipityScore}%\\n`;\n md += `- **Combined:** ${pred.scoreBreakdown.combinedScore}%\\n`;\n md += `</details>\\n\\n`;\n md += `---\\n\\n`;\n }\n\n md += `## Algorithm Info\\n`;\n md += `- **Version:** ${data.algorithmInfo.version}\\n`;\n md += `- **Embedding Model:** ${data.algorithmInfo.embeddingModel}\\n`;\n md += `- **Time Window:** ${data.algorithmInfo.timeWindowDays} days\\n`;\n md += `- **Weights:** Semantic ${data.scoringWeights.semantic * 100}%, `;\n md += `Temporal ${data.scoringWeights.temporal * 100}%, `;\n md += `Frequency ${data.scoringWeights.frequency * 100}%, `;\n md += `Serendipity ${data.scoringWeights.serendipity * 100}%\\n`;\n\n return md;\n }\n );\n\n return {\n content: [{ type: \"text\" as const, text: truncateIfNeeded(responseText) }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n // Register prediction feedback tool\n server.registerTool(\n \"memory_prediction_feedback\",\n {\n title: \"Record Prediction Feedback\",\n description: `Record whether a prediction was useful. This helps improve future predictions.`,\n inputSchema: z.object({\n memory_id: z.string().uuid(),\n user_id: z.string().uuid(),\n useful: z.boolean().describe(\"Was this prediction useful?\"),\n action: z.enum([\"clicked\", \"saved\", \"dismissed\", \"ignored\"]).describe(\"What action was taken\"),\n dismiss_reason: z.enum([\"not_relevant\", \"already_know\", \"not_now\", \"other\"]).optional().describe(\"Reason for dismissal\"),\n }).strict(),\n annotations: {\n readOnlyHint: false,\n destructiveHint: false,\n idempotentHint: true,\n openWorldHint: false,\n },\n },\n async (rawParams: any) => {\n try {\n await client.recordPredictionFeedback({\n memoryId: rawParams.memory_id,\n userId: rawParams.user_id,\n useful: rawParams.useful,\n action: rawParams.action,\n dismissReason: rawParams.dismiss_reason,\n });\n\n return {\n content: [{\n type: \"text\" as const,\n text: `Feedback recorded. Thank you for helping improve predictions!`,\n }],\n };\n } catch (error) {\n return {\n isError: true,\n content: [\n {\n type: \"text\" as const,\n text: `Error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n },\n ],\n };\n }\n }\n );\n\n return server as McpServer;\n}\n"]}
@@ -4,4 +4,3 @@
4
4
  export { createMCPServer } from "./mcp-server.js";
5
5
  export * from "../core/types.js";
6
6
  export * from "../core/errors.js";
7
- //# sourceMappingURL=index.d.ts.map