@paymanai/payman-typescript-ask-sdk 1.2.1 → 1.2.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/dist/index.d.mts CHANGED
@@ -89,6 +89,8 @@ type StreamingStep = {
89
89
  status: "in_progress" | "completed" | "error" | "pending";
90
90
  timestamp: number;
91
91
  elapsedMs?: number;
92
+ thinkingText?: string;
93
+ isThinking?: boolean;
92
94
  };
93
95
  type ChunkDisplay = {
94
96
  id?: string;
@@ -117,6 +119,10 @@ type MessageDisplay = {
117
119
  currentExecutingStepId?: string;
118
120
  /** Result of user action (OTP approval/rejection) */
119
121
  userActionResult?: UserActionResult;
122
+ /** Current thinking block text (live, resets per block) */
123
+ activeThinkingText?: string;
124
+ /** All thinking accumulated across blocks (for post-stream display) */
125
+ allThinkingText?: string;
120
126
  };
121
127
  type SessionParams = {
122
128
  id?: string;
package/dist/index.d.ts CHANGED
@@ -89,6 +89,8 @@ type StreamingStep = {
89
89
  status: "in_progress" | "completed" | "error" | "pending";
90
90
  timestamp: number;
91
91
  elapsedMs?: number;
92
+ thinkingText?: string;
93
+ isThinking?: boolean;
92
94
  };
93
95
  type ChunkDisplay = {
94
96
  id?: string;
@@ -117,6 +119,10 @@ type MessageDisplay = {
117
119
  currentExecutingStepId?: string;
118
120
  /** Result of user action (OTP approval/rejection) */
119
121
  userActionResult?: UserActionResult;
122
+ /** Current thinking block text (live, resets per block) */
123
+ activeThinkingText?: string;
124
+ /** All thinking accumulated across blocks (for post-stream display) */
125
+ allThinkingText?: string;
120
126
  };
121
127
  type SessionParams = {
122
128
  id?: string;
package/dist/index.js CHANGED
@@ -158,6 +158,10 @@ function getEventMessage(event) {
158
158
  return "Verification code resent";
159
159
  case "USER_ACTION_FAILED":
160
160
  return "Verification failed";
161
+ case "INTENT_THINKING":
162
+ return event.workerName ? `${event.workerName} thinking...` : "Thinking...";
163
+ case "INTENT_THINKING_CONT":
164
+ return event.message || "";
161
165
  default:
162
166
  return eventType;
163
167
  }
@@ -195,6 +199,16 @@ function completeLastInProgressStep(steps) {
195
199
  function processStreamEvent(event, state) {
196
200
  const eventType = event.eventType;
197
201
  const message = getEventMessage(event);
202
+ if (eventType !== "INTENT_THINKING" && eventType !== "INTENT_THINKING_CONT") {
203
+ if (state.currentThinkingStepId) {
204
+ const thinkingStep = state.steps.find((s) => s.id === state.currentThinkingStepId);
205
+ if (thinkingStep) {
206
+ thinkingStep.isThinking = false;
207
+ }
208
+ state.currentThinkingStepId = void 0;
209
+ }
210
+ state.activeThinkingText = void 0;
211
+ }
198
212
  if ((eventType === "COMPLETED" || eventType === "WORKFLOW_COMPLETED") && event.response !== void 0) {
199
213
  const content = extractResponseContent(event.response);
200
214
  if (content) {
@@ -221,6 +235,7 @@ function processStreamEvent(event, state) {
221
235
  state.hasError = true;
222
236
  state.errorMessage = message || event.errorMessage || "An error occurred";
223
237
  } else if (eventType === "ORCHESTRATOR_COMPLETED") {
238
+ state.inOrchestratorPhase = false;
224
239
  const orchestratorStep = state.steps.find(
225
240
  (s) => s.eventType === "ORCHESTRATOR_THINKING" && s.status === "in_progress"
226
241
  );
@@ -247,6 +262,7 @@ function processStreamEvent(event, state) {
247
262
  }
248
263
  }
249
264
  } else if (eventType === "AGGREGATOR_COMPLETED") {
265
+ state.inAggregatorPhase = false;
250
266
  const aggregatorStep = state.steps.find(
251
267
  (s) => s.eventType === "AGGREGATOR_THINKING" && s.status === "in_progress"
252
268
  );
@@ -260,6 +276,12 @@ function processStreamEvent(event, state) {
260
276
  }
261
277
  }
262
278
  } else if (eventType === "ORCHESTRATOR_THINKING" || eventType === "INTENT_STARTED" || eventType === "INTENT_PROGRESS" || eventType === "AGGREGATOR_THINKING") {
279
+ if (eventType === "ORCHESTRATOR_THINKING") {
280
+ state.inOrchestratorPhase = true;
281
+ }
282
+ if (eventType === "AGGREGATOR_THINKING") {
283
+ state.inAggregatorPhase = true;
284
+ }
263
285
  if (eventType === "INTENT_PROGRESS") {
264
286
  const intentStep = state.steps.find(
265
287
  (s) => s.eventType === "INTENT_STARTED" && s.status === "in_progress"
@@ -395,6 +417,37 @@ function processStreamEvent(event, state) {
395
417
  timestamp: Date.now(),
396
418
  elapsedMs: event.elapsedMs
397
419
  });
420
+ } else if (eventType === "INTENT_THINKING") {
421
+ if (state.currentThinkingStepId) {
422
+ const prev = state.steps.find((s) => s.id === state.currentThinkingStepId);
423
+ if (prev) prev.isThinking = false;
424
+ }
425
+ const lastInProgress = [...state.steps].reverse().find((s) => s.status === "in_progress");
426
+ if (lastInProgress) {
427
+ lastInProgress.thinkingText = "";
428
+ lastInProgress.isThinking = true;
429
+ state.currentThinkingStepId = lastInProgress.id;
430
+ } else {
431
+ state.currentThinkingStepId = void 0;
432
+ }
433
+ if (state.allThinkingText) state.allThinkingText += "\n\n";
434
+ if (!state.inOrchestratorPhase && !state.inAggregatorPhase) {
435
+ state.activeThinkingText = "";
436
+ }
437
+ } else if (eventType === "INTENT_THINKING_CONT") {
438
+ const delta = event.message || "";
439
+ if (!delta) return state;
440
+ if (state.currentThinkingStepId) {
441
+ const step = state.steps.find((s) => s.id === state.currentThinkingStepId);
442
+ if (step) {
443
+ step.thinkingText = (step.thinkingText || "") + delta;
444
+ }
445
+ }
446
+ state.allThinkingText += delta;
447
+ if (!state.inOrchestratorPhase && !state.inAggregatorPhase) {
448
+ if (state.activeThinkingText == null) state.activeThinkingText = "";
449
+ state.activeThinkingText += delta;
450
+ }
398
451
  }
399
452
  return state;
400
453
  }
@@ -418,7 +471,9 @@ ${state.errorMessage}` : "",
418
471
  steps: state.hasError ? [] : [...state.steps],
419
472
  currentExecutingStepId: state.hasError ? void 0 : state.currentExecutingStepId,
420
473
  isCancelled: false,
421
- userActionResult: state.userActionResult
474
+ userActionResult: state.userActionResult,
475
+ activeThinkingText: state.hasError ? void 0 : state.activeThinkingText,
476
+ allThinkingText: state.hasError ? void 0 : state.allThinkingText
422
477
  };
423
478
  }
424
479
  function createErrorMessageUpdate(error, state) {
@@ -461,7 +516,9 @@ ${state.errorMessage}` : state.accumulatedContent || "",
461
516
  steps: state.hasError ? [] : [...state.steps],
462
517
  isCancelled: false,
463
518
  currentExecutingStepId: void 0,
464
- userActionResult: state.userActionResult
519
+ userActionResult: state.userActionResult,
520
+ activeThinkingText: void 0,
521
+ allThinkingText: state.hasError ? void 0 : state.allThinkingText
465
522
  };
466
523
  }
467
524
  function createCancelledMessageUpdate(steps, currentMessage) {
@@ -570,11 +627,63 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
570
627
  steps: [],
571
628
  stepCounter: 0,
572
629
  currentExecutingStepId: void 0,
630
+ currentThinkingStepId: void 0,
573
631
  hasError: false,
574
632
  errorMessage: "",
575
633
  userActionRequest: void 0,
576
634
  userActionPending: false,
577
- userActionResult: void 0
635
+ userActionResult: void 0,
636
+ allThinkingText: "",
637
+ inOrchestratorPhase: false,
638
+ inAggregatorPhase: false
639
+ };
640
+ const THROTTLE_MS = 120;
641
+ const CHARS_PER_TICK = 10;
642
+ const displayedLengthRef = { current: 0 };
643
+ let throttleIntervalId = null;
644
+ const getActiveStepMessage = () => state.steps.find((s) => s.id === state.currentExecutingStepId)?.message || [...state.steps].reverse().find((s) => s.status === "in_progress")?.message;
645
+ const advanceDisplayLength = (full) => {
646
+ let newLen = Math.min(displayedLengthRef.current + CHARS_PER_TICK, full.length);
647
+ if (newLen > 0 && newLen < full.length) {
648
+ const code = full.charCodeAt(newLen - 1);
649
+ if (code >= 55296 && code <= 56319) {
650
+ newLen = Math.min(newLen + 1, full.length);
651
+ }
652
+ }
653
+ displayedLengthRef.current = newLen;
654
+ };
655
+ const clearThrottle = () => {
656
+ if (throttleIntervalId != null) {
657
+ clearInterval(throttleIntervalId);
658
+ throttleIntervalId = null;
659
+ }
660
+ };
661
+ abortController.signal.addEventListener("abort", clearThrottle, { once: true });
662
+ const ensureThrottle = () => {
663
+ if (throttleIntervalId != null) return;
664
+ throttleIntervalId = setInterval(() => {
665
+ if (abortController.signal.aborted) {
666
+ clearThrottle();
667
+ return;
668
+ }
669
+ const full = state.activeThinkingText ?? "";
670
+ if (displayedLengthRef.current < full.length) {
671
+ advanceDisplayLength(full);
672
+ const displayText = full.slice(0, displayedLengthRef.current);
673
+ setMessages(
674
+ (prev) => prev.map(
675
+ (msg) => msg.id === streamingId ? {
676
+ ...msg,
677
+ ...createStreamingMessageUpdate({
678
+ ...state,
679
+ activeThinkingText: displayText,
680
+ currentMessage: getActiveStepMessage() || "Thinking..."
681
+ })
682
+ } : msg
683
+ )
684
+ );
685
+ }
686
+ }, THROTTLE_MS);
578
687
  };
579
688
  const currentConfig = configRef.current;
580
689
  const requestBody = buildRequestBody(currentConfig, userMessage, sessionId);
@@ -589,22 +698,33 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
589
698
  }
590
699
  if (event.executionId) state.executionId = event.executionId;
591
700
  if (event.sessionId) state.currentSessionId = event.sessionId;
701
+ const activeThinkingLengthBeforeProcess = state.activeThinkingText?.length ?? 0;
592
702
  processStreamEvent(event, state);
593
703
  const eventType = event.eventType;
704
+ if (eventType === "INTENT_THINKING") {
705
+ displayedLengthRef.current = 0;
706
+ ensureThrottle();
707
+ } else if (eventType !== "INTENT_THINKING_CONT") {
708
+ displayedLengthRef.current = activeThinkingLengthBeforeProcess;
709
+ clearThrottle();
710
+ }
594
711
  if (eventType === "USER_ACTION_REQUIRED" && state.userActionRequest) {
595
712
  callbacksRef.current.onUserActionRequired?.(state.userActionRequest);
596
713
  } else if (eventType.startsWith("USER_ACTION_") && eventType !== "USER_ACTION_REQUIRED") {
597
714
  const msg = event.message?.trim() || event.errorMessage?.trim() || getEventMessage(event);
598
715
  callbacksRef.current.onUserActionEvent?.(eventType, msg);
599
716
  }
717
+ const isIntentThinkingEvent = eventType === "INTENT_THINKING" || eventType === "INTENT_THINKING_CONT";
600
718
  const rawMessage = event.message?.trim() || event.errorMessage?.trim();
601
- const currentMessage = rawMessage || (event.eventType?.startsWith("USER_ACTION_") ? getEventMessage(event) : void 0);
719
+ const currentMessage = isIntentThinkingEvent ? getActiveStepMessage() || "Thinking..." : rawMessage || (event.eventType?.startsWith("USER_ACTION_") ? getEventMessage(event) : getActiveStepMessage() || getEventMessage(event));
720
+ const displayThinking = state.activeThinkingText != null ? state.activeThinkingText.slice(0, displayedLengthRef.current) : state.activeThinkingText;
602
721
  setMessages(
603
722
  (prev) => prev.map(
604
723
  (msg) => msg.id === streamingId ? {
605
724
  ...msg,
606
725
  ...createStreamingMessageUpdate({
607
726
  ...state,
727
+ activeThinkingText: displayThinking,
608
728
  currentMessage
609
729
  })
610
730
  } : msg
@@ -612,6 +732,7 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
612
732
  );
613
733
  },
614
734
  onError: (error) => {
735
+ clearThrottle();
615
736
  setIsWaitingForResponse(false);
616
737
  if (error.name !== "AbortError") {
617
738
  callbacksRef.current.onError?.(error);
@@ -634,6 +755,7 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
634
755
  );
635
756
  },
636
757
  onComplete: () => {
758
+ clearThrottle();
637
759
  setIsWaitingForResponse(false);
638
760
  if (state.userActionPending) {
639
761
  state.userActionPending = false;
@@ -658,8 +780,10 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
658
780
  callbacksRef.current.onStreamComplete?.(finalMessage);
659
781
  }
660
782
  });
783
+ clearThrottle();
661
784
  return state.currentSessionId;
662
785
  } catch (error) {
786
+ clearThrottle();
663
787
  setIsWaitingForResponse(false);
664
788
  if (error.name !== "AbortError") {
665
789
  callbacksRef.current.onError?.(error);