feat(web): show routines with quick toggle in project overview sidebar
This commit is contained in:
parent
f820c75632
commit
ac9fcce0fb
@ -386,10 +386,6 @@ msgstr "{title}, {label}"
|
||||
msgid "{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/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "Executor hinzufügen"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr "Ziel hinzufügen"
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "Immer erlaubt"
|
||||
msgid "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
|
||||
msgid "Answer"
|
||||
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."
|
||||
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
|
||||
msgid "Bow"
|
||||
msgstr "Schleife"
|
||||
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
|
||||
msgstr "Das sehe ich in den Logs…"
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "Hallo, so klinge ich, wenn ich Antworten vorlese."
|
||||
msgid "Hi, this is how I'll sound when we talk."
|
||||
msgstr "Hallo, so klinge ich, wenn wir miteinander sprechen."
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr "Bots ausblenden"
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "Zur neuesten Nachricht springen"
|
||||
msgid "Jump to replied message"
|
||||
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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "Keine Ergebnisse"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr "Noch keine Ausführungen"
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "Benachrichtigungen"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "Jetzt"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr "Privater Arbeitsbereich mit eigenen Bots und Gruppen."
|
||||
msgid "Project"
|
||||
msgstr "Projekt"
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr "Projekt · Sessions & Ordner"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr "Lese den Stacktrace…"
|
||||
msgid "Ready"
|
||||
msgstr "Bereit"
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr "Bereit"
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr "Denkaufwand"
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr "Nur abrufen"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "Kürzlich"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr "Rund"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "Routine"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "Routinen"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr "Ausführen um"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr "Ausführungsverlauf"
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "Mehr anzeigen"
|
||||
msgid "Show password"
|
||||
msgstr "Passwort anzeigen"
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "Show settings"
|
||||
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/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "Team"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr "Arbeitskanal offen — leg los."
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr "Arbeitet"
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "Gestern"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "Du"
|
||||
|
||||
@ -6077,8 +6093,8 @@ msgid "Your name"
|
||||
msgstr "Dein Name"
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Your Oo reads replies aloud when this is on."
|
||||
msgstr "Wenn das an ist, liest dein Oo Antworten vor."
|
||||
msgid "Your Oo talks with you naturally when this is on."
|
||||
msgstr "Wenn das an ist, spricht dein Oo ganz natürlich mit dir."
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
msgid "Your Oo will communicate in this language. You can change it later."
|
||||
|
||||
@ -386,10 +386,6 @@ msgstr "{title}, {label}"
|
||||
msgid "{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/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "Add Executor"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr "Add goal"
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "Always allowed"
|
||||
msgid "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
|
||||
msgid "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."
|
||||
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
|
||||
msgid "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…"
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "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 we talk."
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr "Hide bots"
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "Jump to latest"
|
||||
msgid "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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "No results"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr "No runs yet"
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "Notifications"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "Now"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr "Private workspace with its own bots and groups."
|
||||
msgid "Project"
|
||||
msgstr "Project"
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr "Project · sessions & folders"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr "Reading the stack trace…"
|
||||
msgid "Ready"
|
||||
msgstr "Ready"
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr "Ready"
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr "Reasoning effort"
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr "Recall only"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "Recent"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr "Round"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "Routine"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "Routines"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr "Run at"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr "Run history"
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "Show more"
|
||||
msgid "Show password"
|
||||
msgstr "Show password"
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "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/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "Team"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr "Work channel open — go ahead."
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr "Working"
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "Yesterday"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "You"
|
||||
|
||||
@ -6077,8 +6093,8 @@ msgid "Your name"
|
||||
msgstr "Your name"
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Your Oo reads replies aloud when this is on."
|
||||
msgstr "Your Oo reads replies aloud when this is on."
|
||||
msgid "Your Oo talks with you naturally when this is on."
|
||||
msgstr "Your Oo talks with you naturally when this is on."
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
msgid "Your Oo will communicate in this language. You can change it later."
|
||||
|
||||
@ -386,10 +386,6 @@ msgstr "{title}, {label}"
|
||||
msgid "{toolCount, plural, one {# tool} other {# tools}}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "{workingBotName} is working"
|
||||
msgstr "{workingBotName} está trabajando"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "Agregar Executor"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr ""
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "Siempre permitido"
|
||||
msgid "Analysiert die Aufgabe und führt Tools aus…"
|
||||
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
|
||||
msgid "Answer"
|
||||
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."
|
||||
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
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "Hola, así sonaré cuando lea las respuestas en voz alta."
|
||||
msgid "Hi, this is how I'll sound when we talk."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr ""
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "Ir al más reciente"
|
||||
msgid "Jump to replied message"
|
||||
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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "Sin resultados"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr "Aún no hay ejecuciones"
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "Notificaciones"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "Ahora"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr ""
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr ""
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr "Esfuerzo de razonamiento"
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "Recientes"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "Rutina"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "Rutinas"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr "Ejecutar a las"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr "Historial de ejecuciones"
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "Mostrar más"
|
||||
msgid "Show password"
|
||||
msgstr "Mostrar contraseña"
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "Show settings"
|
||||
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/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "Equipo"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr ""
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "Ayer"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "Tú"
|
||||
|
||||
@ -6077,7 +6093,7 @@ msgid "Your name"
|
||||
msgstr "Tu nombre"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
|
||||
@ -386,10 +386,6 @@ msgstr "{title}, {label}"
|
||||
msgid "{toolCount, plural, one {# tool} other {# tools}}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "{workingBotName} is working"
|
||||
msgstr "{workingBotName} काम कर रहा है"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "Executor जोड़ें"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr ""
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "हमेशा अनुमत"
|
||||
msgid "Analysiert die Aufgabe und führt Tools aus…"
|
||||
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
|
||||
msgid "Answer"
|
||||
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."
|
||||
msgstr "बॉट डिफ़ॉल्ट रूप से बिना पूछे कार्रवाई करते हैं। अपवाद तभी जोड़ें जब आप किसी प्रकार की कार्रवाई की पहले समीक्षा करना चाहते हों।"
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Bots are working"
|
||||
msgstr "बॉट काम कर रहे हैं"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "नमस्ते, उत्तर पढ़कर सुनाते समय मेरी आवाज़ ऐसी होगी।"
|
||||
msgid "Hi, this is how I'll sound when we talk."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr ""
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "नवीनतम संदेश पर जाएँ"
|
||||
msgid "Jump to replied message"
|
||||
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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "कोई परिणाम नहीं"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr ""
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "सूचनाएं"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "अभी"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr ""
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr ""
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr "रीज़निंग प्रयास"
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "हाल के"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "रूटीन"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "रूटीन्स"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr ""
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "और दिखाएँ"
|
||||
msgid "Show password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "Show settings"
|
||||
msgstr "सेटिंग्स दिखाएं"
|
||||
@ -5398,6 +5411,7 @@ msgstr "सिखाना जारी है। नया संदेश भ
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "टीम"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr ""
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "कल"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "आप"
|
||||
|
||||
@ -6077,7 +6093,7 @@ msgid "Your name"
|
||||
msgstr "आपका नाम"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
|
||||
@ -386,10 +386,6 @@ msgstr "{title}, {label}"
|
||||
msgid "{toolCount, plural, one {# tool} other {# tools}}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "{workingBotName} is working"
|
||||
msgstr "{workingBotName} 작업 중"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "Executor 추가"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr ""
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "항상 허용됨"
|
||||
msgid "Analysiert die Aufgabe und führt Tools aus…"
|
||||
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
|
||||
msgid "Answer"
|
||||
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."
|
||||
msgstr "Bot은 기본적으로 묻지 않고 작업합니다. 먼저 확인하고 싶은 작업만 예외로 추가하세요."
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Bots are working"
|
||||
msgstr "봇 작업 중"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "안녕하세요. 답변을 소리 내어 읽을 때 이런 목소리로 들립니다."
|
||||
msgid "Hi, this is how I'll sound when we talk."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr ""
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "최신 메시지로 이동"
|
||||
msgid "Jump to replied message"
|
||||
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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "검색 결과가 없습니다"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr "아직 실행 기록이 없습니다"
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "알림"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "지금"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr ""
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr ""
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr "추론 강도"
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "최근"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "자동 실행"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "자동 실행"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr "실행 시간"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr "실행 기록"
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "더 보기"
|
||||
msgid "Show password"
|
||||
msgstr "비밀번호 표시"
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "Show settings"
|
||||
msgstr "설정 보기"
|
||||
@ -5398,6 +5411,7 @@ msgstr "작업을 가르치는 중입니다. 새 메시지를 보내려면 먼
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "팀 공용"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr ""
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "어제"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "나"
|
||||
|
||||
@ -6077,7 +6093,7 @@ msgid "Your name"
|
||||
msgstr "이름"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
|
||||
@ -386,10 +386,6 @@ msgstr "{title}, {label}"
|
||||
msgid "{toolCount, plural, one {# tool} other {# tools}}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "{workingBotName} is working"
|
||||
msgstr "{workingBotName} está trabalhando"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "Adicionar Executor"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr ""
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "Sempre permitido"
|
||||
msgid "Analysiert die Aufgabe und führt Tools aus…"
|
||||
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
|
||||
msgid "Answer"
|
||||
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."
|
||||
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
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "Olá, é assim que vou soar quando ler as respostas em voz alta."
|
||||
msgid "Hi, this is how I'll sound when we talk."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr ""
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "Ir para a mensagem mais recente"
|
||||
msgid "Jump to replied message"
|
||||
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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "Nenhum resultado"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr ""
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "Notificações"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "Agora"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr ""
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr ""
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr "Esforço de raciocínio"
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "Recente"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "Rotina"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "Rotinas"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr ""
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "Mostrar mais"
|
||||
msgid "Show password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "Show settings"
|
||||
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/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "Equipe"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr ""
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "Ontem"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "Você"
|
||||
|
||||
@ -6077,7 +6093,7 @@ msgid "Your name"
|
||||
msgstr "O seu nome"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
|
||||
@ -386,10 +386,6 @@ msgstr "{title}, {label}"
|
||||
msgid "{toolCount, plural, one {# tool} other {# tools}}"
|
||||
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/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "Добавить Executor"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr ""
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "Всегда разрешено"
|
||||
msgid "Analysiert die Aufgabe und führt Tools aus…"
|
||||
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
|
||||
msgid "Answer"
|
||||
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."
|
||||
msgstr "По умолчанию боты действуют, не спрашивая. Добавляйте исключение только в том случае, если вы хотите сначала просмотреть тип действия."
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Bots are working"
|
||||
msgstr "Боты работают"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "Привет, вот как я буду звучать, когда буду читать ответы вслух."
|
||||
msgid "Hi, this is how I'll sound when we talk."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr "Скрыть ботов"
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "Перейти к последнему"
|
||||
msgid "Jump to replied message"
|
||||
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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "Нет результатов"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr "Запусков пока нет"
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "Уведомления"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "Сейчас"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr "Приватное пространство со своими ботам
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr ""
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr ""
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "Недавние"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "Задача"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "Задачи"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr "Запустить в"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr "История запуска"
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "Показать ещё"
|
||||
msgid "Show password"
|
||||
msgstr "Показать пароль"
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "Show settings"
|
||||
msgstr "Показать настройки"
|
||||
@ -5398,6 +5411,7 @@ msgstr "Обучение в процессе. Прекратите обучен
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "Команда"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr ""
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "Вчера"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "Вы"
|
||||
|
||||
@ -6077,7 +6093,7 @@ msgid "Your name"
|
||||
msgstr "Ваше имя"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
|
||||
@ -386,10 +386,6 @@ msgstr "{title}, {label}"
|
||||
msgid "{toolCount, plural, one {# tool} other {# tools}}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "{workingBotName} is working"
|
||||
msgstr "{workingBotName} çalışıyor"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "Executor ekle"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr ""
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "Her zaman izinli"
|
||||
msgid "Analysiert die Aufgabe und führt Tools aus…"
|
||||
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
|
||||
msgid "Answer"
|
||||
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."
|
||||
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
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "Merhaba, yanıtları sesli okuduğumda böyle duyulacağım."
|
||||
msgid "Hi, this is how I'll sound when we talk."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr ""
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "En son mesaja git"
|
||||
msgid "Jump to replied message"
|
||||
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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "Sonuç yok"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr ""
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "Bildirimler"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "Şimdi"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr ""
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr ""
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr "Akıl yürütme düzeyi"
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "Son"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "Rutin"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "Rutinler"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr ""
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "Daha fazla göster"
|
||||
msgid "Show password"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "Show settings"
|
||||
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/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "Takım"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr ""
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "Dün"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "Sen"
|
||||
|
||||
@ -6077,7 +6093,7 @@ msgid "Your name"
|
||||
msgstr "Adın"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
|
||||
@ -386,10 +386,6 @@ msgstr "{title},{label}"
|
||||
msgid "{toolCount, plural, one {# tool} other {# tools}}"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "{workingBotName} is working"
|
||||
msgstr "{workingBotName} 正在工作"
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "/Users/you/projects/acme"
|
||||
@ -549,6 +545,7 @@ msgid "Add Executor"
|
||||
msgstr "添加 Executor"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Add goal"
|
||||
msgstr ""
|
||||
|
||||
@ -737,6 +734,14 @@ msgstr "始终允许"
|
||||
msgid "Analysiert die Aufgabe und führt Tools aus…"
|
||||
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
|
||||
msgid "Answer"
|
||||
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."
|
||||
msgstr "默认情况下 Bot 会直接执行。只有当你想先审核某类操作时,才添加例外。"
|
||||
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "Bots are working"
|
||||
msgstr "Bot 正在工作"
|
||||
|
||||
#: src/components/OoAtelier.tsx
|
||||
msgid "Bow"
|
||||
msgstr ""
|
||||
@ -2983,10 +2984,11 @@ msgid "Here's what I see in the logs…"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/VoiceSettingsOverlay.tsx
|
||||
msgid "Hi, this is how I'll sound when I read replies out loud."
|
||||
msgstr "你好,这是我朗读回复时的声音。"
|
||||
msgid "Hi, this is how I'll sound when we talk."
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/sidebar-header.tsx
|
||||
msgid "Hide bots"
|
||||
msgstr ""
|
||||
|
||||
@ -3174,6 +3176,10 @@ msgstr "跳到最新"
|
||||
msgid "Jump to replied message"
|
||||
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/ProjectSessionTimeline.tsx
|
||||
msgid "just now"
|
||||
@ -3899,6 +3905,7 @@ msgid "No results"
|
||||
msgstr "无结果"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "No runs yet"
|
||||
msgstr "还没有运行记录"
|
||||
|
||||
@ -3957,6 +3964,7 @@ msgid "Notifications"
|
||||
msgstr "通知"
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Now"
|
||||
msgstr "现在"
|
||||
|
||||
@ -4288,10 +4296,6 @@ msgstr ""
|
||||
msgid "Project"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/Shell.tsx
|
||||
msgid "Project · sessions & folders"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/dialogs.tsx
|
||||
#: src/pages/shell/project-look-dialog.tsx
|
||||
msgid "Project folder"
|
||||
@ -4399,6 +4403,10 @@ msgstr ""
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ModelSettingsOverlay.tsx
|
||||
msgid "Reasoning effort"
|
||||
msgstr "推理强度"
|
||||
@ -4412,6 +4420,7 @@ msgid "Recall only"
|
||||
msgstr ""
|
||||
|
||||
#: src/pages/ActivityList.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Recent"
|
||||
msgstr "最近"
|
||||
|
||||
@ -4700,11 +4709,13 @@ msgstr ""
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/routine-event-line.tsx
|
||||
msgid "Routine"
|
||||
msgstr "例行任务"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Routines"
|
||||
msgstr "例行任务"
|
||||
|
||||
@ -4718,6 +4729,7 @@ msgid "Run at"
|
||||
msgstr "运行时间"
|
||||
|
||||
#: src/pages/RoutineEditor.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Run history"
|
||||
msgstr "运行记录"
|
||||
|
||||
@ -5037,6 +5049,7 @@ msgstr "显示更多"
|
||||
msgid "Show password"
|
||||
msgstr "显示密码"
|
||||
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
#: src/pages/shell/side-panel-header.tsx
|
||||
msgid "Show settings"
|
||||
msgstr "显示设置"
|
||||
@ -5398,6 +5411,7 @@ msgstr "正在示范,发送新消息前请先停止示范。"
|
||||
|
||||
#: src/pages/ProjectSessionTimeline.tsx
|
||||
#: src/pages/shell/bot-panel.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Team"
|
||||
msgstr "团队"
|
||||
|
||||
@ -5995,6 +6009,7 @@ msgid "Work channel open — go ahead."
|
||||
msgstr ""
|
||||
|
||||
#: src/components/stage/OoStage.tsx
|
||||
#: src/pages/shell/project-overview.tsx
|
||||
msgid "Working"
|
||||
msgstr ""
|
||||
|
||||
@ -6037,6 +6052,7 @@ msgstr "昨天"
|
||||
#: src/components/UserProfileSettings.tsx
|
||||
#: src/components/voice/VoiceStage.tsx
|
||||
#: src/pages/Shell.tsx
|
||||
#: src/pages/shell/transcript.tsx
|
||||
msgid "You"
|
||||
msgstr "你"
|
||||
|
||||
@ -6077,7 +6093,7 @@ msgid "Your name"
|
||||
msgstr "你的名字"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: src/pages/Onboarding.tsx
|
||||
|
||||
@ -435,6 +435,9 @@ export function ShellPage() {
|
||||
} | null>(null);
|
||||
const [routines, setRoutines] = useState<Routine[]>([]);
|
||||
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 routineActiveToggleRequest = useRef(0);
|
||||
const [taughtSkills, setTaughtSkills] = useState<TaughtSkill[]>([]);
|
||||
@ -718,6 +721,61 @@ export function ShellPage() {
|
||||
[active?.id, groupId, inGroup, pendingAttachments],
|
||||
);
|
||||
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 recordingSkill = activeTaughtSkills.find((skill) => skill.status === "recording") ?? null;
|
||||
const routeBotId = useRef<string | undefined>(botId);
|
||||
@ -903,6 +961,11 @@ export function ShellPage() {
|
||||
commitComputer(null);
|
||||
setRoutines([]);
|
||||
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.
|
||||
if (
|
||||
stickToEnd &&
|
||||
@ -962,6 +1025,7 @@ export function ShellPage() {
|
||||
if (routines) {
|
||||
setRoutines(routines);
|
||||
setRoutinesBotId(id);
|
||||
void refreshProjectRoutines([id]);
|
||||
}
|
||||
if (skills) {
|
||||
setTaughtSkills(skills);
|
||||
@ -1409,6 +1473,16 @@ export function ShellPage() {
|
||||
if (blocks.some((block) => block.kind === "project_created")) {
|
||||
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") {
|
||||
ooSound.play("need-you");
|
||||
@ -2689,7 +2763,10 @@ export function ShellPage() {
|
||||
const setRoutineActive = useCallback(
|
||||
async (routine: Routine, active: boolean) => {
|
||||
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 previousActive = routine.active;
|
||||
setRoutineActiveToggleId(routine.id);
|
||||
@ -2698,16 +2775,32 @@ export function ShellPage() {
|
||||
? current.map((item) => (item.id === routine.id ? { ...item, active } : item))
|
||||
: current,
|
||||
);
|
||||
setProjectRoutines((current) =>
|
||||
current.map((item) => (item.id === routine.id ? { ...item, active } : item)),
|
||||
);
|
||||
try {
|
||||
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) =>
|
||||
routinesBotId === botId
|
||||
? current.map((item) => (item.id === saved.id ? saved : item))
|
||||
: current,
|
||||
);
|
||||
setProjectRoutines((current) =>
|
||||
current.map((item) => (item.id === saved.id ? saved : item)),
|
||||
);
|
||||
} catch {
|
||||
if (routineActiveToggleRequest.current !== request || activeBotId.current !== botId) return;
|
||||
if (
|
||||
routineActiveToggleRequest.current !== request ||
|
||||
(activeBotId.current !== botId && !activeProjectSpaceIdRef.current)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
setRoutines((current) =>
|
||||
routinesBotId === botId
|
||||
? current.map((item) =>
|
||||
@ -2715,6 +2808,11 @@ export function ShellPage() {
|
||||
)
|
||||
: current,
|
||||
);
|
||||
setProjectRoutines((current) =>
|
||||
current.map((item) =>
|
||||
item.id === routine.id ? { ...item, active: previousActive } : item,
|
||||
),
|
||||
);
|
||||
} finally {
|
||||
if (routineActiveToggleRequest.current === request) {
|
||||
setRoutineActiveToggleId((current) => (current === routine.id ? null : current));
|
||||
@ -4127,6 +4225,16 @@ export function ShellPage() {
|
||||
: inProject && !panel && canvasTab === "sandbox"
|
||||
? "overview"
|
||||
: 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 = (
|
||||
<aside
|
||||
@ -4198,7 +4306,7 @@ export function ShellPage() {
|
||||
/>
|
||||
) : 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">
|
||||
<ProjectOverview
|
||||
spaceId={activeSpace.id}
|
||||
@ -4211,6 +4319,24 @@ export function ShellPage() {
|
||||
}
|
||||
: 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) =>
|
||||
openSpaceChat(
|
||||
run.spaceId,
|
||||
@ -4225,7 +4351,7 @@ export function ShellPage() {
|
||||
/>
|
||||
</div>
|
||||
) : !inProject &&
|
||||
panel !== "settings" &&
|
||||
!isOverlayPanel &&
|
||||
effectiveTab === "overview" &&
|
||||
(active ?? coordinatorBot) ? (
|
||||
<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")}
|
||||
/>
|
||||
</div>
|
||||
) : panel === "browser" || (effectiveTab === "browser" && panel !== "settings") ? (
|
||||
) : panel === "browser" || (effectiveTab === "browser" && !isOverlayPanel) ? (
|
||||
<div className="flex-1 min-h-0 flex flex-col">
|
||||
<InAppBrowser
|
||||
onClose={() => {
|
||||
@ -4297,7 +4423,7 @@ export function ShellPage() {
|
||||
}}
|
||||
/>
|
||||
</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]">
|
||||
{(active ?? coordinatorBot) ? (
|
||||
<WorkspaceFilesView botId={(active ?? coordinatorBot)!.id} className="mt-0" />
|
||||
@ -4431,7 +4557,7 @@ export function ShellPage() {
|
||||
}
|
||||
/>
|
||||
) : null}
|
||||
{panel === "routine" && active ? (
|
||||
{panel === "routine" && routineTargetBot ? (
|
||||
<RoutineEditor
|
||||
draft={routineDraft}
|
||||
onChange={setRoutineDraft}
|
||||
@ -4440,28 +4566,29 @@ export function ShellPage() {
|
||||
webhook={{
|
||||
path:
|
||||
typeof window !== "undefined"
|
||||
? `${window.location.origin}/api/v1/bots/${active.id}/webhook`
|
||||
: `/api/v1/bots/${active.id}/webhook`,
|
||||
? `${window.location.origin}/api/v1/bots/${routineTargetBot.id}/webhook`
|
||||
: `/api/v1/bots/${routineTargetBot.id}/webhook`,
|
||||
secret: routineWebhookSecret,
|
||||
configured: active.webhookConfigured || Boolean(routineWebhookSecret),
|
||||
configured:
|
||||
routineTargetBot.webhookConfigured || Boolean(routineWebhookSecret),
|
||||
}}
|
||||
githubPath={
|
||||
typeof window !== "undefined"
|
||||
? `${window.location.origin}/api/v1/bots/${active.id}/github`
|
||||
: `/api/v1/bots/${active.id}/github`
|
||||
? `${window.location.origin}/api/v1/bots/${routineTargetBot.id}/github`
|
||||
: `/api/v1/bots/${routineTargetBot.id}/github`
|
||||
}
|
||||
messageProviders={messagingProviders}
|
||||
saving={savingRoutine}
|
||||
running={runningRoutine}
|
||||
error={routineError}
|
||||
onBack={() => setPanel("computer")}
|
||||
onBack={() => setPanel(inProject ? null : "computer")}
|
||||
onClose={() => setPanel(null)}
|
||||
onEnsureWebhook={async () => {
|
||||
await ensureWebhookSecret(active.id);
|
||||
await ensureWebhookSecret(routineTargetBot.id);
|
||||
}}
|
||||
onSave={async () => {
|
||||
if (routineSavePending.current) return;
|
||||
const targetBotId = active.id;
|
||||
const targetBotId = routineTargetBot.id;
|
||||
const targetRoutine = editingRoutine;
|
||||
if (targetRoutine && targetRoutine.botId !== targetBotId) return;
|
||||
if (
|
||||
@ -4480,7 +4607,7 @@ export function ShellPage() {
|
||||
try {
|
||||
if (
|
||||
(routineDraft.webhookEnabled || routineDraft.githubEnabled) &&
|
||||
!active.webhookConfigured &&
|
||||
!routineTargetBot.webhookConfigured &&
|
||||
!routineWebhookSecret
|
||||
) {
|
||||
await ensureWebhookSecret(targetBotId);
|
||||
@ -4533,23 +4660,34 @@ export function ShellPage() {
|
||||
}
|
||||
if (
|
||||
routineSaveRequest.current === saveRequest &&
|
||||
activeBotId.current === targetBotId
|
||||
(activeBotId.current === targetBotId ||
|
||||
Boolean(activeProjectSpaceIdRef.current))
|
||||
) {
|
||||
setEditingRoutine(saved);
|
||||
setRoutineDraft(draftFromRoutine(saved));
|
||||
setRoutines((current) =>
|
||||
routinesBotId === targetBotId || routinesBotId === null
|
||||
? current.some((item) => item.id === saved.id)
|
||||
if (activeBotId.current === targetBotId) {
|
||||
setRoutines((current) =>
|
||||
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, saved]
|
||||
: current,
|
||||
);
|
||||
setRoutinesBotId(targetBotId);
|
||||
: [...current, saved],
|
||||
);
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
if (
|
||||
routineSaveRequest.current !== saveRequest ||
|
||||
activeBotId.current !== targetBotId
|
||||
(activeBotId.current !== targetBotId &&
|
||||
!activeProjectSpaceIdRef.current)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
@ -4563,15 +4701,20 @@ export function ShellPage() {
|
||||
}
|
||||
if (
|
||||
routineSaveRequest.current !== saveRequest ||
|
||||
activeBotId.current !== targetBotId
|
||||
(activeBotId.current !== targetBotId &&
|
||||
!activeProjectSpaceIdRef.current)
|
||||
) {
|
||||
return;
|
||||
}
|
||||
await refreshThread(targetBotId).catch(() => undefined);
|
||||
if (activeBotId.current === targetBotId) {
|
||||
await refreshThread(targetBotId).catch(() => undefined);
|
||||
} else {
|
||||
await refreshProjectRoutines([targetBotId]).catch(() => undefined);
|
||||
}
|
||||
}}
|
||||
onTestRun={async () => {
|
||||
if (routineRunPending.current) return;
|
||||
const targetBotId = active.id;
|
||||
const targetBotId = routineTargetBot.id;
|
||||
const targetRoutine = editingRoutine;
|
||||
if (!targetRoutine) return;
|
||||
routineRunPending.current = true;
|
||||
@ -4579,9 +4722,16 @@ export function ShellPage() {
|
||||
setRoutineError(null);
|
||||
try {
|
||||
await rpc.routines.testRun({ routineId: targetRoutine.id });
|
||||
await refreshThread(targetBotId);
|
||||
} catch (error) {
|
||||
if (activeBotId.current === targetBotId) {
|
||||
await refreshThread(targetBotId);
|
||||
} else if (activeGroupId.current) {
|
||||
await refreshGroupThread(activeGroupId.current);
|
||||
}
|
||||
} catch (error) {
|
||||
if (
|
||||
activeBotId.current === targetBotId ||
|
||||
activeProjectSpaceIdRef.current
|
||||
) {
|
||||
setRoutineError(
|
||||
error instanceof Error ? error.message : t`Could not run routine`,
|
||||
);
|
||||
@ -4596,7 +4746,7 @@ export function ShellPage() {
|
||||
setDeleteRoutineTarget(editingRoutine);
|
||||
return;
|
||||
}
|
||||
setPanel("computer");
|
||||
setPanel(inProject ? null : "computer");
|
||||
}}
|
||||
/>
|
||||
) : null}
|
||||
@ -4952,10 +5102,15 @@ export function ShellPage() {
|
||||
if (newSpaceDialogVariant === "project") {
|
||||
try {
|
||||
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({
|
||||
groupId: main.groupId,
|
||||
text: input.goal.trim(),
|
||||
text: kickoff,
|
||||
});
|
||||
}
|
||||
window.location.assign(`/app/g/${main.groupId}`);
|
||||
@ -5027,6 +5182,11 @@ export function ShellPage() {
|
||||
await rpc.routines.remove({ routineId: target.id });
|
||||
setDeleteRoutineTarget(null);
|
||||
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;
|
||||
await refreshThread(target.botId);
|
||||
if (activeBotId.current === target.botId) setPanel("computer");
|
||||
|
||||
142
apps/web/src/pages/shell/project-overview.test.tsx
Normal file
142
apps/web/src/pages/shell/project-overview.test.tsx
Normal 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);
|
||||
});
|
||||
});
|
||||
@ -22,6 +22,12 @@ export function ProjectOverview({
|
||||
spaceId,
|
||||
space,
|
||||
coordinator,
|
||||
routines = [],
|
||||
runningRoutineId,
|
||||
togglingRoutineId,
|
||||
onToggleRoutineActive,
|
||||
onOpenRoutine,
|
||||
onStopRun,
|
||||
onOpenRun,
|
||||
onOpenBot,
|
||||
onOpenNewInquiry,
|
||||
@ -30,6 +36,12 @@ export function ProjectOverview({
|
||||
spaceId: string;
|
||||
space?: Space;
|
||||
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;
|
||||
onOpenBot?: (botId: string) => void;
|
||||
onOpenNewInquiry?: () => void;
|
||||
@ -71,6 +83,14 @@ export function ProjectOverview({
|
||||
const gitRemote = space?.workspace?.git?.remoteUrl;
|
||||
const goal = space?.goal;
|
||||
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 (
|
||||
<div
|
||||
@ -237,8 +257,48 @@ export function ProjectOverview({
|
||||
) : null}
|
||||
</div>
|
||||
) : isProjectSpace ? (
|
||||
<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>
|
||||
coordinatorWorking ? (
|
||||
<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>
|
||||
) : null}
|
||||
</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">
|
||||
<Clock size={14} className="shrink-0" />
|
||||
<span>
|
||||
<Trans>On a schedule</Trans>
|
||||
<Trans>Just ask in the chat whenever something should happen regularly.</Trans>
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user