@agent-native/toolkit 0.206.0 → 0.206.1-nightly-20261009183700

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.
Files changed (72) hide show
  1. package/dist/app/agentkit/react/components.d.ts.map +1 -1
  2. package/dist/app/agentkit/react/components.js +3 -3
  3. package/dist/app/agentkit/react/components.js.map +1 -1
  4. package/dist/app/agentkit/react/context.d.ts +1 -0
  5. package/dist/app/agentkit/react/context.d.ts.map +1 -1
  6. package/dist/app/agentkit/react/context.js +1 -0
  7. package/dist/app/agentkit/react/context.js.map +1 -1
  8. package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
  9. package/dist/app/chat/AgentKitAssistantChat.js +213 -67
  10. package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
  11. package/dist/app/chat/agentkit-chat/guided-questions.d.ts +18 -0
  12. package/dist/app/chat/agentkit-chat/guided-questions.d.ts.map +1 -1
  13. package/dist/app/chat/agentkit-chat/guided-questions.js +12 -4
  14. package/dist/app/chat/agentkit-chat/guided-questions.js.map +1 -1
  15. package/dist/app/chat/chat/run-recovery.d.ts +6 -1
  16. package/dist/app/chat/chat/run-recovery.d.ts.map +1 -1
  17. package/dist/app/chat/chat/run-recovery.js +6 -3
  18. package/dist/app/chat/chat/run-recovery.js.map +1 -1
  19. package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
  20. package/dist/app/i18n/catalogs/ar-SA.js +8 -2
  21. package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
  22. package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
  23. package/dist/app/i18n/catalogs/de-DE.js +8 -2
  24. package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
  25. package/dist/app/i18n/catalogs/en-US.d.ts +8 -2
  26. package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
  27. package/dist/app/i18n/catalogs/en-US.js +8 -2
  28. package/dist/app/i18n/catalogs/en-US.js.map +1 -1
  29. package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
  30. package/dist/app/i18n/catalogs/es-ES.js +8 -2
  31. package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
  32. package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
  33. package/dist/app/i18n/catalogs/fr-FR.js +8 -2
  34. package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
  35. package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
  36. package/dist/app/i18n/catalogs/hi-IN.js +8 -2
  37. package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
  38. package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
  39. package/dist/app/i18n/catalogs/ja-JP.js +8 -2
  40. package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
  41. package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
  42. package/dist/app/i18n/catalogs/ko-KR.js +8 -2
  43. package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
  44. package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
  45. package/dist/app/i18n/catalogs/pt-BR.js +8 -2
  46. package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
  47. package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
  48. package/dist/app/i18n/catalogs/zh-CN.js +8 -2
  49. package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
  50. package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
  51. package/dist/app/i18n/catalogs/zh-TW.js +8 -2
  52. package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
  53. package/package.json +4 -4
  54. package/src/app/agentkit/react/components.tsx +6 -3
  55. package/src/app/agentkit/react/context.tsx +2 -0
  56. package/src/app/chat/AgentKitAssistantChat.spec.tsx +367 -7
  57. package/src/app/chat/AgentKitAssistantChat.tsx +265 -72
  58. package/src/app/chat/agentkit-chat/guided-questions.flow.spec.tsx +89 -5
  59. package/src/app/chat/agentkit-chat/guided-questions.tsx +17 -6
  60. package/src/app/chat/chat/run-recovery.spec.tsx +48 -0
  61. package/src/app/chat/chat/run-recovery.tsx +23 -1
  62. package/src/app/i18n/catalogs/ar-SA.ts +14 -2
  63. package/src/app/i18n/catalogs/de-DE.ts +12 -2
  64. package/src/app/i18n/catalogs/en-US.ts +13 -2
  65. package/src/app/i18n/catalogs/es-ES.ts +12 -2
  66. package/src/app/i18n/catalogs/fr-FR.ts +12 -2
  67. package/src/app/i18n/catalogs/hi-IN.ts +12 -2
  68. package/src/app/i18n/catalogs/ja-JP.ts +12 -2
  69. package/src/app/i18n/catalogs/ko-KR.ts +12 -2
  70. package/src/app/i18n/catalogs/pt-BR.ts +12 -2
  71. package/src/app/i18n/catalogs/zh-CN.ts +8 -2
  72. package/src/app/i18n/catalogs/zh-TW.ts +8 -2
@@ -1092,6 +1092,11 @@ export interface UseGuidedQuestionFlowOptions {
1092
1092
  }) => void | Promise<{ delivered: boolean }>;
1093
1093
  }
1094
1094
 
1095
+ export type PendingQuestionRefetchResult =
1096
+ | { status: "pending" }
1097
+ | { status: "none" }
1098
+ | { status: "error"; error: unknown };
1099
+
1095
1100
  function payloadBelongsToThread(
1096
1101
  payload: GuidedQuestionPayload,
1097
1102
  threadId: string | undefined,
@@ -1160,9 +1165,7 @@ export function useGuidedQuestionFlow({
1160
1165
  queryFn: async () => {
1161
1166
  const queryGeneration = queryGenerationRef.current;
1162
1167
  const read = async (key: string) => {
1163
- const parsed = await readClientAppState<GuidedQuestionPayload>(
1164
- key,
1165
- ).catch(() => null);
1168
+ const parsed = await readClientAppState<GuidedQuestionPayload>(key);
1166
1169
  if (Array.isArray(parsed?.questions) && parsed.questions.length > 0) {
1167
1170
  return parsed;
1168
1171
  }
@@ -1346,19 +1349,26 @@ export function useGuidedQuestionFlow({
1346
1349
  skipMessage,
1347
1350
  ]);
1348
1351
 
1349
- const refetchPendingQuestion = useCallback(async () => {
1352
+ const refetchPendingQuestionStatus = useCallback(async () => {
1350
1353
  const result = await refetch();
1351
1354
  if (result.status === "error") {
1352
- return true;
1355
+ return { status: "error", error: result.error } as const;
1353
1356
  }
1354
1357
  const latest = result.data ?? null;
1355
- return Boolean(
1358
+ const hasPendingQuestion = Boolean(
1356
1359
  latest &&
1357
1360
  payloadBelongsToThread(latest, threadId) &&
1358
1361
  Array.isArray(latest.questions) &&
1359
1362
  latest.questions.length > 0,
1360
1363
  );
1364
+ return hasPendingQuestion
1365
+ ? ({ status: "pending" } as const)
1366
+ : ({ status: "none" } as const);
1361
1367
  }, [refetch, threadId]);
1368
+ const refetchPendingQuestion = useCallback(async () => {
1369
+ const result = await refetchPendingQuestionStatus();
1370
+ return result.status !== "none";
1371
+ }, [refetchPendingQuestionStatus]);
1362
1372
 
1363
1373
  return {
1364
1374
  payload: visiblePayload,
@@ -1375,5 +1385,6 @@ export function useGuidedQuestionFlow({
1375
1385
  handleSubmit,
1376
1386
  handleSkip,
1377
1387
  refetchPendingQuestion,
1388
+ refetchPendingQuestionStatus,
1378
1389
  };
1379
1390
  }
@@ -130,6 +130,7 @@ vi.mock("@agent-native/core/client/i18n", () => ({
130
130
  "agentChat.recovery.copyFailed": "Copy failed",
131
131
  "agentChat.recovery.retryAttachmentUnavailable":
132
132
  "This request included a file that can’t be retried. Attach it again in the message box, then try again.",
133
+ "agentChat.recovery.retryWithoutAttachment": "Retry without attachment",
133
134
  "agentChat.recovery.credentialRejected":
134
135
  "The provider rejected the credential used for this request; it is skipped on the next attempt. Retry, or update your provider key if it keeps failing.",
135
136
  "agentChat.recovery.newChatHint":
@@ -632,6 +633,53 @@ describe("run recovery surfaces", () => {
632
633
  expect(onRetry).not.toHaveBeenCalled();
633
634
  });
634
635
 
636
+ it("offers only an attachment-free retry for a rejected attachment", async () => {
637
+ const onRetry = vi.fn();
638
+ const onRetryWithoutAttachments = vi.fn();
639
+ const onContinue = vi.fn();
640
+
641
+ await act(async () => {
642
+ root.render(
643
+ <AgentNativeI18nProvider
644
+ initialLocale="en-US"
645
+ initialPreference="en-US"
646
+ persistPreference={false}
647
+ >
648
+ <RunErrorRecoveryCard
649
+ info={{
650
+ message: "The provider rejected this attachment.",
651
+ errorCode: "invalid_attachment",
652
+ runId: "run-attachment",
653
+ // A misreported retryable flag must not bring plain Retry back.
654
+ recoverable: true,
655
+ }}
656
+ onContinue={onContinue}
657
+ onRetry={onRetry}
658
+ onRetryWithoutAttachments={onRetryWithoutAttachments}
659
+ onDismiss={vi.fn()}
660
+ />
661
+ </AgentNativeI18nProvider>,
662
+ );
663
+ });
664
+
665
+ const buttons = Array.from(container.querySelectorAll("button"));
666
+ const retryWithout = buttons.find(
667
+ (button) => button.textContent?.trim() === "Retry without attachment",
668
+ );
669
+ expect(container.querySelector('button[aria-label="Retry"]')).toBeNull();
670
+ expect(
671
+ buttons.some((button) => button.textContent?.trim() === "Continue"),
672
+ ).toBe(false);
673
+ expect(
674
+ container.querySelector('button[aria-label="Copy debug info"]'),
675
+ ).not.toBeNull();
676
+
677
+ await act(async () => retryWithout?.click());
678
+ expect(onRetryWithoutAttachments).toHaveBeenCalledOnce();
679
+ expect(onRetry).not.toHaveBeenCalled();
680
+ expect(onContinue).not.toHaveBeenCalled();
681
+ });
682
+
635
683
  it("gives Continue vertical padding and leaves icon actions unframed", async () => {
636
684
  await act(async () => {
637
685
  root.render(
@@ -666,6 +666,7 @@ export function RunErrorRecoveryCard({
666
666
  info,
667
667
  onContinue,
668
668
  onRetry,
669
+ onRetryWithoutAttachments,
669
670
  retryHasUnavailableAttachment = false,
670
671
  onFork,
671
672
  onDismiss,
@@ -677,6 +678,11 @@ export function RunErrorRecoveryCard({
677
678
  onContinue?: () => void;
678
679
  continueError?: string | null;
679
680
  onRetry: () => void;
681
+ /**
682
+ * Resends the request without the attachments a provider rejected. Plain
683
+ * retry would resend the same attachment and fail the same way.
684
+ */
685
+ onRetryWithoutAttachments?: () => void;
680
686
  retryHasUnavailableAttachment?: boolean;
681
687
  onFork?: () => void | boolean | Promise<void | boolean>;
682
688
  onDismiss: () => void;
@@ -694,7 +700,11 @@ export function RunErrorRecoveryCard({
694
700
  provisionAccount: true,
695
701
  trackingSource: "assistant_chat_reconnect_error",
696
702
  });
697
- const canRecover = info.recoverable === true;
703
+ // Retrying or continuing sends the rejected attachment again.
704
+ const attachmentRejected = info.errorCode === "invalid_attachment";
705
+ const canRecover = info.recoverable === true && !attachmentRejected;
706
+ const canRetryWithoutAttachments =
707
+ attachmentRejected && onRetryWithoutAttachments;
698
708
  const isBuilderCreditsLimit = isCreditsLimitErrorCode(info.errorCode);
699
709
  const shouldShowBuilderReconnect = isBuilderReconnectRunError(info);
700
710
  const isProviderAuthError = isProviderAuthenticationError(
@@ -967,6 +977,18 @@ export function RunErrorRecoveryCard({
967
977
  <span className="truncate">{t("agentChat.common.continue")}</span>
968
978
  </button>
969
979
  )}
980
+ {canRetryWithoutAttachments && (
981
+ <button
982
+ type="button"
983
+ onClick={onRetryWithoutAttachments}
984
+ className="inline-flex min-w-0 flex-1 items-center justify-center gap-1.5 rounded-md bg-foreground px-3 py-2 text-xs font-medium text-background hover:opacity-90"
985
+ >
986
+ <IconRefresh size={13} />
987
+ <span className="truncate">
988
+ {t("agentChat.recovery.retryWithoutAttachment")}
989
+ </span>
990
+ </button>
991
+ )}
970
992
  <div className="flex shrink-0 items-center gap-0.5">
971
993
  {canRetry && !retryHasUnavailableAttachment && (
972
994
  <button
@@ -492,9 +492,20 @@ const messages: ToolkitAgentChatTranslation = {
492
492
  "composer.skill.uploadFile": "رفع ملف مهارة",
493
493
  "composer.upload": "رفع",
494
494
  "composer.uploadFailed": "تعذّر رفع الملف المحدد.",
495
- "composer.fileTooLarge": "يتجاوز حجم هذا الملف الحد المسموح للرفع.",
496
- "composer.sessionExpired": "انتهت صلاحية جلستك. حدّث الصفحة وحاول مرة أخرى.",
495
+ "composer.fileTooLarge":
496
+ "هذا الملف أكبر من حد الرفع البالغ {{size}} ميغابايت.",
497
+ "composer.sessionExpired":
498
+ "انتهت صلاحية جلستك. سجّل الدخول مرة أخرى، ثم أرسل رسالتك.",
497
499
  "composer.unsupportedFileType": "نوع الملف هذا غير مدعوم.",
500
+ "composer.uploadUnavailable":
501
+ "رفع الملفات غير متاح الآن. حاول مرة أخرى بعد قليل.",
502
+ "composer.uploadOffline":
503
+ "تعذّر وصول الرفع إلى الخادم. تحقق من اتصالك وحاول مرة أخرى.",
504
+ "composer.submissionNotReady":
505
+ "الدردشة ليست جاهزة للإرسال بعد. انتظر لحظة، ثم أرسل مرة أخرى.",
506
+ "composer.submissionScopeChanged":
507
+ "تغيّرت هذه الدردشة قبل إرسال رسالتك. أرسلها مرة أخرى.",
508
+ "composer.attachmentNotSaved": "لم يُحفظ مع هذه الدردشة",
498
509
  "composer.useAttachedContext": "استخدم السياق المرفق.",
499
510
  "mentions.commands": "الأوامر",
500
511
  "mentions.learnMore": "معرفة المزيد",
@@ -1153,6 +1164,7 @@ const messages: ToolkitAgentChatTranslation = {
1153
1164
  "لم يعد بالإمكان متابعة هذا التشغيل. أرسل رسالة للمتابعة.",
1154
1165
  "recovery.retryAttachmentUnavailable":
1155
1166
  "تضمّن هذا الطلب ملفًا لا يمكن إعادة المحاولة به. أرفقه مجددًا في مربع الرسالة، ثم حاول مرة أخرى.",
1167
+ "recovery.retryWithoutAttachment": "إعادة المحاولة بدون المرفق",
1156
1168
  "recovery.deferredSubmissionFailed":
1157
1169
  "تعذّر إرسال هذه الرسالة. تحقّق من اتصالك أو إعدادات الدردشة، ثم أعد المحاولة.",
1158
1170
  "recovery.credentialRejected":
@@ -823,6 +823,7 @@ const messages: ToolkitAgentChatTranslation = {
823
823
  "Dieser Lauf kann nicht mehr fortgesetzt werden. Sende eine Nachricht, um weiterzumachen.",
824
824
  "recovery.retryAttachmentUnavailable":
825
825
  "Diese Anfrage enthielt eine Datei, die sich nicht erneut senden lässt. Füge sie im Nachrichtenfeld erneut hinzu und versuche es noch einmal.",
826
+ "recovery.retryWithoutAttachment": "Ohne Anhang erneut versuchen",
826
827
  "recovery.deferredSubmissionFailed":
827
828
  "Diese Nachricht konnte nicht gesendet werden. Prüfe deine Verbindung oder Chat-Einstellungen und versuche es erneut.",
828
829
  "recovery.credentialRejected":
@@ -1151,10 +1152,19 @@ const messages: ToolkitAgentChatTranslation = {
1151
1152
  "composer.uploadFailed":
1152
1153
  "Die ausgewählte Datei konnte nicht hochgeladen werden.",
1153
1154
  "composer.fileTooLarge":
1154
- "Diese Datei überschreitet die zulässige Uploadgröße.",
1155
+ "Diese Datei ist größer als das Upload-Limit von {{size}} MB.",
1155
1156
  "composer.sessionExpired":
1156
- "Deine Sitzung ist abgelaufen. Aktualisiere die Seite und versuche es erneut.",
1157
+ "Deine Sitzung ist abgelaufen. Melde dich erneut an und sende deine Nachricht dann noch einmal.",
1157
1158
  "composer.unsupportedFileType": "Dieser Dateityp wird nicht unterstützt.",
1159
+ "composer.uploadUnavailable":
1160
+ "Datei-Uploads sind gerade nicht verfügbar. Versuche es gleich noch einmal.",
1161
+ "composer.uploadOffline":
1162
+ "Der Upload hat den Server nicht erreicht. Prüfe deine Verbindung und versuche es erneut.",
1163
+ "composer.submissionNotReady":
1164
+ "Der Chat ist noch nicht sendebereit. Warte einen Moment und sende dann erneut.",
1165
+ "composer.submissionScopeChanged":
1166
+ "Dieser Chat hat sich geändert, bevor deine Nachricht gesendet wurde. Sende sie erneut.",
1167
+ "composer.attachmentNotSaved": "Nicht mit diesem Chat gespeichert",
1158
1168
  "composer.useAttachedContext": "Verwende den angehängten Kontext.",
1159
1169
  "mentions.commands": "Befehle",
1160
1170
  "mentions.learnMore": "Mehr erfahren",
@@ -501,10 +501,20 @@ const messages = {
501
501
  "composer.skill.uploadFile": "Upload skill file",
502
502
  "composer.upload": "Upload",
503
503
  "composer.uploadFailed": "Could not upload the selected file.",
504
- "composer.fileTooLarge": "This file exceeds the upload size limit.",
504
+ "composer.fileTooLarge":
505
+ "This file is larger than the {{size}} MB upload limit.",
505
506
  "composer.sessionExpired":
506
- "Your session expired. Refresh the page and try again.",
507
+ "Your session expired. Sign in again, then send your message.",
507
508
  "composer.unsupportedFileType": "This file type isn't supported.",
509
+ "composer.uploadUnavailable":
510
+ "File uploads are unavailable right now. Try again in a moment.",
511
+ "composer.uploadOffline":
512
+ "The upload couldn't reach the server. Check your connection and try again.",
513
+ "composer.submissionNotReady":
514
+ "Chat isn't ready to send yet. Wait a moment, then send again.",
515
+ "composer.submissionScopeChanged":
516
+ "This chat changed before your message was sent. Send it again.",
517
+ "composer.attachmentNotSaved": "Not saved with this chat",
508
518
  "composer.useAttachedContext": "Use the attached context.",
509
519
  "mentions.commands": "Commands",
510
520
  "mentions.learnMore": "Learn more",
@@ -1149,6 +1159,7 @@ const messages = {
1149
1159
  "This run can't be continued anymore. Send a message to keep going.",
1150
1160
  "recovery.retryAttachmentUnavailable":
1151
1161
  "This request included a file that can’t be retried. Attach it again in the message box, then try again.",
1162
+ "recovery.retryWithoutAttachment": "Retry without attachment",
1152
1163
  "recovery.deferredSubmissionFailed":
1153
1164
  "This message couldn't be sent. Check your connection or chat setup, then retry.",
1154
1165
  "recovery.credentialRejected":
@@ -818,6 +818,7 @@ const messages: ToolkitAgentChatTranslation = {
818
818
  "Esta ejecución ya no se puede continuar. Envía un mensaje para seguir.",
819
819
  "recovery.retryAttachmentUnavailable":
820
820
  "Esta solicitud incluía un archivo que no se puede volver a enviar. Vuelve a adjuntarlo en el cuadro de mensaje y vuelve a intentarlo.",
821
+ "recovery.retryWithoutAttachment": "Reintentar sin el adjunto",
821
822
  "recovery.deferredSubmissionFailed":
822
823
  "No se pudo enviar este mensaje. Comprueba tu conexión o la configuración del chat y vuelve a intentarlo.",
823
824
  "recovery.credentialRejected":
@@ -1144,10 +1145,19 @@ const messages: ToolkitAgentChatTranslation = {
1144
1145
  "composer.upload": "Subir",
1145
1146
  "composer.uploadFailed": "No se pudo cargar el archivo seleccionado.",
1146
1147
  "composer.fileTooLarge":
1147
- "Este archivo supera el límite de tamaño para subirlo.",
1148
+ "Este archivo supera el límite de subida de {{size}} MB.",
1148
1149
  "composer.sessionExpired":
1149
- "Tu sesión ha caducado. Actualiza la página e inténtalo de nuevo.",
1150
+ "Tu sesión ha caducado. Vuelve a iniciar sesión y envía tu mensaje de nuevo.",
1150
1151
  "composer.unsupportedFileType": "Este tipo de archivo no es compatible.",
1152
+ "composer.uploadUnavailable":
1153
+ "La subida de archivos no está disponible ahora mismo. Inténtalo de nuevo en un momento.",
1154
+ "composer.uploadOffline":
1155
+ "La subida no pudo llegar al servidor. Comprueba tu conexión e inténtalo de nuevo.",
1156
+ "composer.submissionNotReady":
1157
+ "El chat aún no está listo para enviar. Espera un momento y vuelve a enviarlo.",
1158
+ "composer.submissionScopeChanged":
1159
+ "Este chat cambió antes de que se enviara tu mensaje. Vuelve a enviarlo.",
1160
+ "composer.attachmentNotSaved": "No se guardó con este chat",
1151
1161
  "composer.useAttachedContext": "Usa el contexto adjunto.",
1152
1162
  "mentions.commands": "Comandos",
1153
1163
  "mentions.learnMore": "Más información",
@@ -825,6 +825,7 @@ const messages: ToolkitAgentChatTranslation = {
825
825
  "Cette exécution ne peut plus être poursuivie. Envoyez un message pour continuer.",
826
826
  "recovery.retryAttachmentUnavailable":
827
827
  "Cette demande incluait un fichier qui ne peut pas être réessayé. Joignez-le de nouveau dans le champ de message, puis réessayez.",
828
+ "recovery.retryWithoutAttachment": "Réessayer sans la pièce jointe",
828
829
  "recovery.deferredSubmissionFailed":
829
830
  "Impossible d’envoyer ce message. Vérifiez votre connexion ou la configuration du chat, puis réessayez.",
830
831
  "recovery.credentialRejected":
@@ -1153,11 +1154,20 @@ const messages: ToolkitAgentChatTranslation = {
1153
1154
  "composer.upload": "Télécharger",
1154
1155
  "composer.uploadFailed": "Impossible de télécharger le fichier sélectionné.",
1155
1156
  "composer.fileTooLarge":
1156
- "Ce fichier dépasse la taille maximale autorisée pour l’envoi.",
1157
+ "Ce fichier dépasse la limite d’envoi de {{size}} Mo.",
1157
1158
  "composer.sessionExpired":
1158
- "Votre session a expiré. Actualisez la page et réessayez.",
1159
+ "Votre session a expiré. Reconnectez-vous, puis renvoyez votre message.",
1159
1160
  "composer.unsupportedFileType":
1160
1161
  "Ce type de fichier n'est pas pris en charge.",
1162
+ "composer.uploadUnavailable":
1163
+ "L’envoi de fichiers est indisponible pour le moment. Réessayez dans un instant.",
1164
+ "composer.uploadOffline":
1165
+ "L’envoi n’a pas pu joindre le serveur. Vérifiez votre connexion et réessayez.",
1166
+ "composer.submissionNotReady":
1167
+ "Le chat n’est pas encore prêt à envoyer. Patientez un instant, puis renvoyez.",
1168
+ "composer.submissionScopeChanged":
1169
+ "Ce chat a changé avant l’envoi de votre message. Renvoyez-le.",
1170
+ "composer.attachmentNotSaved": "Non enregistré avec ce chat",
1161
1171
  "composer.useAttachedContext": "Utilisez le contexte ci-joint.",
1162
1172
  "mentions.commands": "Commandes",
1163
1173
  "mentions.learnMore": "En savoir plus",
@@ -494,10 +494,19 @@ const messages: ToolkitAgentChatTranslation = {
494
494
  "composer.skill.uploadFile": "स्किल फ़ाइल अपलोड करें",
495
495
  "composer.upload": "अपलोड करें",
496
496
  "composer.uploadFailed": "चुनी गई फ़ाइल अपलोड नहीं हो सकी।",
497
- "composer.fileTooLarge": "यह फ़ाइल अपलोड की अधिकतम सीमा से बड़ी है।",
497
+ "composer.fileTooLarge": "यह फ़ाइल {{size}} MB की अपलोड सीमा से बड़ी है।",
498
498
  "composer.sessionExpired":
499
- "आपका सत्र समाप्त हो गया है। पेज रीफ़्रेश करें और फिर कोशिश करें।",
499
+ "आपका सत्र समाप्त हो गया है। फिर से साइन इन करें, फिर अपना संदेश भेजें।",
500
500
  "composer.unsupportedFileType": "यह फ़ाइल प्रकार समर्थित नहीं है।",
501
+ "composer.uploadUnavailable":
502
+ "फ़ाइल अपलोड अभी उपलब्ध नहीं है। कुछ देर बाद फिर कोशिश करें।",
503
+ "composer.uploadOffline":
504
+ "अपलोड सर्वर तक नहीं पहुंच सका। अपना कनेक्शन जांचें और फिर कोशिश करें।",
505
+ "composer.submissionNotReady":
506
+ "चैट अभी भेजने के लिए तैयार नहीं है। थोड़ा रुकें, फिर दोबारा भेजें।",
507
+ "composer.submissionScopeChanged":
508
+ "आपका संदेश भेजे जाने से पहले यह चैट बदल गई। इसे फिर से भेजें।",
509
+ "composer.attachmentNotSaved": "इस चैट के साथ सहेजा नहीं गया",
501
510
  "composer.useAttachedContext": "अटैच किए गए संदर्भ का उपयोग करें।",
502
511
  "mentions.commands": "कमांड",
503
512
  "mentions.learnMore": "और जानें",
@@ -1130,6 +1139,7 @@ const messages: ToolkitAgentChatTranslation = {
1130
1139
  "यह रन अब जारी नहीं रखा जा सकता। आगे बढ़ने के लिए एक संदेश भेजें।",
1131
1140
  "recovery.retryAttachmentUnavailable":
1132
1141
  "इस अनुरोध में ऐसी फ़ाइल थी जिसे दोबारा नहीं भेजा जा सकता। उसे संदेश बॉक्स में फिर से जोड़ें, फिर कोशिश करें।",
1142
+ "recovery.retryWithoutAttachment": "अटैचमेंट के बिना फिर से प्रयास करें",
1133
1143
  "recovery.deferredSubmissionFailed":
1134
1144
  "यह संदेश भेजा नहीं जा सका। अपना कनेक्शन या चैट सेटअप जाँचें, फिर दोबारा कोशिश करें।",
1135
1145
  "recovery.credentialRejected":
@@ -517,10 +517,19 @@ const messages: ToolkitAgentChatTranslation = {
517
517
  "composer.upload": "アップロード",
518
518
  "composer.uploadFailed": "選択したファイルをアップロードできませんでした。",
519
519
  "composer.fileTooLarge":
520
- "このファイルはアップロード可能なサイズ上限を超えています。",
520
+ "このファイルはアップロード上限の {{size}} MB を超えています。",
521
521
  "composer.sessionExpired":
522
- "セッションの有効期限が切れました。ページを更新して、もう一度お試しください。",
522
+ "セッションの有効期限が切れました。もう一度サインインしてから、メッセージを送信してください。",
523
523
  "composer.unsupportedFileType": "このファイル形式はサポートされていません。",
524
+ "composer.uploadUnavailable":
525
+ "現在ファイルをアップロードできません。しばらくしてからもう一度お試しください。",
526
+ "composer.uploadOffline":
527
+ "アップロードがサーバーに届きませんでした。接続を確認して、もう一度お試しください。",
528
+ "composer.submissionNotReady":
529
+ "チャットはまだ送信できる状態ではありません。少し待ってから、もう一度送信してください。",
530
+ "composer.submissionScopeChanged":
531
+ "メッセージの送信前にこのチャットが変更されました。もう一度送信してください。",
532
+ "composer.attachmentNotSaved": "このチャットには保存されていません",
524
533
  "composer.useAttachedContext": "添付されたコンテキストを使用してください。",
525
534
  "mentions.commands": "コマンド",
526
535
  "mentions.learnMore": "詳細を見る",
@@ -1164,6 +1173,7 @@ const messages: ToolkitAgentChatTranslation = {
1164
1173
  "この実行はもう続行できません。続けるにはメッセージを送信してください。",
1165
1174
  "recovery.retryAttachmentUnavailable":
1166
1175
  "このリクエストには再試行できないファイルが含まれています。メッセージ入力欄でファイルを添付し直してから、もう一度お試しください。",
1176
+ "recovery.retryWithoutAttachment": "添付ファイルなしで再試行",
1167
1177
  "recovery.deferredSubmissionFailed":
1168
1178
  "このメッセージを送信できませんでした。接続またはチャットの設定を確認して、もう一度お試しください。",
1169
1179
  "recovery.credentialRejected":
@@ -498,10 +498,19 @@ const messages: ToolkitAgentChatTranslation = {
498
498
  "composer.skill.uploadFile": "스킬 파일 업로드",
499
499
  "composer.upload": "업로드",
500
500
  "composer.uploadFailed": "선택한 파일을 업로드할 수 없습니다.",
501
- "composer.fileTooLarge": "이 파일은 업로드 크기 제한을 초과했습니다.",
501
+ "composer.fileTooLarge": "이 파일은 {{size}}MB 업로드 제한보다 큽니다.",
502
502
  "composer.sessionExpired":
503
- "세션이 만료되었습니다. 페이지를 새로고침한 후 다시 시도하세요.",
503
+ "세션이 만료되었습니다. 다시 로그인한 후 메시지를 보내세요.",
504
504
  "composer.unsupportedFileType": "지원되지 않는 파일 형식입니다.",
505
+ "composer.uploadUnavailable":
506
+ "지금은 파일을 업로드할 수 없습니다. 잠시 후 다시 시도하세요.",
507
+ "composer.uploadOffline":
508
+ "업로드가 서버에 연결되지 못했습니다. 연결 상태를 확인한 후 다시 시도하세요.",
509
+ "composer.submissionNotReady":
510
+ "채팅을 아직 보낼 준비가 되지 않았습니다. 잠시 기다린 후 다시 보내세요.",
511
+ "composer.submissionScopeChanged":
512
+ "메시지가 전송되기 전에 이 채팅이 변경되었습니다. 다시 보내세요.",
513
+ "composer.attachmentNotSaved": "이 채팅에 저장되지 않음",
505
514
  "composer.useAttachedContext": "첨부된 컨텍스트를 사용하세요.",
506
515
  "mentions.commands": "명령",
507
516
  "mentions.learnMore": "자세히 알아보기",
@@ -1141,6 +1150,7 @@ const messages: ToolkitAgentChatTranslation = {
1141
1150
  "이 실행은 더 이상 계속할 수 없습니다. 계속하려면 메시지를 보내세요.",
1142
1151
  "recovery.retryAttachmentUnavailable":
1143
1152
  "이 요청에는 다시 시도할 수 없는 파일이 포함되어 있습니다. 메시지 입력란에 파일을 다시 첨부한 다음 다시 시도하세요.",
1153
+ "recovery.retryWithoutAttachment": "첨부 파일 없이 다시 시도",
1144
1154
  "recovery.deferredSubmissionFailed":
1145
1155
  "이 메시지를 보내지 못했습니다. 연결 또는 채팅 설정을 확인한 다음 다시 시도하세요.",
1146
1156
  "recovery.credentialRejected":
@@ -814,6 +814,7 @@ const messages: ToolkitAgentChatTranslation = {
814
814
  "Esta execução não pode mais ser continuada. Envie uma mensagem para seguir.",
815
815
  "recovery.retryAttachmentUnavailable":
816
816
  "Esta solicitação incluía um arquivo que não pode ser reenviado. Anexe-o novamente no campo de mensagem e tente outra vez.",
817
+ "recovery.retryWithoutAttachment": "Tentar novamente sem o anexo",
817
818
  "recovery.deferredSubmissionFailed":
818
819
  "Não foi possível enviar esta mensagem. Verifique sua conexão ou a configuração do chat e tente novamente.",
819
820
  "recovery.credentialRejected":
@@ -1136,10 +1137,19 @@ const messages: ToolkitAgentChatTranslation = {
1136
1137
  "composer.uploadFailed":
1137
1138
  "Não foi possível fazer upload do arquivo selecionado.",
1138
1139
  "composer.fileTooLarge":
1139
- "Este arquivo excede o limite de tamanho para upload.",
1140
+ "Este arquivo é maior que o limite de upload de {{size}} MB.",
1140
1141
  "composer.sessionExpired":
1141
- "Sua sessão expirou. Atualize a página e tente novamente.",
1142
+ "Sua sessão expirou. Entre novamente e envie sua mensagem outra vez.",
1142
1143
  "composer.unsupportedFileType": "Este tipo de arquivo não é compatível.",
1144
+ "composer.uploadUnavailable":
1145
+ "O upload de arquivos não está disponível no momento. Tente novamente em instantes.",
1146
+ "composer.uploadOffline":
1147
+ "O upload não conseguiu chegar ao servidor. Verifique sua conexão e tente novamente.",
1148
+ "composer.submissionNotReady":
1149
+ "O chat ainda não está pronto para enviar. Aguarde um momento e envie novamente.",
1150
+ "composer.submissionScopeChanged":
1151
+ "Este chat mudou antes de sua mensagem ser enviada. Envie-a novamente.",
1152
+ "composer.attachmentNotSaved": "Não salvo com este chat",
1143
1153
  "composer.useAttachedContext": "Use o contexto anexado.",
1144
1154
  "mentions.commands": "Comandos",
1145
1155
  "mentions.learnMore": "Saber mais",
@@ -478,9 +478,14 @@ const messages: ToolkitAgentChatTranslation = {
478
478
  "composer.skill.uploadFile": "上传技能文件",
479
479
  "composer.upload": "上传",
480
480
  "composer.uploadFailed": "无法上传所选文件。",
481
- "composer.fileTooLarge": "此文件超出上传大小限制。",
482
- "composer.sessionExpired": "会话已过期。请刷新页面后重试。",
481
+ "composer.fileTooLarge": "此文件超过 {{size}} MB 的上传大小限制。",
482
+ "composer.sessionExpired": "会话已过期。请重新登录,然后再发送消息。",
483
483
  "composer.unsupportedFileType": "不支持此文件类型。",
484
+ "composer.uploadUnavailable": "文件上传暂不可用。请稍后重试。",
485
+ "composer.uploadOffline": "上传未能连接到服务器。请检查网络连接后重试。",
486
+ "composer.submissionNotReady": "聊天尚未准备好发送。请稍等片刻后再发送。",
487
+ "composer.submissionScopeChanged": "此聊天在消息发送前已更改。请重新发送。",
488
+ "composer.attachmentNotSaved": "未随此聊天保存",
484
489
  "composer.useAttachedContext": "使用附加的上下文。",
485
490
  "mentions.commands": "命令",
486
491
  "mentions.learnMore": "了解更多",
@@ -1077,6 +1082,7 @@ const messages: ToolkitAgentChatTranslation = {
1077
1082
  "recovery.continueUnavailable": "此运行已无法继续。发送消息以继续。",
1078
1083
  "recovery.retryAttachmentUnavailable":
1079
1084
  "此请求包含一个无法重试的文件。请在消息输入框中重新附加该文件,然后重试。",
1085
+ "recovery.retryWithoutAttachment": "不带附件重试",
1080
1086
  "recovery.deferredSubmissionFailed":
1081
1087
  "此消息未能发送。请检查网络连接或聊天设置,然后重试。",
1082
1088
  "recovery.credentialRejected":
@@ -479,9 +479,14 @@ const messages: ToolkitAgentChatTranslation = {
479
479
  "composer.skill.uploadFile": "上傳技能檔案",
480
480
  "composer.upload": "上傳",
481
481
  "composer.uploadFailed": "無法上傳所選檔案。",
482
- "composer.fileTooLarge": "此檔案超出上傳大小限制。",
483
- "composer.sessionExpired": "工作階段已逾期。請重新整理頁面後再試一次。",
482
+ "composer.fileTooLarge": "此檔案超過 {{size}} MB 的上傳大小限制。",
483
+ "composer.sessionExpired": "工作階段已逾期。請重新登入,然後再傳送訊息。",
484
484
  "composer.unsupportedFileType": "不支援此檔案類型。",
485
+ "composer.uploadUnavailable": "目前無法上傳檔案。請稍後再試。",
486
+ "composer.uploadOffline": "上傳無法連線至伺服器。請檢查網路連線後再試一次。",
487
+ "composer.submissionNotReady": "聊天尚未準備好傳送。請稍候片刻再傳送。",
488
+ "composer.submissionScopeChanged": "此聊天在訊息傳送前已變更。請重新傳送。",
489
+ "composer.attachmentNotSaved": "未隨此聊天儲存",
485
490
  "composer.useAttachedContext": "使用附加的上下文。",
486
491
  "mentions.commands": "命令",
487
492
  "mentions.learnMore": "深入瞭解",
@@ -1081,6 +1086,7 @@ const messages: ToolkitAgentChatTranslation = {
1081
1086
  "recovery.continueUnavailable": "此執行已無法繼續。傳送訊息以繼續。",
1082
1087
  "recovery.retryAttachmentUnavailable":
1083
1088
  "此要求包含無法重試的檔案。請在訊息輸入框中重新附加檔案,然後再試一次。",
1089
+ "recovery.retryWithoutAttachment": "不含附件重試",
1084
1090
  "recovery.deferredSubmissionFailed":
1085
1091
  "無法傳送這則訊息。請檢查連線或聊天設定,然後再試一次。",
1086
1092
  "recovery.credentialRejected":