@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 +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +128 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +128 -4
- package/dist/index.mjs.map +1 -1
- package/dist/index.native.js +128 -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) {
|
|
@@ -219,6 +233,7 @@ function processStreamEvent(event, state) {
|
|
|
219
233
|
state.hasError = true;
|
|
220
234
|
state.errorMessage = message || event.errorMessage || "An error occurred";
|
|
221
235
|
} else if (eventType === "ORCHESTRATOR_COMPLETED") {
|
|
236
|
+
state.inOrchestratorPhase = false;
|
|
222
237
|
const orchestratorStep = state.steps.find(
|
|
223
238
|
(s) => s.eventType === "ORCHESTRATOR_THINKING" && s.status === "in_progress"
|
|
224
239
|
);
|
|
@@ -245,6 +260,7 @@ function processStreamEvent(event, state) {
|
|
|
245
260
|
}
|
|
246
261
|
}
|
|
247
262
|
} else if (eventType === "AGGREGATOR_COMPLETED") {
|
|
263
|
+
state.inAggregatorPhase = false;
|
|
248
264
|
const aggregatorStep = state.steps.find(
|
|
249
265
|
(s) => s.eventType === "AGGREGATOR_THINKING" && s.status === "in_progress"
|
|
250
266
|
);
|
|
@@ -258,6 +274,12 @@ function processStreamEvent(event, state) {
|
|
|
258
274
|
}
|
|
259
275
|
}
|
|
260
276
|
} else if (eventType === "ORCHESTRATOR_THINKING" || eventType === "INTENT_STARTED" || eventType === "INTENT_PROGRESS" || eventType === "AGGREGATOR_THINKING") {
|
|
277
|
+
if (eventType === "ORCHESTRATOR_THINKING") {
|
|
278
|
+
state.inOrchestratorPhase = true;
|
|
279
|
+
}
|
|
280
|
+
if (eventType === "AGGREGATOR_THINKING") {
|
|
281
|
+
state.inAggregatorPhase = true;
|
|
282
|
+
}
|
|
261
283
|
if (eventType === "INTENT_PROGRESS") {
|
|
262
284
|
const intentStep = state.steps.find(
|
|
263
285
|
(s) => s.eventType === "INTENT_STARTED" && s.status === "in_progress"
|
|
@@ -393,6 +415,37 @@ function processStreamEvent(event, state) {
|
|
|
393
415
|
timestamp: Date.now(),
|
|
394
416
|
elapsedMs: event.elapsedMs
|
|
395
417
|
});
|
|
418
|
+
} else if (eventType === "INTENT_THINKING") {
|
|
419
|
+
if (state.currentThinkingStepId) {
|
|
420
|
+
const prev = state.steps.find((s) => s.id === state.currentThinkingStepId);
|
|
421
|
+
if (prev) prev.isThinking = false;
|
|
422
|
+
}
|
|
423
|
+
const lastInProgress = [...state.steps].reverse().find((s) => s.status === "in_progress");
|
|
424
|
+
if (lastInProgress) {
|
|
425
|
+
lastInProgress.thinkingText = "";
|
|
426
|
+
lastInProgress.isThinking = true;
|
|
427
|
+
state.currentThinkingStepId = lastInProgress.id;
|
|
428
|
+
} else {
|
|
429
|
+
state.currentThinkingStepId = void 0;
|
|
430
|
+
}
|
|
431
|
+
if (state.allThinkingText) state.allThinkingText += "\n\n";
|
|
432
|
+
if (!state.inOrchestratorPhase && !state.inAggregatorPhase) {
|
|
433
|
+
state.activeThinkingText = "";
|
|
434
|
+
}
|
|
435
|
+
} else if (eventType === "INTENT_THINKING_CONT") {
|
|
436
|
+
const delta = event.message || "";
|
|
437
|
+
if (!delta) return state;
|
|
438
|
+
if (state.currentThinkingStepId) {
|
|
439
|
+
const step = state.steps.find((s) => s.id === state.currentThinkingStepId);
|
|
440
|
+
if (step) {
|
|
441
|
+
step.thinkingText = (step.thinkingText || "") + delta;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
state.allThinkingText += delta;
|
|
445
|
+
if (!state.inOrchestratorPhase && !state.inAggregatorPhase) {
|
|
446
|
+
if (state.activeThinkingText == null) state.activeThinkingText = "";
|
|
447
|
+
state.activeThinkingText += delta;
|
|
448
|
+
}
|
|
396
449
|
}
|
|
397
450
|
return state;
|
|
398
451
|
}
|
|
@@ -416,7 +469,9 @@ ${state.errorMessage}` : "",
|
|
|
416
469
|
steps: state.hasError ? [] : [...state.steps],
|
|
417
470
|
currentExecutingStepId: state.hasError ? void 0 : state.currentExecutingStepId,
|
|
418
471
|
isCancelled: false,
|
|
419
|
-
userActionResult: state.userActionResult
|
|
472
|
+
userActionResult: state.userActionResult,
|
|
473
|
+
activeThinkingText: state.hasError ? void 0 : state.activeThinkingText,
|
|
474
|
+
allThinkingText: state.hasError ? void 0 : state.allThinkingText
|
|
420
475
|
};
|
|
421
476
|
}
|
|
422
477
|
function createErrorMessageUpdate(error, state) {
|
|
@@ -459,7 +514,9 @@ ${state.errorMessage}` : state.accumulatedContent || "",
|
|
|
459
514
|
steps: state.hasError ? [] : [...state.steps],
|
|
460
515
|
isCancelled: false,
|
|
461
516
|
currentExecutingStepId: void 0,
|
|
462
|
-
userActionResult: state.userActionResult
|
|
517
|
+
userActionResult: state.userActionResult,
|
|
518
|
+
activeThinkingText: void 0,
|
|
519
|
+
allThinkingText: state.hasError ? void 0 : state.allThinkingText
|
|
463
520
|
};
|
|
464
521
|
}
|
|
465
522
|
function createCancelledMessageUpdate(steps, currentMessage) {
|
|
@@ -568,11 +625,63 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
568
625
|
steps: [],
|
|
569
626
|
stepCounter: 0,
|
|
570
627
|
currentExecutingStepId: void 0,
|
|
628
|
+
currentThinkingStepId: void 0,
|
|
571
629
|
hasError: false,
|
|
572
630
|
errorMessage: "",
|
|
573
631
|
userActionRequest: void 0,
|
|
574
632
|
userActionPending: false,
|
|
575
|
-
userActionResult: void 0
|
|
633
|
+
userActionResult: void 0,
|
|
634
|
+
allThinkingText: "",
|
|
635
|
+
inOrchestratorPhase: false,
|
|
636
|
+
inAggregatorPhase: false
|
|
637
|
+
};
|
|
638
|
+
const THROTTLE_MS = 120;
|
|
639
|
+
const CHARS_PER_TICK = 10;
|
|
640
|
+
const displayedLengthRef = { current: 0 };
|
|
641
|
+
let throttleIntervalId = null;
|
|
642
|
+
const getActiveStepMessage = () => state.steps.find((s) => s.id === state.currentExecutingStepId)?.message || [...state.steps].reverse().find((s) => s.status === "in_progress")?.message;
|
|
643
|
+
const advanceDisplayLength = (full) => {
|
|
644
|
+
let newLen = Math.min(displayedLengthRef.current + CHARS_PER_TICK, full.length);
|
|
645
|
+
if (newLen > 0 && newLen < full.length) {
|
|
646
|
+
const code = full.charCodeAt(newLen - 1);
|
|
647
|
+
if (code >= 55296 && code <= 56319) {
|
|
648
|
+
newLen = Math.min(newLen + 1, full.length);
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
displayedLengthRef.current = newLen;
|
|
652
|
+
};
|
|
653
|
+
const clearThrottle = () => {
|
|
654
|
+
if (throttleIntervalId != null) {
|
|
655
|
+
clearInterval(throttleIntervalId);
|
|
656
|
+
throttleIntervalId = null;
|
|
657
|
+
}
|
|
658
|
+
};
|
|
659
|
+
abortController.signal.addEventListener("abort", clearThrottle, { once: true });
|
|
660
|
+
const ensureThrottle = () => {
|
|
661
|
+
if (throttleIntervalId != null) return;
|
|
662
|
+
throttleIntervalId = setInterval(() => {
|
|
663
|
+
if (abortController.signal.aborted) {
|
|
664
|
+
clearThrottle();
|
|
665
|
+
return;
|
|
666
|
+
}
|
|
667
|
+
const full = state.activeThinkingText ?? "";
|
|
668
|
+
if (displayedLengthRef.current < full.length) {
|
|
669
|
+
advanceDisplayLength(full);
|
|
670
|
+
const displayText = full.slice(0, displayedLengthRef.current);
|
|
671
|
+
setMessages(
|
|
672
|
+
(prev) => prev.map(
|
|
673
|
+
(msg) => msg.id === streamingId ? {
|
|
674
|
+
...msg,
|
|
675
|
+
...createStreamingMessageUpdate({
|
|
676
|
+
...state,
|
|
677
|
+
activeThinkingText: displayText,
|
|
678
|
+
currentMessage: getActiveStepMessage() || "Thinking..."
|
|
679
|
+
})
|
|
680
|
+
} : msg
|
|
681
|
+
)
|
|
682
|
+
);
|
|
683
|
+
}
|
|
684
|
+
}, THROTTLE_MS);
|
|
576
685
|
};
|
|
577
686
|
const currentConfig = configRef.current;
|
|
578
687
|
const requestBody = buildRequestBody(currentConfig, userMessage, sessionId);
|
|
@@ -587,22 +696,33 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
587
696
|
}
|
|
588
697
|
if (event.executionId) state.executionId = event.executionId;
|
|
589
698
|
if (event.sessionId) state.currentSessionId = event.sessionId;
|
|
699
|
+
const activeThinkingLengthBeforeProcess = state.activeThinkingText?.length ?? 0;
|
|
590
700
|
processStreamEvent(event, state);
|
|
591
701
|
const eventType = event.eventType;
|
|
702
|
+
if (eventType === "INTENT_THINKING") {
|
|
703
|
+
displayedLengthRef.current = 0;
|
|
704
|
+
ensureThrottle();
|
|
705
|
+
} else if (eventType !== "INTENT_THINKING_CONT") {
|
|
706
|
+
displayedLengthRef.current = activeThinkingLengthBeforeProcess;
|
|
707
|
+
clearThrottle();
|
|
708
|
+
}
|
|
592
709
|
if (eventType === "USER_ACTION_REQUIRED" && state.userActionRequest) {
|
|
593
710
|
callbacksRef.current.onUserActionRequired?.(state.userActionRequest);
|
|
594
711
|
} else if (eventType.startsWith("USER_ACTION_") && eventType !== "USER_ACTION_REQUIRED") {
|
|
595
712
|
const msg = event.message?.trim() || event.errorMessage?.trim() || getEventMessage(event);
|
|
596
713
|
callbacksRef.current.onUserActionEvent?.(eventType, msg);
|
|
597
714
|
}
|
|
715
|
+
const isIntentThinkingEvent = eventType === "INTENT_THINKING" || eventType === "INTENT_THINKING_CONT";
|
|
598
716
|
const rawMessage = event.message?.trim() || event.errorMessage?.trim();
|
|
599
|
-
const currentMessage = rawMessage || (event.eventType?.startsWith("USER_ACTION_") ? getEventMessage(event) :
|
|
717
|
+
const currentMessage = isIntentThinkingEvent ? getActiveStepMessage() || "Thinking..." : rawMessage || (event.eventType?.startsWith("USER_ACTION_") ? getEventMessage(event) : getActiveStepMessage() || getEventMessage(event));
|
|
718
|
+
const displayThinking = state.activeThinkingText != null ? state.activeThinkingText.slice(0, displayedLengthRef.current) : state.activeThinkingText;
|
|
600
719
|
setMessages(
|
|
601
720
|
(prev) => prev.map(
|
|
602
721
|
(msg) => msg.id === streamingId ? {
|
|
603
722
|
...msg,
|
|
604
723
|
...createStreamingMessageUpdate({
|
|
605
724
|
...state,
|
|
725
|
+
activeThinkingText: displayThinking,
|
|
606
726
|
currentMessage
|
|
607
727
|
})
|
|
608
728
|
} : msg
|
|
@@ -610,6 +730,7 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
610
730
|
);
|
|
611
731
|
},
|
|
612
732
|
onError: (error) => {
|
|
733
|
+
clearThrottle();
|
|
613
734
|
setIsWaitingForResponse(false);
|
|
614
735
|
if (error.name !== "AbortError") {
|
|
615
736
|
callbacksRef.current.onError?.(error);
|
|
@@ -632,6 +753,7 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
632
753
|
);
|
|
633
754
|
},
|
|
634
755
|
onComplete: () => {
|
|
756
|
+
clearThrottle();
|
|
635
757
|
setIsWaitingForResponse(false);
|
|
636
758
|
if (state.userActionPending) {
|
|
637
759
|
state.userActionPending = false;
|
|
@@ -656,8 +778,10 @@ function useStreamManager(config, callbacks, setMessages, setIsWaitingForRespons
|
|
|
656
778
|
callbacksRef.current.onStreamComplete?.(finalMessage);
|
|
657
779
|
}
|
|
658
780
|
});
|
|
781
|
+
clearThrottle();
|
|
659
782
|
return state.currentSessionId;
|
|
660
783
|
} catch (error) {
|
|
784
|
+
clearThrottle();
|
|
661
785
|
setIsWaitingForResponse(false);
|
|
662
786
|
if (error.name !== "AbortError") {
|
|
663
787
|
callbacksRef.current.onError?.(error);
|