@paymanai/payman-typescript-ask-sdk 1.2.1 → 1.2.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/index.mjs CHANGED
@@ -156,6 +156,10 @@ function getEventMessage(event) {
156
156
  return "Verification code resent";
157
157
  case "USER_ACTION_FAILED":
158
158
  return "Verification failed";
159
+ case "INTENT_THINKING":
160
+ return event.workerName ? `${event.workerName} thinking...` : "Thinking...";
161
+ case "INTENT_THINKING_CONT":
162
+ return event.message || "";
159
163
  default:
160
164
  return eventType;
161
165
  }
@@ -193,6 +197,16 @@ function completeLastInProgressStep(steps) {
193
197
  function processStreamEvent(event, state) {
194
198
  const eventType = event.eventType;
195
199
  const message = getEventMessage(event);
200
+ if (eventType !== "INTENT_THINKING" && eventType !== "INTENT_THINKING_CONT") {
201
+ if (state.currentThinkingStepId) {
202
+ const thinkingStep = state.steps.find((s) => s.id === state.currentThinkingStepId);
203
+ if (thinkingStep) {
204
+ thinkingStep.isThinking = false;
205
+ }
206
+ state.currentThinkingStepId = void 0;
207
+ }
208
+ state.activeThinkingText = void 0;
209
+ }
196
210
  if ((eventType === "COMPLETED" || eventType === "WORKFLOW_COMPLETED") && event.response !== void 0) {
197
211
  const content = extractResponseContent(event.response);
198
212
  if (content) {
@@ -393,6 +407,33 @@ function processStreamEvent(event, state) {
393
407
  timestamp: Date.now(),
394
408
  elapsedMs: event.elapsedMs
395
409
  });
410
+ } else if (eventType === "INTENT_THINKING") {
411
+ if (state.currentThinkingStepId) {
412
+ const prev = state.steps.find((s) => s.id === state.currentThinkingStepId);
413
+ if (prev) prev.isThinking = false;
414
+ }
415
+ const lastInProgress = [...state.steps].reverse().find((s) => s.status === "in_progress");
416
+ if (lastInProgress) {
417
+ lastInProgress.thinkingText = "";
418
+ lastInProgress.isThinking = true;
419
+ state.currentThinkingStepId = lastInProgress.id;
420
+ } else {
421
+ state.currentThinkingStepId = void 0;
422
+ }
423
+ state.activeThinkingText = "";
424
+ if (state.allThinkingText) state.allThinkingText += "\n\n";
425
+ } else if (eventType === "INTENT_THINKING_CONT") {
426
+ const delta = event.message || "";
427
+ if (!delta) return state;
428
+ if (state.currentThinkingStepId) {
429
+ const step = state.steps.find((s) => s.id === state.currentThinkingStepId);
430
+ if (step) {
431
+ step.thinkingText = (step.thinkingText || "") + delta;
432
+ }
433
+ }
434
+ if (state.activeThinkingText == null) state.activeThinkingText = "";
435
+ state.activeThinkingText += delta;
436
+ state.allThinkingText += delta;
396
437
  }
397
438
  return state;
398
439
  }
@@ -416,7 +457,9 @@ ${state.errorMessage}` : "",
416
457
  steps: state.hasError ? [] : [...state.steps],
417
458
  currentExecutingStepId: state.hasError ? void 0 : state.currentExecutingStepId,
418
459
  isCancelled: false,
419
- userActionResult: state.userActionResult
460
+ userActionResult: state.userActionResult,
461
+ activeThinkingText: state.hasError ? void 0 : state.activeThinkingText,
462
+ allThinkingText: state.hasError ? void 0 : state.allThinkingText
420
463
  };
421
464
  }
422
465
  function createErrorMessageUpdate(error, state) {
@@ -459,7 +502,9 @@ ${state.errorMessage}` : state.accumulatedContent || "",
459
502
  steps: state.hasError ? [] : [...state.steps],
460
503
  isCancelled: false,
461
504
  currentExecutingStepId: void 0,
462
- userActionResult: state.userActionResult
505
+ userActionResult: state.userActionResult,
506
+ activeThinkingText: void 0,
507
+ allThinkingText: state.hasError ? void 0 : state.allThinkingText
463
508
  };
464
509
  }
465
510
  function createCancelledMessageUpdate(steps, currentMessage) {
@@ -568,11 +613,61 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
568
613
  steps: [],
569
614
  stepCounter: 0,
570
615
  currentExecutingStepId: void 0,
616
+ currentThinkingStepId: void 0,
571
617
  hasError: false,
572
618
  errorMessage: "",
573
619
  userActionRequest: void 0,
574
620
  userActionPending: false,
575
- userActionResult: void 0
621
+ userActionResult: void 0,
622
+ allThinkingText: ""
623
+ };
624
+ const THROTTLE_MS = 120;
625
+ const CHARS_PER_TICK = 10;
626
+ const displayedLengthRef = { current: 0 };
627
+ let throttleIntervalId = null;
628
+ const getActiveStepMessage = () => state.steps.find((s) => s.id === state.currentExecutingStepId)?.message || [...state.steps].reverse().find((s) => s.status === "in_progress")?.message;
629
+ const advanceDisplayLength = (full) => {
630
+ let newLen = Math.min(displayedLengthRef.current + CHARS_PER_TICK, full.length);
631
+ if (newLen > 0 && newLen < full.length) {
632
+ const code = full.charCodeAt(newLen - 1);
633
+ if (code >= 55296 && code <= 56319) {
634
+ newLen = Math.min(newLen + 1, full.length);
635
+ }
636
+ }
637
+ displayedLengthRef.current = newLen;
638
+ };
639
+ const clearThrottle = () => {
640
+ if (throttleIntervalId != null) {
641
+ clearInterval(throttleIntervalId);
642
+ throttleIntervalId = null;
643
+ }
644
+ };
645
+ abortController.signal.addEventListener("abort", clearThrottle, { once: true });
646
+ const ensureThrottle = () => {
647
+ if (throttleIntervalId != null) return;
648
+ throttleIntervalId = setInterval(() => {
649
+ if (abortController.signal.aborted) {
650
+ clearThrottle();
651
+ return;
652
+ }
653
+ const full = state.activeThinkingText ?? "";
654
+ if (displayedLengthRef.current < full.length) {
655
+ advanceDisplayLength(full);
656
+ const displayText = full.slice(0, displayedLengthRef.current);
657
+ setMessages(
658
+ (prev) => prev.map(
659
+ (msg) => msg.id === streamingId ? {
660
+ ...msg,
661
+ ...createStreamingMessageUpdate({
662
+ ...state,
663
+ activeThinkingText: displayText,
664
+ currentMessage: getActiveStepMessage() || "Thinking..."
665
+ })
666
+ } : msg
667
+ )
668
+ );
669
+ }
670
+ }, THROTTLE_MS);
576
671
  };
577
672
  const currentConfig = configRef.current;
578
673
  const requestBody = buildRequestBody(currentConfig, userMessage, sessionId);
@@ -587,22 +682,33 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
587
682
  }
588
683
  if (event.executionId) state.executionId = event.executionId;
589
684
  if (event.sessionId) state.currentSessionId = event.sessionId;
685
+ const activeThinkingLengthBeforeProcess = state.activeThinkingText?.length ?? 0;
590
686
  processStreamEvent(event, state);
591
687
  const eventType = event.eventType;
688
+ if (eventType === "INTENT_THINKING") {
689
+ displayedLengthRef.current = 0;
690
+ ensureThrottle();
691
+ } else if (eventType !== "INTENT_THINKING_CONT") {
692
+ displayedLengthRef.current = activeThinkingLengthBeforeProcess;
693
+ clearThrottle();
694
+ }
592
695
  if (eventType === "USER_ACTION_REQUIRED" && state.userActionRequest) {
593
696
  callbacksRef.current.onUserActionRequired?.(state.userActionRequest);
594
697
  } else if (eventType.startsWith("USER_ACTION_") && eventType !== "USER_ACTION_REQUIRED") {
595
698
  const msg = event.message?.trim() || event.errorMessage?.trim() || getEventMessage(event);
596
699
  callbacksRef.current.onUserActionEvent?.(eventType, msg);
597
700
  }
701
+ const isIntentThinkingEvent = eventType === "INTENT_THINKING" || eventType === "INTENT_THINKING_CONT";
598
702
  const rawMessage = event.message?.trim() || event.errorMessage?.trim();
599
- const currentMessage = rawMessage || (event.eventType?.startsWith("USER_ACTION_") ? getEventMessage(event) : void 0);
703
+ const currentMessage = isIntentThinkingEvent ? getActiveStepMessage() || "Thinking..." : rawMessage || (event.eventType?.startsWith("USER_ACTION_") ? getEventMessage(event) : void 0);
704
+ const displayThinking = state.activeThinkingText != null ? state.activeThinkingText.slice(0, displayedLengthRef.current) : state.activeThinkingText;
600
705
  setMessages(
601
706
  (prev) => prev.map(
602
707
  (msg) => msg.id === streamingId ? {
603
708
  ...msg,
604
709
  ...createStreamingMessageUpdate({
605
710
  ...state,
711
+ activeThinkingText: displayThinking,
606
712
  currentMessage
607
713
  })
608
714
  } : msg
@@ -610,6 +716,7 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
610
716
  );
611
717
  },
612
718
  onError: (error) => {
719
+ clearThrottle();
613
720
  setIsWaitingForResponse(false);
614
721
  if (error.name !== "AbortError") {
615
722
  callbacksRef.current.onError?.(error);
@@ -632,6 +739,7 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
632
739
  );
633
740
  },
634
741
  onComplete: () => {
742
+ clearThrottle();
635
743
  setIsWaitingForResponse(false);
636
744
  if (state.userActionPending) {
637
745
  state.userActionPending = false;
@@ -656,8 +764,10 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
656
764
  callbacksRef.current.onStreamComplete?.(finalMessage);
657
765
  }
658
766
  });
767
+ clearThrottle();
659
768
  return state.currentSessionId;
660
769
  } catch (error) {
770
+ clearThrottle();
661
771
  setIsWaitingForResponse(false);
662
772
  if (error.name !== "AbortError") {
663
773
  callbacksRef.current.onError?.(error);