@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.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +114 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +114 -4
- package/dist/index.mjs.map +1 -1
- package/dist/index.native.js +114 -4
- package/dist/index.native.js.map +1 -1
- package/package.json +1 -1
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);
|