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

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,CAqzClD,CAAC"}
@@ -33,7 +33,31 @@ 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
+ const signerRef = React.useRef(signer);
45
+ // Update refs when state changes
46
+ React.useEffect(() => {
47
+ hitAddressRef.current = hitAddress;
48
+ }, [hitAddress]);
49
+ React.useEffect(() => {
50
+ aitRef.current = ait;
51
+ }, [ait]);
52
+ React.useEffect(() => {
53
+ permissionsRef.current = permissions;
54
+ }, [permissions]);
55
+ React.useEffect(() => {
56
+ nxtlinqAITServiceAccessTokenRef.current = nxtlinqAITServiceAccessToken;
57
+ }, [nxtlinqAITServiceAccessToken]);
58
+ React.useEffect(() => {
59
+ signerRef.current = signer;
60
+ }, [signer]);
37
61
  const [notification, setNotification] = React.useState({
38
62
  show: false,
39
63
  type: 'info',
@@ -64,6 +88,13 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
64
88
  const showError = (message) => showNotification('error', message, 5000);
65
89
  const showWarning = (message) => showNotification('warning', message, 4000);
66
90
  const showInfo = (message) => showNotification('info', message, 3000);
91
+ // Filter out wallet connection messages for API calls
92
+ const getFilteredMessagesForAPI = () => {
93
+ return messages.filter(msg => !msg.content.includes('Please connect your HIT wallet') &&
94
+ !msg.content.includes('Please sign in with your wallet') &&
95
+ !msg.content.includes('connect your wallet') &&
96
+ !msg.content.includes('Wallet verification completed successfully'));
97
+ };
67
98
  // Fetch available permissions
68
99
  const fetchAvailablePermissions = async () => {
69
100
  if (!serviceId)
@@ -93,18 +124,25 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
93
124
  }
94
125
  setIsAITLoading(true);
95
126
  try {
96
- // Get wallet info first
127
+ // Get wallet info first - always try to get wallet info if we have a token
97
128
  if (nxtlinqAITServiceAccessToken) {
98
129
  try {
99
130
  const walletResponse = await nxtlinqApi.wallet.getWallet({ address: hitAddress }, nxtlinqAITServiceAccessToken);
100
131
  if (!('error' in walletResponse)) {
101
132
  setWalletInfo(walletResponse);
133
+ console.log('Wallet info updated:', walletResponse);
134
+ }
135
+ else {
136
+ console.log('Failed to get wallet info:', walletResponse.error);
102
137
  }
103
138
  }
104
139
  catch (error) {
105
140
  console.error('Failed to fetch wallet info:', error);
106
141
  }
107
142
  }
143
+ else {
144
+ console.log('No access token available for wallet info fetch');
145
+ }
108
146
  const response = await nxtlinqApi.ait.getAITByServiceIdAndController({
109
147
  serviceId,
110
148
  controller: hitAddress
@@ -170,6 +208,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
170
208
  localStorage.setItem('walletAddress', userAddress);
171
209
  setHitAddress(userAddress);
172
210
  setSigner(userSigner);
211
+ // Wait for AIT to be loaded if we have a token
173
212
  if (nxtlinqAITServiceAccessToken) {
174
213
  await refreshAIT();
175
214
  }
@@ -194,117 +233,293 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
194
233
  localStorage.removeItem('walletAddress');
195
234
  setHitAddress(null);
196
235
  setSigner(null);
197
- throw error;
236
+ if (autoShowSignInMessage) {
237
+ throw error;
238
+ }
198
239
  }
199
240
  }, [nxtlinqAITServiceAccessToken, refreshAIT, isNeedSignInWithWallet]);
200
241
  // Sign in wallet
201
242
  const signInWallet = async (autoShowSuccessMessage = true) => {
202
- if (!hitAddress) {
203
- showError('Please connect your wallet first.');
243
+ // Use refs to get latest state values for consistency with hasPermission
244
+ const currentHitAddress = hitAddressRef.current;
245
+ const currentSigner = signerRef.current;
246
+ console.log('signInWallet called: currentHitAddress =', currentHitAddress, 'currentSigner =', !!currentSigner);
247
+ if (!currentHitAddress) {
248
+ console.log('No currentHitAddress, returning early');
249
+ if (autoShowSuccessMessage) {
250
+ showError('Please connect your wallet first.');
251
+ }
204
252
  return;
205
253
  }
206
- if (!signer) {
207
- showError('Please connect your wallet first.');
254
+ if (!currentSigner) {
255
+ console.log('No currentSigner, returning early');
256
+ if (autoShowSuccessMessage) {
257
+ showError('Please connect your wallet first.');
258
+ }
208
259
  return;
209
260
  }
210
261
  try {
211
- const nonceResponse = await nxtlinqApi.auth.getNonce({ address: hitAddress });
262
+ const nonceResponse = await nxtlinqApi.auth.getNonce({ address: currentHitAddress });
212
263
  if ('error' in nonceResponse) {
213
- showError(nonceResponse.error);
264
+ if (autoShowSuccessMessage) {
265
+ showError(nonceResponse.error);
266
+ }
214
267
  return;
215
268
  }
216
269
  const payload = {
217
- address: hitAddress,
270
+ address: currentHitAddress,
218
271
  code: nonceResponse.code,
219
272
  timestamp: nonceResponse.timestamp
220
273
  };
221
274
  const stringToSign = stringify(payload);
222
- const signature = await signer.signMessage(stringToSign || '');
275
+ const signature = await currentSigner.signMessage(stringToSign || '');
223
276
  const response = await nxtlinqApi.auth.signIn({
224
277
  ...payload,
225
278
  signature
226
279
  });
227
280
  if ('error' in response) {
228
- showError(response.error);
281
+ if (autoShowSuccessMessage) {
282
+ showError(response.error);
283
+ }
229
284
  return;
230
285
  }
231
286
  const { accessToken } = response;
232
287
  setNxtlinqAITServiceAccessToken(accessToken);
288
+ // Wait for AIT to be loaded before showing success message
289
+ await refreshAIT();
233
290
  if (autoShowSuccessMessage) {
234
291
  showSuccess('Successfully signed in with your HIT wallet. You can now use the AI agent.');
235
292
  }
236
- refreshAIT();
237
293
  }
238
294
  catch (error) {
239
295
  console.error('Failed to sign in:', error);
240
- showError('Failed to sign in. Please try again.');
296
+ if (autoShowSuccessMessage) {
297
+ showError('Failed to sign in. Please try again.');
298
+ }
241
299
  }
242
300
  };
243
301
  // 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
- }]);
302
+ const hasPermission = async (toolName, autoRetry = true, onAutoConnect) => {
303
+ // Use refs to get latest state values
304
+ const currentHitAddress = hitAddressRef.current;
305
+ const currentAit = aitRef.current;
306
+ const currentPermissions = permissionsRef.current;
307
+ const currentToken = nxtlinqAITServiceAccessTokenRef.current;
308
+ if (!currentHitAddress) {
309
+ if (autoRetry) {
310
+ setIsLoading(false); // Stop thinking before showing message
311
+ setMessages(prev => [...prev, {
312
+ id: Date.now().toString(),
313
+ content: 'Please connect your HIT wallet to continue.',
314
+ role: 'assistant',
315
+ timestamp: new Date().toISOString(),
316
+ button: 'connect'
317
+ }]);
318
+ try {
319
+ setIsAutoConnecting(true); // Mark as auto-connecting
320
+ await connectWallet(false); // Don't show sign-in message yet
321
+ setIsAutoConnecting(false); // Clear auto-connecting state
322
+ setJustAutoConnected(true); // Mark that we just auto-connected
323
+ console.log('Set justAutoConnected to true after auto-connect');
324
+ // Show brief success message for auto-connect
325
+ showSuccess('Auto wallet connection successful');
326
+ // Clear the flag after a short delay
327
+ setTimeout(() => {
328
+ setJustAutoConnected(false);
329
+ }, 2000);
330
+ onAutoConnect?.(); // Call callback if provided
331
+ // If connection successful, continue with permission check
332
+ // Wait a bit for state to update
333
+ await new Promise(resolve => setTimeout(resolve, 500));
334
+ const result = await hasPermission(toolName, false);
335
+ return result;
336
+ }
337
+ catch (error) {
338
+ console.error('Failed to auto-connect wallet:', error);
339
+ setIsAutoConnecting(false); // Clear auto-connecting state on error
340
+ return false;
341
+ }
342
+ }
343
+ // If autoRetry is false, don't show message again, just return false
253
344
  return false;
254
345
  }
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
- }]);
346
+ if (!currentToken) {
347
+ if (autoRetry) {
348
+ console.log('Auto sign-in triggered: currentHitAddress =', currentHitAddress, 'currentToken =', currentToken);
349
+ setIsLoading(false); // Stop thinking before showing message
350
+ setMessages(prev => [...prev, {
351
+ id: Date.now().toString(),
352
+ content: 'Please sign in with your HIT wallet to continue.',
353
+ role: 'assistant',
354
+ timestamp: new Date().toISOString(),
355
+ button: 'signIn'
356
+ }]);
357
+ try {
358
+ setIsAutoConnecting(true); // Mark as auto-signing
359
+ console.log('Starting auto sign-in...');
360
+ await signInWallet(false); // Don't show success message yet
361
+ console.log('Auto sign-in completed');
362
+ setIsAutoConnecting(false); // Clear auto-signing state
363
+ // Show brief success message for auto-sign-in
364
+ showSuccess('Auto sign-in successful');
365
+ // Ensure AIT is refreshed after sign-in
366
+ await refreshAIT();
367
+ // Wait for AIT to be fully loaded with polling
368
+ let attempts = 0;
369
+ const maxAttempts = 20; // Wait up to 10 seconds
370
+ while (!aitRef.current && attempts < maxAttempts) {
371
+ await new Promise(resolve => setTimeout(resolve, 500));
372
+ attempts++;
373
+ }
374
+ // Wait a bit more to ensure permissions are also loaded
375
+ await new Promise(resolve => setTimeout(resolve, 1000));
376
+ // If sign-in successful, continue with permission check
377
+ const result = await hasPermission(toolName, false);
378
+ return result;
379
+ }
380
+ catch (error) {
381
+ console.error('Failed to auto-sign-in wallet:', error);
382
+ setIsAutoConnecting(false); // Clear auto-signing state on error
383
+ return false;
384
+ }
385
+ }
386
+ // If autoRetry is false, don't show message again, just return false
263
387
  return false;
264
388
  }
265
389
  try {
266
- const payload = JSON.parse(atob(nxtlinqAITServiceAccessToken.split('.')[1]));
390
+ const payload = JSON.parse(atob(currentToken.split('.')[1]));
267
391
  const exp = payload.exp * 1000;
268
392
  const now = Date.now();
269
393
  if (exp < now) {
270
394
  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
- }]);
395
+ if (autoRetry) {
396
+ setIsLoading(false); // Stop thinking before showing message
397
+ setMessages(prev => [...prev, {
398
+ id: Date.now().toString(),
399
+ content: 'Your wallet session has expired. Please sign in again.',
400
+ role: 'assistant',
401
+ timestamp: new Date().toISOString(),
402
+ button: 'signIn'
403
+ }]);
404
+ try {
405
+ setIsAutoConnecting(true); // Mark as auto-signing
406
+ await signInWallet(false); // Don't show success message yet
407
+ setIsAutoConnecting(false); // Clear auto-signing state
408
+ // Show brief success message for auto-sign-in after session expiry
409
+ showSuccess('Auto sign-in successful after session expiry');
410
+ // Ensure AIT is refreshed after sign-in
411
+ await refreshAIT();
412
+ // Wait for AIT to be fully loaded with polling
413
+ let attempts = 0;
414
+ const maxAttempts = 20; // Wait up to 10 seconds
415
+ while (!aitRef.current && attempts < maxAttempts) {
416
+ await new Promise(resolve => setTimeout(resolve, 500));
417
+ attempts++;
418
+ }
419
+ // Wait a bit more to ensure permissions are also loaded
420
+ await new Promise(resolve => setTimeout(resolve, 1000));
421
+ // If sign-in successful, continue with permission check
422
+ const result = await hasPermission(toolName, false);
423
+ return result;
424
+ }
425
+ catch (error) {
426
+ console.error('Failed to auto-sign-in after session expiry:', error);
427
+ setIsAutoConnecting(false); // Clear auto-signing state on error
428
+ return false;
429
+ }
430
+ }
431
+ // If autoRetry is false, don't show message again, just return false
278
432
  return false;
279
433
  }
280
434
  const address = payload.address;
281
- if (address !== hitAddress) {
435
+ if (address !== currentHitAddress) {
282
436
  setNxtlinqAITServiceAccessToken('');
437
+ if (autoRetry) {
438
+ setIsLoading(false); // Stop thinking before showing message
439
+ setMessages(prev => [...prev, {
440
+ id: Date.now().toString(),
441
+ content: 'Wallet address mismatch. Please sign in with the correct wallet.',
442
+ role: 'assistant',
443
+ timestamp: new Date().toISOString(),
444
+ button: 'signIn'
445
+ }]);
446
+ try {
447
+ setIsAutoConnecting(true); // Mark as auto-signing
448
+ await signInWallet(false); // Don't show success message yet
449
+ setIsAutoConnecting(false); // Clear auto-signing state
450
+ // Show brief success message for auto-sign-in after address mismatch
451
+ showSuccess('Auto sign-in successful after address mismatch');
452
+ // Ensure AIT is refreshed after sign-in
453
+ await refreshAIT();
454
+ // Wait for AIT to be fully loaded with polling
455
+ let attempts = 0;
456
+ const maxAttempts = 20; // Wait up to 10 seconds
457
+ while (!aitRef.current && attempts < maxAttempts) {
458
+ await new Promise(resolve => setTimeout(resolve, 500));
459
+ attempts++;
460
+ }
461
+ // Wait a bit more to ensure permissions are also loaded
462
+ await new Promise(resolve => setTimeout(resolve, 1000));
463
+ // If sign-in successful, continue with permission check
464
+ const result = await hasPermission(toolName, false);
465
+ return result;
466
+ }
467
+ catch (error) {
468
+ console.error('Failed to auto-sign-in after address mismatch:', error);
469
+ setIsAutoConnecting(false); // Clear auto-signing state on error
470
+ return false;
471
+ }
472
+ }
473
+ // If autoRetry is false, don't show message again, just return false
474
+ return false;
475
+ }
476
+ }
477
+ catch (error) {
478
+ console.error('Error parsing token:', error);
479
+ setNxtlinqAITServiceAccessToken('');
480
+ if (autoRetry) {
481
+ setIsLoading(false); // Stop thinking before showing message
283
482
  setMessages(prev => [...prev, {
284
483
  id: Date.now().toString(),
285
- content: 'Wallet address mismatch. Please sign in with the correct wallet.',
484
+ content: 'Invalid wallet session. Please sign in again.',
286
485
  role: 'assistant',
287
486
  timestamp: new Date().toISOString(),
288
487
  button: 'signIn'
289
488
  }]);
290
- return false;
489
+ try {
490
+ setIsAutoConnecting(true); // Mark as auto-signing
491
+ await signInWallet(false); // Don't show success message yet
492
+ setIsAutoConnecting(false); // Clear auto-signing state
493
+ // Show brief success message for auto-sign-in after token parse error
494
+ showSuccess('Auto sign-in successful after token error');
495
+ // Ensure AIT is refreshed after sign-in
496
+ await refreshAIT();
497
+ // Wait for AIT to be fully loaded with polling
498
+ let attempts = 0;
499
+ const maxAttempts = 20; // Wait up to 10 seconds
500
+ while (!aitRef.current && attempts < maxAttempts) {
501
+ await new Promise(resolve => setTimeout(resolve, 500));
502
+ attempts++;
503
+ }
504
+ // Wait a bit more to ensure permissions are also loaded
505
+ await new Promise(resolve => setTimeout(resolve, 1000));
506
+ // If sign-in successful, continue with permission check
507
+ const result = await hasPermission(toolName, false);
508
+ return result;
509
+ }
510
+ catch (signInError) {
511
+ console.error('Failed to auto-sign-in after token parse error:', signInError);
512
+ setIsAutoConnecting(false); // Clear auto-signing state on error
513
+ return false;
514
+ }
291
515
  }
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
- }]);
516
+ // If autoRetry is false, don't show message again, just return false
303
517
  return false;
304
518
  }
305
- if (!ait) {
519
+ if (!currentAit) {
306
520
  // Show loading message if AIT is still loading
307
521
  if (isAITLoading) {
522
+ setIsLoading(false); // Stop thinking before showing message
308
523
  setMessages(prev => [...prev, {
309
524
  id: Date.now().toString(),
310
525
  content: 'Loading your wallet configuration... Please wait a moment.',
@@ -313,16 +528,55 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
313
528
  }]);
314
529
  return false;
315
530
  }
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;
531
+ // If AIT is not loaded but we have a token, try to refresh it once
532
+ if (currentToken && !isAITLoading) {
533
+ try {
534
+ await refreshAIT();
535
+ // Wait for AIT to be loaded with polling
536
+ let attempts = 0;
537
+ const maxAttempts = 10; // Wait up to 5 seconds
538
+ while (!aitRef.current && attempts < maxAttempts) {
539
+ await new Promise(resolve => setTimeout(resolve, 500));
540
+ attempts++;
541
+ }
542
+ // Check again after refresh
543
+ if (!aitRef.current) {
544
+ setIsLoading(false); // Stop thinking before showing message
545
+ setMessages(prev => [...prev, {
546
+ id: Date.now().toString(),
547
+ content: 'No AIT found for your wallet. Please click the settings button (⚙️) to configure your AIT permissions.',
548
+ role: 'assistant',
549
+ timestamp: new Date().toISOString()
550
+ }]);
551
+ return false;
552
+ }
553
+ }
554
+ catch (error) {
555
+ console.error('Failed to refresh AIT during permission check:', error);
556
+ setIsLoading(false); // Stop thinking before showing message
557
+ setMessages(prev => [...prev, {
558
+ id: Date.now().toString(),
559
+ content: 'No AIT found for your wallet. Please click the settings button (⚙️) to configure your AIT permissions.',
560
+ role: 'assistant',
561
+ timestamp: new Date().toISOString()
562
+ }]);
563
+ return false;
564
+ }
565
+ }
566
+ else {
567
+ setIsLoading(false); // Stop thinking before showing message
568
+ setMessages(prev => [...prev, {
569
+ id: Date.now().toString(),
570
+ content: 'No AIT found for your wallet. Please click the settings button (⚙️) to configure your AIT permissions.',
571
+ role: 'assistant',
572
+ timestamp: new Date().toISOString()
573
+ }]);
574
+ return false;
575
+ }
323
576
  }
324
577
  const availablePermissionLabels = availablePermissions.map(p => p.label);
325
578
  if (availablePermissions.length === 0) {
579
+ setIsLoading(false); // Stop thinking before showing message
326
580
  setMessages(prev => [...prev, {
327
581
  id: Date.now().toString(),
328
582
  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 +586,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
332
586
  return false;
333
587
  }
334
588
  if (!availablePermissionLabels.includes(toolName)) {
589
+ setIsLoading(false); // Stop thinking before showing message
335
590
  setMessages(prev => [...prev, {
336
591
  id: Date.now().toString(),
337
592
  content: `This tool (${toolName}) is not available for your current identity provider.`,
@@ -340,12 +595,43 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
340
595
  }]);
341
596
  return false;
342
597
  }
343
- if (!permissions.includes(toolName)) {
598
+ if (!currentPermissions.includes(toolName)) {
599
+ // Check if AIT is still loading or if we just auto-connected
600
+ if (isAITLoading || isAutoConnecting) {
601
+ setIsLoading(false); // Stop thinking before showing message
602
+ setMessages(prev => [...prev, {
603
+ id: Date.now().toString(),
604
+ content: 'Loading your wallet configuration... Please wait a moment.',
605
+ role: 'assistant',
606
+ timestamp: new Date().toISOString()
607
+ }]);
608
+ return false;
609
+ }
610
+ // If AIT is loaded but permissions are empty, it means no AIT was found
611
+ if (currentAit && currentPermissions.length === 0) {
612
+ setIsLoading(false); // Stop thinking before showing message
613
+ setMessages(prev => [...prev, {
614
+ id: Date.now().toString(),
615
+ content: 'No AIT found for your wallet. Please click the settings button (⚙️) to configure your AIT permissions.',
616
+ role: 'assistant',
617
+ timestamp: new Date().toISOString()
618
+ }]);
619
+ return false;
620
+ }
621
+ // Only show permission error if AIT is loaded and permissions are not empty
622
+ setIsLoading(false); // Stop thinking before showing message
344
623
  setMessages(prev => [...prev, {
345
624
  id: Date.now().toString(),
346
- content: `You do not have the required AIT permission: ${toolName}. Please click the settings button (⚙️) to update your permissions.`,
625
+ content: `You don't have the required AIT permission: ${toolName}. Would you like to enable AIT permissions?`,
347
626
  role: 'assistant',
348
- timestamp: new Date().toISOString()
627
+ timestamp: new Date().toISOString(),
628
+ button: 'enableAIT',
629
+ metadata: {
630
+ model: 'gpt-4',
631
+ permissions: currentPermissions,
632
+ issuedBy: currentHitAddress || '',
633
+ toolName: toolName
634
+ }
349
635
  }]);
350
636
  return false;
351
637
  }
@@ -361,27 +647,32 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
361
647
  return availableModels[selectedModelIndex];
362
648
  }, [availableModels, selectedModelIndex]);
363
649
  // Updated sendMessage function to support different AI models
364
- const sendMessage = async (content, retryCount = 0) => {
650
+ const sendMessage = async (content, retryCount = 0, isPresetMessage = false) => {
365
651
  if (!content.trim() || isLoading)
366
652
  return;
367
653
  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('');
654
+ // Only add user message on first attempt, not on retries
655
+ // Also check if this is not a preset message (preset messages are added separately)
656
+ if (retryCount === 0 && !isPresetMessage) {
657
+ const userMessage = {
658
+ id: Date.now().toString(),
659
+ content,
660
+ role: 'user',
661
+ timestamp: new Date().toISOString(),
662
+ metadata: {
663
+ model: currentModel.value,
664
+ permissions: permissions,
665
+ issuedBy: hitAddress || ''
666
+ }
667
+ };
668
+ setMessages(prev => [...prev, userMessage]);
669
+ setInputValue('');
670
+ }
381
671
  setIsLoading(true);
382
672
  try {
383
- // Build context messages
384
- const contextMessages = messages.map(msg => ({
673
+ // Build context messages (filter out wallet connection messages)
674
+ const filteredMessages = getFilteredMessagesForAPI();
675
+ const contextMessages = filteredMessages.map(msg => ({
385
676
  role: msg.role,
386
677
  text: msg.content
387
678
  }));
@@ -400,8 +691,37 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
400
691
  // Handle tool calls
401
692
  const toolUse = response.toolCall.toolUse;
402
693
  if (onToolUse) {
403
- const isToolAllowed = await hasPermission(toolUse.name);
694
+ let wasAutoConnected = false;
695
+ const isToolAllowed = await hasPermission(toolUse.name, true, () => {
696
+ wasAutoConnected = true;
697
+ });
404
698
  if (!isToolAllowed) {
699
+ // If we just auto-connected, retry the message once
700
+ if (wasAutoConnected && retryCount < 1) {
701
+ console.log('Auto-connected, retrying message...');
702
+ // Clear loading state and retry immediately
703
+ setIsLoading(false);
704
+ // Use a longer delay to ensure AIT is fully loaded
705
+ setTimeout(async () => {
706
+ // Wait for AIT to be loaded if needed
707
+ if (!aitRef.current && nxtlinqAITServiceAccessTokenRef.current) {
708
+ await refreshAIT();
709
+ // Wait for AIT to be fully loaded with polling
710
+ let attempts = 0;
711
+ const maxAttempts = 20; // Wait up to 10 seconds
712
+ while (!aitRef.current && attempts < maxAttempts) {
713
+ await new Promise(resolve => setTimeout(resolve, 500));
714
+ attempts++;
715
+ }
716
+ }
717
+ // Wait a bit more to ensure permissions are also loaded
718
+ await new Promise(resolve => setTimeout(resolve, 1000));
719
+ sendMessage(content, retryCount + 1, isPresetMessage);
720
+ }, 1000);
721
+ }
722
+ else {
723
+ console.log('Permission denied, not retrying. wasAutoConnected:', wasAutoConnected, 'retryCount:', retryCount);
724
+ }
405
725
  return;
406
726
  }
407
727
  const toolResult = await onToolUse(toolUse);
@@ -486,8 +806,24 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
486
806
  catch (error) {
487
807
  console.error('Failed to send message:', error);
488
808
  if (retryCount < maxRetries) {
809
+ // Show retry indicator to user
810
+ const retryMessage = {
811
+ id: `retry-${Date.now()}-${retryCount}`,
812
+ content: `Retrying... (Attempt ${retryCount + 1}/${maxRetries})`,
813
+ role: 'assistant',
814
+ timestamp: new Date().toISOString(),
815
+ metadata: {
816
+ model: currentModel.value,
817
+ permissions: permissions,
818
+ issuedBy: hitAddress || '',
819
+ isRetry: true
820
+ }
821
+ };
822
+ setMessages(prev => [...prev, retryMessage]);
489
823
  setTimeout(() => {
490
- sendMessage(content, retryCount + 1);
824
+ // Remove retry message before next attempt
825
+ setMessages(prev => prev.filter(msg => msg.id !== retryMessage.id));
826
+ sendMessage(content, retryCount + 1, isPresetMessage);
491
827
  }, retryDelay);
492
828
  return;
493
829
  }
@@ -552,12 +888,12 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
552
888
  };
553
889
  // Handle preset message
554
890
  const handlePresetMessage = (message) => {
555
- // Show loading message if AIT is still loading
556
- if (isAITLoading) {
557
- const loadingMessage = {
891
+ if (message.autoSend) {
892
+ // For preset messages, we need to add the user message first since sendMessage won't add it on retries
893
+ const userMessage = {
558
894
  id: Date.now().toString(),
559
- content: 'Loading your wallet configuration... Please wait a moment.',
560
- role: 'assistant',
895
+ content: message.text,
896
+ role: 'user',
561
897
  timestamp: new Date().toISOString(),
562
898
  metadata: {
563
899
  model: getCurrentModel().value,
@@ -565,22 +901,9 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
565
901
  issuedBy: hitAddress || ''
566
902
  }
567
903
  };
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);
904
+ setMessages(prev => [...prev, userMessage]);
905
+ // Pass a flag to indicate this is a preset message so sendMessage won't add user message again
906
+ sendMessage(message.text, 0, true);
584
907
  }
585
908
  else {
586
909
  setInputValue(message.text);
@@ -625,6 +948,41 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
625
948
  setAit(aitInfo);
626
949
  setPermissions(permissions);
627
950
  };
951
+ // Auto enable AIT permissions
952
+ const autoEnableAIT = async (toolName) => {
953
+ if (!signer || !hitAddress) {
954
+ showError('Please connect your wallet first');
955
+ return false;
956
+ }
957
+ try {
958
+ // Get available permissions to find the tool
959
+ const availablePermissionLabels = availablePermissions.map(p => p.label);
960
+ if (!availablePermissionLabels.includes(toolName)) {
961
+ showError(`Tool ${toolName} is not available for your current identity provider`);
962
+ return false;
963
+ }
964
+ // Add the required permission to current permissions
965
+ const newPermissions = [...permissions];
966
+ if (!newPermissions.includes(toolName)) {
967
+ newPermissions.push(toolName);
968
+ }
969
+ // Generate and register AIT with new permissions
970
+ await generateAndRegisterAIT(newPermissions);
971
+ showSuccess('AIT permissions enabled successfully! You can now use the AI agent.');
972
+ await refreshAIT(true);
973
+ return true;
974
+ }
975
+ catch (error) {
976
+ console.error('Failed to auto-enable AIT:', error);
977
+ if (error instanceof Error) {
978
+ showError(error.message);
979
+ }
980
+ else {
981
+ showError('Failed to enable AIT permissions. Please try again.');
982
+ }
983
+ return false;
984
+ }
985
+ };
628
986
  // Save permissions
629
987
  const savePermissions = async (newPermissions) => {
630
988
  setIsDisabled(true);
@@ -811,6 +1169,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
811
1169
  isDisabled,
812
1170
  walletInfo,
813
1171
  isWalletLoading,
1172
+ isAutoConnecting,
814
1173
  notification,
815
1174
  // AI Model related state
816
1175
  availableModels,
@@ -835,6 +1194,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
835
1194
  handleSubmit,
836
1195
  handlePresetMessage,
837
1196
  savePermissions,
1197
+ autoEnableAIT,
838
1198
  handleVerifyWalletClick,
839
1199
  showSuccess,
840
1200
  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',
@@ -1 +1 @@
1
- {"version":3,"file":"PermissionForm.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PermissionForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAifxD,CAAC"}
1
+ {"version":3,"file":"PermissionForm.d.ts","sourceRoot":"","sources":["../../../src/components/ui/PermissionForm.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAkgBxD,CAAC"}
@@ -2,7 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
2
2
  import * as React from 'react';
3
3
  import { useChatBot } from '../context/ChatBotContext';
4
4
  export const PermissionForm = ({ onClose, onOpen }) => {
5
- const { hitAddress, permissions, setPermissions, setIsDisabled, onSave, onConnectWallet, onSignIn, isNeedSignInWithWallet, walletInfo, onVerifyWallet, serviceId, nxtlinqApi, permissionGroup, isAITLoading, isWalletLoading = false } = useChatBot();
5
+ const { hitAddress, permissions, setPermissions, setIsDisabled, onSave, onConnectWallet, onSignIn, isNeedSignInWithWallet, walletInfo, onVerifyWallet, serviceId, nxtlinqApi, permissionGroup, isAITLoading, isWalletLoading = false, refreshAIT } = useChatBot();
6
6
  const [availablePermissions, setAvailablePermissions] = React.useState([]);
7
7
  const [isSaving, setIsSaving] = React.useState(false);
8
8
  const [tempPermissions, setTempPermissions] = React.useState(permissions);
@@ -31,6 +31,22 @@ export const PermissionForm = ({ onClose, onOpen }) => {
31
31
  React.useEffect(() => {
32
32
  fetchAvailablePermissions();
33
33
  }, [serviceId, nxtlinqApi, permissionGroup]);
34
+ // Refresh wallet info when component mounts or when hitAddress changes
35
+ React.useEffect(() => {
36
+ if (hitAddress) {
37
+ // Trigger a refresh of AIT and wallet info when the form opens
38
+ const refreshWalletInfo = async () => {
39
+ try {
40
+ // This will trigger refreshAIT which includes wallet info fetch
41
+ await refreshAIT();
42
+ }
43
+ catch (error) {
44
+ console.error('Failed to refresh wallet info:', error);
45
+ }
46
+ };
47
+ refreshWalletInfo();
48
+ }
49
+ }, [hitAddress]);
34
50
  const isWalletVerified = Boolean(walletInfo?.id);
35
51
  const handleSave = async () => {
36
52
  setIsSaving(true);
@@ -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.7",
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",