@modelnex/sdk 0.5.37 → 0.5.39
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/index.js +68 -27
- package/dist/index.mjs +68 -27
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -920,10 +920,7 @@ function useModelNexSocket({
|
|
|
920
920
|
contexts: serializeContexts(contextsRef.current),
|
|
921
921
|
documentation: documentationRef.current ?? void 0,
|
|
922
922
|
domSummary: captureDomSummary(tagsRef.current),
|
|
923
|
-
websiteId
|
|
924
|
-
// All tagged elements across every page — not just what's visible now.
|
|
925
|
-
// The server uses this to pre-search relevant elements for each user query.
|
|
926
|
-
allTaggedElements: tagsRef.current ? Array.from(tagsRef.current.values()) : void 0
|
|
923
|
+
websiteId
|
|
927
924
|
});
|
|
928
925
|
socket.on("connect", () => {
|
|
929
926
|
emitSdkDebugLog("[ModelNex SDK] Connected to agent server", {
|
|
@@ -3308,6 +3305,59 @@ function createTourSocketPool({
|
|
|
3308
3305
|
}
|
|
3309
3306
|
var tourSocketPool = createTourSocketPool();
|
|
3310
3307
|
|
|
3308
|
+
// src/utils/reviewModeToggle.ts
|
|
3309
|
+
function isReviewModeEnabled(devMode, requestedReviewMode) {
|
|
3310
|
+
return Boolean(devMode && requestedReviewMode);
|
|
3311
|
+
}
|
|
3312
|
+
function getReviewModeToggleConfig(playbackState) {
|
|
3313
|
+
const isPaused = playbackState === "paused";
|
|
3314
|
+
return {
|
|
3315
|
+
icon: isPaused ? "\u25B6" : "\u23F8",
|
|
3316
|
+
label: isPaused ? "Continue Workflow" : "Pause for Feedback",
|
|
3317
|
+
shouldResume: isPaused
|
|
3318
|
+
};
|
|
3319
|
+
}
|
|
3320
|
+
function shouldCaptureReviewDraft(isReviewMode, playbackState) {
|
|
3321
|
+
return isReviewMode && playbackState === "paused";
|
|
3322
|
+
}
|
|
3323
|
+
|
|
3324
|
+
// src/utils/tourTransport.ts
|
|
3325
|
+
function compactCaptureEventForTransport(event) {
|
|
3326
|
+
return {
|
|
3327
|
+
id: event.id,
|
|
3328
|
+
type: event.type,
|
|
3329
|
+
order: event.order,
|
|
3330
|
+
timestamp: event.timestamp,
|
|
3331
|
+
url: event.url,
|
|
3332
|
+
label: event.label,
|
|
3333
|
+
tagName: event.tagName,
|
|
3334
|
+
testId: event.testId,
|
|
3335
|
+
fingerprint: event.fingerprint,
|
|
3336
|
+
textContaining: event.textContaining,
|
|
3337
|
+
fieldType: event.fieldType,
|
|
3338
|
+
valueSample: event.valueSample,
|
|
3339
|
+
note: event.note,
|
|
3340
|
+
stepTypeHint: event.stepTypeHint
|
|
3341
|
+
};
|
|
3342
|
+
}
|
|
3343
|
+
function compactTourForTransport(tour) {
|
|
3344
|
+
const capture = tour.capture;
|
|
3345
|
+
if (!capture || typeof capture !== "object") {
|
|
3346
|
+
return tour;
|
|
3347
|
+
}
|
|
3348
|
+
return {
|
|
3349
|
+
...tour,
|
|
3350
|
+
capture: {
|
|
3351
|
+
...capture.experienceType ? { experienceType: capture.experienceType } : {},
|
|
3352
|
+
...capture.onboardingHints ? { onboardingHints: capture.onboardingHints } : {},
|
|
3353
|
+
...capture.generation ? { generation: capture.generation } : {},
|
|
3354
|
+
...Array.isArray(capture.events) ? {
|
|
3355
|
+
events: capture.events.map((event) => compactCaptureEventForTransport(event))
|
|
3356
|
+
} : {}
|
|
3357
|
+
}
|
|
3358
|
+
};
|
|
3359
|
+
}
|
|
3360
|
+
|
|
3311
3361
|
// src/utils/tour-playback-guards.ts
|
|
3312
3362
|
var playbackOwners = /* @__PURE__ */ new Map();
|
|
3313
3363
|
function shouldExecuteTourCommandBatch(isPlaybackActive) {
|
|
@@ -4792,7 +4842,7 @@ function useTourPlayback({
|
|
|
4792
4842
|
}
|
|
4793
4843
|
claimedPlaybackOwnerKeyRef.current = ownerKey;
|
|
4794
4844
|
startRequestedRef.current = true;
|
|
4795
|
-
const shouldReview = Boolean(options?.reviewMode);
|
|
4845
|
+
const shouldReview = isReviewModeEnabled(devModeRef.current, Boolean(options?.reviewMode));
|
|
4796
4846
|
resetCaptionSuppression();
|
|
4797
4847
|
setReviewStatusMessage(null);
|
|
4798
4848
|
setIsReviewMode(shouldReview);
|
|
@@ -4824,7 +4874,7 @@ function useTourPlayback({
|
|
|
4824
4874
|
emitSocketEvent(socketRef.current, "tour:request_start", {
|
|
4825
4875
|
tourId: tour.id,
|
|
4826
4876
|
previewRunId: previewRunIdRef.current,
|
|
4827
|
-
tourContext: tour
|
|
4877
|
+
tourContext: compactTourForTransport(tour)
|
|
4828
4878
|
});
|
|
4829
4879
|
}, [serverUrl, websiteId]);
|
|
4830
4880
|
(0, import_react12.useEffect)(() => {
|
|
@@ -8770,19 +8820,6 @@ function isTourListeningSessionActive(state) {
|
|
|
8770
8820
|
return state.isTourActive || state.isOnboardingActive || Boolean(state.startingExperienceType);
|
|
8771
8821
|
}
|
|
8772
8822
|
|
|
8773
|
-
// src/utils/reviewModeToggle.ts
|
|
8774
|
-
function getReviewModeToggleConfig(playbackState) {
|
|
8775
|
-
const isPaused = playbackState === "paused";
|
|
8776
|
-
return {
|
|
8777
|
-
icon: isPaused ? "\u25B6" : "\u23F8",
|
|
8778
|
-
label: isPaused ? "Continue Workflow" : "Pause for Feedback",
|
|
8779
|
-
shouldResume: isPaused
|
|
8780
|
-
};
|
|
8781
|
-
}
|
|
8782
|
-
function shouldCaptureReviewDraft(isReviewMode, playbackState) {
|
|
8783
|
-
return isReviewMode && playbackState === "paused";
|
|
8784
|
-
}
|
|
8785
|
-
|
|
8786
8823
|
// src/utils/reviewVoiceRouting.ts
|
|
8787
8824
|
function resolveSinglePlaybackTranscriptTarget(snapshot) {
|
|
8788
8825
|
return shouldCaptureReviewDraft(snapshot.isReviewMode, snapshot.playbackState) ? "review_draft" : "playback";
|
|
@@ -9579,6 +9616,7 @@ function ModelNexChatBubble({
|
|
|
9579
9616
|
const tourPlayback = (0, import_react18.useMemo)(() => createPlaybackView("tour"), [createPlaybackView]);
|
|
9580
9617
|
const onboardingPlayback = (0, import_react18.useMemo)(() => createPlaybackView("onboarding"), [createPlaybackView]);
|
|
9581
9618
|
const tourReviewToggle = getReviewModeToggleConfig(tourPlayback.playbackState);
|
|
9619
|
+
const tourReviewModeEnabled = isReviewModeEnabled(devMode, tourPlayback.isReviewMode);
|
|
9582
9620
|
const lastAutoTaggedUrlRef = (0, import_react18.useRef)(null);
|
|
9583
9621
|
const handleAutoTag = (0, import_react18.useCallback)(async () => {
|
|
9584
9622
|
if (!ctx) return;
|
|
@@ -9626,6 +9664,7 @@ function ModelNexChatBubble({
|
|
|
9626
9664
|
}
|
|
9627
9665
|
}, [authoringMode, handleAutoTag, ctx?.extractedElements.length, window.location.pathname]);
|
|
9628
9666
|
const onboardingReviewToggle = getReviewModeToggleConfig(onboardingPlayback.playbackState);
|
|
9667
|
+
const onboardingReviewModeEnabled = isReviewModeEnabled(devMode, onboardingPlayback.isReviewMode);
|
|
9629
9668
|
const pendingPrompt = playbackController.pendingPrompt;
|
|
9630
9669
|
const pendingNotificationType = (onboardingPlayback.pendingTour || tourPlayback.pendingTour)?.notificationType ?? "bubble_card";
|
|
9631
9670
|
const isPlaybackActive = tourPlayback.isActive || onboardingPlayback.isActive;
|
|
@@ -10395,7 +10434,7 @@ function ModelNexChatBubble({
|
|
|
10395
10434
|
]
|
|
10396
10435
|
}
|
|
10397
10436
|
) }),
|
|
10398
|
-
tourPlayback.isActive &&
|
|
10437
|
+
tourPlayback.isActive && tourReviewModeEnabled && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
10399
10438
|
"div",
|
|
10400
10439
|
{
|
|
10401
10440
|
style: {
|
|
@@ -10690,7 +10729,7 @@ function ModelNexChatBubble({
|
|
|
10690
10729
|
] })
|
|
10691
10730
|
] })
|
|
10692
10731
|
] }),
|
|
10693
|
-
|
|
10732
|
+
onboardingReviewModeEnabled && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
10694
10733
|
"div",
|
|
10695
10734
|
{
|
|
10696
10735
|
style: {
|
|
@@ -10796,7 +10835,7 @@ function ModelNexChatBubble({
|
|
|
10796
10835
|
}
|
|
10797
10836
|
),
|
|
10798
10837
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { style: { display: "flex", gap: "8px" }, children: [
|
|
10799
|
-
!
|
|
10838
|
+
!onboardingReviewModeEnabled && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
10800
10839
|
"button",
|
|
10801
10840
|
{
|
|
10802
10841
|
onClick: onboardingPlayback.repeatStep,
|
|
@@ -10808,7 +10847,7 @@ function ModelNexChatBubble({
|
|
|
10808
10847
|
"button",
|
|
10809
10848
|
{
|
|
10810
10849
|
onClick: onboardingPlayback.skipTour,
|
|
10811
|
-
style: { flex:
|
|
10850
|
+
style: { flex: onboardingReviewModeEnabled ? 1 : 0.6, borderRadius: "12px", border: "1px solid rgba(220,38,38,0.18)", background: "#fff5f5", color: "#b91c1c", padding: "11px 14px", cursor: "pointer", fontWeight: 700, fontSize: "13px" },
|
|
10812
10851
|
children: "Exit"
|
|
10813
10852
|
}
|
|
10814
10853
|
)
|
|
@@ -10849,7 +10888,7 @@ function ModelNexChatBubble({
|
|
|
10849
10888
|
) })
|
|
10850
10889
|
] }),
|
|
10851
10890
|
tourCurrentStep && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { borderRadius: "14px", background: TOUR_THEME.card, border: `1px solid ${TOUR_THEME.cardBorder}`, padding: "14px" }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { fontSize: "15px", lineHeight: 1.55 }, children: tourCurrentStep.ask || tourCurrentStep.narration || tourCurrentStep.goal }) }),
|
|
10852
|
-
|
|
10891
|
+
tourReviewModeEnabled && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
10853
10892
|
"div",
|
|
10854
10893
|
{
|
|
10855
10894
|
style: {
|
|
@@ -11303,6 +11342,7 @@ function ModelNexOnboardingPanel({
|
|
|
11303
11342
|
}) {
|
|
11304
11343
|
const ctx = (0, import_react19.useContext)(ModelNexContext);
|
|
11305
11344
|
const serverUrl = ctx?.serverUrl ?? DEFAULT_MODELNEX_SERVER_URL;
|
|
11345
|
+
const devMode = ctx?.devMode ?? false;
|
|
11306
11346
|
const voice = useVoice(serverUrl);
|
|
11307
11347
|
const audioLevels = useAudioLevel(voice.isListening);
|
|
11308
11348
|
const [input, setInput] = (0, import_react19.useState)("");
|
|
@@ -11338,6 +11378,7 @@ function ModelNexOnboardingPanel({
|
|
|
11338
11378
|
handleVoiceInput: playback.handleVoiceInput
|
|
11339
11379
|
});
|
|
11340
11380
|
const reviewToggle = getReviewModeToggleConfig(playback.playbackState);
|
|
11381
|
+
const reviewModeEnabled = isReviewModeEnabled(devMode, playback.isReviewMode);
|
|
11341
11382
|
(0, import_react19.useEffect)(() => {
|
|
11342
11383
|
playbackVoiceRoutingRef.current = {
|
|
11343
11384
|
isReviewMode: playback.isReviewMode,
|
|
@@ -11762,7 +11803,7 @@ function ModelNexOnboardingPanel({
|
|
|
11762
11803
|
] })
|
|
11763
11804
|
] }),
|
|
11764
11805
|
sttError === "not-allowed" && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { fontSize: "12px", color: "#b45309", lineHeight: 1.4, padding: "8px 12px", borderRadius: "10px", background: "#fef3c7" }, children: "Microphone blocked. Allow access in your browser to use voice commands." }),
|
|
11765
|
-
|
|
11806
|
+
reviewModeEnabled && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
11766
11807
|
"div",
|
|
11767
11808
|
{
|
|
11768
11809
|
style: {
|
|
@@ -11873,7 +11914,7 @@ function ModelNexOnboardingPanel({
|
|
|
11873
11914
|
] })
|
|
11874
11915
|
] }),
|
|
11875
11916
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { style: { padding: "0 18px 18px", display: "flex", gap: "8px" }, children: [
|
|
11876
|
-
|
|
11917
|
+
reviewModeEnabled && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
11877
11918
|
"button",
|
|
11878
11919
|
{
|
|
11879
11920
|
type: "button",
|
|
@@ -11900,7 +11941,7 @@ function ModelNexOnboardingPanel({
|
|
|
11900
11941
|
"button",
|
|
11901
11942
|
{
|
|
11902
11943
|
onClick: playback.repeatStep,
|
|
11903
|
-
style: { flex:
|
|
11944
|
+
style: { flex: reviewModeEnabled ? 0.6 : 1, borderRadius: "12px", border: "1px solid rgba(15,23,42,0.12)", background: "#fff", padding: "11px 14px", cursor: "pointer", fontWeight: 600 },
|
|
11904
11945
|
children: "Repeat"
|
|
11905
11946
|
}
|
|
11906
11947
|
),
|
package/dist/index.mjs
CHANGED
|
@@ -709,10 +709,7 @@ function useModelNexSocket({
|
|
|
709
709
|
contexts: serializeContexts(contextsRef.current),
|
|
710
710
|
documentation: documentationRef.current ?? void 0,
|
|
711
711
|
domSummary: captureDomSummary(tagsRef.current),
|
|
712
|
-
websiteId
|
|
713
|
-
// All tagged elements across every page — not just what's visible now.
|
|
714
|
-
// The server uses this to pre-search relevant elements for each user query.
|
|
715
|
-
allTaggedElements: tagsRef.current ? Array.from(tagsRef.current.values()) : void 0
|
|
712
|
+
websiteId
|
|
716
713
|
});
|
|
717
714
|
socket.on("connect", () => {
|
|
718
715
|
emitSdkDebugLog("[ModelNex SDK] Connected to agent server", {
|
|
@@ -3097,6 +3094,59 @@ function createTourSocketPool({
|
|
|
3097
3094
|
}
|
|
3098
3095
|
var tourSocketPool = createTourSocketPool();
|
|
3099
3096
|
|
|
3097
|
+
// src/utils/reviewModeToggle.ts
|
|
3098
|
+
function isReviewModeEnabled(devMode, requestedReviewMode) {
|
|
3099
|
+
return Boolean(devMode && requestedReviewMode);
|
|
3100
|
+
}
|
|
3101
|
+
function getReviewModeToggleConfig(playbackState) {
|
|
3102
|
+
const isPaused = playbackState === "paused";
|
|
3103
|
+
return {
|
|
3104
|
+
icon: isPaused ? "\u25B6" : "\u23F8",
|
|
3105
|
+
label: isPaused ? "Continue Workflow" : "Pause for Feedback",
|
|
3106
|
+
shouldResume: isPaused
|
|
3107
|
+
};
|
|
3108
|
+
}
|
|
3109
|
+
function shouldCaptureReviewDraft(isReviewMode, playbackState) {
|
|
3110
|
+
return isReviewMode && playbackState === "paused";
|
|
3111
|
+
}
|
|
3112
|
+
|
|
3113
|
+
// src/utils/tourTransport.ts
|
|
3114
|
+
function compactCaptureEventForTransport(event) {
|
|
3115
|
+
return {
|
|
3116
|
+
id: event.id,
|
|
3117
|
+
type: event.type,
|
|
3118
|
+
order: event.order,
|
|
3119
|
+
timestamp: event.timestamp,
|
|
3120
|
+
url: event.url,
|
|
3121
|
+
label: event.label,
|
|
3122
|
+
tagName: event.tagName,
|
|
3123
|
+
testId: event.testId,
|
|
3124
|
+
fingerprint: event.fingerprint,
|
|
3125
|
+
textContaining: event.textContaining,
|
|
3126
|
+
fieldType: event.fieldType,
|
|
3127
|
+
valueSample: event.valueSample,
|
|
3128
|
+
note: event.note,
|
|
3129
|
+
stepTypeHint: event.stepTypeHint
|
|
3130
|
+
};
|
|
3131
|
+
}
|
|
3132
|
+
function compactTourForTransport(tour) {
|
|
3133
|
+
const capture = tour.capture;
|
|
3134
|
+
if (!capture || typeof capture !== "object") {
|
|
3135
|
+
return tour;
|
|
3136
|
+
}
|
|
3137
|
+
return {
|
|
3138
|
+
...tour,
|
|
3139
|
+
capture: {
|
|
3140
|
+
...capture.experienceType ? { experienceType: capture.experienceType } : {},
|
|
3141
|
+
...capture.onboardingHints ? { onboardingHints: capture.onboardingHints } : {},
|
|
3142
|
+
...capture.generation ? { generation: capture.generation } : {},
|
|
3143
|
+
...Array.isArray(capture.events) ? {
|
|
3144
|
+
events: capture.events.map((event) => compactCaptureEventForTransport(event))
|
|
3145
|
+
} : {}
|
|
3146
|
+
}
|
|
3147
|
+
};
|
|
3148
|
+
}
|
|
3149
|
+
|
|
3100
3150
|
// src/utils/tour-playback-guards.ts
|
|
3101
3151
|
var playbackOwners = /* @__PURE__ */ new Map();
|
|
3102
3152
|
function shouldExecuteTourCommandBatch(isPlaybackActive) {
|
|
@@ -4581,7 +4631,7 @@ function useTourPlayback({
|
|
|
4581
4631
|
}
|
|
4582
4632
|
claimedPlaybackOwnerKeyRef.current = ownerKey;
|
|
4583
4633
|
startRequestedRef.current = true;
|
|
4584
|
-
const shouldReview = Boolean(options?.reviewMode);
|
|
4634
|
+
const shouldReview = isReviewModeEnabled(devModeRef.current, Boolean(options?.reviewMode));
|
|
4585
4635
|
resetCaptionSuppression();
|
|
4586
4636
|
setReviewStatusMessage(null);
|
|
4587
4637
|
setIsReviewMode(shouldReview);
|
|
@@ -4613,7 +4663,7 @@ function useTourPlayback({
|
|
|
4613
4663
|
emitSocketEvent(socketRef.current, "tour:request_start", {
|
|
4614
4664
|
tourId: tour.id,
|
|
4615
4665
|
previewRunId: previewRunIdRef.current,
|
|
4616
|
-
tourContext: tour
|
|
4666
|
+
tourContext: compactTourForTransport(tour)
|
|
4617
4667
|
});
|
|
4618
4668
|
}, [serverUrl, websiteId]);
|
|
4619
4669
|
useEffect11(() => {
|
|
@@ -8558,19 +8608,6 @@ function isTourListeningSessionActive(state) {
|
|
|
8558
8608
|
return state.isTourActive || state.isOnboardingActive || Boolean(state.startingExperienceType);
|
|
8559
8609
|
}
|
|
8560
8610
|
|
|
8561
|
-
// src/utils/reviewModeToggle.ts
|
|
8562
|
-
function getReviewModeToggleConfig(playbackState) {
|
|
8563
|
-
const isPaused = playbackState === "paused";
|
|
8564
|
-
return {
|
|
8565
|
-
icon: isPaused ? "\u25B6" : "\u23F8",
|
|
8566
|
-
label: isPaused ? "Continue Workflow" : "Pause for Feedback",
|
|
8567
|
-
shouldResume: isPaused
|
|
8568
|
-
};
|
|
8569
|
-
}
|
|
8570
|
-
function shouldCaptureReviewDraft(isReviewMode, playbackState) {
|
|
8571
|
-
return isReviewMode && playbackState === "paused";
|
|
8572
|
-
}
|
|
8573
|
-
|
|
8574
8611
|
// src/utils/reviewVoiceRouting.ts
|
|
8575
8612
|
function resolveSinglePlaybackTranscriptTarget(snapshot) {
|
|
8576
8613
|
return shouldCaptureReviewDraft(snapshot.isReviewMode, snapshot.playbackState) ? "review_draft" : "playback";
|
|
@@ -9367,6 +9404,7 @@ function ModelNexChatBubble({
|
|
|
9367
9404
|
const tourPlayback = useMemo3(() => createPlaybackView("tour"), [createPlaybackView]);
|
|
9368
9405
|
const onboardingPlayback = useMemo3(() => createPlaybackView("onboarding"), [createPlaybackView]);
|
|
9369
9406
|
const tourReviewToggle = getReviewModeToggleConfig(tourPlayback.playbackState);
|
|
9407
|
+
const tourReviewModeEnabled = isReviewModeEnabled(devMode, tourPlayback.isReviewMode);
|
|
9370
9408
|
const lastAutoTaggedUrlRef = useRef13(null);
|
|
9371
9409
|
const handleAutoTag = useCallback12(async () => {
|
|
9372
9410
|
if (!ctx) return;
|
|
@@ -9414,6 +9452,7 @@ function ModelNexChatBubble({
|
|
|
9414
9452
|
}
|
|
9415
9453
|
}, [authoringMode, handleAutoTag, ctx?.extractedElements.length, window.location.pathname]);
|
|
9416
9454
|
const onboardingReviewToggle = getReviewModeToggleConfig(onboardingPlayback.playbackState);
|
|
9455
|
+
const onboardingReviewModeEnabled = isReviewModeEnabled(devMode, onboardingPlayback.isReviewMode);
|
|
9417
9456
|
const pendingPrompt = playbackController.pendingPrompt;
|
|
9418
9457
|
const pendingNotificationType = (onboardingPlayback.pendingTour || tourPlayback.pendingTour)?.notificationType ?? "bubble_card";
|
|
9419
9458
|
const isPlaybackActive = tourPlayback.isActive || onboardingPlayback.isActive;
|
|
@@ -10183,7 +10222,7 @@ function ModelNexChatBubble({
|
|
|
10183
10222
|
]
|
|
10184
10223
|
}
|
|
10185
10224
|
) }),
|
|
10186
|
-
tourPlayback.isActive &&
|
|
10225
|
+
tourPlayback.isActive && tourReviewModeEnabled && /* @__PURE__ */ jsxs3(
|
|
10187
10226
|
"div",
|
|
10188
10227
|
{
|
|
10189
10228
|
style: {
|
|
@@ -10478,7 +10517,7 @@ function ModelNexChatBubble({
|
|
|
10478
10517
|
] })
|
|
10479
10518
|
] })
|
|
10480
10519
|
] }),
|
|
10481
|
-
|
|
10520
|
+
onboardingReviewModeEnabled && /* @__PURE__ */ jsxs3(
|
|
10482
10521
|
"div",
|
|
10483
10522
|
{
|
|
10484
10523
|
style: {
|
|
@@ -10584,7 +10623,7 @@ function ModelNexChatBubble({
|
|
|
10584
10623
|
}
|
|
10585
10624
|
),
|
|
10586
10625
|
/* @__PURE__ */ jsxs3("div", { style: { display: "flex", gap: "8px" }, children: [
|
|
10587
|
-
!
|
|
10626
|
+
!onboardingReviewModeEnabled && /* @__PURE__ */ jsx4(
|
|
10588
10627
|
"button",
|
|
10589
10628
|
{
|
|
10590
10629
|
onClick: onboardingPlayback.repeatStep,
|
|
@@ -10596,7 +10635,7 @@ function ModelNexChatBubble({
|
|
|
10596
10635
|
"button",
|
|
10597
10636
|
{
|
|
10598
10637
|
onClick: onboardingPlayback.skipTour,
|
|
10599
|
-
style: { flex:
|
|
10638
|
+
style: { flex: onboardingReviewModeEnabled ? 1 : 0.6, borderRadius: "12px", border: "1px solid rgba(220,38,38,0.18)", background: "#fff5f5", color: "#b91c1c", padding: "11px 14px", cursor: "pointer", fontWeight: 700, fontSize: "13px" },
|
|
10600
10639
|
children: "Exit"
|
|
10601
10640
|
}
|
|
10602
10641
|
)
|
|
@@ -10637,7 +10676,7 @@ function ModelNexChatBubble({
|
|
|
10637
10676
|
) })
|
|
10638
10677
|
] }),
|
|
10639
10678
|
tourCurrentStep && /* @__PURE__ */ jsx4("div", { style: { borderRadius: "14px", background: TOUR_THEME.card, border: `1px solid ${TOUR_THEME.cardBorder}`, padding: "14px" }, children: /* @__PURE__ */ jsx4("div", { style: { fontSize: "15px", lineHeight: 1.55 }, children: tourCurrentStep.ask || tourCurrentStep.narration || tourCurrentStep.goal }) }),
|
|
10640
|
-
|
|
10679
|
+
tourReviewModeEnabled && /* @__PURE__ */ jsxs3(
|
|
10641
10680
|
"div",
|
|
10642
10681
|
{
|
|
10643
10682
|
style: {
|
|
@@ -11091,6 +11130,7 @@ function ModelNexOnboardingPanel({
|
|
|
11091
11130
|
}) {
|
|
11092
11131
|
const ctx = useContext6(ModelNexContext);
|
|
11093
11132
|
const serverUrl = ctx?.serverUrl ?? DEFAULT_MODELNEX_SERVER_URL;
|
|
11133
|
+
const devMode = ctx?.devMode ?? false;
|
|
11094
11134
|
const voice = useVoice(serverUrl);
|
|
11095
11135
|
const audioLevels = useAudioLevel(voice.isListening);
|
|
11096
11136
|
const [input, setInput] = useState14("");
|
|
@@ -11126,6 +11166,7 @@ function ModelNexOnboardingPanel({
|
|
|
11126
11166
|
handleVoiceInput: playback.handleVoiceInput
|
|
11127
11167
|
});
|
|
11128
11168
|
const reviewToggle = getReviewModeToggleConfig(playback.playbackState);
|
|
11169
|
+
const reviewModeEnabled = isReviewModeEnabled(devMode, playback.isReviewMode);
|
|
11129
11170
|
useEffect18(() => {
|
|
11130
11171
|
playbackVoiceRoutingRef.current = {
|
|
11131
11172
|
isReviewMode: playback.isReviewMode,
|
|
@@ -11550,7 +11591,7 @@ function ModelNexOnboardingPanel({
|
|
|
11550
11591
|
] })
|
|
11551
11592
|
] }),
|
|
11552
11593
|
sttError === "not-allowed" && /* @__PURE__ */ jsx5("div", { style: { fontSize: "12px", color: "#b45309", lineHeight: 1.4, padding: "8px 12px", borderRadius: "10px", background: "#fef3c7" }, children: "Microphone blocked. Allow access in your browser to use voice commands." }),
|
|
11553
|
-
|
|
11594
|
+
reviewModeEnabled && /* @__PURE__ */ jsxs4(
|
|
11554
11595
|
"div",
|
|
11555
11596
|
{
|
|
11556
11597
|
style: {
|
|
@@ -11661,7 +11702,7 @@ function ModelNexOnboardingPanel({
|
|
|
11661
11702
|
] })
|
|
11662
11703
|
] }),
|
|
11663
11704
|
/* @__PURE__ */ jsxs4("div", { style: { padding: "0 18px 18px", display: "flex", gap: "8px" }, children: [
|
|
11664
|
-
|
|
11705
|
+
reviewModeEnabled && /* @__PURE__ */ jsxs4(
|
|
11665
11706
|
"button",
|
|
11666
11707
|
{
|
|
11667
11708
|
type: "button",
|
|
@@ -11688,7 +11729,7 @@ function ModelNexOnboardingPanel({
|
|
|
11688
11729
|
"button",
|
|
11689
11730
|
{
|
|
11690
11731
|
onClick: playback.repeatStep,
|
|
11691
|
-
style: { flex:
|
|
11732
|
+
style: { flex: reviewModeEnabled ? 0.6 : 1, borderRadius: "12px", border: "1px solid rgba(15,23,42,0.12)", background: "#fff", padding: "11px 14px", cursor: "pointer", fontWeight: 600 },
|
|
11692
11733
|
children: "Repeat"
|
|
11693
11734
|
}
|
|
11694
11735
|
),
|