@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.
- package/dist/components/context/ChatBotContext.d.ts.map +1 -1
- package/dist/components/context/ChatBotContext.js +94 -49
- package/dist/components/types/ChatBotTypes.d.ts +2 -1
- package/dist/components/types/ChatBotTypes.d.ts.map +1 -1
- package/dist/components/types/ChatBotTypes.js +16 -0
- package/dist/components/ui/MessageList.d.ts.map +1 -1
- package/dist/components/ui/MessageList.js +20 -8
- package/dist/core/lib/useSessionStorage.d.ts +11 -0
- package/dist/core/lib/useSessionStorage.d.ts.map +1 -0
- package/dist/core/lib/useSessionStorage.js +37 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/package.json +2 -2
- package/umd/nxtlinq-ai-agent.umd.js +3 -3
- package/dist/core/utils/__tests__/urlUtils.test.d.ts +0 -5
- package/dist/core/utils/__tests__/urlUtils.test.d.ts.map +0 -1
- package/dist/core/utils/__tests__/urlUtils.test.js +0 -57
- package/dist/setupTests.d.ts +0 -2
- package/dist/setupTests.d.ts.map +0 -1
- package/dist/setupTests.js +0 -16
|
@@ -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;
|
|
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
|
-
|
|
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 -
|
|
886
|
-
console.log('API requires permission update,
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
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 && !
|
|
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:${
|
|
1198
|
+
const aitId = `did:polygon:nxtlinq:${currentAddress}:${timestamp}`;
|
|
1190
1199
|
const metadata = {
|
|
1191
1200
|
model: 'gpt-4',
|
|
1192
1201
|
permissions: newPermissions || permissions,
|
|
1193
|
-
issuedBy:
|
|
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:
|
|
1213
|
+
controller: currentAddress,
|
|
1205
1214
|
serviceId,
|
|
1206
1215
|
metadataHash,
|
|
1207
1216
|
metadataCid,
|
|
1208
1217
|
isFromAIAgent: isFromAIAgent,
|
|
1209
|
-
parentAITId: isFromAIAgent ?
|
|
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:
|
|
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
|
|
1236
|
+
const enableAIT = async (toolName) => {
|
|
1228
1237
|
if (isAITEnabling)
|
|
1229
1238
|
return false; // Prevent duplicate
|
|
1230
1239
|
setIsAITEnabling(true);
|
|
1231
|
-
console.log('
|
|
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 (!
|
|
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,
|
|
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 (!
|
|
1255
|
+
if (!currentSigner || !currentHitAddress) {
|
|
1242
1256
|
console.log('State not updated yet, waiting more...');
|
|
1243
|
-
await new Promise(resolve => setTimeout(resolve,
|
|
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
|
|
1278
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,iBAAiB,EAAE,OAAO,EAKtC,CAAC;AAGF,eAAO,MAAM,oBAAoB,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../../src/components/types/ChatBotTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,
|
|
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,
|
|
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
|
|
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: () =>
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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' ?
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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.
|
|
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
|
+
}
|