@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.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) :
|
|
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);
|