feat(web): show routines with quick toggle in project overview sidebar

This commit is contained in:
cynarAI 2026-10-19 17:29:31 +02:00
parent f820c75632
commit ac9fcce0fb
12 changed files with 680 additions and 174 deletions

View File

@ -386,10 +386,6 @@ msgstr "{title}, {label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "{toolCount, plural, one {# Tool} other {# Tools}}" msgstr "{toolCount, plural, one {# Tool} other {# Tools}}"
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} arbeitet"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "Executor hinzufügen" msgstr "Executor hinzufügen"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "Ziel hinzufügen" msgstr "Ziel hinzufügen"
@ -737,6 +734,14 @@ msgstr "Immer erlaubt"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "Analysiert die Aufgabe und führt Tools aus…" msgstr "Analysiert die Aufgabe und führt Tools aus…"
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr "Analysiere das Projekt und gib mir einen kurzen Überblick."
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr "Projekt wird analysiert…"
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "Antwort" msgstr "Antwort"
@ -1031,10 +1036,6 @@ 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." 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." 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/transcript.tsx
msgid "Bots are working"
msgstr "Bots arbeiten"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "Schleife" msgstr "Schleife"
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "Das sehe ich in den Logs…" msgstr "Das sehe ich in den Logs…"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "Hallo, so klinge ich, wenn ich Antworten vorlese." msgstr "Hallo, so klinge ich, wenn wir miteinander sprechen."
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "Bots ausblenden" msgstr "Bots ausblenden"
@ -3174,6 +3176,10 @@ msgstr "Zur neuesten Nachricht springen"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "Zur beantworteten Nachricht springen" msgstr "Zur beantworteten Nachricht springen"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr "Sag einfach im Chat Bescheid, wenn etwas regelmäßig erledigt werden soll."
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "Keine Ergebnisse" msgstr "Keine Ergebnisse"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "Noch keine Ausführungen" msgstr "Noch keine Ausführungen"
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "Benachrichtigungen" msgstr "Benachrichtigungen"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "Jetzt" msgstr "Jetzt"
@ -4288,10 +4296,6 @@ msgstr "Privater Arbeitsbereich mit eigenen Bots und Gruppen."
msgid "Project" msgid "Project"
msgstr "Projekt" msgstr "Projekt"
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr "Projekt · Sessions & Ordner"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr "Lese den Stacktrace…"
msgid "Ready" msgid "Ready"
msgstr "Bereit" msgstr "Bereit"
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr "Bereit"
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "Denkaufwand" msgstr "Denkaufwand"
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "Nur abrufen" msgstr "Nur abrufen"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "Kürzlich" msgstr "Kürzlich"
@ -4700,11 +4709,13 @@ msgstr "Rund"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "Routine" msgstr "Routine"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "Routinen" msgstr "Routinen"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "Ausführen um" msgstr "Ausführen um"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "Ausführungsverlauf" msgstr "Ausführungsverlauf"
@ -5037,6 +5049,7 @@ msgstr "Mehr anzeigen"
msgid "Show password" msgid "Show password"
msgstr "Passwort anzeigen" msgstr "Passwort anzeigen"
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "Einstellungen anzeigen" msgstr "Einstellungen anzeigen"
@ -5398,6 +5411,7 @@ msgstr "Aufgabe wird angelernt. Beende das Anlernen, bevor du eine neue Nachrich
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "Team" msgstr "Team"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "Arbeitskanal offen — leg los." msgstr "Arbeitskanal offen — leg los."
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "Arbeitet" msgstr "Arbeitet"
@ -6037,6 +6052,7 @@ msgstr "Gestern"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "Du" msgstr "Du"
@ -6077,8 +6093,8 @@ msgid "Your name"
msgstr "Dein Name" msgstr "Dein Name"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "Wenn das an ist, liest dein Oo Antworten vor." msgstr "Wenn das an ist, spricht dein Oo ganz natürlich mit dir."
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx
msgid "Your Oo will communicate in this language. You can change it later." msgid "Your Oo will communicate in this language. You can change it later."

View File

@ -386,10 +386,6 @@ msgstr "{title}, {label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "{toolCount, plural, one {# tool} other {# tools}}" msgstr "{toolCount, plural, one {# tool} other {# tools}}"
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} is working"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "Add Executor" msgstr "Add Executor"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "Add goal" msgstr "Add goal"
@ -737,6 +734,14 @@ msgstr "Always allowed"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "Analysiert die Aufgabe und führt Tools aus…" msgstr "Analysiert die Aufgabe und führt Tools aus…"
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr "Analyze the project and give me a brief overview."
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr "Analyzing project…"
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "Answer" msgstr "Answer"
@ -1031,10 +1036,6 @@ 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." 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." msgstr "Bots act without asking by default. Add an exception only when you want to review a type of action first."
#: src/pages/shell/transcript.tsx
msgid "Bots are working"
msgstr "Bots are working"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "Bow" msgstr "Bow"
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "Here's what I see in the logs…" msgstr "Here's what I see in the logs…"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "Hi, this is how I'll sound when I read replies out loud." msgstr "Hi, this is how I'll sound when we talk."
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "Hide bots" msgstr "Hide bots"
@ -3174,6 +3176,10 @@ msgstr "Jump to latest"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "Jump to replied message" msgstr "Jump to replied message"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr "Just ask in the chat whenever something should happen regularly."
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "No results" msgstr "No results"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "No runs yet" msgstr "No runs yet"
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "Notifications" msgstr "Notifications"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "Now" msgstr "Now"
@ -4288,10 +4296,6 @@ msgstr "Private workspace with its own bots and groups."
msgid "Project" msgid "Project"
msgstr "Project" msgstr "Project"
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr "Project · sessions & folders"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr "Reading the stack trace…"
msgid "Ready" msgid "Ready"
msgstr "Ready" msgstr "Ready"
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr "Ready"
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "Reasoning effort" msgstr "Reasoning effort"
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "Recall only" msgstr "Recall only"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "Recent" msgstr "Recent"
@ -4700,11 +4709,13 @@ msgstr "Round"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "Routine" msgstr "Routine"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "Routines" msgstr "Routines"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "Run at" msgstr "Run at"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "Run history" msgstr "Run history"
@ -5037,6 +5049,7 @@ msgstr "Show more"
msgid "Show password" msgid "Show password"
msgstr "Show password" msgstr "Show password"
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "Show settings" msgstr "Show settings"
@ -5398,6 +5411,7 @@ msgstr "Teaching in progress. Stop teaching before sending a new message."
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "Team" msgstr "Team"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "Work channel open — go ahead." msgstr "Work channel open — go ahead."
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "Working" msgstr "Working"
@ -6037,6 +6052,7 @@ msgstr "Yesterday"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "You" msgstr "You"
@ -6077,8 +6093,8 @@ msgid "Your name"
msgstr "Your name" msgstr "Your name"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "Your Oo reads replies aloud when this is on." msgstr "Your Oo talks with you naturally when this is on."
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx
msgid "Your Oo will communicate in this language. You can change it later." msgid "Your Oo will communicate in this language. You can change it later."

View File

@ -386,10 +386,6 @@ msgstr "{title}, {label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "" msgstr ""
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} está trabajando"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "Agregar Executor" msgstr "Agregar Executor"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "" msgstr ""
@ -737,6 +734,14 @@ msgstr "Siempre permitido"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr ""
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "Responder" msgstr "Responder"
@ -1031,10 +1036,6 @@ 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." 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." 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/transcript.tsx
msgid "Bots are working"
msgstr "Los bots están trabajando"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "" msgstr ""
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "" msgstr ""
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "Hola, así sonaré cuando lea las respuestas en voz alta." msgstr ""
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "" msgstr ""
@ -3174,6 +3176,10 @@ msgstr "Ir al más reciente"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "Ir al mensaje respondido" msgstr "Ir al mensaje respondido"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "Sin resultados" msgstr "Sin resultados"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "Aún no hay ejecuciones" msgstr "Aún no hay ejecuciones"
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "Notificaciones" msgstr "Notificaciones"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "Ahora" msgstr "Ahora"
@ -4288,10 +4296,6 @@ msgstr ""
msgid "Project" msgid "Project"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr ""
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr ""
msgid "Ready" msgid "Ready"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr ""
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "Esfuerzo de razonamiento" msgstr "Esfuerzo de razonamiento"
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "" msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "Recientes" msgstr "Recientes"
@ -4700,11 +4709,13 @@ msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "Rutina" msgstr "Rutina"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "Rutinas" msgstr "Rutinas"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "Ejecutar a las" msgstr "Ejecutar a las"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "Historial de ejecuciones" msgstr "Historial de ejecuciones"
@ -5037,6 +5049,7 @@ msgstr "Mostrar más"
msgid "Show password" msgid "Show password"
msgstr "Mostrar contraseña" msgstr "Mostrar contraseña"
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "Mostrar configuración" msgstr "Mostrar configuración"
@ -5398,6 +5411,7 @@ msgstr "Enseñanza en curso: detén la enseñanza antes de enviar un nuevo mensa
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "Equipo" msgstr "Equipo"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "" msgstr ""
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "" msgstr ""
@ -6037,6 +6052,7 @@ msgstr "Ayer"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "Tú" msgstr "Tú"
@ -6077,7 +6093,7 @@ msgid "Your name"
msgstr "Tu nombre" msgstr "Tu nombre"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "" msgstr ""
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx

View File

@ -386,10 +386,6 @@ msgstr "{title}, {label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "" msgstr ""
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} काम कर रहा है"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "Executor जोड़ें" msgstr "Executor जोड़ें"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "" msgstr ""
@ -737,6 +734,14 @@ msgstr "हमेशा अनुमत"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr ""
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "उत्तर" msgstr "उत्तर"
@ -1031,10 +1036,6 @@ msgstr ""
msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first."
msgstr "बॉट डिफ़ॉल्ट रूप से बिना पूछे कार्रवाई करते हैं। अपवाद तभी जोड़ें जब आप किसी प्रकार की कार्रवाई की पहले समीक्षा करना चाहते हों।" msgstr "बॉट डिफ़ॉल्ट रूप से बिना पूछे कार्रवाई करते हैं। अपवाद तभी जोड़ें जब आप किसी प्रकार की कार्रवाई की पहले समीक्षा करना चाहते हों।"
#: src/pages/shell/transcript.tsx
msgid "Bots are working"
msgstr "बॉट काम कर रहे हैं"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "" msgstr ""
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "" msgstr ""
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "नमस्ते, उत्तर पढ़कर सुनाते समय मेरी आवाज़ ऐसी होगी।" msgstr ""
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "" msgstr ""
@ -3174,6 +3176,10 @@ msgstr "नवीनतम संदेश पर जाएँ"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "जिस संदेश का उत्तर दिया गया उस पर जाएं" msgstr "जिस संदेश का उत्तर दिया गया उस पर जाएं"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "कोई परिणाम नहीं" msgstr "कोई परिणाम नहीं"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "" msgstr ""
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "सूचनाएं" msgstr "सूचनाएं"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "अभी" msgstr "अभी"
@ -4288,10 +4296,6 @@ msgstr ""
msgid "Project" msgid "Project"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr ""
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr ""
msgid "Ready" msgid "Ready"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr ""
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "रीज़निंग प्रयास" msgstr "रीज़निंग प्रयास"
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "" msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "हाल के" msgstr "हाल के"
@ -4700,11 +4709,13 @@ msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "रूटीन" msgstr "रूटीन"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "रूटीन्स" msgstr "रूटीन्स"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "" msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "" msgstr ""
@ -5037,6 +5049,7 @@ msgstr "और दिखाएँ"
msgid "Show password" msgid "Show password"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "सेटिंग्स दिखाएं" msgstr "सेटिंग्स दिखाएं"
@ -5398,6 +5411,7 @@ msgstr "सिखाना जारी है। नया संदेश भ
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "टीम" msgstr "टीम"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "" msgstr ""
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "" msgstr ""
@ -6037,6 +6052,7 @@ msgstr "कल"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "आप" msgstr "आप"
@ -6077,7 +6093,7 @@ msgid "Your name"
msgstr "आपका नाम" msgstr "आपका नाम"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "" msgstr ""
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx

View File

@ -386,10 +386,6 @@ msgstr "{title}, {label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "" msgstr ""
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} 작업 중"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "Executor 추가" msgstr "Executor 추가"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "" msgstr ""
@ -737,6 +734,14 @@ msgstr "항상 허용됨"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr ""
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "답변" msgstr "답변"
@ -1031,10 +1036,6 @@ msgstr "연결할 Bot"
msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first."
msgstr "Bot은 기본적으로 묻지 않고 작업합니다. 먼저 확인하고 싶은 작업만 예외로 추가하세요." msgstr "Bot은 기본적으로 묻지 않고 작업합니다. 먼저 확인하고 싶은 작업만 예외로 추가하세요."
#: src/pages/shell/transcript.tsx
msgid "Bots are working"
msgstr "봇 작업 중"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "" msgstr ""
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "" msgstr ""
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "안녕하세요. 답변을 소리 내어 읽을 때 이런 목소리로 들립니다." msgstr ""
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "" msgstr ""
@ -3174,6 +3176,10 @@ msgstr "최신 메시지로 이동"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "답장한 메시지로 이동" msgstr "답장한 메시지로 이동"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "검색 결과가 없습니다" msgstr "검색 결과가 없습니다"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "아직 실행 기록이 없습니다" msgstr "아직 실행 기록이 없습니다"
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "알림" msgstr "알림"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "지금" msgstr "지금"
@ -4288,10 +4296,6 @@ msgstr ""
msgid "Project" msgid "Project"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr ""
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr ""
msgid "Ready" msgid "Ready"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr ""
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "추론 강도" msgstr "추론 강도"
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "" msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "최근" msgstr "최근"
@ -4700,11 +4709,13 @@ msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "자동 실행" msgstr "자동 실행"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "자동 실행" msgstr "자동 실행"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "실행 시간" msgstr "실행 시간"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "실행 기록" msgstr "실행 기록"
@ -5037,6 +5049,7 @@ msgstr "더 보기"
msgid "Show password" msgid "Show password"
msgstr "비밀번호 표시" msgstr "비밀번호 표시"
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "설정 보기" msgstr "설정 보기"
@ -5398,6 +5411,7 @@ msgstr "작업을 가르치는 중입니다. 새 메시지를 보내려면 먼
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "팀 공용" msgstr "팀 공용"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "" msgstr ""
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "" msgstr ""
@ -6037,6 +6052,7 @@ msgstr "어제"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "나" msgstr "나"
@ -6077,7 +6093,7 @@ msgid "Your name"
msgstr "이름" msgstr "이름"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "" msgstr ""
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx

View File

@ -386,10 +386,6 @@ msgstr "{title}, {label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "" msgstr ""
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} está trabalhando"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "Adicionar Executor" msgstr "Adicionar Executor"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "" msgstr ""
@ -737,6 +734,14 @@ msgstr "Sempre permitido"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr ""
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "Resposta" msgstr "Resposta"
@ -1031,10 +1036,6 @@ msgstr ""
msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." 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." 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/transcript.tsx
msgid "Bots are working"
msgstr "Bots estão trabalhando"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "" msgstr ""
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "" msgstr ""
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "Olá, é assim que vou soar quando ler as respostas em voz alta." msgstr ""
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "" msgstr ""
@ -3174,6 +3176,10 @@ msgstr "Ir para a mensagem mais recente"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "Ir para a mensagem respondida" msgstr "Ir para a mensagem respondida"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "Nenhum resultado" msgstr "Nenhum resultado"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "" msgstr ""
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "Notificações" msgstr "Notificações"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "Agora" msgstr "Agora"
@ -4288,10 +4296,6 @@ msgstr ""
msgid "Project" msgid "Project"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr ""
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr ""
msgid "Ready" msgid "Ready"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr ""
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "Esforço de raciocínio" msgstr "Esforço de raciocínio"
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "" msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "Recente" msgstr "Recente"
@ -4700,11 +4709,13 @@ msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "Rotina" msgstr "Rotina"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "Rotinas" msgstr "Rotinas"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "" msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "" msgstr ""
@ -5037,6 +5049,7 @@ msgstr "Mostrar mais"
msgid "Show password" msgid "Show password"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "Mostrar configurações" msgstr "Mostrar configurações"
@ -5398,6 +5411,7 @@ msgstr "Ensino em andamento. Pare de ensinar antes de enviar uma nova mensagem."
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "Equipe" msgstr "Equipe"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "" msgstr ""
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "" msgstr ""
@ -6037,6 +6052,7 @@ msgstr "Ontem"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "Você" msgstr "Você"
@ -6077,7 +6093,7 @@ msgid "Your name"
msgstr "O seu nome" msgstr "O seu nome"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "" msgstr ""
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx

View File

@ -386,10 +386,6 @@ msgstr "{title}, {label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "{toolCount, plural, one {# инструмент} few {# инструмента} many {# инструментов} other {# инструмента}}" msgstr "{toolCount, plural, one {# инструмент} few {# инструмента} many {# инструментов} other {# инструмента}}"
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} работает"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "Добавить Executor" msgstr "Добавить Executor"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "" msgstr ""
@ -737,6 +734,14 @@ msgstr "Всегда разрешено"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr ""
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "Ответ" msgstr "Ответ"
@ -1031,10 +1036,6 @@ msgstr "Бот для ссылки"
msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first."
msgstr "По умолчанию боты действуют, не спрашивая. Добавляйте исключение только в том случае, если вы хотите сначала просмотреть тип действия." msgstr "По умолчанию боты действуют, не спрашивая. Добавляйте исключение только в том случае, если вы хотите сначала просмотреть тип действия."
#: src/pages/shell/transcript.tsx
msgid "Bots are working"
msgstr "Боты работают"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "" msgstr ""
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "" msgstr ""
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "Привет, вот как я буду звучать, когда буду читать ответы вслух." msgstr ""
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "Скрыть ботов" msgstr "Скрыть ботов"
@ -3174,6 +3176,10 @@ msgstr "Перейти к последнему"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "Перейти к ответному сообщению" msgstr "Перейти к ответному сообщению"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "Нет результатов" msgstr "Нет результатов"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "Запусков пока нет" msgstr "Запусков пока нет"
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "Уведомления" msgstr "Уведомления"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "Сейчас" msgstr "Сейчас"
@ -4288,10 +4296,6 @@ msgstr "Приватное пространство со своими ботам
msgid "Project" msgid "Project"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr ""
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr ""
msgid "Ready" msgid "Ready"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr ""
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "" msgstr ""
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "" msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "Недавние" msgstr "Недавние"
@ -4700,11 +4709,13 @@ msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "Задача" msgstr "Задача"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "Задачи" msgstr "Задачи"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "Запустить в" msgstr "Запустить в"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "История запуска" msgstr "История запуска"
@ -5037,6 +5049,7 @@ msgstr "Показать ещё"
msgid "Show password" msgid "Show password"
msgstr "Показать пароль" msgstr "Показать пароль"
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "Показать настройки" msgstr "Показать настройки"
@ -5398,6 +5411,7 @@ msgstr "Обучение в процессе. Прекратите обучен
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "Команда" msgstr "Команда"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "" msgstr ""
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "" msgstr ""
@ -6037,6 +6052,7 @@ msgstr "Вчера"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "Вы" msgstr "Вы"
@ -6077,7 +6093,7 @@ msgid "Your name"
msgstr "Ваше имя" msgstr "Ваше имя"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "" msgstr ""
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx

View File

@ -386,10 +386,6 @@ msgstr "{title}, {label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "" msgstr ""
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} çalışıyor"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "Executor ekle" msgstr "Executor ekle"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "" msgstr ""
@ -737,6 +734,14 @@ msgstr "Her zaman izinli"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr ""
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "Yanıtla" msgstr "Yanıtla"
@ -1031,10 +1036,6 @@ msgstr ""
msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." 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." 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/transcript.tsx
msgid "Bots are working"
msgstr "Botlar çalışıyor"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "" msgstr ""
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "" msgstr ""
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "Merhaba, yanıtları sesli okuduğumda böyle duyulacağım." msgstr ""
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "" msgstr ""
@ -3174,6 +3176,10 @@ msgstr "En son mesaja git"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "Yanıtlanan mesaja git" msgstr "Yanıtlanan mesaja git"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "Sonuç yok" msgstr "Sonuç yok"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "" msgstr ""
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "Bildirimler" msgstr "Bildirimler"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "Şimdi" msgstr "Şimdi"
@ -4288,10 +4296,6 @@ msgstr ""
msgid "Project" msgid "Project"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr ""
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr ""
msgid "Ready" msgid "Ready"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr ""
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "Akıl yürütme düzeyi" msgstr "Akıl yürütme düzeyi"
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "" msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "Son" msgstr "Son"
@ -4700,11 +4709,13 @@ msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "Rutin" msgstr "Rutin"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "Rutinler" msgstr "Rutinler"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "" msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "" msgstr ""
@ -5037,6 +5049,7 @@ msgstr "Daha fazla göster"
msgid "Show password" msgid "Show password"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "Ayarları göster" msgstr "Ayarları göster"
@ -5398,6 +5411,7 @@ msgstr "Öğretme sürüyor. Yeni mesaj göndermeden önce öğretmeyi durdur."
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "Takım" msgstr "Takım"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "" msgstr ""
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "" msgstr ""
@ -6037,6 +6052,7 @@ msgstr "Dün"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "Sen" msgstr "Sen"
@ -6077,7 +6093,7 @@ msgid "Your name"
msgstr "Adın" msgstr "Adın"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "" msgstr ""
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx

View File

@ -386,10 +386,6 @@ msgstr "{title},{label}"
msgid "{toolCount, plural, one {# tool} other {# tools}}" msgid "{toolCount, plural, one {# tool} other {# tools}}"
msgstr "" msgstr ""
#: src/pages/shell/transcript.tsx
msgid "{workingBotName} is working"
msgstr "{workingBotName} 正在工作"
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "/Users/you/projects/acme" msgid "/Users/you/projects/acme"
@ -549,6 +545,7 @@ msgid "Add Executor"
msgstr "添加 Executor" msgstr "添加 Executor"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/project-overview.tsx
msgid "Add goal" msgid "Add goal"
msgstr "" msgstr ""
@ -737,6 +734,14 @@ msgstr "始终允许"
msgid "Analysiert die Aufgabe und führt Tools aus…" msgid "Analysiert die Aufgabe und führt Tools aus…"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Analyze the project and give me a brief overview."
msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Analyzing project…"
msgstr ""
#: src/components/AskCard.tsx #: src/components/AskCard.tsx
msgid "Answer" msgid "Answer"
msgstr "回答" msgstr "回答"
@ -1031,10 +1036,6 @@ msgstr "要关联的 Bot"
msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first." msgid "Bots act without asking by default. Add an exception only when you want to review a type of action first."
msgstr "默认情况下 Bot 会直接执行。只有当你想先审核某类操作时,才添加例外。" msgstr "默认情况下 Bot 会直接执行。只有当你想先审核某类操作时,才添加例外。"
#: src/pages/shell/transcript.tsx
msgid "Bots are working"
msgstr "Bot 正在工作"
#: src/components/OoAtelier.tsx #: src/components/OoAtelier.tsx
msgid "Bow" msgid "Bow"
msgstr "" msgstr ""
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
msgstr "" msgstr ""
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Hi, this is how I'll sound when I read replies out loud." msgid "Hi, this is how I'll sound when we talk."
msgstr "你好,这是我朗读回复时的声音。" msgstr ""
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/sidebar-header.tsx
msgid "Hide bots" msgid "Hide bots"
msgstr "" msgstr ""
@ -3174,6 +3176,10 @@ msgstr "跳到最新"
msgid "Jump to replied message" msgid "Jump to replied message"
msgstr "跳到被回复的消息" msgstr "跳到被回复的消息"
#: src/pages/shell/project-overview.tsx
msgid "Just ask in the chat whenever something should happen regularly."
msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
msgid "just now" msgid "just now"
@ -3899,6 +3905,7 @@ msgid "No results"
msgstr "无结果" msgstr "无结果"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "No runs yet" msgid "No runs yet"
msgstr "还没有运行记录" msgstr "还没有运行记录"
@ -3957,6 +3964,7 @@ msgid "Notifications"
msgstr "通知" msgstr "通知"
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Now" msgid "Now"
msgstr "现在" msgstr "现在"
@ -4288,10 +4296,6 @@ msgstr ""
msgid "Project" msgid "Project"
msgstr "" msgstr ""
#: src/pages/Shell.tsx
msgid "Project · sessions & folders"
msgstr ""
#: src/pages/shell/dialogs.tsx #: src/pages/shell/dialogs.tsx
#: src/pages/shell/project-look-dialog.tsx #: src/pages/shell/project-look-dialog.tsx
msgid "Project folder" msgid "Project folder"
@ -4399,6 +4403,10 @@ msgstr ""
msgid "Ready" msgid "Ready"
msgstr "" msgstr ""
#: src/pages/shell/project-overview.tsx
msgid "Ready"
msgstr ""
#: src/pages/ModelSettingsOverlay.tsx #: src/pages/ModelSettingsOverlay.tsx
msgid "Reasoning effort" msgid "Reasoning effort"
msgstr "推理强度" msgstr "推理强度"
@ -4412,6 +4420,7 @@ msgid "Recall only"
msgstr "" msgstr ""
#: src/pages/ActivityList.tsx #: src/pages/ActivityList.tsx
#: src/pages/shell/project-overview.tsx
msgid "Recent" msgid "Recent"
msgstr "最近" msgstr "最近"
@ -4700,11 +4709,13 @@ msgstr ""
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/routine-event-line.tsx #: src/pages/shell/routine-event-line.tsx
msgid "Routine" msgid "Routine"
msgstr "例行任务" msgstr "例行任务"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Routines" msgid "Routines"
msgstr "例行任务" msgstr "例行任务"
@ -4718,6 +4729,7 @@ msgid "Run at"
msgstr "运行时间" msgstr "运行时间"
#: src/pages/RoutineEditor.tsx #: src/pages/RoutineEditor.tsx
#: src/pages/shell/project-overview.tsx
msgid "Run history" msgid "Run history"
msgstr "运行记录" msgstr "运行记录"
@ -5037,6 +5049,7 @@ msgstr "显示更多"
msgid "Show password" msgid "Show password"
msgstr "显示密码" msgstr "显示密码"
#: src/pages/shell/project-overview.tsx
#: src/pages/shell/side-panel-header.tsx #: src/pages/shell/side-panel-header.tsx
msgid "Show settings" msgid "Show settings"
msgstr "显示设置" msgstr "显示设置"
@ -5398,6 +5411,7 @@ msgstr "正在示范,发送新消息前请先停止示范。"
#: src/pages/ProjectSessionTimeline.tsx #: src/pages/ProjectSessionTimeline.tsx
#: src/pages/shell/bot-panel.tsx #: src/pages/shell/bot-panel.tsx
#: src/pages/shell/project-overview.tsx
msgid "Team" msgid "Team"
msgstr "团队" msgstr "团队"
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
msgstr "" msgstr ""
#: src/components/stage/OoStage.tsx #: src/components/stage/OoStage.tsx
#: src/pages/shell/project-overview.tsx
msgid "Working" msgid "Working"
msgstr "" msgstr ""
@ -6037,6 +6052,7 @@ msgstr "昨天"
#: src/components/UserProfileSettings.tsx #: src/components/UserProfileSettings.tsx
#: src/components/voice/VoiceStage.tsx #: src/components/voice/VoiceStage.tsx
#: src/pages/Shell.tsx #: src/pages/Shell.tsx
#: src/pages/shell/transcript.tsx
msgid "You" msgid "You"
msgstr "你" msgstr "你"
@ -6077,7 +6093,7 @@ msgid "Your name"
msgstr "你的名字" msgstr "你的名字"
#: src/pages/VoiceSettingsOverlay.tsx #: src/pages/VoiceSettingsOverlay.tsx
msgid "Your Oo reads replies aloud when this is on." msgid "Your Oo talks with you naturally when this is on."
msgstr "" msgstr ""
#: src/pages/Onboarding.tsx #: src/pages/Onboarding.tsx

View File

@ -435,6 +435,9 @@ export function ShellPage() {
} | null>(null); } | null>(null);
const [routines, setRoutines] = useState<Routine[]>([]); const [routines, setRoutines] = useState<Routine[]>([]);
const [routinesBotId, setRoutinesBotId] = useState<string | null>(null); const [routinesBotId, setRoutinesBotId] = useState<string | null>(null);
const [projectRoutines, setProjectRoutines] = useState<Routine[]>([]);
const [projectRoutinesSpaceId, setProjectRoutinesSpaceId] = useState<string | null>(null);
const projectRoutinesRequest = useRef(0);
const [routineActiveToggleId, setRoutineActiveToggleId] = useState<string | null>(null); const [routineActiveToggleId, setRoutineActiveToggleId] = useState<string | null>(null);
const routineActiveToggleRequest = useRef(0); const routineActiveToggleRequest = useRef(0);
const [taughtSkills, setTaughtSkills] = useState<TaughtSkill[]>([]); const [taughtSkills, setTaughtSkills] = useState<TaughtSkill[]>([]);
@ -718,6 +721,61 @@ export function ShellPage() {
[active?.id, groupId, inGroup, pendingAttachments], [active?.id, groupId, inGroup, pendingAttachments],
); );
const activeRoutines = !inGroup && routinesBotId === active?.id ? routines : []; const activeRoutines = !inGroup && routinesBotId === active?.id ? routines : [];
const projectBotIds = useMemo(() => {
if (!inProject || !activeSpace) return [];
const ids = new Set<string>();
if (coordinatorBot) ids.add(coordinatorBot.id);
for (const member of activeSpace.bots ?? []) ids.add(member.id);
for (const bot of bots) {
if (bot.spaceId === activeSpace.id) ids.add(bot.id);
}
return [...ids];
}, [inProject, activeSpace, coordinatorBot, bots]);
const projectBotIdsRef = useRef<string[]>([]);
projectBotIdsRef.current = projectBotIds;
const activeProjectSpaceIdRef = useRef<string | null>(
inProject && activeSpace ? activeSpace.id : null,
);
activeProjectSpaceIdRef.current = inProject && activeSpace ? activeSpace.id : null;
const refreshProjectRoutines = useCallback(async (extraBotIds?: readonly string[]) => {
const spaceId = activeProjectSpaceIdRef.current;
if (!spaceId) return;
const botIds = [...new Set([...projectBotIdsRef.current, ...(extraBotIds ?? [])])];
if (botIds.length === 0) {
setProjectRoutines([]);
setProjectRoutinesSpaceId(spaceId);
return;
}
const request = ++projectRoutinesRequest.current;
const lists = await Promise.all(
botIds.map((id) => rpc.routines.list({ botId: id }).catch(() => null)),
);
if (request !== projectRoutinesRequest.current || activeProjectSpaceIdRef.current !== spaceId) {
return;
}
const seen = new Set<string>();
const merged: Routine[] = [];
for (const list of lists) {
if (!list) continue;
for (const item of list) {
if (!seen.has(item.id)) {
seen.add(item.id);
merged.push(item);
}
}
}
setProjectRoutines(merged);
setProjectRoutinesSpaceId(spaceId);
}, []);
const projectBotIdsKey = projectBotIds.join(",");
useEffect(() => {
if (!inProject || !activeSpace) {
setProjectRoutines([]);
setProjectRoutinesSpaceId(null);
return;
}
void refreshProjectRoutines();
}, [inProject, activeSpace?.id, projectBotIdsKey, refreshProjectRoutines]);
const activeTaughtSkills = taughtSkillsBotId === active?.id ? taughtSkills : []; const activeTaughtSkills = taughtSkillsBotId === active?.id ? taughtSkills : [];
const recordingSkill = activeTaughtSkills.find((skill) => skill.status === "recording") ?? null; const recordingSkill = activeTaughtSkills.find((skill) => skill.status === "recording") ?? null;
const routeBotId = useRef<string | undefined>(botId); const routeBotId = useRef<string | undefined>(botId);
@ -903,6 +961,11 @@ export function ShellPage() {
commitComputer(null); commitComputer(null);
setRoutines([]); setRoutines([]);
setRoutinesBotId(null); setRoutinesBotId(null);
void refreshProjectRoutines(
[snap.leadBotId, ...(snap.members?.map((member) => member.botId) ?? [])].filter(
(botId): botId is string => Boolean(botId),
),
);
// Keep the search-jump viewport; expandedHistoryThread merge still accepts live messages. // Keep the search-jump viewport; expandedHistoryThread merge still accepts live messages.
if ( if (
stickToEnd && stickToEnd &&
@ -962,6 +1025,7 @@ export function ShellPage() {
if (routines) { if (routines) {
setRoutines(routines); setRoutines(routines);
setRoutinesBotId(id); setRoutinesBotId(id);
void refreshProjectRoutines([id]);
} }
if (skills) { if (skills) {
setTaughtSkills(skills); setTaughtSkills(skills);
@ -1409,6 +1473,16 @@ export function ShellPage() {
if (blocks.some((block) => block.kind === "project_created")) { if (blocks.some((block) => block.kind === "project_created")) {
void refreshBots().catch(() => undefined); void refreshBots().catch(() => undefined);
} }
if (blocks.some((block) => block.kind === "event")) {
void refreshProjectRoutines();
}
}
if (
event.type === "thread.message.updated" ||
event.type === "routine.created" ||
event.type === "routine.updated"
) {
void refreshProjectRoutines();
} }
if (event.type === "run.waiting_input" || event.type === "computer.takeover.requested") { if (event.type === "run.waiting_input" || event.type === "computer.takeover.requested") {
ooSound.play("need-you"); ooSound.play("need-you");
@ -2689,7 +2763,10 @@ export function ShellPage() {
const setRoutineActive = useCallback( const setRoutineActive = useCallback(
async (routine: Routine, active: boolean) => { async (routine: Routine, active: boolean) => {
const botId = activeBotId.current; const botId = activeBotId.current;
if (!botId || routine.botId !== botId) return; const inCurrentProject =
Boolean(activeProjectSpaceIdRef.current) &&
projectBotIdsRef.current.includes(routine.botId);
if ((!botId || routine.botId !== botId) && !inCurrentProject) return;
const request = ++routineActiveToggleRequest.current; const request = ++routineActiveToggleRequest.current;
const previousActive = routine.active; const previousActive = routine.active;
setRoutineActiveToggleId(routine.id); setRoutineActiveToggleId(routine.id);
@ -2698,16 +2775,32 @@ export function ShellPage() {
? current.map((item) => (item.id === routine.id ? { ...item, active } : item)) ? current.map((item) => (item.id === routine.id ? { ...item, active } : item))
: current, : current,
); );
setProjectRoutines((current) =>
current.map((item) => (item.id === routine.id ? { ...item, active } : item)),
);
try { try {
const saved = await rpc.routines.update({ routineId: routine.id, active }); const saved = await rpc.routines.update({ routineId: routine.id, active });
if (routineActiveToggleRequest.current !== request || activeBotId.current !== botId) return; if (
routineActiveToggleRequest.current !== request ||
(activeBotId.current !== botId && !activeProjectSpaceIdRef.current)
) {
return;
}
setRoutines((current) => setRoutines((current) =>
routinesBotId === botId routinesBotId === botId
? current.map((item) => (item.id === saved.id ? saved : item)) ? current.map((item) => (item.id === saved.id ? saved : item))
: current, : current,
); );
setProjectRoutines((current) =>
current.map((item) => (item.id === saved.id ? saved : item)),
);
} catch { } catch {
if (routineActiveToggleRequest.current !== request || activeBotId.current !== botId) return; if (
routineActiveToggleRequest.current !== request ||
(activeBotId.current !== botId && !activeProjectSpaceIdRef.current)
) {
return;
}
setRoutines((current) => setRoutines((current) =>
routinesBotId === botId routinesBotId === botId
? current.map((item) => ? current.map((item) =>
@ -2715,6 +2808,11 @@ export function ShellPage() {
) )
: current, : current,
); );
setProjectRoutines((current) =>
current.map((item) =>
item.id === routine.id ? { ...item, active: previousActive } : item,
),
);
} finally { } finally {
if (routineActiveToggleRequest.current === request) { if (routineActiveToggleRequest.current === request) {
setRoutineActiveToggleId((current) => (current === routine.id ? null : current)); setRoutineActiveToggleId((current) => (current === routine.id ? null : current));
@ -4127,6 +4225,16 @@ export function ShellPage() {
: inProject && !panel && canvasTab === "sandbox" : inProject && !panel && canvasTab === "sandbox"
? "overview" ? "overview"
: canvasTab; : canvasTab;
const isOverlayPanel =
panel === "settings" ||
panel === "routine" ||
panel === "create" ||
panel === "create-group" ||
panel === "group-settings";
const routineTargetBot =
(editingRoutine ? bots.find((b) => b.id === editingRoutine.botId) : undefined) ??
active ??
coordinatorBot;
const canvasElement = ( const canvasElement = (
<aside <aside
@ -4198,7 +4306,7 @@ export function ShellPage() {
/> />
) : null} ) : null}
{inProject && panel !== "settings" && effectiveTab === "overview" && activeSpace ? ( {inProject && !isOverlayPanel && effectiveTab === "overview" && activeSpace ? (
<div className="rk-scroll h-full w-full overflow-y-auto px-4 py-4"> <div className="rk-scroll h-full w-full overflow-y-auto px-4 py-4">
<ProjectOverview <ProjectOverview
spaceId={activeSpace.id} spaceId={activeSpace.id}
@ -4211,6 +4319,24 @@ export function ShellPage() {
} }
: undefined : undefined
} }
routines={projectRoutinesSpaceId === activeSpace.id ? projectRoutines : []}
runningRoutineId={
activeSnapshot?.run && isActive(activeSnapshot.run.status)
? (activeSnapshot.run.routineId ?? null)
: null
}
togglingRoutineId={routineActiveToggleId}
onToggleRoutineActive={(routine, next) =>
void setRoutineActive(routine, next)
}
onOpenRoutine={(routine) => {
setRoutineDraft(draftFromRoutine(routine));
setRoutineWebhookSecret(null);
setEditingRoutine(routine);
setRoutineError(null);
setPanel("routine");
}}
onStopRun={() => void stopRun()}
onOpenRun={(run) => onOpenRun={(run) =>
openSpaceChat( openSpaceChat(
run.spaceId, run.spaceId,
@ -4225,7 +4351,7 @@ export function ShellPage() {
/> />
</div> </div>
) : !inProject && ) : !inProject &&
panel !== "settings" && !isOverlayPanel &&
effectiveTab === "overview" && effectiveTab === "overview" &&
(active ?? coordinatorBot) ? ( (active ?? coordinatorBot) ? (
<div className="rk-scroll h-full w-full overflow-y-auto px-4 py-4"> <div className="rk-scroll h-full w-full overflow-y-auto px-4 py-4">
@ -4270,7 +4396,7 @@ export function ShellPage() {
onOpenSettings={() => setPanel("settings")} onOpenSettings={() => setPanel("settings")}
/> />
</div> </div>
) : panel === "browser" || (effectiveTab === "browser" && panel !== "settings") ? ( ) : panel === "browser" || (effectiveTab === "browser" && !isOverlayPanel) ? (
<div className="flex-1 min-h-0 flex flex-col"> <div className="flex-1 min-h-0 flex flex-col">
<InAppBrowser <InAppBrowser
onClose={() => { onClose={() => {
@ -4297,7 +4423,7 @@ export function ShellPage() {
}} }}
/> />
</div> </div>
) : effectiveTab === "files" && panel !== "settings" ? ( ) : effectiveTab === "files" && !isOverlayPanel ? (
<div className="rk-scroll h-full w-full overflow-y-auto px-5 lg:px-7 2xl:px-9 py-[17px]"> <div className="rk-scroll h-full w-full overflow-y-auto px-5 lg:px-7 2xl:px-9 py-[17px]">
{(active ?? coordinatorBot) ? ( {(active ?? coordinatorBot) ? (
<WorkspaceFilesView botId={(active ?? coordinatorBot)!.id} className="mt-0" /> <WorkspaceFilesView botId={(active ?? coordinatorBot)!.id} className="mt-0" />
@ -4431,7 +4557,7 @@ export function ShellPage() {
} }
/> />
) : null} ) : null}
{panel === "routine" && active ? ( {panel === "routine" && routineTargetBot ? (
<RoutineEditor <RoutineEditor
draft={routineDraft} draft={routineDraft}
onChange={setRoutineDraft} onChange={setRoutineDraft}
@ -4440,28 +4566,29 @@ export function ShellPage() {
webhook={{ webhook={{
path: path:
typeof window !== "undefined" typeof window !== "undefined"
? `${window.location.origin}/api/v1/bots/${active.id}/webhook` ? `${window.location.origin}/api/v1/bots/${routineTargetBot.id}/webhook`
: `/api/v1/bots/${active.id}/webhook`, : `/api/v1/bots/${routineTargetBot.id}/webhook`,
secret: routineWebhookSecret, secret: routineWebhookSecret,
configured: active.webhookConfigured || Boolean(routineWebhookSecret), configured:
routineTargetBot.webhookConfigured || Boolean(routineWebhookSecret),
}} }}
githubPath={ githubPath={
typeof window !== "undefined" typeof window !== "undefined"
? `${window.location.origin}/api/v1/bots/${active.id}/github` ? `${window.location.origin}/api/v1/bots/${routineTargetBot.id}/github`
: `/api/v1/bots/${active.id}/github` : `/api/v1/bots/${routineTargetBot.id}/github`
} }
messageProviders={messagingProviders} messageProviders={messagingProviders}
saving={savingRoutine} saving={savingRoutine}
running={runningRoutine} running={runningRoutine}
error={routineError} error={routineError}
onBack={() => setPanel("computer")} onBack={() => setPanel(inProject ? null : "computer")}
onClose={() => setPanel(null)} onClose={() => setPanel(null)}
onEnsureWebhook={async () => { onEnsureWebhook={async () => {
await ensureWebhookSecret(active.id); await ensureWebhookSecret(routineTargetBot.id);
}} }}
onSave={async () => { onSave={async () => {
if (routineSavePending.current) return; if (routineSavePending.current) return;
const targetBotId = active.id; const targetBotId = routineTargetBot.id;
const targetRoutine = editingRoutine; const targetRoutine = editingRoutine;
if (targetRoutine && targetRoutine.botId !== targetBotId) return; if (targetRoutine && targetRoutine.botId !== targetBotId) return;
if ( if (
@ -4480,7 +4607,7 @@ export function ShellPage() {
try { try {
if ( if (
(routineDraft.webhookEnabled || routineDraft.githubEnabled) && (routineDraft.webhookEnabled || routineDraft.githubEnabled) &&
!active.webhookConfigured && !routineTargetBot.webhookConfigured &&
!routineWebhookSecret !routineWebhookSecret
) { ) {
await ensureWebhookSecret(targetBotId); await ensureWebhookSecret(targetBotId);
@ -4533,23 +4660,34 @@ export function ShellPage() {
} }
if ( if (
routineSaveRequest.current === saveRequest && routineSaveRequest.current === saveRequest &&
activeBotId.current === targetBotId (activeBotId.current === targetBotId ||
Boolean(activeProjectSpaceIdRef.current))
) { ) {
setEditingRoutine(saved); setEditingRoutine(saved);
setRoutineDraft(draftFromRoutine(saved)); setRoutineDraft(draftFromRoutine(saved));
setRoutines((current) => if (activeBotId.current === targetBotId) {
routinesBotId === targetBotId || routinesBotId === null setRoutines((current) =>
? current.some((item) => item.id === saved.id) routinesBotId === targetBotId || routinesBotId === null
? current.some((item) => item.id === saved.id)
? current.map((item) => (item.id === saved.id ? saved : item))
: [...current, saved]
: current,
);
setRoutinesBotId(targetBotId);
}
if (activeProjectSpaceIdRef.current) {
setProjectRoutines((current) =>
current.some((item) => item.id === saved.id)
? current.map((item) => (item.id === saved.id ? saved : item)) ? current.map((item) => (item.id === saved.id ? saved : item))
: [...current, saved] : [...current, saved],
: current, );
); }
setRoutinesBotId(targetBotId);
} }
} catch (error) { } catch (error) {
if ( if (
routineSaveRequest.current !== saveRequest || routineSaveRequest.current !== saveRequest ||
activeBotId.current !== targetBotId (activeBotId.current !== targetBotId &&
!activeProjectSpaceIdRef.current)
) { ) {
return; return;
} }
@ -4563,15 +4701,20 @@ export function ShellPage() {
} }
if ( if (
routineSaveRequest.current !== saveRequest || routineSaveRequest.current !== saveRequest ||
activeBotId.current !== targetBotId (activeBotId.current !== targetBotId &&
!activeProjectSpaceIdRef.current)
) { ) {
return; return;
} }
await refreshThread(targetBotId).catch(() => undefined); if (activeBotId.current === targetBotId) {
await refreshThread(targetBotId).catch(() => undefined);
} else {
await refreshProjectRoutines([targetBotId]).catch(() => undefined);
}
}} }}
onTestRun={async () => { onTestRun={async () => {
if (routineRunPending.current) return; if (routineRunPending.current) return;
const targetBotId = active.id; const targetBotId = routineTargetBot.id;
const targetRoutine = editingRoutine; const targetRoutine = editingRoutine;
if (!targetRoutine) return; if (!targetRoutine) return;
routineRunPending.current = true; routineRunPending.current = true;
@ -4579,9 +4722,16 @@ export function ShellPage() {
setRoutineError(null); setRoutineError(null);
try { try {
await rpc.routines.testRun({ routineId: targetRoutine.id }); await rpc.routines.testRun({ routineId: targetRoutine.id });
await refreshThread(targetBotId);
} catch (error) {
if (activeBotId.current === targetBotId) { if (activeBotId.current === targetBotId) {
await refreshThread(targetBotId);
} else if (activeGroupId.current) {
await refreshGroupThread(activeGroupId.current);
}
} catch (error) {
if (
activeBotId.current === targetBotId ||
activeProjectSpaceIdRef.current
) {
setRoutineError( setRoutineError(
error instanceof Error ? error.message : t`Could not run routine`, error instanceof Error ? error.message : t`Could not run routine`,
); );
@ -4596,7 +4746,7 @@ export function ShellPage() {
setDeleteRoutineTarget(editingRoutine); setDeleteRoutineTarget(editingRoutine);
return; return;
} }
setPanel("computer"); setPanel(inProject ? null : "computer");
}} }}
/> />
) : null} ) : null}
@ -4952,10 +5102,15 @@ export function ShellPage() {
if (newSpaceDialogVariant === "project") { if (newSpaceDialogVariant === "project") {
try { try {
const main = await rpc.spaces.ensureMain({ spaceId: space.id }); const main = await rpc.spaces.ensureMain({ spaceId: space.id });
if (input.goal?.trim()) { const kickoff =
input.goal?.trim() ||
(input.workspacePath?.trim() || input.gitRemoteUrl?.trim()
? t`Analyze the project and give me a brief overview.`
: "");
if (kickoff) {
await rpc.threads.send({ await rpc.threads.send({
groupId: main.groupId, groupId: main.groupId,
text: input.goal.trim(), text: kickoff,
}); });
} }
window.location.assign(`/app/g/${main.groupId}`); window.location.assign(`/app/g/${main.groupId}`);
@ -5027,6 +5182,11 @@ export function ShellPage() {
await rpc.routines.remove({ routineId: target.id }); await rpc.routines.remove({ routineId: target.id });
setDeleteRoutineTarget(null); setDeleteRoutineTarget(null);
setEditingRoutine((current) => (current?.id === target.id ? null : current)); setEditingRoutine((current) => (current?.id === target.id ? null : current));
setProjectRoutines((current) => current.filter((item) => item.id !== target.id));
if (activeProjectSpaceIdRef.current && activeBotId.current !== target.botId) {
setPanel(null);
return;
}
if (activeBotId.current !== target.botId) return; if (activeBotId.current !== target.botId) return;
await refreshThread(target.botId); await refreshThread(target.botId);
if (activeBotId.current === target.botId) setPanel("computer"); if (activeBotId.current === target.botId) setPanel("computer");

View File

@ -0,0 +1,142 @@
// @vitest-environment jsdom
import type { Routine, Space } from "@rakazo/contracts";
import { act } from "react";
import type { Root } from "react-dom/client";
import { createRoot } from "react-dom/client";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
(globalThis as Record<string, unknown>).IS_REACT_ACT_ENVIRONMENT = true;
vi.mock("@lingui/core/macro", () => ({
t: (parts: TemplateStringsArray, ...values: unknown[]) =>
parts.reduce(
(text, part, index) => text + part + (index < values.length ? values[index] : ""),
"",
),
}));
vi.mock("@lingui/react/macro", () => {
const t = (parts: TemplateStringsArray, ...values: unknown[]) =>
parts.reduce(
(text, part, index) => text + part + (index < values.length ? values[index] : ""),
"",
);
return {
useLingui: () => ({ t }),
Trans: ({ children }: { children: React.ReactNode }) => children,
};
});
import { ProjectOverview } from "./project-overview";
const sampleSpace: Space = {
id: "space-project-1",
name: "Garten",
isDefault: false,
canEdit: true,
canDelete: true,
hasContent: true,
bots: [],
groups: [],
externalConversations: [],
botSections: [],
};
const sampleRoutine: Routine = {
id: "routine-1",
botId: "bot-1",
name: "Morning check-in",
prompt: "Summarize project status",
crons: ["0 9 * * *"],
timezone: "Europe/Berlin",
active: true,
notify: true,
webhookEnabled: false,
githubEnabled: false,
messageProvider: null,
lastRunAt: null,
nextRunAt: "2026-10-20T07:00:00.000Z",
createdAt: "2026-10-19T07:00:00.000Z",
coachKey: null,
};
describe("ProjectOverview routines section", () => {
let container: HTMLDivElement;
let root: Root;
beforeEach(() => {
container = document.createElement("div");
document.body.appendChild(container);
root = createRoot(container);
});
afterEach(() => {
act(() => {
root.unmount();
});
container.remove();
});
it("shows a customer-friendly hint to create routines via chat when no routines exist", () => {
act(() => {
root.render(
<ProjectOverview
spaceId={sampleSpace.id}
space={sampleSpace}
routines={[]}
onOpenRun={() => undefined}
/>,
);
});
const overview = container.querySelector('[data-testid="project-overview"]');
expect(overview).not.toBeNull();
expect(overview?.textContent).toContain("Routines");
expect(overview?.textContent).toContain(
"Just ask in the chat whenever something should happen regularly.",
);
expect(container.querySelector('[data-testid="routine-list-row"]')).toBeNull();
});
it("renders existing routines with a toggle to quickly turn them on and off", () => {
const onToggleRoutineActive = vi.fn();
const onOpenRoutine = vi.fn();
act(() => {
root.render(
<ProjectOverview
spaceId={sampleSpace.id}
space={sampleSpace}
routines={[sampleRoutine]}
onToggleRoutineActive={onToggleRoutineActive}
onOpenRoutine={onOpenRoutine}
onOpenRun={() => undefined}
/>,
);
});
const row = container.querySelector('[data-testid="routine-list-row"]');
expect(row).not.toBeNull();
expect(row?.textContent).toContain("Morning check-in");
const toggle = container.querySelector(
'[data-testid="routine-list-active-toggle"]',
) as HTMLElement | null;
expect(toggle).not.toBeNull();
expect(toggle?.getAttribute("aria-checked")).toBe("true");
act(() => {
toggle?.click();
});
expect(onToggleRoutineActive).toHaveBeenCalledTimes(1);
expect(onToggleRoutineActive).toHaveBeenCalledWith(sampleRoutine, false);
const openButton = row?.querySelector("button") as HTMLButtonElement | null;
act(() => {
openButton?.click();
});
expect(onOpenRoutine).toHaveBeenCalledTimes(1);
expect(onOpenRoutine).toHaveBeenCalledWith(sampleRoutine);
});
});

View File

@ -22,6 +22,12 @@ export function ProjectOverview({
spaceId, spaceId,
space, space,
coordinator, coordinator,
routines = [],
runningRoutineId,
togglingRoutineId,
onToggleRoutineActive,
onOpenRoutine,
onStopRun,
onOpenRun, onOpenRun,
onOpenBot, onOpenBot,
onOpenNewInquiry, onOpenNewInquiry,
@ -30,6 +36,12 @@ export function ProjectOverview({
spaceId: string; spaceId: string;
space?: Space; space?: Space;
coordinator?: { threadId: string; botId?: string }; coordinator?: { threadId: string; botId?: string };
routines?: readonly Routine[];
runningRoutineId?: string | null;
togglingRoutineId?: string | null;
onToggleRoutineActive?: (routine: Routine, active: boolean) => void;
onOpenRoutine?: (routine: Routine) => void;
onStopRun?: () => void;
onOpenRun: (run: RunActivityRow) => void; onOpenRun: (run: RunActivityRow) => void;
onOpenBot?: (botId: string) => void; onOpenBot?: (botId: string) => void;
onOpenNewInquiry?: () => void; onOpenNewInquiry?: () => void;
@ -71,6 +83,14 @@ export function ProjectOverview({
const gitRemote = space?.workspace?.git?.remoteUrl; const gitRemote = space?.workspace?.git?.remoteUrl;
const goal = space?.goal; const goal = space?.goal;
const projectBots = space?.bots ?? []; const projectBots = space?.bots ?? [];
const coordinatorWorking =
projectBots.some(
(member) =>
member.status &&
member.status !== "idle" &&
member.status !== "ready" &&
member.status !== "done",
) || activity.active.some((row) => row.spaceId === spaceId);
return ( return (
<div <div
@ -237,8 +257,48 @@ export function ProjectOverview({
) : null} ) : null}
</div> </div>
) : isProjectSpace ? ( ) : isProjectSpace ? (
<div className="rounded-xl border border-border/60 bg-card/30 px-3.5 py-3 text-ui-body-sm text-muted-foreground"> coordinatorWorking ? (
<Trans>No runs yet</Trans> <div className="flex items-center gap-2 rounded-xl border border-border/60 bg-card/30 px-3.5 py-3 text-ui-body-sm text-foreground">
<span aria-hidden="true" className="size-2 rounded-full bg-warning animate-pulse" />
<Trans>Analyzing project…</Trans>
</div>
) : (
<div className="rounded-xl border border-border/60 bg-card/30 px-3.5 py-3 text-ui-body-sm text-muted-foreground">
<Trans>No runs yet</Trans>
</div>
)
) : null}
{isProjectSpace ? (
<div className="space-y-2">
<div className="flex items-center justify-between px-1">
<span className="text-ui-label font-semibold uppercase tracking-wider text-muted-foreground">
<Trans>Routines</Trans>
</span>
</div>
{routines.length > 0 ? (
<div className="rounded-xl border border-border/60 bg-card/30 p-1.5 space-y-0.5">
{routines.map((routine) => (
<RoutineListRow
key={routine.id}
routine={routine}
running={runningRoutineId === routine.id}
togglingActive={togglingRoutineId === routine.id}
onActiveChange={(next) => onToggleRoutineActive?.(routine, next)}
onOpen={() => onOpenRoutine?.(routine)}
onStop={() => onStopRun?.()}
/>
))}
</div>
) : (
<div className="flex items-center gap-2 rounded-xl border border-border/60 bg-card/30 px-3.5 py-2.5 text-ui-body-sm text-muted-foreground">
<Clock size={14} className="shrink-0" />
<span>
<Trans>Just ask in the chat whenever something should happen regularly.</Trans>
</span>
</div>
)}
</div> </div>
) : null} ) : null}
</div> </div>
@ -430,7 +490,7 @@ export function AgentOverview({
<div className="flex items-center gap-2 rounded-xl border border-border/60 bg-card/30 px-3.5 py-2.5 text-ui-body-sm text-muted-foreground"> <div className="flex items-center gap-2 rounded-xl border border-border/60 bg-card/30 px-3.5 py-2.5 text-ui-body-sm text-muted-foreground">
<Clock size={14} className="shrink-0" /> <Clock size={14} className="shrink-0" />
<span> <span>
<Trans>On a schedule</Trans> <Trans>Just ask in the chat whenever something should happen regularly.</Trans>
</span> </span>
</div> </div>
)} )}