@lanonasis/ai-sdk 0.1.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +255 -12
- package/dist/client.d.ts +79 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +425 -0
- package/dist/client.js.map +1 -0
- package/dist/http/client.d.ts +66 -0
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/client.js +243 -0
- package/dist/http/client.js.map +1 -0
- package/dist/index.d.ts +49 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -17
- package/dist/index.js.map +1 -1
- package/dist/react/hooks.d.ts +64 -0
- package/dist/react/hooks.d.ts.map +1 -0
- package/dist/react/hooks.js +231 -0
- package/dist/react/hooks.js.map +1 -0
- package/dist/types/index.d.ts +257 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +46 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +53 -7
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser-safe HTTP Client for Lanonasis AI API
|
|
3
|
+
* Handles chat completions and orchestration endpoints
|
|
4
|
+
* Memory operations are handled by @lanonasis/memory-sdk
|
|
5
|
+
*/
|
|
6
|
+
import { LanonasisError, AuthenticationError, RateLimitError, NetworkError, ValidationError, } from '../types/index.js';
|
|
7
|
+
export class HttpClient {
|
|
8
|
+
config;
|
|
9
|
+
rateLimitRemaining = Infinity;
|
|
10
|
+
rateLimitReset = 0;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.validateApiKey(config.apiKey);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Validate API key format
|
|
17
|
+
* Supports lano_ (primary), lnss_, vx_, and onasis_ (legacy) prefixes
|
|
18
|
+
* Aligned with auth-gateway api-key.service.ts
|
|
19
|
+
*/
|
|
20
|
+
validateApiKey(apiKey) {
|
|
21
|
+
if (!apiKey) {
|
|
22
|
+
throw new AuthenticationError('API key is required');
|
|
23
|
+
}
|
|
24
|
+
// Support all key formats (aligned with auth-gateway)
|
|
25
|
+
// lano_ = primary format
|
|
26
|
+
// lnss_, vx_, onasis_ = legacy formats (deprecated but still supported)
|
|
27
|
+
const validPrefixes = ['lano_', 'lnss_', 'vx_', 'onasis_'];
|
|
28
|
+
const hasValidPrefix = validPrefixes.some(prefix => apiKey.startsWith(prefix));
|
|
29
|
+
if (!hasValidPrefix) {
|
|
30
|
+
// During migration period, allow keys without recognized prefix
|
|
31
|
+
// but log a warning in debug mode
|
|
32
|
+
if (this.config.debug) {
|
|
33
|
+
console.warn(`[Lanonasis AI SDK] API key with unknown prefix. Expected "lano_" prefix.`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (apiKey.length < 20) {
|
|
37
|
+
throw new AuthenticationError('API key appears to be too short');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build request headers
|
|
42
|
+
*/
|
|
43
|
+
buildHeaders(customHeaders) {
|
|
44
|
+
const headers = {
|
|
45
|
+
'Content-Type': 'application/json',
|
|
46
|
+
'Authorization': `Bearer ${this.config.apiKey}`,
|
|
47
|
+
'X-Lanonasis-Client': '@lanonasis/ai-sdk',
|
|
48
|
+
'X-Lanonasis-Version': '0.2.0',
|
|
49
|
+
...this.config.headers,
|
|
50
|
+
...customHeaders,
|
|
51
|
+
};
|
|
52
|
+
if (this.config.organizationId) {
|
|
53
|
+
headers['X-Lanonasis-Org'] = this.config.organizationId;
|
|
54
|
+
}
|
|
55
|
+
return headers;
|
|
56
|
+
}
|
|
57
|
+
sleep(ms) {
|
|
58
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
59
|
+
}
|
|
60
|
+
getRetryDelay(attempt, retryAfter) {
|
|
61
|
+
if (retryAfter) {
|
|
62
|
+
return retryAfter * 1000;
|
|
63
|
+
}
|
|
64
|
+
return Math.min(1000 * Math.pow(2, attempt), 30000);
|
|
65
|
+
}
|
|
66
|
+
isRetryable(status) {
|
|
67
|
+
return status === 429 || status >= 500;
|
|
68
|
+
}
|
|
69
|
+
async parseError(response) {
|
|
70
|
+
let errorData = {};
|
|
71
|
+
try {
|
|
72
|
+
errorData = await response.json();
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
errorData = { message: response.statusText };
|
|
76
|
+
}
|
|
77
|
+
const error = errorData.error;
|
|
78
|
+
const message = (error?.message || errorData.message || 'Request failed');
|
|
79
|
+
const code = (error?.code || 'UNKNOWN_ERROR');
|
|
80
|
+
switch (response.status) {
|
|
81
|
+
case 401:
|
|
82
|
+
return new AuthenticationError(message);
|
|
83
|
+
case 429:
|
|
84
|
+
const retryAfter = parseInt(response.headers.get('Retry-After') || '60', 10);
|
|
85
|
+
return new RateLimitError(message, retryAfter);
|
|
86
|
+
case 400:
|
|
87
|
+
return new ValidationError(message, error?.details);
|
|
88
|
+
default:
|
|
89
|
+
return new LanonasisError(message, code, response.status, errorData);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
updateRateLimitInfo(headers) {
|
|
93
|
+
const remaining = headers.get('X-RateLimit-Remaining');
|
|
94
|
+
const reset = headers.get('X-RateLimit-Reset');
|
|
95
|
+
if (remaining) {
|
|
96
|
+
this.rateLimitRemaining = parseInt(remaining, 10);
|
|
97
|
+
}
|
|
98
|
+
if (reset) {
|
|
99
|
+
this.rateLimitReset = parseInt(reset, 10);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
debug(message, data) {
|
|
103
|
+
if (this.config.debug) {
|
|
104
|
+
console.log(`[Lanonasis AI SDK] ${message}`, data || '');
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Make HTTP request with retries
|
|
109
|
+
*/
|
|
110
|
+
async request(options) {
|
|
111
|
+
const url = `${this.config.baseUrl}${options.path}`;
|
|
112
|
+
const headers = this.buildHeaders(options.headers);
|
|
113
|
+
const timeout = options.timeout || this.config.timeout;
|
|
114
|
+
let lastError = null;
|
|
115
|
+
for (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {
|
|
116
|
+
try {
|
|
117
|
+
this.debug(`Request attempt ${attempt + 1}`, { method: options.method, url });
|
|
118
|
+
const controller = new AbortController();
|
|
119
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
120
|
+
const fetchOptions = {
|
|
121
|
+
method: options.method,
|
|
122
|
+
headers,
|
|
123
|
+
signal: controller.signal,
|
|
124
|
+
};
|
|
125
|
+
if (options.body && options.method !== 'GET') {
|
|
126
|
+
fetchOptions.body = JSON.stringify(options.body);
|
|
127
|
+
}
|
|
128
|
+
const response = await fetch(url, fetchOptions);
|
|
129
|
+
clearTimeout(timeoutId);
|
|
130
|
+
this.updateRateLimitInfo(response.headers);
|
|
131
|
+
if (response.ok) {
|
|
132
|
+
const data = await response.json();
|
|
133
|
+
this.debug('Request successful', { status: response.status });
|
|
134
|
+
// Convert headers to object (compatible with older TS targets)
|
|
135
|
+
const responseHeaders = {};
|
|
136
|
+
response.headers.forEach((value, key) => {
|
|
137
|
+
responseHeaders[key] = value;
|
|
138
|
+
});
|
|
139
|
+
return {
|
|
140
|
+
data,
|
|
141
|
+
status: response.status,
|
|
142
|
+
headers: responseHeaders,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
const error = await this.parseError(response);
|
|
146
|
+
if (this.isRetryable(response.status) && attempt < this.config.maxRetries) {
|
|
147
|
+
const retryAfter = error instanceof RateLimitError ? error.retryAfter : undefined;
|
|
148
|
+
const delay = this.getRetryDelay(attempt, retryAfter);
|
|
149
|
+
this.debug(`Retrying after ${delay}ms`, { attempt, status: response.status });
|
|
150
|
+
await this.sleep(delay);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
if (error instanceof LanonasisError) {
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
if (error instanceof Error) {
|
|
160
|
+
if (error.name === 'AbortError') {
|
|
161
|
+
lastError = new NetworkError('Request timeout');
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
lastError = new NetworkError(error.message);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (attempt < this.config.maxRetries) {
|
|
168
|
+
const delay = this.getRetryDelay(attempt);
|
|
169
|
+
this.debug(`Network error, retrying after ${delay}ms`, { attempt });
|
|
170
|
+
await this.sleep(delay);
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
throw lastError || new NetworkError('Request failed after retries');
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Make streaming request (for chat completions)
|
|
179
|
+
*/
|
|
180
|
+
async *stream(options) {
|
|
181
|
+
const url = `${this.config.baseUrl}${options.path}`;
|
|
182
|
+
const headers = this.buildHeaders(options.headers);
|
|
183
|
+
const controller = new AbortController();
|
|
184
|
+
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
185
|
+
try {
|
|
186
|
+
const response = await fetch(url, {
|
|
187
|
+
method: options.method,
|
|
188
|
+
headers: {
|
|
189
|
+
...headers,
|
|
190
|
+
'Accept': 'text/event-stream',
|
|
191
|
+
},
|
|
192
|
+
body: options.body ? JSON.stringify(options.body) : undefined,
|
|
193
|
+
signal: controller.signal,
|
|
194
|
+
});
|
|
195
|
+
clearTimeout(timeoutId);
|
|
196
|
+
if (!response.ok) {
|
|
197
|
+
throw await this.parseError(response);
|
|
198
|
+
}
|
|
199
|
+
if (!response.body) {
|
|
200
|
+
throw new NetworkError('No response body for streaming');
|
|
201
|
+
}
|
|
202
|
+
const reader = response.body.getReader();
|
|
203
|
+
const decoder = new TextDecoder();
|
|
204
|
+
while (true) {
|
|
205
|
+
const { done, value } = await reader.read();
|
|
206
|
+
if (done)
|
|
207
|
+
break;
|
|
208
|
+
const chunk = decoder.decode(value, { stream: true });
|
|
209
|
+
const lines = chunk.split('\n');
|
|
210
|
+
for (const line of lines) {
|
|
211
|
+
if (line.startsWith('data: ')) {
|
|
212
|
+
const data = line.slice(6);
|
|
213
|
+
if (data === '[DONE]')
|
|
214
|
+
return;
|
|
215
|
+
yield data;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
clearTimeout(timeoutId);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
get(path, headers) {
|
|
225
|
+
return this.request({ method: 'GET', path, headers });
|
|
226
|
+
}
|
|
227
|
+
post(path, body, headers) {
|
|
228
|
+
return this.request({ method: 'POST', path, body, headers });
|
|
229
|
+
}
|
|
230
|
+
put(path, body, headers) {
|
|
231
|
+
return this.request({ method: 'PUT', path, body, headers });
|
|
232
|
+
}
|
|
233
|
+
delete(path, headers) {
|
|
234
|
+
return this.request({ method: 'DELETE', path, headers });
|
|
235
|
+
}
|
|
236
|
+
getRateLimitStatus() {
|
|
237
|
+
return {
|
|
238
|
+
remaining: this.rateLimitRemaining,
|
|
239
|
+
reset: this.rateLimitReset,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/http/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,20 +1,53 @@
|
|
|
1
|
-
import { L0Orchestrator, type L0QueryOptions, type L0Response, pluginManager, createPluginManager, type PluginManager } from 'vortexai-l0';
|
|
2
|
-
export interface AiSDKOptions {
|
|
3
|
-
/** Optional plugin manager for custom workflows */
|
|
4
|
-
plugins?: PluginManager;
|
|
5
|
-
}
|
|
6
1
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
2
|
+
* @lanonasis/ai-sdk v0.2.0
|
|
3
|
+
*
|
|
4
|
+
* Drop-in AI SDK for browser and Node.js applications
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - API Key authentication (lnss_xxx... / onasis_xxx...)
|
|
8
|
+
* - Persistent memory via @lanonasis/memory-sdk
|
|
9
|
+
* - Chat completions with streaming
|
|
10
|
+
* - vortexai-l0 orchestration (local or remote)
|
|
11
|
+
* - Full TypeScript support
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { LanonasisAI } from '@lanonasis/ai-sdk';
|
|
16
|
+
*
|
|
17
|
+
* const ai = new LanonasisAI({ apiKey: 'lnss_your_key_here' });
|
|
18
|
+
*
|
|
19
|
+
* // Simple chat
|
|
20
|
+
* const response = await ai.send('Hello!');
|
|
21
|
+
* console.log(response);
|
|
22
|
+
*
|
|
23
|
+
* // With memory persistence
|
|
24
|
+
* const response = await ai.chat({
|
|
25
|
+
* messages: [{ role: 'user', content: 'Remember my name is Alex' }],
|
|
26
|
+
* conversationId: 'my-session',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Use memory-sdk directly for advanced operations
|
|
30
|
+
* const context = await ai.memory.searchWithContext('my previous conversations');
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export { LanonasisAI, createClient } from './client.js';
|
|
34
|
+
export { HttpClient } from './http/client.js';
|
|
35
|
+
export type { HttpClientConfig, RequestOptions, HttpResponse } from './http/client.js';
|
|
36
|
+
export * from './types/index.js';
|
|
37
|
+
export { default as MemoryClient } from '@lanonasis/memory-sdk-standalone';
|
|
38
|
+
export type { MaaSClientConfig as MemoryClientConfig, ApiResponse } from '@lanonasis/memory-sdk-standalone';
|
|
39
|
+
export { L0Orchestrator } from 'vortexai-l0/orchestrator';
|
|
40
|
+
export type { L0QueryOptions, L0Response } from 'vortexai-l0/orchestrator';
|
|
41
|
+
export { pluginManager, createPluginManager } from 'vortexai-l0/plugins';
|
|
42
|
+
export type { PluginManager } from 'vortexai-l0/plugins';
|
|
43
|
+
import { LanonasisAI } from './client.js';
|
|
44
|
+
/**
|
|
45
|
+
* @deprecated Use LanonasisAI instead
|
|
9
46
|
*/
|
|
10
|
-
export declare class AiSDK {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
orchestrate(query: string, options?: L0QueryOptions): Promise<L0Response>;
|
|
15
|
-
/** Direct access to underlying orchestrator */
|
|
16
|
-
getOrchestrator(): L0Orchestrator;
|
|
47
|
+
export declare class AiSDK extends LanonasisAI {
|
|
48
|
+
constructor(config?: {
|
|
49
|
+
apiKey?: string;
|
|
50
|
+
});
|
|
17
51
|
}
|
|
18
|
-
export
|
|
19
|
-
export type { L0QueryOptions, L0Response, PluginManager };
|
|
52
|
+
export default LanonasisAI;
|
|
20
53
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAGH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGvF,cAAc,kBAAkB,CAAC;AAGjC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAC3E,YAAY,EAAE,gBAAgB,IAAI,kBAAkB,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAG5G,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,qBAAa,KAAM,SAAQ,WAAW;gBACxB,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE;CAOzC;AAGD,eAAe,WAAW,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,22 +1,60 @@
|
|
|
1
|
-
import { L0Orchestrator, pluginManager, createPluginManager } from 'vortexai-l0';
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* @lanonasis/ai-sdk v0.2.0
|
|
3
|
+
*
|
|
4
|
+
* Drop-in AI SDK for browser and Node.js applications
|
|
5
|
+
*
|
|
6
|
+
* Features:
|
|
7
|
+
* - API Key authentication (lnss_xxx... / onasis_xxx...)
|
|
8
|
+
* - Persistent memory via @lanonasis/memory-sdk
|
|
9
|
+
* - Chat completions with streaming
|
|
10
|
+
* - vortexai-l0 orchestration (local or remote)
|
|
11
|
+
* - Full TypeScript support
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* import { LanonasisAI } from '@lanonasis/ai-sdk';
|
|
16
|
+
*
|
|
17
|
+
* const ai = new LanonasisAI({ apiKey: 'lnss_your_key_here' });
|
|
18
|
+
*
|
|
19
|
+
* // Simple chat
|
|
20
|
+
* const response = await ai.send('Hello!');
|
|
21
|
+
* console.log(response);
|
|
22
|
+
*
|
|
23
|
+
* // With memory persistence
|
|
24
|
+
* const response = await ai.chat({
|
|
25
|
+
* messages: [{ role: 'user', content: 'Remember my name is Alex' }],
|
|
26
|
+
* conversationId: 'my-session',
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* // Use memory-sdk directly for advanced operations
|
|
30
|
+
* const context = await ai.memory.searchWithContext('my previous conversations');
|
|
31
|
+
* ```
|
|
5
32
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
33
|
+
// Main client
|
|
34
|
+
export { LanonasisAI, createClient } from './client.js';
|
|
35
|
+
// HTTP client (for advanced usage)
|
|
36
|
+
export { HttpClient } from './http/client.js';
|
|
37
|
+
// All types
|
|
38
|
+
export * from './types/index.js';
|
|
39
|
+
// Re-export memory-sdk for convenience
|
|
40
|
+
export { default as MemoryClient } from '@lanonasis/memory-sdk-standalone';
|
|
41
|
+
// Re-export vortexai-l0 primitives for power users (browser-safe imports)
|
|
42
|
+
export { L0Orchestrator } from 'vortexai-l0/orchestrator';
|
|
43
|
+
export { pluginManager, createPluginManager } from 'vortexai-l0/plugins';
|
|
44
|
+
// Legacy compatibility - AiSDK alias
|
|
45
|
+
import { LanonasisAI } from './client.js';
|
|
46
|
+
/**
|
|
47
|
+
* @deprecated Use LanonasisAI instead
|
|
48
|
+
*/
|
|
49
|
+
export class AiSDK extends LanonasisAI {
|
|
50
|
+
constructor(config) {
|
|
51
|
+
super({
|
|
52
|
+
apiKey: config?.apiKey || process.env.LANONASIS_API_KEY || '',
|
|
53
|
+
baseUrl: process.env.LANONASIS_BASE_URL,
|
|
54
|
+
useLocalOrchestration: true, // Legacy behavior
|
|
55
|
+
});
|
|
18
56
|
}
|
|
19
57
|
}
|
|
20
|
-
//
|
|
21
|
-
export
|
|
58
|
+
// Default export
|
|
59
|
+
export default LanonasisAI;
|
|
22
60
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,cAAc;AACd,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,YAAY;AACZ,cAAc,kBAAkB,CAAC;AAEjC,uCAAuC;AACvC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAG3E,0EAA0E;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,qCAAqC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C;;GAEG;AACH,MAAM,OAAO,KAAM,SAAQ,WAAW;IACpC,YAAY,MAA4B;QACtC,KAAK,CAAC;YACJ,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,EAAE;YAC7D,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;YACvC,qBAAqB,EAAE,IAAI,EAAE,kBAAkB;SAChD,CAAC,CAAC;IACL,CAAC;CACF;AAED,iBAAiB;AACjB,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Hooks for @lanonasis/ai-sdk
|
|
3
|
+
* Optional: Only import if using React
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```tsx
|
|
7
|
+
* import { useLanonasis, useChat } from '@lanonasis/ai-sdk/react';
|
|
8
|
+
*
|
|
9
|
+
* function ChatComponent() {
|
|
10
|
+
* const { client, isReady } = useLanonasis({ apiKey: 'lnss_xxx' });
|
|
11
|
+
* const { messages, send, isLoading } = useChat({ client });
|
|
12
|
+
*
|
|
13
|
+
* return <div>...</div>;
|
|
14
|
+
* }
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
import type { LanonasisConfig, Message } from '../types/index.js';
|
|
18
|
+
import { LanonasisAI } from '../client.js';
|
|
19
|
+
export interface UseLanonasisOptions extends LanonasisConfig {
|
|
20
|
+
}
|
|
21
|
+
export interface UseLanonasisReturn {
|
|
22
|
+
client: LanonasisAI | null;
|
|
23
|
+
isReady: boolean;
|
|
24
|
+
error: Error | null;
|
|
25
|
+
}
|
|
26
|
+
export declare function useLanonasis(options: UseLanonasisOptions): UseLanonasisReturn;
|
|
27
|
+
export interface UseChatOptions {
|
|
28
|
+
client: LanonasisAI | null;
|
|
29
|
+
conversationId?: string;
|
|
30
|
+
systemPrompt?: string;
|
|
31
|
+
onError?: (error: Error) => void;
|
|
32
|
+
}
|
|
33
|
+
export interface UseChatReturn {
|
|
34
|
+
messages: Message[];
|
|
35
|
+
isLoading: boolean;
|
|
36
|
+
error: Error | null;
|
|
37
|
+
send: (content: string) => Promise<void>;
|
|
38
|
+
sendWithStream: (content: string) => Promise<void>;
|
|
39
|
+
clear: () => void;
|
|
40
|
+
conversationId: string | undefined;
|
|
41
|
+
}
|
|
42
|
+
export declare function useChat(options: UseChatOptions): UseChatReturn;
|
|
43
|
+
export interface UseMemoryOptions {
|
|
44
|
+
client: LanonasisAI | null;
|
|
45
|
+
}
|
|
46
|
+
export interface UseMemoryReturn {
|
|
47
|
+
search: (query: string, limit?: number) => Promise<unknown[]>;
|
|
48
|
+
save: (title: string, content: string, tags?: string[]) => Promise<void>;
|
|
49
|
+
buildContext: (query: string) => Promise<string | null>;
|
|
50
|
+
isLoading: boolean;
|
|
51
|
+
error: Error | null;
|
|
52
|
+
}
|
|
53
|
+
export declare function useMemory(options: UseMemoryOptions): UseMemoryReturn;
|
|
54
|
+
export interface UseOrchestrateOptions {
|
|
55
|
+
client: LanonasisAI | null;
|
|
56
|
+
}
|
|
57
|
+
export interface UseOrchestrateReturn {
|
|
58
|
+
orchestrate: (query: string) => Promise<unknown>;
|
|
59
|
+
result: unknown;
|
|
60
|
+
isLoading: boolean;
|
|
61
|
+
error: Error | null;
|
|
62
|
+
}
|
|
63
|
+
export declare function useOrchestrate(options: UseOrchestrateOptions): UseOrchestrateReturn;
|
|
64
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/react/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EACV,eAAe,EACf,OAAO,EAIR,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAM3C,MAAM,WAAW,mBAAoB,SAAQ,eAAe;CAAG;AAE/D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CAqB7E;AAMD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CA+G9D;AAMD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzE,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxD,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAkEpE;AAMD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,CAyBnF"}
|