@bytexbyte/nxtlinq-ai-agent-sdk 1.2.5 → 1.2.6

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../../src/components/context/ChatBotContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EACL,kBAAkB,EAClB,YAAY,EAOb,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,UAAU,0BAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAg7BlD,CAAC"}
1
+ {"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../../src/components/context/ChatBotContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,OAAO,EACL,kBAAkB,EAClB,YAAY,EAOb,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,UAAU,0BAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CAqpClD,CAAC"}
@@ -33,7 +33,27 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
33
33
  const [signer, setSigner] = React.useState(null);
34
34
  const [walletInfo, setWalletInfo] = React.useState(null);
35
35
  const [isWalletLoading, setIsWalletLoading] = React.useState(false);
36
+ const [isAutoConnecting, setIsAutoConnecting] = React.useState(false);
37
+ const [justAutoConnected, setJustAutoConnected] = React.useState(false);
36
38
  const [nxtlinqAITServiceAccessToken, setNxtlinqAITServiceAccessToken] = useLocalStorage('nxtlinqAITServiceAccessToken', '');
39
+ // Use refs to get latest state values in hasPermission function
40
+ const hitAddressRef = React.useRef(hitAddress);
41
+ const aitRef = React.useRef(ait);
42
+ const permissionsRef = React.useRef(permissions);
43
+ const nxtlinqAITServiceAccessTokenRef = React.useRef(nxtlinqAITServiceAccessToken);
44
+ // Update refs when state changes
45
+ React.useEffect(() => {
46
+ hitAddressRef.current = hitAddress;
47
+ }, [hitAddress]);
48
+ React.useEffect(() => {
49
+ aitRef.current = ait;
50
+ }, [ait]);
51
+ React.useEffect(() => {
52
+ permissionsRef.current = permissions;
53
+ }, [permissions]);
54
+ React.useEffect(() => {
55
+ nxtlinqAITServiceAccessTokenRef.current = nxtlinqAITServiceAccessToken;
56
+ }, [nxtlinqAITServiceAccessToken]);
37
57
  const [notification, setNotification] = React.useState({
38
58
  show: false,
39
59
  type: 'info',
@@ -170,6 +190,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
170
190
  localStorage.setItem('walletAddress', userAddress);
171
191
  setHitAddress(userAddress);
172
192
  setSigner(userSigner);
193
+ // Wait for AIT to be loaded if we have a token
173
194
  if (nxtlinqAITServiceAccessToken) {
174
195
  await refreshAIT();
175
196
  }
@@ -230,10 +251,11 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
230
251
  }
231
252
  const { accessToken } = response;
232
253
  setNxtlinqAITServiceAccessToken(accessToken);
254
+ // Wait for AIT to be loaded before showing success message
255
+ await refreshAIT();
233
256
  if (autoShowSuccessMessage) {
234
257
  showSuccess('Successfully signed in with your HIT wallet. You can now use the AI agent.');
235
258
  }
236
- refreshAIT();
237
259
  }
238
260
  catch (error) {
239
261
  console.error('Failed to sign in:', error);
@@ -241,70 +263,164 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
241
263
  }
242
264
  };
243
265
  // Check permissions
244
- const hasPermission = async (toolName) => {
245
- if (!hitAddress) {
246
- setMessages(prev => [...prev, {
247
- id: Date.now().toString(),
248
- content: 'Please connect your HIT wallet to continue.',
249
- role: 'assistant',
250
- timestamp: new Date().toISOString(),
251
- button: 'connect'
252
- }]);
266
+ const hasPermission = async (toolName, autoRetry = true, onAutoConnect) => {
267
+ // Use refs to get latest state values
268
+ const currentHitAddress = hitAddressRef.current;
269
+ const currentAit = aitRef.current;
270
+ const currentPermissions = permissionsRef.current;
271
+ const currentToken = nxtlinqAITServiceAccessTokenRef.current;
272
+ if (!currentHitAddress) {
273
+ if (autoRetry) {
274
+ setIsLoading(false); // Stop thinking before showing message
275
+ setMessages(prev => [...prev, {
276
+ id: Date.now().toString(),
277
+ content: 'Please connect your HIT wallet to continue.',
278
+ role: 'assistant',
279
+ timestamp: new Date().toISOString(),
280
+ button: 'connect'
281
+ }]);
282
+ try {
283
+ setIsAutoConnecting(true); // Mark as auto-connecting
284
+ await connectWallet(false); // Don't show sign-in message yet
285
+ setIsAutoConnecting(false); // Clear auto-connecting state
286
+ setJustAutoConnected(true); // Mark that we just auto-connected
287
+ console.log('Set justAutoConnected to true after auto-connect');
288
+ onAutoConnect?.(); // Call callback if provided
289
+ // If connection successful, continue with permission check
290
+ const result = await hasPermission(toolName, false);
291
+ return result;
292
+ }
293
+ catch (error) {
294
+ console.error('Failed to auto-connect wallet:', error);
295
+ setIsAutoConnecting(false); // Clear auto-connecting state on error
296
+ return false;
297
+ }
298
+ }
299
+ // If autoRetry is false, don't show message again, just return false
253
300
  return false;
254
301
  }
255
- if (!nxtlinqAITServiceAccessToken) {
256
- setMessages(prev => [...prev, {
257
- id: Date.now().toString(),
258
- content: 'Please sign in with your HIT wallet to continue.',
259
- role: 'assistant',
260
- timestamp: new Date().toISOString(),
261
- button: 'signIn'
262
- }]);
302
+ if (!currentToken) {
303
+ if (autoRetry) {
304
+ setIsLoading(false); // Stop thinking before showing message
305
+ setMessages(prev => [...prev, {
306
+ id: Date.now().toString(),
307
+ content: 'Please sign in with your HIT wallet to continue.',
308
+ role: 'assistant',
309
+ timestamp: new Date().toISOString(),
310
+ button: 'signIn'
311
+ }]);
312
+ try {
313
+ setIsAutoConnecting(true); // Mark as auto-signing
314
+ await signInWallet(false); // Don't show success message yet
315
+ setIsAutoConnecting(false); // Clear auto-signing state
316
+ // If sign-in successful, continue with permission check
317
+ const result = await hasPermission(toolName, false);
318
+ return result;
319
+ }
320
+ catch (error) {
321
+ console.error('Failed to auto-sign-in wallet:', error);
322
+ setIsAutoConnecting(false); // Clear auto-signing state on error
323
+ return false;
324
+ }
325
+ }
326
+ // If autoRetry is false, don't show message again, just return false
263
327
  return false;
264
328
  }
265
329
  try {
266
- const payload = JSON.parse(atob(nxtlinqAITServiceAccessToken.split('.')[1]));
330
+ const payload = JSON.parse(atob(currentToken.split('.')[1]));
267
331
  const exp = payload.exp * 1000;
268
332
  const now = Date.now();
269
333
  if (exp < now) {
270
334
  setNxtlinqAITServiceAccessToken('');
271
- setMessages(prev => [...prev, {
272
- id: Date.now().toString(),
273
- content: 'Your wallet session has expired. Please sign in again.',
274
- role: 'assistant',
275
- timestamp: new Date().toISOString(),
276
- button: 'signIn'
277
- }]);
335
+ if (autoRetry) {
336
+ setIsLoading(false); // Stop thinking before showing message
337
+ setMessages(prev => [...prev, {
338
+ id: Date.now().toString(),
339
+ content: 'Your wallet session has expired. Please sign in again.',
340
+ role: 'assistant',
341
+ timestamp: new Date().toISOString(),
342
+ button: 'signIn'
343
+ }]);
344
+ try {
345
+ setIsAutoConnecting(true); // Mark as auto-signing
346
+ await signInWallet(false); // Don't show success message yet
347
+ setIsAutoConnecting(false); // Clear auto-signing state
348
+ // If sign-in successful, continue with permission check
349
+ const result = await hasPermission(toolName, false);
350
+ return result;
351
+ }
352
+ catch (error) {
353
+ console.error('Failed to auto-sign-in after session expiry:', error);
354
+ setIsAutoConnecting(false); // Clear auto-signing state on error
355
+ return false;
356
+ }
357
+ }
358
+ // If autoRetry is false, don't show message again, just return false
278
359
  return false;
279
360
  }
280
361
  const address = payload.address;
281
- if (address !== hitAddress) {
362
+ if (address !== currentHitAddress) {
282
363
  setNxtlinqAITServiceAccessToken('');
364
+ if (autoRetry) {
365
+ setIsLoading(false); // Stop thinking before showing message
366
+ setMessages(prev => [...prev, {
367
+ id: Date.now().toString(),
368
+ content: 'Wallet address mismatch. Please sign in with the correct wallet.',
369
+ role: 'assistant',
370
+ timestamp: new Date().toISOString(),
371
+ button: 'signIn'
372
+ }]);
373
+ try {
374
+ setIsAutoConnecting(true); // Mark as auto-signing
375
+ await signInWallet(false); // Don't show success message yet
376
+ setIsAutoConnecting(false); // Clear auto-signing state
377
+ // If sign-in successful, continue with permission check
378
+ const result = await hasPermission(toolName, false);
379
+ return result;
380
+ }
381
+ catch (error) {
382
+ console.error('Failed to auto-sign-in after address mismatch:', error);
383
+ setIsAutoConnecting(false); // Clear auto-signing state on error
384
+ return false;
385
+ }
386
+ }
387
+ // If autoRetry is false, don't show message again, just return false
388
+ return false;
389
+ }
390
+ }
391
+ catch (error) {
392
+ console.error('Error parsing token:', error);
393
+ setNxtlinqAITServiceAccessToken('');
394
+ if (autoRetry) {
395
+ setIsLoading(false); // Stop thinking before showing message
283
396
  setMessages(prev => [...prev, {
284
397
  id: Date.now().toString(),
285
- content: 'Wallet address mismatch. Please sign in with the correct wallet.',
398
+ content: 'Invalid wallet session. Please sign in again.',
286
399
  role: 'assistant',
287
400
  timestamp: new Date().toISOString(),
288
401
  button: 'signIn'
289
402
  }]);
290
- return false;
403
+ try {
404
+ setIsAutoConnecting(true); // Mark as auto-signing
405
+ await signInWallet(false); // Don't show success message yet
406
+ setIsAutoConnecting(false); // Clear auto-signing state
407
+ // If sign-in successful, continue with permission check
408
+ const result = await hasPermission(toolName, false);
409
+ return result;
410
+ }
411
+ catch (signInError) {
412
+ console.error('Failed to auto-sign-in after token parse error:', signInError);
413
+ setIsAutoConnecting(false); // Clear auto-signing state on error
414
+ return false;
415
+ }
291
416
  }
292
- }
293
- catch (error) {
294
- console.error('Error parsing token:', error);
295
- setNxtlinqAITServiceAccessToken('');
296
- setMessages(prev => [...prev, {
297
- id: Date.now().toString(),
298
- content: 'Invalid wallet session. Please sign in again.',
299
- role: 'assistant',
300
- timestamp: new Date().toISOString(),
301
- button: 'signIn'
302
- }]);
417
+ // If autoRetry is false, don't show message again, just return false
303
418
  return false;
304
419
  }
305
- if (!ait) {
420
+ if (!currentAit) {
306
421
  // Show loading message if AIT is still loading
307
422
  if (isAITLoading) {
423
+ setIsLoading(false); // Stop thinking before showing message
308
424
  setMessages(prev => [...prev, {
309
425
  id: Date.now().toString(),
310
426
  content: 'Loading your wallet configuration... Please wait a moment.',
@@ -313,16 +429,55 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
313
429
  }]);
314
430
  return false;
315
431
  }
316
- setMessages(prev => [...prev, {
317
- id: Date.now().toString(),
318
- content: 'No AIT found for your wallet. Please click the settings button (⚙️) to configure your AIT permissions.',
319
- role: 'assistant',
320
- timestamp: new Date().toISOString()
321
- }]);
322
- return false;
432
+ // If AIT is not loaded but we have a token, try to refresh it once
433
+ if (currentToken && !isAITLoading) {
434
+ try {
435
+ await refreshAIT();
436
+ // Wait for AIT to be loaded with polling
437
+ let attempts = 0;
438
+ const maxAttempts = 10; // Wait up to 5 seconds
439
+ while (!aitRef.current && attempts < maxAttempts) {
440
+ await new Promise(resolve => setTimeout(resolve, 500));
441
+ attempts++;
442
+ }
443
+ // Check again after refresh
444
+ if (!aitRef.current) {
445
+ setIsLoading(false); // Stop thinking before showing message
446
+ setMessages(prev => [...prev, {
447
+ id: Date.now().toString(),
448
+ content: 'No AIT found for your wallet. Please click the settings button (⚙️) to configure your AIT permissions.',
449
+ role: 'assistant',
450
+ timestamp: new Date().toISOString()
451
+ }]);
452
+ return false;
453
+ }
454
+ }
455
+ catch (error) {
456
+ console.error('Failed to refresh AIT during permission check:', error);
457
+ setIsLoading(false); // Stop thinking before showing message
458
+ setMessages(prev => [...prev, {
459
+ id: Date.now().toString(),
460
+ content: 'No AIT found for your wallet. Please click the settings button (⚙️) to configure your AIT permissions.',
461
+ role: 'assistant',
462
+ timestamp: new Date().toISOString()
463
+ }]);
464
+ return false;
465
+ }
466
+ }
467
+ else {
468
+ setIsLoading(false); // Stop thinking before showing message
469
+ setMessages(prev => [...prev, {
470
+ id: Date.now().toString(),
471
+ content: 'No AIT found for your wallet. Please click the settings button (⚙️) to configure your AIT permissions.',
472
+ role: 'assistant',
473
+ timestamp: new Date().toISOString()
474
+ }]);
475
+ return false;
476
+ }
323
477
  }
324
478
  const availablePermissionLabels = availablePermissions.map(p => p.label);
325
479
  if (availablePermissions.length === 0) {
480
+ setIsLoading(false); // Stop thinking before showing message
326
481
  setMessages(prev => [...prev, {
327
482
  id: Date.now().toString(),
328
483
  content: `No permissions available for your current identity provider. Please check your service configuration or contact support. Service ID: ${serviceId}, Permission Group: ${permissionGroup || 'None'}`,
@@ -332,6 +487,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
332
487
  return false;
333
488
  }
334
489
  if (!availablePermissionLabels.includes(toolName)) {
490
+ setIsLoading(false); // Stop thinking before showing message
335
491
  setMessages(prev => [...prev, {
336
492
  id: Date.now().toString(),
337
493
  content: `This tool (${toolName}) is not available for your current identity provider.`,
@@ -340,12 +496,20 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
340
496
  }]);
341
497
  return false;
342
498
  }
343
- if (!permissions.includes(toolName)) {
499
+ if (!currentPermissions.includes(toolName)) {
500
+ setIsLoading(false); // Stop thinking before showing message
344
501
  setMessages(prev => [...prev, {
345
502
  id: Date.now().toString(),
346
- content: `You do not have the required AIT permission: ${toolName}. Please click the settings button (⚙️) to update your permissions.`,
503
+ content: `You don't have the required AIT permission: ${toolName}. Would you like to enable AIT permissions?`,
347
504
  role: 'assistant',
348
- timestamp: new Date().toISOString()
505
+ timestamp: new Date().toISOString(),
506
+ button: 'enableAIT',
507
+ metadata: {
508
+ model: 'gpt-4',
509
+ permissions: currentPermissions,
510
+ issuedBy: currentHitAddress || '',
511
+ toolName: toolName
512
+ }
349
513
  }]);
350
514
  return false;
351
515
  }
@@ -361,23 +525,27 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
361
525
  return availableModels[selectedModelIndex];
362
526
  }, [availableModels, selectedModelIndex]);
363
527
  // Updated sendMessage function to support different AI models
364
- const sendMessage = async (content, retryCount = 0) => {
528
+ const sendMessage = async (content, retryCount = 0, isPresetMessage = false) => {
365
529
  if (!content.trim() || isLoading)
366
530
  return;
367
531
  const currentModel = getCurrentModel();
368
- const userMessage = {
369
- id: Date.now().toString(),
370
- content,
371
- role: 'user',
372
- timestamp: new Date().toISOString(),
373
- metadata: {
374
- model: currentModel.value,
375
- permissions: permissions,
376
- issuedBy: hitAddress || ''
377
- }
378
- };
379
- setMessages(prev => [...prev, userMessage]);
380
- setInputValue('');
532
+ // Only add user message on first attempt, not on retries
533
+ // Also check if this is not a preset message (preset messages are added separately)
534
+ if (retryCount === 0 && !isPresetMessage) {
535
+ const userMessage = {
536
+ id: Date.now().toString(),
537
+ content,
538
+ role: 'user',
539
+ timestamp: new Date().toISOString(),
540
+ metadata: {
541
+ model: currentModel.value,
542
+ permissions: permissions,
543
+ issuedBy: hitAddress || ''
544
+ }
545
+ };
546
+ setMessages(prev => [...prev, userMessage]);
547
+ setInputValue('');
548
+ }
381
549
  setIsLoading(true);
382
550
  try {
383
551
  // Build context messages
@@ -400,8 +568,21 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
400
568
  // Handle tool calls
401
569
  const toolUse = response.toolCall.toolUse;
402
570
  if (onToolUse) {
403
- const isToolAllowed = await hasPermission(toolUse.name);
571
+ let wasAutoConnected = false;
572
+ const isToolAllowed = await hasPermission(toolUse.name, true, () => {
573
+ wasAutoConnected = true;
574
+ });
404
575
  if (!isToolAllowed) {
576
+ // If we just auto-connected, retry the message once
577
+ if (wasAutoConnected && retryCount < 1) {
578
+ console.log('Auto-connected, retrying message...');
579
+ setTimeout(() => {
580
+ sendMessage(content, retryCount + 1, isPresetMessage);
581
+ }, 2000);
582
+ }
583
+ else {
584
+ console.log('Permission denied, not retrying. wasAutoConnected:', wasAutoConnected, 'retryCount:', retryCount);
585
+ }
405
586
  return;
406
587
  }
407
588
  const toolResult = await onToolUse(toolUse);
@@ -486,8 +667,24 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
486
667
  catch (error) {
487
668
  console.error('Failed to send message:', error);
488
669
  if (retryCount < maxRetries) {
670
+ // Show retry indicator to user
671
+ const retryMessage = {
672
+ id: `retry-${Date.now()}-${retryCount}`,
673
+ content: `Retrying... (Attempt ${retryCount + 1}/${maxRetries})`,
674
+ role: 'assistant',
675
+ timestamp: new Date().toISOString(),
676
+ metadata: {
677
+ model: currentModel.value,
678
+ permissions: permissions,
679
+ issuedBy: hitAddress || '',
680
+ isRetry: true
681
+ }
682
+ };
683
+ setMessages(prev => [...prev, retryMessage]);
489
684
  setTimeout(() => {
490
- sendMessage(content, retryCount + 1);
685
+ // Remove retry message before next attempt
686
+ setMessages(prev => prev.filter(msg => msg.id !== retryMessage.id));
687
+ sendMessage(content, retryCount + 1, isPresetMessage);
491
688
  }, retryDelay);
492
689
  return;
493
690
  }
@@ -552,12 +749,12 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
552
749
  };
553
750
  // Handle preset message
554
751
  const handlePresetMessage = (message) => {
555
- // Show loading message if AIT is still loading
556
- if (isAITLoading) {
557
- const loadingMessage = {
752
+ if (message.autoSend) {
753
+ // For preset messages, we need to add the user message first since sendMessage won't add it on retries
754
+ const userMessage = {
558
755
  id: Date.now().toString(),
559
- content: 'Loading your wallet configuration... Please wait a moment.',
560
- role: 'assistant',
756
+ content: message.text,
757
+ role: 'user',
561
758
  timestamp: new Date().toISOString(),
562
759
  metadata: {
563
760
  model: getCurrentModel().value,
@@ -565,22 +762,9 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
565
762
  issuedBy: hitAddress || ''
566
763
  }
567
764
  };
568
- setMessages(prev => [...prev, loadingMessage]);
569
- return;
570
- }
571
- if (message.autoSend) {
572
- setMessages(prev => [...prev, {
573
- id: Date.now().toString(),
574
- content: message.text,
575
- role: 'user',
576
- timestamp: new Date().toISOString(),
577
- metadata: {
578
- model: getCurrentModel().value,
579
- permissions: permissions,
580
- issuedBy: hitAddress || ''
581
- }
582
- }]);
583
- sendMessage(message.text);
765
+ setMessages(prev => [...prev, userMessage]);
766
+ // Pass a flag to indicate this is a preset message so sendMessage won't add user message again
767
+ sendMessage(message.text, 0, true);
584
768
  }
585
769
  else {
586
770
  setInputValue(message.text);
@@ -625,6 +809,41 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
625
809
  setAit(aitInfo);
626
810
  setPermissions(permissions);
627
811
  };
812
+ // Auto enable AIT permissions
813
+ const autoEnableAIT = async (toolName) => {
814
+ if (!signer || !hitAddress) {
815
+ showError('Please connect your wallet first');
816
+ return false;
817
+ }
818
+ try {
819
+ // Get available permissions to find the tool
820
+ const availablePermissionLabels = availablePermissions.map(p => p.label);
821
+ if (!availablePermissionLabels.includes(toolName)) {
822
+ showError(`Tool ${toolName} is not available for your current identity provider`);
823
+ return false;
824
+ }
825
+ // Add the required permission to current permissions
826
+ const newPermissions = [...permissions];
827
+ if (!newPermissions.includes(toolName)) {
828
+ newPermissions.push(toolName);
829
+ }
830
+ // Generate and register AIT with new permissions
831
+ await generateAndRegisterAIT(newPermissions);
832
+ showSuccess('AIT permissions enabled successfully! You can now use the AI agent.');
833
+ await refreshAIT(true);
834
+ return true;
835
+ }
836
+ catch (error) {
837
+ console.error('Failed to auto-enable AIT:', error);
838
+ if (error instanceof Error) {
839
+ showError(error.message);
840
+ }
841
+ else {
842
+ showError('Failed to enable AIT permissions. Please try again.');
843
+ }
844
+ return false;
845
+ }
846
+ };
628
847
  // Save permissions
629
848
  const savePermissions = async (newPermissions) => {
630
849
  setIsDisabled(true);
@@ -811,6 +1030,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
811
1030
  isDisabled,
812
1031
  walletInfo,
813
1032
  isWalletLoading,
1033
+ isAutoConnecting,
814
1034
  notification,
815
1035
  // AI Model related state
816
1036
  availableModels,
@@ -835,6 +1055,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
835
1055
  handleSubmit,
836
1056
  handlePresetMessage,
837
1057
  savePermissions,
1058
+ autoEnableAIT,
838
1059
  handleVerifyWalletClick,
839
1060
  showSuccess,
840
1061
  showError,
@@ -68,6 +68,7 @@ export interface ChatBotContextType {
68
68
  isDisabled: boolean;
69
69
  walletInfo: any;
70
70
  isWalletLoading: boolean;
71
+ isAutoConnecting: boolean;
71
72
  notification: {
72
73
  show: boolean;
73
74
  type: 'success' | 'error' | 'warning' | 'info';
@@ -94,6 +95,7 @@ export interface ChatBotContextType {
94
95
  handleSubmit: (e: React.FormEvent) => Promise<void>;
95
96
  handlePresetMessage: (message: PresetMessage) => void;
96
97
  savePermissions: (newPermissions?: string[]) => Promise<void>;
98
+ autoEnableAIT: (toolName: string) => Promise<boolean>;
97
99
  handleVerifyWalletClick: () => Promise<void>;
98
100
  showSuccess: (message: string) => void;
99
101
  showError: (message: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../../src/components/types/ChatBotTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../../src/components/types/ChatBotTypes.ts"],"names":[],"mappings":"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"}
@@ -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;AAI/B,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAiJ/B,CAAC"}
1
+ {"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/ui/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EA6K/B,CAAC"}
@@ -3,7 +3,7 @@ import * as React from 'react';
3
3
  import { useChatBot } from '../context/ChatBotContext';
4
4
  import { AI_MODEL_MAP } from '../types/ChatBotTypes';
5
5
  export const MessageList = () => {
6
- const { messages, isLoading, connectWallet, signInWallet, hitAddress, ait, setShowPermissionForm, isWalletLoading, isNeedSignInWithWallet } = useChatBot();
6
+ const { messages, isLoading, connectWallet, signInWallet, hitAddress, ait, setShowPermissionForm, isWalletLoading, isAutoConnecting, isNeedSignInWithWallet, autoEnableAIT, isAITLoading } = useChatBot();
7
7
  const messagesEndRef = React.useRef(null);
8
8
  const scrollToBottom = () => {
9
9
  messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
@@ -11,13 +11,23 @@ export const MessageList = () => {
11
11
  React.useEffect(() => {
12
12
  scrollToBottom();
13
13
  }, [messages]);
14
- const handleButtonClick = (buttonType) => {
14
+ const handleButtonClick = async (buttonType, message) => {
15
15
  if (buttonType === 'connect') {
16
16
  connectWallet(true);
17
17
  }
18
18
  else if (buttonType === 'signIn') {
19
19
  signInWallet(true);
20
20
  }
21
+ else if (buttonType === 'enableAIT') {
22
+ const toolName = message.metadata?.toolName;
23
+ if (toolName) {
24
+ const success = await autoEnableAIT(toolName);
25
+ if (success) {
26
+ // If AIT is successfully enabled, you can choose to resend the user's last message
27
+ // Here you can add logic to reprocess the user's request
28
+ }
29
+ }
30
+ }
21
31
  };
22
32
  const getModelDisplayName = (modelValue) => {
23
33
  if (!modelValue)
@@ -36,28 +46,41 @@ export const MessageList = () => {
36
46
  maxWidth: '80%',
37
47
  marginBottom: '10px'
38
48
  }, children: [_jsxs("div", { style: {
39
- backgroundColor: message.role === 'user' ? '#007bff' : '#f1f1f1',
40
- color: message.role === 'user' ? 'white' : '#333',
49
+ backgroundColor: message.role === 'user' ? '#007bff' :
50
+ message.metadata?.isRetry ? '#fff3cd' : '#f1f1f1',
51
+ color: message.role === 'user' ? 'white' :
52
+ message.metadata?.isRetry ? '#856404' : '#333',
41
53
  padding: '10px 15px',
42
54
  borderRadius: '15px',
43
55
  wordWrap: 'break-word',
44
- position: 'relative'
45
- }, children: [message.content, message.button && (_jsx("div", { style: { marginTop: '10px' }, children: _jsx("button", { onClick: () => handleButtonClick(message.button), disabled: (message.button === 'connect' && Boolean(hitAddress)) ||
46
- (message.button === 'signIn' && !isNeedSignInWithWallet), style: {
56
+ position: 'relative',
57
+ border: message.metadata?.isRetry ? '1px solid #ffeaa7' : 'none'
58
+ }, 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 ||
59
+ (message.button === 'connect' && Boolean(hitAddress)) ||
60
+ (message.button === 'signIn' && !isNeedSignInWithWallet) ||
61
+ (message.button === 'enableAIT' && isAITLoading), style: {
47
62
  padding: '8px 16px',
48
63
  backgroundColor: message.role === 'user' ? 'rgba(255, 255, 255, 0.2)' :
49
- (message.button === 'connect' && Boolean(hitAddress)) ? '#28a745' :
50
- (message.button === 'signIn' && !isNeedSignInWithWallet) ? '#28a745' : '#007bff',
64
+ isAutoConnecting ? '#6c757d' :
65
+ (message.button === 'connect' && Boolean(hitAddress)) ? '#28a745' :
66
+ (message.button === 'signIn' && !isNeedSignInWithWallet) ? '#28a745' :
67
+ (message.button === 'enableAIT' && isAITLoading) ? '#6c757d' : '#007bff',
51
68
  color: message.role === 'user' ? 'white' : 'white',
52
69
  border: 'none',
53
70
  borderRadius: '5px',
54
- cursor: ((message.button === 'connect' && Boolean(hitAddress)) ||
55
- (message.button === 'signIn' && !isNeedSignInWithWallet)) ? 'not-allowed' : 'pointer',
71
+ cursor: (isAutoConnecting ||
72
+ (message.button === 'connect' && Boolean(hitAddress)) ||
73
+ (message.button === 'signIn' && !isNeedSignInWithWallet) ||
74
+ (message.button === 'enableAIT' && isAITLoading)) ? 'not-allowed' : 'pointer',
56
75
  fontSize: '14px',
57
- opacity: ((message.button === 'connect' && Boolean(hitAddress)) ||
58
- (message.button === 'signIn' && !isNeedSignInWithWallet)) ? 0.8 : 1
59
- }, children: message.button === 'connect' ? (Boolean(hitAddress) ? 'Connected' : 'Connect Wallet') :
60
- message.button === 'signIn' ? (!isNeedSignInWithWallet ? 'Signed In' : 'Sign In') : message.button }) }))] }), message.role === 'assistant' && message.metadata?.model && (_jsx("div", { style: {
76
+ opacity: (isAutoConnecting ||
77
+ (message.button === 'connect' && Boolean(hitAddress)) ||
78
+ (message.button === 'signIn' && !isNeedSignInWithWallet) ||
79
+ (message.button === 'enableAIT' && isAITLoading)) ? 0.8 : 1
80
+ }, children: isAutoConnecting ? 'Connecting...' :
81
+ message.button === 'connect' ? (Boolean(hitAddress) ? 'Connected' : 'Connect Wallet') :
82
+ message.button === 'signIn' ? (!isNeedSignInWithWallet ? 'Signed In' : 'Sign In') :
83
+ message.button === 'enableAIT' ? (isAITLoading ? 'Enabling...' : 'Enable AIT Permissions') : message.button }) }))] }), message.role === 'assistant' && message.metadata?.model && (_jsx("div", { style: {
61
84
  display: 'flex',
62
85
  alignItems: 'center',
63
86
  marginTop: '4px',
@@ -13,6 +13,8 @@ export interface Message {
13
13
  name: string;
14
14
  input: Record<string, any>;
15
15
  };
16
+ isRetry?: boolean;
17
+ toolName?: string;
16
18
  };
17
19
  }
18
20
  export interface AIT {
@@ -1 +1 @@
1
- {"version":3,"file":"ait-api.d.ts","sourceRoot":"","sources":["../../src/types/ait-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ait-api.d.ts","sourceRoot":"","sources":["../../src/types/ait-api.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytexbyte/nxtlinq-ai-agent-sdk",
3
- "version": "1.2.5",
3
+ "version": "1.2.6",
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",