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 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MRtGG9ARfqqhma3t85Ro2u
This commit is contained in:
parent
3f22ef691f
commit
a0060b8df7
@ -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"
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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 "कल"
|
||||
|
||||
|
||||
@ -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 "어제"
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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 "Вчера"
|
||||
|
||||
|
||||
@ -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"
|
||||
|
||||
|
||||
@ -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 "昨天"
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
20
apps/web/src/pages/shell/collapsed-sidebar-sections.ts
Normal file
20
apps/web/src/pages/shell/collapsed-sidebar-sections.ts
Normal file
@ -0,0 +1,20 @@
|
||||
export function collapsedSidebarSectionsStorageKey(
|
||||
userId: string | null | undefined,
|
||||
): string | null {
|
||||
if (!userId) return null;
|
||||
return `rakazo:collapsed-sidebar-sections:${userId}`;
|
||||
}
|
||||
|
||||
export function readCollapsedSidebarSections(userId: string | null | undefined): Set<string> {
|
||||
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();
|
||||
}
|
||||
}
|
||||
805
apps/web/src/pages/shell/composer.tsx
Normal file
805
apps/web/src/pages/shell/composer.tsx
Normal file
@ -0,0 +1,805 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { Trans, useLingui } from "@lingui/react/macro";
|
||||
import type { AgentSkillCatalogEntry, ThreadMessage } from "@rakazo/contracts";
|
||||
import { ATTACHMENT_ALLOWED_MIME_TYPES } from "@rakazo/contracts";
|
||||
import type { ComposerMention, SlashActionId } from "@rakazo/core";
|
||||
import {
|
||||
clampMentionHighlightIndex,
|
||||
mentionChipKey,
|
||||
resolveMentionPickerKey,
|
||||
SLASH_ACTIONS,
|
||||
serializeComposerPrompt,
|
||||
truncateSlashDescription,
|
||||
} from "@rakazo/core";
|
||||
import { BotAvatar, Button } from "@rakazo/ui-web";
|
||||
import {
|
||||
ArrowUp,
|
||||
Box,
|
||||
Clock,
|
||||
Mic,
|
||||
Paperclip,
|
||||
Plus,
|
||||
Puzzle,
|
||||
Settings,
|
||||
Square,
|
||||
X,
|
||||
} from "lucide-react";
|
||||
import type { ClipboardEvent, DragEvent, RefObject } from "react";
|
||||
import { memo, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
|
||||
import { VoiceAuroraRim } from "../../components/voice/VoiceAurora";
|
||||
import { isFileDrag, isFilePaste } from "../../lib/pending-attachments";
|
||||
import { previewMessageText } from "./message-preview";
|
||||
import type { PendingAttachment } from "./shell-types";
|
||||
import { FALLBACK_BOT_COLOR } from "./shell-types";
|
||||
|
||||
const ATTACHMENT_ACCEPT = ATTACHMENT_ALLOWED_MIME_TYPES.join(",");
|
||||
|
||||
export 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<HTMLInputElement | null>;
|
||||
onAttachmentPick: (files: FileList | null) => void | Promise<void>;
|
||||
onRemoveAttachment: (attachment: PendingAttachment) => void;
|
||||
onSend: (text: string, mentions?: ComposerMention[]) => Promise<void>;
|
||||
onStop: () => Promise<void>;
|
||||
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<string | null>(null);
|
||||
const [mentionHighlightIndex, setMentionHighlightIndex] = useState(0);
|
||||
const [slashQuery, setSlashQuery] = useState<string | null>(null);
|
||||
const [selectedSkill, setSelectedSkill] = useState<AgentSkillCatalogEntry | null>(null);
|
||||
const [selectedMentions, setSelectedMentions] = useState<ComposerMention[]>([]);
|
||||
const textareaRef = useRef<HTMLTextAreaElement>(null);
|
||||
const runErrorRef = useRef<HTMLDivElement>(null);
|
||||
const submitFingerprint = useRef<string | null>(null);
|
||||
useEffect(() => {
|
||||
if (!sendError && !runError) return;
|
||||
const timer = setTimeout(() => {
|
||||
onDismissError();
|
||||
}, 8000);
|
||||
return () => clearTimeout(timer);
|
||||
}, [sendError, runError, onDismissError]);
|
||||
|
||||
const presentedRunErrorIdRef = useRef<string | null>(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<HTMLFieldSetElement>) {
|
||||
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<HTMLFieldSetElement>) {
|
||||
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<HTMLFieldSetElement>) {
|
||||
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<HTMLFieldSetElement>) {
|
||||
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<HTMLTextAreaElement>) {
|
||||
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 (
|
||||
<fieldset
|
||||
aria-label={t`Message composer`}
|
||||
data-dragging={draggingFiles ? "files" : undefined}
|
||||
onDragEnter={handleDragEnter}
|
||||
onDragOver={handleDragOver}
|
||||
onDragLeave={handleDragLeave}
|
||||
onDrop={handleDrop}
|
||||
className={`relative z-30 m-0 min-w-0 border-0 px-3 pb-4 pt-3 md:px-6 md:pb-6 ${
|
||||
draggingFiles ? "rounded-[14px] ring-2 ring-inset ring-ring" : ""
|
||||
}`}
|
||||
>
|
||||
<div className="mx-auto w-full max-w-4xl">
|
||||
{sendError || runError ? (
|
||||
<div
|
||||
ref={runErrorRef}
|
||||
role="alert"
|
||||
data-testid="composer-error"
|
||||
className="mb-3 flex items-center gap-2 rounded-[14px] border border-destructive/40 bg-destructive/10 px-4 py-2 text-ui-body-sm text-destructive"
|
||||
>
|
||||
<span className="min-w-0 flex-1">{sendError ?? runError}</span>
|
||||
<button
|
||||
type="button"
|
||||
aria-label={t`Dismiss error`}
|
||||
data-testid="composer-error-dismiss"
|
||||
onClick={() => {
|
||||
onDismissError();
|
||||
window.requestAnimationFrame(() => textareaRef.current?.focus());
|
||||
}}
|
||||
className="shrink-0 text-destructive hover:text-foreground"
|
||||
>
|
||||
<X strokeWidth={2} className="size-icon-sm" />
|
||||
</button>
|
||||
</div>
|
||||
) : null}
|
||||
{replyTarget ? (
|
||||
<div
|
||||
data-testid="reply-chip"
|
||||
className="mb-2 flex items-center gap-2 rounded-full border border-border bg-muted px-3 py-1.5 text-ui-body-sm text-foreground/75"
|
||||
>
|
||||
<span className="min-w-0 flex-1 truncate text-muted-foreground">
|
||||
{replyQuote
|
||||
? t`Replying to ${replyName}: “${replyQuote}”`
|
||||
: t`Replying to ${replyName}`}
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
aria-label={t`Cancel reply`}
|
||||
onClick={onClearReply}
|
||||
className="shrink-0 text-muted-foreground hover:text-foreground"
|
||||
>
|
||||
<X strokeWidth={2} className="size-icon-sm" />
|
||||
</button>
|
||||
</div>
|
||||
) : null}
|
||||
{attachmentNotice ? (
|
||||
<div className="mb-3 rounded-[14px] border border-warning/40 bg-warning/10 px-4 py-2 text-ui-body-sm text-warning">
|
||||
{attachmentNotice}
|
||||
</div>
|
||||
) : null}
|
||||
{pendingAttachments.length ? (
|
||||
<div className="mb-3 flex flex-wrap gap-2">
|
||||
{pendingAttachments.map((attachment) => (
|
||||
<div
|
||||
key={attachment.id}
|
||||
className="flex items-center gap-2 rounded-full border border-border bg-muted px-3 py-1.5 text-ui-body-sm text-foreground/75"
|
||||
>
|
||||
{attachment.previewUrl ? (
|
||||
<img
|
||||
src={attachment.previewUrl}
|
||||
alt={attachment.file.name}
|
||||
className="size-control-md rounded object-cover"
|
||||
/>
|
||||
) : (
|
||||
<Paperclip strokeWidth={1.8} className="size-icon-md" />
|
||||
)}
|
||||
<span className="max-w-[180px] truncate" dir="auto">
|
||||
{attachment.file.name}
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
aria-label={t`Remove ${attachment.file.name}`}
|
||||
onClick={() => onRemoveAttachment(attachment)}
|
||||
className="text-muted-foreground hover:text-foreground"
|
||||
>
|
||||
<X strokeWidth={2} className="size-icon-sm" />
|
||||
</button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
) : null}
|
||||
{mentionPickerOpen ? (
|
||||
<div
|
||||
id={mentionListboxId}
|
||||
role="listbox"
|
||||
aria-label={t`Mentions`}
|
||||
data-testid="mention-picker"
|
||||
className="mb-2 max-h-64 overflow-y-auto rounded-[14px] border border-border bg-muted"
|
||||
>
|
||||
{mentionOptions.map((mention, index) => {
|
||||
const optionId = `${mentionListboxId}-option-${index}`;
|
||||
const highlighted = index === activeMentionIndex;
|
||||
return (
|
||||
<button
|
||||
id={optionId}
|
||||
key={mentionChipKey(mention)}
|
||||
type="button"
|
||||
role="option"
|
||||
aria-selected={highlighted}
|
||||
aria-label={`@${mention.name}`}
|
||||
data-mention-name={mention.name}
|
||||
onMouseDown={(event) => event.preventDefault()}
|
||||
onClick={() => insertMention(mention)}
|
||||
onMouseEnter={() => setMentionHighlightIndex(index)}
|
||||
className={`flex w-full items-start gap-3 px-4 py-2.5 text-start hover:bg-accent ${
|
||||
highlighted ? "bg-accent" : ""
|
||||
}`}
|
||||
>
|
||||
<span aria-hidden="true">
|
||||
<MentionOptionIcon mention={mention} />
|
||||
</span>
|
||||
<span className="min-w-0">
|
||||
<span dir="auto" className="block text-ui-body text-foreground">
|
||||
@{mention.name}
|
||||
</span>
|
||||
{mention.subtitle ? (
|
||||
<span
|
||||
dir="auto"
|
||||
aria-hidden="true"
|
||||
className="block truncate text-ui-body-sm text-muted-foreground"
|
||||
>
|
||||
{mention.subtitle}
|
||||
</span>
|
||||
) : null}
|
||||
</span>
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
) : null}
|
||||
{showSlashPicker ? (
|
||||
<div
|
||||
data-testid="slash-picker"
|
||||
className="mb-2 overflow-hidden rounded-[14px] border border-border bg-muted"
|
||||
>
|
||||
{slashSkillOptions.map((skill) => (
|
||||
<button
|
||||
key={skill.id}
|
||||
type="button"
|
||||
aria-label={t`Skill ${skill.name}`}
|
||||
onClick={() => insertSkill(skill)}
|
||||
className="flex w-full items-start gap-3 px-4 py-2.5 text-start hover:bg-accent"
|
||||
>
|
||||
<Box
|
||||
strokeWidth={1.7}
|
||||
className="mt-0.5 shrink-0 text-muted-foreground size-icon-md"
|
||||
/>
|
||||
<span className="min-w-0">
|
||||
<span dir="auto" className="block text-ui-body text-foreground">
|
||||
{skill.name}
|
||||
</span>
|
||||
<span dir="auto" className="block truncate text-ui-body-sm text-muted-foreground">
|
||||
{truncateSlashDescription(skill.description)}
|
||||
</span>
|
||||
</span>
|
||||
</button>
|
||||
))}
|
||||
{slashActionOptions.map((action) => {
|
||||
const label = slashActionLabel(action.id);
|
||||
return (
|
||||
<button
|
||||
key={action.id}
|
||||
type="button"
|
||||
aria-label={label}
|
||||
onClick={() => runSlashAction(action.id)}
|
||||
className="flex w-full items-center gap-3 px-4 py-2.5 text-start hover:bg-accent"
|
||||
>
|
||||
<Settings
|
||||
strokeWidth={1.7}
|
||||
className="shrink-0 text-muted-foreground size-icon-md"
|
||||
/>
|
||||
<span className="text-ui-body text-foreground">{label}</span>
|
||||
</button>
|
||||
);
|
||||
})}
|
||||
</div>
|
||||
) : null}
|
||||
<div
|
||||
data-testid="composer-bar"
|
||||
className="apple-island relative flex items-center gap-3.5 rounded-[30px] py-3 pe-3.5 ps-4 transition-all duration-200"
|
||||
>
|
||||
<input
|
||||
ref={fileInputRef}
|
||||
type="file"
|
||||
multiple
|
||||
accept={ATTACHMENT_ACCEPT}
|
||||
className="hidden"
|
||||
onChange={(event) => void onAttachmentPick(event.target.files)}
|
||||
/>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="icon"
|
||||
aria-label={t`Attach file`}
|
||||
disabled={disabled}
|
||||
onClick={() => fileInputRef.current?.click()}
|
||||
className="tactile-press size-10 shrink-0 rounded-full border border-border bg-foreground/5 text-foreground/80 transition-all hover:bg-foreground/10 hover:text-foreground flex items-center justify-center cursor-pointer"
|
||||
>
|
||||
<Plus strokeWidth={2.2} className="size-icon-lg" />
|
||||
</Button>
|
||||
<div className="flex min-w-0 flex-1 flex-wrap items-end gap-1.5">
|
||||
{selectedSkill ? (
|
||||
<span
|
||||
data-testid="skill-chip"
|
||||
className="inline-flex max-w-full items-center gap-1.5 rounded-full border border-border bg-foreground/[0.08] px-3 py-1 text-ui-body font-medium text-foreground backdrop-blur-md"
|
||||
>
|
||||
<Box strokeWidth={1.8} className="shrink-0 text-muted-foreground size-icon-md" />
|
||||
<span dir="auto" className="truncate">
|
||||
{selectedSkill.name}
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
aria-label={t`Remove skill ${selectedSkill.name}`}
|
||||
onClick={() => setSelectedSkill(null)}
|
||||
className="text-muted-foreground hover:text-foreground transition-colors"
|
||||
>
|
||||
<X strokeWidth={2} className="size-icon-sm" />
|
||||
</button>
|
||||
</span>
|
||||
) : null}
|
||||
{selectedMentions.map((mention) => (
|
||||
<span
|
||||
key={mentionChipKey(mention)}
|
||||
data-testid="mention-chip"
|
||||
data-mention-kind={mention.kind}
|
||||
className="inline-flex max-w-full items-center gap-1.5 rounded-full border border-border bg-foreground/[0.08] px-3 py-1 text-ui-body font-medium text-foreground backdrop-blur-md"
|
||||
>
|
||||
<MentionChipIcon mention={mention} />
|
||||
<span dir="auto" className="truncate">
|
||||
{mention.name}
|
||||
</span>
|
||||
<button
|
||||
type="button"
|
||||
aria-label={t`Remove mention ${mention.name}`}
|
||||
onClick={() =>
|
||||
setSelectedMentions((current) =>
|
||||
current.filter(
|
||||
(selected) => mentionChipKey(selected) !== mentionChipKey(mention),
|
||||
),
|
||||
)
|
||||
}
|
||||
className="text-muted-foreground hover:text-foreground transition-colors"
|
||||
>
|
||||
<X strokeWidth={2} className="size-icon-sm" />
|
||||
</button>
|
||||
</span>
|
||||
))}
|
||||
<textarea
|
||||
ref={textareaRef}
|
||||
value={draft}
|
||||
onChange={(event) => updateDraft(event.target.value)}
|
||||
onPaste={handlePaste}
|
||||
onKeyDown={(event) => {
|
||||
if (
|
||||
event.key === "Backspace" &&
|
||||
draft.length === 0 &&
|
||||
(selectedSkill !== null || selectedMentions.length > 0)
|
||||
) {
|
||||
event.preventDefault();
|
||||
removeLastChip();
|
||||
return;
|
||||
}
|
||||
const action = resolveMentionPickerKey({
|
||||
key: event.key,
|
||||
shiftKey: event.shiftKey,
|
||||
isComposing: event.nativeEvent.isComposing || event.keyCode === 229,
|
||||
optionCount: mentionOptions.length,
|
||||
highlightedIndex: activeMentionIndex,
|
||||
});
|
||||
if (action.type === "complete") {
|
||||
const mention = mentionOptions[action.index];
|
||||
if (!mention) return;
|
||||
event.preventDefault();
|
||||
insertMention(mention);
|
||||
return;
|
||||
}
|
||||
if (action.type === "move") {
|
||||
event.preventDefault();
|
||||
setMentionHighlightIndex(action.index);
|
||||
return;
|
||||
}
|
||||
if (action.type === "dismiss") {
|
||||
event.preventDefault();
|
||||
setMentionQuery(null);
|
||||
setMentionHighlightIndex(0);
|
||||
return;
|
||||
}
|
||||
if (action.type === "send") {
|
||||
event.preventDefault();
|
||||
send();
|
||||
}
|
||||
}}
|
||||
disabled={disabled}
|
||||
placeholder={showComposerPlaceholder ? t`Message…` : undefined}
|
||||
aria-label={t`Message`}
|
||||
role="combobox"
|
||||
aria-autocomplete="list"
|
||||
aria-haspopup="listbox"
|
||||
aria-expanded={mentionPickerOpen ? "true" : "false"}
|
||||
aria-controls={mentionPickerOpen ? mentionListboxId : undefined}
|
||||
aria-activedescendant={activeMentionOptionId}
|
||||
name="chat-message"
|
||||
autoComplete="off"
|
||||
dir="auto"
|
||||
rows={1}
|
||||
className="max-h-36 min-h-[28px] min-w-[8rem] flex-1 resize-none overflow-y-auto bg-transparent py-1 text-[16.5px] leading-[1.55] text-foreground outline-none placeholder:text-muted-foreground/75 disabled:opacity-40 font-normal"
|
||||
/>
|
||||
</div>
|
||||
{onVoice ? (
|
||||
<Button
|
||||
variant="outline"
|
||||
aria-label={t`Voice`}
|
||||
title={voiceReady ? t`Start voice conversation` : t`Set up voice`}
|
||||
disabled={disabled}
|
||||
onClick={onVoice}
|
||||
data-testid="composer-voice-primary"
|
||||
className={`tactile-press h-control-lg shrink-0 gap-2 rounded-full px-4 sm:px-5 flex items-center justify-center cursor-pointer transition-all ${
|
||||
voiceReady
|
||||
? "relative overflow-hidden border-border bg-foreground/5 text-foreground hover:bg-foreground/10"
|
||||
: "border-border bg-foreground/5 text-foreground/80 hover:bg-foreground/10"
|
||||
}`}
|
||||
>
|
||||
{voiceReady ? (
|
||||
<VoiceAuroraRim botColor={voiceColor} className="inset-x-[14%] h-0.5 blur-[3px]" />
|
||||
) : null}
|
||||
<Mic strokeWidth={1.9} className="size-icon-lg shrink-0" />
|
||||
<span className="hidden text-ui-body font-semibold sm:inline">
|
||||
<Trans>Voice</Trans>
|
||||
</span>
|
||||
</Button>
|
||||
) : null}
|
||||
{running ? (
|
||||
<div className="flex items-center gap-2 shrink-0">
|
||||
<Button
|
||||
size="icon"
|
||||
aria-label={t`Send`}
|
||||
disabled={!canSend || disabled}
|
||||
onClick={send}
|
||||
className="tactile-press size-10 rounded-full transition-transform active:scale-90 flex items-center justify-center cursor-pointer"
|
||||
>
|
||||
<ArrowUp strokeWidth={2.6} className="size-icon-lg" />
|
||||
</Button>
|
||||
<Button
|
||||
variant="outline"
|
||||
size="icon"
|
||||
aria-label={t`Stop`}
|
||||
disabled={sending}
|
||||
onClick={() => void onStop()}
|
||||
className="tactile-press size-10 rounded-full border border-border bg-foreground/[0.08] text-foreground/90 shadow-sm transition-colors hover:bg-foreground/15 hover:text-foreground flex items-center justify-center cursor-pointer"
|
||||
>
|
||||
<Square strokeWidth={0} fill="currentColor" className="size-icon-sm" />
|
||||
</Button>
|
||||
</div>
|
||||
) : (
|
||||
<Button
|
||||
size="icon"
|
||||
aria-label={t`Send`}
|
||||
disabled={!canSend || disabled}
|
||||
onClick={send}
|
||||
className="tactile-press size-10 shrink-0 rounded-full transition-all active:scale-90 disabled:bg-foreground/[0.08] disabled:text-foreground/20 flex items-center justify-center cursor-pointer"
|
||||
>
|
||||
<ArrowUp strokeWidth={2.6} className="size-icon-lg" />
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
);
|
||||
});
|
||||
|
||||
function slashActionLabel(id: SlashActionId) {
|
||||
switch (id) {
|
||||
case "chat-settings":
|
||||
return t`Chat Settings`;
|
||||
case "settings-general":
|
||||
return t`Settings: General`;
|
||||
case "settings-usage":
|
||||
return t`Settings: Usage`;
|
||||
}
|
||||
}
|
||||
|
||||
function MentionOptionIcon({ mention }: { mention: ComposerMention }) {
|
||||
if (mention.kind === "routine") {
|
||||
return (
|
||||
<Clock strokeWidth={1.7} className="mt-0.5 shrink-0 text-muted-foreground size-icon-md" />
|
||||
);
|
||||
}
|
||||
if (mention.kind === "connector") {
|
||||
return (
|
||||
<Puzzle strokeWidth={1.7} className="mt-0.5 shrink-0 text-muted-foreground size-icon-md" />
|
||||
);
|
||||
}
|
||||
if (mention.kind === "group") {
|
||||
return (
|
||||
<span className="mt-0.5 grid h-4 w-4 shrink-0 place-items-center rounded-full bg-accent text-ui-caption text-foreground/75">
|
||||
G
|
||||
</span>
|
||||
);
|
||||
}
|
||||
if (mention.kind === "everyone") {
|
||||
return (
|
||||
<span className="mt-0.5 grid h-4 w-4 shrink-0 place-items-center rounded-full bg-accent text-ui-caption text-foreground/75">
|
||||
@
|
||||
</span>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<BotAvatar
|
||||
color={mention.color ?? FALLBACK_BOT_COLOR}
|
||||
identity={mention.id}
|
||||
className="size-icon-md"
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
function MentionChipIcon({ mention }: { mention: ComposerMention }) {
|
||||
if (mention.kind === "routine") {
|
||||
return <Clock strokeWidth={1.7} className="shrink-0 text-muted-foreground/70 size-icon-sm" />;
|
||||
}
|
||||
if (mention.kind === "connector") {
|
||||
return <Puzzle strokeWidth={1.7} className="shrink-0 text-muted-foreground/70 size-icon-sm" />;
|
||||
}
|
||||
if (mention.kind === "group" || mention.kind === "everyone") {
|
||||
return (
|
||||
<span className="grid h-4 w-4 shrink-0 place-items-center rounded-full bg-accent text-ui-caption text-foreground/75">
|
||||
{mention.kind === "group" ? "G" : "@"}
|
||||
</span>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<BotAvatar
|
||||
color={mention.color ?? FALLBACK_BOT_COLOR}
|
||||
identity={mention.id}
|
||||
className="size-icon-md"
|
||||
/>
|
||||
);
|
||||
}
|
||||
83
apps/web/src/pages/shell/computer-screen.tsx
Normal file
83
apps/web/src/pages/shell/computer-screen.tsx
Normal file
@ -0,0 +1,83 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import { Trans } from "@lingui/react/macro";
|
||||
import type { ComputerReleaseReason, ComputerStatus } from "@rakazo/contracts";
|
||||
import { Button } from "@rakazo/ui-web";
|
||||
|
||||
export function ComputerReleaseActions({
|
||||
takeoverRequested,
|
||||
onRelease,
|
||||
}: {
|
||||
takeoverRequested: boolean;
|
||||
onRelease: (reason?: ComputerReleaseReason) => Promise<void>;
|
||||
}) {
|
||||
if (!takeoverRequested) {
|
||||
return (
|
||||
<Button type="button" variant="outline" size="sm" onClick={() => void onRelease()}>
|
||||
<Trans>Release</Trans>
|
||||
</Button>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<div className="flex items-center gap-2">
|
||||
<Button type="button" variant="outline" size="sm" onClick={() => void onRelease("skipped")}>
|
||||
<Trans>Skip</Trans>
|
||||
</Button>
|
||||
<Button type="button" size="sm" onClick={() => void onRelease("done")}>
|
||||
<Trans>I’m done</Trans>
|
||||
</Button>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export function embeddableScreenUrl(url: string | null): string | null {
|
||||
if (!url) return null;
|
||||
try {
|
||||
const parsed = new URL(url, window.location.href);
|
||||
const page = new URL(window.location.href);
|
||||
const local = parsed.hostname === "127.0.0.1" || parsed.hostname === "localhost";
|
||||
const pagePort = page.port || (page.protocol === "https:" ? "443" : "80");
|
||||
if (local && parsed.port && parsed.port !== pagePort) {
|
||||
return null;
|
||||
}
|
||||
return parsed.toString();
|
||||
} catch {
|
||||
return url;
|
||||
}
|
||||
}
|
||||
|
||||
export function screenIframeSandbox(url: string | null) {
|
||||
if (!url) return undefined;
|
||||
try {
|
||||
return new URL(url, window.location.href).pathname.startsWith("/novnc/")
|
||||
? "allow-scripts allow-pointer-lock"
|
||||
: undefined;
|
||||
} catch {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
export function DesktopKindEmptyState({ className }: { className?: string }) {
|
||||
return (
|
||||
<div className={className}>
|
||||
<Trans>
|
||||
This bot runs on this computer, not a Linux desktop. Shell and files use your home folder.
|
||||
</Trans>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export function computerPlaceholder(
|
||||
state: ComputerStatus["state"] | undefined,
|
||||
booting: boolean,
|
||||
label: string,
|
||||
) {
|
||||
if (state === "booting" || booting) return t`Booting live desktop…`;
|
||||
if (state === "running") return label;
|
||||
if (state === "suspended") return t`Computer is asleep. Open it to wake.`;
|
||||
if (state === "error") return t`Computer failed to boot`;
|
||||
return t`Computer is stopped`;
|
||||
}
|
||||
|
||||
export function computerLabel(mode: ComputerStatus["mode"] | undefined, botName: string) {
|
||||
return mode === "dedicated" ? t`${botName}’s computer` : t`Team Computer`;
|
||||
}
|
||||
17
apps/web/src/pages/shell/message-preview.ts
Normal file
17
apps/web/src/pages/shell/message-preview.ts
Normal file
@ -0,0 +1,17 @@
|
||||
import { t } from "@lingui/core/macro";
|
||||
import type { ThreadMessage } from "@rakazo/contracts";
|
||||
|
||||
const ATTACHMENT_BLOCK_KINDS = new Set(["image", "file", "video", "audio", "media"]);
|
||||
|
||||
export function previewMessageText(message: ThreadMessage): string {
|
||||
const text = message.blocks
|
||||
.map((block) => (block.kind === "text" || block.kind === "channel_message" ? block.text : ""))
|
||||
.filter(Boolean)
|
||||
.join(" ")
|
||||
.trim();
|
||||
if (text) return text;
|
||||
if (message.blocks.some((block) => ATTACHMENT_BLOCK_KINDS.has(block.kind))) {
|
||||
return t`Attachment`;
|
||||
}
|
||||
return t`Message`;
|
||||
}
|
||||
57
apps/web/src/pages/shell/roster-format.ts
Normal file
57
apps/web/src/pages/shell/roster-format.ts
Normal file
@ -0,0 +1,57 @@
|
||||
import { i18n } from "@lingui/core";
|
||||
import { t } from "@lingui/core/macro";
|
||||
|
||||
export 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;
|
||||
}
|
||||
|
||||
export function formatRosterTime(isoDate?: string | null): string {
|
||||
if (!isoDate) return "";
|
||||
try {
|
||||
const d = new Date(isoDate);
|
||||
if (Number.isNaN(d.getTime())) return "";
|
||||
const locale = i18n.locale || "en";
|
||||
const now = new Date();
|
||||
const isToday =
|
||||
d.getDate() === now.getDate() &&
|
||||
d.getMonth() === now.getMonth() &&
|
||||
d.getFullYear() === now.getFullYear();
|
||||
if (isToday) {
|
||||
return d.toLocaleTimeString(locale, { hour: "numeric", minute: "2-digit" });
|
||||
}
|
||||
const yesterday = new Date(now);
|
||||
yesterday.setDate(now.getDate() - 1);
|
||||
const isYesterday =
|
||||
d.getDate() === yesterday.getDate() &&
|
||||
d.getMonth() === yesterday.getMonth() &&
|
||||
d.getFullYear() === yesterday.getFullYear();
|
||||
if (isYesterday) return t`Yesterday`;
|
||||
const diffDays = Math.floor((now.getTime() - d.getTime()) / (1000 * 60 * 60 * 24));
|
||||
if (diffDays < 7) {
|
||||
return d.toLocaleDateString(locale, { weekday: "short" });
|
||||
}
|
||||
return d.toLocaleDateString(locale, { month: "short", day: "numeric" });
|
||||
} catch {
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
export function cleanRosterPreview(raw?: string | null): string {
|
||||
if (!raw) return "";
|
||||
let text = raw;
|
||||
// Strip markdown headings
|
||||
text = text.replace(/^#{1,6}\s+/gm, "");
|
||||
// Strip routing tokens [to ...] and system protocols [RECOVERY PROTOCOL], [PO ...]
|
||||
text = text.replace(/\[(?:to|RECOVERY PROTOCOL|PO)[^\]]*\]/gi, "");
|
||||
// Strip bold/italic/code markers
|
||||
text = text.replace(/[*_`#]/g, "");
|
||||
// Strip escape backslashes
|
||||
text = text.replace(/\\/g, "");
|
||||
// Collapse whitespace
|
||||
text = text.replace(/\s+/g, " ").trim();
|
||||
return text;
|
||||
}
|
||||
9
apps/web/src/pages/shell/shell-types.ts
Normal file
9
apps/web/src/pages/shell/shell-types.ts
Normal file
@ -0,0 +1,9 @@
|
||||
export type PendingAttachment = {
|
||||
id: string;
|
||||
threadKey: string;
|
||||
file: File;
|
||||
previewUrl?: string;
|
||||
};
|
||||
|
||||
/** Identity colour for bots the roster no longer knows about. */
|
||||
export const FALLBACK_BOT_COLOR = "#85858A";
|
||||
52
apps/web/src/pages/shell/thread-state.ts
Normal file
52
apps/web/src/pages/shell/thread-state.ts
Normal file
@ -0,0 +1,52 @@
|
||||
import type { Bot, ComputerStatus, Group, ProductEvent, ThreadSnapshot } from "@rakazo/contracts";
|
||||
import type { MutableRefObject } from "react";
|
||||
import {
|
||||
isComputerStatusEvent,
|
||||
isThreadSnapshotEvent,
|
||||
reduceComputerStatus,
|
||||
reduceThreadSnapshot,
|
||||
} from "../../lib/thread-events";
|
||||
|
||||
const THREAD_SNAPSHOT_TIMEOUT_MS = 2_000;
|
||||
|
||||
export function threadSnapshotSignal(parent: AbortSignal): AbortSignal {
|
||||
return AbortSignal.any([parent, AbortSignal.timeout(THREAD_SNAPSHOT_TIMEOUT_MS)]);
|
||||
}
|
||||
|
||||
export function firstThreadRoute(
|
||||
bots: readonly Pick<Bot, "id">[],
|
||||
groups: readonly Pick<Group, "id" | "kind">[],
|
||||
/** In a project the user lands in its main conversation. */
|
||||
inProject = false,
|
||||
): string {
|
||||
const main = inProject ? groups.find((group) => group.kind === "main") : undefined;
|
||||
if (main) return `/app/g/${main.id}`;
|
||||
if (bots[0]) return `/app/${bots[0].id}`;
|
||||
if (groups[0]) return `/app/g/${groups[0].id}`;
|
||||
return "/app";
|
||||
}
|
||||
|
||||
export function applyThreadEvent(
|
||||
event: ProductEvent,
|
||||
commitSnapshot: (next: ThreadSnapshot | null) => void,
|
||||
commitComputer: (next: ComputerStatus | null) => void,
|
||||
snapshotRef: MutableRefObject<ThreadSnapshot | null>,
|
||||
computerRef: MutableRefObject<ComputerStatus | null>,
|
||||
) {
|
||||
if (isThreadSnapshotEvent(event)) {
|
||||
const next = reduceThreadSnapshot(snapshotRef.current, event);
|
||||
commitSnapshot(next);
|
||||
}
|
||||
if (isComputerStatusEvent(event)) {
|
||||
const next = reduceComputerStatus(computerRef.current, event);
|
||||
commitComputer(next);
|
||||
}
|
||||
}
|
||||
|
||||
export function newClientNonce(): string {
|
||||
const webCrypto = globalThis.crypto;
|
||||
if (webCrypto && typeof webCrypto.randomUUID === "function") {
|
||||
return webCrypto.randomUUID();
|
||||
}
|
||||
return `m-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
|
||||
}
|
||||
1298
apps/web/src/pages/shell/transcript.tsx
Normal file
1298
apps/web/src/pages/shell/transcript.tsx
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user