From a0060b8df78f5dee85b8a0c71b49cc7b5023b3c1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 4 Oct 2026 09:38:16 +0000 Subject: [PATCH] refactor(web): move Shell.tsx module-level code into pages/shell modules Shell.tsx had grown to about 8,000 lines, roughly 2,200 of them module-level components and helpers below ShellPage. That made the page hard to navigate and review and turned every chat change into an edit of one hot file. This is a move-only refactor: code is moved verbatim and only imports and exports change. No renames, no JSX or memo boundary changes. - shell/transcript.tsx: Transcript, QuoteSelectionButton, MessageHoverActions, MessageView - shell/composer.tsx: Composer, slashActionLabel, MentionOptionIcon, MentionChipIcon, ATTACHMENT_ACCEPT - shell/computer-screen.tsx: ComputerReleaseActions, embeddableScreenUrl, screenIframeSandbox, DesktopKindEmptyState, computerPlaceholder, computerLabel (all used by the computer pane) - shell/thread-state.ts: threadSnapshotSignal, firstThreadRoute, applyThreadEvent, newClientNonce - shell/roster-format.ts: stripSpaceTitlePrefix, formatRosterTime, cleanRosterPreview - shell/message-preview.ts: previewMessageText (shared by composer and transcript) - shell/collapsed-sidebar-sections.ts: collapsed sidebar storage helpers - shell/shell-types.ts: PendingAttachment and FALLBACK_BOT_COLOR, shared by Shell.tsx, composer and transcript Types, constants and one-off helpers used only by ShellPage stay in Shell.tsx. The Lingui catalogs only change their file-reference comments; message ids and translations are unchanged. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01MRtGG9ARfqqhma3t85Ro2u --- apps/web/src/locales/de/messages.po | 130 +- apps/web/src/locales/en/messages.po | 130 +- apps/web/src/locales/es/messages.po | 130 +- apps/web/src/locales/hi/messages.po | 130 +- apps/web/src/locales/ko/messages.po | 130 +- apps/web/src/locales/pt-BR/messages.po | 130 +- apps/web/src/locales/ru/messages.po | 130 +- apps/web/src/locales/tr/messages.po | 130 +- apps/web/src/locales/zh-CN/messages.po | 130 +- apps/web/src/pages/Shell.tsx | 2338 +---------------- .../pages/shell/collapsed-sidebar-sections.ts | 20 + apps/web/src/pages/shell/composer.tsx | 805 ++++++ apps/web/src/pages/shell/computer-screen.tsx | 83 + apps/web/src/pages/shell/message-preview.ts | 17 + apps/web/src/pages/shell/roster-format.ts | 57 + apps/web/src/pages/shell/shell-types.ts | 9 + apps/web/src/pages/shell/thread-state.ts | 52 + apps/web/src/pages/shell/transcript.tsx | 1298 +++++++++ 18 files changed, 2970 insertions(+), 2879 deletions(-) create mode 100644 apps/web/src/pages/shell/collapsed-sidebar-sections.ts create mode 100644 apps/web/src/pages/shell/composer.tsx create mode 100644 apps/web/src/pages/shell/computer-screen.tsx create mode 100644 apps/web/src/pages/shell/message-preview.ts create mode 100644 apps/web/src/pages/shell/roster-format.ts create mode 100644 apps/web/src/pages/shell/shell-types.ts create mode 100644 apps/web/src/pages/shell/thread-state.ts create mode 100644 apps/web/src/pages/shell/transcript.tsx diff --git a/apps/web/src/locales/de/messages.po b/apps/web/src/locales/de/messages.po index c52404a..f77295b 100644 --- a/apps/web/src/locales/de/messages.po +++ b/apps/web/src/locales/de/messages.po @@ -210,7 +210,7 @@ msgstr "{botName} verfolgt den Fehler…" msgid "{botName} watches the tape…" msgstr "{botName} beobachtet den Markt…" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "Computer von {botName}" @@ -277,7 +277,7 @@ msgstr "{title}, {label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "{toolCount, plural, one {# Tool} other {# Tools}}" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} arbeitet" @@ -643,7 +643,7 @@ msgstr "Genehmige diesen Server, damit dein Agent seine Tools verwenden kann." msgid "Archive" msgstr "Archivieren" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "archiviert" @@ -651,7 +651,7 @@ msgstr "archiviert" msgid "Archived" msgstr "Archiviert" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "Archiviert. Chat, Erinnerungen und Dateien bleiben erhalten." @@ -711,11 +711,11 @@ msgstr "um {0}" msgid "at {timeSelect}" msgstr "um {timeSelect}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Datei anhängen" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "Anhang" @@ -788,7 +788,7 @@ msgstr "Bearer-Token" msgid "Blocked in your browser settings" msgstr "In deinen Browser-Einstellungen blockiert" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Live-Desktop wird gestartet…" @@ -797,7 +797,7 @@ msgstr "Live-Desktop wird gestartet…" msgid "Booting up {0}’s computer" msgstr "Computer von {0} wird gestartet" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "Bot" @@ -828,7 +828,7 @@ msgstr "Zu verknüpfender Bot" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "Bots handeln standardmäßig ohne Nachfrage. Füge nur dann eine Ausnahme hinzu, wenn du eine Aktionsart zuerst prüfen möchtest." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "Bots arbeiten" @@ -889,7 +889,7 @@ msgstr "Neuen Bot abbrechen" msgid "Cancel new group" msgstr "Neue Gruppe abbrechen" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "Antwort abbrechen" @@ -946,7 +946,7 @@ msgstr "Chat-Apps, Gruppenkanäle und Agent-Verbindungen." msgid "Chat history" msgstr "Chatverlauf" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "Chat-Einstellungen" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "Schreibt eine Antwort…" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "Computer" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "Computer konnte nicht gestartet werden" @@ -1205,11 +1205,11 @@ msgstr "Computer konnte nicht gestartet werden" msgid "Computer is asleep" msgstr "Computer ist im Ruhezustand" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "Computer ist im Ruhezustand. Öffne ihn, um ihn aufzuwecken." -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "Computer ist gestoppt" @@ -1353,7 +1353,7 @@ msgstr "Im Hintergrund fortsetzen" msgid "Continue with email" msgstr "Mit E-Mail fortfahren" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "Gesprächsverlauf" @@ -1361,11 +1361,11 @@ msgstr "Gesprächsverlauf" msgid "Conversations" msgstr "Unterhaltungen" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "Kopieren" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "Antwort kopieren" @@ -1939,7 +1939,7 @@ msgstr "Mein Konto löschen" msgid "Delete space" msgstr "Space löschen" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "gelöscht" @@ -2009,7 +2009,7 @@ msgstr "Verbindung wird getrennt…" msgid "Dismiss" msgstr "Ausblenden" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "Fehler ausblenden" @@ -2107,7 +2107,7 @@ msgstr "Duplizieren" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "z. B. Hivenet Agent, Presales, Zeiterfassungs-Bot" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "Frühere Nachricht" @@ -2524,7 +2524,7 @@ msgstr "Wie soll dein Oo klingen, wenn es Antworten vorliest?" msgid "How to check" msgstr "So wird geprüft" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "Ich bin fertig" @@ -2627,11 +2627,11 @@ msgstr "Isoliert" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "Seine Unterhaltung, Dateien und Routinen werden dauerhaft gelöscht. Von ihm erstellte Bots bleiben in deiner Liste." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "Zur neuesten Nachricht springen" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "Zur beantworteten Nachricht springen" @@ -2718,7 +2718,7 @@ msgstr "Ich höre zu — was ist kaputt oder langsam?" msgid "Listening — what's the story?" msgstr "Ich höre zu — was ist die Geschichte?" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "Frühere Nachrichten laden" @@ -2771,7 +2771,7 @@ msgstr "Stimmen werden geladen…" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "Wird geladen…" @@ -2918,7 +2918,7 @@ msgstr "Erinnerungen" msgid "Memory scope" msgstr "Erinnerungsbereich" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "Erwähnungen" @@ -2931,11 +2931,12 @@ msgstr "Nur Erwähnungen" msgid "Message" msgstr "Nachricht" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "Nachricht" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "Nachrichteneingabe" @@ -2943,11 +2944,11 @@ msgstr "Nachrichteneingabe" msgid "Message event" msgstr "Nachrichtenereignis" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "Nachricht von {peer}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "Nachricht…" @@ -3030,7 +3031,7 @@ msgstr "Modelle vom Server" msgid "Monthly" msgstr "Monatlich" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "Mehr" @@ -3097,6 +3098,7 @@ msgstr "Braucht dich" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "Braucht dich" @@ -3430,7 +3432,7 @@ msgstr "Offene Arbeit" msgid "OpenAI-compatible server URL" msgstr "URL eines OpenAI-kompatiblen Servers" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "Thread geöffnet." @@ -3671,19 +3673,19 @@ msgstr "Ende der Ruhezeiten" msgid "Quiet hours start" msgstr "Beginn der Ruhezeiten" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "Zitieren" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "Reagieren" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "Reaktionen" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "Vorlesen" @@ -3788,7 +3790,7 @@ msgstr "Wird aktualisiert…" msgid "Region" msgstr "Region" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "Freigeben" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "Entfernen" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "{0} entfernen" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "Git-Ereignis entfernen" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "Erwähnung von {0} entfernen" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "Zeitplan entfernen" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "Skill {0} entfernen" @@ -3842,7 +3844,7 @@ msgstr "Skill {0} entfernen" msgid "Remove webhook" msgstr "Webhook entfernen" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "Zusammen mit Chat, Computer und Erinnerungen entfernt." @@ -3875,15 +3877,15 @@ msgstr "API-Schlüssel ersetzen" msgid "Replace key" msgstr "Schlüssel ersetzen" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "Antworten" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "Antwort an {replyName}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "Antwort an {replyName}: „{replyQuote}“" @@ -4142,7 +4144,7 @@ msgstr "{0} auswählen" msgid "Self-hosted (better-auth)" msgstr "Selbst gehostet (better-auth)" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "Senden" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "Server-URL" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "Stimme einrichten" @@ -4203,11 +4205,11 @@ msgstr "Stimme einrichten" msgid "Settings" msgstr "Einstellungen" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "Einstellungen: Allgemein" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "Einstellungen: Nutzung" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "Skizziere den Bauplan…" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "Skill {0}" @@ -4311,7 +4313,7 @@ msgstr "Skills" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "Überspringen" @@ -4365,11 +4367,11 @@ msgstr "Space-Standard" msgid "Spaces" msgstr "Spaces" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Vorlesen" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "Diese Antwort vorlesen" @@ -4423,15 +4425,15 @@ msgstr "Aufnahme starten" msgid "Start talking" msgstr "Sprechen starten" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "Starte die Unterhaltung — {activeName} steht oben auf der Bühne." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "Starte die Unterhaltung." -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "Sprachunterhaltung starten" @@ -4459,10 +4461,12 @@ msgstr "Schritte" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "Stoppen" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "Vorlesen stoppen" @@ -4492,7 +4496,7 @@ msgstr "Stresstest fürs Portfolio…" msgid "Stronger together — {0} specialists" msgstr "Stärker zusammen — {0} Spezialisten" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "Subagent" @@ -4557,7 +4561,7 @@ msgstr "Aufgabe wird angelernt. Beende das Anlernen, bevor du eine neue Nachrich msgid "Team" msgstr "Team" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "Team-Computer" @@ -4598,7 +4602,7 @@ msgstr "Der ausgewählte Erinnerungsanbieter ist in diesem Build nicht verfügba msgid "Thinking" msgstr "Denkmodus" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "Dieser Bot wird auf diesem Computer und nicht auf einem Linux-Desktop ausgeführt. Shell und Dateien verwenden deinen persönlichen Ordner." @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "Transkribieren" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "Transkript" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "Video-Workflow" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "Stimme" @@ -5066,7 +5070,7 @@ msgstr "Arbeitet…" msgid "Working…" msgstr "Wird verarbeitet…" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "Gestern" diff --git a/apps/web/src/locales/en/messages.po b/apps/web/src/locales/en/messages.po index d9c2f14..42b0d56 100644 --- a/apps/web/src/locales/en/messages.po +++ b/apps/web/src/locales/en/messages.po @@ -210,7 +210,7 @@ msgstr "{botName} traces the failure…" msgid "{botName} watches the tape…" msgstr "{botName} watches the tape…" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "{botName}’s computer" @@ -277,7 +277,7 @@ msgstr "{title}, {label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "{toolCount, plural, one {# tool} other {# tools}}" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} is working" @@ -643,7 +643,7 @@ msgstr "Approve this server to let your agent use its tools." msgid "Archive" msgstr "Archive" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "archived" @@ -651,7 +651,7 @@ msgstr "archived" msgid "Archived" msgstr "Archived" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "Archived. Chat, memory, and files kept." @@ -711,11 +711,11 @@ msgstr "at {0}" msgid "at {timeSelect}" msgstr "at {timeSelect}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Attach file" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "Attachment" @@ -788,7 +788,7 @@ msgstr "Bearer token" msgid "Blocked in your browser settings" msgstr "Blocked in your browser settings" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Booting live desktop…" @@ -797,7 +797,7 @@ msgstr "Booting live desktop…" msgid "Booting up {0}’s computer" msgstr "Booting up {0}’s computer" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "bot" @@ -828,7 +828,7 @@ msgstr "Bot to link" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "Bots act without asking by default. Add an exception only when you want to review a type of action first." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "Bots are working" @@ -889,7 +889,7 @@ msgstr "Cancel new bot" msgid "Cancel new group" msgstr "Cancel new group" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "Cancel reply" @@ -946,7 +946,7 @@ msgstr "Chat apps, group channels, and agent connections." msgid "Chat history" msgstr "Chat history" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "Chat Settings" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "Composing a reply…" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "Computer" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "Computer failed to boot" @@ -1205,11 +1205,11 @@ msgstr "Computer failed to boot" msgid "Computer is asleep" msgstr "Computer is asleep" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "Computer is asleep. Open it to wake." -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "Computer is stopped" @@ -1353,7 +1353,7 @@ msgstr "Continue in Background" msgid "Continue with email" msgstr "Continue with email" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "Conversation record" @@ -1361,11 +1361,11 @@ msgstr "Conversation record" msgid "Conversations" msgstr "Conversations" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "Copy" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "Copy reply" @@ -1939,7 +1939,7 @@ msgstr "Delete my account" msgid "Delete space" msgstr "Delete space" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "deleted" @@ -2009,7 +2009,7 @@ msgstr "Disconnecting…" msgid "Dismiss" msgstr "Dismiss" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "Dismiss error" @@ -2107,7 +2107,7 @@ msgstr "Duplicate" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "e.g. Hivenet Agent, Presales, Timesheets bot" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "Earlier message" @@ -2524,7 +2524,7 @@ msgstr "How should your Oo sound when reading replies aloud?" msgid "How to check" msgstr "How to check" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "I’m done" @@ -2627,11 +2627,11 @@ msgstr "Isolated" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "Jump to latest" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "Jump to replied message" @@ -2718,7 +2718,7 @@ msgstr "Listening — what's broken or slow?" msgid "Listening — what's the story?" msgstr "Listening — what's the story?" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "Load earlier messages" @@ -2771,7 +2771,7 @@ msgstr "Loading voices…" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "Loading…" @@ -2918,7 +2918,7 @@ msgstr "Memory" msgid "Memory scope" msgstr "Memory scope" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "Mentions" @@ -2931,11 +2931,12 @@ msgstr "Mentions only" msgid "Message" msgstr "Message" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "Message" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "Message composer" @@ -2943,11 +2944,11 @@ msgstr "Message composer" msgid "Message event" msgstr "Message event" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "Message from {peer}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "Message…" @@ -3030,7 +3031,7 @@ msgstr "Models from server" msgid "Monthly" msgstr "Monthly" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "More" @@ -3097,6 +3098,7 @@ msgstr "Needs you" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "Needs you" @@ -3430,7 +3432,7 @@ msgstr "Open work" msgid "OpenAI-compatible server URL" msgstr "OpenAI-compatible server URL" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "Opened its thread." @@ -3671,19 +3673,19 @@ msgstr "Quiet hours end" msgid "Quiet hours start" msgstr "Quiet hours start" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "Quote" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "React" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "Reactions" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "Read aloud" @@ -3788,7 +3790,7 @@ msgstr "Refreshing…" msgid "Region" msgstr "Region" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "Release" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "Remove" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "Remove {0}" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "Remove Git event" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "Remove mention {0}" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "Remove schedule" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "Remove skill {0}" @@ -3842,7 +3844,7 @@ msgstr "Remove skill {0}" msgid "Remove webhook" msgstr "Remove webhook" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "Removed with chat, computer, and memory." @@ -3875,15 +3877,15 @@ msgstr "Replace API key" msgid "Replace key" msgstr "Replace key" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "Reply" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "Replying to {replyName}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "Replying to {replyName}: “{replyQuote}”" @@ -4142,7 +4144,7 @@ msgstr "Select {0}" msgid "Self-hosted (better-auth)" msgstr "Self-hosted (better-auth)" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "Send" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "Server URL" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "Set up voice" @@ -4203,11 +4205,11 @@ msgstr "Set up voice" msgid "Settings" msgstr "Settings" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "Settings: General" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "Settings: Usage" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "Sketching the blueprint…" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "Skill {0}" @@ -4311,7 +4313,7 @@ msgstr "Skills" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "Skip" @@ -4365,11 +4367,11 @@ msgstr "Space default" msgid "Spaces" msgstr "Spaces" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Speak" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "Speak this reply" @@ -4423,15 +4425,15 @@ msgstr "Start recording" msgid "Start talking" msgstr "Start talking" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "Start the conversation — {activeName} is on stage above." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "Start the conversation." -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "Start voice conversation" @@ -4459,10 +4461,12 @@ msgstr "Steps" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "Stop" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "Stop speaking" @@ -4492,7 +4496,7 @@ msgstr "Stress-testing the book…" msgid "Stronger together — {0} specialists" msgstr "Stronger together — {0} specialists" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "subagent" @@ -4557,7 +4561,7 @@ msgstr "Teaching in progress. Stop teaching before sending a new message." msgid "Team" msgstr "Team" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "Team Computer" @@ -4598,7 +4602,7 @@ msgstr "The selected memory provider is not available in this build." msgid "Thinking" msgstr "Thinking" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "Transcribe" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "Transcript" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "Video workflow" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "Voice" @@ -5066,7 +5070,7 @@ msgstr "Working…" msgid "Working…" msgstr "Working…" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "Yesterday" diff --git a/apps/web/src/locales/es/messages.po b/apps/web/src/locales/es/messages.po index 7c98792..cee9313 100644 --- a/apps/web/src/locales/es/messages.po +++ b/apps/web/src/locales/es/messages.po @@ -210,7 +210,7 @@ msgstr "" msgid "{botName} watches the tape…" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "Computadora de {botName}" @@ -277,7 +277,7 @@ msgstr "{title}, {label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} está trabajando" @@ -643,7 +643,7 @@ msgstr "Aprueba este servidor para que tu agente use sus herramientas." msgid "Archive" msgstr "Archivar" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "archivado" @@ -651,7 +651,7 @@ msgstr "archivado" msgid "Archived" msgstr "Archivado" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "Archivado. Se conservan el chat, la memoria y los archivos." @@ -711,11 +711,11 @@ msgstr "a las {0}" msgid "at {timeSelect}" msgstr "a las {timeSelect}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Adjuntar archivo" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "Archivo adjunto" @@ -788,7 +788,7 @@ msgstr "Token Bearer" msgid "Blocked in your browser settings" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Iniciando escritorio en vivo…" @@ -797,7 +797,7 @@ msgstr "Iniciando escritorio en vivo…" msgid "Booting up {0}’s computer" msgstr "Iniciando la computadora de {0}" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "bot" @@ -828,7 +828,7 @@ msgstr "Bot a vincular" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "Los bots actúan sin preguntar de forma predeterminada. Agrega una excepción solo cuando quieras revisar primero un tipo de acción." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "Los bots están trabajando" @@ -889,7 +889,7 @@ msgstr "Cancelar nuevo bot" msgid "Cancel new group" msgstr "Cancelar nuevo grupo" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "Cancelar respuesta" @@ -946,7 +946,7 @@ msgstr "Apps de chat, canales de grupo y conexiones de agentes." msgid "Chat history" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "Configuración del chat" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "Computadora" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "La computadora no pudo iniciarse" @@ -1205,11 +1205,11 @@ msgstr "La computadora no pudo iniciarse" msgid "Computer is asleep" msgstr "La computadora está en reposo" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "La computadora está en reposo. Ábrela para despertarla." -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "La computadora está detenida" @@ -1353,7 +1353,7 @@ msgstr "" msgid "Continue with email" msgstr "Continuar con el correo" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "" @@ -1361,11 +1361,11 @@ msgstr "" msgid "Conversations" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "Copiar" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "" @@ -1939,7 +1939,7 @@ msgstr "" msgid "Delete space" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "eliminado" @@ -2009,7 +2009,7 @@ msgstr "Desconectando…" msgid "Dismiss" msgstr "Descartar" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "Descartar error" @@ -2107,7 +2107,7 @@ msgstr "Duplicar" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "p. ej. Hivenet Agent, Presales, bot de hojas de horas" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "Mensaje anterior" @@ -2524,7 +2524,7 @@ msgstr "" msgid "How to check" msgstr "Cómo comprobar" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "Listo" @@ -2627,11 +2627,11 @@ msgstr "Aislado" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "Su conversación, archivos y rutinas se eliminarán de forma permanente. Los bots que creó permanecerán en tu lista." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "Ir al más reciente" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "Ir al mensaje respondido" @@ -2718,7 +2718,7 @@ msgstr "" msgid "Listening — what's the story?" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "Cargar mensajes anteriores" @@ -2771,7 +2771,7 @@ msgstr "" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "Cargando…" @@ -2918,7 +2918,7 @@ msgstr "Memoria" msgid "Memory scope" msgstr "Alcance de memoria" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "Menciones" @@ -2931,11 +2931,12 @@ msgstr "" msgid "Message" msgstr "Mensaje" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "Mensaje" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "Redactor de mensajes" @@ -2943,11 +2944,11 @@ msgstr "Redactor de mensajes" msgid "Message event" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "Mensaje de {peer}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "Mensaje…" @@ -3030,7 +3031,7 @@ msgstr "Modelos del servidor" msgid "Monthly" msgstr "Mensual" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "" @@ -3097,6 +3098,7 @@ msgstr "" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "" @@ -3430,7 +3432,7 @@ msgstr "Trabajo abierto" msgid "OpenAI-compatible server URL" msgstr "URL de servidor compatible con OpenAI" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "Se abrió su hilo." @@ -3671,19 +3673,19 @@ msgstr "" msgid "Quiet hours start" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "Reaccionar" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "Reacciones" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "" @@ -3788,7 +3790,7 @@ msgstr "Actualizando…" msgid "Region" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "Liberar" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "Quitar" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "Quitar {0}" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "Quitar mención {0}" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "Quitar horario" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "Quitar habilidad {0}" @@ -3842,7 +3844,7 @@ msgstr "Quitar habilidad {0}" msgid "Remove webhook" msgstr "Quitar webhook" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "Eliminado junto con el chat, la computadora y la memoria." @@ -3875,15 +3877,15 @@ msgstr "Reemplazar clave de API" msgid "Replace key" msgstr "Reemplazar clave" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "Responder" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "Respondiendo a {replyName}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "" @@ -4142,7 +4144,7 @@ msgstr "" msgid "Self-hosted (better-auth)" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "Enviar" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "URL del servidor" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "" @@ -4203,11 +4205,11 @@ msgstr "" msgid "Settings" msgstr "Configuración" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "Configuración: General" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "Configuración: Uso" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "Habilidad {0}" @@ -4311,7 +4313,7 @@ msgstr "Habilidades" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "Omitir" @@ -4365,11 +4367,11 @@ msgstr "Predeterminado del Space" msgid "Spaces" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Hablar" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "Leer esta respuesta" @@ -4423,15 +4425,15 @@ msgstr "Iniciar grabación" msgid "Start talking" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "" @@ -4459,10 +4461,12 @@ msgstr "Pasos" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "Detener" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "Dejar de hablar" @@ -4492,7 +4496,7 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "subagente" @@ -4557,7 +4561,7 @@ msgstr "Enseñanza en curso: detén la enseñanza antes de enviar un nuevo mensa msgid "Team" msgstr "Equipo" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "Team Computer" @@ -4598,7 +4602,7 @@ msgstr "El proveedor de memoria seleccionado no está disponible en esta build." msgid "Thinking" msgstr "Pensando" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "Este bot se ejecuta en esta computadora, no en un escritorio Linux. El shell y los archivos usan tu carpeta de inicio." @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "Voz" @@ -5066,7 +5070,7 @@ msgstr "Trabajando…" msgid "Working…" msgstr "Trabajando…" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "Ayer" diff --git a/apps/web/src/locales/hi/messages.po b/apps/web/src/locales/hi/messages.po index 6ebeba1..38a2327 100644 --- a/apps/web/src/locales/hi/messages.po +++ b/apps/web/src/locales/hi/messages.po @@ -210,7 +210,7 @@ msgstr "" msgid "{botName} watches the tape…" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "{botName} का कंप्यूटर" @@ -277,7 +277,7 @@ msgstr "{title}, {label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} काम कर रहा है" @@ -643,7 +643,7 @@ msgstr "अपने एजेंट को इसके टूल उपयो msgid "Archive" msgstr "आर्काइव करें" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "आर्काइव किया गया" @@ -651,7 +651,7 @@ msgstr "आर्काइव किया गया" msgid "Archived" msgstr "आर्काइव किया गया" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "आर्काइव किया गया। चैट, मेमोरी और फ़ाइलें सुरक्षित रखी गईं।" @@ -711,11 +711,11 @@ msgstr "{0} बजे" msgid "at {timeSelect}" msgstr "{timeSelect} बजे" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "फ़ाइल संलग्न करें" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "अटैचमेंट" @@ -788,7 +788,7 @@ msgstr "बियरर टोकन" msgid "Blocked in your browser settings" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "लाइव डेस्कटॉप शुरू हो रहा है…" @@ -797,7 +797,7 @@ msgstr "लाइव डेस्कटॉप शुरू हो रहा ह msgid "Booting up {0}’s computer" msgstr "{0} का कंप्यूटर शुरू हो रहा है" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "बॉट" @@ -828,7 +828,7 @@ msgstr "" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "बॉट डिफ़ॉल्ट रूप से बिना पूछे कार्रवाई करते हैं। अपवाद तभी जोड़ें जब आप किसी प्रकार की कार्रवाई की पहले समीक्षा करना चाहते हों।" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "बॉट काम कर रहे हैं" @@ -889,7 +889,7 @@ msgstr "नया बॉट रद्द करें" msgid "Cancel new group" msgstr "नया समूह रद्द करें" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "उत्तर रद्द करें" @@ -946,7 +946,7 @@ msgstr "" msgid "Chat history" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "चैट सेटिंग्स" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "कंप्यूटर" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "कंप्यूटर शुरू नहीं हो सका" @@ -1205,11 +1205,11 @@ msgstr "कंप्यूटर शुरू नहीं हो सका" msgid "Computer is asleep" msgstr "कंप्यूटर निष्क्रिय है" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "कंप्यूटर रुका हुआ है" @@ -1353,7 +1353,7 @@ msgstr "" msgid "Continue with email" msgstr "ईमेल से जारी रखें" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "" @@ -1361,11 +1361,11 @@ msgstr "" msgid "Conversations" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "कॉपी करें" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "" @@ -1939,7 +1939,7 @@ msgstr "" msgid "Delete space" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "डिलीट किया गया" @@ -2009,7 +2009,7 @@ msgstr "डिस्कनेक्ट हो रहा है…" msgid "Dismiss" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "" @@ -2107,7 +2107,7 @@ msgstr "डुप्लिकेट" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "उदा. Hivenet Agent, Presales, टाइमशीट बॉट" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "पुराना संदेश" @@ -2524,7 +2524,7 @@ msgstr "" msgid "How to check" msgstr "जांच कैसे करें" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "मेरा काम हो गया" @@ -2627,11 +2627,11 @@ msgstr "पृथक" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "इसकी बातचीत, फ़ाइलें और रूटीन स्थायी रूप से डिलीट कर दिए जाएंगे। इसके बनाए बॉट आपकी सूची में बने रहेंगे।" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "नवीनतम संदेश पर जाएँ" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "जिस संदेश का उत्तर दिया गया उस पर जाएं" @@ -2718,7 +2718,7 @@ msgstr "" msgid "Listening — what's the story?" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "पुराने संदेश लोड करें" @@ -2771,7 +2771,7 @@ msgstr "" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "लोड हो रहा है…" @@ -2918,7 +2918,7 @@ msgstr "मेमोरी" msgid "Memory scope" msgstr "मेमोरी स्कोप" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "" @@ -2931,11 +2931,12 @@ msgstr "" msgid "Message" msgstr "संदेश" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "संदेश" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "" @@ -2943,11 +2944,11 @@ msgstr "" msgid "Message event" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "{peer} का संदेश" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "संदेश…" @@ -3030,7 +3031,7 @@ msgstr "सर्वर से मॉडल" msgid "Monthly" msgstr "मासिक" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "" @@ -3097,6 +3098,7 @@ msgstr "" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "" @@ -3430,7 +3432,7 @@ msgstr "खुला कार्य" msgid "OpenAI-compatible server URL" msgstr "OpenAI-संगत सर्वर URL" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "इसका थ्रेड खोला।" @@ -3671,19 +3673,19 @@ msgstr "" msgid "Quiet hours start" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "प्रतिक्रिया दें" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "प्रतिक्रियाएँ" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "" @@ -3788,7 +3790,7 @@ msgstr "" msgid "Region" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "नियंत्रण छोड़ें" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "हटाएं" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "{0} हटाएं" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "उल्लेख {0} हटाएं" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "स्किल {0} हटाएं" @@ -3842,7 +3844,7 @@ msgstr "स्किल {0} हटाएं" msgid "Remove webhook" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "चैट, कंप्यूटर और मेमोरी सहित हटाया गया।" @@ -3875,15 +3877,15 @@ msgstr "API कुंजी बदलें" msgid "Replace key" msgstr "कुंजी बदलें" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "उत्तर दें" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "{replyName} को उत्तर दे रहे हैं" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "" @@ -4142,7 +4144,7 @@ msgstr "" msgid "Self-hosted (better-auth)" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "भेजें" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "सर्वर URL" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "" @@ -4203,11 +4205,11 @@ msgstr "" msgid "Settings" msgstr "सेटिंग्स" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "सेटिंग्स: सामान्य" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "सेटिंग्स: उपयोग" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "स्किल {0}" @@ -4311,7 +4313,7 @@ msgstr "स्किल्स" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "छोड़ें" @@ -4365,11 +4367,11 @@ msgstr "स्पेस डिफ़ॉल्ट" msgid "Spaces" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "बोलें" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "यह उत्तर बोलकर सुनाएं" @@ -4423,15 +4425,15 @@ msgstr "रिकॉर्डिंग शुरू करें" msgid "Start talking" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "" @@ -4459,10 +4461,12 @@ msgstr "चरण" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "रोकें" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "बोलना रोकें" @@ -4492,7 +4496,7 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "सबएजेंट" @@ -4557,7 +4561,7 @@ msgstr "सिखाना जारी है। नया संदेश भ msgid "Team" msgstr "टीम" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "टीम कंप्यूटर" @@ -4598,7 +4602,7 @@ msgstr "चयनित मेमोरी प्रोवाइडर इस msgid "Thinking" msgstr "सोच रहा है" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "यह बॉट इसी कंप्यूटर पर चलता है, किसी Linux डेस्कटॉप पर नहीं। शेल और फ़ाइलें आपके होम फ़ोल्डर का उपयोग करती हैं।" @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "आवाज़" @@ -5066,7 +5070,7 @@ msgstr "काम चल रहा है…" msgid "Working…" msgstr "काम चल रहा है…" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "कल" diff --git a/apps/web/src/locales/ko/messages.po b/apps/web/src/locales/ko/messages.po index c225d4e..782630e 100644 --- a/apps/web/src/locales/ko/messages.po +++ b/apps/web/src/locales/ko/messages.po @@ -210,7 +210,7 @@ msgstr "" msgid "{botName} watches the tape…" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "{botName}의 컴퓨터" @@ -277,7 +277,7 @@ msgstr "{title}, {label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} 작업 중" @@ -643,7 +643,7 @@ msgstr "이 서버를 승인하면 Bot이 제공되는 도구를 사용할 수 msgid "Archive" msgstr "보관" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "보관됨" @@ -651,7 +651,7 @@ msgstr "보관됨" msgid "Archived" msgstr "보관됨" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "보관되었습니다. 대화, 기억, 파일은 유지됩니다." @@ -711,11 +711,11 @@ msgstr "{0}에" msgid "at {timeSelect}" msgstr "{timeSelect}에" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "파일 첨부" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "첨부 파일" @@ -788,7 +788,7 @@ msgstr "Bearer 토큰" msgid "Blocked in your browser settings" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "라이브 데스크톱 시작 중…" @@ -797,7 +797,7 @@ msgstr "라이브 데스크톱 시작 중…" msgid "Booting up {0}’s computer" msgstr "{0}의 컴퓨터를 켜는 중" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "Bot" @@ -828,7 +828,7 @@ msgstr "연결할 Bot" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "Bot은 기본적으로 묻지 않고 작업합니다. 먼저 확인하고 싶은 작업만 예외로 추가하세요." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "봇 작업 중" @@ -889,7 +889,7 @@ msgstr "새 Bot 만들기 취소" msgid "Cancel new group" msgstr "새 그룹 만들기 취소" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "답장 취소" @@ -946,7 +946,7 @@ msgstr "채팅 앱, 그룹 채널 및 Agent 연결을 관리합니다." msgid "Chat history" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "채팅 설정" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "컴퓨터" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "컴퓨터를 시작하지 못했습니다" @@ -1205,11 +1205,11 @@ msgstr "컴퓨터를 시작하지 못했습니다" msgid "Computer is asleep" msgstr "컴퓨터가 절전 상태입니다" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "컴퓨터가 절전 상태입니다. 열어 깨우세요." -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "컴퓨터가 중지됨" @@ -1353,7 +1353,7 @@ msgstr "" msgid "Continue with email" msgstr "이메일로 계속하기" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "" @@ -1361,11 +1361,11 @@ msgstr "" msgid "Conversations" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "복사" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "" @@ -1939,7 +1939,7 @@ msgstr "" msgid "Delete space" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "삭제됨" @@ -2009,7 +2009,7 @@ msgstr "연결 해제 중…" msgid "Dismiss" msgstr "닫기" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "오류 닫기" @@ -2107,7 +2107,7 @@ msgstr "복제" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "예: Hivenet Agent, Presales, 근무표 봇" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "이전 메시지" @@ -2524,7 +2524,7 @@ msgstr "" msgid "How to check" msgstr "완료 확인 방법" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "조작 끝내기" @@ -2627,11 +2627,11 @@ msgstr "이 Bot만 사용" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "대화, 파일, 자동 실행이 영구 삭제됩니다. 이 Bot이 만든 다른 Bot은 목록에 남습니다." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "최신 메시지로 이동" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "답장한 메시지로 이동" @@ -2718,7 +2718,7 @@ msgstr "" msgid "Listening — what's the story?" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "이전 메시지 불러오기" @@ -2771,7 +2771,7 @@ msgstr "" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "불러오는 중…" @@ -2918,7 +2918,7 @@ msgstr "기억" msgid "Memory scope" msgstr "기억 사용 범위" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "멘션" @@ -2931,11 +2931,12 @@ msgstr "" msgid "Message" msgstr "메시지" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "메시지" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "메시지 작성기" @@ -2943,11 +2944,11 @@ msgstr "메시지 작성기" msgid "Message event" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "{peer}의 메시지" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "메시지를 입력하세요" @@ -3030,7 +3031,7 @@ msgstr "서버에서 찾은 모델" msgid "Monthly" msgstr "매월" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "" @@ -3097,6 +3098,7 @@ msgstr "" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "" @@ -3430,7 +3432,7 @@ msgstr "진행 중인 작업" msgid "OpenAI-compatible server URL" msgstr "OpenAI 호환 서버 주소" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "대화가 만들어졌습니다." @@ -3671,19 +3673,19 @@ msgstr "" msgid "Quiet hours start" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "반응하기" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "반응" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "" @@ -3788,7 +3790,7 @@ msgstr "새로고침 중…" msgid "Region" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "제어권 돌려주기" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "삭제" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "{0} 삭제" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "{0} 멘션 삭제" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "일정 제거" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "작업 기술 {0} 삭제" @@ -3842,7 +3844,7 @@ msgstr "작업 기술 {0} 삭제" msgid "Remove webhook" msgstr "웹훅 제거" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "대화, 컴퓨터, 기억과 함께 삭제되었습니다." @@ -3875,15 +3877,15 @@ msgstr "API 키 교체" msgid "Replace key" msgstr "키 교체" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "답장" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "{replyName}에게 답장" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "" @@ -4142,7 +4144,7 @@ msgstr "" msgid "Self-hosted (better-auth)" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "보내기" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "서버 URL" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "" @@ -4203,11 +4205,11 @@ msgstr "" msgid "Settings" msgstr "설정" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "설정: 일반" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "설정: 사용량" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "작업 기술 {0}" @@ -4311,7 +4313,7 @@ msgstr "스킬" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "건너뛰기" @@ -4365,11 +4367,11 @@ msgstr "스페이스 기본값" msgid "Spaces" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "읽기" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "이 답변 읽기" @@ -4423,15 +4425,15 @@ msgstr "작업 녹화 시작" msgid "Start talking" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "" @@ -4459,10 +4461,12 @@ msgstr "실행 단계" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "중지" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "읽기 중지" @@ -4492,7 +4496,7 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "보조 에이전트" @@ -4557,7 +4561,7 @@ msgstr "작업을 가르치는 중입니다. 새 메시지를 보내려면 먼 msgid "Team" msgstr "팀 공용" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "팀 컴퓨터" @@ -4598,7 +4602,7 @@ msgstr "선택한 기억 서비스는 현재 빌드에서 사용할 수 없습 msgid "Thinking" msgstr "생각 깊이" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "이 Bot은 별도 Linux 화면이 아니라 현재 컴퓨터에서 실행됩니다. 터미널과 파일 작업은 홈 폴더를 사용합니다." @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "음성" @@ -5066,7 +5070,7 @@ msgstr "처리 중…" msgid "Working…" msgstr "처리 중…" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "어제" diff --git a/apps/web/src/locales/pt-BR/messages.po b/apps/web/src/locales/pt-BR/messages.po index 42033c3..c6206ed 100644 --- a/apps/web/src/locales/pt-BR/messages.po +++ b/apps/web/src/locales/pt-BR/messages.po @@ -210,7 +210,7 @@ msgstr "" msgid "{botName} watches the tape…" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "Computador do {botName}" @@ -277,7 +277,7 @@ msgstr "{title}, {label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} está trabalhando" @@ -643,7 +643,7 @@ msgstr "Aprove este servidor para permitir que seu agente use suas ferramentas." msgid "Archive" msgstr "Arquivar" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "arquivado" @@ -651,7 +651,7 @@ msgstr "arquivado" msgid "Archived" msgstr "Arquivado" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "Arquivado. Chat, memória e arquivos mantidos." @@ -711,11 +711,11 @@ msgstr "em {0}" msgid "at {timeSelect}" msgstr "em {timeSelect}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Escolher arquivo" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "Anexo" @@ -788,7 +788,7 @@ msgstr "Token portador" msgid "Blocked in your browser settings" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Iniciando a área de trabalho ao vivo..." @@ -797,7 +797,7 @@ msgstr "Iniciando a área de trabalho ao vivo..." msgid "Booting up {0}’s computer" msgstr "Inicializando o computador do {0}" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "bot" @@ -828,7 +828,7 @@ msgstr "" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "Os bots agem sem perguntar por padrão. Adicione uma exceção apenas quando quiser analisar um tipo de ação primeiro." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "Bots estão trabalhando" @@ -889,7 +889,7 @@ msgstr "Cancelar novo bot" msgid "Cancel new group" msgstr "Cancelar novo grupo" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "cancelar resposta" @@ -946,7 +946,7 @@ msgstr "" msgid "Chat history" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "Configurações do chat" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "Computador" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "Falha ao inicializar o computador" @@ -1205,11 +1205,11 @@ msgstr "Falha ao inicializar o computador" msgid "Computer is asleep" msgstr "O computador está dormindo" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "O computador está parado" @@ -1353,7 +1353,7 @@ msgstr "" msgid "Continue with email" msgstr "Continuar com e-mail" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "" @@ -1361,11 +1361,11 @@ msgstr "" msgid "Conversations" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "Copiar" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "" @@ -1939,7 +1939,7 @@ msgstr "" msgid "Delete space" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "excluído" @@ -2009,7 +2009,7 @@ msgstr "Desconectando…" msgid "Dismiss" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "" @@ -2107,7 +2107,7 @@ msgstr "Duplicar" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "ex.: Hivenet Agent, Presales, bot de planilhas" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "" @@ -2524,7 +2524,7 @@ msgstr "" msgid "How to check" msgstr "Como verificar" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "Eu terminei." @@ -2627,11 +2627,11 @@ msgstr "Isolado" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "Suas conversas, arquivos e rotinas serão excluídos permanentemente. Os bots criados ficam na sua lista." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "Ir para a mensagem mais recente" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "Ir para a mensagem respondida" @@ -2718,7 +2718,7 @@ msgstr "" msgid "Listening — what's the story?" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "Carregar mensagens anteriores..." @@ -2771,7 +2771,7 @@ msgstr "" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "Carregando..." @@ -2918,7 +2918,7 @@ msgstr "Memória" msgid "Memory scope" msgstr "Escopo de memória" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "" @@ -2931,11 +2931,12 @@ msgstr "" msgid "Message" msgstr "Mensagem" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "Mensagem" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "" @@ -2943,11 +2944,11 @@ msgstr "" msgid "Message event" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "Mensagem de {peer}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "Mensagem…" @@ -3030,7 +3031,7 @@ msgstr "Modelos do servidor" msgid "Monthly" msgstr "Mensalmente" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "" @@ -3097,6 +3098,7 @@ msgstr "" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "" @@ -3430,7 +3432,7 @@ msgstr "Trabalho aberto" msgid "OpenAI-compatible server URL" msgstr "URL do servidor compatível com OpenAI" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "Abriu a conversa." @@ -3671,19 +3673,19 @@ msgstr "" msgid "Quiet hours start" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "Reagir" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "Reações" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "" @@ -3788,7 +3790,7 @@ msgstr "" msgid "Region" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "Libere" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "Remover" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "Remover {0}" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "Remover menção {0}" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "Remover habilidade {0}" @@ -3842,7 +3844,7 @@ msgstr "Remover habilidade {0}" msgid "Remove webhook" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "Removido com chat, computador e memória." @@ -3875,15 +3877,15 @@ msgstr "Substituir chave de API" msgid "Replace key" msgstr "Substituir chave" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "Responder" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "Respondendo a {replyName}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "" @@ -4142,7 +4144,7 @@ msgstr "" msgid "Self-hosted (better-auth)" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "Enviar" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "URL do servidor" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "" @@ -4203,11 +4205,11 @@ msgstr "" msgid "Settings" msgstr "Configurações" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "Opções > Geral" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "Configurações: Uso" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "Habilidade {0}" @@ -4311,7 +4313,7 @@ msgstr "Habilidades" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "Pular" @@ -4365,11 +4367,11 @@ msgstr "Padrão do espaço" msgid "Spaces" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Falar" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "Fale esta resposta" @@ -4423,15 +4425,15 @@ msgstr "Começar a gravar" msgid "Start talking" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "" @@ -4459,10 +4461,12 @@ msgstr "Passos" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "Parar" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "Pare de Falar" @@ -4492,7 +4496,7 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "subagente" @@ -4557,7 +4561,7 @@ msgstr "Ensino em andamento. Pare de ensinar antes de enviar uma nova mensagem." msgid "Team" msgstr "Equipe" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "Computador da equipe" @@ -4598,7 +4602,7 @@ msgstr "O provedor de memória selecionado não está disponível nesta compila msgid "Thinking" msgstr "Pensando" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "Este bot é executado neste computador, não em um desktop Linux. Shell e arquivos usam sua pasta inicial." @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "Voz" @@ -5066,7 +5070,7 @@ msgstr "Funcionando" msgid "Working…" msgstr "Funcionando" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "Ontem" diff --git a/apps/web/src/locales/ru/messages.po b/apps/web/src/locales/ru/messages.po index 935a14d..bd8417c 100644 --- a/apps/web/src/locales/ru/messages.po +++ b/apps/web/src/locales/ru/messages.po @@ -210,7 +210,7 @@ msgstr "" msgid "{botName} watches the tape…" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "Компьютер {botName}" @@ -277,7 +277,7 @@ msgstr "{title}, {label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "{toolCount, plural, one {# инструмент} few {# инструмента} many {# инструментов} other {# инструмента}}" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} работает" @@ -643,7 +643,7 @@ msgstr "Одобрите этот сервер, чтобы ваш агент м msgid "Archive" msgstr "Архивировать" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "в архиве" @@ -651,7 +651,7 @@ msgstr "в архиве" msgid "Archived" msgstr "В архиве" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "В архиве. Чат, память и файлы сохраняются." @@ -711,11 +711,11 @@ msgstr "в {0}" msgid "at {timeSelect}" msgstr "в {timeSelect}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Прикрепить файл" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "Вложение" @@ -788,7 +788,7 @@ msgstr "Bearer-токен" msgid "Blocked in your browser settings" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Загрузка рабочего стола…" @@ -797,7 +797,7 @@ msgstr "Загрузка рабочего стола…" msgid "Booting up {0}’s computer" msgstr "Загрузка компьютера {0}" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "бот" @@ -828,7 +828,7 @@ msgstr "Бот для ссылки" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "По умолчанию боты действуют, не спрашивая. Добавляйте исключение только в том случае, если вы хотите сначала просмотреть тип действия." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "Боты работают" @@ -889,7 +889,7 @@ msgstr "Отменить создание бота" msgid "Cancel new group" msgstr "Отменить создание группы" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "Отменить ответ" @@ -946,7 +946,7 @@ msgstr "Приложения чата, групповые каналы и под msgid "Chat history" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "Настройки чата" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "Компьютер" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "Компьютер не смог загрузиться" @@ -1205,11 +1205,11 @@ msgstr "Компьютер не смог загрузиться" msgid "Computer is asleep" msgstr "Компьютер спит" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "Компьютер спит. Откройте его, чтобы разбудить." -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "Компьютер остановлен" @@ -1353,7 +1353,7 @@ msgstr "Продолжить в фоне" msgid "Continue with email" msgstr "Продолжить по электронной почте" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "" @@ -1361,11 +1361,11 @@ msgstr "" msgid "Conversations" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "Копировать" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "" @@ -1939,7 +1939,7 @@ msgstr "" msgid "Delete space" msgstr "Удалить пространство" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "удалено" @@ -2009,7 +2009,7 @@ msgstr "Отключение…" msgid "Dismiss" msgstr "Закрыть" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "Закрыть ошибку" @@ -2107,7 +2107,7 @@ msgstr "Дублировать" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "напр. Hivenet Agent, Presales, бот табелей" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "Предыдущее сообщение" @@ -2524,7 +2524,7 @@ msgstr "" msgid "How to check" msgstr "Как проверить" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "Готово" @@ -2627,11 +2627,11 @@ msgstr "изолированный" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "Его диалог, файлы и задачи будут безвозвратно удалены. Созданные им боты останутся в вашем списке." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "Перейти к последнему" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "Перейти к ответному сообщению" @@ -2718,7 +2718,7 @@ msgstr "" msgid "Listening — what's the story?" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "Загрузить более ранние сообщения" @@ -2771,7 +2771,7 @@ msgstr "" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "Загрузка…" @@ -2918,7 +2918,7 @@ msgstr "Память" msgid "Memory scope" msgstr "Область памяти" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "Упоминания" @@ -2931,11 +2931,12 @@ msgstr "Только упоминания" msgid "Message" msgstr "Сообщение" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "Сообщение" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "Поле сообщения" @@ -2943,11 +2944,11 @@ msgstr "Поле сообщения" msgid "Message event" msgstr "Событие сообщения" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "Сообщение от {peer}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "Сообщение…" @@ -3030,7 +3031,7 @@ msgstr "Модели с сервера" msgid "Monthly" msgstr "Ежемесячно" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "Ещё" @@ -3097,6 +3098,7 @@ msgstr "Требуется ваше участие" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "Требуется ваше участие" @@ -3430,7 +3432,7 @@ msgstr "Открытые задачи" msgid "OpenAI-compatible server URL" msgstr "URL-адрес сервера, совместимого с OpenAI" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "Диалог открыт." @@ -3671,19 +3673,19 @@ msgstr "" msgid "Quiet hours start" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "" @@ -3788,7 +3790,7 @@ msgstr "Обновление…" msgid "Region" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "Освободить управление" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "Удалить" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "Удалить {0}" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "Удалить событие Git" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "Удалить упоминание {0}" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "Удалить расписание" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "Удалить навык {0}" @@ -3842,7 +3844,7 @@ msgstr "Удалить навык {0}" msgid "Remove webhook" msgstr "Удалить вебхук" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "Удалено вместе с чатом, компьютером и памятью." @@ -3875,15 +3877,15 @@ msgstr "Заменить ключ API" msgid "Replace key" msgstr "Заменить ключ" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "Ответить" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "Ответ на {replyName}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "" @@ -4142,7 +4144,7 @@ msgstr "" msgid "Self-hosted (better-auth)" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "Отправить" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "URL-адрес сервера" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "" @@ -4203,11 +4205,11 @@ msgstr "" msgid "Settings" msgstr "Настройки" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "Настройки: Общие" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "Настройки: Использование" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "Навык {0}" @@ -4311,7 +4313,7 @@ msgstr "Навыки" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "Пропустить" @@ -4365,11 +4367,11 @@ msgstr "Пространство по умолчанию" msgid "Spaces" msgstr "Пространства" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Озвучить" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "Озвучить этот ответ" @@ -4423,15 +4425,15 @@ msgstr "Начать запись" msgid "Start talking" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "" @@ -4459,10 +4461,12 @@ msgstr "Шаги" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "Остановить" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "Остановить озвучивание" @@ -4492,7 +4496,7 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "субагент" @@ -4557,7 +4561,7 @@ msgstr "Обучение в процессе. Прекратите обучен msgid "Team" msgstr "Команда" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "Командный компьютер" @@ -4598,7 +4602,7 @@ msgstr "Выбранный поставщик памяти недоступен msgid "Thinking" msgstr "рассуждение" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "Этот бот работает на этом компьютере, а не на рабочем столе Linux. Оболочка и файлы используют вашу домашнюю папку." @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "Голос" @@ -5066,7 +5070,7 @@ msgstr "Выполняется…" msgid "Working…" msgstr "Выполняется…" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "Вчера" diff --git a/apps/web/src/locales/tr/messages.po b/apps/web/src/locales/tr/messages.po index 08316ed..debd308 100644 --- a/apps/web/src/locales/tr/messages.po +++ b/apps/web/src/locales/tr/messages.po @@ -210,7 +210,7 @@ msgstr "" msgid "{botName} watches the tape…" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "{botName} adlı botun bilgisayarı" @@ -277,7 +277,7 @@ msgstr "{title}, {label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} çalışıyor" @@ -643,7 +643,7 @@ msgstr "Agent'ının bu sunucunun araçlarını kullanabilmesi için sunucuyu on msgid "Archive" msgstr "Arşivle" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "arşivlendi" @@ -651,7 +651,7 @@ msgstr "arşivlendi" msgid "Archived" msgstr "Arşivlendi" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "Arşivlendi. Sohbet, hafıza ve dosyalar korundu." @@ -711,11 +711,11 @@ msgstr "saat {0}" msgid "at {timeSelect}" msgstr "saat {timeSelect}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Dosya ekle" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "Ek" @@ -788,7 +788,7 @@ msgstr "Bearer token" msgid "Blocked in your browser settings" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Canlı masaüstü başlatılıyor…" @@ -797,7 +797,7 @@ msgstr "Canlı masaüstü başlatılıyor…" msgid "Booting up {0}’s computer" msgstr "{0} adlı botun bilgisayarı başlatılıyor" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "bot" @@ -828,7 +828,7 @@ msgstr "" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "Botlar varsayılan olarak sormadan hareket eder. Yalnızca belirli bir işlem türünü önce incelemek istediğinde istisna ekle." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "Botlar çalışıyor" @@ -889,7 +889,7 @@ msgstr "Yeni botu iptal et" msgid "Cancel new group" msgstr "Yeni grubu iptal et" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "Yanıtı iptal et" @@ -946,7 +946,7 @@ msgstr "" msgid "Chat history" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "Sohbet Ayarları" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "Bilgisayar" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "Bilgisayar başlatılamadı" @@ -1205,11 +1205,11 @@ msgstr "Bilgisayar başlatılamadı" msgid "Computer is asleep" msgstr "Bilgisayar uykuda" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "Bilgisayar durduruldu" @@ -1353,7 +1353,7 @@ msgstr "" msgid "Continue with email" msgstr "E-posta ile devam et" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "" @@ -1361,11 +1361,11 @@ msgstr "" msgid "Conversations" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "Kopyala" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "" @@ -1939,7 +1939,7 @@ msgstr "" msgid "Delete space" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "silindi" @@ -2009,7 +2009,7 @@ msgstr "Bağlantı kesiliyor…" msgid "Dismiss" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "" @@ -2107,7 +2107,7 @@ msgstr "Çoğalt" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "örn. Hivenet Agent, Presales, puantaj botu" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "" @@ -2524,7 +2524,7 @@ msgstr "" msgid "How to check" msgstr "Nasıl kontrol edilir" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "Bitirdim" @@ -2627,11 +2627,11 @@ msgstr "Yalıtılmış" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "Sohbeti, dosyaları ve rutinleri kalıcı olarak silinecek. Oluşturduğu botlar listende kalır." -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "En son mesaja git" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "Yanıtlanan mesaja git" @@ -2718,7 +2718,7 @@ msgstr "" msgid "Listening — what's the story?" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "Önceki mesajları yükle" @@ -2771,7 +2771,7 @@ msgstr "" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "Yükleniyor…" @@ -2918,7 +2918,7 @@ msgstr "Hafıza" msgid "Memory scope" msgstr "Hafıza kapsamı" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "" @@ -2931,11 +2931,12 @@ msgstr "" msgid "Message" msgstr "Mesaj" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "Mesaj" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "" @@ -2943,11 +2944,11 @@ msgstr "" msgid "Message event" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "{peer} botundan mesaj" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "Mesaj…" @@ -3030,7 +3031,7 @@ msgstr "Sunucudan gelen modeller" msgid "Monthly" msgstr "Aylık" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "" @@ -3097,6 +3098,7 @@ msgstr "" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "" @@ -3430,7 +3432,7 @@ msgstr "Açık işler" msgid "OpenAI-compatible server URL" msgstr "OpenAI uyumlu sunucu URL'si" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "Sohbeti açıldı." @@ -3671,19 +3673,19 @@ msgstr "" msgid "Quiet hours start" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "Tepki ver" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "Tepkiler" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "" @@ -3788,7 +3790,7 @@ msgstr "" msgid "Region" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "Bırak" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "Kaldır" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "{0} kaldır" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "{0} bahsini kaldır" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "{0} becerisini kaldır" @@ -3842,7 +3844,7 @@ msgstr "{0} becerisini kaldır" msgid "Remove webhook" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "Sohbeti, bilgisayarı ve hafızasıyla birlikte kaldırıldı." @@ -3875,15 +3877,15 @@ msgstr "API anahtarını değiştir" msgid "Replace key" msgstr "Anahtarı değiştir" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "Yanıtla" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "{replyName} yanıtlanıyor" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "" @@ -4142,7 +4144,7 @@ msgstr "" msgid "Self-hosted (better-auth)" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "Gönder" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "Sunucu URL'si" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "" @@ -4203,11 +4205,11 @@ msgstr "" msgid "Settings" msgstr "Ayarlar" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "Ayarlar: Genel" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "Ayarlar: Kullanım" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "Beceri: {0}" @@ -4311,7 +4313,7 @@ msgstr "Beceriler" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "Atla" @@ -4365,11 +4367,11 @@ msgstr "Alan varsayılanı" msgid "Spaces" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Seslendir" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "Bu yanıtı seslendir" @@ -4423,15 +4425,15 @@ msgstr "Kaydı başlat" msgid "Start talking" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "" @@ -4459,10 +4461,12 @@ msgstr "Adımlar" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "Durdur" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "Seslendirmeyi durdur" @@ -4492,7 +4496,7 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "alt ajan" @@ -4557,7 +4561,7 @@ msgstr "Öğretme sürüyor. Yeni mesaj göndermeden önce öğretmeyi durdur." msgid "Team" msgstr "Takım" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "Takım Bilgisayarı" @@ -4598,7 +4602,7 @@ msgstr "Seçilen hafıza sağlayıcısı bu sürümde kullanılamıyor." msgid "Thinking" msgstr "Düşünüyor" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "Bu bot bir Linux masaüstünde değil, bu bilgisayarda çalışır. Kabuk ve dosyalar senin kullanıcı klasörünü kullanır." @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "Ses" @@ -5066,7 +5070,7 @@ msgstr "Çalışıyor…" msgid "Working…" msgstr "Çalışıyor…" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "Dün" diff --git a/apps/web/src/locales/zh-CN/messages.po b/apps/web/src/locales/zh-CN/messages.po index 2a4dcd3..77c630c 100644 --- a/apps/web/src/locales/zh-CN/messages.po +++ b/apps/web/src/locales/zh-CN/messages.po @@ -210,7 +210,7 @@ msgstr "" msgid "{botName} watches the tape…" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "{botName}’s computer" msgstr "{botName} 的电脑" @@ -277,7 +277,7 @@ msgstr "{title},{label}" msgid "{toolCount, plural, one {# tool} other {# tools}}" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "{workingBotName} is working" msgstr "{workingBotName} 正在工作" @@ -643,7 +643,7 @@ msgstr "批准此服务器后,Agent 才能使用它的工具。" msgid "Archive" msgstr "归档" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "archived" msgstr "已归档" @@ -651,7 +651,7 @@ msgstr "已归档" msgid "Archived" msgstr "已归档" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Archived. Chat, memory, and files kept." msgstr "已归档。对话、记忆和文件保留。" @@ -711,11 +711,11 @@ msgstr "{0}" msgid "at {timeSelect}" msgstr "{timeSelect}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Attach file" msgstr "附加文件" -#: src/pages/Shell.tsx +#: src/pages/shell/message-preview.ts msgid "Attachment" msgstr "附件" @@ -788,7 +788,7 @@ msgstr "Bearer token" msgid "Blocked in your browser settings" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "正在启动实时桌面…" @@ -797,7 +797,7 @@ msgstr "正在启动实时桌面…" msgid "Booting up {0}’s computer" msgstr "正在启动 {0} 的电脑" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "bot" msgstr "Bot" @@ -828,7 +828,7 @@ msgstr "要关联的 Bot" msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgstr "默认情况下 Bot 会直接执行。只有当你想先审核某类操作时,才添加例外。" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Bots are working" msgstr "Bot 正在工作" @@ -889,7 +889,7 @@ msgstr "取消新建 Bot" msgid "Cancel new group" msgstr "取消新建群组" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Cancel reply" msgstr "取消回复" @@ -946,7 +946,7 @@ msgstr "聊天应用、群组频道和 Agent 连接。" msgid "Chat history" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Chat Settings" msgstr "聊天设置" @@ -1192,12 +1192,12 @@ msgid "Composing a reply…" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/transcript.tsx msgid "Computer" msgstr "电脑" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer failed to boot" msgstr "电脑启动失败" @@ -1205,11 +1205,11 @@ msgstr "电脑启动失败" msgid "Computer is asleep" msgstr "电脑已休眠" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is asleep. Open it to wake." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Computer is stopped" msgstr "电脑已停止" @@ -1353,7 +1353,7 @@ msgstr "" msgid "Continue with email" msgstr "使用邮箱继续" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Conversation record" msgstr "" @@ -1361,11 +1361,11 @@ msgstr "" msgid "Conversations" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy" msgstr "复制" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Copy reply" msgstr "" @@ -1939,7 +1939,7 @@ msgstr "" msgid "Delete space" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "deleted" msgstr "已删除" @@ -2009,7 +2009,7 @@ msgstr "正在断开…" msgid "Dismiss" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Dismiss error" msgstr "关闭错误" @@ -2107,7 +2107,7 @@ msgstr "复制" msgid "e.g. Hivenet Agent, Presales, Timesheets bot" msgstr "例如 Hivenet Agent、Presales、工时表机器人" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Earlier message" msgstr "更早的消息" @@ -2524,7 +2524,7 @@ msgstr "" msgid "How to check" msgstr "如何检查" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "I’m done" msgstr "我做完了" @@ -2627,11 +2627,11 @@ msgstr "隔离" msgid "Its conversation, files, and routines will be permanently deleted. Bots it created stay in your list." msgstr "它的对话、文件和例行任务将被永久删除。它创建的 Bot 仍留在列表中。" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to latest" msgstr "跳到最新" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Jump to replied message" msgstr "跳到被回复的消息" @@ -2718,7 +2718,7 @@ msgstr "" msgid "Listening — what's the story?" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Load earlier messages" msgstr "加载更早的消息" @@ -2771,7 +2771,7 @@ msgstr "" #: src/pages/HeuteBrief.tsx #: src/pages/IntegrationSetup.tsx #: src/pages/PeerMessagesOverlay.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Loading…" msgstr "加载中…" @@ -2918,7 +2918,7 @@ msgstr "记忆" msgid "Memory scope" msgstr "记忆范围" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Mentions" msgstr "提及" @@ -2931,11 +2931,12 @@ msgstr "" msgid "Message" msgstr "消息" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/message-preview.ts msgid "Message" msgstr "消息" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message composer" msgstr "消息输入框" @@ -2943,11 +2944,11 @@ msgstr "消息输入框" msgid "Message event" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Message from {peer}" msgstr "来自 {peer} 的消息" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Message…" msgstr "消息…" @@ -3030,7 +3031,7 @@ msgstr "来自服务器的模型" msgid "Monthly" msgstr "每月" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "More" msgstr "" @@ -3097,6 +3098,7 @@ msgstr "" #: src/pages/ActivityList.tsx #: src/pages/HeuteBrief.tsx #: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Needs you" msgstr "" @@ -3430,7 +3432,7 @@ msgstr "待办" msgid "OpenAI-compatible server URL" msgstr "OpenAI 兼容服务器 URL" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Opened its thread." msgstr "已打开其对话。" @@ -3671,19 +3673,19 @@ msgstr "" msgid "Quiet hours start" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Quote" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "React" msgstr "回应" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reactions" msgstr "表情回应" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Read aloud" msgstr "" @@ -3788,7 +3790,7 @@ msgstr "" msgid "Region" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Release" msgstr "释放" @@ -3812,7 +3814,7 @@ msgid "Remove" msgstr "移除" #. placeholder {0}: attachment.file.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove {0}" msgstr "移除 {0}" @@ -3821,7 +3823,7 @@ msgid "Remove Git event" msgstr "" #. placeholder {0}: mention.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove mention {0}" msgstr "移除提及 {0}" @@ -3834,7 +3836,7 @@ msgid "Remove schedule" msgstr "移除计划" #. placeholder {0}: selectedSkill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Remove skill {0}" msgstr "移除技能 {0}" @@ -3842,7 +3844,7 @@ msgstr "移除技能 {0}" msgid "Remove webhook" msgstr "移除 Webhook" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Removed with chat, computer, and memory." msgstr "已连同对话、电脑和记忆一起移除。" @@ -3875,15 +3877,15 @@ msgstr "替换 API 密钥" msgid "Replace key" msgstr "替换密钥" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Reply" msgstr "回复" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}" msgstr "正在回复 {replyName}" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Replying to {replyName}: “{replyQuote}”" msgstr "" @@ -4142,7 +4144,7 @@ msgstr "" msgid "Self-hosted (better-auth)" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx #: src/pages/shell/message-cards.tsx msgid "Send" msgstr "发送" @@ -4193,7 +4195,7 @@ msgid "Server URL" msgstr "服务器 URL" #: src/components/stage/StageVoiceEntry.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Set up voice" msgstr "" @@ -4203,11 +4205,11 @@ msgstr "" msgid "Settings" msgstr "设置" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: General" msgstr "设置:通用" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Settings: Usage" msgstr "设置:用量" @@ -4299,7 +4301,7 @@ msgid "Sketching the blueprint…" msgstr "" #. placeholder {0}: skill.name -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Skill {0}" msgstr "技能 {0}" @@ -4311,7 +4313,7 @@ msgstr "技能" #: src/components/onboarding/OnboardingScanStep.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx #: src/lib/onboarding-copy.ts -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Skip" msgstr "跳过" @@ -4365,11 +4367,11 @@ msgstr "工作区默认" msgid "Spaces" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak" msgstr "朗读" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Speak this reply" msgstr "朗读这条回复" @@ -4423,15 +4425,15 @@ msgstr "开始录制" msgid "Start talking" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation — {activeName} is on stage above." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Start the conversation." msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx msgid "Start voice conversation" msgstr "" @@ -4459,10 +4461,12 @@ msgstr "步骤" #: src/components/browser/InAppBrowser.tsx #: src/pages/Shell.tsx +#: src/pages/shell/composer.tsx +#: src/pages/shell/transcript.tsx msgid "Stop" msgstr "停止" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Stop speaking" msgstr "停止朗读" @@ -4492,7 +4496,7 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "subagent" msgstr "子 Agent" @@ -4557,7 +4561,7 @@ msgstr "正在示范,发送新消息前请先停止示范。" msgid "Team" msgstr "团队" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "Team Computer" msgstr "团队电脑" @@ -4598,7 +4602,7 @@ msgstr "所选记忆提供方在此构建中不可用。" msgid "Thinking" msgstr "思考" -#: src/pages/Shell.tsx +#: src/pages/shell/computer-screen.tsx msgid "This bot runs on this computer, not a Linux desktop. Shell and files use your home folder." msgstr "此 Bot 运行在这台电脑上,而不是 Linux 桌面。Shell 和文件使用你的主目录。" @@ -4705,7 +4709,7 @@ msgid "Transcribe" msgstr "" #: src/components/voice/VoiceStage.tsx -#: src/pages/Shell.tsx +#: src/pages/shell/transcript.tsx msgid "Transcript" msgstr "" @@ -4869,8 +4873,8 @@ msgid "Video workflow" msgstr "" #: src/pages/SettingsOverlay.tsx -#: src/pages/Shell.tsx #: src/pages/shell/bot-panel.tsx +#: src/pages/shell/composer.tsx #: src/pages/VoiceSettingsOverlay.tsx msgid "Voice" msgstr "语音" @@ -5066,7 +5070,7 @@ msgstr "处理中…" msgid "Working…" msgstr "处理中…" -#: src/pages/Shell.tsx +#: src/pages/shell/roster-format.ts msgid "Yesterday" msgstr "昨天" diff --git a/apps/web/src/pages/Shell.tsx b/apps/web/src/pages/Shell.tsx index a0c998d..57d0ed6 100644 --- a/apps/web/src/pages/Shell.tsx +++ b/apps/web/src/pages/Shell.tsx @@ -13,10 +13,7 @@ import { verticalListSortingStrategy, } from "@dnd-kit/sortable"; import { CSS as DndCSS } from "@dnd-kit/utilities"; -import { i18n } from "@lingui/core"; -import { t } from "@lingui/core/macro"; import { Trans, useLingui } from "@lingui/react/macro"; -import { ChatMarkdown } from "@rakazo/chat-ui/web"; import type { AgentSkillCatalogEntry, Bot, @@ -40,10 +37,7 @@ import type { VoiceStatus, } from "@rakazo/contracts"; import { - ATTACHMENT_ALLOWED_MIME_TYPES, ATTACHMENT_MAX_COUNT, - canReactToThreadMessage, - MESSAGE_REACTIONS, type MessageReaction, normalizeCreateBotProfile, } from "@rakazo/contracts"; @@ -52,34 +46,24 @@ import { attachmentsForThread, buildComposerMentionOptions, type ComposerMention, - clampMentionHighlightIndex, cronFromPreset, deriveWorkspaceFocus, groupBotsForSidebar, inferAttachmentMimeType, isActive, - isPeerReceiptBlocks, isRunTerminalEvent, - isToolActivityBlock, latestAnswerableAskMessageId, liveScreenRunId, matchVoiceByName, - mentionChipKey, type PaneState, parseVoiceChatCommand, - projectMessageReactions, recordScreenPaneChoice, reorderBotTo, resolveComposerSendPlan, - resolveMentionPickerKey, runThreadSubscription, - SLASH_ACTIONS, - type SlashActionId, screenPaneMode, searchHitThreadTarget, - serializeComposerPrompt, speechFromBlocks, - truncateSlashDescription, userVisibleMessages, type WorkspaceArtifact, type WorkspaceFocus, @@ -88,12 +72,10 @@ import { AvatarStyleProvider, BotAvatar, Button, - cn, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, - EvooMascot, GroupAvatar, type GroupAvatarMember, InputGroup, @@ -102,19 +84,13 @@ import { Popover, PopoverContent, PopoverTrigger, - resolvePersonaColorDef, Wordmark, } from "@rakazo/ui-web"; import { - ArrowDown, ArrowLeft, - ArrowUp, Bell, - Box, Calendar, ChevronDown, - Clock, - Copy, Folder, Gauge, Globe, @@ -124,36 +100,22 @@ import { LogOut, Maximize2, Menu, - Mic, MoreHorizontal, PanelLeftClose, PanelLeftOpen, PanelRight, - Paperclip, Pencil, Plus, - Puzzle, RefreshCw, - Reply, Search, Settings, - Smile, - Square, - TextQuote, Trash2, - Volume2, X, } from "lucide-react"; import { - type ClipboardEvent, - type DragEvent, - type MutableRefObject, - memo, - type RefObject, Suspense, useCallback, useEffect, - useId, useLayoutEffect, useMemo, useRef, @@ -161,14 +123,8 @@ import { } from "react"; import { createPortal } from "react-dom"; import { useNavigate, useParams, useSearchParams } from "react-router-dom"; -import { ArtifactFileCard } from "../components/ArtifactFileCard"; import { ArtifactPane } from "../components/ArtifactPane"; -import { AskCard } from "../components/AskCard"; -import { ActiveBotGlyph, CollaborationMarker } from "../components/ai/CollaborationMarker"; -import { DelegatedTaskCard, SentMessageCard } from "../components/ai/DelegatedTaskCard"; -import { ProjectCreatedCard } from "../components/ai/ProjectCreatedCard"; import { InAppBrowser } from "../components/browser/InAppBrowser"; -import { CloudAgentCard } from "../components/CloudAgentCard"; import { ComputerMaintenanceActions } from "../components/ComputerMaintenanceActions"; import { ComputersUnavailableHint, @@ -177,15 +133,10 @@ import { import { ComputerUpdateProgress } from "../components/ComputerUpdateProgress"; import { AgentCursor } from "../components/computer/AgentCursor"; import { MainInbox } from "../components/MainInbox"; -import { MessageHoverMetadata } from "../components/MessageHoverMetadata"; -import { MediaCard } from "../components/media/MediaCard"; -import { MediaPlayer } from "../components/media/MediaPlayer"; import { OoGroupStage, OoStage } from "../components/stage/OoStage"; -import { SkillDraftCard } from "../components/teach/SkillDraftCard"; import { TeachCaptureOverlay } from "../components/teach/TeachCaptureOverlay"; import { TeachComputerOverlayControl } from "../components/teach/TeachComputerOverlay"; import { TeachRecordingChrome, TeachStopButton } from "../components/teach/TeachRecordingChrome"; -import { VoiceAuroraRim } from "../components/voice/VoiceAurora"; import { useSidebarResize } from "../hooks/useSidebarResize"; import { useWideLayout } from "../hooks/useWideLayout"; import { readActivityMode, writeActivityMode } from "../lib/activity-mode"; @@ -217,22 +168,15 @@ import { import { buildHeuteBrief } from "../lib/heute-brief"; import { lazyWithRecovery } from "../lib/lazy-recovery"; import { localTimezone } from "../lib/local-timezone"; -import { copyableMessageText } from "../lib/message-text"; -import { messageProviderLabel } from "../lib/messaging"; -import { localizedPreview, withIntakeNoteText } from "../lib/onboarding-copy"; +import { localizedPreview } from "../lib/onboarding-copy"; import { wireOoAudioVoiceDucking } from "../lib/oo-audio-voice-wire"; import { ooSound } from "../lib/oo-sound"; import { ooVocals } from "../lib/oo-vocals"; import { ooVoiceMark } from "../lib/oo-voice-mark"; -import { - isFileDrag, - isFilePaste, - revokePendingAttachmentPreviews, -} from "../lib/pending-attachments"; +import { revokePendingAttachmentPreviews } from "../lib/pending-attachments"; import { markAfterPaint, markOnce } from "../lib/performance"; import { isEmptyProjectSpace } from "../lib/project-empty-state"; import { readProjectSidebarOrder, writeProjectSidebarOrder } from "../lib/project-sidebar-order"; -import { quoteDraftForSelection } from "../lib/quote-selection"; import { routineSaveName } from "../lib/routine-name"; import { clearSpaceSelection, rpc, selectedSpaceId, selectSpace } from "../lib/rpc"; import { readSeenRunErrorIds, rememberSeenRunErrorId } from "../lib/run-error-storage"; @@ -246,19 +190,12 @@ import { computerPanelNeedsMaintenance, computerTakeoverBlocked, isComputerStatusEvent, - isThreadSnapshotEvent, prependThreadMessagePage, reconcileRefreshedThread, - reduceComputerStatus, - reduceThreadSnapshot, threadRunError, userHoldsComputerControl, } from "../lib/thread-events"; -import { - transcriptCanSnapAfterFrame, - transcriptIsNearEnd, - transcriptMovedDown, -} from "../lib/transcript-scroll"; +import { transcriptCanSnapAfterFrame, transcriptIsNearEnd } from "../lib/transcript-scroll"; import { speaker } from "../lib/tts"; import { disableWebPush } from "../lib/web-push"; import { readScreenPaneHabit, writeScreenPaneHabit } from "../lib/workspace-pane-pref"; @@ -281,7 +218,20 @@ import type { SettingsSection } from "./SettingsOverlay"; import { SpaceSearchResults } from "./SpaceSearch"; import { BotSettings, CreateBotForm } from "./shell/bot-panel"; import { BotCreatePicker, ConversationBotPicker } from "./shell/bot-picker"; +import { + collapsedSidebarSectionsStorageKey, + readCollapsedSidebarSections, +} from "./shell/collapsed-sidebar-sections"; import { CommandPalette, isCommandPaletteHotkey } from "./shell/command-palette"; +import { Composer } from "./shell/composer"; +import { + ComputerReleaseActions, + computerLabel, + computerPlaceholder, + DesktopKindEmptyState, + embeddableScreenUrl, + screenIframeSandbox, +} from "./shell/computer-screen"; import { ClearConversationDialog, DeleteBotDialog, @@ -292,13 +242,7 @@ import { RenameBotSectionDialog, } from "./shell/dialogs"; import { MainConversationRow } from "./shell/main-conversation-row"; -import { - AppConnectCard, - ArtifactImage, - ChartBlockView, - ChoiceCard, - McpApprovalCard, -} from "./shell/message-cards"; +import { cleanRosterPreview, formatRosterTime, stripSpaceTitlePrefix } from "./shell/roster-format"; import { rosterNameClass, rosterPreviewClass, @@ -306,6 +250,15 @@ import { rosterTimeClass, rosterUnreadDotClass, } from "./shell/roster-row-style"; +import type { PendingAttachment } from "./shell/shell-types"; +import { FALLBACK_BOT_COLOR } from "./shell/shell-types"; +import { + applyThreadEvent, + firstThreadRoute, + newClientNonce, + threadSnapshotSignal, +} from "./shell/thread-state"; +import { Transcript } from "./shell/transcript"; import { WindowChrome } from "./WindowChrome"; const BotContextMenu = lazyWithRecovery("BotContextMenu", () => @@ -343,13 +296,6 @@ type Panel = | "artifact" | null; -type PendingAttachment = { - id: string; - threadKey: string; - file: File; - previewUrl?: string; -}; - type PendingBrowserNotification = { event: Pick; botId: string; @@ -357,10 +303,6 @@ type PendingBrowserNotification = { groupNotification: boolean; }; -const ATTACHMENT_ACCEPT = ATTACHMENT_ALLOWED_MIME_TYPES.join(","); -/** Identity colour for bots the roster no longer knows about. */ -const FALLBACK_BOT_COLOR = "#85858A"; -const THREAD_SNAPSHOT_TIMEOUT_MS = 2_000; /** Bound Settings leave so a hung voice status refresh cannot block dismissal. */ const VOICE_STATUS_REFRESH_TIMEOUT_MS = 10_000; const MOBILE_SIDEBAR_SWIPE_EDGE_PX = 32; @@ -374,10 +316,6 @@ function defaultWorkspacePaneWidth(): number { return Math.round(Math.max(420, Math.min(760, window.innerWidth * 0.42))); } -function threadSnapshotSignal(parent: AbortSignal): AbortSignal { - return AbortSignal.any([parent, AbortSignal.timeout(THREAD_SNAPSHOT_TIMEOUT_MS)]); -} - function voiceStatusRefreshTimeout(): Promise { return new Promise((_, reject) => { AbortSignal.timeout(VOICE_STATUS_REFRESH_TIMEOUT_MS).addEventListener("abort", () => { @@ -386,35 +324,8 @@ function voiceStatusRefreshTimeout(): Promise { }); } -function collapsedSidebarSectionsStorageKey(userId: string | null | undefined): string | null { - if (!userId) return null; - return `rakazo:collapsed-sidebar-sections:${userId}`; -} - -function readCollapsedSidebarSections(userId: string | null | undefined): Set { - const storageKey = collapsedSidebarSectionsStorageKey(userId); - if (!storageKey) return new Set(); - try { - const value = window.localStorage.getItem(storageKey); - const keys: unknown = value ? JSON.parse(value) : []; - return new Set( - Array.isArray(keys) ? keys.filter((key): key is string => typeof key === "string") : [], - ); - } catch { - return new Set(); - } -} - export type NavPillar = "heute" | "team" | "projekte"; -function stripSpaceTitlePrefix(title: string | null, spaceName: string): string | null { - if (!title) return null; - const prefix = `${spaceName} · `; - if (title.startsWith(prefix)) return title.slice(prefix.length); - if (title === spaceName) return null; - return title; -} - import { ProjectDragGrip, SortableGroup } from "../components/SortableGroup"; export function ShellPage() { @@ -5782,2200 +5693,3 @@ export function ShellPage() { return {shell}; } - -const Transcript = memo(function Transcript({ - scrollRef, - artifactTarget, - onOpenArtifact, - messages, - olderCursor, - loadingOlder, - answerableAskMessageId, - running, - workingBots, - onLoadOlder, - onOpenBot, - onOpenGroup, - onAnswer, - onReply, - onQuote, - onReact, - onJumpToMessage, - onOpenPeerMessages, - memberName, - peerBot, - onRefresh, - onBotChanged, - onAddRoutine, - voiceReady, - speakingMessageId, - onSpeak, - activeName, - encounterMode = false, - voiceEncounterActive = false, -}: { - scrollRef: RefObject; - artifactTarget: ArtifactTarget; - onOpenArtifact?: (artifact: WorkspaceArtifact) => void; - messages: ThreadMessage[]; - olderCursor: number | null; - loadingOlder: boolean; - answerableAskMessageId: string | null; - running: boolean; - workingBots: GroupAvatarMember[]; - onLoadOlder: () => void | Promise; - onOpenBot: (botId: string) => void; - onOpenGroup: (groupId: string) => void; - onAnswer: (message: ThreadMessage, text: string) => Promise; - onReply: (message: ThreadMessage) => void; - onQuote: (message: ThreadMessage, quote: string) => void; - onReact: (message: ThreadMessage, reaction: MessageReaction) => Promise; - onJumpToMessage: (messageId: string) => void; - onOpenPeerMessages: (peer: { peerBotId: string; peerBotName: string }) => void; - memberName?: (botId: string | undefined) => string | undefined; - peerBot: (botId: string) => { color: string; status?: string } | undefined; - onRefresh: () => Promise; - onBotChanged: () => Promise; - onAddRoutine: (name: string, prompt: string) => void; - voiceReady: boolean; - speakingMessageId: string | null; - onSpeak: (message: ThreadMessage) => void; - activeName?: string; - encounterMode?: boolean; - voiceEncounterActive?: boolean; -}) { - const { t } = useLingui(); - const [atEnd, setAtEnd] = useState(true); - const following = useRef(true); - const autoScrolling = useRef(false); - const lastScrollTop = useRef(null); - const autoScrollTimer = useRef(undefined); - const jumpButtonRef = useRef(null); - const messageById = useMemo( - () => new Map(messages.map((message) => [message.id, message])), - [messages], - ); - const reactionView = useMemo( - () => projectMessageReactions(messages.map(withIntakeNoteText)), - // Onboarding notes are worded in the UI language. - [messages, i18n.locale], - ); - const transcriptSubordinate = encounterMode && voiceEncounterActive; - const workingBotName = workingBots.length === 1 ? workingBots[0]?.name : undefined; - const workingLabel = - workingBotName != null && workingBotName !== "" - ? t`${workingBotName} is working` - : t`Bots are working`; - const [quoteDraft, setQuoteDraft] = useState<{ - message: ThreadMessage; - text: string; - range: Range; - } | null>(null); - const selectingWithMouse = useRef(false); - - const evaluateSelection = useCallback(() => { - const selection = window.getSelection(); - if (!selection || selection.isCollapsed || selection.rangeCount === 0) { - setQuoteDraft(null); - return; - } - const range = selection.getRangeAt(0); - const rowOf = (node: Node) => - (node instanceof Element ? node : node.parentElement)?.closest( - "[data-message-id]", - ) ?? null; - const draft = quoteDraftForSelection( - { - startRow: rowOf(range.startContainer), - endRow: rowOf(range.endContainer), - text: selection.toString(), - }, - messageById, - ); - setQuoteDraft(draft ? { ...draft, range } : null); - }, [messageById]); - - // Keyboard and assistive-tech selections never reach a mouseup, so the pill - // lifecycle listens on selectionchange; the mouse flag keeps it hidden while - // a drag is still in flight. - useEffect(() => { - const onMouseDown = (event: MouseEvent) => { - selectingWithMouse.current = true; - if ((event.target as Element | null)?.closest?.("[data-quote-selection]")) return; - setQuoteDraft(null); - }; - const onMouseUp = () => { - selectingWithMouse.current = false; - evaluateSelection(); - }; - const onSelectionChange = () => { - if (!selectingWithMouse.current) evaluateSelection(); - }; - const onKey = (event: KeyboardEvent) => { - if (event.key === "Escape") setQuoteDraft(null); - }; - document.addEventListener("mousedown", onMouseDown, true); - document.addEventListener("mouseup", onMouseUp, true); - document.addEventListener("selectionchange", onSelectionChange); - document.addEventListener("keydown", onKey); - return () => { - document.removeEventListener("mousedown", onMouseDown, true); - document.removeEventListener("mouseup", onMouseUp, true); - document.removeEventListener("selectionchange", onSelectionChange); - document.removeEventListener("keydown", onKey); - }; - }, [evaluateSelection]); - const snapToEnd = useCallback(() => { - const element = scrollRef.current; - if (!element) return; - following.current = true; - autoScrolling.current = false; - setAtEnd(true); - element.scrollTo({ top: element.scrollHeight, behavior: "auto" }); - }, [scrollRef]); - - const jumpToLatest = useCallback(() => { - const element = scrollRef.current; - if (!element) return; - const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; - following.current = true; - autoScrolling.current = !reducedMotion; - setAtEnd(true); - element.scrollTo({ - top: element.scrollHeight, - behavior: reducedMotion ? "auto" : "smooth", - }); - window.clearTimeout(autoScrollTimer.current); - // Fallback only: onScroll clears autoScrolling once near-end is reached. - autoScrollTimer.current = window.setTimeout( - () => { - autoScrolling.current = false; - }, - reducedMotion ? 0 : 2_000, - ); - }, [scrollRef]); - - useLayoutEffect(() => { - if (following.current) snapToEnd(); - }, [messages, running, snapToEnd]); - - // A question the bot waits on can scroll out of view; offer a way back to it instead of the arrow. - const [askOffscreen, setAskOffscreen] = useState(false); - const findAsk = useCallback( - () => - answerableAskMessageId - ? (scrollRef.current?.querySelector( - `[data-message-id="${CSS.escape(answerableAskMessageId)}"]`, - ) ?? null) - : null, - [answerableAskMessageId, scrollRef], - ); - useEffect(() => { - const root = scrollRef.current; - const element = findAsk(); - if (!root || !element || typeof IntersectionObserver === "undefined") { - setAskOffscreen(false); - return; - } - const observer = new IntersectionObserver( - (entries) => setAskOffscreen(!entries.some((entry) => entry.isIntersecting)), - { root, threshold: 0.2 }, - ); - observer.observe(element); - return () => observer.disconnect(); - }, [findAsk, messages, scrollRef]); - const jumpToAsk = useCallback(() => { - const element = findAsk(); - if (!element) return; - const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches; - following.current = false; - element.scrollIntoView({ behavior: reducedMotion ? "auto" : "smooth", block: "center" }); - element - .querySelector("[data-ask-card] input, [data-ask-card] button") - ?.focus({ preventScroll: true }); - }, [findAsk]); - const showJumpToLatest = !atEnd && !askOffscreen; - - useLayoutEffect(() => { - const button = jumpButtonRef.current; - if (atEnd && button && document.activeElement === button) { - button.blur(); - } - }, [atEnd]); - - const loadOlder = useCallback(() => { - const wasFollowing = following.current; - // Prepend must not race the messages-driven snap-to-end follow path. - following.current = false; - autoScrolling.current = false; - const pending = onLoadOlder(); - if (!pending) return; - return Promise.resolve(pending).catch((error) => { - const element = scrollRef.current; - if (wasFollowing && element && transcriptIsNearEnd(element)) { - following.current = true; - setAtEnd(true); - } - throw error; - }); - }, [onLoadOlder, scrollRef]); - - useEffect( - () => () => { - window.clearTimeout(autoScrollTimer.current); - }, - [], - ); - - return ( - // Clip the scroller's padding when the column leaves no room, e.g. beside the main inbox. -
-
{ - lastScrollTop.current = event.currentTarget.scrollTop; - autoScrolling.current = false; - following.current = false; - }} - onTouchStart={(event) => { - lastScrollTop.current = event.currentTarget.scrollTop; - autoScrolling.current = false; - following.current = false; - }} - onWheel={(event) => { - if (event.deltaY < 0) { - lastScrollTop.current = event.currentTarget.scrollTop; - autoScrolling.current = false; - following.current = false; - } - }} - onScroll={(event) => { - const scrolledDown = transcriptMovedDown( - lastScrollTop.current, - event.currentTarget.scrollTop, - ); - lastScrollTop.current = event.currentTarget.scrollTop; - const nearEnd = transcriptIsNearEnd(event.currentTarget); - setAtEnd(nearEnd); - if (nearEnd) { - if (scrolledDown) following.current = true; - if (autoScrolling.current) { - autoScrolling.current = false; - window.clearTimeout(autoScrollTimer.current); - } - } else if (!autoScrolling.current) { - following.current = false; - } - }} - className={`rk-scroll flex min-h-0 flex-1 flex-col overflow-y-auto transition-opacity duration-300 ${ - encounterMode ? "gap-2 px-3 py-3 md:px-6 md:py-4" : "gap-3.5 px-3.5 py-4 md:px-8 md:py-6" - } ${transcriptSubordinate ? "opacity-75" : ""}`} - > - {encounterMode ? ( -

- {voiceEncounterActive ? Transcript : Conversation record} -

- ) : null} - {olderCursor != null ? ( - - ) : null} -
- {reactionView.visibleMessages.length === 0 && encounterMode ? ( -

- {activeName - ? t`Start the conversation — ${activeName} is on stage above.` - : t`Start the conversation.`} -

- ) : null} - {reactionView.visibleMessages.map((message) => { - if (!message.blocks.some((block) => !isToolActivityBlock(block))) return null; - const peerReceipt = isPeerReceiptBlocks(message.blocks); - const messageReactions = reactionView.reactions.get(message.id); - return ( -
- {!peerReceipt && !message.id.startsWith("progress:") ? ( - - ) : null} -
-
- {peerReceipt ? null : ( - - )} - onSpeak(message)} - /> -
-
- {!peerReceipt && messageReactions ? ( -
- {[...messageReactions].map(([emoji, count]) => ( - - {emoji} - {count > 1 ? ` ${count}` : ""} - - ))} -
- ) : null} -
- ); - })} - {running && - !encounterMode && - !messages.some( - (message) => - message.id.startsWith("progress:") && - message.blocks.some( - (block) => - block.kind === "progress" && !isToolActivityBlock(block) && Boolean(block.text), - ), - ) ? ( - - ) : null} -
-
- {quoteDraft ? ( - { - onQuote(quoteDraft.message, quoteDraft.text); - window.getSelection()?.removeAllRanges(); - setQuoteDraft(null); - }} - /> - ) : null} - - {askOffscreen ? ( - - ) : null} -
- ); -}); - -/** - * Floating Quote action anchored to the selection's bounding rect. Measures - * itself after mount so it can flip below the selection when there is no room - * above and stay clamped inside the viewport; re-anchors on scroll/resize. - */ -const QuoteSelectionButton = memo(function QuoteSelectionButton({ - range, - onQuote, -}: { - range: Range; - onQuote: () => void; -}) { - const { t } = useLingui(); - const buttonRef = useRef(null); - const [placement, setPlacement] = useState<{ - top: number; - left: number; - above: boolean; - } | null>(null); - - useLayoutEffect(() => { - const update = () => { - if (range.collapsed || !document.contains(range.commonAncestorContainer)) { - setPlacement(null); - return; - } - const rect = range.getBoundingClientRect(); - const width = buttonRef.current?.offsetWidth ?? 0; - const height = buttonRef.current?.offsetHeight ?? 0; - const above = rect.top >= height + 8; - setPlacement({ - top: above ? rect.top - 8 : rect.bottom + 8, - left: Math.min( - Math.max(rect.left + rect.width / 2, width / 2 + 8), - window.innerWidth - width / 2 - 8, - ), - above, - }); - }; - update(); - window.addEventListener("resize", update); - // Scroll doesn't bubble — listen on the capture phase to catch any scroller. - window.addEventListener("scroll", update, { capture: true, passive: true }); - return () => { - window.removeEventListener("resize", update); - window.removeEventListener("scroll", update, true); - }; - }, [range]); - - return createPortal( - , - document.body, - ); -}); - -const Composer = memo(function Composer({ - running, - disabled, - pendingAttachments, - attachmentNotice, - sendError, - runError, - runErrorId, - onRunErrorPresented, - onDismissError, - sending, - fileInputRef, - onAttachmentPick, - onRemoveAttachment, - onSend, - onStop, - onVoice, - voiceReady = false, - voiceColor, - replyTarget, - replyQuote, - replyTargetName, - onClearReply, - mentionTargets, - agentSkills, - onSlashOpen, - onSlashAction, -}: { - running: boolean; - disabled?: boolean; - pendingAttachments: PendingAttachment[]; - attachmentNotice: string | null; - sendError: string | null; - runError: string | null; - runErrorId: string | null; - onRunErrorPresented: (runId: string) => void; - onDismissError: () => void; - sending: boolean; - fileInputRef: RefObject; - onAttachmentPick: (files: FileList | null) => void | Promise; - onRemoveAttachment: (attachment: PendingAttachment) => void; - onSend: (text: string, mentions?: ComposerMention[]) => Promise; - onStop: () => Promise; - onVoice?: () => void; - voiceReady?: boolean; - voiceColor?: string; - replyTarget?: ThreadMessage | null; - replyQuote?: string | null; - replyTargetName?: string; - onClearReply?: () => void; - mentionTargets?: ComposerMention[]; - agentSkills?: AgentSkillCatalogEntry[]; - onSlashOpen?: () => void; - onSlashAction?: (action: SlashActionId) => void; -}) { - const { t } = useLingui(); - const [draft, setDraft] = useState(""); - const [mentionQuery, setMentionQuery] = useState(null); - const [mentionHighlightIndex, setMentionHighlightIndex] = useState(0); - const [slashQuery, setSlashQuery] = useState(null); - const [selectedSkill, setSelectedSkill] = useState(null); - const [selectedMentions, setSelectedMentions] = useState([]); - const textareaRef = useRef(null); - const runErrorRef = useRef(null); - const submitFingerprint = useRef(null); - useEffect(() => { - if (!sendError && !runError) return; - const timer = setTimeout(() => { - onDismissError(); - }, 8000); - return () => clearTimeout(timer); - }, [sendError, runError, onDismissError]); - - const presentedRunErrorIdRef = useRef(null); - const mentionListboxId = useId(); - const dragDepth = useRef(0); - const [draggingFiles, setDraggingFiles] = useState(false); - const canSend = - draft.trim().length > 0 || - selectedSkill !== null || - selectedMentions.length > 0 || - pendingAttachments.length > 0; - - useEffect(() => { - if (!runError || !runErrorId) return; - const currentRunErrorId = runErrorId; - let frame = 0; - function recordIfPresented() { - cancelAnimationFrame(frame); - frame = requestAnimationFrame(() => { - const element = runErrorRef.current; - if (!element || document.visibilityState !== "visible") return; - const rect = element.getBoundingClientRect(); - const topElement = document.elementFromPoint( - rect.left + rect.width / 2, - rect.top + rect.height / 2, - ); - if (topElement && (topElement === element || element.contains(topElement))) { - if (presentedRunErrorIdRef.current === currentRunErrorId) return; - presentedRunErrorIdRef.current = currentRunErrorId; - onRunErrorPresented(currentRunErrorId); - } - }); - } - recordIfPresented(); - const observer = new MutationObserver(recordIfPresented); - observer.observe(document.body, { childList: true, subtree: true }); - document.addEventListener("transitionend", recordIfPresented); - document.addEventListener("visibilitychange", recordIfPresented); - return () => { - cancelAnimationFrame(frame); - observer.disconnect(); - document.removeEventListener("transitionend", recordIfPresented); - document.removeEventListener("visibilitychange", recordIfPresented); - }; - }, [onRunErrorPresented, runError, runErrorId]); - - useLayoutEffect(() => { - const el = textareaRef.current; - if (!el) return; - - function syncHeight() { - const textarea = textareaRef.current; - if (!textarea) return; - textarea.style.height = "0px"; - textarea.style.height = `${textarea.scrollHeight}px`; - } - - syncHeight(); - let lastWidth = el.getBoundingClientRect().width; - const observer = new ResizeObserver(() => { - const textarea = textareaRef.current; - if (!textarea) return; - const width = textarea.getBoundingClientRect().width; - if (width === lastWidth) return; - lastWidth = width; - syncHeight(); - }); - observer.observe(el); - return () => observer.disconnect(); - }, [draft]); - - function updateDraft(value: string) { - submitFingerprint.current = null; - setDraft(value); - const mentionMatch = /(?:^|\s)@([\w-]*)$/.exec(value); - setMentionQuery(mentionMatch ? (mentionMatch[1] ?? "") : null); - // `/` only at the start of the draft so forced skills expand (`Use skill:` / `/Name` prefix). - const slashMatch = selectedSkill === null ? /^\/([^\n]*)$/.exec(value) : null; - const nextSlash = slashMatch ? (slashMatch[1] ?? "") : null; - if (nextSlash !== null && slashQuery === null) onSlashOpen?.(); - setSlashQuery(nextSlash); - } - - function focusComposer() { - textareaRef.current?.focus(); - } - - function insertMention(mention: ComposerMention) { - setDraft((current) => current.replace(/@([\w-]*)$/, "")); - setMentionQuery(null); - setMentionHighlightIndex(0); - setSelectedMentions((current) => - current.some((selected) => mentionChipKey(selected) === mentionChipKey(mention)) - ? current - : [...current, mention], - ); - focusComposer(); - } - - function insertSkill(skill: AgentSkillCatalogEntry) { - setSelectedSkill(skill); - setDraft(""); - setSlashQuery(null); - } - - function runSlashAction(action: SlashActionId) { - setDraft(""); - setSlashQuery(null); - onSlashAction?.(action); - } - - function removeLastChip() { - if (selectedMentions.length > 0) { - setSelectedMentions((current) => current.slice(0, -1)); - return; - } - if (selectedSkill) setSelectedSkill(null); - } - - const mentionOptions = useMemo(() => { - if (mentionQuery === null || !mentionTargets?.length) return []; - const query = mentionQuery.trim().toLowerCase(); - return mentionTargets - .filter((target) => !query || target.name.toLowerCase().startsWith(query)) - .slice(0, 10); - }, [mentionQuery, mentionTargets]); - - useEffect(() => { - setMentionHighlightIndex(0); - }, [mentionQuery]); - - const activeMentionIndex = clampMentionHighlightIndex( - mentionHighlightIndex, - mentionOptions.length, - ); - const mentionPickerOpen = mentionOptions.length > 0; - const activeMentionOptionId = mentionPickerOpen - ? `${mentionListboxId}-option-${activeMentionIndex}` - : undefined; - - const slashSkillOptions = useMemo(() => { - if (slashQuery === null) return []; - const query = slashQuery.trim().toLowerCase(); - const skills = agentSkills ?? []; - return skills - .filter((skill) => { - if (!query) return true; - return ( - skill.name.toLowerCase().includes(query) || - skill.description.toLowerCase().includes(query) - ); - }) - .slice(0, 8); - }, [agentSkills, slashQuery]); - - const slashActionOptions = useMemo(() => { - if (slashQuery === null) return []; - const query = slashQuery.trim().toLowerCase(); - return SLASH_ACTIONS.filter((action) => !query || action.label.toLowerCase().includes(query)); - }, [slashQuery]); - - const showSlashPicker = - slashQuery !== null && - mentionQuery === null && - (slashSkillOptions.length > 0 || slashActionOptions.length > 0); - - function send() { - if (!canSend || disabled) return; - const text = serializeComposerPrompt(draft, selectedSkill, selectedMentions); - const fingerprint = [text, ...selectedMentions.map((mention) => mentionChipKey(mention))].join( - "\n", - ); - if (submitFingerprint.current === fingerprint) return; - submitFingerprint.current = fingerprint; - setDraft(""); - setMentionQuery(null); - setMentionHighlightIndex(0); - setSlashQuery(null); - setSelectedSkill(null); - const mentions = selectedMentions; - setSelectedMentions([]); - void onSend(text, mentions); - } - - function handleDragEnter(event: DragEvent) { - const dataTransfer = event.dataTransfer; - if (!isFileDrag(dataTransfer)) return; - event.preventDefault(); - if (disabled) { - dragDepth.current = 0; - setDraggingFiles(false); - return; - } - dragDepth.current += 1; - setDraggingFiles(true); - } - - function handleDragOver(event: DragEvent) { - const dataTransfer = event.dataTransfer; - if (!isFileDrag(dataTransfer)) return; - event.preventDefault(); - dataTransfer.dropEffect = disabled ? "none" : "copy"; - if (disabled) { - dragDepth.current = 0; - setDraggingFiles(false); - return; - } - setDraggingFiles(true); - } - - function handleDragLeave(event: DragEvent) { - if (!isFileDrag(event.dataTransfer)) return; - if (disabled) { - dragDepth.current = 0; - setDraggingFiles(false); - return; - } - dragDepth.current = Math.max(0, dragDepth.current - 1); - if (dragDepth.current === 0) setDraggingFiles(false); - } - - function handleDrop(event: DragEvent) { - const dataTransfer = event.dataTransfer; - if (!isFileDrag(dataTransfer)) return; - event.preventDefault(); - dragDepth.current = 0; - setDraggingFiles(false); - if (!disabled) void onAttachmentPick(dataTransfer.files); - } - - function handlePaste(event: ClipboardEvent) { - const clipboardData = event.clipboardData; - // Only intercept real FileList pastes; leave text-only / empty-files native. - if (disabled || !clipboardData || !isFilePaste(clipboardData)) return; - event.preventDefault(); - void onAttachmentPick(clipboardData.files); - const text = clipboardData.getData("text/plain"); - if (!text) return; - const textarea = event.currentTarget; - const start = textarea.selectionStart; - const end = textarea.selectionEnd; - updateDraft(`${draft.slice(0, start)}${text}${draft.slice(end)}`); - const caret = start + text.length; - window.requestAnimationFrame(() => { - textareaRef.current?.setSelectionRange(caret, caret); - }); - } - - const showComposerPlaceholder = - draft.length === 0 && selectedSkill === null && selectedMentions.length === 0; - const replyName = replyTarget ? (replyTargetName ?? previewMessageText(replyTarget)) : ""; - - return ( -
-
- {sendError || runError ? ( -
- {sendError ?? runError} - -
- ) : null} - {replyTarget ? ( -
- - {replyQuote - ? t`Replying to ${replyName}: “${replyQuote}”` - : t`Replying to ${replyName}`} - - -
- ) : null} - {attachmentNotice ? ( -
- {attachmentNotice} -
- ) : null} - {pendingAttachments.length ? ( -
- {pendingAttachments.map((attachment) => ( -
- {attachment.previewUrl ? ( - {attachment.file.name} - ) : ( - - )} - - {attachment.file.name} - - -
- ))} -
- ) : null} - {mentionPickerOpen ? ( -
- {mentionOptions.map((mention, index) => { - const optionId = `${mentionListboxId}-option-${index}`; - const highlighted = index === activeMentionIndex; - return ( - - ); - })} -
- ) : null} - {showSlashPicker ? ( -
- {slashSkillOptions.map((skill) => ( - - ))} - {slashActionOptions.map((action) => { - const label = slashActionLabel(action.id); - return ( - - ); - })} -
- ) : null} -
- void onAttachmentPick(event.target.files)} - /> - -
- {selectedSkill ? ( - - - - {selectedSkill.name} - - - - ) : null} - {selectedMentions.map((mention) => ( - - - - {mention.name} - - - - ))} -