@bytexbyte/nxtlinq-ai-agent-sdk 1.4.1 → 1.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/nxtlinq-api.d.ts.map +1 -1
- package/dist/api/nxtlinq-api.js +12 -0
- package/dist/components/context/ChatBotContext.d.ts.map +1 -1
- package/dist/components/context/ChatBotContext.js +145 -14
- package/dist/components/types/ChatBotTypes.d.ts +2 -2
- package/dist/components/types/ChatBotTypes.d.ts.map +1 -1
- package/dist/components/types/ChatBotTypes.js +4 -0
- package/dist/components/ui/MessageList.d.ts.map +1 -1
- package/dist/components/ui/MessageList.js +6 -6
- package/dist/core/lib/useSpeechToTextFromMic/helper.d.ts +2 -2
- package/dist/core/lib/useSpeechToTextFromMic/helper.js +2 -2
- package/dist/umd-entry.d.ts +3 -0
- package/dist/umd-entry.d.ts.map +1 -0
- package/dist/umd-entry.js +66 -0
- package/package.json +19 -5
- package/umd/nxtlinq-ai-agent.umd.js +102 -0
- package/umd/nxtlinq-ai-agent.umd.js.LICENSE.txt +37 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nxtlinq-api.d.ts","sourceRoot":"","sources":["../../src/api/nxtlinq-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"nxtlinq-api.d.ts","sourceRoot":"","sources":["../../src/api/nxtlinq-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAmW1C,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,EAAE,WAAW,MAAM,KAAG,MAUpE,CAAC"}
|
package/dist/api/nxtlinq-api.js
CHANGED
|
@@ -72,10 +72,20 @@ const createAgentApi = () => ({
|
|
|
72
72
|
sendMessage: async (params) => {
|
|
73
73
|
try {
|
|
74
74
|
const model = params.model || 'nova';
|
|
75
|
+
// Get AIT related information
|
|
76
|
+
const walletAddress = localStorage.getItem('walletAddress');
|
|
77
|
+
const aitTokenRaw = localStorage.getItem('nxtlinqAITServiceAccessToken');
|
|
78
|
+
const aitToken = aitTokenRaw ? JSON.parse(aitTokenRaw) : null;
|
|
79
|
+
console.log('=== SDK sendMessage AIT Info ===');
|
|
80
|
+
console.log('Wallet Address:', walletAddress);
|
|
81
|
+
console.log('AIT Token Raw:', aitTokenRaw);
|
|
82
|
+
console.log('AIT Token Parsed:', aitToken);
|
|
75
83
|
const response = await fetch(`${AI_AGENT_API_HOST}/api/${model}`, {
|
|
76
84
|
method: 'POST',
|
|
77
85
|
headers: {
|
|
78
86
|
'Content-Type': 'application/json',
|
|
87
|
+
'X-Wallet-Address': walletAddress || '',
|
|
88
|
+
'X-AIT-Token': aitToken || '',
|
|
79
89
|
},
|
|
80
90
|
body: JSON.stringify({
|
|
81
91
|
apiKey: params.apiKey,
|
|
@@ -83,6 +93,8 @@ const createAgentApi = () => ({
|
|
|
83
93
|
pseudoId: params.pseudoId,
|
|
84
94
|
externalId: params.externalId,
|
|
85
95
|
message: params.message,
|
|
96
|
+
walletAddress: walletAddress || undefined,
|
|
97
|
+
aitToken: aitToken || undefined,
|
|
86
98
|
}),
|
|
87
99
|
});
|
|
88
100
|
if (!response.ok) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../../src/components/context/ChatBotContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EACL,kBAAkB,EAClB,YAAY,EAGb,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,UAAU,0BAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../../src/components/context/ChatBotContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,OAAO,EACL,kBAAkB,EAClB,YAAY,EAGb,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,UAAU,0BAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqrDlD,CAAC"}
|
|
@@ -302,6 +302,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
|
|
|
302
302
|
if (autoShowSignInMessage) {
|
|
303
303
|
throw error;
|
|
304
304
|
}
|
|
305
|
+
return false; // Return false on failure
|
|
305
306
|
}
|
|
306
307
|
}, [nxtlinqAITServiceAccessToken, refreshAIT, isNeedSignInWithWallet]);
|
|
307
308
|
// Sign in wallet
|
|
@@ -310,22 +311,25 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
|
|
|
310
311
|
const currentHitAddress = hitAddressRef.current;
|
|
311
312
|
const currentSigner = signerRef.current;
|
|
312
313
|
console.log('signInWallet called: currentHitAddress =', currentHitAddress, 'currentSigner =', !!currentSigner);
|
|
313
|
-
|
|
314
|
-
|
|
314
|
+
// If refs don't have the values, try using current state values
|
|
315
|
+
const addressToUse = currentHitAddress || hitAddress;
|
|
316
|
+
const signerToUse = currentSigner || signer;
|
|
317
|
+
if (!addressToUse) {
|
|
318
|
+
console.log('No address available, returning early');
|
|
315
319
|
if (autoShowSuccessMessage) {
|
|
316
320
|
showError('Please connect your wallet first.');
|
|
317
321
|
}
|
|
318
322
|
return;
|
|
319
323
|
}
|
|
320
|
-
if (!
|
|
321
|
-
console.log('No
|
|
324
|
+
if (!signerToUse) {
|
|
325
|
+
console.log('No signer available, returning early');
|
|
322
326
|
if (autoShowSuccessMessage) {
|
|
323
327
|
showError('Please connect your wallet first.');
|
|
324
328
|
}
|
|
325
329
|
return;
|
|
326
330
|
}
|
|
327
331
|
try {
|
|
328
|
-
const nonceResponse = await nxtlinqApi.auth.getNonce({ address:
|
|
332
|
+
const nonceResponse = await nxtlinqApi.auth.getNonce({ address: addressToUse });
|
|
329
333
|
if ('error' in nonceResponse) {
|
|
330
334
|
if (autoShowSuccessMessage) {
|
|
331
335
|
showError(nonceResponse.error);
|
|
@@ -333,12 +337,12 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
|
|
|
333
337
|
return;
|
|
334
338
|
}
|
|
335
339
|
const payload = {
|
|
336
|
-
address:
|
|
340
|
+
address: addressToUse,
|
|
337
341
|
code: nonceResponse.code,
|
|
338
342
|
timestamp: nonceResponse.timestamp
|
|
339
343
|
};
|
|
340
344
|
const stringToSign = stringify(payload);
|
|
341
|
-
const signature = await
|
|
345
|
+
const signature = await signerToUse.signMessage(stringToSign || '');
|
|
342
346
|
const response = await nxtlinqApi.auth.signIn({
|
|
343
347
|
...payload,
|
|
344
348
|
signature
|
|
@@ -381,7 +385,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
|
|
|
381
385
|
content: 'Please connect your HIT wallet to continue.',
|
|
382
386
|
role: 'assistant',
|
|
383
387
|
timestamp: new Date().toISOString(),
|
|
384
|
-
button: '
|
|
388
|
+
button: 'connectWallet'
|
|
385
389
|
}]);
|
|
386
390
|
try {
|
|
387
391
|
setIsAutoConnecting(true); // Mark as auto-connecting
|
|
@@ -823,8 +827,96 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
|
|
|
823
827
|
externalId: localStorage.getItem('walletAddress') || undefined,
|
|
824
828
|
message: content,
|
|
825
829
|
});
|
|
826
|
-
if ('error' in response) {
|
|
827
|
-
|
|
830
|
+
if ('error' in response || response.result === 'error') {
|
|
831
|
+
// Check if it's an AIT-related error
|
|
832
|
+
const errorResponse = response;
|
|
833
|
+
if (errorResponse.requiresWalletConnection) {
|
|
834
|
+
// Case where wallet connection is required - trigger auto-connect logic
|
|
835
|
+
console.log('API requires wallet connection, triggering auto-connect...');
|
|
836
|
+
// Try to auto-connect wallet first
|
|
837
|
+
const autoConnectResult = await connectWallet(false); // Don't show sign-in message yet
|
|
838
|
+
if (autoConnectResult) {
|
|
839
|
+
// If auto-connect successful, try to sign in and then retry
|
|
840
|
+
console.log('Auto-connect successful, trying to sign in...');
|
|
841
|
+
try {
|
|
842
|
+
// Try to sign in wallet
|
|
843
|
+
await signInWallet(false); // Don't show success message yet
|
|
844
|
+
console.log('Auto sign-in successful, retrying message...');
|
|
845
|
+
// Wait a bit for everything to settle
|
|
846
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
847
|
+
// Retry the message
|
|
848
|
+
sendMessage(content, retryCount + 1, isPresetMessage);
|
|
849
|
+
}
|
|
850
|
+
catch (signInError) {
|
|
851
|
+
console.log('Auto sign-in failed, showing error message');
|
|
852
|
+
setIsLoading(false);
|
|
853
|
+
setMessages(prev => [...prev, {
|
|
854
|
+
id: Date.now().toString(),
|
|
855
|
+
content: 'Wallet connected but sign-in failed. Please try signing in manually.',
|
|
856
|
+
role: 'assistant',
|
|
857
|
+
timestamp: new Date().toISOString(),
|
|
858
|
+
button: 'signIn',
|
|
859
|
+
metadata: {
|
|
860
|
+
requiresWalletConnection: true,
|
|
861
|
+
toolName: errorResponse.toolName
|
|
862
|
+
}
|
|
863
|
+
}]);
|
|
864
|
+
}
|
|
865
|
+
return;
|
|
866
|
+
}
|
|
867
|
+
else {
|
|
868
|
+
// If auto-connect failed, show the error message with connect button
|
|
869
|
+
setIsLoading(false);
|
|
870
|
+
setMessages(prev => [...prev, {
|
|
871
|
+
id: Date.now().toString(),
|
|
872
|
+
content: errorResponse.message,
|
|
873
|
+
role: 'assistant',
|
|
874
|
+
timestamp: new Date().toISOString(),
|
|
875
|
+
button: 'connectWallet',
|
|
876
|
+
metadata: {
|
|
877
|
+
requiresWalletConnection: true,
|
|
878
|
+
toolName: errorResponse.toolName
|
|
879
|
+
}
|
|
880
|
+
}]);
|
|
881
|
+
return;
|
|
882
|
+
}
|
|
883
|
+
}
|
|
884
|
+
else if (errorResponse.requiresPermissionUpdate) {
|
|
885
|
+
// Case where permission update is required - trigger auto-enable logic
|
|
886
|
+
console.log('API requires permission update, triggering auto-enable...');
|
|
887
|
+
// Try to auto-enable AIT permission first
|
|
888
|
+
const autoEnableResult = await autoEnableAIT(errorResponse.toolName);
|
|
889
|
+
if (autoEnableResult) {
|
|
890
|
+
// If auto-enable successful, retry the message
|
|
891
|
+
console.log('Auto-enable successful, retrying message...');
|
|
892
|
+
// Wait a bit for everything to settle
|
|
893
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
894
|
+
// Retry the message
|
|
895
|
+
sendMessage(content, retryCount + 1, isPresetMessage);
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
else {
|
|
899
|
+
// If auto-enable failed, show the error message with enable button
|
|
900
|
+
setIsLoading(false);
|
|
901
|
+
setMessages(prev => [...prev, {
|
|
902
|
+
id: Date.now().toString(),
|
|
903
|
+
content: errorResponse.message,
|
|
904
|
+
role: 'assistant',
|
|
905
|
+
timestamp: new Date().toISOString(),
|
|
906
|
+
button: 'enableAIT',
|
|
907
|
+
metadata: {
|
|
908
|
+
requiresPermissionUpdate: true,
|
|
909
|
+
toolName: errorResponse.toolName,
|
|
910
|
+
requiredPermission: errorResponse.requiredPermission
|
|
911
|
+
}
|
|
912
|
+
}]);
|
|
913
|
+
return;
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
else {
|
|
917
|
+
// Other errors
|
|
918
|
+
throw new Error(errorResponse.error || errorResponse.message);
|
|
919
|
+
}
|
|
828
920
|
}
|
|
829
921
|
let botResponse;
|
|
830
922
|
if (response.toolCall?.toolUse) {
|
|
@@ -843,9 +935,21 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
|
|
|
843
935
|
permissionDenied = true;
|
|
844
936
|
}
|
|
845
937
|
if (!isToolAllowed) {
|
|
846
|
-
// If permission denied due to missing AIT permission,
|
|
938
|
+
// If permission denied due to missing AIT permission, show enable button
|
|
847
939
|
if (permissionDenied) {
|
|
848
940
|
setIsLoading(false);
|
|
941
|
+
setMessages(prev => [...prev, {
|
|
942
|
+
id: Date.now().toString(),
|
|
943
|
+
content: `You don't have the required AIT permission: ${toolUse.name}. Would you like to enable AIT permission?`,
|
|
944
|
+
role: 'assistant',
|
|
945
|
+
timestamp: new Date().toISOString(),
|
|
946
|
+
button: 'enableAIT',
|
|
947
|
+
metadata: {
|
|
948
|
+
requiresPermissionUpdate: true,
|
|
949
|
+
toolName: toolUse.name,
|
|
950
|
+
requiredPermission: toolUse.name
|
|
951
|
+
}
|
|
952
|
+
}]);
|
|
849
953
|
return;
|
|
850
954
|
}
|
|
851
955
|
// Only retry for auto-connect/auto-sign-in scenarios
|
|
@@ -1137,10 +1241,37 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
|
|
|
1137
1241
|
return false; // Prevent duplicate
|
|
1138
1242
|
setIsAITEnabling(true);
|
|
1139
1243
|
console.log('autoEnableAIT called with toolName:', toolName, 'isFromAIAgent will be set to true');
|
|
1244
|
+
// If no wallet connected, try to auto-connect first
|
|
1140
1245
|
if (!signer || !hitAddress) {
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1246
|
+
console.log('No wallet connected, attempting auto-connect...');
|
|
1247
|
+
const autoConnectResult = await connectWallet(false); // Don't show sign-in message yet
|
|
1248
|
+
if (autoConnectResult) {
|
|
1249
|
+
console.log('Auto-connect successful, waiting for state update...');
|
|
1250
|
+
// Wait for state to update - increase wait time
|
|
1251
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
1252
|
+
// Double check that we have the required state
|
|
1253
|
+
if (!signer || !hitAddress) {
|
|
1254
|
+
console.log('State not updated yet, waiting more...');
|
|
1255
|
+
await new Promise(resolve => setTimeout(resolve, 1000));
|
|
1256
|
+
}
|
|
1257
|
+
console.log('Trying to sign in...');
|
|
1258
|
+
try {
|
|
1259
|
+
await signInWallet(false); // Don't show success message yet
|
|
1260
|
+
console.log('Auto sign-in successful, continuing with AIT enable...');
|
|
1261
|
+
}
|
|
1262
|
+
catch (signInError) {
|
|
1263
|
+
console.log('Auto sign-in failed:', signInError);
|
|
1264
|
+
showError('Wallet connected but sign-in failed. Please try signing in manually.');
|
|
1265
|
+
setIsAITEnabling(false);
|
|
1266
|
+
return false;
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
else {
|
|
1270
|
+
console.log('Auto-connect failed');
|
|
1271
|
+
showError('Please connect your wallet first');
|
|
1272
|
+
setIsAITEnabling(false);
|
|
1273
|
+
return false;
|
|
1274
|
+
}
|
|
1144
1275
|
}
|
|
1145
1276
|
try {
|
|
1146
1277
|
// Get available permissions to find the tool
|
|
@@ -96,7 +96,7 @@ export interface ChatBotContextType {
|
|
|
96
96
|
setSelectedModelIndex: (index: number) => void;
|
|
97
97
|
setShowModelSelector: (show: boolean) => void;
|
|
98
98
|
setSuggestions: (suggestions: PresetMessage[]) => void;
|
|
99
|
-
connectWallet: (autoShowSignInMessage?: boolean) => Promise<string | undefined>;
|
|
99
|
+
connectWallet: (autoShowSignInMessage?: boolean) => Promise<string | false | undefined>;
|
|
100
100
|
signInWallet: (autoShowSuccessMessage?: boolean) => Promise<void>;
|
|
101
101
|
sendMessage: (content: string, retryCount?: number) => Promise<void>;
|
|
102
102
|
handleSubmit: (e: React.FormEvent) => Promise<void>;
|
|
@@ -114,7 +114,7 @@ export interface ChatBotContextType {
|
|
|
114
114
|
handleModelChange: (modelIndex: number) => void;
|
|
115
115
|
getCurrentModel: () => AIModel;
|
|
116
116
|
onSave: (newPermissions?: string[]) => Promise<void>;
|
|
117
|
-
onConnectWallet: () => Promise<string | undefined>;
|
|
117
|
+
onConnectWallet: () => Promise<string | false | undefined>;
|
|
118
118
|
onSignIn: () => Promise<void>;
|
|
119
119
|
isNeedSignInWithWallet: boolean;
|
|
120
120
|
onVerifyWallet: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../../src/components/types/ChatBotTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,EAAE,OAAO,EAKtC,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../../src/components/types/ChatBotTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,8 @@ export const ALL_AVAILABLE_MODELS = [
|
|
|
11
11
|
{ label: 'Llama', value: 'llama' },
|
|
12
12
|
{ label: 'Gemini', value: 'gemini' },
|
|
13
13
|
{ label: 'Nova', value: 'nova' },
|
|
14
|
+
{ label: 'ChatGPT-v1.1', value: 'v1.1/open-ai' },
|
|
15
|
+
{ label: 'ChatGPT-v1.2', value: 'v1.2/open-ai' },
|
|
14
16
|
{ label: "Claude-v2", value: "v2/claude" },
|
|
15
17
|
{ label: "ChatGPT-v2", value: "v2/open-ai" },
|
|
16
18
|
{ label: "Llama-v2", value: "v2/llama" },
|
|
@@ -23,6 +25,8 @@ export const AI_MODEL_MAP = {
|
|
|
23
25
|
llama: 'Llama',
|
|
24
26
|
gemini: 'Gemini',
|
|
25
27
|
nova: 'Nova',
|
|
28
|
+
'v1.1/open-ai': 'ChatGPT-v1.1',
|
|
29
|
+
'v1.2/open-ai': 'ChatGPT-v1.2',
|
|
26
30
|
'v2/claude': 'Claude-v2',
|
|
27
31
|
'v2/open-ai': 'ChatGPT-v2',
|
|
28
32
|
'v2/llama': 'Llama-v2',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/ui/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/ui/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAmL/B,CAAC"}
|
|
@@ -12,7 +12,7 @@ export const MessageList = () => {
|
|
|
12
12
|
scrollToBottom();
|
|
13
13
|
}, [messages]);
|
|
14
14
|
const handleButtonClick = async (buttonType, message) => {
|
|
15
|
-
if (buttonType === '
|
|
15
|
+
if (buttonType === 'connectWallet') {
|
|
16
16
|
connectWallet(true);
|
|
17
17
|
}
|
|
18
18
|
else if (buttonType === 'signIn') {
|
|
@@ -60,29 +60,29 @@ export const MessageList = () => {
|
|
|
60
60
|
position: 'relative',
|
|
61
61
|
border: message.metadata?.isRetry ? '1px solid #ffeaa7' : 'none'
|
|
62
62
|
}, children: [message.metadata?.isRetry && (_jsx("span", { style: { marginRight: '8px', fontSize: '14px' }, children: "\uD83D\uDD04" })), message.content, message.button && (_jsx("div", { style: { marginTop: '10px' }, children: _jsx("button", { onClick: () => handleButtonClick(message.button, message), disabled: isAutoConnecting ||
|
|
63
|
-
(message.button === '
|
|
63
|
+
(message.button === 'connectWallet' && Boolean(hitAddress)) ||
|
|
64
64
|
(message.button === 'signIn' && !isNeedSignInWithWallet) ||
|
|
65
65
|
(message.button === 'enableAIT' && (isAITLoading || isAITEnabling)), style: {
|
|
66
66
|
padding: '8px 16px',
|
|
67
67
|
backgroundColor: message.role === 'user' ? 'rgba(255, 255, 255, 0.2)' :
|
|
68
68
|
isAutoConnecting ? '#6c757d' :
|
|
69
|
-
(message.button === '
|
|
69
|
+
(message.button === 'connectWallet' && Boolean(hitAddress)) ? '#28a745' :
|
|
70
70
|
(message.button === 'signIn' && !isNeedSignInWithWallet) ? '#28a745' :
|
|
71
71
|
(message.button === 'enableAIT' && (isAITLoading || isAITEnabling)) ? '#6c757d' : '#007bff',
|
|
72
72
|
color: message.role === 'user' ? 'white' : 'white',
|
|
73
73
|
border: 'none',
|
|
74
74
|
borderRadius: '5px',
|
|
75
75
|
cursor: (isAutoConnecting ||
|
|
76
|
-
(message.button === '
|
|
76
|
+
(message.button === 'connectWallet' && Boolean(hitAddress)) ||
|
|
77
77
|
(message.button === 'signIn' && !isNeedSignInWithWallet) ||
|
|
78
78
|
(message.button === 'enableAIT' && (isAITLoading || isAITEnabling))) ? 'not-allowed' : 'pointer',
|
|
79
79
|
fontSize: '14px',
|
|
80
80
|
opacity: (isAutoConnecting ||
|
|
81
|
-
(message.button === '
|
|
81
|
+
(message.button === 'connectWallet' && Boolean(hitAddress)) ||
|
|
82
82
|
(message.button === 'signIn' && !isNeedSignInWithWallet) ||
|
|
83
83
|
(message.button === 'enableAIT' && (isAITLoading || isAITEnabling))) ? 0.8 : 1
|
|
84
84
|
}, children: isAutoConnecting ? 'Connecting...' :
|
|
85
|
-
message.button === '
|
|
85
|
+
message.button === 'connectWallet' ? (Boolean(hitAddress) ? 'Connected' : 'Connect Wallet') :
|
|
86
86
|
message.button === 'signIn' ? (!isNeedSignInWithWallet ? 'Signed In' : 'Sign In') :
|
|
87
87
|
message.button === 'enableAIT' ? ((isAITLoading || isAITEnabling) ? 'Enabling...' : 'Enable AIT Permissions') : message.button }) }))] }), message.role === 'assistant' && message.metadata?.model && (_jsx("div", { style: {
|
|
88
88
|
display: 'flex',
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { SpeechRecognizer } from 'microsoft-cognitiveservices-speech-sdk';
|
|
2
2
|
import { Dispatch, SetStateAction } from 'react';
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Start speech recognition, continuously updates speechToTextArray (each sentence as an array element)
|
|
5
5
|
*/
|
|
6
6
|
export declare const startSpeechToTextFromMic: (setSpeechToTextArray: Dispatch<SetStateAction<string[]>>, config: {
|
|
7
7
|
apiKey: string;
|
|
8
8
|
apiSecret: string;
|
|
9
9
|
}) => Promise<SpeechRecognizer | undefined>;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
11
|
+
* Stop speech recognition
|
|
12
12
|
*/
|
|
13
13
|
export declare const stopRecognition: (recognizer: SpeechRecognizer | undefined) => void;
|
|
14
14
|
export declare function getTokenOrRefresh(apiKey: string, apiSecret: string): Promise<{
|
|
@@ -3,7 +3,7 @@ import Cookie from 'universal-cookie';
|
|
|
3
3
|
import { createNxtlinqApi } from '../../../api/nxtlinq-api';
|
|
4
4
|
let recognizer;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* Start speech recognition, continuously updates speechToTextArray (each sentence as an array element)
|
|
7
7
|
*/
|
|
8
8
|
export const startSpeechToTextFromMic = async (setSpeechToTextArray, config) => {
|
|
9
9
|
const tokenRes = await getTokenOrRefresh(config.apiKey, config.apiSecret);
|
|
@@ -42,7 +42,7 @@ export const startSpeechToTextFromMic = async (setSpeechToTextArray, config) =>
|
|
|
42
42
|
return recognizer;
|
|
43
43
|
};
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* Stop speech recognition
|
|
46
46
|
*/
|
|
47
47
|
export const stopRecognition = (recognizer) => {
|
|
48
48
|
if (recognizer) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"umd-entry.d.ts","sourceRoot":"","sources":["../src/umd-entry.ts"],"names":[],"mappings":"AAiBA,QAAA,MAAM,cAAc,EAAE,GAuDrB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
// UMD Entry point for nxtlinq AI Agent SDK
|
|
2
|
+
import { ChatBot } from './components/ChatBot';
|
|
3
|
+
import { ChatBotProvider, useChatBot } from './components/context/ChatBotContext';
|
|
4
|
+
import { ChatBotUI } from './components/ui/ChatBotUI';
|
|
5
|
+
import { MessageInput } from './components/ui/MessageInput';
|
|
6
|
+
import { MessageList } from './components/ui/MessageList';
|
|
7
|
+
import { ModelSelector } from './components/ui/ModelSelector';
|
|
8
|
+
import { NotificationModal } from './components/ui/NotificationModal';
|
|
9
|
+
import { PermissionForm } from './components/ui/PermissionForm';
|
|
10
|
+
import { PresetMessages } from './components/ui/PresetMessages';
|
|
11
|
+
import { connectWallet, disconnectWallet, validateToken } from './core/utils/walletUtils';
|
|
12
|
+
import { createAITMetadata, generateAITId, prepareAITCreation } from './core/utils/aitUtils';
|
|
13
|
+
import { createNotification, getNotificationIcon } from './core/utils/notificationUtils';
|
|
14
|
+
import { createNxtlinqApi } from './api/nxtlinq-api';
|
|
15
|
+
import useLocalStorage from './core/lib/useLocalStorage';
|
|
16
|
+
// Export all components and utilities as a single object
|
|
17
|
+
const NxtlinqAIAgent = {
|
|
18
|
+
// Main components
|
|
19
|
+
ChatBot,
|
|
20
|
+
ChatBotProvider,
|
|
21
|
+
useChatBot,
|
|
22
|
+
// UI Components
|
|
23
|
+
ChatBotUI,
|
|
24
|
+
MessageInput,
|
|
25
|
+
MessageList,
|
|
26
|
+
ModelSelector,
|
|
27
|
+
NotificationModal,
|
|
28
|
+
PermissionForm,
|
|
29
|
+
PresetMessages,
|
|
30
|
+
// Utility functions
|
|
31
|
+
connectWallet,
|
|
32
|
+
disconnectWallet,
|
|
33
|
+
validateToken,
|
|
34
|
+
createAITMetadata,
|
|
35
|
+
generateAITId,
|
|
36
|
+
prepareAITCreation,
|
|
37
|
+
createNotification,
|
|
38
|
+
getNotificationIcon,
|
|
39
|
+
// API client
|
|
40
|
+
createNxtlinqApi,
|
|
41
|
+
// Hooks
|
|
42
|
+
useLocalStorage,
|
|
43
|
+
// Constants (will be available as static properties)
|
|
44
|
+
AI_MODEL_MAP: {
|
|
45
|
+
'gpt-4': 'gpt-4',
|
|
46
|
+
'gpt-3.5-turbo': 'gpt-3.5-turbo',
|
|
47
|
+
'claude-3-opus': 'claude-3-opus',
|
|
48
|
+
'claude-3-sonnet': 'claude-3-sonnet',
|
|
49
|
+
'claude-3-haiku': 'claude-3-haiku'
|
|
50
|
+
},
|
|
51
|
+
ALL_AVAILABLE_MODELS: [
|
|
52
|
+
'gpt-4',
|
|
53
|
+
'gpt-3.5-turbo',
|
|
54
|
+
'claude-3-opus',
|
|
55
|
+
'claude-3-sonnet',
|
|
56
|
+
'claude-3-haiku'
|
|
57
|
+
],
|
|
58
|
+
DEFAULT_AI_MODELS: [
|
|
59
|
+
'gpt-4',
|
|
60
|
+
'gpt-3.5-turbo',
|
|
61
|
+
'claude-3-opus',
|
|
62
|
+
'claude-3-sonnet',
|
|
63
|
+
'claude-3-haiku'
|
|
64
|
+
]
|
|
65
|
+
};
|
|
66
|
+
export default NxtlinqAIAgent;
|
package/package.json
CHANGED
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytexbyte/nxtlinq-ai-agent-sdk",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.3",
|
|
4
4
|
"description": "Nxtlinq AI Agent SDK - Proprietary Software with enhanced async operation handling",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"files": [
|
|
8
|
-
"dist"
|
|
8
|
+
"dist",
|
|
9
|
+
"umd"
|
|
9
10
|
],
|
|
10
11
|
"scripts": {
|
|
11
12
|
"build": "tsc",
|
|
12
|
-
"
|
|
13
|
+
"build:umd": "webpack --config webpack.config.js",
|
|
14
|
+
"build:all": "npm run build && npm run build:umd",
|
|
13
15
|
"test": "jest"
|
|
14
16
|
},
|
|
15
17
|
"keywords": [
|
|
@@ -28,10 +30,22 @@
|
|
|
28
30
|
"react": "^18.2.0"
|
|
29
31
|
},
|
|
30
32
|
"devDependencies": {
|
|
33
|
+
"@babel/core": "^7.24.0",
|
|
34
|
+
"@babel/preset-env": "^7.24.0",
|
|
35
|
+
"@babel/preset-react": "^7.23.3",
|
|
36
|
+
"@babel/preset-typescript": "^7.27.1",
|
|
31
37
|
"@types/jest": "^29.5.12",
|
|
32
38
|
"@types/react": "^18.2.64",
|
|
39
|
+
"babel-loader": "^9.1.3",
|
|
40
|
+
"css-loader": "^6.10.0",
|
|
33
41
|
"jest": "^29.7.0",
|
|
34
|
-
"
|
|
42
|
+
"react": "^18.2.0",
|
|
43
|
+
"react-dom": "^18.2.0",
|
|
44
|
+
"style-loader": "^3.3.4",
|
|
45
|
+
"ts-loader": "^9.5.2",
|
|
46
|
+
"typescript": "^5.4.2",
|
|
47
|
+
"webpack": "^5.90.3",
|
|
48
|
+
"webpack-cli": "^5.1.4"
|
|
35
49
|
},
|
|
36
50
|
"dependencies": {
|
|
37
51
|
"@emotion/react": "^11.14.0",
|
|
@@ -45,4 +59,4 @@
|
|
|
45
59
|
"universal-cookie": "^8.0.1",
|
|
46
60
|
"uuid": "^11.1.0"
|
|
47
61
|
}
|
|
48
|
-
}
|
|
62
|
+
}
|