@paymanai/payman-typescript-ask-sdk 2.0.0 → 2.0.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.
@@ -173,13 +173,13 @@ function getEventMessage(event) {
173
173
  case "USER_ACTION_REQUIRED":
174
174
  return "Waiting for verification...";
175
175
  case "USER_ACTION_SUCCESS":
176
- return "Verification successful";
176
+ return "Verification approved";
177
177
  case "USER_ACTION_EXPIRED":
178
178
  return "Verification expired";
179
179
  case "USER_ACTION_INVALID":
180
- return "Invalid input, please try again";
180
+ return "Invalid code. Please try again.";
181
181
  case "USER_ACTION_REJECTED":
182
- return "Verification rejected";
182
+ return "Verification cancelled";
183
183
  case "USER_ACTION_RESENT":
184
184
  return "Verification code resent";
185
185
  case "USER_ACTION_FAILED":
@@ -194,6 +194,31 @@ function getEventMessage(event) {
194
194
  return eventType;
195
195
  }
196
196
  }
197
+ function isUserActionPrompt(text) {
198
+ return /\benter\b.+\b(code|otp)\b/i.test(text) || /\b(authorization|verification)\s+code\b/i.test(text) || /\bsent\s+to\s+your\b/i.test(text);
199
+ }
200
+ function getUserActionDisplayMessage(eventType, rawMessage) {
201
+ const raw = rawMessage?.trim();
202
+ const safeRaw = raw && !isUserActionPrompt(raw) ? raw : "";
203
+ switch (eventType) {
204
+ case "USER_ACTION_REQUIRED":
205
+ return raw || "Waiting for verification...";
206
+ case "USER_ACTION_SUCCESS":
207
+ return safeRaw || "Verification approved";
208
+ case "USER_ACTION_INVALID":
209
+ return safeRaw || "Invalid code. Please try again.";
210
+ case "USER_ACTION_REJECTED":
211
+ return safeRaw || "Verification cancelled";
212
+ case "USER_ACTION_EXPIRED":
213
+ return safeRaw || "Verification expired";
214
+ case "USER_ACTION_RESENT":
215
+ return safeRaw || "Verification code resent";
216
+ case "USER_ACTION_FAILED":
217
+ return safeRaw || "Verification failed";
218
+ default:
219
+ return safeRaw || raw || eventType;
220
+ }
221
+ }
197
222
  function workingPhaseDetailForDisplay(raw) {
198
223
  const t = raw.trim();
199
224
  if (!t) return "";
@@ -282,19 +307,27 @@ function buildFormattedThinking(steps, allThinkingText) {
282
307
  break;
283
308
  case "USER_ACTION_REQUIRED":
284
309
  parts.push("**Verification Required**");
285
- if (step.message) parts.push(step.message);
310
+ if (step.message) {
311
+ parts.push(getUserActionDisplayMessage(step.eventType, step.message));
312
+ }
286
313
  break;
287
314
  case "USER_ACTION_SUCCESS":
288
- parts.push(`\u2713 ${step.message || "Verification successful"}`);
315
+ parts.push(`\u2713 ${getUserActionDisplayMessage(step.eventType, step.message)}`);
289
316
  break;
290
317
  case "USER_ACTION_REJECTED":
291
- parts.push(`\u2717 ${step.message || "Verification rejected"}`);
318
+ parts.push(getUserActionDisplayMessage(step.eventType, step.message));
292
319
  break;
293
320
  case "USER_ACTION_EXPIRED":
294
- parts.push(`\u2717 ${step.message || "Verification expired"}`);
321
+ parts.push(`\u2717 ${getUserActionDisplayMessage(step.eventType, step.message)}`);
322
+ break;
323
+ case "USER_ACTION_INVALID":
324
+ parts.push(`\u2717 ${getUserActionDisplayMessage(step.eventType, step.message)}`);
325
+ break;
326
+ case "USER_ACTION_RESENT":
327
+ parts.push(getUserActionDisplayMessage(step.eventType, step.message));
295
328
  break;
296
329
  case "USER_ACTION_FAILED":
297
- parts.push(`\u2717 ${step.message || "Verification failed"}`);
330
+ parts.push(`\u2717 ${getUserActionDisplayMessage(step.eventType, step.message)}`);
298
331
  break;
299
332
  }
300
333
  }
@@ -741,14 +774,18 @@ function processStreamEventV2(event, state) {
741
774
  }
742
775
  state.userActionPending = true;
743
776
  const req = event.userActionRequest;
777
+ const displayMessage = getUserActionDisplayMessage(
778
+ eventType,
779
+ req?.message || message
780
+ );
744
781
  if (req) {
745
- addThinkingLine(state, "**Verification Required**", req.message || "Waiting for authorization...");
782
+ addThinkingLine(state, "**Verification Required**", displayMessage);
746
783
  }
747
784
  const stepId = `step-${state.stepCounter++}`;
748
785
  state.steps.push({
749
786
  id: stepId,
750
787
  eventType,
751
- message,
788
+ message: displayMessage,
752
789
  status: "in_progress",
753
790
  timestamp: Date.now(),
754
791
  elapsedMs: event.elapsedMs
@@ -758,7 +795,8 @@ function processStreamEventV2(event, state) {
758
795
  break;
759
796
  }
760
797
  case "USER_ACTION_SUCCESS": {
761
- appendThinkingText(state, "\n\u2713 " + (event.message || "Verification successful"));
798
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
799
+ appendThinkingText(state, "\n\u2713 " + displayMessage);
762
800
  completeLastInProgressStep(state.steps);
763
801
  state.userActionRequest = void 0;
764
802
  state.userActionPending = false;
@@ -767,7 +805,7 @@ function processStreamEventV2(event, state) {
767
805
  state.steps.push({
768
806
  id: stepId,
769
807
  eventType,
770
- message,
808
+ message: displayMessage,
771
809
  status: "completed",
772
810
  timestamp: Date.now(),
773
811
  elapsedMs: event.elapsedMs
@@ -776,12 +814,14 @@ function processStreamEventV2(event, state) {
776
814
  break;
777
815
  }
778
816
  case "USER_ACTION_INVALID": {
817
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
818
+ appendThinkingText(state, "\n\u2717 " + displayMessage);
779
819
  completeLastInProgressStep(state.steps);
780
820
  const errorStepId = `step-${state.stepCounter++}`;
781
821
  state.steps.push({
782
822
  id: errorStepId,
783
823
  eventType,
784
- message,
824
+ message: displayMessage,
785
825
  status: "error",
786
826
  timestamp: Date.now(),
787
827
  elapsedMs: event.elapsedMs
@@ -799,7 +839,8 @@ function processStreamEventV2(event, state) {
799
839
  break;
800
840
  }
801
841
  case "USER_ACTION_REJECTED": {
802
- appendThinkingText(state, "\n\u2717 " + (event.message || "Verification rejected"));
842
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
843
+ appendThinkingText(state, "\n" + displayMessage);
803
844
  completeLastInProgressStep(state.steps);
804
845
  state.userActionRequest = void 0;
805
846
  state.userActionPending = false;
@@ -808,7 +849,7 @@ function processStreamEventV2(event, state) {
808
849
  state.steps.push({
809
850
  id: stepId,
810
851
  eventType,
811
- message,
852
+ message: displayMessage,
812
853
  status: "completed",
813
854
  timestamp: Date.now(),
814
855
  elapsedMs: event.elapsedMs
@@ -817,7 +858,8 @@ function processStreamEventV2(event, state) {
817
858
  break;
818
859
  }
819
860
  case "USER_ACTION_EXPIRED": {
820
- appendThinkingText(state, "\n\u2717 " + (event.message || "Verification expired"));
861
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
862
+ appendThinkingText(state, "\n\u2717 " + displayMessage);
821
863
  completeLastInProgressStep(state.steps);
822
864
  state.userActionRequest = void 0;
823
865
  state.userActionPending = false;
@@ -825,7 +867,7 @@ function processStreamEventV2(event, state) {
825
867
  state.steps.push({
826
868
  id: stepId,
827
869
  eventType,
828
- message,
870
+ message: displayMessage,
829
871
  status: "error",
830
872
  timestamp: Date.now(),
831
873
  elapsedMs: event.elapsedMs
@@ -834,11 +876,13 @@ function processStreamEventV2(event, state) {
834
876
  break;
835
877
  }
836
878
  case "USER_ACTION_RESENT": {
879
+ const displayMessage = getUserActionDisplayMessage(eventType, event.message);
880
+ appendThinkingText(state, "\n" + displayMessage);
837
881
  const stepId = `step-${state.stepCounter++}`;
838
882
  state.steps.push({
839
883
  id: stepId,
840
884
  eventType,
841
- message,
885
+ message: displayMessage,
842
886
  status: "completed",
843
887
  timestamp: Date.now(),
844
888
  elapsedMs: event.elapsedMs
@@ -847,7 +891,11 @@ function processStreamEventV2(event, state) {
847
891
  break;
848
892
  }
849
893
  case "USER_ACTION_FAILED": {
850
- appendThinkingText(state, "\n\u2717 " + (event.message || "Verification failed"));
894
+ const displayMessage = getUserActionDisplayMessage(
895
+ eventType,
896
+ event.message || event.errorMessage
897
+ );
898
+ appendThinkingText(state, "\n\u2717 " + displayMessage);
851
899
  completeLastInProgressStep(state.steps);
852
900
  state.userActionRequest = void 0;
853
901
  state.userActionPending = false;
@@ -855,7 +903,7 @@ function processStreamEventV2(event, state) {
855
903
  state.steps.push({
856
904
  id: stepId,
857
905
  eventType,
858
- message,
906
+ message: displayMessage,
859
907
  status: "error",
860
908
  timestamp: Date.now(),
861
909
  elapsedMs: event.elapsedMs
@@ -950,6 +998,7 @@ function useStreamManagerV2(config, callbacks, setMessages, setIsWaitingForRespo
950
998
  const abortController = externalAbortController ?? new AbortController();
951
999
  abortControllerRef.current = abortController;
952
1000
  const state = createInitialV2State();
1001
+ const streamStartedAt = Date.now();
953
1002
  const updateMessage = (update) => {
954
1003
  if (abortController.signal.aborted) return;
955
1004
  setMessages(
@@ -977,7 +1026,10 @@ function useStreamManagerV2(config, callbacks, setMessages, setIsWaitingForRespo
977
1026
  if (eventType === "USER_ACTION_REQUIRED" && state.userActionRequest) {
978
1027
  callbacksRef.current.onUserActionRequired?.(state.userActionRequest);
979
1028
  } else if (eventType.startsWith("USER_ACTION_") && eventType !== "USER_ACTION_REQUIRED") {
980
- const msg = event.message?.trim() || event.errorMessage?.trim() || getEventMessage(event);
1029
+ const msg = getUserActionDisplayMessage(
1030
+ eventType,
1031
+ event.message?.trim() || event.errorMessage?.trim() || getEventMessage(event)
1032
+ );
981
1033
  callbacksRef.current.onUserActionEvent?.(eventType, msg);
982
1034
  }
983
1035
  const activeStep = state.steps.find((s) => s.id === state.currentExecutingStepId);
@@ -1081,7 +1133,8 @@ function useStreamManagerV2(config, callbacks, setMessages, setIsWaitingForRespo
1081
1133
  currentExecutingStepId: void 0,
1082
1134
  userActionResult: state.userActionResult,
1083
1135
  formattedThinkingText: state.hasError ? void 0 : state.formattedThinkingText || void 0,
1084
- isResolvingImages: needsImageResolve
1136
+ isResolvingImages: needsImageResolve,
1137
+ thinkingDurationSec: state.hasError ? void 0 : Math.max(0, Math.round((Date.now() - streamStartedAt) / 1e3))
1085
1138
  };
1086
1139
  setMessages(
1087
1140
  (prev) => prev.map(
@@ -1299,9 +1352,9 @@ function streamKeyFor(scopeKey, sessionId) {
1299
1352
  function useChatV2(config, callbacks = {}) {
1300
1353
  const scopeKey = react.useMemo(() => buildScopeKey(config), [
1301
1354
  config.session?.userId,
1302
- config.workflow.id,
1303
- config.workflow.version,
1304
- config.workflow.stage
1355
+ config.workflow?.id,
1356
+ config.workflow?.version,
1357
+ config.workflow?.stage
1305
1358
  ]);
1306
1359
  const initialSessionId = chatStore.get(scopeKey).find((m) => m.sessionId)?.sessionId ?? config.session?.initialId ?? void 0;
1307
1360
  const [messages, setMessages] = react.useState(() => {