@bytexbyte/nxtlinq-ai-agent-ui-react-development 0.4.0 → 0.4.2
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 +84 -405
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/permissionState.d.ts +53 -0
- package/dist/permissionState.d.ts.map +1 -0
- package/dist/permissionState.js +217 -0
- 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 +13 -4
- package/dist/ui/MessageList.d.ts.map +1 -1
- package/dist/ui/MessageList.js +11 -6
- package/dist/ui/PermissionForm.d.ts.map +1 -1
- package/dist/ui/PermissionForm.js +6 -9
- 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 +92 -437
- package/src/index.ts +5 -0
- package/src/types/ChatBotTypes.ts +2 -6
- package/src/ui/ChatBotHeader.tsx +9 -3
- package/src/ui/ChatBotUI.tsx +14 -5
- package/src/ui/MessageList.tsx +6 -0
- package/src/ui/PermissionForm.tsx +7 -12
- 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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { AIT, RuntimeAITResult } from '@bytexbyte/nxtlinq-ai-agent-core-development';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
export declare function commitProviderRuntime<T, E>(identityRef: React.MutableRefObject<T>, identity: T, environment: E, publishEnvironment: (environment: E) => void): void;
|
|
4
|
+
export declare function useProviderRuntimeCommit<T, E>(identityRef: React.MutableRefObject<T>, identity: T, environment: E, publishEnvironment: (environment: E) => void): void;
|
|
5
|
+
export declare function replaceCurrentMaximumDenyList(persistedDeniedPermissions: readonly string[], maximumPermissions: readonly string[], checkedPermissions: readonly string[]): string[];
|
|
6
|
+
export declare function removeOneDeniedPermission(persistedDeniedPermissions: readonly string[], permission: string): string[];
|
|
7
|
+
export type RuntimeAITContext = {
|
|
8
|
+
controller: string;
|
|
9
|
+
serviceId: string;
|
|
10
|
+
roles?: string[];
|
|
11
|
+
permissionGroup?: string;
|
|
12
|
+
};
|
|
13
|
+
export declare function runtimeAITContextKey(context: RuntimeAITContext): string;
|
|
14
|
+
export declare function runtimeAITSubjectKey(context: RuntimeAITContext): string;
|
|
15
|
+
export declare function runtimeAuthorizationMatchesContext(authorizationContextKey: string | null, renderedContext: RuntimeAITContext | null): boolean;
|
|
16
|
+
export declare class StaleRuntimeAITResponseError extends Error {
|
|
17
|
+
constructor();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Owns the authoritative recompute lifecycle. Only the newest request for the
|
|
21
|
+
* active captured context may write state; its failures clear state first.
|
|
22
|
+
*/
|
|
23
|
+
export declare class RuntimeAITRecomputeCoordinator {
|
|
24
|
+
private activeContextKey;
|
|
25
|
+
private activeContext;
|
|
26
|
+
private generation;
|
|
27
|
+
commitContext(context: RuntimeAITContext | null, invalidate: () => void): boolean;
|
|
28
|
+
getActiveContext(): RuntimeAITContext | null;
|
|
29
|
+
isContextActive(context: RuntimeAITContext): boolean;
|
|
30
|
+
assertContextActive(context: RuntimeAITContext): void;
|
|
31
|
+
run<T>(context: RuntimeAITContext, request: () => Promise<T>, apply: (result: T, context: RuntimeAITContext) => void, clear: () => void): Promise<T>;
|
|
32
|
+
}
|
|
33
|
+
export declare function useRuntimeAITContextCommit(coordinator: RuntimeAITRecomputeCoordinator, context: RuntimeAITContext | null, invalidate: () => void): void;
|
|
34
|
+
export declare function dispatchRuntimeAITCompleteReplacement(coordinator: RuntimeAITRecomputeCoordinator, context: RuntimeAITContext, update: () => Promise<unknown>, converge: (subjectKey: string) => Promise<void>, clear: () => void): Promise<void>;
|
|
35
|
+
/** Serializes reads, complete replacements, and convergence for one persistence subject. */
|
|
36
|
+
export declare class RuntimeAITMutationQueue {
|
|
37
|
+
private readonly tails;
|
|
38
|
+
run<T>(subjectKey: string, mutation: () => Promise<T>): Promise<T>;
|
|
39
|
+
}
|
|
40
|
+
export type RuntimeAuthorizationState = {
|
|
41
|
+
ait: AIT | null;
|
|
42
|
+
maximumPermissions: string[];
|
|
43
|
+
effectivePermissions: string[];
|
|
44
|
+
deniedPermissions: string[];
|
|
45
|
+
selectedRuleId: string | null;
|
|
46
|
+
selectedRuleType: RuntimeAITResult['selectedRuleType'];
|
|
47
|
+
expiresAt: string | null;
|
|
48
|
+
grantActive: boolean;
|
|
49
|
+
unavailable: boolean;
|
|
50
|
+
};
|
|
51
|
+
export declare function runtimeAuthorizationState(result: RuntimeAITResult, controller: string, serviceId: string): RuntimeAuthorizationState;
|
|
52
|
+
export declare function unavailableRuntimeAuthorization(persistedDeniedPermissions: readonly string[]): RuntimeAuthorizationState;
|
|
53
|
+
//# sourceMappingURL=permissionState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionState.d.ts","sourceRoot":"","sources":["../src/permissionState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
const useCommitPhaseEffect = typeof window === 'undefined'
|
|
3
|
+
? React.useEffect
|
|
4
|
+
: React.useLayoutEffect;
|
|
5
|
+
export function commitProviderRuntime(identityRef, identity, environment, publishEnvironment) {
|
|
6
|
+
identityRef.current = identity;
|
|
7
|
+
publishEnvironment(environment);
|
|
8
|
+
}
|
|
9
|
+
export function useProviderRuntimeCommit(identityRef, identity, environment, publishEnvironment) {
|
|
10
|
+
useCommitPhaseEffect(() => {
|
|
11
|
+
commitProviderRuntime(identityRef, identity, environment, publishEnvironment);
|
|
12
|
+
}, [environment, identity, identityRef, publishEnvironment]);
|
|
13
|
+
}
|
|
14
|
+
function stableUnique(values) {
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
const result = [];
|
|
17
|
+
for (const value of values) {
|
|
18
|
+
if (!seen.has(value)) {
|
|
19
|
+
seen.add(value);
|
|
20
|
+
result.push(value);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return result;
|
|
24
|
+
}
|
|
25
|
+
export function replaceCurrentMaximumDenyList(persistedDeniedPermissions, maximumPermissions, checkedPermissions) {
|
|
26
|
+
const maximum = new Set(maximumPermissions);
|
|
27
|
+
const checked = new Set(checkedPermissions);
|
|
28
|
+
for (const permission of checked) {
|
|
29
|
+
if (!maximum.has(permission)) {
|
|
30
|
+
throw new Error(`Permission is outside the authoritative maximum: ${permission}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const retainedOutsideMaximum = persistedDeniedPermissions.filter((permission) => !maximum.has(permission));
|
|
34
|
+
const deniedInsideMaximum = maximumPermissions.filter((permission) => !checked.has(permission));
|
|
35
|
+
return stableUnique([...retainedOutsideMaximum, ...deniedInsideMaximum]);
|
|
36
|
+
}
|
|
37
|
+
export function removeOneDeniedPermission(persistedDeniedPermissions, permission) {
|
|
38
|
+
return stableUnique(persistedDeniedPermissions).filter((value) => value !== permission);
|
|
39
|
+
}
|
|
40
|
+
export function runtimeAITContextKey(context) {
|
|
41
|
+
return JSON.stringify([
|
|
42
|
+
context.controller,
|
|
43
|
+
context.serviceId,
|
|
44
|
+
context.roles === undefined ? null : [...context.roles],
|
|
45
|
+
context.permissionGroup ?? null,
|
|
46
|
+
]);
|
|
47
|
+
}
|
|
48
|
+
export function runtimeAITSubjectKey(context) {
|
|
49
|
+
return JSON.stringify([context.controller, context.serviceId]);
|
|
50
|
+
}
|
|
51
|
+
export function runtimeAuthorizationMatchesContext(authorizationContextKey, renderedContext) {
|
|
52
|
+
return authorizationContextKey === (renderedContext ? runtimeAITContextKey(renderedContext) : null);
|
|
53
|
+
}
|
|
54
|
+
export class StaleRuntimeAITResponseError extends Error {
|
|
55
|
+
constructor() {
|
|
56
|
+
super('Stale runtime AIT response was discarded');
|
|
57
|
+
this.name = 'StaleRuntimeAITResponseError';
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Owns the authoritative recompute lifecycle. Only the newest request for the
|
|
62
|
+
* active captured context may write state; its failures clear state first.
|
|
63
|
+
*/
|
|
64
|
+
export class RuntimeAITRecomputeCoordinator {
|
|
65
|
+
constructor() {
|
|
66
|
+
this.activeContextKey = null;
|
|
67
|
+
this.activeContext = null;
|
|
68
|
+
this.generation = 0;
|
|
69
|
+
}
|
|
70
|
+
commitContext(context, invalidate) {
|
|
71
|
+
const nextKey = context ? runtimeAITContextKey(context) : null;
|
|
72
|
+
if (nextKey === this.activeContextKey) {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
this.activeContextKey = nextKey;
|
|
76
|
+
this.activeContext = context ? {
|
|
77
|
+
controller: context.controller,
|
|
78
|
+
serviceId: context.serviceId,
|
|
79
|
+
...(context.roles !== undefined ? { roles: [...context.roles] } : {}),
|
|
80
|
+
...(context.permissionGroup !== undefined
|
|
81
|
+
? { permissionGroup: context.permissionGroup }
|
|
82
|
+
: {}),
|
|
83
|
+
} : null;
|
|
84
|
+
this.generation += 1;
|
|
85
|
+
invalidate();
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
getActiveContext() {
|
|
89
|
+
return this.activeContext ? {
|
|
90
|
+
controller: this.activeContext.controller,
|
|
91
|
+
serviceId: this.activeContext.serviceId,
|
|
92
|
+
...(this.activeContext.roles !== undefined
|
|
93
|
+
? { roles: [...this.activeContext.roles] }
|
|
94
|
+
: {}),
|
|
95
|
+
...(this.activeContext.permissionGroup !== undefined
|
|
96
|
+
? { permissionGroup: this.activeContext.permissionGroup }
|
|
97
|
+
: {}),
|
|
98
|
+
} : null;
|
|
99
|
+
}
|
|
100
|
+
isContextActive(context) {
|
|
101
|
+
return runtimeAITContextKey(context) === this.activeContextKey;
|
|
102
|
+
}
|
|
103
|
+
assertContextActive(context) {
|
|
104
|
+
if (!this.isContextActive(context)) {
|
|
105
|
+
throw new StaleRuntimeAITResponseError();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
async run(context, request, apply, clear) {
|
|
109
|
+
this.assertContextActive(context);
|
|
110
|
+
const contextKey = runtimeAITContextKey(context);
|
|
111
|
+
const generation = ++this.generation;
|
|
112
|
+
try {
|
|
113
|
+
const result = await request();
|
|
114
|
+
if (generation !== this.generation || contextKey !== this.activeContextKey) {
|
|
115
|
+
throw new StaleRuntimeAITResponseError();
|
|
116
|
+
}
|
|
117
|
+
apply(result, context);
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
if (!(error instanceof StaleRuntimeAITResponseError)
|
|
122
|
+
&& generation === this.generation
|
|
123
|
+
&& contextKey === this.activeContextKey) {
|
|
124
|
+
clear();
|
|
125
|
+
}
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
export function useRuntimeAITContextCommit(coordinator, context, invalidate) {
|
|
131
|
+
const contextKey = context ? runtimeAITContextKey(context) : null;
|
|
132
|
+
useCommitPhaseEffect(() => {
|
|
133
|
+
coordinator.commitContext(context, invalidate);
|
|
134
|
+
}, [contextKey, coordinator, invalidate]);
|
|
135
|
+
}
|
|
136
|
+
export async function dispatchRuntimeAITCompleteReplacement(coordinator, context, update, converge, clear) {
|
|
137
|
+
const subjectKey = runtimeAITSubjectKey(context);
|
|
138
|
+
coordinator.assertContextActive(context);
|
|
139
|
+
let updateFailed = false;
|
|
140
|
+
let updateError;
|
|
141
|
+
try {
|
|
142
|
+
await update();
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
updateFailed = true;
|
|
146
|
+
updateError = error;
|
|
147
|
+
}
|
|
148
|
+
try {
|
|
149
|
+
await converge(subjectKey);
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
if (!updateFailed) {
|
|
153
|
+
throw error;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (updateFailed) {
|
|
157
|
+
if (!coordinator.isContextActive(context)) {
|
|
158
|
+
throw new StaleRuntimeAITResponseError();
|
|
159
|
+
}
|
|
160
|
+
clear();
|
|
161
|
+
throw updateError;
|
|
162
|
+
}
|
|
163
|
+
coordinator.assertContextActive(context);
|
|
164
|
+
}
|
|
165
|
+
/** Serializes reads, complete replacements, and convergence for one persistence subject. */
|
|
166
|
+
export class RuntimeAITMutationQueue {
|
|
167
|
+
constructor() {
|
|
168
|
+
this.tails = new Map();
|
|
169
|
+
}
|
|
170
|
+
async run(subjectKey, mutation) {
|
|
171
|
+
const previous = this.tails.get(subjectKey) ?? Promise.resolve();
|
|
172
|
+
const result = previous.catch(() => undefined).then(mutation);
|
|
173
|
+
const tail = result.then(() => undefined, () => undefined);
|
|
174
|
+
this.tails.set(subjectKey, tail);
|
|
175
|
+
try {
|
|
176
|
+
return await result;
|
|
177
|
+
}
|
|
178
|
+
finally {
|
|
179
|
+
if (this.tails.get(subjectKey) === tail) {
|
|
180
|
+
this.tails.delete(subjectKey);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
export function runtimeAuthorizationState(result, controller, serviceId) {
|
|
186
|
+
return {
|
|
187
|
+
ait: result.aitId
|
|
188
|
+
? {
|
|
189
|
+
aitId: result.aitId,
|
|
190
|
+
controller,
|
|
191
|
+
serviceId,
|
|
192
|
+
metadata: { permissions: [...result.effectivePermissions] },
|
|
193
|
+
}
|
|
194
|
+
: null,
|
|
195
|
+
maximumPermissions: [...result.maximumPermissions],
|
|
196
|
+
effectivePermissions: [...result.effectivePermissions],
|
|
197
|
+
deniedPermissions: [...result.deniedPermissions],
|
|
198
|
+
selectedRuleId: result.selectedRuleId,
|
|
199
|
+
selectedRuleType: result.selectedRuleType,
|
|
200
|
+
expiresAt: result.expiresAt,
|
|
201
|
+
grantActive: result.grantActive,
|
|
202
|
+
unavailable: false,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
export function unavailableRuntimeAuthorization(persistedDeniedPermissions) {
|
|
206
|
+
return {
|
|
207
|
+
ait: null,
|
|
208
|
+
maximumPermissions: [],
|
|
209
|
+
effectivePermissions: [],
|
|
210
|
+
deniedPermissions: [...persistedDeniedPermissions],
|
|
211
|
+
selectedRuleId: null,
|
|
212
|
+
selectedRuleType: 'none',
|
|
213
|
+
expiresAt: null,
|
|
214
|
+
grantActive: false,
|
|
215
|
+
unavailable: true,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
@@ -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;AAsG/B,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAktB7B,CAAC"}
|
package/dist/ui/ChatBotUI.js
CHANGED
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/reac
|
|
|
2
2
|
/** @jsxImportSource @emotion/react */
|
|
3
3
|
import { css } from '@emotion/react';
|
|
4
4
|
import * as React from 'react';
|
|
5
|
+
import { hasRecordedWalletVerification } from '@bytexbyte/nxtlinq-ai-agent-core-development';
|
|
5
6
|
import { useDraggable, useLocalStorage, useResizable, walletTextUtils } from '@bytexbyte/nxtlinq-ai-agent-web-development';
|
|
6
7
|
import { useChatBot } from '../context/ChatBotContext';
|
|
7
8
|
import { ChatBotHeader } from './ChatBotHeader';
|
|
@@ -14,6 +15,12 @@ import { chatWindow, errorToast, floatingButton, idvBanner, idvBannerText, idvBa
|
|
|
14
15
|
const MOBILE_BREAKPOINT = 768;
|
|
15
16
|
const MOBILE_EDGE_MARGIN = 12;
|
|
16
17
|
const MOBILE_FAB_POSITION = { right: MOBILE_EDGE_MARGIN, bottom: MOBILE_EDGE_MARGIN };
|
|
18
|
+
// Below this widget width, the desktop header's single-row layout (title + model/PII chips +
|
|
19
|
+
// voice/settings/close actions, all in one line) has no room left and the chips start
|
|
20
|
+
// overlapping the actions. The user can drag the window this narrow (MIN_WIDTH is 320px) even
|
|
21
|
+
// on a wide desktop viewport, so this must be driven by the widget's own width, not just
|
|
22
|
+
// window.innerWidth — falling back to the same stacked layout used on mobile viewports.
|
|
23
|
+
const HEADER_COMPACT_WIDTH = 420;
|
|
17
24
|
const isMobileViewport = () => typeof window !== 'undefined' && window.innerWidth <= MOBILE_BREAKPOINT;
|
|
18
25
|
// Toast Notification Component
|
|
19
26
|
const ToastNotification = ({ type, message, onClose, isChatOpen = false }) => {
|
|
@@ -59,6 +66,7 @@ export const ChatBotUI = () => {
|
|
|
59
66
|
const { dimensions, handleResizeStart, positionAdjustment } = useResizable(positionRef);
|
|
60
67
|
const { position, handleDragStart, isDragging, updatePosition } = useDraggable(dimensions);
|
|
61
68
|
const [mobileLayout, setMobileLayout] = React.useState(isMobileViewport);
|
|
69
|
+
const headerCompactLayout = mobileLayout || dimensions.width < HEADER_COMPACT_WIDTH;
|
|
62
70
|
React.useEffect(() => {
|
|
63
71
|
if (typeof window === 'undefined')
|
|
64
72
|
return;
|
|
@@ -86,7 +94,8 @@ export const ChatBotUI = () => {
|
|
|
86
94
|
// Check if there's a berifyme token in URL (indicating recent berifyme verification)
|
|
87
95
|
const urlParams = new URLSearchParams(window.location.search);
|
|
88
96
|
const hasBerifymeToken = urlParams.get('token') && urlParams.get('method') === 'berifyme';
|
|
89
|
-
const
|
|
97
|
+
const hasRecordedVerification = Boolean(walletInfo?.id)
|
|
98
|
+
&& hasRecordedWalletVerification(walletInfo);
|
|
90
99
|
// Helper function to update IDV suggestion state based on storage value
|
|
91
100
|
const updateIDVSuggestionState = React.useCallback((dismissedValue) => {
|
|
92
101
|
// Clear any existing countdown interval
|
|
@@ -143,14 +152,14 @@ export const ChatBotUI = () => {
|
|
|
143
152
|
const shouldShowBanner = hitAddress &&
|
|
144
153
|
!props.requireWalletIDVVerification &&
|
|
145
154
|
!hasBerifymeToken &&
|
|
146
|
-
!
|
|
155
|
+
!hasRecordedVerification &&
|
|
147
156
|
!isNeedSignInWithWallet;
|
|
148
157
|
if (shouldShowBanner) {
|
|
149
158
|
const timer = setTimeout(() => {
|
|
150
159
|
const shouldShowBannerAfterDelay = hitAddress &&
|
|
151
160
|
!props.requireWalletIDVVerification &&
|
|
152
161
|
!hasBerifymeToken &&
|
|
153
|
-
!
|
|
162
|
+
!hasRecordedVerification &&
|
|
154
163
|
!isNeedSignInWithWallet;
|
|
155
164
|
if (shouldShowBannerAfterDelay) {
|
|
156
165
|
const dismissed = localStorage.getItem('idv-suggestion-dismissed');
|
|
@@ -523,7 +532,7 @@ export const ChatBotUI = () => {
|
|
|
523
532
|
left: ${MOBILE_EDGE_MARGIN}px !important;
|
|
524
533
|
top: ${MOBILE_EDGE_MARGIN}px !important;
|
|
525
534
|
` : ''}
|
|
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:
|
|
535
|
+
`], 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 && !hasRecordedVerification && (_jsxs("div", { "data-idv-banner": true, css: idvBanner, children: [_jsx("div", { css: css `
|
|
527
536
|
font-size: 20px !important;
|
|
528
537
|
color: #f39c12 !important;
|
|
529
538
|
`, 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":"MessageList.d.ts","sourceRoot":"","sources":["../../src/ui/MessageList.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuT/B,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../src/ui/MessageList.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuT/B,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAyc/B,CAAC"}
|
package/dist/ui/MessageList.js
CHANGED
|
@@ -231,7 +231,7 @@ const PiiStatusHeader = React.memo(({ message }) => {
|
|
|
231
231
|
return (_jsxs("div", { css: piiHeaderRow, children: [_jsx(ShieldIcon, {}), _jsx("span", { children: "\u2713 Protected" })] }));
|
|
232
232
|
});
|
|
233
233
|
export const MessageList = () => {
|
|
234
|
-
const { messages, isLoading, isTtsProcessing, requiresGesture, retryTtsWithGesture, connectWallet, signInWallet, hitAddress, isAutoConnecting, isNeedSignInWithWallet, enableAIT, isAITLoading, isAITEnabling, sendMessage, permissions, availableModels, serviceId, piiDisplayMode, } = useChatBot();
|
|
234
|
+
const { messages, isLoading, isTtsProcessing, requiresGesture, retryTtsWithGesture, connectWallet, signInWallet, hitAddress, isAutoConnecting, isNeedSignInWithWallet, enableAIT, isAITLoading, isAITEnabling, sendMessage, permissions, availableModels, serviceId, piiDisplayMode, setShowPermissionForm, setIsPermissionFormOpen, } = useChatBot();
|
|
235
235
|
const messagesEndRef = React.useRef(null);
|
|
236
236
|
const scrollToBottom = () => {
|
|
237
237
|
messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' });
|
|
@@ -266,6 +266,10 @@ export const MessageList = () => {
|
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
|
+
else if (buttonType === 'verifyWallet') {
|
|
270
|
+
setIsPermissionFormOpen(true);
|
|
271
|
+
setShowPermissionForm(true);
|
|
272
|
+
}
|
|
269
273
|
else if (buttonType === 'continue') {
|
|
270
274
|
const lastUserMsg = [...messages].reverse().find(m => m.role === 'user');
|
|
271
275
|
if (lastUserMsg && lastUserMsg.content) {
|
|
@@ -420,11 +424,12 @@ export const MessageList = () => {
|
|
|
420
424
|
chatbotButton, children: isAutoConnecting ? 'Connecting...' :
|
|
421
425
|
message.button === 'connectWallet' ? (Boolean(hitAddress) ? 'Connected' : walletTextUtils.getWalletText('Connect Wallet', serviceId)) :
|
|
422
426
|
message.button === 'signIn' ? (!isNeedSignInWithWallet ? 'Signed In' : 'Sign In') :
|
|
423
|
-
message.button === '
|
|
424
|
-
message.button === '
|
|
425
|
-
|
|
426
|
-
(
|
|
427
|
-
|
|
427
|
+
message.button === 'verifyWallet' ? 'Verify Wallet' :
|
|
428
|
+
message.button === 'continue' ? 'Continue' :
|
|
429
|
+
message.button === 'enableAIT' ?
|
|
430
|
+
((isAITLoading || isAITEnabling) ? 'Enabling...' :
|
|
431
|
+
(message.metadata?.requiredPermission && permissions.includes(message.metadata.requiredPermission)) ? 'AIT Enabled' : 'Enable AIT Permissions') :
|
|
432
|
+
message.button }) }))] }), showPiiHeader && message.piiStatus === 'complete' && entityCount > 0 && (_jsxs("div", { css: css `text-align: right !important;`, children: [_jsxs("button", { css: piiBelowBubbleBtn, onClick: () => setExpandedPiiMsgId(v => v === message.id ? null : message.id), type: "button", children: [_jsx(GreenCheckIcon, {}), entityCount, " item", entityCount !== 1 ? 's' : '', " protected ", isPiiExpanded ? '▴' : '▸'] }), isPiiExpanded && (_jsx("div", { css: piiEntityPanel, children: Object.entries(relevantMapping).map(([original, token]) => (_jsxs("div", { css: piiEntityRowStyle, children: [_jsx("span", { css: piiOriginalStyle, children: original }), _jsx("span", { css: piiArrowStyle, children: "\u2192" }), _jsx("span", { css: piiTokenMappingStyle, children: token })] }, original))) }))] })), message.role === 'assistant' && message.metadata?.model && (_jsxs("div", { css: css `
|
|
428
433
|
${modelIndicator}
|
|
429
434
|
gap: 8px !important;
|
|
430
435
|
`, children: [_jsxs("div", { css: modelBadge, children: [_jsx("span", { css: modelDot }), getModelDisplayName(message.metadata.model)] }), (isTtsProcessing || requiresGesture) && !isLoading && message.id === messages[messages.length - 1]?.id && (_jsxs("div", { css: css `
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionForm.d.ts","sourceRoot":"","sources":["../../src/ui/PermissionForm.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"PermissionForm.d.ts","sourceRoot":"","sources":["../../src/ui/PermissionForm.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAsmBxD,CAAC"}
|
|
@@ -4,6 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { css } from '@emotion/react';
|
|
5
5
|
import { useChatBot } from '../context/ChatBotContext';
|
|
6
6
|
import { walletTextUtils } from '@bytexbyte/nxtlinq-ai-agent-web-development';
|
|
7
|
+
import { hasRecordedWalletVerification } from '@bytexbyte/nxtlinq-ai-agent-core-development';
|
|
7
8
|
import { actionButton } from './styles/isolatedStyles';
|
|
8
9
|
export const PermissionForm = ({ onClose }) => {
|
|
9
10
|
const { hitAddress, permissions, setPermissions, setIsDisabled, onSave, onConnectWallet, onSignIn, isNeedSignInWithWallet, walletInfo, onVerifyWallet, serviceId, nxtlinqApi, permissionGroup, isAITLoading, isWalletLoading = false, refreshAIT, props } = useChatBot();
|
|
@@ -73,12 +74,10 @@ export const PermissionForm = ({ onClose }) => {
|
|
|
73
74
|
}, [hitAddress]);
|
|
74
75
|
// Check if wallet IDV verification is required based on configuration
|
|
75
76
|
const requireWalletIDVVerification = props.requireWalletIDVVerification ?? true; // Default to true
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// 2. IDV verification is required AND wallet is verified but not with Berifyme
|
|
81
|
-
const shouldShowVerificationPrompt = requireWalletIDVVerification && (!isWalletVerified || !isWalletVerifiedWithBerifyme);
|
|
77
|
+
// Any recorded verification source is valid. Custom additionally requires
|
|
78
|
+
// its explicit username evidence so synthetic AIT-provisioned rows do not count.
|
|
79
|
+
const shouldShowVerificationPrompt = requireWalletIDVVerification
|
|
80
|
+
&& (!walletInfo?.id || !hasRecordedWalletVerification(walletInfo));
|
|
82
81
|
const handleSave = async () => {
|
|
83
82
|
setIsSaving(true);
|
|
84
83
|
try {
|
|
@@ -309,9 +308,7 @@ export const PermissionForm = ({ onClose }) => {
|
|
|
309
308
|
margin-bottom: 24px !important;
|
|
310
309
|
font-size: 16px !important;
|
|
311
310
|
color: #666 !important;
|
|
312
|
-
`, children:
|
|
313
|
-
? walletTextUtils.getWalletText('Your wallet is verified with custom method, but Berify.me verification is required to continue.', serviceId)
|
|
314
|
-
: walletTextUtils.getWalletText('Please verify your wallet with Berify.me to continue', serviceId) }), _jsx("button", { onClick: () => onVerifyWallet('berifyme'), css: css `
|
|
311
|
+
`, children: walletTextUtils.getWalletText('Please verify your wallet identity to continue', serviceId) }), _jsx("button", { onClick: () => onVerifyWallet('berifyme'), css: css `
|
|
315
312
|
${actionButton}
|
|
316
313
|
padding: 12px 24px !important;
|
|
317
314
|
background-color: #007bff !important;
|
|
@@ -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.4.
|
|
3
|
+
"version": "0.4.2",
|
|
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",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
"react-dom": ">=18.0.0"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@bytexbyte/nxtlinq-ai-agent-core-development": "0.
|
|
42
|
-
"@bytexbyte/nxtlinq-ai-agent-web-development": "0.
|
|
41
|
+
"@bytexbyte/nxtlinq-ai-agent-core-development": "2.0.1",
|
|
42
|
+
"@bytexbyte/nxtlinq-ai-agent-web-development": "1.0.1",
|
|
43
43
|
"@emotion/react": "^11.14.0",
|
|
44
44
|
"@emotion/styled": "^11.14.1",
|
|
45
45
|
"@mui/icons-material": "^7.2.0",
|