@lanonasis/memory-client 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,6 +2,39 @@ import { CoreMemoryClient } from '../core/client';
2
2
  import { exec, execSync } from 'child_process';
3
3
  import { promisify } from 'util';
4
4
 
5
+ /**
6
+ * Core Utilities for Memory Client
7
+ * Browser-safe, no Node.js dependencies
8
+ */
9
+ /**
10
+ * Safely parse JSON with detailed error reporting
11
+ * Prevents scattered try/catch blocks throughout the codebase
12
+ */
13
+ function safeJsonParse(input) {
14
+ try {
15
+ const data = JSON.parse(input);
16
+ return { success: true, data };
17
+ }
18
+ catch (error) {
19
+ const message = error instanceof Error
20
+ ? error.message
21
+ : 'Unknown JSON parse error';
22
+ return { success: false, error: `Invalid JSON: ${message}` };
23
+ }
24
+ }
25
+ /**
26
+ * Create a standardized error response from various error sources
27
+ */
28
+ function createErrorResponse(message, code = 'API_ERROR', statusCode, details) {
29
+ return {
30
+ code,
31
+ message,
32
+ statusCode,
33
+ details,
34
+ timestamp: new Date().toISOString()
35
+ };
36
+ }
37
+
5
38
  /**
6
39
  * CLI Integration Module for Memory Client SDK
7
40
  *
@@ -82,8 +115,10 @@ class CLIIntegration {
82
115
  const { stdout: authOutput } = await execAsync('onasis auth status --output json 2>/dev/null || lanonasis auth status --output json 2>/dev/null', {
83
116
  timeout: 3000
84
117
  });
85
- const authStatus = JSON.parse(authOutput);
86
- authenticated = authStatus.authenticated === true;
118
+ const parseResult = safeJsonParse(authOutput);
119
+ if (parseResult.success) {
120
+ authenticated = parseResult.data.authenticated === true;
121
+ }
87
122
  }
88
123
  catch {
89
124
  // Authentication check failed
@@ -105,10 +140,10 @@ class CLIIntegration {
105
140
  async executeCLICommand(command, options = {}) {
106
141
  const cliInfo = await this.detectCLI();
107
142
  if (!cliInfo.available) {
108
- return { error: 'CLI not available' };
143
+ return { error: createErrorResponse('CLI not available', 'API_ERROR') };
109
144
  }
110
145
  if (!cliInfo.authenticated) {
111
- return { error: 'CLI not authenticated. Run: onasis login' };
146
+ return { error: createErrorResponse('CLI not authenticated. Run: onasis login', 'AUTH_ERROR', 401) };
112
147
  }
113
148
  try {
114
149
  const timeout = options.timeout || 30000;
@@ -125,22 +160,20 @@ class CLIIntegration {
125
160
  console.warn('CLI warning:', stderr);
126
161
  }
127
162
  if (outputFormat === 'json') {
128
- try {
129
- const result = JSON.parse(stdout);
130
- return { data: result };
131
- }
132
- catch (parseError) {
133
- return { error: `Failed to parse CLI JSON output: ${parseError instanceof Error ? parseError.message : 'Unknown error'}` };
163
+ const parseResult = safeJsonParse(stdout);
164
+ if (parseResult.success) {
165
+ return { data: parseResult.data };
134
166
  }
167
+ return { error: createErrorResponse(parseResult.error, 'VALIDATION_ERROR', 400) };
135
168
  }
136
169
  return { data: stdout };
137
170
  }
138
171
  catch (error) {
139
172
  if (error instanceof Error && error.message.includes('timeout')) {
140
- return { error: 'CLI command timeout' };
173
+ return { error: createErrorResponse('CLI command timeout', 'TIMEOUT_ERROR', 408) };
141
174
  }
142
175
  return {
143
- error: error instanceof Error ? error.message : 'CLI command failed'
176
+ error: createErrorResponse(error instanceof Error ? error.message : 'CLI command failed', 'API_ERROR')
144
177
  };
145
178
  }
146
179
  }
@@ -208,14 +241,14 @@ class CLIIntegration {
208
241
  async getMCPStatus() {
209
242
  const cliInfo = await this.detectCLI();
210
243
  if (!cliInfo.mcpAvailable) {
211
- return { error: 'MCP not available via CLI' };
244
+ return { error: createErrorResponse('MCP not available via CLI', 'API_ERROR') };
212
245
  }
213
246
  return this.executeCLICommand('mcp status');
214
247
  }
215
248
  async listMCPTools() {
216
249
  const cliInfo = await this.detectCLI();
217
250
  if (!cliInfo.mcpAvailable) {
218
- return { error: 'MCP not available via CLI' };
251
+ return { error: createErrorResponse('MCP not available via CLI', 'API_ERROR') };
219
252
  }
220
253
  return this.executeCLICommand('mcp tools');
221
254
  }
@@ -287,19 +320,23 @@ class EnhancedMemoryClient {
287
320
  }
288
321
  constructor(config) {
289
322
  this.capabilities = null;
290
- this.config = {
291
- preferCLI: true,
292
- enableMCP: true,
293
- cliDetectionTimeout: 5000,
294
- fallbackToAPI: true,
295
- minCLIVersion: '1.5.2',
296
- verbose: false,
297
- timeout: 30000,
323
+ // Merge config with defaults, ensuring all required fields are present
324
+ // Spread config first, then apply defaults only for undefined values
325
+ const mergedConfig = {
326
+ ...config,
327
+ preferCLI: config.preferCLI ?? true,
328
+ enableMCP: config.enableMCP ?? true,
329
+ cliDetectionTimeout: config.cliDetectionTimeout ?? 5000,
330
+ fallbackToAPI: config.fallbackToAPI ?? true,
331
+ minCLIVersion: config.minCLIVersion ?? '1.5.2',
332
+ verbose: config.verbose ?? false,
333
+ timeout: config.timeout ?? 30000,
334
+ apiUrl: config.apiUrl || 'https://api.lanonasis.com',
298
335
  apiKey: config.apiKey || process.env.LANONASIS_API_KEY || '',
299
336
  authToken: config.authToken || '',
300
- headers: config.headers || {},
301
- ...config
337
+ headers: config.headers || {}
302
338
  };
339
+ this.config = mergedConfig;
303
340
  this.directClient = new CoreMemoryClient(config);
304
341
  this.cliIntegration = new CLIIntegration();
305
342
  }
@@ -395,7 +432,7 @@ class EnhancedMemoryClient {
395
432
  };
396
433
  }
397
434
  return {
398
- error: error instanceof Error ? error.message : `CLI ${operation} failed`,
435
+ error: createErrorResponse(error instanceof Error ? error.message : `CLI ${operation} failed`, 'API_ERROR'),
399
436
  source: 'cli',
400
437
  mcpUsed: false
401
438
  };
@@ -530,7 +567,7 @@ class EnhancedMemoryClient {
530
567
  }
531
568
  catch (error) {
532
569
  return {
533
- error: error instanceof Error ? error.message : 'Auth status check failed',
570
+ error: createErrorResponse(error instanceof Error ? error.message : 'Auth status check failed', 'API_ERROR'),
534
571
  source: 'cli',
535
572
  mcpUsed: false
536
573
  };
@@ -543,7 +580,7 @@ class EnhancedMemoryClient {
543
580
  const capabilities = await this.getCapabilities();
544
581
  if (!capabilities.mcpSupport) {
545
582
  return {
546
- error: 'MCP not available',
583
+ error: createErrorResponse('MCP not available', 'API_ERROR'),
547
584
  source: 'cli',
548
585
  mcpUsed: false
549
586
  };
@@ -554,7 +591,7 @@ class EnhancedMemoryClient {
554
591
  }
555
592
  catch (error) {
556
593
  return {
557
- error: error instanceof Error ? error.message : 'MCP status check failed',
594
+ error: createErrorResponse(error instanceof Error ? error.message : 'MCP status check failed', 'API_ERROR'),
558
595
  source: 'cli',
559
596
  mcpUsed: false
560
597
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/node/cli-integration.ts","../../src/node/enhanced-client.ts"],"sourcesContent":["/**\n * CLI Integration Module for Memory Client SDK\n *\n * Provides intelligent CLI detection and MCP channel utilization\n * when @lanonasis/cli v1.5.2+ is available in the environment\n *\n * IMPORTANT: This file imports Node.js modules and should only be used in Node.js environments\n */\n\nimport { exec, execSync } from 'child_process';\nimport { promisify } from 'util';\nimport type { ApiResponse, PaginatedResponse } from '../core/client';\nimport type {\n MemoryEntry,\n MemorySearchResult\n} from '../core/types';\n\nconst execAsync = promisify(exec);\n\nexport interface CLIInfo {\n available: boolean;\n version?: string;\n mcpAvailable?: boolean;\n authenticated?: boolean;\n}\n\nexport interface CLIExecutionOptions {\n timeout?: number;\n verbose?: boolean;\n outputFormat?: 'json' | 'table' | 'yaml';\n}\n\nexport interface CLICommand {\n command: string;\n args: string[];\n options?: CLIExecutionOptions;\n}\n\nexport interface MCPChannel {\n available: boolean;\n version?: string;\n capabilities?: string[];\n}\n\nexport interface CLICapabilities {\n cliAvailable: boolean;\n mcpSupport: boolean;\n authenticated: boolean;\n goldenContract: boolean;\n version?: string;\n}\n\nexport type RoutingStrategy = 'cli-first' | 'api-first' | 'cli-only' | 'api-only' | 'auto';\n\nexport interface CLIAuthStatus {\n authenticated: boolean;\n user?: {\n id?: string;\n email?: string;\n name?: string;\n [key: string]: unknown;\n };\n scopes?: string[];\n expiresAt?: string;\n [key: string]: unknown;\n}\n\nexport interface CLIMCPStatus {\n connected: boolean;\n channel?: string;\n endpoint?: string;\n details?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface CLIMCPTool {\n name: string;\n title?: string;\n description?: string;\n [key: string]: unknown;\n}\n\n/**\n * CLI Detection and Integration Service\n */\nexport class CLIIntegration {\n private cliInfo: CLIInfo | null = null;\n private detectionPromise: Promise<CLIInfo> | null = null;\n\n /**\n * Detect if CLI is available and get its capabilities\n */\n async detectCLI(): Promise<CLIInfo> {\n // Return cached result if already detected\n if (this.cliInfo) {\n return this.cliInfo;\n }\n\n // Return existing promise if detection is in progress\n if (this.detectionPromise) {\n return this.detectionPromise;\n }\n\n // Start new detection\n this.detectionPromise = this.performDetection();\n this.cliInfo = await this.detectionPromise;\n return this.cliInfo;\n }\n\n private async performDetection(): Promise<CLIInfo> {\n try {\n // Check if onasis/lanonasis CLI is available\n let versionOutput = '';\n try {\n const { stdout } = await execAsync('onasis --version 2>/dev/null', { timeout: 5000 });\n versionOutput = stdout;\n } catch {\n // Try lanonasis if onasis fails\n const { stdout } = await execAsync('lanonasis --version 2>/dev/null', { timeout: 5000 });\n versionOutput = stdout;\n }\n\n const version = versionOutput.trim();\n\n // Verify it's v1.5.2 or higher for Golden Contract support\n const versionMatch = version.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!versionMatch) {\n return { available: false };\n }\n\n const [, major, minor, patch] = versionMatch.map(Number);\n const isCompatible = major > 1 || (major === 1 && minor > 5) || (major === 1 && minor === 5 && patch >= 2);\n\n if (!isCompatible) {\n return {\n available: true,\n version,\n mcpAvailable: false,\n authenticated: false\n };\n }\n\n // Check MCP availability\n let mcpAvailable = false;\n try {\n await execAsync('onasis mcp status --output json 2>/dev/null || lanonasis mcp status --output json 2>/dev/null', {\n timeout: 3000\n });\n mcpAvailable = true;\n } catch {\n // MCP not available or not configured\n }\n\n // Check authentication status\n let authenticated = false;\n try {\n const { stdout: authOutput } = await execAsync('onasis auth status --output json 2>/dev/null || lanonasis auth status --output json 2>/dev/null', {\n timeout: 3000\n });\n\n const authStatus = JSON.parse(authOutput);\n authenticated = authStatus.authenticated === true;\n } catch {\n // Authentication check failed\n }\n\n return {\n available: true,\n version,\n mcpAvailable,\n authenticated\n };\n\n } catch {\n return { available: false };\n }\n }\n\n /**\n * Execute CLI command and return parsed JSON result\n */\n async executeCLICommand<T = unknown>(command: string, options: CLIExecutionOptions = {}): Promise<ApiResponse<T>> {\n const cliInfo = await this.detectCLI();\n\n if (!cliInfo.available) {\n return { error: 'CLI not available' };\n }\n\n if (!cliInfo.authenticated) {\n return { error: 'CLI not authenticated. Run: onasis login' };\n }\n\n try {\n const timeout = options.timeout || 30000;\n const outputFormat = options.outputFormat || 'json';\n const verbose = options.verbose ? '--verbose' : '';\n\n // Determine which CLI command to use (prefer onasis for Golden Contract)\n const cliCmd = await this.getPreferredCLICommand();\n\n const fullCommand = `${cliCmd} ${command} --output ${outputFormat} ${verbose}`.trim();\n\n const { stdout, stderr } = await execAsync(fullCommand, {\n timeout,\n maxBuffer: 1024 * 1024 // 1MB buffer\n });\n\n if (stderr && stderr.trim()) {\n console.warn('CLI warning:', stderr);\n }\n\n if (outputFormat === 'json') {\n try {\n const result = JSON.parse(stdout) as T;\n return { data: result };\n } catch (parseError) {\n return { error: `Failed to parse CLI JSON output: ${parseError instanceof Error ? parseError.message : 'Unknown error'}` };\n }\n }\n\n return { data: stdout as unknown as T };\n\n } catch (error) {\n if (error instanceof Error && error.message.includes('timeout')) {\n return { error: 'CLI command timeout' };\n }\n\n return {\n error: error instanceof Error ? error.message : 'CLI command failed'\n };\n }\n }\n\n /**\n * Get preferred CLI command (onasis for Golden Contract, fallback to lanonasis)\n */\n private async getPreferredCLICommand(): Promise<string> {\n try {\n execSync('which onasis', { stdio: 'ignore', timeout: 1000 });\n return 'onasis';\n } catch {\n return 'lanonasis';\n }\n }\n\n /**\n * Memory operations via CLI\n */\n async createMemoryViaCLI(title: string, content: string, options: {\n memoryType?: string;\n tags?: string[];\n topicId?: string;\n } = {}): Promise<ApiResponse<MemoryEntry>> {\n const { memoryType = 'context', tags = [], topicId } = options;\n\n let command = `memory create --title \"${title}\" --content \"${content}\" --memory-type ${memoryType}`;\n\n if (tags.length > 0) {\n command += ` --tags \"${tags.join(',')}\"`;\n }\n\n if (topicId) {\n command += ` --topic-id \"${topicId}\"`;\n }\n\n return this.executeCLICommand<MemoryEntry>(command);\n }\n\n async listMemoriesViaCLI(options: {\n limit?: number;\n memoryType?: string;\n tags?: string[];\n sortBy?: string;\n } = {}): Promise<ApiResponse<PaginatedResponse<MemoryEntry>>> {\n let command = 'memory list';\n\n if (options.limit) {\n command += ` --limit ${options.limit}`;\n }\n\n if (options.memoryType) {\n command += ` --memory-type ${options.memoryType}`;\n }\n\n if (options.tags && options.tags.length > 0) {\n command += ` --tags \"${options.tags.join(',')}\"`;\n }\n\n if (options.sortBy) {\n command += ` --sort-by ${options.sortBy}`;\n }\n\n return this.executeCLICommand<PaginatedResponse<MemoryEntry>>(command);\n }\n\n async searchMemoriesViaCLI(query: string, options: {\n limit?: number;\n memoryTypes?: string[];\n } = {}): Promise<ApiResponse<{\n results: MemorySearchResult[];\n total_results: number;\n search_time_ms: number;\n }>> {\n let command = `memory search \"${query}\"`;\n\n if (options.limit) {\n command += ` --limit ${options.limit}`;\n }\n\n if (options.memoryTypes && options.memoryTypes.length > 0) {\n command += ` --memory-types \"${options.memoryTypes.join(',')}\"`;\n }\n\n return this.executeCLICommand<{\n results: MemorySearchResult[];\n total_results: number;\n search_time_ms: number;\n }>(command);\n }\n\n /**\n * Health check via CLI\n */\n async healthCheckViaCLI(): Promise<ApiResponse<{ status: string; timestamp: string }>> {\n return this.executeCLICommand<{ status: string; timestamp: string }>('health');\n }\n\n /**\n * MCP-specific operations\n */\n async getMCPStatus(): Promise<ApiResponse<CLIMCPStatus>> {\n const cliInfo = await this.detectCLI();\n\n if (!cliInfo.mcpAvailable) {\n return { error: 'MCP not available via CLI' };\n }\n\n return this.executeCLICommand<CLIMCPStatus>('mcp status');\n }\n\n async listMCPTools(): Promise<ApiResponse<{ tools: CLIMCPTool[] }>> {\n const cliInfo = await this.detectCLI();\n\n if (!cliInfo.mcpAvailable) {\n return { error: 'MCP not available via CLI' };\n }\n\n return this.executeCLICommand<{ tools: CLIMCPTool[] }>('mcp tools');\n }\n\n /**\n * Authentication operations\n */\n async getAuthStatus(): Promise<ApiResponse<CLIAuthStatus>> {\n return this.executeCLICommand<CLIAuthStatus>('auth status');\n }\n\n /**\n * Check if specific CLI features are available\n */\n async getCapabilities(): Promise<{\n cliAvailable: boolean;\n version?: string;\n mcpSupport: boolean;\n authenticated: boolean;\n goldenContract: boolean;\n }> {\n const cliInfo = await this.detectCLI();\n\n return {\n cliAvailable: cliInfo.available,\n version: cliInfo.version,\n mcpSupport: cliInfo.mcpAvailable || false,\n authenticated: cliInfo.authenticated || false,\n goldenContract: cliInfo.available && this.isGoldenContractCompliant(cliInfo.version)\n };\n }\n\n private isGoldenContractCompliant(version?: string): boolean {\n if (!version) return false;\n\n const versionMatch = version.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!versionMatch) return false;\n\n const [, major, minor, patch] = versionMatch.map(Number);\n return major > 1 || (major === 1 && minor > 5) || (major === 1 && minor === 5 && patch >= 2);\n }\n\n /**\n * Force refresh CLI detection\n */\n async refresh(): Promise<CLIInfo> {\n this.cliInfo = null;\n this.detectionPromise = null;\n return this.detectCLI();\n }\n\n /**\n * Get cached CLI info without re-detection\n */\n getCachedInfo(): CLIInfo | null {\n return this.cliInfo;\n }\n}\n\n// Singleton instance for convenient access\nexport const cliIntegration = new CLIIntegration();\n","/**\n * Enhanced Memory Client with CLI Integration\n *\n * Intelligently routes requests through CLI v1.5.2+ when available,\n * with fallback to direct API for maximum compatibility and performance\n *\n * IMPORTANT: This file uses Node.js-specific features (process.env) and should only be used in Node.js environments\n */\n\nimport { CoreMemoryClient, type CoreMemoryClientConfig, type ApiResponse, type PaginatedResponse } from '../core/client';\nimport { CLIIntegration, type CLIAuthStatus, type CLIMCPStatus } from './cli-integration';\nimport type {\n MemoryEntry,\n MemoryTopic,\n CreateMemoryRequest,\n UpdateMemoryRequest,\n SearchMemoryRequest,\n MemorySearchResult,\n UserMemoryStats,\n CreateTopicRequest\n} from '../core/types';\n\nexport interface EnhancedMemoryClientConfig extends CoreMemoryClientConfig {\n /** Prefer CLI when available (default: true) */\n preferCLI?: boolean;\n /** Enable MCP channels when available (default: true) */\n enableMCP?: boolean;\n /** CLI detection timeout in ms (default: 5000) */\n cliDetectionTimeout?: number;\n /** Fallback to direct API on CLI failure (default: true) */\n fallbackToAPI?: boolean;\n /** Minimum CLI version required for Golden Contract compliance (default: 1.5.2) */\n minCLIVersion?: string;\n /** Enable verbose logging for troubleshooting (default: false) */\n verbose?: boolean;\n}\n\nexport interface OperationResult<T> {\n data?: T;\n error?: string;\n source: 'cli' | 'api';\n mcpUsed?: boolean;\n}\n\n/**\n * Enhanced Memory Client with intelligent CLI/API routing\n */\nexport class EnhancedMemoryClient {\n private directClient: CoreMemoryClient;\n private cliIntegration: CLIIntegration;\n private config: Required<EnhancedMemoryClientConfig>;\n private capabilities: Awaited<ReturnType<CLIIntegration['getCapabilities']>> | null = null;\n\n private createDefaultCapabilities(): Awaited<ReturnType<CLIIntegration['getCapabilities']>> {\n return {\n cliAvailable: false,\n mcpSupport: false,\n authenticated: false,\n goldenContract: false\n };\n }\n\n constructor(config: EnhancedMemoryClientConfig) {\n this.config = {\n preferCLI: true,\n enableMCP: true,\n cliDetectionTimeout: 5000,\n fallbackToAPI: true,\n minCLIVersion: '1.5.2',\n verbose: false,\n timeout: 30000,\n apiKey: config.apiKey || process.env.LANONASIS_API_KEY || '',\n authToken: config.authToken || '',\n headers: config.headers || {},\n ...config\n };\n\n this.directClient = new CoreMemoryClient(config);\n this.cliIntegration = new CLIIntegration();\n }\n\n /**\n * Initialize the client and detect capabilities\n */\n async initialize(): Promise<void> {\n try {\n const detectionPromise = this.cliIntegration.getCapabilities();\n const capabilities = this.config.cliDetectionTimeout > 0\n ? await Promise.race([\n detectionPromise,\n new Promise<null>((resolve) => {\n setTimeout(() => resolve(null), this.config.cliDetectionTimeout);\n })\n ])\n : await detectionPromise;\n\n if (capabilities) {\n this.capabilities = capabilities;\n\n if (this.config.verbose && capabilities.cliAvailable && !capabilities.authenticated) {\n const suggestedCommand = capabilities.goldenContract ? 'onasis login' : 'lanonasis login';\n console.warn(\n `CLI detected but not authenticated. Run '${suggestedCommand}' to enable enhanced SDK features.`\n );\n }\n } else {\n this.capabilities = this.createDefaultCapabilities();\n if (this.config.verbose) {\n console.warn(\n `CLI detection timed out after ${this.config.cliDetectionTimeout}ms. Falling back to API mode.`\n );\n }\n }\n } catch (error) {\n if (this.config.verbose) {\n console.warn('CLI detection failed:', error);\n }\n this.capabilities = this.createDefaultCapabilities();\n }\n }\n\n /**\n * Get current capabilities\n */\n async getCapabilities(): Promise<Awaited<ReturnType<CLIIntegration['getCapabilities']>>> {\n if (!this.capabilities) {\n await this.initialize();\n }\n if (!this.capabilities) {\n this.capabilities = this.createDefaultCapabilities();\n }\n return this.capabilities;\n }\n\n /**\n * Determine if operation should use CLI\n */\n private async shouldUseCLI(): Promise<boolean> {\n const capabilities = await this.getCapabilities();\n\n return (\n this.config.preferCLI &&\n capabilities.cliAvailable &&\n capabilities.authenticated &&\n capabilities.goldenContract\n );\n }\n\n /**\n * Execute operation with intelligent routing\n */\n private async executeOperation<T>(\n operation: string,\n cliOperation: () => Promise<ApiResponse<T>>,\n apiOperation: () => Promise<ApiResponse<T>>\n ): Promise<OperationResult<T>> {\n const useCLI = await this.shouldUseCLI();\n const capabilities = await this.getCapabilities();\n\n if (useCLI) {\n try {\n const result = await cliOperation();\n\n if (result.error && this.config.fallbackToAPI) {\n console.warn(`CLI ${operation} failed, falling back to API:`, result.error);\n const apiResult = await apiOperation();\n return {\n ...apiResult,\n source: 'api',\n mcpUsed: false\n };\n }\n\n return {\n ...result,\n source: 'cli',\n mcpUsed: capabilities.mcpSupport\n };\n } catch (error) {\n if (this.config.fallbackToAPI) {\n console.warn(`CLI ${operation} error, falling back to API:`, error);\n const apiResult = await apiOperation();\n return {\n ...apiResult,\n source: 'api',\n mcpUsed: false\n };\n }\n\n return {\n error: error instanceof Error ? error.message : `CLI ${operation} failed`,\n source: 'cli',\n mcpUsed: false\n };\n }\n } else {\n const result = await apiOperation();\n return {\n ...result,\n source: 'api',\n mcpUsed: false\n };\n }\n }\n\n // Enhanced API Methods\n\n /**\n * Health check with intelligent routing\n */\n async healthCheck(): Promise<OperationResult<{ status: string; timestamp: string }>> {\n return this.executeOperation(\n 'health check',\n () => this.cliIntegration.healthCheckViaCLI(),\n () => this.directClient.healthCheck()\n );\n }\n\n /**\n * Create memory with CLI/API routing\n */\n async createMemory(memory: CreateMemoryRequest): Promise<OperationResult<MemoryEntry>> {\n return this.executeOperation(\n 'create memory',\n () => this.cliIntegration.createMemoryViaCLI(\n memory.title,\n memory.content,\n {\n memoryType: memory.memory_type,\n tags: memory.tags,\n topicId: memory.topic_id\n }\n ),\n () => this.directClient.createMemory(memory)\n );\n }\n\n /**\n * List memories with intelligent routing\n */\n async listMemories(options: {\n page?: number;\n limit?: number;\n memory_type?: string;\n topic_id?: string;\n project_ref?: string;\n status?: string;\n tags?: string[];\n sort?: string;\n order?: 'asc' | 'desc';\n } = {}): Promise<OperationResult<PaginatedResponse<MemoryEntry>>> {\n return this.executeOperation(\n 'list memories',\n () => this.cliIntegration.listMemoriesViaCLI({\n limit: options.limit,\n memoryType: options.memory_type,\n tags: options.tags,\n sortBy: options.sort\n }),\n () => this.directClient.listMemories(options)\n );\n }\n\n /**\n * Search memories with MCP enhancement when available\n */\n async searchMemories(request: SearchMemoryRequest): Promise<OperationResult<{\n results: MemorySearchResult[];\n total_results: number;\n search_time_ms: number;\n }>> {\n return this.executeOperation(\n 'search memories',\n () => this.cliIntegration.searchMemoriesViaCLI(\n request.query,\n {\n limit: request.limit,\n memoryTypes: request.memory_types\n }\n ),\n () => this.directClient.searchMemories(request)\n );\n }\n\n /**\n * Get memory by ID (API only for now)\n */\n async getMemory(id: string): Promise<OperationResult<MemoryEntry>> {\n // CLI doesn't have get by ID yet, use API\n const result = await this.directClient.getMemory(id);\n return {\n ...result,\n source: 'api',\n mcpUsed: false\n };\n }\n\n /**\n * Update memory (API only for now)\n */\n async updateMemory(id: string, updates: UpdateMemoryRequest): Promise<OperationResult<MemoryEntry>> {\n // CLI doesn't have update yet, use API\n const result = await this.directClient.updateMemory(id, updates);\n return {\n ...result,\n source: 'api',\n mcpUsed: false\n };\n }\n\n /**\n * Delete memory (API only for now)\n */\n async deleteMemory(id: string): Promise<OperationResult<void>> {\n // CLI doesn't have delete yet, use API\n const result = await this.directClient.deleteMemory(id);\n return {\n ...result,\n source: 'api',\n mcpUsed: false\n };\n }\n\n // Topic Operations (API only for now)\n\n async createTopic(topic: CreateTopicRequest): Promise<OperationResult<MemoryTopic>> {\n const result = await this.directClient.createTopic(topic);\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n async getTopics(): Promise<OperationResult<MemoryTopic[]>> {\n const result = await this.directClient.getTopics();\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n async getTopic(id: string): Promise<OperationResult<MemoryTopic>> {\n const result = await this.directClient.getTopic(id);\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n async updateTopic(id: string, updates: Partial<CreateTopicRequest>): Promise<OperationResult<MemoryTopic>> {\n const result = await this.directClient.updateTopic(id, updates);\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n async deleteTopic(id: string): Promise<OperationResult<void>> {\n const result = await this.directClient.deleteTopic(id);\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n /**\n * Get memory statistics\n */\n async getMemoryStats(): Promise<OperationResult<UserMemoryStats>> {\n const result = await this.directClient.getMemoryStats();\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n // Utility Methods\n\n /**\n * Force CLI re-detection\n */\n async refreshCLIDetection(): Promise<void> {\n this.capabilities = null;\n await this.cliIntegration.refresh();\n await this.initialize();\n }\n\n /**\n * Get authentication status from CLI\n */\n async getAuthStatus(): Promise<OperationResult<CLIAuthStatus>> {\n try {\n const result = await this.cliIntegration.getAuthStatus();\n return { ...result, source: 'cli', mcpUsed: false };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : 'Auth status check failed',\n source: 'cli',\n mcpUsed: false\n };\n }\n }\n\n /**\n * Get MCP status when available\n */\n async getMCPStatus(): Promise<OperationResult<CLIMCPStatus>> {\n const capabilities = await this.getCapabilities();\n\n if (!capabilities.mcpSupport) {\n return {\n error: 'MCP not available',\n source: 'cli',\n mcpUsed: false\n };\n }\n\n try {\n const result = await this.cliIntegration.getMCPStatus();\n return { ...result, source: 'cli', mcpUsed: true };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : 'MCP status check failed',\n source: 'cli',\n mcpUsed: false\n };\n }\n }\n\n /**\n * Update authentication for both CLI and API client\n */\n setAuthToken(token: string): void {\n this.directClient.setAuthToken(token);\n }\n\n setApiKey(apiKey: string): void {\n this.directClient.setApiKey(apiKey);\n }\n\n clearAuth(): void {\n this.directClient.clearAuth();\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<EnhancedMemoryClientConfig>): void {\n this.config = { ...this.config, ...updates };\n this.directClient.updateConfig(updates);\n }\n\n /**\n * Get configuration summary\n */\n getConfigSummary(): {\n apiUrl: string;\n preferCLI: boolean;\n enableMCP: boolean;\n capabilities?: Awaited<ReturnType<CLIIntegration['getCapabilities']>>;\n } {\n return {\n apiUrl: this.config.apiUrl,\n preferCLI: this.config.preferCLI,\n enableMCP: this.config.enableMCP,\n capabilities: this.capabilities || undefined\n };\n }\n}\n\n/**\n * Factory function to create an enhanced memory client\n */\nexport async function createNodeMemoryClient(config: EnhancedMemoryClientConfig): Promise<EnhancedMemoryClient> {\n const client = new EnhancedMemoryClient(config);\n await client.initialize();\n return client;\n}\n\n/**\n * Synchronous factory function (initialization happens on first API call)\n */\nexport function createEnhancedMemoryClient(config: EnhancedMemoryClientConfig): EnhancedMemoryClient {\n return new EnhancedMemoryClient(config);\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/core/utils.ts","../../../src/node/cli-integration.ts","../../../src/node/enhanced-client.ts"],"sourcesContent":["/**\n * Core Utilities for Memory Client\n * Browser-safe, no Node.js dependencies\n */\n\nimport type { ApiErrorResponse, ErrorCode } from './errors';\n\n/**\n * Safe JSON parse result - discriminated union for type-safe error handling\n */\nexport type SafeJsonResult<T> =\n | { success: true; data: T }\n | { success: false; error: string };\n\n/**\n * Safely parse JSON with detailed error reporting\n * Prevents scattered try/catch blocks throughout the codebase\n */\nexport function safeJsonParse<T = unknown>(input: string): SafeJsonResult<T> {\n try {\n const data = JSON.parse(input) as T;\n return { success: true, data };\n } catch (error) {\n const message = error instanceof Error\n ? error.message\n : 'Unknown JSON parse error';\n return { success: false, error: `Invalid JSON: ${message}` };\n }\n}\n\n/**\n * HTTP status code to error code mapping\n */\nexport function httpStatusToErrorCode(status: number): ErrorCode {\n switch (status) {\n case 400:\n return 'VALIDATION_ERROR';\n case 401:\n return 'AUTH_ERROR';\n case 403:\n return 'FORBIDDEN';\n case 404:\n return 'NOT_FOUND';\n case 408:\n return 'TIMEOUT_ERROR';\n case 409:\n return 'CONFLICT';\n case 429:\n return 'RATE_LIMIT_ERROR';\n case 500:\n case 502:\n case 503:\n case 504:\n return 'SERVER_ERROR';\n default:\n return 'API_ERROR';\n }\n}\n\n/**\n * Create a standardized error response from various error sources\n */\nexport function createErrorResponse(\n message: string,\n code: ErrorCode = 'API_ERROR',\n statusCode?: number,\n details?: unknown\n): ApiErrorResponse {\n return {\n code,\n message,\n statusCode,\n details,\n timestamp: new Date().toISOString()\n };\n}\n\n/**\n * Create an error response from an HTTP response\n */\nexport function createErrorFromResponse(\n status: number,\n statusText: string,\n body?: unknown\n): ApiErrorResponse {\n const code = httpStatusToErrorCode(status);\n\n // Try to extract message from response body\n let message = `HTTP ${status}: ${statusText}`;\n let details: unknown = undefined;\n\n if (body && typeof body === 'object') {\n const bodyObj = body as Record<string, unknown>;\n if (typeof bodyObj.error === 'string') {\n message = bodyObj.error;\n } else if (typeof bodyObj.message === 'string') {\n message = bodyObj.message;\n }\n if (bodyObj.details) {\n details = bodyObj.details;\n }\n }\n\n return createErrorResponse(message, code, status, details);\n}\n\n/**\n * Sleep utility for retry logic\n */\nexport function sleep(ms: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, ms));\n}\n\n/**\n * Calculate retry delay with exponential backoff and jitter\n */\nexport function calculateRetryDelay(\n attempt: number,\n baseDelay: number = 1000,\n backoff: 'linear' | 'exponential' = 'exponential',\n maxDelay: number = 30000\n): number {\n let delay: number;\n\n if (backoff === 'exponential') {\n delay = baseDelay * Math.pow(2, attempt);\n } else {\n delay = baseDelay * (attempt + 1);\n }\n\n // Add jitter (±20%) to prevent thundering herd\n const jitter = delay * 0.2 * (Math.random() * 2 - 1);\n delay = Math.min(delay + jitter, maxDelay);\n\n return Math.round(delay);\n}\n\n/**\n * Check if an error is retryable based on status code\n */\nexport function isRetryableError(statusCode?: number): boolean {\n if (!statusCode) return true; // Network errors are retryable\n\n // Retry on server errors and rate limits\n return statusCode >= 500 || statusCode === 429 || statusCode === 408;\n}\n\n/**\n * Deep merge two objects\n */\nexport function deepMerge<T extends Record<string, unknown>>(\n target: T,\n source: Partial<T>\n): T {\n const result = { ...target };\n\n for (const key of Object.keys(source) as Array<keyof T>) {\n const sourceValue = source[key];\n const targetValue = result[key];\n\n if (\n sourceValue !== undefined &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(sourceValue) &&\n typeof targetValue === 'object' &&\n targetValue !== null &&\n !Array.isArray(targetValue)\n ) {\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>\n ) as T[keyof T];\n } else if (sourceValue !== undefined) {\n result[key] = sourceValue as T[keyof T];\n }\n }\n\n return result;\n}\n","/**\n * CLI Integration Module for Memory Client SDK\n *\n * Provides intelligent CLI detection and MCP channel utilization\n * when @lanonasis/cli v1.5.2+ is available in the environment\n *\n * IMPORTANT: This file imports Node.js modules and should only be used in Node.js environments\n */\n\nimport { exec, execSync } from 'child_process';\nimport { promisify } from 'util';\nimport type { ApiResponse, PaginatedResponse } from '../core/client';\nimport { safeJsonParse, createErrorResponse } from '../core/utils';\nimport type {\n MemoryEntry,\n MemorySearchResult\n} from '../core/types';\n\nconst execAsync = promisify(exec);\n\nexport interface CLIInfo {\n available: boolean;\n version?: string;\n mcpAvailable?: boolean;\n authenticated?: boolean;\n}\n\nexport interface CLIExecutionOptions {\n timeout?: number;\n verbose?: boolean;\n outputFormat?: 'json' | 'table' | 'yaml';\n}\n\nexport interface CLICommand {\n command: string;\n args: string[];\n options?: CLIExecutionOptions;\n}\n\nexport interface MCPChannel {\n available: boolean;\n version?: string;\n capabilities?: string[];\n}\n\nexport interface CLICapabilities {\n cliAvailable: boolean;\n mcpSupport: boolean;\n authenticated: boolean;\n goldenContract: boolean;\n version?: string;\n}\n\nexport type RoutingStrategy = 'cli-first' | 'api-first' | 'cli-only' | 'api-only' | 'auto';\n\nexport interface CLIAuthStatus {\n authenticated: boolean;\n user?: {\n id?: string;\n email?: string;\n name?: string;\n [key: string]: unknown;\n };\n scopes?: string[];\n expiresAt?: string;\n [key: string]: unknown;\n}\n\nexport interface CLIMCPStatus {\n connected: boolean;\n channel?: string;\n endpoint?: string;\n details?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface CLIMCPTool {\n name: string;\n title?: string;\n description?: string;\n [key: string]: unknown;\n}\n\n/**\n * CLI Detection and Integration Service\n */\nexport class CLIIntegration {\n private cliInfo: CLIInfo | null = null;\n private detectionPromise: Promise<CLIInfo> | null = null;\n\n /**\n * Detect if CLI is available and get its capabilities\n */\n async detectCLI(): Promise<CLIInfo> {\n // Return cached result if already detected\n if (this.cliInfo) {\n return this.cliInfo;\n }\n\n // Return existing promise if detection is in progress\n if (this.detectionPromise) {\n return this.detectionPromise;\n }\n\n // Start new detection\n this.detectionPromise = this.performDetection();\n this.cliInfo = await this.detectionPromise;\n return this.cliInfo;\n }\n\n private async performDetection(): Promise<CLIInfo> {\n try {\n // Check if onasis/lanonasis CLI is available\n let versionOutput = '';\n try {\n const { stdout } = await execAsync('onasis --version 2>/dev/null', { timeout: 5000 });\n versionOutput = stdout;\n } catch {\n // Try lanonasis if onasis fails\n const { stdout } = await execAsync('lanonasis --version 2>/dev/null', { timeout: 5000 });\n versionOutput = stdout;\n }\n\n const version = versionOutput.trim();\n\n // Verify it's v1.5.2 or higher for Golden Contract support\n const versionMatch = version.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!versionMatch) {\n return { available: false };\n }\n\n const [, major, minor, patch] = versionMatch.map(Number);\n const isCompatible = major > 1 || (major === 1 && minor > 5) || (major === 1 && minor === 5 && patch >= 2);\n\n if (!isCompatible) {\n return {\n available: true,\n version,\n mcpAvailable: false,\n authenticated: false\n };\n }\n\n // Check MCP availability\n let mcpAvailable = false;\n try {\n await execAsync('onasis mcp status --output json 2>/dev/null || lanonasis mcp status --output json 2>/dev/null', {\n timeout: 3000\n });\n mcpAvailable = true;\n } catch {\n // MCP not available or not configured\n }\n\n // Check authentication status\n let authenticated = false;\n try {\n const { stdout: authOutput } = await execAsync('onasis auth status --output json 2>/dev/null || lanonasis auth status --output json 2>/dev/null', {\n timeout: 3000\n });\n\n const parseResult = safeJsonParse<{ authenticated?: boolean }>(authOutput);\n if (parseResult.success) {\n authenticated = parseResult.data.authenticated === true;\n }\n } catch {\n // Authentication check failed\n }\n\n return {\n available: true,\n version,\n mcpAvailable,\n authenticated\n };\n\n } catch {\n return { available: false };\n }\n }\n\n /**\n * Execute CLI command and return parsed JSON result\n */\n async executeCLICommand<T = unknown>(command: string, options: CLIExecutionOptions = {}): Promise<ApiResponse<T>> {\n const cliInfo = await this.detectCLI();\n\n if (!cliInfo.available) {\n return { error: createErrorResponse('CLI not available', 'API_ERROR') };\n }\n\n if (!cliInfo.authenticated) {\n return { error: createErrorResponse('CLI not authenticated. Run: onasis login', 'AUTH_ERROR', 401) };\n }\n\n try {\n const timeout = options.timeout || 30000;\n const outputFormat = options.outputFormat || 'json';\n const verbose = options.verbose ? '--verbose' : '';\n\n // Determine which CLI command to use (prefer onasis for Golden Contract)\n const cliCmd = await this.getPreferredCLICommand();\n\n const fullCommand = `${cliCmd} ${command} --output ${outputFormat} ${verbose}`.trim();\n\n const { stdout, stderr } = await execAsync(fullCommand, {\n timeout,\n maxBuffer: 1024 * 1024 // 1MB buffer\n });\n\n if (stderr && stderr.trim()) {\n console.warn('CLI warning:', stderr);\n }\n\n if (outputFormat === 'json') {\n const parseResult = safeJsonParse<T>(stdout);\n if (parseResult.success) {\n return { data: parseResult.data };\n }\n return { error: createErrorResponse(parseResult.error, 'VALIDATION_ERROR', 400) };\n }\n\n return { data: stdout as unknown as T };\n\n } catch (error) {\n if (error instanceof Error && error.message.includes('timeout')) {\n return { error: createErrorResponse('CLI command timeout', 'TIMEOUT_ERROR', 408) };\n }\n\n return {\n error: createErrorResponse(\n error instanceof Error ? error.message : 'CLI command failed',\n 'API_ERROR'\n )\n };\n }\n }\n\n /**\n * Get preferred CLI command (onasis for Golden Contract, fallback to lanonasis)\n */\n private async getPreferredCLICommand(): Promise<string> {\n try {\n execSync('which onasis', { stdio: 'ignore', timeout: 1000 });\n return 'onasis';\n } catch {\n return 'lanonasis';\n }\n }\n\n /**\n * Memory operations via CLI\n */\n async createMemoryViaCLI(title: string, content: string, options: {\n memoryType?: string;\n tags?: string[];\n topicId?: string;\n } = {}): Promise<ApiResponse<MemoryEntry>> {\n const { memoryType = 'context', tags = [], topicId } = options;\n\n let command = `memory create --title \"${title}\" --content \"${content}\" --memory-type ${memoryType}`;\n\n if (tags.length > 0) {\n command += ` --tags \"${tags.join(',')}\"`;\n }\n\n if (topicId) {\n command += ` --topic-id \"${topicId}\"`;\n }\n\n return this.executeCLICommand<MemoryEntry>(command);\n }\n\n async listMemoriesViaCLI(options: {\n limit?: number;\n memoryType?: string;\n tags?: string[];\n sortBy?: string;\n } = {}): Promise<ApiResponse<PaginatedResponse<MemoryEntry>>> {\n let command = 'memory list';\n\n if (options.limit) {\n command += ` --limit ${options.limit}`;\n }\n\n if (options.memoryType) {\n command += ` --memory-type ${options.memoryType}`;\n }\n\n if (options.tags && options.tags.length > 0) {\n command += ` --tags \"${options.tags.join(',')}\"`;\n }\n\n if (options.sortBy) {\n command += ` --sort-by ${options.sortBy}`;\n }\n\n return this.executeCLICommand<PaginatedResponse<MemoryEntry>>(command);\n }\n\n async searchMemoriesViaCLI(query: string, options: {\n limit?: number;\n memoryTypes?: string[];\n } = {}): Promise<ApiResponse<{\n results: MemorySearchResult[];\n total_results: number;\n search_time_ms: number;\n }>> {\n let command = `memory search \"${query}\"`;\n\n if (options.limit) {\n command += ` --limit ${options.limit}`;\n }\n\n if (options.memoryTypes && options.memoryTypes.length > 0) {\n command += ` --memory-types \"${options.memoryTypes.join(',')}\"`;\n }\n\n return this.executeCLICommand<{\n results: MemorySearchResult[];\n total_results: number;\n search_time_ms: number;\n }>(command);\n }\n\n /**\n * Health check via CLI\n */\n async healthCheckViaCLI(): Promise<ApiResponse<{ status: string; timestamp: string }>> {\n return this.executeCLICommand<{ status: string; timestamp: string }>('health');\n }\n\n /**\n * MCP-specific operations\n */\n async getMCPStatus(): Promise<ApiResponse<CLIMCPStatus>> {\n const cliInfo = await this.detectCLI();\n\n if (!cliInfo.mcpAvailable) {\n return { error: createErrorResponse('MCP not available via CLI', 'API_ERROR') };\n }\n\n return this.executeCLICommand<CLIMCPStatus>('mcp status');\n }\n\n async listMCPTools(): Promise<ApiResponse<{ tools: CLIMCPTool[] }>> {\n const cliInfo = await this.detectCLI();\n\n if (!cliInfo.mcpAvailable) {\n return { error: createErrorResponse('MCP not available via CLI', 'API_ERROR') };\n }\n\n return this.executeCLICommand<{ tools: CLIMCPTool[] }>('mcp tools');\n }\n\n /**\n * Authentication operations\n */\n async getAuthStatus(): Promise<ApiResponse<CLIAuthStatus>> {\n return this.executeCLICommand<CLIAuthStatus>('auth status');\n }\n\n /**\n * Check if specific CLI features are available\n */\n async getCapabilities(): Promise<{\n cliAvailable: boolean;\n version?: string;\n mcpSupport: boolean;\n authenticated: boolean;\n goldenContract: boolean;\n }> {\n const cliInfo = await this.detectCLI();\n\n return {\n cliAvailable: cliInfo.available,\n version: cliInfo.version,\n mcpSupport: cliInfo.mcpAvailable || false,\n authenticated: cliInfo.authenticated || false,\n goldenContract: cliInfo.available && this.isGoldenContractCompliant(cliInfo.version)\n };\n }\n\n private isGoldenContractCompliant(version?: string): boolean {\n if (!version) return false;\n\n const versionMatch = version.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!versionMatch) return false;\n\n const [, major, minor, patch] = versionMatch.map(Number);\n return major > 1 || (major === 1 && minor > 5) || (major === 1 && minor === 5 && patch >= 2);\n }\n\n /**\n * Force refresh CLI detection\n */\n async refresh(): Promise<CLIInfo> {\n this.cliInfo = null;\n this.detectionPromise = null;\n return this.detectCLI();\n }\n\n /**\n * Get cached CLI info without re-detection\n */\n getCachedInfo(): CLIInfo | null {\n return this.cliInfo;\n }\n}\n\n// Singleton instance for convenient access\nexport const cliIntegration = new CLIIntegration();\n","/**\n * Enhanced Memory Client with CLI Integration\n *\n * Intelligently routes requests through CLI v1.5.2+ when available,\n * with fallback to direct API for maximum compatibility and performance\n *\n * IMPORTANT: This file uses Node.js-specific features (process.env) and should only be used in Node.js environments\n */\n\nimport { CoreMemoryClient, type CoreMemoryClientConfig, type ApiResponse, type PaginatedResponse } from '../core/client';\nimport { CLIIntegration, type CLIAuthStatus, type CLIMCPStatus } from './cli-integration';\nimport type { ApiErrorResponse } from '../core/errors';\nimport { createErrorResponse } from '../core/utils';\nimport type {\n MemoryEntry,\n MemoryTopic,\n CreateMemoryRequest,\n UpdateMemoryRequest,\n SearchMemoryRequest,\n MemorySearchResult,\n UserMemoryStats,\n CreateTopicRequest\n} from '../core/types';\n\nexport interface EnhancedMemoryClientConfig extends CoreMemoryClientConfig {\n /** Prefer CLI when available (default: true) */\n preferCLI?: boolean;\n /** Enable MCP channels when available (default: true) */\n enableMCP?: boolean;\n /** CLI detection timeout in ms (default: 5000) */\n cliDetectionTimeout?: number;\n /** Fallback to direct API on CLI failure (default: true) */\n fallbackToAPI?: boolean;\n /** Minimum CLI version required for Golden Contract compliance (default: 1.5.2) */\n minCLIVersion?: string;\n /** Enable verbose logging for troubleshooting (default: false) */\n verbose?: boolean;\n}\n\nexport interface OperationResult<T> {\n data?: T;\n error?: ApiErrorResponse;\n source: 'cli' | 'api';\n mcpUsed?: boolean;\n}\n\n/**\n * Enhanced Memory Client with intelligent CLI/API routing\n */\nexport class EnhancedMemoryClient {\n private directClient: CoreMemoryClient;\n private cliIntegration: CLIIntegration;\n private config: Required<EnhancedMemoryClientConfig>;\n private capabilities: Awaited<ReturnType<CLIIntegration['getCapabilities']>> | null = null;\n\n private createDefaultCapabilities(): Awaited<ReturnType<CLIIntegration['getCapabilities']>> {\n return {\n cliAvailable: false,\n mcpSupport: false,\n authenticated: false,\n goldenContract: false\n };\n }\n\n constructor(config: EnhancedMemoryClientConfig) {\n // Merge config with defaults, ensuring all required fields are present\n // Spread config first, then apply defaults only for undefined values\n const mergedConfig: EnhancedMemoryClientConfig = {\n ...config,\n preferCLI: config.preferCLI ?? true,\n enableMCP: config.enableMCP ?? true,\n cliDetectionTimeout: config.cliDetectionTimeout ?? 5000,\n fallbackToAPI: config.fallbackToAPI ?? true,\n minCLIVersion: config.minCLIVersion ?? '1.5.2',\n verbose: config.verbose ?? false,\n timeout: config.timeout ?? 30000,\n apiUrl: config.apiUrl || 'https://api.lanonasis.com',\n apiKey: config.apiKey || process.env.LANONASIS_API_KEY || '',\n authToken: config.authToken || '',\n headers: config.headers || {}\n };\n \n this.config = mergedConfig as Required<EnhancedMemoryClientConfig>;\n\n this.directClient = new CoreMemoryClient(config);\n this.cliIntegration = new CLIIntegration();\n }\n\n /**\n * Initialize the client and detect capabilities\n */\n async initialize(): Promise<void> {\n try {\n const detectionPromise = this.cliIntegration.getCapabilities();\n const capabilities = this.config.cliDetectionTimeout > 0\n ? await Promise.race([\n detectionPromise,\n new Promise<null>((resolve) => {\n setTimeout(() => resolve(null), this.config.cliDetectionTimeout);\n })\n ])\n : await detectionPromise;\n\n if (capabilities) {\n this.capabilities = capabilities;\n\n if (this.config.verbose && capabilities.cliAvailable && !capabilities.authenticated) {\n const suggestedCommand = capabilities.goldenContract ? 'onasis login' : 'lanonasis login';\n console.warn(\n `CLI detected but not authenticated. Run '${suggestedCommand}' to enable enhanced SDK features.`\n );\n }\n } else {\n this.capabilities = this.createDefaultCapabilities();\n if (this.config.verbose) {\n console.warn(\n `CLI detection timed out after ${this.config.cliDetectionTimeout}ms. Falling back to API mode.`\n );\n }\n }\n } catch (error) {\n if (this.config.verbose) {\n console.warn('CLI detection failed:', error);\n }\n this.capabilities = this.createDefaultCapabilities();\n }\n }\n\n /**\n * Get current capabilities\n */\n async getCapabilities(): Promise<Awaited<ReturnType<CLIIntegration['getCapabilities']>>> {\n if (!this.capabilities) {\n await this.initialize();\n }\n if (!this.capabilities) {\n this.capabilities = this.createDefaultCapabilities();\n }\n return this.capabilities;\n }\n\n /**\n * Determine if operation should use CLI\n */\n private async shouldUseCLI(): Promise<boolean> {\n const capabilities = await this.getCapabilities();\n\n return (\n this.config.preferCLI &&\n capabilities.cliAvailable &&\n capabilities.authenticated &&\n capabilities.goldenContract\n );\n }\n\n /**\n * Execute operation with intelligent routing\n */\n private async executeOperation<T>(\n operation: string,\n cliOperation: () => Promise<ApiResponse<T>>,\n apiOperation: () => Promise<ApiResponse<T>>\n ): Promise<OperationResult<T>> {\n const useCLI = await this.shouldUseCLI();\n const capabilities = await this.getCapabilities();\n\n if (useCLI) {\n try {\n const result = await cliOperation();\n\n if (result.error && this.config.fallbackToAPI) {\n console.warn(`CLI ${operation} failed, falling back to API:`, result.error);\n const apiResult = await apiOperation();\n return {\n ...apiResult,\n source: 'api',\n mcpUsed: false\n };\n }\n\n return {\n ...result,\n source: 'cli',\n mcpUsed: capabilities.mcpSupport\n };\n } catch (error) {\n if (this.config.fallbackToAPI) {\n console.warn(`CLI ${operation} error, falling back to API:`, error);\n const apiResult = await apiOperation();\n return {\n ...apiResult,\n source: 'api',\n mcpUsed: false\n };\n }\n\n return {\n error: createErrorResponse(\n error instanceof Error ? error.message : `CLI ${operation} failed`,\n 'API_ERROR'\n ),\n source: 'cli',\n mcpUsed: false\n };\n }\n } else {\n const result = await apiOperation();\n return {\n ...result,\n source: 'api',\n mcpUsed: false\n };\n }\n }\n\n // Enhanced API Methods\n\n /**\n * Health check with intelligent routing\n */\n async healthCheck(): Promise<OperationResult<{ status: string; timestamp: string }>> {\n return this.executeOperation(\n 'health check',\n () => this.cliIntegration.healthCheckViaCLI(),\n () => this.directClient.healthCheck()\n );\n }\n\n /**\n * Create memory with CLI/API routing\n */\n async createMemory(memory: CreateMemoryRequest): Promise<OperationResult<MemoryEntry>> {\n return this.executeOperation(\n 'create memory',\n () => this.cliIntegration.createMemoryViaCLI(\n memory.title,\n memory.content,\n {\n memoryType: memory.memory_type,\n tags: memory.tags,\n topicId: memory.topic_id\n }\n ),\n () => this.directClient.createMemory(memory)\n );\n }\n\n /**\n * List memories with intelligent routing\n */\n async listMemories(options: {\n page?: number;\n limit?: number;\n memory_type?: string;\n topic_id?: string;\n project_ref?: string;\n status?: string;\n tags?: string[];\n sort?: string;\n order?: 'asc' | 'desc';\n } = {}): Promise<OperationResult<PaginatedResponse<MemoryEntry>>> {\n return this.executeOperation(\n 'list memories',\n () => this.cliIntegration.listMemoriesViaCLI({\n limit: options.limit,\n memoryType: options.memory_type,\n tags: options.tags,\n sortBy: options.sort\n }),\n () => this.directClient.listMemories(options)\n );\n }\n\n /**\n * Search memories with MCP enhancement when available\n */\n async searchMemories(request: SearchMemoryRequest): Promise<OperationResult<{\n results: MemorySearchResult[];\n total_results: number;\n search_time_ms: number;\n }>> {\n return this.executeOperation(\n 'search memories',\n () => this.cliIntegration.searchMemoriesViaCLI(\n request.query,\n {\n limit: request.limit,\n memoryTypes: request.memory_types\n }\n ),\n () => this.directClient.searchMemories(request)\n );\n }\n\n /**\n * Get memory by ID (API only for now)\n */\n async getMemory(id: string): Promise<OperationResult<MemoryEntry>> {\n // CLI doesn't have get by ID yet, use API\n const result = await this.directClient.getMemory(id);\n return {\n ...result,\n source: 'api',\n mcpUsed: false\n };\n }\n\n /**\n * Update memory (API only for now)\n */\n async updateMemory(id: string, updates: UpdateMemoryRequest): Promise<OperationResult<MemoryEntry>> {\n // CLI doesn't have update yet, use API\n const result = await this.directClient.updateMemory(id, updates);\n return {\n ...result,\n source: 'api',\n mcpUsed: false\n };\n }\n\n /**\n * Delete memory (API only for now)\n */\n async deleteMemory(id: string): Promise<OperationResult<void>> {\n // CLI doesn't have delete yet, use API\n const result = await this.directClient.deleteMemory(id);\n return {\n ...result,\n source: 'api',\n mcpUsed: false\n };\n }\n\n // Topic Operations (API only for now)\n\n async createTopic(topic: CreateTopicRequest): Promise<OperationResult<MemoryTopic>> {\n const result = await this.directClient.createTopic(topic);\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n async getTopics(): Promise<OperationResult<MemoryTopic[]>> {\n const result = await this.directClient.getTopics();\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n async getTopic(id: string): Promise<OperationResult<MemoryTopic>> {\n const result = await this.directClient.getTopic(id);\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n async updateTopic(id: string, updates: Partial<CreateTopicRequest>): Promise<OperationResult<MemoryTopic>> {\n const result = await this.directClient.updateTopic(id, updates);\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n async deleteTopic(id: string): Promise<OperationResult<void>> {\n const result = await this.directClient.deleteTopic(id);\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n /**\n * Get memory statistics\n */\n async getMemoryStats(): Promise<OperationResult<UserMemoryStats>> {\n const result = await this.directClient.getMemoryStats();\n return { ...result, source: 'api', mcpUsed: false };\n }\n\n // Utility Methods\n\n /**\n * Force CLI re-detection\n */\n async refreshCLIDetection(): Promise<void> {\n this.capabilities = null;\n await this.cliIntegration.refresh();\n await this.initialize();\n }\n\n /**\n * Get authentication status from CLI\n */\n async getAuthStatus(): Promise<OperationResult<CLIAuthStatus>> {\n try {\n const result = await this.cliIntegration.getAuthStatus();\n return { ...result, source: 'cli', mcpUsed: false };\n } catch (error) {\n return {\n error: createErrorResponse(\n error instanceof Error ? error.message : 'Auth status check failed',\n 'API_ERROR'\n ),\n source: 'cli',\n mcpUsed: false\n };\n }\n }\n\n /**\n * Get MCP status when available\n */\n async getMCPStatus(): Promise<OperationResult<CLIMCPStatus>> {\n const capabilities = await this.getCapabilities();\n\n if (!capabilities.mcpSupport) {\n return {\n error: createErrorResponse('MCP not available', 'API_ERROR'),\n source: 'cli',\n mcpUsed: false\n };\n }\n\n try {\n const result = await this.cliIntegration.getMCPStatus();\n return { ...result, source: 'cli', mcpUsed: true };\n } catch (error) {\n return {\n error: createErrorResponse(\n error instanceof Error ? error.message : 'MCP status check failed',\n 'API_ERROR'\n ),\n source: 'cli',\n mcpUsed: false\n };\n }\n }\n\n /**\n * Update authentication for both CLI and API client\n */\n setAuthToken(token: string): void {\n this.directClient.setAuthToken(token);\n }\n\n setApiKey(apiKey: string): void {\n this.directClient.setApiKey(apiKey);\n }\n\n clearAuth(): void {\n this.directClient.clearAuth();\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<EnhancedMemoryClientConfig>): void {\n this.config = { ...this.config, ...updates };\n this.directClient.updateConfig(updates);\n }\n\n /**\n * Get configuration summary\n */\n getConfigSummary(): {\n apiUrl: string;\n preferCLI: boolean;\n enableMCP: boolean;\n capabilities?: Awaited<ReturnType<CLIIntegration['getCapabilities']>>;\n } {\n return {\n apiUrl: this.config.apiUrl,\n preferCLI: this.config.preferCLI,\n enableMCP: this.config.enableMCP,\n capabilities: this.capabilities || undefined\n };\n }\n}\n\n/**\n * Factory function to create an enhanced memory client\n */\nexport async function createNodeMemoryClient(config: EnhancedMemoryClientConfig): Promise<EnhancedMemoryClient> {\n const client = new EnhancedMemoryClient(config);\n await client.initialize();\n return client;\n}\n\n/**\n * Synchronous factory function (initialization happens on first API call)\n */\nexport function createEnhancedMemoryClient(config: EnhancedMemoryClientConfig): EnhancedMemoryClient {\n return new EnhancedMemoryClient(config);\n}\n"],"names":[],"mappings":"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"}