@bytexbyte/nxtlinq-ai-agent-ui-react-development 0.3.4 → 0.4.1
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/context/ChatBotContext.d.ts.map +1 -1
- package/dist/context/ChatBotContext.js +19 -17
- package/dist/types/ChatBotTypes.d.ts +0 -5
- package/dist/types/ChatBotTypes.d.ts.map +1 -1
- package/dist/ui/ChatBotHeader.d.ts.map +1 -1
- package/dist/ui/ChatBotHeader.js +6 -2
- package/dist/ui/ChatBotUI.d.ts.map +1 -1
- package/dist/ui/ChatBotUI.js +8 -1
- package/dist/ui/styles/isolatedStyles.d.ts.map +1 -1
- package/dist/ui/styles/isolatedStyles.js +1 -0
- package/package.json +3 -3
- package/src/context/ChatBotContext.tsx +20 -17
- package/src/types/ChatBotTypes.ts +2 -6
- package/src/ui/ChatBotHeader.tsx +9 -3
- package/src/ui/ChatBotUI.tsx +8 -1
- package/src/ui/styles/isolatedStyles.ts +1 -0
- package/dist/NxtlinqAgentChat.d.ts +0 -26
- package/dist/NxtlinqAgentChat.d.ts.map +0 -1
- package/dist/NxtlinqAgentChat.js +0 -28
- package/dist/components/AgentAssistantShell.d.ts +0 -5
- package/dist/components/AgentAssistantShell.d.ts.map +0 -1
- package/dist/components/AgentAssistantShell.js +0 -52
- package/dist/components/AgentComposer.d.ts +0 -3
- package/dist/components/AgentComposer.d.ts.map +0 -1
- package/dist/components/AgentComposer.js +0 -60
- package/dist/components/AgentMessageList.d.ts +0 -3
- package/dist/components/AgentMessageList.d.ts.map +0 -1
- package/dist/components/AgentMessageList.js +0 -37
- package/dist/components/AgentRemoteAudio.d.ts +0 -4
- package/dist/components/AgentRemoteAudio.d.ts.map +0 -1
- package/dist/components/AgentRemoteAudio.js +0 -34
- package/dist/components/AgentVoiceBar.d.ts +0 -3
- package/dist/components/AgentVoiceBar.d.ts.map +0 -1
- package/dist/components/AgentVoiceBar.js +0 -91
- package/dist/components/PresetMessageChips.d.ts +0 -3
- package/dist/components/PresetMessageChips.d.ts.map +0 -1
- package/dist/components/PresetMessageChips.js +0 -23
- package/dist/context/AgentAssistantContext.d.ts +0 -32
- package/dist/context/AgentAssistantContext.d.ts.map +0 -1
- package/dist/context/AgentAssistantContext.js +0 -179
- package/dist/legacy/assets/images/adiSideItalicDataUri.d.ts +0 -2
- package/dist/legacy/assets/images/adiSideItalicDataUri.d.ts.map +0 -1
- package/dist/legacy/assets/images/adiSideItalicDataUri.js +0 -1
- package/dist/legacy/chatbot/ChatBot.d.ts +0 -5
- package/dist/legacy/chatbot/ChatBot.d.ts.map +0 -1
- package/dist/legacy/chatbot/ChatBot.js +0 -35
- package/dist/legacy/chatbot/context/ChatBotContext.d.ts +0 -5
- package/dist/legacy/chatbot/context/ChatBotContext.d.ts.map +0 -1
- package/dist/legacy/chatbot/context/ChatBotContext.js +0 -2922
- package/dist/legacy/chatbot/types/ChatBotTypes.d.ts +0 -166
- package/dist/legacy/chatbot/types/ChatBotTypes.d.ts.map +0 -1
- package/dist/legacy/chatbot/types/ChatBotTypes.js +0 -1
- package/dist/legacy/chatbot/ui/BerifyMeModal.d.ts +0 -17
- package/dist/legacy/chatbot/ui/BerifyMeModal.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/BerifyMeModal.js +0 -110
- package/dist/legacy/chatbot/ui/ChatBotHeader.d.ts +0 -15
- package/dist/legacy/chatbot/ui/ChatBotHeader.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/ChatBotHeader.js +0 -62
- package/dist/legacy/chatbot/ui/ChatBotUI.d.ts +0 -3
- package/dist/legacy/chatbot/ui/ChatBotUI.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/ChatBotUI.js +0 -557
- package/dist/legacy/chatbot/ui/MessageInput.d.ts +0 -3
- package/dist/legacy/chatbot/ui/MessageInput.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/MessageInput.js +0 -321
- package/dist/legacy/chatbot/ui/MessageList.d.ts +0 -4
- package/dist/legacy/chatbot/ui/MessageList.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/MessageList.js +0 -455
- package/dist/legacy/chatbot/ui/ModelSelector.d.ts +0 -4
- package/dist/legacy/chatbot/ui/ModelSelector.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/ModelSelector.js +0 -122
- package/dist/legacy/chatbot/ui/NotificationModal.d.ts +0 -15
- package/dist/legacy/chatbot/ui/NotificationModal.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/NotificationModal.js +0 -53
- package/dist/legacy/chatbot/ui/PermissionForm.d.ts +0 -8
- package/dist/legacy/chatbot/ui/PermissionForm.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/PermissionForm.js +0 -465
- package/dist/legacy/chatbot/ui/PresetMessages.d.ts +0 -4
- package/dist/legacy/chatbot/ui/PresetMessages.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/PresetMessages.js +0 -33
- package/dist/legacy/chatbot/ui/VoiceModePanel.d.ts +0 -3
- package/dist/legacy/chatbot/ui/VoiceModePanel.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/VoiceModePanel.js +0 -95
- package/dist/legacy/chatbot/ui/chatBotHeaderParts.d.ts +0 -15
- package/dist/legacy/chatbot/ui/chatBotHeaderParts.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/chatBotHeaderParts.js +0 -50
- package/dist/legacy/chatbot/ui/styles/isolatedStyles.d.ts +0 -73
- package/dist/legacy/chatbot/ui/styles/isolatedStyles.d.ts.map +0 -1
- package/dist/legacy/chatbot/ui/styles/isolatedStyles.js +0 -985
- package/dist/legacy/index.d.ts +0 -14
- package/dist/legacy/index.d.ts.map +0 -1
- package/dist/legacy/index.js +0 -12
- package/dist/theme/defaultTheme.d.ts +0 -3
- package/dist/theme/defaultTheme.d.ts.map +0 -1
- package/dist/theme/defaultTheme.js +0 -20
- package/dist/types.d.ts +0 -62
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -1
- package/dist/voice/useVoiceConnectOrchestration.d.ts +0 -21
- package/dist/voice/useVoiceConnectOrchestration.d.ts.map +0 -1
- package/dist/voice/useVoiceConnectOrchestration.js +0 -86
- package/dist/voice/useVoiceMicState.d.ts +0 -15
- package/dist/voice/useVoiceMicState.d.ts.map +0 -1
- package/dist/voice/useVoiceMicState.js +0 -94
- package/dist/voice/useVoiceSilenceCommit.d.ts +0 -10
- package/dist/voice/useVoiceSilenceCommit.d.ts.map +0 -1
- package/dist/voice/useVoiceSilenceCommit.js +0 -67
- package/dist/voice/useVoiceTranscriptMessages.d.ts +0 -18
- package/dist/voice/useVoiceTranscriptMessages.d.ts.map +0 -1
- package/dist/voice/useVoiceTranscriptMessages.js +0 -132
- package/dist/voice/useWsRealtimeAudio.d.ts +0 -18
- package/dist/voice/useWsRealtimeAudio.d.ts.map +0 -1
- package/dist/voice/useWsRealtimeAudio.js +0 -102
- package/dist/voice/voiceMicConstants.d.ts +0 -4
- package/dist/voice/voiceMicConstants.d.ts.map +0 -1
- package/dist/voice/voiceMicConstants.js +0 -10
- package/dist/voice/voiceUserBubble.d.ts +0 -10
- package/dist/voice/voiceUserBubble.d.ts.map +0 -1
- package/dist/voice/voiceUserBubble.js +0 -52
- package/dist/voice/ws/BrowserWsPcmPlayer.d.ts +0 -23
- package/dist/voice/ws/BrowserWsPcmPlayer.d.ts.map +0 -1
- package/dist/voice/ws/BrowserWsPcmPlayer.js +0 -137
- package/dist/voice/ws/BrowserWsPcmRecorder.d.ts +0 -17
- package/dist/voice/ws/BrowserWsPcmRecorder.d.ts.map +0 -1
- package/dist/voice/ws/BrowserWsPcmRecorder.js +0 -71
- package/dist/voice/ws/float32ToPcm16.d.ts +0 -2
- package/dist/voice/ws/float32ToPcm16.d.ts.map +0 -1
- package/dist/voice/ws/float32ToPcm16.js +0 -8
- package/dist/voice/ws/voiceSilenceConstants.d.ts +0 -5
- package/dist/voice/ws/voiceSilenceConstants.d.ts.map +0 -1
- package/dist/voice/ws/voiceSilenceConstants.js +0 -4
- package/dist/voice/ws/wsRealtimeConstants.d.ts +0 -2
- package/dist/voice/ws/wsRealtimeConstants.d.ts.map +0 -1
- package/dist/voice/ws/wsRealtimeConstants.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatBotContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAyB/B,OAAO,EAEL,kBAAkB,EAClB,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAM/B,eAAO,MAAM,UAAU,0BAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,
|
|
1
|
+
{"version":3,"file":"ChatBotContext.d.ts","sourceRoot":"","sources":["../../src/context/ChatBotContext.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAyB/B,OAAO,EAEL,kBAAkB,EAClB,YAAY,EAEb,MAAM,uBAAuB,CAAC;AAM/B,eAAO,MAAM,UAAU,0BAMtB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,YAAY,CA+vGlD,CAAC"}
|
|
@@ -30,9 +30,7 @@ idvBannerDismissSeconds = 86400,
|
|
|
30
30
|
// 24 hours in seconds
|
|
31
31
|
isStopRecordingOnSend = false,
|
|
32
32
|
// Custom error message to display in chat
|
|
33
|
-
customError,
|
|
34
|
-
// PII display mode
|
|
35
|
-
piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary, }) => {
|
|
33
|
+
customError, voiceThresholds, debugVoiceRms = false, sttGlossary, }) => {
|
|
36
34
|
// Set API hosts immediately based on environment (before any API calls)
|
|
37
35
|
setApiHosts(environment);
|
|
38
36
|
const nxtlinqApi = React.useMemo(() => (serviceToken || getAuthToken
|
|
@@ -769,6 +767,11 @@ piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary
|
|
|
769
767
|
// AI Model related state
|
|
770
768
|
const [modelsFromApi, setModelsFromApi] = React.useState([]);
|
|
771
769
|
const [selectedModelIndex, setSelectedModelIndex] = useLocalStorage('selectedAIModelIndex', 0);
|
|
770
|
+
// PII protection status: fetched from the service's own config (via serviceId + credentials
|
|
771
|
+
// already provided to the SDK), not passed in by the host app. Defaults to off until the fetch
|
|
772
|
+
// below resolves, matching how modelsFromApi starts empty.
|
|
773
|
+
const [enablePiiProtection, setEnablePiiProtection] = React.useState(false);
|
|
774
|
+
const piiDisplayMode = enablePiiProtection ? 'redacted' : 'plain';
|
|
772
775
|
// Use models from API only (no default fallback)
|
|
773
776
|
// This ensures SDK always uses Dashboard-configured models
|
|
774
777
|
const effectiveAvailableModels = React.useMemo(() => {
|
|
@@ -787,6 +790,9 @@ piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary
|
|
|
787
790
|
if ('availableModels' in result && Array.isArray(result.availableModels)) {
|
|
788
791
|
setModelsFromApi(result.availableModels);
|
|
789
792
|
}
|
|
793
|
+
if ('enablePiiProtection' in result) {
|
|
794
|
+
setEnablePiiProtection(!!result.enablePiiProtection);
|
|
795
|
+
}
|
|
790
796
|
}
|
|
791
797
|
catch (error) {
|
|
792
798
|
console.error('Failed to fetch available models from API:', error);
|
|
@@ -2481,10 +2487,8 @@ piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary
|
|
|
2481
2487
|
if (isFromAIAgent && !aitRef.current) {
|
|
2482
2488
|
throw new Error('You must have an existing AIT before AI Agent can create new AITs');
|
|
2483
2489
|
}
|
|
2484
|
-
|
|
2485
|
-
|
|
2486
|
-
// is part of the on-chain commitment -- a locally invented id would anchor a parent that does
|
|
2487
|
-
// not exist.
|
|
2490
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
2491
|
+
const aitId = `did:polygon:nxtlinq:${currentAddress}:${timestamp}`;
|
|
2488
2492
|
const metadata = {
|
|
2489
2493
|
permissions: newPermissions || permissions,
|
|
2490
2494
|
issuedBy: currentAddress,
|
|
@@ -2492,14 +2496,17 @@ piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary
|
|
|
2492
2496
|
const metadataStr = stringify(metadata);
|
|
2493
2497
|
// ethers v6: utils.keccak256 -> keccak256, utils.toUtf8Bytes -> toUtf8Bytes
|
|
2494
2498
|
const metadataHash = ethers.keccak256(ethers.toUtf8Bytes(metadataStr));
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2499
|
+
const uploadResponse = await nxtlinqApi.metadata.createMetadata(metadata, nxtlinqAITServiceAccessToken || '');
|
|
2500
|
+
if ('error' in uploadResponse) {
|
|
2501
|
+
throw new Error(`Failed to upload metadata: ${uploadResponse.error}`);
|
|
2502
|
+
}
|
|
2503
|
+
const { metadataCid } = uploadResponse;
|
|
2498
2504
|
const createAITParams = {
|
|
2505
|
+
aitId,
|
|
2499
2506
|
controller: currentAddress,
|
|
2500
2507
|
serviceId,
|
|
2501
|
-
permissions: metadata.permissions,
|
|
2502
2508
|
metadataHash,
|
|
2509
|
+
metadataCid,
|
|
2503
2510
|
isFromAIAgent: isFromAIAgent,
|
|
2504
2511
|
parentAITId: isFromAIAgent ? aitRef.current?.aitId : undefined,
|
|
2505
2512
|
};
|
|
@@ -2507,17 +2514,12 @@ piiDisplayMode = 'redacted', voiceThresholds, debugVoiceRms = false, sttGlossary
|
|
|
2507
2514
|
if ('error' in createAITResponse) {
|
|
2508
2515
|
throw new Error(`Failed to create AIT: ${createAITResponse.error}`);
|
|
2509
2516
|
}
|
|
2510
|
-
const aitId = createAITResponse.aitId;
|
|
2511
|
-
if (!aitId) {
|
|
2512
|
-
// Surfaced rather than substituted: this id becomes parentAITId on agent-created AITs, and
|
|
2513
|
-
// parentAITId is committed on chain. Guessing one would anchor a dangling parent link.
|
|
2514
|
-
throw new Error('AIT-Service did not return an aitId; refusing to invent one.');
|
|
2515
|
-
}
|
|
2516
2517
|
const aitInfo = {
|
|
2517
2518
|
aitId,
|
|
2518
2519
|
controller: currentAddress,
|
|
2519
2520
|
metadata,
|
|
2520
2521
|
metadataHash,
|
|
2522
|
+
metadataCid,
|
|
2521
2523
|
};
|
|
2522
2524
|
setAit(aitInfo);
|
|
2523
2525
|
setPermissions(newPermissions || permissions);
|
|
@@ -64,11 +64,6 @@ export interface ChatBotProps {
|
|
|
64
64
|
berifymeMode?: 'built-in' | 'external';
|
|
65
65
|
isStopRecordingOnSend?: boolean;
|
|
66
66
|
customError?: string;
|
|
67
|
-
/** PII display mode: how PII protection is visualized in chat messages
|
|
68
|
-
* - 'plain': No visualization, messages look like normal chat
|
|
69
|
-
* - 'redacted': Anonymized text with PII tokens displayed (default)
|
|
70
|
-
*/
|
|
71
|
-
piiDisplayMode?: 'plain' | 'redacted';
|
|
72
67
|
/** Override mic VAD thresholds. Useful for tuning sensitivity per deployment. */
|
|
73
68
|
voiceThresholds?: {
|
|
74
69
|
speechRmsThreshold?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../src/types/ChatBotTypes.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ChatBotTypes.d.ts","sourceRoot":"","sources":["../../src/types/ChatBotTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatBotHeader.d.ts","sourceRoot":"","sources":["../../src/ui/ChatBotHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACjE,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"ChatBotHeader.d.ts","sourceRoot":"","sources":["../../src/ui/ChatBotHeader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,MAAM,MAAM,kBAAkB,GAAG;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IACjE,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA2HtD,CAAC"}
|
package/dist/ui/ChatBotHeader.js
CHANGED
|
@@ -49,14 +49,18 @@ export const ChatBotHeader = ({ mobileLayout, isDragging, onDragStart, isVoiceMo
|
|
|
49
49
|
z-index: 2 !important;
|
|
50
50
|
display: flex !important;
|
|
51
51
|
justify-content: space-between !important;
|
|
52
|
-
align-items:
|
|
52
|
+
align-items: flex-start !important;
|
|
53
53
|
width: 100% !important;
|
|
54
54
|
pointer-events: none !important;
|
|
55
55
|
`, children: [_jsxs("div", { css: css `
|
|
56
56
|
display: flex !important;
|
|
57
57
|
align-items: center !important;
|
|
58
|
+
flex-wrap: wrap !important;
|
|
59
|
+
row-gap: 8px !important;
|
|
58
60
|
gap: 10px !important;
|
|
59
61
|
min-width: 0 !important;
|
|
62
|
+
flex: 1 1 auto !important;
|
|
63
|
+
padding-top: 2px !important;
|
|
60
64
|
pointer-events: none !important;
|
|
61
|
-
`, children: [_jsx("h3", { css: headerTitle, children: "AI Agent" }), metaChips] }), actions] }))] }));
|
|
65
|
+
`, children: [_jsx("h3", { css: [headerTitle, css `flex-shrink: 0 !important;`], children: "AI Agent" }), metaChips] }), _jsx("div", { css: css `flex-shrink: 0 !important;`, children: actions })] }))] }));
|
|
62
66
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatBotUI.d.ts","sourceRoot":"","sources":["../../src/ui/ChatBotUI.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatBotUI.d.ts","sourceRoot":"","sources":["../../src/ui/ChatBotUI.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqG/B,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAitB7B,CAAC"}
|
package/dist/ui/ChatBotUI.js
CHANGED
|
@@ -14,6 +14,12 @@ import { chatWindow, errorToast, floatingButton, idvBanner, idvBannerText, idvBa
|
|
|
14
14
|
const MOBILE_BREAKPOINT = 768;
|
|
15
15
|
const MOBILE_EDGE_MARGIN = 12;
|
|
16
16
|
const MOBILE_FAB_POSITION = { right: MOBILE_EDGE_MARGIN, bottom: MOBILE_EDGE_MARGIN };
|
|
17
|
+
// Below this widget width, the desktop header's single-row layout (title + model/PII chips +
|
|
18
|
+
// voice/settings/close actions, all in one line) has no room left and the chips start
|
|
19
|
+
// overlapping the actions. The user can drag the window this narrow (MIN_WIDTH is 320px) even
|
|
20
|
+
// on a wide desktop viewport, so this must be driven by the widget's own width, not just
|
|
21
|
+
// window.innerWidth — falling back to the same stacked layout used on mobile viewports.
|
|
22
|
+
const HEADER_COMPACT_WIDTH = 420;
|
|
17
23
|
const isMobileViewport = () => typeof window !== 'undefined' && window.innerWidth <= MOBILE_BREAKPOINT;
|
|
18
24
|
// Toast Notification Component
|
|
19
25
|
const ToastNotification = ({ type, message, onClose, isChatOpen = false }) => {
|
|
@@ -59,6 +65,7 @@ export const ChatBotUI = () => {
|
|
|
59
65
|
const { dimensions, handleResizeStart, positionAdjustment } = useResizable(positionRef);
|
|
60
66
|
const { position, handleDragStart, isDragging, updatePosition } = useDraggable(dimensions);
|
|
61
67
|
const [mobileLayout, setMobileLayout] = React.useState(isMobileViewport);
|
|
68
|
+
const headerCompactLayout = mobileLayout || dimensions.width < HEADER_COMPACT_WIDTH;
|
|
62
69
|
React.useEffect(() => {
|
|
63
70
|
if (typeof window === 'undefined')
|
|
64
71
|
return;
|
|
@@ -523,7 +530,7 @@ export const ChatBotUI = () => {
|
|
|
523
530
|
left: ${MOBILE_EDGE_MARGIN}px !important;
|
|
524
531
|
top: ${MOBILE_EDGE_MARGIN}px !important;
|
|
525
532
|
` : ''}
|
|
526
|
-
`], children: [!mobileLayout && (_jsxs(_Fragment, { children: [_jsx("div", { css: resizeHandleNW, onPointerDown: handleResizeStart('nw'), title: "Resize", "aria-label": "Resize chat window from top-left" }), _jsx("div", { css: resizeHandleNE, onPointerDown: handleResizeStart('ne'), title: "Resize", "aria-label": "Resize chat window from top-right" }), _jsx("div", { css: resizeHandleSW, onPointerDown: handleResizeStart('sw'), title: "Resize", "aria-label": "Resize chat window from bottom-left" }), _jsx("div", { css: resizeHandleSE, onPointerDown: handleResizeStart('se'), title: "Resize", "aria-label": "Resize chat window from bottom-right" })] })), _jsx(ChatBotHeader, { mobileLayout:
|
|
533
|
+
`], children: [!mobileLayout && (_jsxs(_Fragment, { children: [_jsx("div", { css: resizeHandleNW, onPointerDown: handleResizeStart('nw'), title: "Resize", "aria-label": "Resize chat window from top-left" }), _jsx("div", { css: resizeHandleNE, onPointerDown: handleResizeStart('ne'), title: "Resize", "aria-label": "Resize chat window from top-right" }), _jsx("div", { css: resizeHandleSW, onPointerDown: handleResizeStart('sw'), title: "Resize", "aria-label": "Resize chat window from bottom-left" }), _jsx("div", { css: resizeHandleSE, onPointerDown: handleResizeStart('se'), title: "Resize", "aria-label": "Resize chat window from bottom-right" })] })), _jsx(ChatBotHeader, { mobileLayout: headerCompactLayout, isDragging: isDragging, onDragStart: handleDragStart, isVoiceMode: isVoiceMode, isVoiceConnecting: isVoiceConnecting, onVoiceToggle: () => void ((isVoiceMode || isVoiceConnecting) ? exitVoiceMode() : enterVoiceMode()), piiDisplayMode: piiDisplayMode, isAITLoading: isAITLoading, onSettingsClick: handleSettingsClick, onClose: handleClose }), showIDVSuggestion && hitAddress && !props.requireWalletIDVVerification && !hasBerifymeToken && !isWalletVerifiedWithBerifyme && (_jsxs("div", { "data-idv-banner": true, css: idvBanner, children: [_jsx("div", { css: css `
|
|
527
534
|
font-size: 20px !important;
|
|
528
535
|
color: #f39c12 !important;
|
|
529
536
|
`, children: "\uD83D\uDCA1" }), _jsxs("div", { css: css `flex: 1 !important;`, children: [_jsx("h5", { css: idvBannerTitle, children: walletTextUtils.getWalletText('Recommended: Verify Your Wallet', serviceId) }), _jsx("p", { css: idvBannerText, children: walletTextUtils.getWalletText('While not required, verifying your wallet with Berify.me provides additional security and trust for your AI agent interactions.', serviceId) }), _jsx("button", { onClick: () => onVerifyWallet('berifyme'), css: idvVerifyButton, children: walletTextUtils.getWalletText('Verify Wallet', serviceId) })] }), _jsx("button", { onClick: handleDismissIDV, css: idvDismissButton, title: `Hide for ${Math.floor((props.idvBannerDismissSeconds || 86400) / 3600)} hours`, children: "\u00D7" })] })), !showIDVSuggestion && dismissUntil && timeRemaining && (_jsxs("div", { css: css `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"isolatedStyles.d.ts","sourceRoot":"","sources":["../../../src/ui/styles/isolatedStyles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,QAAQ,2CAwBpB,CAAC;AAGF,eAAO,MAAM,YAAY,2CAmExB,CAAC;AAGF,eAAO,MAAM,cAAc,2CAqD1B,CAAC;AAGF,eAAO,MAAM,UAAU,2CA2BtB,CAAC;AAgBF,8DAA8D;AAC9D,eAAO,MAAM,YAAY,2CAKxB,CAAC;AAEF,eAAO,MAAM,cAAc,2CAK1B,CAAC;AAEF,eAAO,MAAM,cAAc,2CAK1B,CAAC;AAEF,eAAO,MAAM,cAAc,2CAK1B,CAAC;AAEF,eAAO,MAAM,cAAc,2CAK1B,CAAC;AAGF,eAAO,MAAM,UAAU,2CAStB,CAAC;AAGF,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"isolatedStyles.d.ts","sourceRoot":"","sources":["../../../src/ui/styles/isolatedStyles.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bytexbyte/nxtlinq-ai-agent-ui-react-development",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Official React Web UI for nxtlinq AI Agent — drop-in chat widget",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"@bytexbyte/nxtlinq-ai-agent-core-development": "0.5.0",
|
|
42
|
-
"@bytexbyte/nxtlinq-ai-agent-web-development": "0.
|
|
42
|
+
"@bytexbyte/nxtlinq-ai-agent-web-development": "0.4.0",
|
|
43
43
|
"@emotion/react": "^11.14.0",
|
|
44
44
|
"@emotion/styled": "^11.14.1",
|
|
45
45
|
"@mui/icons-material": "^7.2.0",
|
|
@@ -55,4 +55,4 @@
|
|
|
55
55
|
"react-dom": "^18.2.0",
|
|
56
56
|
"typescript": "^5.4.2"
|
|
57
57
|
}
|
|
58
|
-
}
|
|
58
|
+
}
|
|
@@ -79,8 +79,6 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
|
|
|
79
79
|
isStopRecordingOnSend = false,
|
|
80
80
|
// Custom error message to display in chat
|
|
81
81
|
customError,
|
|
82
|
-
// PII display mode
|
|
83
|
-
piiDisplayMode = 'redacted',
|
|
84
82
|
voiceThresholds,
|
|
85
83
|
debugVoiceRms = false,
|
|
86
84
|
sttGlossary,
|
|
@@ -894,6 +892,12 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
|
|
|
894
892
|
const [modelsFromApi, setModelsFromApi] = React.useState<AIModel[]>([]);
|
|
895
893
|
const [selectedModelIndex, setSelectedModelIndex] = useLocalStorage<number>('selectedAIModelIndex', 0);
|
|
896
894
|
|
|
895
|
+
// PII protection status: fetched from the service's own config (via serviceId + credentials
|
|
896
|
+
// already provided to the SDK), not passed in by the host app. Defaults to off until the fetch
|
|
897
|
+
// below resolves, matching how modelsFromApi starts empty.
|
|
898
|
+
const [enablePiiProtection, setEnablePiiProtection] = React.useState(false);
|
|
899
|
+
const piiDisplayMode: 'plain' | 'redacted' = enablePiiProtection ? 'redacted' : 'plain';
|
|
900
|
+
|
|
897
901
|
// Use models from API only (no default fallback)
|
|
898
902
|
// This ensures SDK always uses Dashboard-configured models
|
|
899
903
|
const effectiveAvailableModels = React.useMemo(() => {
|
|
@@ -915,6 +919,9 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
|
|
|
915
919
|
if ('availableModels' in result && Array.isArray(result.availableModels)) {
|
|
916
920
|
setModelsFromApi(result.availableModels);
|
|
917
921
|
}
|
|
922
|
+
if ('enablePiiProtection' in result) {
|
|
923
|
+
setEnablePiiProtection(!!result.enablePiiProtection);
|
|
924
|
+
}
|
|
918
925
|
} catch (error) {
|
|
919
926
|
console.error('Failed to fetch available models from API:', error);
|
|
920
927
|
// Silently fail and use default models
|
|
@@ -2767,10 +2774,8 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
|
|
|
2767
2774
|
throw new Error('You must have an existing AIT before AI Agent can create new AITs');
|
|
2768
2775
|
}
|
|
2769
2776
|
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
// is part of the on-chain commitment -- a locally invented id would anchor a parent that does
|
|
2773
|
-
// not exist.
|
|
2777
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
2778
|
+
const aitId = `did:polygon:nxtlinq:${currentAddress}:${timestamp}`;
|
|
2774
2779
|
|
|
2775
2780
|
const metadata = {
|
|
2776
2781
|
permissions: newPermissions || permissions,
|
|
@@ -2781,15 +2786,19 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
|
|
|
2781
2786
|
// ethers v6: utils.keccak256 -> keccak256, utils.toUtf8Bytes -> toUtf8Bytes
|
|
2782
2787
|
const metadataHash = ethers.keccak256(ethers.toUtf8Bytes(metadataStr));
|
|
2783
2788
|
|
|
2784
|
-
|
|
2785
|
-
|
|
2786
|
-
|
|
2789
|
+
const uploadResponse = await nxtlinqApi.metadata.createMetadata(metadata, nxtlinqAITServiceAccessToken || '');
|
|
2790
|
+
if ('error' in uploadResponse) {
|
|
2791
|
+
throw new Error(`Failed to upload metadata: ${uploadResponse.error}`);
|
|
2792
|
+
}
|
|
2793
|
+
|
|
2794
|
+
const { metadataCid } = uploadResponse;
|
|
2787
2795
|
|
|
2788
2796
|
const createAITParams = {
|
|
2797
|
+
aitId,
|
|
2789
2798
|
controller: currentAddress,
|
|
2790
2799
|
serviceId,
|
|
2791
|
-
permissions: metadata.permissions,
|
|
2792
2800
|
metadataHash,
|
|
2801
|
+
metadataCid,
|
|
2793
2802
|
isFromAIAgent: isFromAIAgent,
|
|
2794
2803
|
parentAITId: isFromAIAgent ? aitRef.current?.aitId : undefined,
|
|
2795
2804
|
};
|
|
@@ -2800,18 +2809,12 @@ export const ChatBotProvider: React.FC<ChatBotProps> = ({
|
|
|
2800
2809
|
throw new Error(`Failed to create AIT: ${createAITResponse.error}`);
|
|
2801
2810
|
}
|
|
2802
2811
|
|
|
2803
|
-
const aitId = (createAITResponse as { aitId?: string }).aitId;
|
|
2804
|
-
if (!aitId) {
|
|
2805
|
-
// Surfaced rather than substituted: this id becomes parentAITId on agent-created AITs, and
|
|
2806
|
-
// parentAITId is committed on chain. Guessing one would anchor a dangling parent link.
|
|
2807
|
-
throw new Error('AIT-Service did not return an aitId; refusing to invent one.');
|
|
2808
|
-
}
|
|
2809
|
-
|
|
2810
2812
|
const aitInfo = {
|
|
2811
2813
|
aitId,
|
|
2812
2814
|
controller: currentAddress,
|
|
2813
2815
|
metadata,
|
|
2814
2816
|
metadataHash,
|
|
2817
|
+
metadataCid,
|
|
2815
2818
|
};
|
|
2816
2819
|
|
|
2817
2820
|
setAit(aitInfo);
|
|
@@ -81,11 +81,6 @@ export interface ChatBotProps {
|
|
|
81
81
|
isStopRecordingOnSend?: boolean; // Stop recording automatically when sending message (default: false)
|
|
82
82
|
// Custom error message to display in chat
|
|
83
83
|
customError?: string; // Custom error message to display as a chat message when provided
|
|
84
|
-
/** PII display mode: how PII protection is visualized in chat messages
|
|
85
|
-
* - 'plain': No visualization, messages look like normal chat
|
|
86
|
-
* - 'redacted': Anonymized text with PII tokens displayed (default)
|
|
87
|
-
*/
|
|
88
|
-
piiDisplayMode?: 'plain' | 'redacted';
|
|
89
84
|
/** Override mic VAD thresholds. Useful for tuning sensitivity per deployment. */
|
|
90
85
|
voiceThresholds?: {
|
|
91
86
|
speechRmsThreshold?: number;
|
|
@@ -139,7 +134,8 @@ export interface ChatBotContextType {
|
|
|
139
134
|
selectedModelIndex: number;
|
|
140
135
|
showModelSelector: boolean;
|
|
141
136
|
suggestions: PresetMessage[];
|
|
142
|
-
// PII Protection visualization
|
|
137
|
+
// PII Protection visualization — derived internally from the service's own config
|
|
138
|
+
// (fetched via serviceId + credentials), never settable from outside the provider.
|
|
143
139
|
piiDisplayMode: 'plain' | 'redacted';
|
|
144
140
|
// Realtime voice mode (WebRTC)
|
|
145
141
|
isVoiceMode: boolean;
|
package/src/ui/ChatBotHeader.tsx
CHANGED
|
@@ -121,21 +121,27 @@ export const ChatBotHeader: React.FC<ChatBotHeaderProps> = ({
|
|
|
121
121
|
z-index: 2 !important;
|
|
122
122
|
display: flex !important;
|
|
123
123
|
justify-content: space-between !important;
|
|
124
|
-
align-items:
|
|
124
|
+
align-items: flex-start !important;
|
|
125
125
|
width: 100% !important;
|
|
126
126
|
pointer-events: none !important;
|
|
127
127
|
`}>
|
|
128
128
|
<div css={css`
|
|
129
129
|
display: flex !important;
|
|
130
130
|
align-items: center !important;
|
|
131
|
+
flex-wrap: wrap !important;
|
|
132
|
+
row-gap: 8px !important;
|
|
131
133
|
gap: 10px !important;
|
|
132
134
|
min-width: 0 !important;
|
|
135
|
+
flex: 1 1 auto !important;
|
|
136
|
+
padding-top: 2px !important;
|
|
133
137
|
pointer-events: none !important;
|
|
134
138
|
`}>
|
|
135
|
-
<h3 css={headerTitle}>AI Agent</h3>
|
|
139
|
+
<h3 css={[headerTitle, css`flex-shrink: 0 !important;`]}>AI Agent</h3>
|
|
136
140
|
{metaChips}
|
|
137
141
|
</div>
|
|
138
|
-
{
|
|
142
|
+
<div css={css`flex-shrink: 0 !important;`}>
|
|
143
|
+
{actions}
|
|
144
|
+
</div>
|
|
139
145
|
</div>
|
|
140
146
|
)}
|
|
141
147
|
</div>
|
package/src/ui/ChatBotUI.tsx
CHANGED
|
@@ -33,6 +33,12 @@ import {
|
|
|
33
33
|
const MOBILE_BREAKPOINT = 768;
|
|
34
34
|
const MOBILE_EDGE_MARGIN = 12;
|
|
35
35
|
const MOBILE_FAB_POSITION = { right: MOBILE_EDGE_MARGIN, bottom: MOBILE_EDGE_MARGIN } as const;
|
|
36
|
+
// Below this widget width, the desktop header's single-row layout (title + model/PII chips +
|
|
37
|
+
// voice/settings/close actions, all in one line) has no room left and the chips start
|
|
38
|
+
// overlapping the actions. The user can drag the window this narrow (MIN_WIDTH is 320px) even
|
|
39
|
+
// on a wide desktop viewport, so this must be driven by the widget's own width, not just
|
|
40
|
+
// window.innerWidth — falling back to the same stacked layout used on mobile viewports.
|
|
41
|
+
const HEADER_COMPACT_WIDTH = 420;
|
|
36
42
|
|
|
37
43
|
const isMobileViewport = (): boolean =>
|
|
38
44
|
typeof window !== 'undefined' && window.innerWidth <= MOBILE_BREAKPOINT;
|
|
@@ -123,6 +129,7 @@ export const ChatBotUI: React.FC = () => {
|
|
|
123
129
|
const { position, handleDragStart, isDragging, updatePosition } = useDraggable(dimensions);
|
|
124
130
|
|
|
125
131
|
const [mobileLayout, setMobileLayout] = React.useState(isMobileViewport);
|
|
132
|
+
const headerCompactLayout = mobileLayout || dimensions.width < HEADER_COMPACT_WIDTH;
|
|
126
133
|
React.useEffect(() => {
|
|
127
134
|
if (typeof window === 'undefined') return;
|
|
128
135
|
const mq = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT}px)`);
|
|
@@ -709,7 +716,7 @@ export const ChatBotUI: React.FC = () => {
|
|
|
709
716
|
)}
|
|
710
717
|
|
|
711
718
|
<ChatBotHeader
|
|
712
|
-
mobileLayout={
|
|
719
|
+
mobileLayout={headerCompactLayout}
|
|
713
720
|
isDragging={isDragging}
|
|
714
721
|
onDragStart={handleDragStart}
|
|
715
722
|
isVoiceMode={isVoiceMode}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { NxtlinqAgentChatProps } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* Drop-in React Web assistant UI wired to `@bytexbyte/nxtlinq-ai-agent-web-development`.
|
|
5
|
-
*
|
|
6
|
-
* @example
|
|
7
|
-
* ```tsx
|
|
8
|
-
* import { NxtlinqAgentChat } from '@bytexbyte/nxtlinq-ai-agent-ui-react-development';
|
|
9
|
-
*
|
|
10
|
-
* export default function Page() {
|
|
11
|
-
* return (
|
|
12
|
-
* <NxtlinqAgentChat
|
|
13
|
-
* style={{ height: '100vh' }}
|
|
14
|
-
* serviceId="..."
|
|
15
|
-
* apiKey="..."
|
|
16
|
-
* apiSecret="..."
|
|
17
|
-
* environment="staging"
|
|
18
|
-
* pseudoId={userId}
|
|
19
|
-
* loadHistoryOnMount
|
|
20
|
-
* />
|
|
21
|
-
* );
|
|
22
|
-
* }
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function NxtlinqAgentChat({ title, placeholder, presetMessages, loadHistoryOnMount, historyLast, enableVoice, enableFileUpload, startInVoiceMode, startWithMicMuted, holdMicDuringAssistant, theme, style, headerStyle, onMessage, onError, onToolUse, children, fetchImpl, getTimezone, resetOnIdentityChange, ...agentConfig }: NxtlinqAgentChatProps): React.ReactElement;
|
|
26
|
-
//# sourceMappingURL=NxtlinqAgentChat.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NxtlinqAgentChat.d.ts","sourceRoot":"","sources":["../src/NxtlinqAgentChat.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,cAAc,EACd,kBAA0B,EAC1B,WAAW,EACX,WAAkB,EAClB,gBAAuB,EACvB,gBAAwB,EACxB,iBAAwB,EACxB,sBAA6B,EAC7B,KAAK,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,qBAAqB,EACrB,GAAG,WAAW,EACf,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CA6B5C"}
|
package/dist/NxtlinqAgentChat.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import { NxtlinqAgentProvider } from '@bytexbyte/nxtlinq-ai-agent-web-development';
|
|
3
|
-
import { AgentAssistantShell } from './components/AgentAssistantShell';
|
|
4
|
-
/**
|
|
5
|
-
* Drop-in React Web assistant UI wired to `@bytexbyte/nxtlinq-ai-agent-web-development`.
|
|
6
|
-
*
|
|
7
|
-
* @example
|
|
8
|
-
* ```tsx
|
|
9
|
-
* import { NxtlinqAgentChat } from '@bytexbyte/nxtlinq-ai-agent-ui-react-development';
|
|
10
|
-
*
|
|
11
|
-
* export default function Page() {
|
|
12
|
-
* return (
|
|
13
|
-
* <NxtlinqAgentChat
|
|
14
|
-
* style={{ height: '100vh' }}
|
|
15
|
-
* serviceId="..."
|
|
16
|
-
* apiKey="..."
|
|
17
|
-
* apiSecret="..."
|
|
18
|
-
* environment="staging"
|
|
19
|
-
* pseudoId={userId}
|
|
20
|
-
* loadHistoryOnMount
|
|
21
|
-
* />
|
|
22
|
-
* );
|
|
23
|
-
* }
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export function NxtlinqAgentChat({ title, placeholder, presetMessages, loadHistoryOnMount = false, historyLast, enableVoice = true, enableFileUpload = true, startInVoiceMode = false, startWithMicMuted = true, holdMicDuringAssistant = true, theme, style, headerStyle, onMessage, onError, onToolUse, children, fetchImpl, getTimezone, resetOnIdentityChange, ...agentConfig }) {
|
|
27
|
-
return (_jsxs(NxtlinqAgentProvider, { fetchImpl: fetchImpl, getTimezone: getTimezone, resetOnIdentityChange: resetOnIdentityChange, onMessage: onMessage, onError: onError, onToolUse: onToolUse, ...agentConfig, children: [_jsx(AgentAssistantShell, { title: title, placeholder: placeholder, presetMessages: presetMessages, loadHistoryOnMount: loadHistoryOnMount, historyLast: historyLast, enableVoice: enableVoice, enableFileUpload: enableFileUpload, startInVoiceMode: startInVoiceMode, startWithMicMuted: startWithMicMuted, holdMicDuringAssistant: holdMicDuringAssistant, theme: theme, style: style, headerStyle: headerStyle }), children] }));
|
|
28
|
-
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { NxtlinqAgentChatProps } from '../types';
|
|
3
|
-
export type AgentAssistantShellProps = Pick<NxtlinqAgentChatProps, 'title' | 'placeholder' | 'presetMessages' | 'enableVoice' | 'enableFileUpload' | 'theme' | 'style' | 'headerStyle' | 'loadHistoryOnMount' | 'historyLast' | 'startInVoiceMode' | 'startWithMicMuted' | 'holdMicDuringAssistant'>;
|
|
4
|
-
export declare function AgentAssistantShell(props: AgentAssistantShellProps): React.ReactElement;
|
|
5
|
-
//# sourceMappingURL=AgentAssistantShell.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgentAssistantShell.d.ts","sourceRoot":"","sources":["../../src/components/AgentAssistantShell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAOtD,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,qBAAqB,EACnB,OAAO,GACP,aAAa,GACb,gBAAgB,GAChB,aAAa,GACb,kBAAkB,GAClB,OAAO,GACP,OAAO,GACP,aAAa,GACb,oBAAoB,GACpB,aAAa,GACb,kBAAkB,GAClB,mBAAmB,GACnB,wBAAwB,CAC3B,CAAC;AA2DF,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,KAAK,CAAC,YAAY,CAiBvF"}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
-
import { useEffect, useRef, useState } from 'react';
|
|
3
|
-
import { AgentAssistantProvider, useAgentAssistant, } from '../context/AgentAssistantContext';
|
|
4
|
-
import { AgentComposer } from './AgentComposer';
|
|
5
|
-
import { AgentMessageList } from './AgentMessageList';
|
|
6
|
-
import { AgentRemoteAudio } from './AgentRemoteAudio';
|
|
7
|
-
import { AgentVoiceBar } from './AgentVoiceBar';
|
|
8
|
-
import { PresetMessageChips } from './PresetMessageChips';
|
|
9
|
-
function AgentAssistantInner({ title, headerStyle, style, loadHistoryOnMount, historyLast, startInVoiceMode, }) {
|
|
10
|
-
const { theme, loadHistory, startVoice, isVoiceAvailable } = useAgentAssistant();
|
|
11
|
-
const [historyReady, setHistoryReady] = useState(!loadHistoryOnMount);
|
|
12
|
-
const voiceAutoStartRef = useRef(false);
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
if (loadHistoryOnMount) {
|
|
15
|
-
void loadHistory({ last: historyLast ?? 50 }).finally(() => setHistoryReady(true));
|
|
16
|
-
}
|
|
17
|
-
}, [loadHistory, loadHistoryOnMount, historyLast]);
|
|
18
|
-
useEffect(() => {
|
|
19
|
-
if (!startInVoiceMode || !isVoiceAvailable || voiceAutoStartRef.current)
|
|
20
|
-
return;
|
|
21
|
-
voiceAutoStartRef.current = true;
|
|
22
|
-
void startVoice();
|
|
23
|
-
}, [startInVoiceMode, isVoiceAvailable, startVoice]);
|
|
24
|
-
return (_jsxs("div", { style: {
|
|
25
|
-
display: 'flex',
|
|
26
|
-
flexDirection: 'column',
|
|
27
|
-
flex: 1,
|
|
28
|
-
minHeight: 0,
|
|
29
|
-
backgroundColor: theme.colors.background,
|
|
30
|
-
...style,
|
|
31
|
-
}, children: [_jsx("header", { style: {
|
|
32
|
-
padding: theme.spacing.md,
|
|
33
|
-
borderBottom: `1px solid ${theme.colors.border}`,
|
|
34
|
-
backgroundColor: theme.colors.surface,
|
|
35
|
-
fontSize: theme.typography.titleSize,
|
|
36
|
-
fontWeight: 600,
|
|
37
|
-
color: theme.colors.assistantText,
|
|
38
|
-
...headerStyle,
|
|
39
|
-
}, children: title ?? 'AI Assistant' }), _jsx(PresetMessageChips, {}), historyReady ? _jsx(AgentMessageList, {}) : _jsx("div", { style: { flex: 1 } }), _jsx(AgentVoiceBar, {}), _jsx(AgentComposer, {}), _jsx(AgentRemoteAudio, {})] }));
|
|
40
|
-
}
|
|
41
|
-
export function AgentAssistantShell(props) {
|
|
42
|
-
return (_jsx(AgentAssistantProvider, { ui: {
|
|
43
|
-
title: props.title,
|
|
44
|
-
placeholder: props.placeholder,
|
|
45
|
-
presetMessages: props.presetMessages,
|
|
46
|
-
enableVoice: props.enableVoice,
|
|
47
|
-
enableFileUpload: props.enableFileUpload,
|
|
48
|
-
theme: props.theme,
|
|
49
|
-
startWithMicMuted: props.startWithMicMuted,
|
|
50
|
-
holdMicDuringAssistant: props.holdMicDuringAssistant,
|
|
51
|
-
}, children: _jsx(AgentAssistantInner, { ...props }) }));
|
|
52
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"AgentComposer.d.ts","sourceRoot":"","sources":["../../src/components/AgentComposer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,wBAAgB,aAAa,IAAI,KAAK,CAAC,YAAY,GAAG,IAAI,CAkIzD"}
|