@bytexbyte/nxtlinq-ai-agent-sdk 1.4.5 → 1.4.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":"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,CAyqDlD,CAAC"}
1
+ {"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../../src/components/context/ChatBotContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAS/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,CAouDlD,CAAC"}
@@ -5,6 +5,7 @@ import * as React from 'react';
5
5
  import { v4 as uuidv4 } from 'uuid';
6
6
  import { createNxtlinqApi } from '../../api/nxtlinq-api';
7
7
  import useLocalStorage from '../../core/lib/useLocalStorage';
8
+ import useSessionStorage from '../../core/lib/useSessionStorage';
8
9
  import { useSpeechToTextFromMic } from '../../core/lib/useSpeechToTextFromMic';
9
10
  import metakeepClient from '../../core/metakeepClient';
10
11
  import { sleep } from '../../core/utils';
@@ -19,7 +20,9 @@ export const useChatBot = () => {
19
20
  };
20
21
  export const ChatBotProvider = ({ onMessage, onError, onToolUse, presetMessages = [], placeholder = 'Type a message...', className = '', maxRetries = 3, retryDelay = 2000, serviceId, apiKey, apiSecret, onVerifyWallet, permissionGroup, children,
21
22
  // AI Model related attributes
22
- availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector = true, onModelChange }) => {
23
+ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector = true, onModelChange,
24
+ // Storage mode configuration
25
+ useSessionStorage: useSessionStorageMode = false }) => {
23
26
  const nxtlinqApi = React.useMemo(() => createNxtlinqApi(apiKey, apiSecret), [apiKey, apiSecret]);
24
27
  // Custom hook
25
28
  const { isRecording, transcript, start: startRecording, stop: stopRecording } = useSpeechToTextFromMic({
@@ -27,10 +30,16 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
27
30
  apiSecret
28
31
  });
29
32
  // State
30
- const [messages, setMessages] = React.useState([]);
33
+ // Session-level data (always use sessionStorage when useSessionStorageMode is true)
34
+ const [messages, setMessages] = useSessionStorageMode
35
+ ? useSessionStorage('chatbot-messages', [])
36
+ : React.useState([]);
37
+ const [isOpen, setIsOpen] = useSessionStorageMode
38
+ ? useSessionStorage('chatbot-is-open', false)
39
+ : React.useState(false);
40
+ // Non-stored state
31
41
  const [inputValue, setInputValue] = React.useState('');
32
42
  const [isLoading, setIsLoading] = React.useState(false);
33
- const [isOpen, setIsOpen] = React.useState(false);
34
43
  const [hitAddress, setHitAddress] = React.useState(null);
35
44
  const [ait, setAit] = React.useState(null);
36
45
  const [permissions, setPermissions] = React.useState([]);
@@ -44,10 +53,12 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
44
53
  const [isWalletLoading, setIsWalletLoading] = React.useState(false);
45
54
  const [isAutoConnecting, setIsAutoConnecting] = React.useState(false);
46
55
  const [justAutoConnected, setJustAutoConnected] = React.useState(false);
56
+ // Persistent data (always use localStorage)
47
57
  const [nxtlinqAITServiceAccessToken, setNxtlinqAITServiceAccessToken] = useLocalStorage('nxtlinqAITServiceAccessToken', '');
58
+ const [pseudoId, setPseudoId] = useLocalStorage('pseudoId', uuidv4());
59
+ // UI state (not stored)
48
60
  const [suggestions, setSuggestions] = React.useState(presetMessages);
49
61
  const [isAITEnabling, setIsAITEnabling] = React.useState(false);
50
- const [pseudoId, setPseudoId] = useLocalStorage('pseudoId', uuidv4());
51
62
  // Use refs to get latest state values in hasPermission function
52
63
  const hitAddressRef = React.useRef(hitAddress);
53
64
  const aitRef = React.useRef(ait);
@@ -254,6 +265,9 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
254
265
  localStorage.setItem('walletAddress', userAddress);
255
266
  setHitAddress(userAddress);
256
267
  setSigner(userSigner);
268
+ // Immediately update refs to ensure they're available for subsequent operations
269
+ hitAddressRef.current = userAddress;
270
+ signerRef.current = userSigner;
257
271
  // Check if we have a valid token before trying to load AIT
258
272
  if (nxtlinqAITServiceAccessToken) {
259
273
  try {
@@ -882,36 +896,22 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
882
896
  }
883
897
  }
884
898
  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
- }
899
+ // Case where permission update is required - show manual enable option
900
+ console.log('API requires permission update, showing manual enable option...');
901
+ setIsLoading(false);
902
+ setMessages(prev => [...prev, {
903
+ id: Date.now().toString(),
904
+ content: errorResponse.message,
905
+ role: 'assistant',
906
+ timestamp: new Date().toISOString(),
907
+ button: 'enableAIT',
908
+ metadata: {
909
+ requiresPermissionUpdate: true,
910
+ toolName: errorResponse.toolName,
911
+ requiredPermission: errorResponse.requiredPermission
912
+ }
913
+ }]);
914
+ return;
915
915
  }
916
916
  else {
917
917
  // Other errors
@@ -1181,16 +1181,25 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
1181
1181
  if (!signer || !hitAddress) {
1182
1182
  throw new Error('Missing signer or wallet address');
1183
1183
  }
1184
+ return generateAndRegisterAITWithSigner(newPermissions, isFromAIAgent, signer, hitAddress);
1185
+ };
1186
+ // Generate and register AIT with explicit signer and address
1187
+ const generateAndRegisterAITWithSigner = async (newPermissions, isFromAIAgent = false, explicitSigner, explicitAddress) => {
1188
+ const currentSigner = explicitSigner || signer;
1189
+ const currentAddress = explicitAddress || hitAddress;
1190
+ if (!currentSigner || !currentAddress) {
1191
+ throw new Error('Missing signer or wallet address');
1192
+ }
1184
1193
  // If AI Agent is creating, must check if user has existing AIT
1185
- if (isFromAIAgent && !ait) {
1194
+ if (isFromAIAgent && !aitRef.current) {
1186
1195
  throw new Error('You must have an existing AIT before AI Agent can create new AITs');
1187
1196
  }
1188
1197
  const timestamp = Math.floor(Date.now() / 1000);
1189
- const aitId = `did:polygon:nxtlinq:${hitAddress}:${timestamp}`;
1198
+ const aitId = `did:polygon:nxtlinq:${currentAddress}:${timestamp}`;
1190
1199
  const metadata = {
1191
1200
  model: 'gpt-4',
1192
1201
  permissions: newPermissions || permissions,
1193
- issuedBy: hitAddress,
1202
+ issuedBy: currentAddress,
1194
1203
  };
1195
1204
  const metadataStr = stringify(metadata);
1196
1205
  const metadataHash = ethers.utils.keccak256(ethers.utils.toUtf8Bytes(metadataStr));
@@ -1201,12 +1210,12 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
1201
1210
  const { metadataCid } = uploadResponse;
1202
1211
  const createAITParams = {
1203
1212
  aitId,
1204
- controller: hitAddress,
1213
+ controller: currentAddress,
1205
1214
  serviceId,
1206
1215
  metadataHash,
1207
1216
  metadataCid,
1208
1217
  isFromAIAgent: isFromAIAgent,
1209
- parentAITId: isFromAIAgent ? ait?.aitId : undefined,
1218
+ parentAITId: isFromAIAgent ? aitRef.current?.aitId : undefined,
1210
1219
  };
1211
1220
  console.log('createAIT params:', createAITParams);
1212
1221
  const createAITResponse = await nxtlinqApi.ait.createAIT(createAITParams, nxtlinqAITServiceAccessToken || '');
@@ -1215,7 +1224,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
1215
1224
  }
1216
1225
  const aitInfo = {
1217
1226
  aitId,
1218
- controller: hitAddress,
1227
+ controller: currentAddress,
1219
1228
  metadata,
1220
1229
  metadataHash,
1221
1230
  metadataCid,
@@ -1224,23 +1233,30 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
1224
1233
  setPermissions(permissions);
1225
1234
  };
1226
1235
  // Auto enable AIT permission
1227
- const autoEnableAIT = async (toolName) => {
1236
+ const enableAIT = async (toolName) => {
1228
1237
  if (isAITEnabling)
1229
1238
  return false; // Prevent duplicate
1230
1239
  setIsAITEnabling(true);
1231
- console.log('autoEnableAIT called with toolName:', toolName, 'isFromAIAgent will be set to true');
1240
+ console.log('enableAIT called with toolName:', toolName, 'existing AIT:', !!aitRef.current);
1241
+ let currentSigner = signer;
1242
+ let currentHitAddress = hitAddress;
1232
1243
  // If no wallet connected, try to auto-connect first
1233
- if (!signer || !hitAddress) {
1244
+ if (!currentSigner || !currentHitAddress) {
1234
1245
  console.log('No wallet connected, attempting auto-connect...');
1235
1246
  const autoConnectResult = await connectWallet(false); // Don't show sign-in message yet
1236
1247
  if (autoConnectResult) {
1237
1248
  console.log('Auto-connect successful, waiting for state update...');
1238
1249
  // Wait for state to update - increase wait time
1239
- await new Promise(resolve => setTimeout(resolve, 1000));
1250
+ await new Promise(resolve => setTimeout(resolve, 1500));
1251
+ // Get the latest state values after connection
1252
+ currentSigner = signerRef.current || signer;
1253
+ currentHitAddress = hitAddressRef.current || hitAddress;
1240
1254
  // Double check that we have the required state
1241
- if (!signer || !hitAddress) {
1255
+ if (!currentSigner || !currentHitAddress) {
1242
1256
  console.log('State not updated yet, waiting more...');
1243
- await new Promise(resolve => setTimeout(resolve, 1000));
1257
+ await new Promise(resolve => setTimeout(resolve, 1500));
1258
+ currentSigner = signerRef.current || signer;
1259
+ currentHitAddress = hitAddressRef.current || hitAddress;
1244
1260
  }
1245
1261
  console.log('Trying to sign in...');
1246
1262
  try {
@@ -1261,6 +1277,32 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
1261
1277
  return false;
1262
1278
  }
1263
1279
  }
1280
+ // Final check before proceeding
1281
+ if (!currentSigner || !currentHitAddress) {
1282
+ console.error('Missing signer or wallet address after connection process');
1283
+ console.error('Current signer:', !!currentSigner);
1284
+ console.error('Current hitAddress:', currentHitAddress);
1285
+ console.error('Signer ref:', !!signerRef.current);
1286
+ console.error('HitAddress ref:', hitAddressRef.current);
1287
+ showError('Wallet connection failed. Please try connecting your wallet manually.');
1288
+ setIsAITEnabling(false);
1289
+ return false;
1290
+ }
1291
+ console.log('Proceeding with AIT creation - Signer:', !!currentSigner, 'Address:', currentHitAddress);
1292
+ // If we don't have AIT loaded but we have a token, try to refresh it first
1293
+ if (!aitRef.current && nxtlinqAITServiceAccessToken) {
1294
+ console.log('No AIT loaded but have token, attempting to refresh AIT...');
1295
+ try {
1296
+ await refreshAIT();
1297
+ // Wait a bit for AIT to be loaded
1298
+ await new Promise(resolve => setTimeout(resolve, 1000));
1299
+ console.log('AIT refresh completed, current AIT:', !!aitRef.current);
1300
+ }
1301
+ catch (error) {
1302
+ console.log('Failed to refresh AIT:', error);
1303
+ // Continue anyway, we'll create a new AIT if needed
1304
+ }
1305
+ }
1264
1306
  try {
1265
1307
  // Get available permissions to find the tool
1266
1308
  const availablePermissionLabels = availablePermissions.map(p => p.label);
@@ -1274,8 +1316,11 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
1274
1316
  if (!newPermissions.includes(toolName)) {
1275
1317
  newPermissions.push(toolName);
1276
1318
  }
1277
- // Generate and register AIT with new permissions (AI Agent creation)
1278
- await generateAndRegisterAIT(newPermissions, true);
1319
+ // Generate and register AIT with new permissions
1320
+ // For auto-enable, we should create a regular AIT (not AI Agent AIT) if user doesn't have existing AIT
1321
+ const shouldCreateAsAIAgent = !!aitRef.current; // Only create as AI Agent if user already has an AIT
1322
+ console.log('Creating AIT - isFromAIAgent:', shouldCreateAsAIAgent, 'existing AIT:', !!aitRef.current);
1323
+ await generateAndRegisterAITWithSigner(newPermissions, shouldCreateAsAIAgent, currentSigner, currentHitAddress);
1279
1324
  showSuccess('AIT permission enabled successfully! You can now use the AI agent.');
1280
1325
  await refreshAIT(true);
1281
1326
  setIsAITEnabling(false);
@@ -1536,7 +1581,7 @@ availableModels = DEFAULT_AI_MODELS, defaultModelIndex = 0, showModelSelector =
1536
1581
  handleSubmit,
1537
1582
  handlePresetMessage,
1538
1583
  savePermissions,
1539
- autoEnableAIT,
1584
+ enableAIT,
1540
1585
  handleVerifyWalletClick,
1541
1586
  showSuccess,
1542
1587
  showError,
@@ -53,6 +53,7 @@ export interface ChatBotProps {
53
53
  defaultModelIndex?: number;
54
54
  showModelSelector?: boolean;
55
55
  onModelChange?: (model: AIModel) => void;
56
+ useSessionStorage?: boolean;
56
57
  }
57
58
  export interface ChatBotContextType {
58
59
  messages: Message[];
@@ -102,7 +103,7 @@ export interface ChatBotContextType {
102
103
  handleSubmit: (e: React.FormEvent) => Promise<void>;
103
104
  handlePresetMessage: (message: PresetMessage) => void;
104
105
  savePermissions: (newPermissions?: string[]) => Promise<void>;
105
- autoEnableAIT: (toolName: string) => Promise<boolean>;
106
+ enableAIT: (toolName: string) => Promise<boolean>;
106
107
  handleVerifyWalletClick: () => Promise<void>;
107
108
  showSuccess: (message: string) => void;
108
109
  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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"}
@@ -12,7 +12,15 @@ export const ALL_AVAILABLE_MODELS = [
12
12
  { label: 'Gemini', value: 'gemini' },
13
13
  { label: 'Nova', value: 'nova' },
14
14
  { label: 'ChatGPT-v1.1', value: 'v1.1/open-ai' },
15
+ { label: 'Claude-v1.1', value: 'v1.1/claude' },
16
+ { label: 'Llama-v1.1', value: 'v1.1/llama' },
17
+ { label: 'Gemini-v1.1', value: 'v1.1/gemini' },
18
+ { label: 'Nova-v1.1', value: 'v1.1/nova' },
15
19
  { label: 'ChatGPT-v1.2', value: 'v1.2/open-ai' },
20
+ { label: 'Claude-v1.2', value: 'v1.2/claude' },
21
+ { label: 'Llama-v1.2', value: 'v1.2/llama' },
22
+ { label: 'Gemini-v1.2', value: 'v1.2/gemini' },
23
+ { label: 'Nova-v1.2', value: 'v1.2/nova' },
16
24
  { label: "Claude-v2", value: "v2/claude" },
17
25
  { label: "ChatGPT-v2", value: "v2/open-ai" },
18
26
  { label: "Llama-v2", value: "v2/llama" },
@@ -26,7 +34,15 @@ export const AI_MODEL_MAP = {
26
34
  gemini: 'Gemini',
27
35
  nova: 'Nova',
28
36
  'v1.1/open-ai': 'ChatGPT-v1.1',
37
+ 'v1.1/claude': 'Claude-v1.1',
38
+ 'v1.1/llama': 'Llama-v1.1',
39
+ 'v1.1/gemini': 'Gemini-v1.1',
40
+ 'v1.1/nova': 'Nova-v1.1',
29
41
  'v1.2/open-ai': 'ChatGPT-v1.2',
42
+ 'v1.2/claude': 'Claude-v1.2',
43
+ 'v1.2/llama': 'Llama-v1.2',
44
+ 'v1.2/gemini': 'Gemini-v1.2',
45
+ 'v1.2/nova': 'Nova-v1.2',
30
46
  'v2/claude': 'Claude-v2',
31
47
  'v2/open-ai': 'ChatGPT-v2',
32
48
  '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;AAM/B,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAmL/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;AAM/B,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EA+L/B,CAAC"}
@@ -4,7 +4,7 @@ import { useChatBot } from '../context/ChatBotContext';
4
4
  import { AI_MODEL_MAP } from '../types/ChatBotTypes';
5
5
  import { convertUrlsToLinks } from '../../core/utils/urlUtils';
6
6
  export const MessageList = () => {
7
- const { messages, isLoading, connectWallet, signInWallet, hitAddress, ait, setShowPermissionForm, isWalletLoading, isAutoConnecting, isNeedSignInWithWallet, autoEnableAIT, isAITLoading, isAITEnabling, sendMessage } = useChatBot();
7
+ const { messages, isLoading, connectWallet, signInWallet, hitAddress, ait, setShowPermissionForm, isWalletLoading, isAutoConnecting, isNeedSignInWithWallet, enableAIT, isAITLoading, isAITEnabling, sendMessage, permissions } = useChatBot();
8
8
  const messagesEndRef = React.useRef(null);
9
9
  const scrollToBottom = () => {
10
10
  messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
@@ -22,7 +22,7 @@ export const MessageList = () => {
22
22
  else if (buttonType === 'enableAIT') {
23
23
  const toolName = message.metadata?.toolName;
24
24
  if (toolName) {
25
- const success = await autoEnableAIT(toolName);
25
+ const success = await enableAIT(toolName);
26
26
  if (success) {
27
27
  // Find the last user message
28
28
  const lastUserMsg = [...messages].reverse().find(m => m.role === 'user');
@@ -60,32 +60,44 @@ export const MessageList = () => {
60
60
  wordWrap: 'break-word',
61
61
  position: 'relative',
62
62
  border: message.metadata?.isRetry ? '1px solid #ffeaa7' : 'none'
63
- }, children: [message.metadata?.isRetry && (_jsx("span", { style: { marginRight: '8px', fontSize: '14px' }, children: "\uD83D\uDD04" })), convertUrlsToLinks(message.content), message.button && (_jsx("div", { style: { marginTop: '10px' }, children: _jsx("button", { onClick: () => handleButtonClick(message.button, message), disabled: isAutoConnecting ||
63
+ }, children: [message.metadata?.isRetry && (_jsx("span", { style: { marginRight: '8px', fontSize: '14px' }, children: "\uD83D\uDD04" })), message.role === 'assistant' ? convertUrlsToLinks(message.content) : message.content, message.button && (_jsx("div", { style: { marginTop: '10px' }, children: _jsx("button", { onClick: () => {
64
+ if (message.button && message.button.trim()) {
65
+ handleButtonClick(message.button, message);
66
+ }
67
+ }, disabled: isAutoConnecting ||
64
68
  (message.button === 'connectWallet' && Boolean(hitAddress)) ||
65
69
  (message.button === 'signIn' && !isNeedSignInWithWallet) ||
66
- (message.button === 'enableAIT' && (isAITLoading || isAITEnabling)), style: {
70
+ (message.button === 'enableAIT' && (isAITLoading || isAITEnabling ||
71
+ (message.metadata?.toolName && permissions.includes(message.metadata.toolName)))) || false, style: {
67
72
  padding: '8px 16px',
68
73
  backgroundColor: message.role === 'user' ? 'rgba(255, 255, 255, 0.2)' :
69
74
  isAutoConnecting ? '#6c757d' :
70
75
  (message.button === 'connectWallet' && Boolean(hitAddress)) ? '#28a745' :
71
76
  (message.button === 'signIn' && !isNeedSignInWithWallet) ? '#28a745' :
72
- (message.button === 'enableAIT' && (isAITLoading || isAITEnabling)) ? '#6c757d' : '#007bff',
77
+ (message.button === 'enableAIT' && (isAITLoading || isAITEnabling ||
78
+ (message.metadata?.toolName && permissions.includes(message.metadata.toolName)))) ?
79
+ ((message.metadata?.toolName && permissions.includes(message.metadata.toolName)) ? '#28a745' : '#6c757d') : '#007bff',
73
80
  color: message.role === 'user' ? 'white' : 'white',
74
81
  border: 'none',
75
82
  borderRadius: '5px',
76
83
  cursor: (isAutoConnecting ||
77
84
  (message.button === 'connectWallet' && Boolean(hitAddress)) ||
78
85
  (message.button === 'signIn' && !isNeedSignInWithWallet) ||
79
- (message.button === 'enableAIT' && (isAITLoading || isAITEnabling))) ? 'not-allowed' : 'pointer',
86
+ (message.button === 'enableAIT' && (isAITLoading || isAITEnabling ||
87
+ (message.metadata?.toolName && permissions.includes(message.metadata.toolName))))) ? 'not-allowed' : 'pointer',
80
88
  fontSize: '14px',
81
89
  opacity: (isAutoConnecting ||
82
90
  (message.button === 'connectWallet' && Boolean(hitAddress)) ||
83
91
  (message.button === 'signIn' && !isNeedSignInWithWallet) ||
84
- (message.button === 'enableAIT' && (isAITLoading || isAITEnabling))) ? 0.8 : 1
92
+ (message.button === 'enableAIT' && (isAITLoading || isAITEnabling ||
93
+ (message.metadata?.toolName && permissions.includes(message.metadata.toolName))))) ? 0.8 : 1
85
94
  }, children: isAutoConnecting ? 'Connecting...' :
86
95
  message.button === 'connectWallet' ? (Boolean(hitAddress) ? 'Connected' : 'Connect Wallet') :
87
96
  message.button === 'signIn' ? (!isNeedSignInWithWallet ? 'Signed In' : 'Sign In') :
88
- message.button === 'enableAIT' ? ((isAITLoading || isAITEnabling) ? 'Enabling...' : 'Enable AIT Permissions') : message.button }) }))] }), message.role === 'assistant' && message.metadata?.model && (_jsx("div", { style: {
97
+ message.button === 'enableAIT' ?
98
+ ((isAITLoading || isAITEnabling) ? 'Enabling...' :
99
+ (message.metadata?.toolName && permissions.includes(message.metadata.toolName)) ? 'AIT Enabled' : 'Enable AIT Permissions') :
100
+ message.button }) }))] }), message.role === 'assistant' && message.metadata?.model && (_jsx("div", { style: {
89
101
  display: 'flex',
90
102
  alignItems: 'center',
91
103
  marginTop: '4px',
@@ -0,0 +1,11 @@
1
+ import { Dispatch, SetStateAction } from 'react';
2
+ /**
3
+ * Custom hook for managing sessionStorage with React state
4
+ * Similar to useLocalStorage but uses sessionStorage instead
5
+ *
6
+ * @param key - The key to store the value under in sessionStorage
7
+ * @param defaultValue - The default value to use if no value is stored
8
+ * @returns [storedValue, setStoredValue, isInitialized]
9
+ */
10
+ export default function useSessionStorage<T>(key: string, defaultValue: T): [T, Dispatch<SetStateAction<T>>, boolean];
11
+ //# sourceMappingURL=useSessionStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSessionStorage.d.ts","sourceRoot":"","sources":["../../../src/core/lib/useSessionStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAuB,MAAM,OAAO,CAAC;AAEtE;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,CAAC,EACzC,GAAG,EAAE,MAAM,EACX,YAAY,EAAE,CAAC,GACd,CAAC,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CA6B3C"}
@@ -0,0 +1,37 @@
1
+ import { useEffect, useState } from 'react';
2
+ /**
3
+ * Custom hook for managing sessionStorage with React state
4
+ * Similar to useLocalStorage but uses sessionStorage instead
5
+ *
6
+ * @param key - The key to store the value under in sessionStorage
7
+ * @param defaultValue - The default value to use if no value is stored
8
+ * @returns [storedValue, setStoredValue, isInitialized]
9
+ */
10
+ export default function useSessionStorage(key, defaultValue) {
11
+ const [storedValue, setStoredValue] = useState(defaultValue);
12
+ const [isInitialized, setIsInitialized] = useState(false);
13
+ useEffect(() => {
14
+ try {
15
+ const storageValue = sessionStorage.getItem(key);
16
+ if (storageValue !== null) {
17
+ setStoredValue(JSON.parse(storageValue));
18
+ }
19
+ }
20
+ catch (error) {
21
+ console.warn(`Error reading from sessionStorage key "${key}":`, error);
22
+ // If there's an error, keep the default value
23
+ }
24
+ setIsInitialized(true);
25
+ }, [key]);
26
+ useEffect(() => {
27
+ if (isInitialized) {
28
+ try {
29
+ sessionStorage.setItem(key, JSON.stringify(storedValue));
30
+ }
31
+ catch (error) {
32
+ console.warn(`Error writing to sessionStorage key "${key}":`, error);
33
+ }
34
+ }
35
+ }, [storedValue, isInitialized, key]);
36
+ return [storedValue, setStoredValue, isInitialized];
37
+ }
package/dist/index.d.ts CHANGED
@@ -16,4 +16,5 @@ export { containsUrls, convertUrlsToLinks, convertUrlsToHtml } from './core/util
16
16
  export { createNxtlinqApi } from './api/nxtlinq-api';
17
17
  export type { AIT, AITApi, Message, ServicePermission } from './types/ait-api';
18
18
  export { default as useLocalStorage } from './core/lib/useLocalStorage';
19
+ export { default as useSessionStorage } from './core/lib/useSessionStorage';
19
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAGlF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,YAAY,EAEV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,OAAO,EACR,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,YAAY,EACV,GAAG,EACH,MAAM,EACN,OAAO,EACP,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAGlF,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhE,YAAY,EAEV,OAAO,EACP,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,OAAO,EACR,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,YAAY,EACZ,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGrD,YAAY,EACV,GAAG,EACH,MAAM,EACN,OAAO,EACP,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,8BAA8B,CAAC"}
package/dist/index.js CHANGED
@@ -20,3 +20,4 @@ export { containsUrls, convertUrlsToLinks, convertUrlsToHtml } from './core/util
20
20
  // API client
21
21
  export { createNxtlinqApi } from './api/nxtlinq-api';
22
22
  export { default as useLocalStorage } from './core/lib/useLocalStorage';
23
+ export { default as useSessionStorage } from './core/lib/useSessionStorage';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytexbyte/nxtlinq-ai-agent-sdk",
3
- "version": "1.4.5",
3
+ "version": "1.4.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",
@@ -59,4 +59,4 @@
59
59
  "universal-cookie": "^8.0.1",
60
60
  "uuid": "^11.1.0"
61
61
  }
62
- }
62
+ }