@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.
Files changed (133) hide show
  1. package/dist/context/ChatBotContext.d.ts.map +1 -1
  2. package/dist/context/ChatBotContext.js +19 -17
  3. package/dist/types/ChatBotTypes.d.ts +0 -5
  4. package/dist/types/ChatBotTypes.d.ts.map +1 -1
  5. package/dist/ui/ChatBotHeader.d.ts.map +1 -1
  6. package/dist/ui/ChatBotHeader.js +6 -2
  7. package/dist/ui/ChatBotUI.d.ts.map +1 -1
  8. package/dist/ui/ChatBotUI.js +8 -1
  9. package/dist/ui/styles/isolatedStyles.d.ts.map +1 -1
  10. package/dist/ui/styles/isolatedStyles.js +1 -0
  11. package/package.json +3 -3
  12. package/src/context/ChatBotContext.tsx +20 -17
  13. package/src/types/ChatBotTypes.ts +2 -6
  14. package/src/ui/ChatBotHeader.tsx +9 -3
  15. package/src/ui/ChatBotUI.tsx +8 -1
  16. package/src/ui/styles/isolatedStyles.ts +1 -0
  17. package/dist/NxtlinqAgentChat.d.ts +0 -26
  18. package/dist/NxtlinqAgentChat.d.ts.map +0 -1
  19. package/dist/NxtlinqAgentChat.js +0 -28
  20. package/dist/components/AgentAssistantShell.d.ts +0 -5
  21. package/dist/components/AgentAssistantShell.d.ts.map +0 -1
  22. package/dist/components/AgentAssistantShell.js +0 -52
  23. package/dist/components/AgentComposer.d.ts +0 -3
  24. package/dist/components/AgentComposer.d.ts.map +0 -1
  25. package/dist/components/AgentComposer.js +0 -60
  26. package/dist/components/AgentMessageList.d.ts +0 -3
  27. package/dist/components/AgentMessageList.d.ts.map +0 -1
  28. package/dist/components/AgentMessageList.js +0 -37
  29. package/dist/components/AgentRemoteAudio.d.ts +0 -4
  30. package/dist/components/AgentRemoteAudio.d.ts.map +0 -1
  31. package/dist/components/AgentRemoteAudio.js +0 -34
  32. package/dist/components/AgentVoiceBar.d.ts +0 -3
  33. package/dist/components/AgentVoiceBar.d.ts.map +0 -1
  34. package/dist/components/AgentVoiceBar.js +0 -91
  35. package/dist/components/PresetMessageChips.d.ts +0 -3
  36. package/dist/components/PresetMessageChips.d.ts.map +0 -1
  37. package/dist/components/PresetMessageChips.js +0 -23
  38. package/dist/context/AgentAssistantContext.d.ts +0 -32
  39. package/dist/context/AgentAssistantContext.d.ts.map +0 -1
  40. package/dist/context/AgentAssistantContext.js +0 -179
  41. package/dist/legacy/assets/images/adiSideItalicDataUri.d.ts +0 -2
  42. package/dist/legacy/assets/images/adiSideItalicDataUri.d.ts.map +0 -1
  43. package/dist/legacy/assets/images/adiSideItalicDataUri.js +0 -1
  44. package/dist/legacy/chatbot/ChatBot.d.ts +0 -5
  45. package/dist/legacy/chatbot/ChatBot.d.ts.map +0 -1
  46. package/dist/legacy/chatbot/ChatBot.js +0 -35
  47. package/dist/legacy/chatbot/context/ChatBotContext.d.ts +0 -5
  48. package/dist/legacy/chatbot/context/ChatBotContext.d.ts.map +0 -1
  49. package/dist/legacy/chatbot/context/ChatBotContext.js +0 -2922
  50. package/dist/legacy/chatbot/types/ChatBotTypes.d.ts +0 -166
  51. package/dist/legacy/chatbot/types/ChatBotTypes.d.ts.map +0 -1
  52. package/dist/legacy/chatbot/types/ChatBotTypes.js +0 -1
  53. package/dist/legacy/chatbot/ui/BerifyMeModal.d.ts +0 -17
  54. package/dist/legacy/chatbot/ui/BerifyMeModal.d.ts.map +0 -1
  55. package/dist/legacy/chatbot/ui/BerifyMeModal.js +0 -110
  56. package/dist/legacy/chatbot/ui/ChatBotHeader.d.ts +0 -15
  57. package/dist/legacy/chatbot/ui/ChatBotHeader.d.ts.map +0 -1
  58. package/dist/legacy/chatbot/ui/ChatBotHeader.js +0 -62
  59. package/dist/legacy/chatbot/ui/ChatBotUI.d.ts +0 -3
  60. package/dist/legacy/chatbot/ui/ChatBotUI.d.ts.map +0 -1
  61. package/dist/legacy/chatbot/ui/ChatBotUI.js +0 -557
  62. package/dist/legacy/chatbot/ui/MessageInput.d.ts +0 -3
  63. package/dist/legacy/chatbot/ui/MessageInput.d.ts.map +0 -1
  64. package/dist/legacy/chatbot/ui/MessageInput.js +0 -321
  65. package/dist/legacy/chatbot/ui/MessageList.d.ts +0 -4
  66. package/dist/legacy/chatbot/ui/MessageList.d.ts.map +0 -1
  67. package/dist/legacy/chatbot/ui/MessageList.js +0 -455
  68. package/dist/legacy/chatbot/ui/ModelSelector.d.ts +0 -4
  69. package/dist/legacy/chatbot/ui/ModelSelector.d.ts.map +0 -1
  70. package/dist/legacy/chatbot/ui/ModelSelector.js +0 -122
  71. package/dist/legacy/chatbot/ui/NotificationModal.d.ts +0 -15
  72. package/dist/legacy/chatbot/ui/NotificationModal.d.ts.map +0 -1
  73. package/dist/legacy/chatbot/ui/NotificationModal.js +0 -53
  74. package/dist/legacy/chatbot/ui/PermissionForm.d.ts +0 -8
  75. package/dist/legacy/chatbot/ui/PermissionForm.d.ts.map +0 -1
  76. package/dist/legacy/chatbot/ui/PermissionForm.js +0 -465
  77. package/dist/legacy/chatbot/ui/PresetMessages.d.ts +0 -4
  78. package/dist/legacy/chatbot/ui/PresetMessages.d.ts.map +0 -1
  79. package/dist/legacy/chatbot/ui/PresetMessages.js +0 -33
  80. package/dist/legacy/chatbot/ui/VoiceModePanel.d.ts +0 -3
  81. package/dist/legacy/chatbot/ui/VoiceModePanel.d.ts.map +0 -1
  82. package/dist/legacy/chatbot/ui/VoiceModePanel.js +0 -95
  83. package/dist/legacy/chatbot/ui/chatBotHeaderParts.d.ts +0 -15
  84. package/dist/legacy/chatbot/ui/chatBotHeaderParts.d.ts.map +0 -1
  85. package/dist/legacy/chatbot/ui/chatBotHeaderParts.js +0 -50
  86. package/dist/legacy/chatbot/ui/styles/isolatedStyles.d.ts +0 -73
  87. package/dist/legacy/chatbot/ui/styles/isolatedStyles.d.ts.map +0 -1
  88. package/dist/legacy/chatbot/ui/styles/isolatedStyles.js +0 -985
  89. package/dist/legacy/index.d.ts +0 -14
  90. package/dist/legacy/index.d.ts.map +0 -1
  91. package/dist/legacy/index.js +0 -12
  92. package/dist/theme/defaultTheme.d.ts +0 -3
  93. package/dist/theme/defaultTheme.d.ts.map +0 -1
  94. package/dist/theme/defaultTheme.js +0 -20
  95. package/dist/types.d.ts +0 -62
  96. package/dist/types.d.ts.map +0 -1
  97. package/dist/types.js +0 -1
  98. package/dist/voice/useVoiceConnectOrchestration.d.ts +0 -21
  99. package/dist/voice/useVoiceConnectOrchestration.d.ts.map +0 -1
  100. package/dist/voice/useVoiceConnectOrchestration.js +0 -86
  101. package/dist/voice/useVoiceMicState.d.ts +0 -15
  102. package/dist/voice/useVoiceMicState.d.ts.map +0 -1
  103. package/dist/voice/useVoiceMicState.js +0 -94
  104. package/dist/voice/useVoiceSilenceCommit.d.ts +0 -10
  105. package/dist/voice/useVoiceSilenceCommit.d.ts.map +0 -1
  106. package/dist/voice/useVoiceSilenceCommit.js +0 -67
  107. package/dist/voice/useVoiceTranscriptMessages.d.ts +0 -18
  108. package/dist/voice/useVoiceTranscriptMessages.d.ts.map +0 -1
  109. package/dist/voice/useVoiceTranscriptMessages.js +0 -132
  110. package/dist/voice/useWsRealtimeAudio.d.ts +0 -18
  111. package/dist/voice/useWsRealtimeAudio.d.ts.map +0 -1
  112. package/dist/voice/useWsRealtimeAudio.js +0 -102
  113. package/dist/voice/voiceMicConstants.d.ts +0 -4
  114. package/dist/voice/voiceMicConstants.d.ts.map +0 -1
  115. package/dist/voice/voiceMicConstants.js +0 -10
  116. package/dist/voice/voiceUserBubble.d.ts +0 -10
  117. package/dist/voice/voiceUserBubble.d.ts.map +0 -1
  118. package/dist/voice/voiceUserBubble.js +0 -52
  119. package/dist/voice/ws/BrowserWsPcmPlayer.d.ts +0 -23
  120. package/dist/voice/ws/BrowserWsPcmPlayer.d.ts.map +0 -1
  121. package/dist/voice/ws/BrowserWsPcmPlayer.js +0 -137
  122. package/dist/voice/ws/BrowserWsPcmRecorder.d.ts +0 -17
  123. package/dist/voice/ws/BrowserWsPcmRecorder.d.ts.map +0 -1
  124. package/dist/voice/ws/BrowserWsPcmRecorder.js +0 -71
  125. package/dist/voice/ws/float32ToPcm16.d.ts +0 -2
  126. package/dist/voice/ws/float32ToPcm16.d.ts.map +0 -1
  127. package/dist/voice/ws/float32ToPcm16.js +0 -8
  128. package/dist/voice/ws/voiceSilenceConstants.d.ts +0 -5
  129. package/dist/voice/ws/voiceSilenceConstants.d.ts.map +0 -1
  130. package/dist/voice/ws/voiceSilenceConstants.js +0 -4
  131. package/dist/voice/ws/wsRealtimeConstants.d.ts +0 -2
  132. package/dist/voice/ws/wsRealtimeConstants.d.ts.map +0 -1
  133. 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,CA4vGlD,CAAC"}
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
- // aitId is assigned by AIT-Service (UUIDv7) and returned in the response. It must not be
2485
- // minted here: the client cannot guarantee uniqueness, and this value feeds parentAITId, which
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
- // AIT-Service no longer publishes metadata to IPFS: the registry is hash-only, integrity comes
2496
- // from the on-chain commitment, and /api/metadata has been removed. `permissions` now travels
2497
- // in the request body instead of being recovered from a CID, so nothing is uploaded here.
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":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,8CAA8C,CAAC;AAErI,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,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;AACD,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,CACV,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,KAAK,IAAI,KACP,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,WAAW,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC;QAC7B,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,SAAS,CAAC,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC,WAAW,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAAC;IAElD,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAErC,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC,YAAY,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAEhC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IACtC,iFAAiF;IACjF,eAAe,CAAC,EAAE;QAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,yEAAyE;IACzE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,sGAAsG;IACtG,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IAEjC,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oBAAoB,EAAE,iBAAiB,EAAE,CAAC;IAC1C,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,GAAG,CAAC;IAChB,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE;QACZ,IAAI,EAAE,OAAO,CAAC;QACd,IAAI,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;QAC/C,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAChD,eAAe,EAAE,OAAO,CAAC;IAEzB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,eAAe,EAAE,OAAO,EAAE,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,WAAW,EAAE,aAAa,EAAE,CAAC;IAE7B,cAAc,EAAE,OAAO,GAAG,UAAU,CAAC;IAErC,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,OAAO,CAAC;IAGvB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,qBAAqB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,uBAAuB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAChD,aAAa,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,CAAC,YAAY,EAAE,GAAG,KAAK,IAAI,CAAC;IAE7C,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,cAAc,EAAE,CAAC,WAAW,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IACvD,kBAAkB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,sBAAsB,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAGnD,aAAa,EAAE,CAAC,qBAAqB,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;IACxF,YAAY,EAAE,CAAC,sBAAsB,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,YAAY,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IACtD,eAAe,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,uBAAuB,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,UAAU,EAAE,CAAC,sBAAsB,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,IAAI,CAAC;IAE3B,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,OAAO,CAAC;IAE/B,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,cAAc,EAAE,MAAM,IAAI,CAAC;IAG3B,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,eAAe,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC,CAAC;IAC3D,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,sBAAsB,EAAE,OAAO,CAAC;IAChC,cAAc,EAAE,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB"}
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,CAqHtD,CAAC"}
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"}
@@ -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: center !important;
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;AA+F/B,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAgtB7B,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"}
@@ -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: mobileLayout, 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 `
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":"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"}
1
+ {"version":3,"file":"isolatedStyles.d.ts","sourceRoot":"","sources":["../../../src/ui/styles/isolatedStyles.ts"],"names":[],"mappings":"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"}
@@ -240,6 +240,7 @@ export const headerTitle = css `
240
240
  font-weight: 600 !important;
241
241
  color: white !important;
242
242
  font-family: inherit !important;
243
+ white-space: nowrap !important;
243
244
  `;
244
245
  // Header button styles
245
246
  export const headerButton = css `
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bytexbyte/nxtlinq-ai-agent-ui-react-development",
3
- "version": "0.3.4",
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.3.2",
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
- // aitId is assigned by AIT-Service (UUIDv7) and returned in the response. It must not be
2771
- // minted here: the client cannot guarantee uniqueness, and this value feeds parentAITId, which
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
- // AIT-Service no longer publishes metadata to IPFS: the registry is hash-only, integrity comes
2785
- // from the on-chain commitment, and /api/metadata has been removed. `permissions` now travels
2786
- // in the request body instead of being recovered from a CID, so nothing is uploaded here.
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;
@@ -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: center !important;
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
- {actions}
142
+ <div css={css`flex-shrink: 0 !important;`}>
143
+ {actions}
144
+ </div>
139
145
  </div>
140
146
  )}
141
147
  </div>
@@ -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={mobileLayout}
719
+ mobileLayout={headerCompactLayout}
713
720
  isDragging={isDragging}
714
721
  onDragStart={handleDragStart}
715
722
  isVoiceMode={isVoiceMode}
@@ -252,6 +252,7 @@ export const headerTitle = css`
252
252
  font-weight: 600 !important;
253
253
  color: white !important;
254
254
  font-family: inherit !important;
255
+ white-space: nowrap !important;
255
256
  `;
256
257
 
257
258
  // Header button styles
@@ -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"}
@@ -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,3 +0,0 @@
1
- import React from 'react';
2
- export declare function AgentComposer(): React.ReactElement | null;
3
- //# sourceMappingURL=AgentComposer.d.ts.map
@@ -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"}