@lanonasis/mem-intel-sdk 1.0.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.
Files changed (66) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +21 -0
  3. package/README.md +490 -0
  4. package/dist/core/client.d.ts +43 -0
  5. package/dist/core/client.d.ts.map +1 -0
  6. package/dist/core/errors.d.ts +24 -0
  7. package/dist/core/errors.d.ts.map +1 -0
  8. package/dist/core/index.cjs +310 -0
  9. package/dist/core/index.cjs.map +1 -0
  10. package/dist/core/index.d.ts +7 -0
  11. package/dist/core/index.d.ts.map +1 -0
  12. package/dist/core/index.js +300 -0
  13. package/dist/core/index.js.map +1 -0
  14. package/dist/core/types.d.ts +171 -0
  15. package/dist/core/types.d.ts.map +1 -0
  16. package/dist/index-sdk.d.ts +8 -0
  17. package/dist/index-sdk.d.ts.map +1 -0
  18. package/dist/index.cjs +310 -0
  19. package/dist/index.cjs.map +1 -0
  20. package/dist/index.js +300 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/node/client.d.ts +22 -0
  23. package/dist/node/client.d.ts.map +1 -0
  24. package/dist/node/index.cjs +331 -0
  25. package/dist/node/index.cjs.map +1 -0
  26. package/dist/node/index.d.ts +7 -0
  27. package/dist/node/index.d.ts.map +1 -0
  28. package/dist/node/index.js +321 -0
  29. package/dist/node/index.js.map +1 -0
  30. package/dist/react/context/MemoryIntelligenceProvider.d.ts +18 -0
  31. package/dist/react/context/MemoryIntelligenceProvider.d.ts.map +1 -0
  32. package/dist/react/hooks/useMemoryIntelligence.d.ts +115 -0
  33. package/dist/react/hooks/useMemoryIntelligence.d.ts.map +1 -0
  34. package/dist/react/index.cjs +399 -0
  35. package/dist/react/index.cjs.map +1 -0
  36. package/dist/react/index.d.ts +8 -0
  37. package/dist/react/index.d.ts.map +1 -0
  38. package/dist/react/index.js +377 -0
  39. package/dist/react/index.js.map +1 -0
  40. package/dist/server/index.cjs +802 -0
  41. package/dist/server/index.cjs.map +1 -0
  42. package/dist/server/index.d.ts +7 -0
  43. package/dist/server/index.d.ts.map +1 -0
  44. package/dist/server/index.js +792 -0
  45. package/dist/server/index.js.map +1 -0
  46. package/dist/server/mcp-server.d.ts +7 -0
  47. package/dist/server/mcp-server.d.ts.map +1 -0
  48. package/dist/utils/embeddings.d.ts +13 -0
  49. package/dist/utils/embeddings.d.ts.map +1 -0
  50. package/dist/utils/formatting.d.ts +13 -0
  51. package/dist/utils/formatting.d.ts.map +1 -0
  52. package/dist/utils/http-client.d.ts +31 -0
  53. package/dist/utils/http-client.d.ts.map +1 -0
  54. package/dist/utils/index.d.ts +9 -0
  55. package/dist/utils/index.d.ts.map +1 -0
  56. package/dist/utils/similarity.d.ts +8 -0
  57. package/dist/utils/similarity.d.ts.map +1 -0
  58. package/dist/vue/composables/useMemoryIntelligence.d.ts +24 -0
  59. package/dist/vue/composables/useMemoryIntelligence.d.ts.map +1 -0
  60. package/dist/vue/index.cjs +132 -0
  61. package/dist/vue/index.cjs.map +1 -0
  62. package/dist/vue/index.d.ts +7 -0
  63. package/dist/vue/index.d.ts.map +1 -0
  64. package/dist/vue/index.js +115 -0
  65. package/dist/vue/index.js.map +1 -0
  66. package/package.json +144 -0
@@ -0,0 +1,377 @@
1
+ import React, { createContext, useContext } from 'react';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { z } from 'zod';
4
+
5
+ // src/react/context/MemoryIntelligenceProvider.tsx
6
+
7
+ // src/core/errors.ts
8
+ var MemoryIntelligenceError = class extends Error {
9
+ constructor(message) {
10
+ super(message);
11
+ this.name = "MemoryIntelligenceError";
12
+ }
13
+ };
14
+ var ConfigurationError = class extends MemoryIntelligenceError {
15
+ constructor(message) {
16
+ super(message);
17
+ this.name = "ConfigurationError";
18
+ }
19
+ };
20
+ var MemoryNotFoundError = class extends MemoryIntelligenceError {
21
+ constructor(memoryId) {
22
+ super(`Memory not found: ${memoryId}`);
23
+ this.name = "MemoryNotFoundError";
24
+ }
25
+ };
26
+ var DatabaseError = class extends MemoryIntelligenceError {
27
+ constructor(message, originalError) {
28
+ super(message);
29
+ this.originalError = originalError;
30
+ this.name = "DatabaseError";
31
+ }
32
+ };
33
+ var EmbeddingError = class extends MemoryIntelligenceError {
34
+ constructor(message, originalError) {
35
+ super(message);
36
+ this.originalError = originalError;
37
+ this.name = "EmbeddingError";
38
+ }
39
+ };
40
+ var ValidationError = class extends MemoryIntelligenceError {
41
+ constructor(message) {
42
+ super(message);
43
+ this.name = "ValidationError";
44
+ }
45
+ };
46
+
47
+ // src/utils/http-client.ts
48
+ var HttpClient = class {
49
+ apiUrl;
50
+ apiKey;
51
+ timeout;
52
+ headers;
53
+ constructor(config) {
54
+ if (!config.apiKey) {
55
+ throw new ConfigurationError("API key is required");
56
+ }
57
+ if (!config.apiKey.startsWith("lano_")) {
58
+ throw new ConfigurationError(
59
+ "Invalid API key format. API key should start with 'lano_'"
60
+ );
61
+ }
62
+ this.apiUrl = config.apiUrl.replace(/\/$/, "");
63
+ this.apiKey = config.apiKey;
64
+ this.timeout = config.timeout || 3e4;
65
+ this.headers = {
66
+ "Content-Type": "application/json",
67
+ "X-API-Key": this.apiKey,
68
+ ...config.headers
69
+ };
70
+ }
71
+ async request(method, endpoint, data) {
72
+ const url = `${this.apiUrl}${endpoint}`;
73
+ const controller = new AbortController();
74
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
75
+ try {
76
+ const options = {
77
+ method,
78
+ headers: this.headers,
79
+ signal: controller.signal
80
+ };
81
+ if (data && (method === "POST" || method === "PUT" || method === "PATCH")) {
82
+ options.body = JSON.stringify(data);
83
+ }
84
+ const response = await fetch(url, options);
85
+ clearTimeout(timeoutId);
86
+ const responseData = await response.json();
87
+ if (!response.ok) {
88
+ return {
89
+ status: response.status,
90
+ error: {
91
+ message: responseData?.message || responseData?.error || "Request failed",
92
+ code: responseData?.code
93
+ }
94
+ };
95
+ }
96
+ return {
97
+ status: response.status,
98
+ data: responseData
99
+ };
100
+ } catch (error) {
101
+ clearTimeout(timeoutId);
102
+ if (error instanceof Error) {
103
+ if (error.name === "AbortError") {
104
+ return {
105
+ status: 408,
106
+ error: {
107
+ message: `Request timeout after ${this.timeout}ms`,
108
+ code: "TIMEOUT"
109
+ }
110
+ };
111
+ }
112
+ return {
113
+ status: 0,
114
+ error: {
115
+ message: error.message,
116
+ code: "NETWORK_ERROR"
117
+ }
118
+ };
119
+ }
120
+ return {
121
+ status: 0,
122
+ error: {
123
+ message: "Unknown error occurred",
124
+ code: "UNKNOWN_ERROR"
125
+ }
126
+ };
127
+ }
128
+ }
129
+ async get(endpoint) {
130
+ return this.request("GET", endpoint);
131
+ }
132
+ async post(endpoint, data) {
133
+ return this.request("POST", endpoint, data);
134
+ }
135
+ async put(endpoint, data) {
136
+ return this.request("PUT", endpoint, data);
137
+ }
138
+ async patch(endpoint, data) {
139
+ return this.request("PATCH", endpoint, data);
140
+ }
141
+ async delete(endpoint) {
142
+ return this.request("DELETE", endpoint);
143
+ }
144
+ };
145
+
146
+ // src/core/client.ts
147
+ var DEFAULT_API_URL = "https://api.lanonasis.com/api/v1";
148
+ var MemoryIntelligenceClient = class {
149
+ httpClient;
150
+ defaultResponseFormat;
151
+ constructor(config) {
152
+ if (!config.apiKey) {
153
+ throw new ConfigurationError(
154
+ "Missing required configuration: apiKey is required (format: lano_xxxxxxxxxx)"
155
+ );
156
+ }
157
+ this.httpClient = new HttpClient({
158
+ apiUrl: config.apiUrl || DEFAULT_API_URL,
159
+ apiKey: config.apiKey,
160
+ timeout: config.timeout,
161
+ headers: config.headers
162
+ });
163
+ this.defaultResponseFormat = config.responseFormat || "markdown";
164
+ }
165
+ /**
166
+ * Get HTTP client for direct API access
167
+ */
168
+ getHttpClient() {
169
+ return this.httpClient;
170
+ }
171
+ /**
172
+ * Query memories from the API
173
+ */
174
+ async queryMemories(userId, options = {}) {
175
+ const { type, limit = 100, offset = 0 } = options;
176
+ const params = new URLSearchParams({
177
+ user_id: userId,
178
+ limit: limit.toString(),
179
+ offset: offset.toString()
180
+ });
181
+ if (type) {
182
+ params.append("type", type);
183
+ }
184
+ const response = await this.httpClient.get(
185
+ `/intelligence/memories?${params.toString()}`
186
+ );
187
+ if (response.error) {
188
+ throw new DatabaseError(`Failed to query memories: ${response.error.message}`);
189
+ }
190
+ return response.data?.memories || [];
191
+ }
192
+ /**
193
+ * Analyze usage patterns and trends in memory collection
194
+ */
195
+ async analyzePatterns(params) {
196
+ const response = await this.httpClient.post(
197
+ "/intelligence/analyze-patterns",
198
+ {
199
+ ...params,
200
+ responseFormat: params.responseFormat || this.defaultResponseFormat
201
+ }
202
+ );
203
+ if (response.error) {
204
+ throw new DatabaseError(`Failed to analyze patterns: ${response.error.message}`);
205
+ }
206
+ return response.data;
207
+ }
208
+ /**
209
+ * Get AI-powered tag suggestions for a memory
210
+ */
211
+ async suggestTags(params) {
212
+ const response = await this.httpClient.post(
213
+ "/intelligence/suggest-tags",
214
+ {
215
+ ...params,
216
+ responseFormat: params.responseFormat || this.defaultResponseFormat
217
+ }
218
+ );
219
+ if (response.error) {
220
+ throw new DatabaseError(`Failed to suggest tags: ${response.error.message}`);
221
+ }
222
+ return response.data;
223
+ }
224
+ /**
225
+ * Find semantically related memories using vector similarity
226
+ */
227
+ async findRelated(params) {
228
+ const response = await this.httpClient.post(
229
+ "/intelligence/find-related",
230
+ {
231
+ ...params,
232
+ responseFormat: params.responseFormat || this.defaultResponseFormat
233
+ }
234
+ );
235
+ if (response.error) {
236
+ throw new DatabaseError(`Failed to find related memories: ${response.error.message}`);
237
+ }
238
+ return response.data;
239
+ }
240
+ /**
241
+ * Detect potential duplicate memories
242
+ */
243
+ async detectDuplicates(params) {
244
+ const response = await this.httpClient.post(
245
+ "/intelligence/detect-duplicates",
246
+ {
247
+ ...params,
248
+ responseFormat: params.responseFormat || this.defaultResponseFormat
249
+ }
250
+ );
251
+ if (response.error) {
252
+ throw new DatabaseError(`Failed to detect duplicates: ${response.error.message}`);
253
+ }
254
+ return response.data;
255
+ }
256
+ /**
257
+ * Extract insights and patterns from memories
258
+ */
259
+ async extractInsights(params) {
260
+ const response = await this.httpClient.post(
261
+ "/intelligence/extract-insights",
262
+ {
263
+ ...params,
264
+ responseFormat: params.responseFormat || this.defaultResponseFormat
265
+ }
266
+ );
267
+ if (response.error) {
268
+ throw new DatabaseError(`Failed to extract insights: ${response.error.message}`);
269
+ }
270
+ return response.data;
271
+ }
272
+ /**
273
+ * Check the health and organization quality of memories
274
+ */
275
+ async healthCheck(params) {
276
+ const response = await this.httpClient.post(
277
+ "/intelligence/health-check",
278
+ {
279
+ ...params,
280
+ responseFormat: params.responseFormat || this.defaultResponseFormat
281
+ }
282
+ );
283
+ if (response.error) {
284
+ throw new DatabaseError(`Failed to check health: ${response.error.message}`);
285
+ }
286
+ return response.data;
287
+ }
288
+ };
289
+
290
+ // src/react/context/MemoryIntelligenceProvider.tsx
291
+ var MemoryIntelligenceContext = createContext(
292
+ null
293
+ );
294
+ function MemoryIntelligenceProvider({
295
+ config,
296
+ children
297
+ }) {
298
+ const [client] = React.useState(() => new MemoryIntelligenceClient(config));
299
+ return /* @__PURE__ */ React.createElement(MemoryIntelligenceContext.Provider, { value: { client } }, children);
300
+ }
301
+ function useMemoryIntelligenceContext() {
302
+ const context = useContext(MemoryIntelligenceContext);
303
+ if (!context) {
304
+ throw new Error(
305
+ "useMemoryIntelligenceContext must be used within MemoryIntelligenceProvider"
306
+ );
307
+ }
308
+ return context;
309
+ }
310
+ function useMemoryIntelligence() {
311
+ const { client } = useMemoryIntelligenceContext();
312
+ return client;
313
+ }
314
+ function usePatternAnalysis(params, options) {
315
+ const client = useMemoryIntelligence();
316
+ return useQuery({
317
+ queryKey: ["memory-intelligence", "analyze-patterns", params],
318
+ queryFn: () => client.analyzePatterns(params),
319
+ ...options
320
+ });
321
+ }
322
+ function useTagSuggestions(params, options) {
323
+ const client = useMemoryIntelligence();
324
+ return useQuery({
325
+ queryKey: ["memory-intelligence", "suggest-tags", params],
326
+ queryFn: () => client.suggestTags(params),
327
+ ...options
328
+ });
329
+ }
330
+ function useRelatedMemories(params, options) {
331
+ const client = useMemoryIntelligence();
332
+ return useQuery({
333
+ queryKey: ["memory-intelligence", "find-related", params],
334
+ queryFn: () => client.findRelated(params),
335
+ ...options
336
+ });
337
+ }
338
+ function useDuplicateDetection(params, options) {
339
+ const client = useMemoryIntelligence();
340
+ return useQuery({
341
+ queryKey: ["memory-intelligence", "detect-duplicates", params],
342
+ queryFn: () => client.detectDuplicates(params),
343
+ ...options
344
+ });
345
+ }
346
+ function useInsightExtraction(params, options) {
347
+ const client = useMemoryIntelligence();
348
+ return useQuery({
349
+ queryKey: ["memory-intelligence", "extract-insights", params],
350
+ queryFn: () => client.extractInsights(params),
351
+ ...options
352
+ });
353
+ }
354
+ function useHealthCheck(params, options) {
355
+ const client = useMemoryIntelligence();
356
+ return useQuery({
357
+ queryKey: ["memory-intelligence", "health-check", params],
358
+ queryFn: () => client.healthCheck(params),
359
+ ...options
360
+ });
361
+ }
362
+ var ResponseFormat = {
363
+ JSON: "json",
364
+ MARKDOWN: "markdown"
365
+ };
366
+ var MemoryType = z.enum([
367
+ "context",
368
+ "project",
369
+ "knowledge",
370
+ "reference",
371
+ "personal",
372
+ "workflow"
373
+ ]);
374
+
375
+ export { ConfigurationError, DatabaseError, EmbeddingError, MemoryIntelligenceError, MemoryIntelligenceProvider, MemoryNotFoundError, MemoryType, ResponseFormat, ValidationError, useDuplicateDetection, useHealthCheck, useInsightExtraction, useMemoryIntelligence, useMemoryIntelligenceContext, usePatternAnalysis, useRelatedMemories, useTagSuggestions };
376
+ //# sourceMappingURL=index.js.map
377
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/errors.ts","../../src/utils/http-client.ts","../../src/core/client.ts","../../src/react/context/MemoryIntelligenceProvider.tsx","../../src/react/hooks/useMemoryIntelligence.ts","../../src/core/types.ts"],"names":[],"mappings":"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","file":"index.js","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 * HTTP client for Lanonasis API\n */\n\nimport { ConfigurationError } from \"../core/errors\";\n\nexport interface HttpClientConfig {\n apiUrl: string;\n apiKey: string;\n timeout?: number;\n headers?: Record<string, string>;\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 class HttpClient {\n private apiUrl: string;\n private apiKey: string;\n private timeout: number;\n private headers: Record<string, string>;\n\n constructor(config: HttpClientConfig) {\n if (!config.apiKey) {\n throw new ConfigurationError(\"API key is required\");\n }\n\n if (!config.apiKey.startsWith(\"lano_\")) {\n throw new ConfigurationError(\n \"Invalid API key format. API key should start with 'lano_'\"\n );\n }\n\n this.apiUrl = config.apiUrl.replace(/\\/$/, \"\"); // Remove trailing slash\n this.apiKey = config.apiKey;\n this.timeout = config.timeout || 30000;\n this.headers = {\n \"Content-Type\": \"application/json\",\n \"X-API-Key\": this.apiKey,\n ...config.headers,\n };\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 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","/**\n * Core Memory Intelligence Client\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} from \"./types\";\nimport { ConfigurationError, DatabaseError } from \"./errors\";\nimport { HttpClient } from \"../utils/http-client\";\n\nconst DEFAULT_API_URL = \"https://api.lanonasis.com/api/v1\";\n\nexport class MemoryIntelligenceClient {\n private httpClient: HttpClient;\n private defaultResponseFormat: \"json\" | \"markdown\";\n\n constructor(config: MemoryIntelligenceConfig) {\n // Validate configuration\n if (!config.apiKey) {\n throw new ConfigurationError(\n \"Missing required configuration: apiKey is required (format: lano_xxxxxxxxxx)\"\n );\n }\n\n this.httpClient = new HttpClient({\n apiUrl: config.apiUrl || DEFAULT_API_URL,\n apiKey: config.apiKey,\n timeout: config.timeout,\n headers: config.headers,\n });\n\n this.defaultResponseFormat = config.responseFormat || \"markdown\";\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<PatternAnalysis> {\n const response = await this.httpClient.post<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 response.data!;\n }\n\n /**\n * Get AI-powered tag suggestions for a memory\n */\n async suggestTags(params: SuggestTagsParams): Promise<TagSuggestionsResult> {\n const response = await this.httpClient.post<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 response.data!;\n }\n\n /**\n * Find semantically related memories using vector similarity\n */\n async findRelated(params: FindRelatedParams): Promise<RelatedMemoriesResult> {\n const response = await this.httpClient.post<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 response.data!;\n }\n\n /**\n * Detect potential duplicate memories\n */\n async detectDuplicates(params: DetectDuplicatesParams): Promise<DuplicatesResult> {\n const response = await this.httpClient.post<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 response.data!;\n }\n\n /**\n * Extract insights and patterns from memories\n */\n async extractInsights(params: ExtractInsightsParams): Promise<InsightsResult> {\n const response = await this.httpClient.post<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 response.data!;\n }\n\n /**\n * Check the health and organization quality of memories\n */\n async healthCheck(params: HealthCheckParams): Promise<MemoryHealth> {\n const response = await this.httpClient.post<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 response.data!;\n }\n}\n","/**\n * React Context Provider for Memory Intelligence\n */\n\nimport React, { createContext, useContext, ReactNode } from \"react\";\nimport { MemoryIntelligenceClient } from \"../../core/client\";\nimport { MemoryIntelligenceConfig } from \"../../core/types\";\n\ninterface MemoryIntelligenceContextValue {\n client: MemoryIntelligenceClient;\n}\n\nconst MemoryIntelligenceContext = createContext<MemoryIntelligenceContextValue | null>(\n null\n);\n\ninterface MemoryIntelligenceProviderProps {\n config: MemoryIntelligenceConfig;\n children: ReactNode;\n}\n\nexport function MemoryIntelligenceProvider({\n config,\n children,\n}: MemoryIntelligenceProviderProps) {\n const [client] = React.useState(() => new MemoryIntelligenceClient(config));\n\n return (\n <MemoryIntelligenceContext.Provider value={{ client }}>\n {children}\n </MemoryIntelligenceContext.Provider>\n );\n}\n\nexport function useMemoryIntelligenceContext() {\n const context = useContext(MemoryIntelligenceContext);\n if (!context) {\n throw new Error(\n \"useMemoryIntelligenceContext must be used within MemoryIntelligenceProvider\"\n );\n }\n return context;\n}\n\nexport { MemoryIntelligenceContext };\n","/**\n * React hooks for Memory Intelligence using React Query\n */\n\nimport { useQuery, useMutation, UseQueryOptions, UseMutationOptions } from \"@tanstack/react-query\";\nimport { useMemoryIntelligenceContext } from \"../context/MemoryIntelligenceProvider\";\nimport {\n PatternAnalysis,\n TagSuggestionsResult,\n RelatedMemoriesResult,\n DuplicatesResult,\n InsightsResult,\n MemoryHealth,\n AnalyzePatternsParams,\n SuggestTagsParams,\n FindRelatedParams,\n DetectDuplicatesParams,\n ExtractInsightsParams,\n HealthCheckParams,\n} from \"../../core/types\";\n\n/**\n * Get the Memory Intelligence client from context\n */\nexport function useMemoryIntelligence() {\n const { client } = useMemoryIntelligenceContext();\n return client;\n}\n\n/**\n * Hook for analyzing memory patterns\n *\n * @example\n * ```tsx\n * const { data, isLoading, error } = usePatternAnalysis({\n * userId: \"user-123\",\n * timeRangeDays: 30,\n * responseFormat: \"json\"\n * });\n * ```\n */\nexport function usePatternAnalysis(\n params: AnalyzePatternsParams,\n options?: Omit<UseQueryOptions<PatternAnalysis>, \"queryKey\" | \"queryFn\">\n) {\n const client = useMemoryIntelligence();\n\n return useQuery<PatternAnalysis>({\n queryKey: [\"memory-intelligence\", \"analyze-patterns\", params],\n queryFn: () => client.analyzePatterns(params),\n ...options,\n });\n}\n\n/**\n * Hook for getting tag suggestions\n *\n * @example\n * ```tsx\n * const { data, isLoading } = useTagSuggestions({\n * memoryId: \"mem-123\",\n * userId: \"user-123\",\n * maxSuggestions: 5\n * });\n * ```\n */\nexport function useTagSuggestions(\n params: SuggestTagsParams,\n options?: Omit<UseQueryOptions<TagSuggestionsResult>, \"queryKey\" | \"queryFn\">\n) {\n const client = useMemoryIntelligence();\n\n return useQuery<TagSuggestionsResult>({\n queryKey: [\"memory-intelligence\", \"suggest-tags\", params],\n queryFn: () => client.suggestTags(params),\n ...options,\n });\n}\n\n/**\n * Mutation hook for getting tag suggestions (if you need manual trigger)\n *\n * @example\n * ```tsx\n * const { mutate, data, isPending } = useTagSuggestionsMutation();\n *\n * // Later...\n * mutate({\n * memoryId: \"mem-123\",\n * userId: \"user-123\"\n * });\n * ```\n */\nexport function useTagSuggestionsMutation(\n options?: UseMutationOptions<TagSuggestionsResult, Error, SuggestTagsParams>\n) {\n const client = useMemoryIntelligence();\n\n return useMutation<TagSuggestionsResult, Error, SuggestTagsParams>({\n mutationFn: (params) => client.suggestTags(params),\n ...options,\n });\n}\n\n/**\n * Hook for finding related memories\n *\n * @example\n * ```tsx\n * const { data, isLoading } = useRelatedMemories({\n * memoryId: \"mem-123\",\n * userId: \"user-123\",\n * limit: 10,\n * similarityThreshold: 0.7\n * });\n * ```\n */\nexport function useRelatedMemories(\n params: FindRelatedParams,\n options?: Omit<UseQueryOptions<RelatedMemoriesResult>, \"queryKey\" | \"queryFn\">\n) {\n const client = useMemoryIntelligence();\n\n return useQuery<RelatedMemoriesResult>({\n queryKey: [\"memory-intelligence\", \"find-related\", params],\n queryFn: () => client.findRelated(params),\n ...options,\n });\n}\n\n/**\n * Hook for detecting duplicate memories\n *\n * @example\n * ```tsx\n * const { data, isLoading } = useDuplicateDetection({\n * userId: \"user-123\",\n * similarityThreshold: 0.9,\n * maxPairs: 20\n * });\n * ```\n */\nexport function useDuplicateDetection(\n params: DetectDuplicatesParams,\n options?: Omit<UseQueryOptions<DuplicatesResult>, \"queryKey\" | \"queryFn\">\n) {\n const client = useMemoryIntelligence();\n\n return useQuery<DuplicatesResult>({\n queryKey: [\"memory-intelligence\", \"detect-duplicates\", params],\n queryFn: () => client.detectDuplicates(params),\n ...options,\n });\n}\n\n/**\n * Mutation hook for duplicate detection (if you need manual trigger)\n */\nexport function useDuplicateDetectionMutation(\n options?: UseMutationOptions<DuplicatesResult, Error, DetectDuplicatesParams>\n) {\n const client = useMemoryIntelligence();\n\n return useMutation<DuplicatesResult, Error, DetectDuplicatesParams>({\n mutationFn: (params) => client.detectDuplicates(params),\n ...options,\n });\n}\n\n/**\n * Hook for extracting insights\n *\n * @example\n * ```tsx\n * const { data, isLoading } = useInsightExtraction({\n * userId: \"user-123\",\n * topic: \"machine learning\",\n * maxMemories: 20\n * });\n * ```\n */\nexport function useInsightExtraction(\n params: ExtractInsightsParams,\n options?: Omit<UseQueryOptions<InsightsResult>, \"queryKey\" | \"queryFn\">\n) {\n const client = useMemoryIntelligence();\n\n return useQuery<InsightsResult>({\n queryKey: [\"memory-intelligence\", \"extract-insights\", params],\n queryFn: () => client.extractInsights(params),\n ...options,\n });\n}\n\n/**\n * Mutation hook for insight extraction (if you need manual trigger)\n */\nexport function useInsightExtractionMutation(\n options?: UseMutationOptions<InsightsResult, Error, ExtractInsightsParams>\n) {\n const client = useMemoryIntelligence();\n\n return useMutation<InsightsResult, Error, ExtractInsightsParams>({\n mutationFn: (params) => client.extractInsights(params),\n ...options,\n });\n}\n\n/**\n * Hook for checking memory health\n *\n * @example\n * ```tsx\n * const { data, isLoading } = useHealthCheck({\n * userId: \"user-123\",\n * responseFormat: \"json\"\n * });\n * ```\n */\nexport function useHealthCheck(\n params: HealthCheckParams,\n options?: Omit<UseQueryOptions<MemoryHealth>, \"queryKey\" | \"queryFn\">\n) {\n const client = useMemoryIntelligence();\n\n return useQuery<MemoryHealth>({\n queryKey: [\"memory-intelligence\", \"health-check\", params],\n queryFn: () => client.healthCheck(params),\n ...options,\n });\n}\n\n/**\n * Mutation hook for health check (if you need manual trigger)\n */\nexport function useHealthCheckMutation(\n options?: UseMutationOptions<MemoryHealth, Error, HealthCheckParams>\n) {\n const client = useMemoryIntelligence();\n\n return useMutation<MemoryHealth, Error, HealthCheckParams>({\n mutationFn: (params) => client.healthCheck(params),\n ...options,\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// 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 timeout?: number; // Request timeout in milliseconds (default: 30000)\n responseFormat?: ResponseFormatType;\n headers?: Record<string, string>; // Custom headers\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 DuplicatePair {\n memory_1: {\n id: string;\n title: string;\n created_at: string;\n };\n memory_2: {\n id: string;\n title: string;\n created_at: string;\n };\n similarity_score: number;\n recommendation: \"keep_newer\" | \"keep_older\" | \"merge\" | \"review_manually\";\n reasoning: string;\n}\n\nexport interface DuplicatesResult {\n total_memories_analyzed: number;\n duplicate_pairs_found: number;\n duplicate_pairs: DuplicatePair[];\n estimated_storage_savings: string;\n}\n\nexport interface Insight {\n category: \"pattern\" | \"learning\" | \"opportunity\" | \"risk\" | \"action_item\";\n title: string;\n description: string;\n confidence: number;\n supporting_memories: string[];\n}\n\nexport interface InsightsResult {\n total_memories_analyzed: number;\n insights: Insight[];\n summary: string;\n topic_filter?: string;\n type_filter?: string;\n}\n\nexport interface MemoryHealth {\n user_id: string;\n health_score: number;\n metrics: {\n total_memories: number;\n memories_with_embeddings: number;\n embedding_coverage_percentage: number;\n memories_with_tags: number;\n tagging_percentage: number;\n average_tags_per_memory: number;\n memories_by_type: Record<string, number>;\n };\n issues: string[];\n recommendations: string[];\n analysis_date: 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"]}