@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.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) {
|
|
@@ -395,6 +409,33 @@ function processStreamEvent(event, state) {
|
|
|
395
409
|
timestamp: Date.now(),
|
|
396
410
|
elapsedMs: event.elapsedMs
|
|
397
411
|
});
|
|
412
|
+
} else if (eventType === "INTENT_THINKING") {
|
|
413
|
+
if (state.currentThinkingStepId) {
|
|
414
|
+
const prev = state.steps.find((s) => s.id === state.currentThinkingStepId);
|
|
415
|
+
if (prev) prev.isThinking = false;
|
|
416
|
+
}
|
|
417
|
+
const lastInProgress = [...state.steps].reverse().find((s) => s.status === "in_progress");
|
|
418
|
+
if (lastInProgress) {
|
|
419
|
+
lastInProgress.thinkingText = "";
|
|
420
|
+
lastInProgress.isThinking = true;
|
|
421
|
+
state.currentThinkingStepId = lastInProgress.id;
|
|
422
|
+
} else {
|
|
423
|
+
state.currentThinkingStepId = void 0;
|
|
424
|
+
}
|
|
425
|
+
state.activeThinkingText = "";
|
|
426
|
+
if (state.allThinkingText) state.allThinkingText += "\n\n";
|
|
427
|
+
} else if (eventType === "INTENT_THINKING_CONT") {
|
|
428
|
+
const delta = event.message || "";
|
|
429
|
+
if (!delta) return state;
|
|
430
|
+
if (state.currentThinkingStepId) {
|
|
431
|
+
const step = state.steps.find((s) => s.id === state.currentThinkingStepId);
|
|
432
|
+
if (step) {
|
|
433
|
+
step.thinkingText = (step.thinkingText || "") + delta;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
if (state.activeThinkingText == null) state.activeThinkingText = "";
|
|
437
|
+
state.activeThinkingText += delta;
|
|
438
|
+
state.allThinkingText += delta;
|
|
398
439
|
}
|
|
399
440
|
return state;
|
|
400
441
|
}
|
|
@@ -418,7 +459,9 @@ ${state.errorMessage}` : "",
|
|
|
418
459
|
steps: state.hasError ? [] : [...state.steps],
|
|
419
460
|
currentExecutingStepId: state.hasError ? void 0 : state.currentExecutingStepId,
|
|
420
461
|
isCancelled: false,
|
|
421
|
-
userActionResult: state.userActionResult
|
|
462
|
+
userActionResult: state.userActionResult,
|
|
463
|
+
activeThinkingText: state.hasError ? void 0 : state.activeThinkingText,
|
|
464
|
+
allThinkingText: state.hasError ? void 0 : state.allThinkingText
|
|
422
465
|
};
|
|
423
466
|
}
|
|
424
467
|
function createErrorMessageUpdate(error, state) {
|
|
@@ -461,7 +504,9 @@ ${state.errorMessage}` : state.accumulatedContent || "",
|
|
|
461
504
|
steps: state.hasError ? [] : [...state.steps],
|
|
462
505
|
isCancelled: false,
|
|
463
506
|
currentExecutingStepId: void 0,
|
|
464
|
-
userActionResult: state.userActionResult
|
|
507
|
+
userActionResult: state.userActionResult,
|
|
508
|
+
activeThinkingText: void 0,
|
|
509
|
+
allThinkingText: state.hasError ? void 0 : state.allThinkingText
|
|
465
510
|
};
|
|
466
511
|
}
|
|
467
512
|
function createCancelledMessageUpdate(steps, currentMessage) {
|
|
@@ -570,11 +615,61 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
570
615
|
steps: [],
|
|
571
616
|
stepCounter: 0,
|
|
572
617
|
currentExecutingStepId: void 0,
|
|
618
|
+
currentThinkingStepId: void 0,
|
|
573
619
|
hasError: false,
|
|
574
620
|
errorMessage: "",
|
|
575
621
|
userActionRequest: void 0,
|
|
576
622
|
userActionPending: false,
|
|
577
|
-
userActionResult: void 0
|
|
623
|
+
userActionResult: void 0,
|
|
624
|
+
allThinkingText: ""
|
|
625
|
+
};
|
|
626
|
+
const THROTTLE_MS = 120;
|
|
627
|
+
const CHARS_PER_TICK = 10;
|
|
628
|
+
const displayedLengthRef = { current: 0 };
|
|
629
|
+
let throttleIntervalId = null;
|
|
630
|
+
const getActiveStepMessage = () => state.steps.find((s) => s.id === state.currentExecutingStepId)?.message || [...state.steps].reverse().find((s) => s.status === "in_progress")?.message;
|
|
631
|
+
const advanceDisplayLength = (full) => {
|
|
632
|
+
let newLen = Math.min(displayedLengthRef.current + CHARS_PER_TICK, full.length);
|
|
633
|
+
if (newLen > 0 && newLen < full.length) {
|
|
634
|
+
const code = full.charCodeAt(newLen - 1);
|
|
635
|
+
if (code >= 55296 && code <= 56319) {
|
|
636
|
+
newLen = Math.min(newLen + 1, full.length);
|
|
637
|
+
}
|
|
638
|
+
}
|
|
639
|
+
displayedLengthRef.current = newLen;
|
|
640
|
+
};
|
|
641
|
+
const clearThrottle = () => {
|
|
642
|
+
if (throttleIntervalId != null) {
|
|
643
|
+
clearInterval(throttleIntervalId);
|
|
644
|
+
throttleIntervalId = null;
|
|
645
|
+
}
|
|
646
|
+
};
|
|
647
|
+
abortController.signal.addEventListener("abort", clearThrottle, { once: true });
|
|
648
|
+
const ensureThrottle = () => {
|
|
649
|
+
if (throttleIntervalId != null) return;
|
|
650
|
+
throttleIntervalId = setInterval(() => {
|
|
651
|
+
if (abortController.signal.aborted) {
|
|
652
|
+
clearThrottle();
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
const full = state.activeThinkingText ?? "";
|
|
656
|
+
if (displayedLengthRef.current < full.length) {
|
|
657
|
+
advanceDisplayLength(full);
|
|
658
|
+
const displayText = full.slice(0, displayedLengthRef.current);
|
|
659
|
+
setMessages(
|
|
660
|
+
(prev) => prev.map(
|
|
661
|
+
(msg) => msg.id === streamingId ? {
|
|
662
|
+
...msg,
|
|
663
|
+
...createStreamingMessageUpdate({
|
|
664
|
+
...state,
|
|
665
|
+
activeThinkingText: displayText,
|
|
666
|
+
currentMessage: getActiveStepMessage() || "Thinking..."
|
|
667
|
+
})
|
|
668
|
+
} : msg
|
|
669
|
+
)
|
|
670
|
+
);
|
|
671
|
+
}
|
|
672
|
+
}, THROTTLE_MS);
|
|
578
673
|
};
|
|
579
674
|
const currentConfig = configRef.current;
|
|
580
675
|
const requestBody = buildRequestBody(currentConfig, userMessage, sessionId);
|
|
@@ -589,22 +684,33 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
589
684
|
}
|
|
590
685
|
if (event.executionId) state.executionId = event.executionId;
|
|
591
686
|
if (event.sessionId) state.currentSessionId = event.sessionId;
|
|
687
|
+
const activeThinkingLengthBeforeProcess = state.activeThinkingText?.length ?? 0;
|
|
592
688
|
processStreamEvent(event, state);
|
|
593
689
|
const eventType = event.eventType;
|
|
690
|
+
if (eventType === "INTENT_THINKING") {
|
|
691
|
+
displayedLengthRef.current = 0;
|
|
692
|
+
ensureThrottle();
|
|
693
|
+
} else if (eventType !== "INTENT_THINKING_CONT") {
|
|
694
|
+
displayedLengthRef.current = activeThinkingLengthBeforeProcess;
|
|
695
|
+
clearThrottle();
|
|
696
|
+
}
|
|
594
697
|
if (eventType === "USER_ACTION_REQUIRED" && state.userActionRequest) {
|
|
595
698
|
callbacksRef.current.onUserActionRequired?.(state.userActionRequest);
|
|
596
699
|
} else if (eventType.startsWith("USER_ACTION_") && eventType !== "USER_ACTION_REQUIRED") {
|
|
597
700
|
const msg = event.message?.trim() || event.errorMessage?.trim() || getEventMessage(event);
|
|
598
701
|
callbacksRef.current.onUserActionEvent?.(eventType, msg);
|
|
599
702
|
}
|
|
703
|
+
const isIntentThinkingEvent = eventType === "INTENT_THINKING" || eventType === "INTENT_THINKING_CONT";
|
|
600
704
|
const rawMessage = event.message?.trim() || event.errorMessage?.trim();
|
|
601
|
-
const currentMessage = rawMessage || (event.eventType?.startsWith("USER_ACTION_") ? getEventMessage(event) : void 0);
|
|
705
|
+
const currentMessage = isIntentThinkingEvent ? getActiveStepMessage() || "Thinking..." : rawMessage || (event.eventType?.startsWith("USER_ACTION_") ? getEventMessage(event) : void 0);
|
|
706
|
+
const displayThinking = state.activeThinkingText != null ? state.activeThinkingText.slice(0, displayedLengthRef.current) : state.activeThinkingText;
|
|
602
707
|
setMessages(
|
|
603
708
|
(prev) => prev.map(
|
|
604
709
|
(msg) => msg.id === streamingId ? {
|
|
605
710
|
...msg,
|
|
606
711
|
...createStreamingMessageUpdate({
|
|
607
712
|
...state,
|
|
713
|
+
activeThinkingText: displayThinking,
|
|
608
714
|
currentMessage
|
|
609
715
|
})
|
|
610
716
|
} : msg
|
|
@@ -612,6 +718,7 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
612
718
|
);
|
|
613
719
|
},
|
|
614
720
|
onError: (error) => {
|
|
721
|
+
clearThrottle();
|
|
615
722
|
setIsWaitingForResponse(false);
|
|
616
723
|
if (error.name !== "AbortError") {
|
|
617
724
|
callbacksRef.current.onError?.(error);
|
|
@@ -634,6 +741,7 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
634
741
|
);
|
|
635
742
|
},
|
|
636
743
|
onComplete: () => {
|
|
744
|
+
clearThrottle();
|
|
637
745
|
setIsWaitingForResponse(false);
|
|
638
746
|
if (state.userActionPending) {
|
|
639
747
|
state.userActionPending = false;
|
|
@@ -658,8 +766,10 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
658
766
|
callbacksRef.current.onStreamComplete?.(finalMessage);
|
|
659
767
|
}
|
|
660
768
|
});
|
|
769
|
+
clearThrottle();
|
|
661
770
|
return state.currentSessionId;
|
|
662
771
|
} catch (error) {
|
|
772
|
+
clearThrottle();
|
|
663
773
|
setIsWaitingForResponse(false);
|
|
664
774
|
if (error.name !== "AbortError") {
|
|
665
775
|
callbacksRef.current.onError?.(error);
|