guideai-app 0.5.4-2 → 0.5.4-3
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/README.md +64 -1
- package/dist/GuideAI.d.ts +2 -5
- package/dist/GuideAI.js +1 -1
- package/dist/GuideAI.js.LICENSE.txt +2 -17
- package/dist/components/DeveloperTools.d.ts +5 -3
- package/dist/components/Microphone.d.ts +10 -1
- package/dist/components/PlaybackLockDebugOverlayRoot.d.ts +1 -1
- package/dist/components/SessionRatingPopup.d.ts +16 -0
- package/dist/components/SubtitleInputBar.d.ts +23 -0
- package/dist/components/SubtitleSettingsMenu.d.ts +9 -0
- package/dist/components/TranscriptBox.d.ts +11 -12
- package/dist/components/TranscriptSessionMicLevels.d.ts +8 -0
- package/dist/components/TranscriptStudioChrome.d.ts +8 -7
- package/dist/components/TranscriptTextInput.d.ts +4 -12
- package/dist/components/TranscriptToolbar.d.ts +3 -1
- package/dist/components/TranscriptWorkflowDrawer.d.ts +5 -7
- package/dist/contexts/GuideAIThemeContext.d.ts +13 -0
- package/dist/devtools/DeveloperToolsShell.d.ts +1 -1
- package/dist/devtools/TranscriptDeveloperToolsMenuItems.d.ts +45 -0
- package/dist/devtools/TranscriptUiDevtoolsPanel.d.ts +10 -0
- package/dist/devtools/adminToolDiagnostics/AdminToolDiagnosticsPanel.d.ts +1 -1
- package/dist/devtools/developerToolPanelId.d.ts +1 -1
- package/dist/devtools/devtoolsAdminPortalLinks.d.ts +11 -0
- package/dist/devtools/devtoolsAuth/DevtoolsAuthContext.d.ts +14 -0
- package/dist/devtools/devtoolsAuth/DevtoolsLoginModal.d.ts +13 -0
- package/dist/devtools/devtoolsAuth/devtoolsAccessTrigger.d.ts +9 -0
- package/dist/devtools/devtoolsAuth/devtoolsAdminApi.d.ts +13 -0
- package/dist/devtools/devtoolsAuth/devtoolsLoginModalStyles.d.ts +1 -0
- package/dist/devtools/devtoolsAuth/devtoolsPortalLogin.d.ts +15 -0
- package/dist/devtools/devtoolsAuth/devtoolsSessionStorage.d.ts +4 -0
- package/dist/devtools/devtoolsAuth/index.d.ts +9 -0
- package/dist/devtools/devtoolsAuth/types.d.ts +21 -0
- package/dist/devtools/devtoolsAuth/useDevtoolsAccess.d.ts +33 -0
- package/dist/devtools/devtoolsThemePreference.d.ts +3 -0
- package/dist/devtools/excavator/ExcavatorPanel.d.ts +17 -0
- package/dist/devtools/excavator/excavatorPanelStyles.d.ts +5 -0
- package/dist/devtools/excavator/excavatorSse.d.ts +6 -0
- package/dist/devtools/learn/LearnCaptureChrome.stub.d.ts +3 -0
- package/dist/devtools/learn/LearnModePanel.d.ts +18 -0
- package/dist/devtools/learn/LearnModePanel.stub.d.ts +3 -0
- package/dist/devtools/learn/LearnOrchestrationHost.d.ts +52 -0
- package/dist/devtools/learn/injectLearnModeStyles.d.ts +2 -0
- package/dist/devtools/learn/learnCaptureChrome.d.ts +33 -0
- package/dist/devtools/learn/learnCaptureLayout.d.ts +26 -0
- package/dist/devtools/learn/learnCaptureToolbar.d.ts +27 -0
- package/dist/devtools/learn/learnClarifyKickoff.d.ts +6 -0
- package/dist/devtools/learn/learnLiteTranscript.d.ts +22 -0
- package/dist/devtools/learn/learnModeStyles.d.ts +5 -0
- package/dist/devtools/learn/learnModeTypes.d.ts +5 -0
- package/dist/devtools/learn/learnOrchestrationStub.d.ts +5 -0
- package/dist/devtools/learn/learnPanelSyncFieldsEqual.d.ts +3 -0
- package/dist/devtools/learn/learnRealtimeSession.d.ts +10 -0
- package/dist/devtools/learn/learnRefBag.d.ts +41 -0
- package/dist/devtools/learn/learnSessionStorage.d.ts +23 -0
- package/dist/devtools/learn/learnWorkspaceContext.d.ts +5 -0
- package/dist/devtools/learn/loadLearnOrchestration.d.ts +10 -0
- package/dist/devtools/learn/useLearnCaptureDuration.d.ts +4 -0
- package/dist/devtools/learn/useLearnClickCapture.d.ts +9 -0
- package/dist/devtools/learn/useLearnMode.d.ts +47 -0
- package/dist/devtools/learn/useLearnMode.stub.d.ts +3 -0
- package/dist/devtools/panelLayout.d.ts +6 -0
- package/dist/devtools/transcriptDevtoolsMenuProps.d.ts +28 -0
- package/dist/devtools/transcriptMoreMenu/DeveloperToolsAdminPortalFlyout.d.ts +20 -0
- package/dist/devtools/transcriptMoreMenu/DeveloperToolsLoggerFlyout.d.ts +16 -0
- package/dist/devtools/transcriptMoreMenu/DeveloperToolsMicPresetFlyout.d.ts +22 -0
- package/dist/devtools/transcriptMoreMenu/TranscriptDeveloperToolsMenuItems.d.ts +21 -0
- package/dist/devtools/transcriptMoreMenu/TranscriptDeveloperToolsThemeFlyout.d.ts +13 -0
- package/dist/devtools/transcriptMoreMenu/TranscriptMoreMenuDevtools.d.ts +27 -0
- package/dist/devtools/transcriptMoreMenu/devtoolsFlyoutTypes.d.ts +1 -0
- package/dist/devtools/transcriptMoreMenu/index.d.ts +2 -0
- package/dist/devtools/transcriptMoreMenu/readWindowGuideAILogger.d.ts +12 -0
- package/dist/devtools/transcriptMoreMenu/useTranscriptMoreMenuDebugFlyouts.d.ts +24 -0
- package/dist/devtools/useDraggableDialog.d.ts +8 -1
- package/dist/devtools/useGuideDeveloperTools.d.ts +16 -7
- package/dist/devtools/useGuideDevtoolsIntegration.d.ts +51 -0
- package/dist/devtools/workflowTester/WorkflowTesterPanel.d.ts +4 -28
- package/dist/devtools/workflowTester/WorkflowTesterPanel.stub.d.ts +3 -0
- package/dist/devtools/workflowTester/index.d.ts +1 -2
- package/dist/devtools/workflowTester/useWorkflowSimulationController.d.ts +12 -0
- package/dist/devtools/workflowTester/useWorkflowSimulationRun.d.ts +47 -0
- package/dist/devtools/workflowTester/workflowSimulationController.d.ts +31 -0
- package/dist/devtools/workflowTester/workflowSimulationDevtoolsApi.d.ts +51 -0
- package/dist/devtools/workflowTester/workflowSimulationRunner.d.ts +46 -0
- package/dist/devtools/workflowTester/workflowSimulationRunnerAi.d.ts +20 -0
- package/dist/devtools/workflowTester/workflowSimulationSessionRestore.d.ts +21 -0
- package/dist/devtools/workflowTester/workflowSimulationTurnState.d.ts +20 -0
- package/dist/devtools/workflowTester/workflowSimulationTypes.d.ts +26 -0
- package/dist/devtools/workflowTester/workflowSimulationWaits.d.ts +55 -0
- package/dist/devtools/workflowTester/workflowTesterPanel.types.d.ts +25 -0
- package/dist/devtools/workflowTester/workflowTesterRunSessionStorage.d.ts +43 -0
- package/dist/devtools/workflowTester/workflowTesterWorkspaceBridge.d.ts +4 -2
- package/dist/hooks/useConversationSession.d.ts +14 -2
- package/dist/hooks/useGuideAIMutePipeline.d.ts +1 -0
- package/dist/hooks/useGuideAIThemeState.d.ts +6 -0
- package/dist/hooks/useMicMute.d.ts +1 -0
- package/dist/hooks/useSessionRating.d.ts +25 -0
- package/dist/hooks/useSubtitleAppearancePrefs.d.ts +5 -0
- package/dist/hooks/useThemePortalProps.d.ts +4 -0
- package/dist/hooks/useTranscriptChrome.d.ts +7 -2
- package/dist/hooks/useTranscriptDisplayMode.d.ts +6 -0
- package/dist/hooks/useTranscriptPanelDragResize.d.ts +47 -0
- package/dist/hooks/useWebRTC.d.ts +3 -0
- package/dist/hooks/useWidgetWorkflowSession.d.ts +2 -0
- package/dist/hooks/useWorkflowTesterOverlay.d.ts +7 -0
- package/dist/hooks/useWorkspaceCatalog.d.ts +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/playwrightSimulationHarness.d.ts +16 -0
- package/dist/playwrightSimulationHarness.js +1 -0
- package/dist/playwrightToolHarness.js +1 -1
- package/dist/sessionRating.defaults.d.ts +4 -0
- package/dist/sessionRatingPrompts.d.ts +3 -0
- package/dist/staticContext/useStaticContext.d.ts +0 -1
- package/dist/stubs/workspaces.d.ts +2 -2
- package/dist/styles/guideAIThemeTokens.d.ts +5 -0
- package/dist/styles/guideaiTestsiteWidgetTheme.d.ts +6 -0
- package/dist/themes/buildThemeCss.d.ts +8 -0
- package/dist/themes/guideAIThemeIds.d.ts +5 -0
- package/dist/themes/presetThemes.d.ts +10 -0
- package/dist/themes/syncGuideAITheme.d.ts +2 -0
- package/dist/themes/themeTokens.types.d.ts +37 -0
- package/dist/types/GuideAI.types.d.ts +22 -3
- package/dist/utils/api.d.ts +3 -0
- package/dist/utils/api.learn.d.ts +18 -0
- package/dist/utils/conversationContextSwitch.d.ts +41 -0
- package/dist/utils/conversationManager.d.ts +41 -0
- package/dist/utils/dataChannel.d.ts +8 -0
- package/dist/utils/dataChannelHelpers.d.ts +10 -0
- package/dist/utils/guideaiMirroredStorageKeys.d.ts +33 -0
- package/dist/utils/lastSystemToolCall.d.ts +2 -1
- package/dist/utils/localStorageHelper.d.ts +46 -21
- package/dist/utils/messageStorage.d.ts +0 -7
- package/dist/utils/parseWorkspaceSlugList.d.ts +12 -0
- package/dist/utils/pathIncludesAnyRef.d.ts +12 -0
- package/dist/utils/sessionRatingThrottle.d.ts +3 -0
- package/dist/utils/themeRegistry.d.ts +14 -0
- package/dist/utils/tools/descriptionToHighlightSelector.d.ts +1 -1
- package/dist/utils/tools/docToForm.d.ts +2 -2
- package/dist/utils/tools/elementToBestInteractionSelector.d.ts +10 -0
- package/dist/utils/transcriptDisplayModePref.d.ts +4 -0
- package/dist/utils/transcriptFloatGeometry.d.ts +78 -0
- package/dist/utils/transcriptSubtitleUiPref.d.ts +5 -0
- package/dist/utils/webrtcConnection.d.ts +5 -0
- package/dist/utils/widgetBearerStorage.d.ts +2 -2
- package/dist/utils/workspaceCatalog.d.ts +13 -2
- package/dist/utils/workspaceCatalogFatal.d.ts +4 -0
- package/dist/visualContext/defaultProvider.d.ts +4 -10
- package/dist/visualContext/visualContextCaptureLock.d.ts +17 -0
- package/package.json +2 -2
|
@@ -21,6 +21,7 @@ export interface UseGuideAIMutePipelineParams {
|
|
|
21
21
|
export declare function useGuideAIMutePipeline({ hooks, isConversationActive, conversationManagerRef, dataChannelManagerRef, mediaStreamRef, audioElementRef, hasMic, isDataChannelOpen, }: UseGuideAIMutePipelineParams): {
|
|
22
22
|
isMuted: boolean;
|
|
23
23
|
handleToggleMute: () => void;
|
|
24
|
+
applyMicMuted: (muted: boolean) => void;
|
|
24
25
|
applyMuteStateToMediaStreamTracks: () => void;
|
|
25
26
|
isAssistantPlaybackMuted: boolean;
|
|
26
27
|
handleToggleAssistantPlaybackMute: () => void;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { GuideAIThemeContextValue } from '../contexts/GuideAIThemeContext';
|
|
2
|
+
import type { GuideAIThemeId } from '../themes/guideAIThemeIds';
|
|
3
|
+
export declare function useGuideAIThemeState(themeProp?: GuideAIThemeId | null): {
|
|
4
|
+
activeThemeId: GuideAIThemeId | null;
|
|
5
|
+
themeContextValue: GuideAIThemeContextValue;
|
|
6
|
+
};
|
|
@@ -18,5 +18,6 @@ export interface UseMicMuteParams {
|
|
|
18
18
|
export declare function useMicMute({ hooks, mediaStreamRef, conversationManagerRef, hasMic, isConversationActive, onMicManuallyUnmuted, }: UseMicMuteParams): {
|
|
19
19
|
isMuted: boolean;
|
|
20
20
|
handleToggleMute: () => void;
|
|
21
|
+
applyMicMuted: (muted: boolean) => void;
|
|
21
22
|
applyMuteStateToMediaStreamTracks: () => void;
|
|
22
23
|
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { MutableRefObject } from 'react';
|
|
2
|
+
import type { ReactHooks } from '../utils/reactHooks';
|
|
3
|
+
import type { ConversationManager } from '../utils/conversationManager';
|
|
4
|
+
export type UseSessionRatingParams = {
|
|
5
|
+
hooks: ReactHooks;
|
|
6
|
+
conversationManagerRef: MutableRefObject<ConversationManager | null>;
|
|
7
|
+
};
|
|
8
|
+
/** How long the popup stays open before auto-dismiss (ignored). */
|
|
9
|
+
export declare const SESSION_RATING_AUTO_DISMISS_MS = 18000;
|
|
10
|
+
/** Fade-out duration; must match `.guideai-session-rating.is-closing` animation. */
|
|
11
|
+
export declare const SESSION_RATING_FADE_MS = 300;
|
|
12
|
+
export declare function useSessionRating({ hooks, conversationManagerRef }: UseSessionRatingParams): {
|
|
13
|
+
isVisible: boolean;
|
|
14
|
+
isClosing: boolean;
|
|
15
|
+
promptTitle: string;
|
|
16
|
+
showCommentField: boolean;
|
|
17
|
+
comment: string;
|
|
18
|
+
setComment: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
19
|
+
openSessionRating: (conversationId: string) => void;
|
|
20
|
+
maybeOpenSessionRating: (conversationId: string, sessionDurationMs: number) => void;
|
|
21
|
+
submitRating: (stars: number) => void;
|
|
22
|
+
dismiss: () => void;
|
|
23
|
+
handleTellUsMoreClick: () => void;
|
|
24
|
+
reset: () => void;
|
|
25
|
+
};
|
|
@@ -11,7 +11,8 @@ export type UseTranscriptChromeParams = {
|
|
|
11
11
|
layoutPrefsKey: string;
|
|
12
12
|
showTranscript: boolean;
|
|
13
13
|
workspaceOptions: StubWorkspaceOption[];
|
|
14
|
-
|
|
14
|
+
/** When true, workspace catalog and workflows come from the API. */
|
|
15
|
+
catalogFromApi: boolean;
|
|
15
16
|
apiWorkflowsByWorkspaceId: Record<string, StubWorkflowItem[]> | null;
|
|
16
17
|
keyTrim: string;
|
|
17
18
|
hasPortalAuth: boolean;
|
|
@@ -30,10 +31,14 @@ export type TranscriptChrome = {
|
|
|
30
31
|
setTranscriptSessionMode: Dispatch<SetStateAction<TranscriptSessionMode>>;
|
|
31
32
|
setWorkflowDrawerOpen: Dispatch<SetStateAction<boolean>>;
|
|
32
33
|
handleToggleTranscriptPanelMode: () => void;
|
|
34
|
+
/** Float → dock (e.g. drag float card past the right viewport edge). */
|
|
35
|
+
handleDockTranscriptPanel: () => void;
|
|
36
|
+
/** Dock → float (e.g. drag docked panel away from the right edge). */
|
|
37
|
+
handleUndockTranscriptPanel: () => void;
|
|
33
38
|
handleTranscriptSessionModeChange: (mode: TranscriptSessionMode) => void;
|
|
34
39
|
};
|
|
35
40
|
/**
|
|
36
41
|
* Transcript dock/float preference, workflow drawer visibility, and workspace session mode
|
|
37
42
|
* (including reconnect + first workflow steer after mode change).
|
|
38
43
|
*/
|
|
39
|
-
export declare function useTranscriptChrome({ hooks, layoutPrefsKey, showTranscript, workspaceOptions,
|
|
44
|
+
export declare function useTranscriptChrome({ hooks, layoutPrefsKey, showTranscript, workspaceOptions, catalogFromApi, apiWorkflowsByWorkspaceId, keyTrim, hasPortalAuth, reestablishRealtimeSessionRef, queueWorkflowSteerTitle, clearPendingWorkflowSteerTitle, conversationManagerRef, sessionWorkflowIdForInitRef: sessionWorkflowIdForInitRefProp, }: UseTranscriptChromeParams): TranscriptChrome;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { TranscriptDisplayMode } from '../types/GuideAI.types';
|
|
2
|
+
import type { ReactHooks } from '../utils/reactHooks';
|
|
3
|
+
export declare function useTranscriptDisplayMode(hooks: ReactHooks): {
|
|
4
|
+
transcriptDisplayMode: TranscriptDisplayMode;
|
|
5
|
+
setTranscriptDisplayMode: (mode: TranscriptDisplayMode) => void;
|
|
6
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { CSSProperties, PointerEvent as ReactPointerEvent, RefObject } from 'react';
|
|
2
|
+
import type { ReactHooks } from '../utils/reactHooks';
|
|
3
|
+
import { type FloatResizeCorner } from '../utils/transcriptFloatGeometry';
|
|
4
|
+
export type TranscriptWorkflowStripGestureHandlers = {
|
|
5
|
+
onPointerDown: (e: ReactPointerEvent<HTMLButtonElement>) => void;
|
|
6
|
+
onPointerMove: (e: ReactPointerEvent<HTMLButtonElement>) => void;
|
|
7
|
+
onPointerUp: (e: ReactPointerEvent<HTMLButtonElement>) => void;
|
|
8
|
+
onPointerCancel: (e: ReactPointerEvent<HTMLButtonElement>) => void;
|
|
9
|
+
};
|
|
10
|
+
export type UseTranscriptPanelDragResizeParams = {
|
|
11
|
+
hooks: Pick<ReactHooks, 'useState' | 'useEffect' | 'useLayoutEffect' | 'useRef' | 'useCallback' | 'useMemo'>;
|
|
12
|
+
isDockedPanel: boolean;
|
|
13
|
+
showTranscript: boolean;
|
|
14
|
+
workflowDrawerOpen: boolean;
|
|
15
|
+
drawerWidthPx: number;
|
|
16
|
+
onDrawerWidthChange?: (widthPx: number) => void;
|
|
17
|
+
onDockTranscriptPanel: () => void;
|
|
18
|
+
onUndockTranscriptPanel: () => void;
|
|
19
|
+
/** Tap on workflow handle when drag did not start (toggle workflow drawer). */
|
|
20
|
+
onToggleWorkflowDrawer: () => void;
|
|
21
|
+
/** Per-conversation key for persisting float geometry; cleared on conversation end. */
|
|
22
|
+
persistKey: string;
|
|
23
|
+
};
|
|
24
|
+
export type TranscriptPanelDragResize = {
|
|
25
|
+
transcriptBoxRef: RefObject<HTMLDivElement>;
|
|
26
|
+
floatSettling: boolean;
|
|
27
|
+
floatDragging: boolean;
|
|
28
|
+
floatResizeDragging: boolean;
|
|
29
|
+
/** True on the first paint when a persisted geometry is restored (suppress entry animation). */
|
|
30
|
+
enterAnimSuppressed: boolean;
|
|
31
|
+
floatStripGestureHandlers: TranscriptWorkflowStripGestureHandlers | undefined;
|
|
32
|
+
dockStripGestureHandlers: TranscriptWorkflowStripGestureHandlers | undefined;
|
|
33
|
+
onFloatCornerPointerDown: (corner: FloatResizeCorner) => (e: ReactPointerEvent<HTMLDivElement>) => void;
|
|
34
|
+
onDrawerResizePointerDown: (e: ReactPointerEvent<HTMLDivElement>) => void;
|
|
35
|
+
/**
|
|
36
|
+
* Float-only positioning style (bottom-left anchored). `null` => no custom geometry yet,
|
|
37
|
+
* caller applies the default responsive corner anchor.
|
|
38
|
+
*/
|
|
39
|
+
floatBoxStyle: CSSProperties | null;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* Float transcript card drag / resize / dock with a single bottom-left pixel-geometry source of
|
|
43
|
+
* truth, viewport snapping on release, viewport-capped resize, persistence, and a tiny-threshold
|
|
44
|
+
* docked→float undock. Direct DOM writes during a gesture (rAF-batched) keep React renders out of
|
|
45
|
+
* the hot path; state is committed once on release.
|
|
46
|
+
*/
|
|
47
|
+
export declare function useTranscriptPanelDragResize({ hooks, isDockedPanel, showTranscript, workflowDrawerOpen, drawerWidthPx, onDrawerWidthChange, onDockTranscriptPanel, onUndockTranscriptPanel, onToggleWorkflowDrawer, persistKey, }: UseTranscriptPanelDragResizeParams): TranscriptPanelDragResize;
|
|
@@ -8,6 +8,7 @@ import { ConversationManager } from '../utils/conversationManager';
|
|
|
8
8
|
import type { RecordingStatus } from '../types/GuideAI.types';
|
|
9
9
|
import type { GuideAIEnvironment } from '../types/GuideAI.types';
|
|
10
10
|
import type { StoredMessage } from '../utils/messageStorage';
|
|
11
|
+
import type { MutableRefObject } from 'react';
|
|
11
12
|
export type PropTools = Record<string, {
|
|
12
13
|
description: string;
|
|
13
14
|
parameters: object;
|
|
@@ -77,6 +78,8 @@ export interface UseWebRTCParams {
|
|
|
77
78
|
rollupWorkflowsForInitRef?: {
|
|
78
79
|
current: boolean;
|
|
79
80
|
};
|
|
81
|
+
/** Filled by `useConversationSession`; used to renew WebRTC after `session_expired`. */
|
|
82
|
+
reestablishRealtimeSessionRef?: MutableRefObject<((callOptions?: InitializeWebRTCCallOptions) => Promise<boolean>) | null>;
|
|
80
83
|
}
|
|
81
84
|
/** One-shot options for a single `initializeWebRTC` call (e.g. reconnect before React commits new workspace). */
|
|
82
85
|
export type InitializeWebRTCCallOptions = {
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { MutableRefObject } from 'react';
|
|
2
2
|
import type { TranscriptSessionMode } from '../types/GuideAI.types';
|
|
3
3
|
import type { StubWorkspaceOption } from '../stubs/workspaces';
|
|
4
|
+
import type { ConversationManager } from '../utils/conversationManager';
|
|
4
5
|
import type { ReactHooks } from '../utils/reactHooks';
|
|
5
6
|
import type { InitializeWebRTCCallOptions } from './useWebRTC';
|
|
6
7
|
export type UseWidgetWorkflowSessionParams = {
|
|
@@ -14,6 +15,7 @@ export type UseWidgetWorkflowSessionParams = {
|
|
|
14
15
|
sessionWorkflowIdForInitRef?: MutableRefObject<string | null>;
|
|
15
16
|
/** Filled after `reestablishActiveRealtimeSession` is defined; read at call time. */
|
|
16
17
|
reestablishRef: MutableRefObject<((callOptions?: InitializeWebRTCCallOptions) => Promise<boolean>) | null>;
|
|
18
|
+
conversationManagerRef: MutableRefObject<ConversationManager | null>;
|
|
17
19
|
/**
|
|
18
20
|
* Optional shared ref (e.g. with `useTranscriptChrome`) so clearing workflow id on session mode
|
|
19
21
|
* change stays in sync. Takes precedence over `sessionWorkflowIdForInitRef` when both are set.
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import type { ReactHooks } from '../utils/reactHooks';
|
|
2
|
+
/**
|
|
3
|
+
* Workflow tester → same `queueWorkflowSteerTitle` path as transcript workflow focus.
|
|
4
|
+
* {@link useWorkflowTesterOverlay} assigns {@link queueWorkflowSteerForWorkflowTester.current}.
|
|
5
|
+
*/
|
|
6
|
+
export declare const queueWorkflowSteerForWorkflowTester: {
|
|
7
|
+
current: ((workflowStepLabel: string) => void) | null;
|
|
8
|
+
};
|
|
2
9
|
export interface UseWorkflowTesterOverlayParams {
|
|
3
10
|
hooks: ReactHooks;
|
|
4
11
|
/** Same `queueWorkflowSteerTitle` as transcript workflow focus; wired to the workflow tester bridge. */
|
|
@@ -18,6 +18,7 @@ export type UseWorkspaceCatalogParams = {
|
|
|
18
18
|
setApiWorkspaceOptions: Dispatch<SetStateAction<StubWorkspaceOption[] | null>>;
|
|
19
19
|
setApiWorkflowsByWorkspaceId: Dispatch<SetStateAction<Record<string, StubWorkflowItem[]> | null>>;
|
|
20
20
|
setTranscriptSessionMode: Dispatch<SetStateAction<TranscriptSessionMode>>;
|
|
21
|
+
setCatalogFatal: Dispatch<SetStateAction<boolean>>;
|
|
21
22
|
};
|
|
22
23
|
/**
|
|
23
24
|
* Workspace catalog fetch coalescing, pending-apply when the conversation is active but the data
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import GuideAI from './GuideAI';
|
|
|
2
2
|
import TranscriptBox from './components/TranscriptBox';
|
|
3
3
|
export default GuideAI;
|
|
4
4
|
export { TranscriptBox };
|
|
5
|
-
export type { GuideAIProps, GuideAIHostUserInfo, GuideAIEnvironment, TranscriptSessionMode, TranscriptPanelMode, MicPromptAnimationId, MicPromptPillExpandId, } from './types/GuideAI.types';
|
|
5
|
+
export type { GuideAIProps, GuideAIHostUserInfo, GuideAIEnvironment, GuideAIThemeId, TranscriptSessionMode, TranscriptPanelMode, MicPromptAnimationId, MicPromptPillExpandId, } from './types/GuideAI.types';
|
|
6
6
|
export { MIC_PROMPT_ANIMATION_IDS, MIC_PROMPT_PILL_EXPAND_IDS, isMicPromptPillExpand, } from './types/GuideAI.types';
|
|
7
7
|
export * from './visualContext';
|
|
8
8
|
export * from './visualContext/types';
|
|
@@ -13,3 +13,6 @@ export { WIDGET_BEARER_TOKEN_STORAGE_KEY, type StoredWidgetBearerRecord, } from
|
|
|
13
13
|
export { clearStoredWidgetSession } from './utils/widgetSession';
|
|
14
14
|
export { type WidgetWorkspaceRow, type WidgetWorkspacesResponse, postWidgetProfile, } from './utils/api';
|
|
15
15
|
export { runHostUserInfoSync, resetWidgetEndUserIdentity, GUIDEAI_HOST_USERINFO_REFRESH_EVENT, } from './utils/hostUserIdentity';
|
|
16
|
+
export { GUIDEAI_THEME_IDS, isGuideAIThemeId } from './themes/guideAIThemeIds';
|
|
17
|
+
export { GUIDEAI_PRESET_THEMES, GUIDEAI_LIGHT_PRESETS, GUIDEAI_DARK_PRESETS, } from './themes/presetThemes';
|
|
18
|
+
export type { GuideAIThemePreset } from './themes/themeTokens.types';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type PendingWorkflowTesterRun } from './devtools/workflowTester/workflowTesterRunSessionStorage';
|
|
2
|
+
import type { WorkflowSimulationRunnerParams } from './devtools/workflowTester/workflowSimulationRunner';
|
|
3
|
+
export type PlaywrightSimulationHarness = {
|
|
4
|
+
getPending: () => PendingWorkflowTesterRun | null;
|
|
5
|
+
setPending: (run: PendingWorkflowTesterRun) => void;
|
|
6
|
+
parseAnswers: (raw: string) => string[];
|
|
7
|
+
run: (params: Omit<WorkflowSimulationRunnerParams, 'waits'> & {
|
|
8
|
+
waits?: WorkflowSimulationRunnerParams['waits'];
|
|
9
|
+
}) => Promise<void>;
|
|
10
|
+
refreshActiveFlag: () => void;
|
|
11
|
+
};
|
|
12
|
+
declare global {
|
|
13
|
+
interface Window {
|
|
14
|
+
__GUIDEAI_SIMULATION__?: PlaywrightSimulationHarness;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";var e={245(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))(function(o,s){function i(e){try{u(r.next(e))}catch(e){s(e)}}function a(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,a)}u((r=r.apply(e,t||[])).next())})},s=this&&this.__generator||function(e,t){var n,r,o,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=a(0),i.throw=a(1),i.return=a(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=t.call(e,s)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.devtoolsAdminFetch=function(e,t){return o(this,void 0,void 0,function(){var n,o,a,u,l,c,d;return s(this,function(s){return n=(0,i.getApiBaseUrl)(t.environment).replace(/\/$/,""),o=e.startsWith("/")?e:"/".concat(e),a=r(((l={Authorization:"Bearer ".concat(t.token)})[i.WIDGET_EXTENSION_HEADER]="1",l),null!==(c=t.headers)&&void 0!==c?c:{}),void 0!==t.body&&(a["Content-Type"]="application/json",u=JSON.stringify(t.body)),[2,fetch("".concat(n).concat(o),{method:null!==(d=t.method)&&void 0!==d?d:u?"POST":"GET",headers:a,body:u})]})})};var i=n(139)},534(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))(function(o,s){function i(e){try{u(r.next(e))}catch(e){s(e)}}function a(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,a)}u((r=r.apply(e,t||[])).next())})},s=this&&this.__generator||function(e,t){var n,r,o,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=a(0),i.throw=a(1),i.return=a(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=t.call(e,s)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(t,"__esModule",{value:!0}),t.fetchWorkflowSimulationsForDevtools=function(e,t,n){return o(this,void 0,void 0,function(){var o,a,u;return s(this,function(s){switch(s.label){case 0:return[4,(0,i.devtoolsAdminFetch)("/extension/admin/workflows/".concat(encodeURIComponent(e),"/simulations"),{token:t,environment:n})];case 1:return[4,(o=s.sent()).json().catch(function(){return{}})];case 2:if(a=s.sent(),!o.ok)throw new Error("string"==typeof a.error?a.error:"Failed to load simulations (".concat(o.status,")"));return[2,(null!==(u=a.simulations)&&void 0!==u?u:[]).map(function(e){var t,n;return r(r({},e),{simulationType:null!==(t=e.simulationType)&&void 0!==t?t:"SCRIPTED",maxRounds:null!==(n=e.maxRounds)&&void 0!==n?n:null})})]}})})},t.generateWorkflowSimulationBodyForDevtools=function(e,t,n){return o(this,void 0,void 0,function(){var r,o,a,u,l,c;return s(this,function(s){switch(s.label){case 0:return r={},(o=null===(l=null==n?void 0:n.instructions)||void 0===l?void 0:l.trim())&&(r.instructions=o),(null==n?void 0:n.simulationType)&&(r.simulationType=n.simulationType),[4,(0,i.devtoolsAdminFetch)("/extension/admin/workflows/".concat(encodeURIComponent(e),"/simulations/generate-body"),{token:t,method:"POST",environment:null==n?void 0:n.environment,body:r})];case 1:return[4,(a=s.sent()).json().catch(function(){return{}})];case 2:if(u=s.sent(),!a.ok)throw new Error("string"==typeof u.error?u.error:"Generate failed (".concat(a.status,")"));if(!(null===(c=u.body)||void 0===c?void 0:c.trim()))throw new Error("No body returned");return[2,u.body]}})})},t.generateWorkflowSimulationTurnForDevtools=function(e,t,n,r){return o(this,void 0,void 0,function(){var o,a;return s(this,function(s){switch(s.label){case 0:return[4,(0,i.devtoolsAdminFetch)("/extension/admin/workflows/".concat(encodeURIComponent(e),"/simulations/generate-turn"),{token:t,method:"POST",environment:r,body:n})];case 1:return[4,(o=s.sent()).json().catch(function(){return{}})];case 2:if(a=s.sent(),!o.ok)throw new Error("string"==typeof a.error?a.error:"Generate turn failed (".concat(o.status,")"));return[2,{message:"string"==typeof a.message?a.message.trim():"",shouldStop:!0===a.shouldStop}]}})})},t.saveWorkflowSimulationForDevtools=function(e,t,n,a){return o(this,void 0,void 0,function(){var o,u,l,c,d;return s(this,function(s){switch(s.label){case 0:return o=n.id?"/extension/admin/workflows/".concat(encodeURIComponent(e),"/simulations/").concat(encodeURIComponent(n.id)):"/extension/admin/workflows/".concat(encodeURIComponent(e),"/simulations"),[4,(0,i.devtoolsAdminFetch)(o,{token:t,method:n.id?"PATCH":"POST",body:n.id?r(r({title:n.title,body:n.body,passCriteria:n.passCriteria},n.simulationType?{simulationType:n.simulationType}:{}),void 0!==n.maxRounds?{maxRounds:n.maxRounds}:{}):{title:n.title,body:n.body,passCriteria:n.passCriteria,simulationType:null!==(c=n.simulationType)&&void 0!==c?c:"SCRIPTED",maxRounds:null!==(d=n.maxRounds)&&void 0!==d?d:null,sortOrder:0},environment:a})];case 1:return[4,(u=s.sent()).json().catch(function(){return{}})];case 2:if(l=s.sent(),!u.ok)throw new Error("string"==typeof l.error?l.error:"Save failed (".concat(u.status,")"));return[2,l]}})})},t.finishWorkflowSimulationRunForDevtools=function(e,t,n,r){return o(this,void 0,void 0,function(){var o,a;return s(this,function(s){switch(s.label){case 0:return[4,(0,i.devtoolsAdminFetch)("/extension/admin/workflows/".concat(encodeURIComponent(e),"/simulations/finish-run"),{token:t,method:"POST",body:n,environment:r})];case 1:return[4,(o=s.sent()).json().catch(function(){return{}})];case 2:if(a=s.sent(),!o.ok)throw new Error("string"==typeof a.error?a.error:"Record run failed (".concat(o.status,")"));return[2,a]}})})};var i=n(245)},272(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))(function(o,s){function i(e){try{u(r.next(e))}catch(e){s(e)}}function a(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,a)}u((r=r.apply(e,t||[])).next())})},s=this&&this.__generator||function(e,t){var n,r,o,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=a(0),i.throw=a(1),i.return=a(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=t.call(e,s)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,s=t.length;o<s;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.runWorkflowSimulation=function(e){return o(this,void 0,void 0,function(){var t,n,p,h,v,m,w,S,g,I,_,A,y,T,E,b,k,R,O,P,M,C,U,D,L,F,N,W,x,j,q,G,B,H,Y,Q,V,z,J,K,X,$,Z,ee,te,ne,re,oe,se,ie,ae,ue,le,ce,de,fe,pe,he,ve,me,we,Se,ge,Ie,_e,Ae,ye,Te,Ee,be,ke,Re,Oe=this;return s(this,function(Pe){switch(Pe.label){case 0:if("AI"===(null!==(se=null!==(oe=null===(re=e.resume)||void 0===re?void 0:re.simulationType)&&void 0!==oe?oe:e.simulationType)&&void 0!==se?se:"SCRIPTED"))return[2,(0,f.runAiWorkflowSimulation)(r(r({},e),{instructionsText:null!==(ue=null!==(ae=null===(ie=e.resume)||void 0===ie?void 0:ie.instructions)&&void 0!==ae?ae:e.instructionsText)&&void 0!==ue?ue:e.answersText,maxRounds:null!==(de=null!==(ce=null===(le=e.resume)||void 0===le?void 0:le.maxRounds)&&void 0!==ce?ce:e.maxRounds)&&void 0!==de?de:null}))];if(t=e.resume,n=e.answersText,p=e.selectedSimulationId,h=e.targetWorkflowId,v=e.workspaceWorkflows,m=e.sessionWorkflowIdForInitRef,w=e.portalToken,S=e.stopRequested,g=e.runningRef,I=e.lastResumedRunIdRef,_=e.getMessages,A=e.isConversationActive,y=e.handleTextSubmit,T=e.ensureRealtimeSession,E=e.syncTranscriptFromStorage,b=e.getServerConversationId,k=e.enqueueWorkflowSteer,R=e.logWorkflowTesterSessionMarker,O=e.callbacks,P=e.waits,g.current)return[2];if(t||((0,l.clearPendingWorkflowTesterRun)(),I.current=null),0===(M=null!==(fe=null==t?void 0:t.answersQueue)&&void 0!==fe?fe:(0,c.parseSimulationAnswers)(n)).length)return O.onError("Add at least one answer line (or # comments are ignored)."),[2];if(C=null!==(pe=null==t?void 0:t.simulationId)&&void 0!==pe?pe:p,U=C?void 0:R,D=null!==(he=null==t?void 0:t.runId)&&void 0!==he?he:(0,c.newWorkflowSimulationRunId)(),L=null!==(ve=null==t?void 0:t.startedAt)&&void 0!==ve?ve:Date.now(),!(F=null!==(me=null==t?void 0:t.workflowId)&&void 0!==me?me:h))return O.onError("No workflow selected for this run."),[2];t||O.onLastRunOutcome(null),N=!1,W={status:"error",queuePlanned:M.length,queueCompleted:0,errorMessage:null},x=function(){return o(Oe,void 0,void 0,function(){return s(this,function(e){switch(e.label){case 0:if(!N||!U)return[2];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,U({kind:"workflow_tester",phase:"end",runId:D,result:W})];case 2:case 3:return e.sent(),[3,4];case 4:return[2]}})})},j=function(e,t,n){F.trim()&&(0,l.setPendingWorkflowTesterRun)({runId:D,workflowId:F,simulationId:C,answersQueue:M,queueIndex:e,steerDone:t,conversationId:n,startedAt:L})},q=function(t){for(var n=[],r=1;r<arguments.length;r++)n[r-1]=arguments[r];return o(Oe,i([t],n,!0),void 0,function(t,n){var r,o,i,a,u,l,d;return void 0===n&&(n=!1),s(this,function(s){switch(s.label){case 0:return"complete"!==(r=(0,c.getAnswerTurnState)(_(),t,L)).status?[3,3]:n?[3,2]:[4,P.waitForCondition(function(){return!e.isResponseActive()},1e4)];case 1:s.sent(),s.label=2;case 2:return[2,{ok:!0}];case 3:return"awaiting_assistant"!==r.status?[3,11]:[4,P.waitForTesterChannelReady({skipResponseIdle:n})];case 4:if(!(o=s.sent()).ok)return[2,o];if(!n)return[3,10];O.onStatus("sending"),s.label=5;case 5:return s.trys.push([5,7,,8]),[4,y(t)];case 6:return s.sent(),[3,8];case 7:return i=s.sent(),[2,{ok:!1,message:"Send failed: ".concat(i instanceof Error?i.message:String(i),". Check the admin conversation log for details.")}];case 8:return[4,P.waitForUserAnswerInTranscript(t,L)];case 9:return(a=s.sent()).ok?[2,P.waitForAssistantAfterHuman(a.human.timestamp)]:[2,a];case 10:return[2,P.waitForAssistantAfterHuman(r.humanTimestamp)];case 11:return[4,P.waitForTesterChannelReady({skipResponseIdle:n})];case 12:if(!(u=s.sent()).ok)return[2,u];if(!A()&&!P.channelIsReady())return[2,{ok:!1,message:"Conversation is not active."}];if((0,c.findHumanAnswerMessage)(_(),t,L))return[3,16];O.onStatus("sending"),s.label=13;case 13:return s.trys.push([13,15,,16]),[4,y(t)];case 14:return s.sent(),[3,16];case 15:return l=s.sent(),[2,{ok:!1,message:"Send failed: ".concat(l instanceof Error?l.message:String(l),". Check the admin conversation log for details.")}];case 16:return[4,P.waitForUserAnswerInTranscript(t,L)];case 17:return(d=s.sent()).ok?[2,P.waitForAssistantAfterHuman(d.human.timestamp)]:[2,d]}})})},O.onError(null),O.onQueueProgress(null!==(we=null==t?void 0:t.queueIndex)&&void 0!==we?we:0,M.length),g.current=!0,G=null!==(Se=null==t?void 0:t.steerDone)&&void 0!==Se&&Se,B=null!==(ge=null==t?void 0:t.queueIndex)&&void 0!==ge?ge:0,H=null!==(_e=null!==(Ie=null==t?void 0:t.conversationId)&&void 0!==Ie?Ie:null==b?void 0:b())&&void 0!==_e?_e:null,Y=Boolean(t)&&"pause"!==(null==t?void 0:t.resumeMode),Pe.label=1;case 1:return Pe.trys.push([1,,22,30]),O.onStatus("waiting-for-conversation"),Y&&T?(null==E||E(),[4,T()]):[3,3];case 2:if(!Pe.sent())return O.onStatus("error"),O.onError("Could not restore the GuideAI session after the page refresh. Wait for the transcript and mic to reconnect, then run again."),[2];null==E||E(),Pe.label=3;case 3:return Y&&B>0?[4,P.waitForTranscriptRestored()]:[3,5];case 4:if(!(Q=Pe.sent()).ok)return O.onStatus("error"),O.onError(Q.message),[2];Pe.label=5;case 5:return[4,P.waitForTesterChannelReady({skipResponseIdle:Y})];case 6:return(V=Pe.sent()).ok?A()||P.channelIsReady()?(H=null!==(Ae=null==b?void 0:b())&&void 0!==Ae?Ae:H,Y&&B>0&&(G=!0),j(B,G,H),G?[3,13]:(O.onStatus("starting-workflow"),(z=(0,c.resolveWorkflowStepLabelForSteer)(v,m.current))?[4,new Promise(function(e){return window.setTimeout(e,d.STEER_QUEUE_YIELD_MS)})]:(O.onStatus("error"),O.onError("No workflow label available for a hidden steer (workspace has no steps?)."),[2]))):(O.onStatus("error"),O.onError("Conversation is not active. Open the transcript and start the GuideAI session (mic), then run again."),[2]):(O.onStatus("error"),O.onError(V.message),[2]);case 7:if(Pe.sent(),k(z),!U)return[3,11];Pe.label=8;case 8:return Pe.trys.push([8,10,,11]),[4,U({kind:"workflow_tester",phase:"start",runId:D,queuePlanned:M.length,workflowStepLabel:z})];case 9:return Pe.sent(),N=!0,[3,11];case 10:return Pe.sent(),[3,11];case 11:return[4,P.waitForSteerResponseCycle()];case 12:if(!(J=Pe.sent()).ok)return O.onStatus("error"),O.onError(J.message),W={status:"error",queuePlanned:M.length,queueCompleted:0,errorMessage:J.message},[2];G=!0,H=null!==(ye=null==b?void 0:b())&&void 0!==ye?ye:H,j(B,G,H),Pe.label=13;case 13:K=B,X=B,Pe.label=14;case 14:return X<M.length?S()?[3,21]:"complete"!==(0,c.getAnswerTurnState)(_(),M[X],L).status?[3,17]:(K=X+1,O.onQueueProgress(X+1,M.length),H=null!==(Te=null==b?void 0:b())&&void 0!==Te?Te:H,j(X+1,G,H),X<M.length-1?[4,new Promise(function(e){return window.setTimeout(e,d.POST_RESPONSE_PAUSE_MS)})]:[3,16]):[3,21];case 15:Pe.sent(),Pe.label=16;case 16:return[3,20];case 17:return[4,q(M[X],Y)];case 18:return $=Pe.sent(),O.onQueueProgress(X+1,M.length),H=null!==(Ee=null==b?void 0:b())&&void 0!==Ee?Ee:H,j(X+1,G,H),$.ok?(K+=1,X<M.length-1?[4,new Promise(function(e){return window.setTimeout(e,d.POST_RESPONSE_PAUSE_MS)})]:[3,20]):(O.onStatus("error"),O.onError($.message),W={status:"error",queuePlanned:M.length,queueCompleted:K,errorMessage:$.message},[2]);case 19:Pe.sent(),Pe.label=20;case 20:return X+=1,[3,14];case 21:return S()?(O.onStatus("stopped"),W={status:"stopped",queuePlanned:M.length,queueCompleted:K,errorMessage:"Stopped"},[2]):(O.onStatus("finished"),W={status:"finished",queuePlanned:M.length,queueCompleted:K,errorMessage:null},[3,30]);case 22:return Y&&"error"===W.status||(0,l.clearPendingWorkflowTesterRun)(),[4,x()];case 23:if(Pe.sent(),!C||!w)return[3,29];if(!(Z=null!==(ke=null!==(be=null==b?void 0:b())&&void 0!==be?be:null==H?void 0:H.trim())&&void 0!==ke?ke:null))return[3,28];ee="finished"===W.status?"finished":"stopped"===W.status?"stopped":"error",Pe.label=24;case 24:return Pe.trys.push([24,26,,27]),[4,(0,a.finishWorkflowSimulationRunForDevtools)(F,w,{simulationId:C,conversationId:Z,runId:D,mechanicalStatus:ee,failureReason:null!==(Re=W.errorMessage)&&void 0!==Re?Re:null},(0,u.getWidgetEnvironment)())];case 25:return te=Pe.sent(),O.onLastRunOutcome("".concat(te.assessedOutcome.toUpperCase()).concat(te.judgeSummary?" — ".concat(te.judgeSummary):"")),[3,27];case 26:return ne=Pe.sent(),O.onLastRunOutcome(ne instanceof Error?"Audit failed: ".concat(ne.message):"Audit failed"),[3,27];case 27:return[3,29];case 28:O.onLastRunOutcome("Run finished (no server conversation to audit)"),Pe.label=29;case 29:return g.current=!1,[7];case 30:return[2]}})})};var a=n(534),u=n(985),l=n(12),c=n(108),d=n(417),f=n(210)},210(e,t,n){var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))(function(o,s){function i(e){try{u(r.next(e))}catch(e){s(e)}}function a(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,a)}u((r=r.apply(e,t||[])).next())})},o=this&&this.__generator||function(e,t){var n,r,o,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=a(0),i.throw=a(1),i.return=a(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=t.call(e,s)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},s=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,s=t.length;o<s;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.endAiWorkflowSimulationRun=function(e){return r(this,void 0,void 0,function(){var t,n,r,s,i,a,u,c,d,p,h,v,m,w,S,g,I,_;return o(this,function(o){switch(o.label){case 0:if(t=e.pending,n=e.portalToken,r=e.getServerConversationId,s=e.logWorkflowTesterSessionMarker,i=e.callbacks,a=t.workflowId,u=t.simulationId,c=t.runId,d=null!==(w=t.roundIndex)&&void 0!==w?w:0,p=null!==(S=t.maxRounds)&&void 0!==S?S:0,v={status:"stopped",queuePlanned:p,queueCompleted:d,errorMessage:null},!(h=u?void 0:s))return[3,4];o.label=1;case 1:return o.trys.push([1,3,,4]),[4,h({kind:"workflow_tester",phase:"end",runId:c,result:v})];case 2:case 3:return o.sent(),[3,4];case 4:return(0,l.clearPendingWorkflowTesterRun)(),e.lastResumedRunIdRef&&(e.lastResumedRunIdRef.current=null),i.onError(null),i.onStatus("finished"),m=null!==(_=null!==(g=null==r?void 0:r())&&void 0!==g?g:null===(I=t.conversationId)||void 0===I?void 0:I.trim())&&void 0!==_?_:null,u&&m?[4,f(a,n,u,c,m,v,i.onLastRunOutcome)]:[3,6];case 5:return o.sent(),[3,7];case 6:u?i.onLastRunOutcome("Ended (no server conversation to audit)"):i.onLastRunOutcome("Run ended"),o.label=7;case 7:return[2]}})})},t.runAiWorkflowSimulation=function(e){return r(this,void 0,void 0,function(){var t,n,i,p,h,v,m,w,S,g,I,_,A,y,T,E,b,k,R,O,P,M,C,U,D,L,F,N,W,x,j,q,G,B,H,Y,Q,V,z,J,K,X,$,Z,ee,te,ne,re,oe,se,ie,ae,ue,le,ce,de,fe,pe,he,ve,me,we,Se,ge=this;return o(this,function(Ie){switch(Ie.label){case 0:if(t=e.resume,n=e.instructionsText,i=e.maxRounds,p=e.selectedSimulationId,h=e.targetWorkflowId,v=e.workspaceWorkflows,m=e.sessionWorkflowIdForInitRef,w=e.portalToken,S=e.stopRequested,g=e.runningRef,I=e.lastResumedRunIdRef,_=e.getMessages,A=e.isConversationActive,y=e.handleTextSubmit,T=e.ensureRealtimeSession,E=e.syncTranscriptFromStorage,b=e.getServerConversationId,k=e.enqueueWorkflowSteer,R=e.logWorkflowTesterSessionMarker,O=e.callbacks,P=e.waits,!(M=n.trim()))return O.onError("Add customer instructions for the AI simulation."),[2];if(g.current)return[2];if(t||((0,l.clearPendingWorkflowTesterRun)(),I.current=null),C=null!==(ie=null==t?void 0:t.simulationId)&&void 0!==ie?ie:p,U=C?void 0:R,D=null!==(ae=null==t?void 0:t.runId)&&void 0!==ae?ae:(0,c.newWorkflowSimulationRunId)(),L=null!==(ue=null==t?void 0:t.startedAt)&&void 0!==ue?ue:Date.now(),!(F=null!==(le=null==t?void 0:t.workflowId)&&void 0!==le?le:h))return O.onError("No workflow selected for this run."),[2];t||O.onLastRunOutcome(null),N=!1,x={status:"error",queuePlanned:W=null!=i?i:0,queueCompleted:0,errorMessage:null},j=function(){return r(ge,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:if(!N||!U)return[2];e.label=1;case 1:return e.trys.push([1,3,,4]),[4,U({kind:"workflow_tester",phase:"end",runId:D,result:x})];case 2:case 3:return e.sent(),[3,4];case 4:return[2]}})})},q=function(e,t,n){F.trim()&&(0,l.setPendingWorkflowTesterRun)({runId:D,workflowId:F,simulationId:C,simulationType:"AI",instructions:M,roundIndex:e,maxRounds:i,steerDone:t,conversationId:n,startedAt:L})},G=function(t){for(var n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];return r(ge,s([t],n,!0),void 0,function(t,n){var r,s,i,a,u,l,d;return void 0===n&&(n=!1),o(this,function(o){switch(o.label){case 0:return"complete"!==(r=(0,c.getAnswerTurnState)(_(),t,L)).status?[3,3]:n?[3,2]:[4,P.waitForCondition(function(){return!e.isResponseActive()},1e4)];case 1:o.sent(),o.label=2;case 2:return[2,{ok:!0}];case 3:return"awaiting_assistant"!==r.status?[3,11]:[4,P.waitForTesterChannelReady({skipResponseIdle:n})];case 4:if(!(s=o.sent()).ok)return[2,s];if(!n)return[3,10];O.onStatus("sending"),o.label=5;case 5:return o.trys.push([5,7,,8]),[4,y(t)];case 6:return o.sent(),[3,8];case 7:return i=o.sent(),[2,{ok:!1,message:"Send failed: ".concat(i instanceof Error?i.message:String(i),". Check the admin conversation log for details.")}];case 8:return[4,P.waitForUserAnswerInTranscript(t,L)];case 9:return(a=o.sent()).ok?[2,P.waitForAssistantSettled(a.human.timestamp)]:[2,a];case 10:return[2,P.waitForAssistantSettled(r.humanTimestamp)];case 11:return[4,P.waitForTesterChannelReady({skipResponseIdle:n})];case 12:if(!(u=o.sent()).ok)return[2,u];if(!A()&&!P.channelIsReady())return[2,{ok:!1,message:"Conversation is not active."}];if((0,c.findHumanAnswerMessage)(_(),t,L))return[3,16];O.onStatus("sending"),o.label=13;case 13:return o.trys.push([13,15,,16]),[4,y(t)];case 14:return o.sent(),[3,16];case 15:return l=o.sent(),[2,{ok:!1,message:"Send failed: ".concat(l instanceof Error?l.message:String(l),". Check the admin conversation log for details.")}];case 16:return[4,P.waitForUserAnswerInTranscript(t,L)];case 17:return(d=o.sent()).ok?[2,P.waitForAssistantSettled(d.human.timestamp)]:[2,d]}})})},O.onError(null),B=null!==(ce=null==t?void 0:t.roundIndex)&&void 0!==ce?ce:0,O.onQueueProgress(B,W),g.current=!0,H=null!==(de=null==t?void 0:t.steerDone)&&void 0!==de&&de,Y=null!==(pe=null!==(fe=null==t?void 0:t.conversationId)&&void 0!==fe?fe:null==b?void 0:b())&&void 0!==pe?pe:null,Q=Boolean(t)&&"pause"!==(null==t?void 0:t.resumeMode),V=function(){return!!S()&&(O.onStatus("stopped"),x={status:"stopped",queuePlanned:W,queueCompleted:B,errorMessage:null},q(B,H,Y),!0)},Ie.label=1;case 1:return Ie.trys.push([1,,25,30]),O.onStatus("waiting-for-conversation"),Q&&T?(null==E||E(),[4,T()]):[3,3];case 2:if(!Ie.sent())return O.onStatus("error"),O.onError("Could not restore the GuideAI session after the page refresh. Wait for the transcript and mic to reconnect, then run again."),[2];null==E||E(),Ie.label=3;case 3:return Q&&B>0?[4,P.waitForTranscriptRestored()]:[3,5];case 4:if(!(z=Ie.sent()).ok)return O.onStatus("error"),O.onError(z.message),[2];Ie.label=5;case 5:return[4,P.waitForTesterChannelReady({skipResponseIdle:Q})];case 6:return(J=Ie.sent()).ok?A()||P.channelIsReady()?(Y=null!==(he=null==b?void 0:b())&&void 0!==he?he:Y,Q&&B>0&&(H=!0),q(B,H,Y),H?[3,14]:(O.onStatus("starting-workflow"),(K=(0,c.resolveWorkflowStepLabelForSteer)(v,m.current))?[4,new Promise(function(e){return window.setTimeout(e,d.STEER_QUEUE_YIELD_MS)})]:(O.onStatus("error"),O.onError("No workflow label available for a hidden steer (workspace has no steps?)."),[2]))):(O.onStatus("error"),O.onError("Conversation is not active. Open the transcript and start the GuideAI session (mic), then run again."),[2]):(O.onStatus("error"),O.onError(J.message),[2]);case 7:if(Ie.sent(),k(K),!U)return[3,11];Ie.label=8;case 8:return Ie.trys.push([8,10,,11]),[4,U({kind:"workflow_tester",phase:"start",runId:D,queuePlanned:W,workflowStepLabel:K})];case 9:return Ie.sent(),N=!0,[3,11];case 10:return Ie.sent(),[3,11];case 11:return[4,P.waitForSteerResponseCycle()];case 12:return(X=Ie.sent()).ok?(H=!0,Y=null!==(ve=null==b?void 0:b())&&void 0!==ve?ve:Y,q(B,H,Y),[4,P.waitForAssistantSettled(L-1)]):(V()||(O.onStatus("error"),O.onError(X.message),x={status:"error",queuePlanned:W,queueCompleted:B,errorMessage:X.message}),[2]);case 13:return($=Ie.sent()).ok?[3,16]:(V()||(O.onStatus("error"),O.onError($.message),x={status:"error",queuePlanned:W,queueCompleted:B,errorMessage:$.message}),[2]);case 14:return 0!==B?[3,16]:[4,P.waitForAssistantSettled(L-1)];case 15:if(!(Z=Ie.sent()).ok)return V()||(O.onStatus("error"),O.onError(Z.message),x={status:"error",queuePlanned:W,queueCompleted:0,errorMessage:Z.message}),[2];Ie.label=16;case 16:if(!w)return O.onStatus("error"),O.onError("Administrator login required to run AI simulations."),[2];Ie.label=17;case 17:if(S())return[3,24];if(null!=i&&B>=i)return[3,24];O.onStatus("generating-customer"),ee=void 0,Ie.label=18;case 18:return Ie.trys.push([18,20,,21]),[4,(0,a.generateWorkflowSimulationTurnForDevtools)(F,w,{instructions:M,messages:(0,c.formatMessagesForAiCustomerTurn)(_(),L)},(0,u.getWidgetEnvironment)())];case 19:return ee=Ie.sent(),[3,21];case 20:return te=Ie.sent(),V()||(ne=te instanceof Error?te.message:String(te),O.onStatus("error"),O.onError(ne),x={status:"error",queuePlanned:W,queueCompleted:B,errorMessage:ne}),[2];case 21:return S()||ee.shouldStop||!ee.message.trim()?[3,24]:[4,G(ee.message.trim(),Q)];case 22:return(re=Ie.sent()).ok?(B+=1,O.onQueueProgress(B,W),Y=null!==(me=null==b?void 0:b())&&void 0!==me?me:Y,q(B,H,Y),null!=i&&B>=i?[3,24]:[4,new Promise(function(e){return window.setTimeout(e,d.POST_RESPONSE_PAUSE_MS)})]):(V()||(O.onStatus("error"),O.onError(re.message),x={status:"error",queuePlanned:W,queueCompleted:B,errorMessage:re.message}),[2]);case 23:return Ie.sent(),[3,17];case 24:return S()?(V(),[2]):(O.onStatus("finished"),x={status:"finished",queuePlanned:W,queueCompleted:B,errorMessage:null},[3,30]);case 25:return oe="stopped"===x.status,Q&&"error"===x.status||oe||(0,l.clearPendingWorkflowTesterRun)(),[4,j()];case 26:return Ie.sent(),!oe&&C&&w?(se=null!==(Se=null!==(we=null==b?void 0:b())&&void 0!==we?we:null==Y?void 0:Y.trim())&&void 0!==Se?Se:null)?[4,f(F,w,C,D,se,x,O.onLastRunOutcome)]:[3,28]:[3,29];case 27:return Ie.sent(),[3,29];case 28:O.onLastRunOutcome("Run finished (no server conversation to audit)"),Ie.label=29;case 29:return g.current=!1,[7];case 30:return[2]}})})};var i=n(534),a=n(534),u=n(985),l=n(12),c=n(108),d=n(417);function f(e,t,n,s,a,l,c){return r(this,void 0,void 0,function(){var r,d,f,p;return o(this,function(o){switch(o.label){case 0:r="finished"===l.status?"finished":"stopped"===l.status?"stopped":"error",o.label=1;case 1:return o.trys.push([1,3,,4]),[4,(0,i.finishWorkflowSimulationRunForDevtools)(e,t,{simulationId:n,conversationId:a,runId:s,mechanicalStatus:r,failureReason:null!==(p=l.errorMessage)&&void 0!==p?p:null},(0,u.getWidgetEnvironment)())];case 2:return d=o.sent(),c("".concat(d.assessedOutcome.toUpperCase()).concat(d.judgeSummary?" — ".concat(d.judgeSummary):"")),[3,4];case 3:return f=o.sent(),c(f instanceof Error?"Audit failed: ".concat(f.message):"Audit failed"),[3,4];case 4:return[2]}})})}},108(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.parseSimulationAnswers=function(e){return e.split("\n").map(function(e){return e.trim()}).filter(function(e){return e.length>0&&!e.startsWith("#")})},t.newWorkflowSimulationRunId=function(){return"wft_".concat(Date.now().toString(36),"_").concat(Math.random().toString(36).slice(2,9))},t.resolveWorkflowStepLabelForSteer=function(e,t){var n,r=null==t?void 0:t.trim(),o=r?e.find(function(e){return e.id===r}):void 0,s=null!=o?o:e[0];return(null===(n=null==s?void 0:s.label)||void 0===n?void 0:n.trim())||null},t.getAnswerTurnState=function(e,t,n){for(var r=t.trim(),o=0,s=0,i=e;s<i.length;s++)(l=i[s]).timestamp<n||"HUMAN"===l.sender&&l.content.trim()===r&&(o=l.timestamp);if(0===o)return{status:"not_started"};for(var a=0,u=e;a<u.length;a++){var l;if(!((l=u[a]).timestamp<=o)&&"GUIDEAI"===l.sender)return{status:"complete"}}return{status:"awaiting_assistant",humanTimestamp:o}},t.findHumanAnswerMessage=function(e,t,n){for(var r=t.trim(),o=null,s=0,i=e;s<i.length;s++){var a=i[s];a.timestamp<n||"HUMAN"===a.sender&&a.content.trim()===r&&(o=a)}return o},t.formatMessagesForAiCustomerTurn=function(e,t){for(var n=[],r=0,o=e;r<o.length;r++){var s=o[r];if(!(s.timestamp<t||"HUMAN"!==s.sender&&"GUIDEAI"!==s.sender)){var i=s.content.trim();i&&n.push({role:"HUMAN"===s.sender?"user":"assistant",content:i})}}return n},t.lastVisibleTranscriptMessage=function(e){if(!e)return null;for(var t=e.length-1;t>=0;t-=1){var n=e[t];if("HUMAN"===n.sender||"GUIDEAI"===n.sender)return n}return null}},417(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.TESTER_WAIT_FAILSAFE_MS=t.CONDITION_POLL_MS=t.DATA_CHANNEL_POLL_MS=t.STEER_QUEUE_YIELD_MS=t.POST_RESPONSE_PAUSE_MS=t.ASSISTANT_RESPONSE_TIMEOUT_MS=t.TESTER_STATUS_LABEL=t.AI_SIMULATION_INSTRUCTIONS_PLACEHOLDER=t.SCRIPTED_SIMULATION_BODY_PLACEHOLDER=t.DEFAULT_AI_SIMULATION_INSTRUCTIONS=t.DEFAULT_SCRIPTED_SIMULATION_BODY=t.DEFAULT_WORKFLOW_SIMULATION_PASS_CRITERIA=void 0,t.defaultSimulationBodyForType=function(e){return"AI"===e?t.DEFAULT_AI_SIMULATION_INSTRUCTIONS:t.DEFAULT_SCRIPTED_SIMULATION_BODY},t.workflowSimulationTypeDisplayLabel=function(e){return"AI"===e?"AI customer":"Scripted"},t.workflowSimulationTypePickerLabel=function(e){return"AI"===e?"AI":"Scripted"},t.workflowSimulationPickerOptionLabel=function(e,t){return"AI"===t?"".concat(e," (ai)"):e},t.DEFAULT_WORKFLOW_SIMULATION_PASS_CRITERIA="Evaluate the outcome of the interaction to determine whether the simulation succeeded or failed.",t.DEFAULT_SCRIPTED_SIMULATION_BODY=["Hi — I'd like help with this.","Yes, that works for me. What's the next step?","Sure, here's the information you need."].join("\n"),t.DEFAULT_AI_SIMULATION_INSTRUCTIONS=["You are a cooperative customer exercising this workflow end-to-end.","Read each assistant turn and reply with clear, plausible answers.","Stay on topic, provide reasonable details when asked, and work toward completing the workflow.","Keep each reply to one or two sentences unless the assistant asks for more."].join("\n"),t.SCRIPTED_SIMULATION_BODY_PLACEHOLDER="Hi — I'd like help with this.\nYes, please walk me through the steps.\nHere is the info you asked for.",t.AI_SIMULATION_INSTRUCTIONS_PLACEHOLDER="Cooperative customer who completes the workflow. Use a frustrated tone on step 2 but still finish.",t.TESTER_STATUS_LABEL={idle:"Idle","starting-workflow":"Workflow steer…","waiting-for-conversation":"Waiting for conversation…",sending:"Sending…","awaiting-response":"Waiting for assistant…","generating-customer":"Generating customer…",finished:"Finished",error:"Error",stopped:"Stopped"},t.ASSISTANT_RESPONSE_TIMEOUT_MS=6e4,t.POST_RESPONSE_PAUSE_MS=400,t.STEER_QUEUE_YIELD_MS=50,t.DATA_CHANNEL_POLL_MS=100,t.CONDITION_POLL_MS=200,t.TESTER_WAIT_FAILSAFE_MS=12e4},442(e,t,n){var r=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))(function(o,s){function i(e){try{u(r.next(e))}catch(e){s(e)}}function a(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,a)}u((r=r.apply(e,t||[])).next())})},o=this&&this.__generator||function(e,t){var n,r,o,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=a(0),i.throw=a(1),i.return=a(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=t.call(e,s)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}},s=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,s=t.length;o<s;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.createWorkflowSimulationWaits=function(e){var t=this,n=function(n,a){for(var u=[],l=2;l<arguments.length;l++)u[l-2]=arguments[l];return r(t,s([n,a],u,!0),void 0,function(t,n,r){var s;return void 0===r&&(r=i.CONDITION_POLL_MS),o(this,function(o){switch(o.label){case 0:s=Date.now(),o.label=1;case 1:return e.stopRequested()?[3,3]:t()?[2,!0]:Date.now()-s>n?[2,!1]:[4,new Promise(function(e){return window.setTimeout(e,r)})];case 2:return o.sent(),[3,1];case 3:return[2,!1]}})})},u=function(){return e.isDataChannelReady?e.isDataChannelReady():e.isDataChannelOpen()},l=function(t){for(var n=0,r=0,o=e.getMessages();r<o.length;r++){var s=o[r];s.timestamp<=t||"GUIDEAI"===s.sender&&s.timestamp>n&&(n=s.timestamp)}return n},c=function(s){return r(t,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return e.onStatus("awaiting-response"),[4,n(function(){var t=(0,a.lastVisibleTranscriptMessage)(e.getMessages());return Boolean(t&&"GUIDEAI"===t.sender&&t.timestamp>s)},i.ASSISTANT_RESPONSE_TIMEOUT_MS)];case 1:return t.sent()?[4,n(function(){return!e.isResponseActive()},1e4)]:[2,{ok:!1,message:"No assistant response within ".concat(Math.round(i.ASSISTANT_RESPONSE_TIMEOUT_MS/1e3),"s.")}];case 2:return t.sent(),[2,{ok:!0}]}})})};return{waitForCondition:n,channelIsReady:u,waitForSteerResponseCycle:function(){return r(t,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return[4,n(function(){return!e.isResponseActive()},5e3)];case 1:return t.sent(),[4,new Promise(function(e){return window.setTimeout(e,i.STEER_QUEUE_YIELD_MS)})];case 2:return t.sent(),[4,n(function(){return e.isResponseActive()},12e3)];case 3:return t.sent()?[4,n(function(){return!e.isResponseActive()},i.ASSISTANT_RESPONSE_TIMEOUT_MS)]:[2,{ok:!1,message:"Workflow steer did not start a model response (data channel open?)."}];case 4:return t.sent()?[4,new Promise(function(e){return window.setTimeout(e,i.POST_RESPONSE_PAUSE_MS)})]:[2,{ok:!1,message:"Steer response did not finish within ".concat(Math.round(i.ASSISTANT_RESPONSE_TIMEOUT_MS/1e3),"s.")}];case 5:return t.sent(),[2,{ok:!0}]}})})},waitForTranscriptRestored:function(){return r(t,void 0,void 0,function(){var t;return o(this,function(r){switch(r.label){case 0:return null===(t=e.syncTranscriptFromStorage)||void 0===t||t.call(e),e.getMessages().length>0?[2,{ok:!0}]:[4,n(function(){return e.getMessages().length>0},i.TESTER_WAIT_FAILSAFE_MS,i.CONDITION_POLL_MS)];case 1:return r.sent()?[2,{ok:!0}]:[2,{ok:!1,message:"Transcript history did not load after the page refresh. Wait for the session to restore, then run again."}]}})})},waitForTesterChannelReady:function(s){return r(t,void 0,void 0,function(){var a;return o(this,function(l){switch(l.label){case 0:return[4,r(t,void 0,void 0,function(){return o(this,function(e){switch(e.label){case 0:return u()?[2,{ok:!0}]:[4,n(function(){return u()},i.TESTER_WAIT_FAILSAFE_MS,i.DATA_CHANNEL_POLL_MS)];case 1:return e.sent()?[2,{ok:!0}]:[2,{ok:!1,message:"Data channel did not reopen. Start or restore the GuideAI session (mic), then run again."}]}})})];case 1:return(a=l.sent()).ok?(null==s?void 0:s.skipResponseIdle)?[2,{ok:!0}]:[2,r(t,void 0,void 0,function(){return o(this,function(t){switch(t.label){case 0:return e.isResponseActive()?[4,n(function(){return!e.isResponseActive()},i.TESTER_WAIT_FAILSAFE_MS,i.CONDITION_POLL_MS)]:[2,{ok:!0}];case 1:return t.sent()?[2,{ok:!0}]:[2,{ok:!1,message:"Assistant is still responding. Wait for the current turn to finish, then run again."}]}})})]:[2,a]}})})},waitForAssistantAfterHuman:c,waitForAssistantSettled:function(s){return r(t,void 0,void 0,function(){var t,r,a,u;return o(this,function(o){switch(o.label){case 0:t=l(s),r=0,o.label=1;case 1:return r<8?[4,c(s)]:[3,7];case 2:return(a=o.sent()).ok?(t=Math.max(t,l(s)),[4,new Promise(function(e){return window.setTimeout(e,i.POST_RESPONSE_PAUSE_MS)})]):[2,a];case 3:return o.sent(),e.isResponseActive()?[4,n(function(){return!e.isResponseActive()},i.ASSISTANT_RESPONSE_TIMEOUT_MS)]:[3,5];case 4:if(!o.sent())return[2,{ok:!1,message:"Assistant did not settle within ".concat(Math.round(i.ASSISTANT_RESPONSE_TIMEOUT_MS/1e3),"s.")}];o.label=5;case 5:if((u=l(s))<=t)return[2,{ok:!0}];t=u,o.label=6;case 6:return r+=1,[3,1];case 7:return[2,{ok:!0}]}})})},waitForUserAnswerInTranscript:function(s,u){return r(t,void 0,void 0,function(){var t,r;return o(this,function(o){switch(o.label){case 0:return(t=(0,a.findHumanAnswerMessage)(e.getMessages(),s,u))?[2,{ok:!0,human:t}]:[4,n(function(){return null!=(0,a.findHumanAnswerMessage)(e.getMessages(),s,u)},i.TESTER_WAIT_FAILSAFE_MS,i.CONDITION_POLL_MS)];case 1:return o.sent()?(r=(0,a.findHumanAnswerMessage)(e.getMessages(),s,u))?[2,{ok:!0,human:r}]:[2,{ok:!1,message:"User message missing after send."}]:[2,{ok:!1,message:"User line was sent but did not appear in the transcript. Check that the data channel stayed open."}]}})})}}};var i=n(417),a=n(108)},12(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.getPendingWorkflowTesterRun=u,t.refreshSimulationActiveFlag=l,t.setSimulationActiveFlag=c,t.isSimulationActive=function(){return o},t.hasPendingWorkflowTesterRun=function(){return null!=u()},t.setPendingWorkflowTesterRun=function(e){i(n,e),c(!0)},t.clearPendingWorkflowTesterRun=d,t.getDevtoolsShellSession=function(){var e=s(r);return e&&"boolean"==typeof e.open&&e.activeTab?e:null},t.setDevtoolsShellSession=function(e){i(r,e)},t.clearDevtoolsShellSession=f,t.dismissWorkflowTesterAutoResume=function(){d(),f()};var n="guideAI_pendingWorkflowTesterRun",r="guideAI_devtoolsShellSession",o=!1;function s(e){if("undefined"==typeof sessionStorage)return null;try{var t=sessionStorage.getItem(e);return t?JSON.parse(t):null}catch(e){return null}}function i(e,t){if("undefined"!=typeof sessionStorage)try{sessionStorage.setItem(e,JSON.stringify(t))}catch(e){}}function a(e){if("undefined"!=typeof sessionStorage)try{sessionStorage.removeItem(e)}catch(e){}}function u(){var e,t,r=s(n);return(null==r?void 0:r.runId)&&r.workflowId?"AI"===(null!==(e=r.simulationType)&&void 0!==e?e:"SCRIPTED")?(null===(t=r.instructions)||void 0===t?void 0:t.trim())?r:null:Array.isArray(r.answersQueue)&&0!==r.answersQueue.length?r:null:null}function l(){o=null!=u()}function c(e){o=e}function d(){a(n),c(!1)}function f(){a(r)}"undefined"!=typeof sessionStorage&&l()},596(e,t,n){var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))(function(o,s){function i(e){try{u(r.next(e))}catch(e){s(e)}}function a(e){try{u(r.throw(e))}catch(e){s(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(i,a)}u((r=r.apply(e,t||[])).next())})},s=this&&this.__generator||function(e,t){var n,r,o,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},i=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return i.next=a(0),i.throw=a(1),i.return=a(2),"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(a){return function(u){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,a[0]&&(s=0)),s;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return s.label++,{value:a[1],done:!1};case 5:s.label++,r=a[1],a=[0];continue;case 7:a=s.ops.pop(),s.trys.pop();continue;default:if(!((o=(o=s.trys).length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){s=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){s.label=a[1];break}if(6===a[0]&&s.label<o[1]){s.label=o[1],o=a;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(a);break}o[2]&&s.ops.pop(),s.trys.pop();continue}a=t.call(e,s)}catch(e){a=[6,e],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,u])}}};Object.defineProperty(t,"__esModule",{value:!0});var i=n(272),a=n(442),u=n(108),l=n(12),c=n(12);window.__GUIDEAI_SIMULATION__={getPending:l.getPendingWorkflowTesterRun,setPending:l.setPendingWorkflowTesterRun,parseAnswers:u.parseSimulationAnswers,refreshActiveFlag:c.refreshSimulationActiveFlag,run:function(e){return o(void 0,void 0,void 0,function(){var t,n;return s(this,function(o){switch(o.label){case 0:return t=null!==(n=e.waits)&&void 0!==n?n:(0,a.createWorkflowSimulationWaits)({stopRequested:e.stopRequested,getMessages:e.getMessages,isResponseActive:e.isResponseActive,isDataChannelOpen:e.isDataChannelOpen,isDataChannelReady:e.isDataChannelReady,syncTranscriptFromStorage:e.syncTranscriptFromStorage,onStatus:e.callbacks.onStatus}),[4,(0,i.runWorkflowSimulation)(r(r({},e),{waits:t}))];case 1:return o.sent(),[2]}})})}}},139(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.UI_LAYOUT=t.WIDGET_EXTENSION_HEADER=t.getApiBaseUrl=t.GUIDE_AI_API_BASE_LOCAL=t.GUIDE_AI_API_BASE_DEV=t.GUIDE_AI_API_BASE_PROD=void 0,t.getGuideAiSiteOriginFromApiBase=function(e){return(e||"").trim().replace(/\/api\/?$/,"")},t.GUIDE_AI_API_BASE_PROD="https://app.getguide.ai/api",t.GUIDE_AI_API_BASE_DEV="https://dev.getguide.ai/api",t.GUIDE_AI_API_BASE_LOCAL="http://localhost:3000/api",t.getApiBaseUrl=function(e){switch(e){case"development":return t.GUIDE_AI_API_BASE_DEV;case"local":return t.GUIDE_AI_API_BASE_LOCAL;default:return t.GUIDE_AI_API_BASE_PROD}},t.WIDGET_EXTENSION_HEADER="x-guideai-extension",t.UI_LAYOUT={micButtonSize:50,toggleAboveMicGap:12,stackedButtonGap:8,horizontalEdgeOffset:6,defaultBottom:20,defaultHorizontalOffset:40,transcriptFloatEdgeInset:20}},985(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.setWidgetBearerToken=function(e){n=(null==e?void 0:e.trim())||null},t.getWidgetBearerToken=function(){return n},t.setWidgetEnvironment=function(e){r=e},t.getWidgetEnvironment=function(){return r};var n=null,r="production"}},t={};!function n(r){var o=t[r];if(void 0!==o)return o.exports;var s=t[r]={exports:{}};return e[r].call(s.exports,s,s.exports,n),s.exports}(596)})();
|