From 1b5bf874f4ca9a2e55a23b0cf53f27718797af60 Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Tue, 22 Sep 2026 11:47:51 +0530 Subject: [PATCH 1/5] fix(desktop): stop the page watcher menu claiming nothing watches a page The menu asked the host service "which pages is this workspace watching?" and printed the answer as if it were "is anyone watching this page?". Those are different questions: PageWatchManager keeps its entries in one host's memory and list() filters them by workspaceId, while the badge on the page itself reads the org-wide watchedByAgent flag. A page watched by an agent in another workspace, on another machine, or in a cloud sandbox is absent from the local list, so the menu said "Nothing is watching this page" while the page header said an agent was. The menu now reads page.get's watch state alongside the host's list, with the same polling the web badge uses, and reports three states instead of two. A watcher this host runs keeps everything it had, including Stop watching. A watcher it cannot reach is named but read-only: clearing the org-wide flag from here would not touch the other host's entry, and its next heartbeat would set the flag straight back. Both mutations invalidate the cloud query on settle. Without that, a local Stop watching would leave the cached flag true and relabel the page as watched from elsewhere for up to thirty seconds. Fixes SUPER-2406 --- .../PageWatcherMenu/PageWatcherMenu.test.tsx | 140 ++++++++++++++++++ .../PageWatcherMenu/PageWatcherMenu.tsx | 34 ++++- packages/i18n/locales/cs/messages.po | 7 + packages/i18n/locales/de/messages.po | 7 + packages/i18n/locales/en/messages.po | 7 + packages/i18n/locales/es/messages.po | 7 + packages/i18n/locales/fr/messages.po | 7 + packages/i18n/locales/id/messages.po | 7 + packages/i18n/locales/it/messages.po | 7 + packages/i18n/locales/ja/messages.po | 7 + packages/i18n/locales/ko/messages.po | 7 + packages/i18n/locales/nl/messages.po | 7 + packages/i18n/locales/pl/messages.po | 7 + packages/i18n/locales/pt-BR/messages.po | 7 + packages/i18n/locales/ru/messages.po | 7 + packages/i18n/locales/tr/messages.po | 7 + packages/i18n/locales/vi/messages.po | 7 + packages/i18n/locales/zh-CN/messages.po | 7 + packages/i18n/locales/zh-TW/messages.po | 7 + 19 files changed, 291 insertions(+), 2 deletions(-) create mode 100644 apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.test.tsx diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.test.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.test.tsx new file mode 100644 index 00000000000..d15f49389ae --- /dev/null +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.test.tsx @@ -0,0 +1,140 @@ +import { + afterAll, + afterEach, + beforeEach, + describe, + expect, + mock, + test, +} from "bun:test"; +import { GlobalRegistrator } from "@happy-dom/global-registrator"; + +const alreadyRegistered = GlobalRegistrator.isRegistered; +if (!alreadyRegistered) GlobalRegistrator.register(); +( + globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean } +).IS_REACT_ACT_ENVIRONMENT = true; + +const PAGE_ID = "5d3f2a1e-0c7b-4a2d-9f11-6b8c0d4e7a52"; +const WORKSPACE_ID = "ws-local"; + +type Watcher = { pageId: string; terminalId: string; agentId: string | null }; +type CloudWatch = { watching: boolean; agentId: string | null }; + +let localWatchers: Watcher[] = []; +let cloudWatch: CloudWatch = { watching: false, agentId: null }; + +mock.module("renderer/hooks/host-service/usePageWatchers", () => ({ + usePageWatchers: () => + new Map(localWatchers.map((watcher) => [watcher.pageId, watcher])), +})); +mock.module("renderer/hooks/host-service/useTerminalAgentBindings", () => ({ + useTerminalAgentBindings: () => new Map(), +})); +mock.module("renderer/lib/cloud-trpc", () => ({ + cloudTrpc: { + useUtils: () => ({ page: { get: { invalidate: async () => {} } } }), + page: { get: { useQuery: () => ({ data: { watch: cloudWatch } }) } }, + }, +})); +mock.module("@superset/workspace-client", () => ({ + workspaceTrpc: { + pageWatch: { + assign: { useMutation: () => ({ mutate: () => {}, isPending: false }) }, + unwatch: { useMutation: () => ({ mutate: () => {}, isPending: false }) }, + }, + }, +})); + +const { act, cleanup, fireEvent, render, within } = await import( + "@testing-library/react" +); +const { PageWatcherMenu } = await import("./PageWatcherMenu"); + +afterEach(cleanup); +afterAll(async () => { + if (!alreadyRegistered) await GlobalRegistrator.unregister(); +}); + +beforeEach(() => { + localWatchers = []; + cloudWatch = { watching: false, agentId: null }; +}); + +async function openMenu() { + let view!: ReturnType; + await act(async () => { + view = render( + , + ); + }); + const ui = within(view.baseElement as HTMLElement); + await act(async () => { + fireEvent.pointerDown( + ui.getByRole("button"), + new Event("pointerdown", { bubbles: true }), + ); + }); + return ui; +} + +describe("a page watched by an agent in this workspace", () => { + beforeEach(() => { + localWatchers = [ + { pageId: PAGE_ID, terminalId: "term-1", agentId: "claude" }, + ]; + cloudWatch = { watching: true, agentId: "claude" }; + }); + + test("names the agent comments reach", async () => { + const ui = await openMenu(); + expect(ui.getByText("Comments go to this agent")).toBeDefined(); + }); + + test("offers to stop watching, because the watcher is ours to stop", async () => { + const ui = await openMenu(); + expect(ui.getByText("Stop watching")).toBeDefined(); + }); +}); + +describe("a page watched by an agent in another workspace", () => { + beforeEach(() => { + cloudWatch = { watching: true, agentId: "codex" }; + }); + + test("says so rather than claiming nothing is watching", async () => { + const ui = await openMenu(); + expect( + ui.getByText("Watched by an agent in another workspace"), + ).toBeDefined(); + expect(ui.queryByText("Nothing is watching this page")).toBeNull(); + }); + + test("names the watching agent on the trigger", async () => { + const ui = await openMenu(); + expect(ui.getByRole("button").textContent).toContain("codex"); + }); + + test("falls back to a generic name when the agent is unnamed", async () => { + cloudWatch = { watching: true, agentId: null }; + const ui = await openMenu(); + expect(ui.getByRole("button").textContent).toContain("An agent"); + }); + + test("does not offer to stop a watcher it cannot reach", async () => { + const ui = await openMenu(); + expect(ui.queryByText("Stop watching")).toBeNull(); + }); +}); + +describe("a page nothing is watching", () => { + test("says nothing is watching", async () => { + const ui = await openMenu(); + expect(ui.getByText("Nothing is watching this page")).toBeDefined(); + }); +}); diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx index b740735c0e4..4447b47d83b 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx @@ -17,8 +17,12 @@ import { Bot, Check, EyeOff } from "lucide-react"; import { useCallback, useState } from "react"; import { usePageWatchers } from "renderer/hooks/host-service/usePageWatchers"; import { useTerminalAgentBindings } from "renderer/hooks/host-service/useTerminalAgentBindings"; +import { cloudTrpc } from "renderer/lib/cloud-trpc"; import { StatusIndicator } from "renderer/screens/main/components/StatusIndicator"; +const WATCHING_REFRESH_MS = 30_000; +const IDLE_REFRESH_MS = 5 * 60_000; + interface PageWatcherMenuProps { workspaceId: string; pageId: string | undefined; @@ -35,13 +39,29 @@ export function PageWatcherMenu({ const { t } = useLingui(); const bindings = useTerminalAgentBindings(workspaceId); const watchers = usePageWatchers(workspaceId); + const cloudUtils = cloudTrpc.useUtils(); const assign = workspaceTrpc.pageWatch.assign.useMutation(); const unwatch = workspaceTrpc.pageWatch.unwatch.useMutation(); const [menuOpen, setMenuOpen] = useState(false); useFramePointerDown(useCallback(() => setMenuOpen(false), [])); + const cloudWatch = cloudTrpc.page.get.useQuery( + { id: pageId ?? "" }, + { + enabled: Boolean(pageId), + refetchInterval: (query) => + query.state.data?.watch.watching + ? WATCHING_REFRESH_MS + : IDLE_REFRESH_MS, + }, + ); + const watcher = pageId ? watchers.get(pageId) : undefined; + const elsewhere = + !watcher && cloudWatch.data?.watch.watching === true + ? cloudWatch.data.watch + : null; const running = [...bindings.values()] .filter((binding) => !binding.endedAt) @@ -65,6 +85,7 @@ export function PageWatcherMenu({ agentId, }, { + onSettled: () => cloudUtils.page.get.invalidate({ id: pageId }), onError: (error) => toast.error( t({ @@ -80,6 +101,7 @@ export function PageWatcherMenu({ unwatch.mutate( { pageId }, { + onSettled: () => cloudUtils.page.get.invalidate({ id: pageId }), onError: (error) => toast.error( t({ @@ -103,11 +125,17 @@ export function PageWatcherMenu({ })} disabled={assign.isPending || unwatch.isPending} > - {watcher ? ( + {watcher || elsewhere ? ( <> - {watcher.agentId ?? label(watcher.terminalId)} + {watcher + ? (watcher.agentId ?? label(watcher.terminalId)) + : (elsewhere?.agentId ?? + t({ + message: "An agent", + context: "page watcher with no known name", + }))} ) : ( @@ -119,6 +147,8 @@ export function PageWatcherMenu({ {watcher ? ( Comments go to this agent + ) : elsewhere ? ( + Watched by an agent in another workspace ) : ( Nothing is watching this page )} diff --git a/packages/i18n/locales/cs/messages.po b/packages/i18n/locales/cs/messages.po index d0afe091001..7e1f6cdc7b8 100644 --- a/packages/i18n/locales/cs/messages.po +++ b/packages/i18n/locales/cs/messages.po @@ -1913,6 +1913,10 @@ msgstr "Také: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Vždy víte, který agent vás potřebuje — oznámení vedou přímo na zablokovaného agenta." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Agent" + msgid "An agent completes multi-file changes end to end." msgstr "Agent dokončí změnu napříč více soubory od začátku do konce." @@ -16535,6 +16539,9 @@ msgstr "Varování" msgid "Warning occurred." msgstr "Došlo k varování." +msgid "Watched by an agent in another workspace" +msgstr "Sleduje ji agent v jiném pracovním prostoru" + msgid "Watchers" msgstr "Sledující" diff --git a/packages/i18n/locales/de/messages.po b/packages/i18n/locales/de/messages.po index 8e5849e4d22..46e3cf0dc5d 100644 --- a/packages/i18n/locales/de/messages.po +++ b/packages/i18n/locales/de/messages.po @@ -1913,6 +1913,10 @@ msgstr "Außerdem: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Du weißt immer, welcher Agent dich braucht — mit Benachrichtigungen, die direkt zum blockierten Agenten führen." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Ein Agent" + msgid "An agent completes multi-file changes end to end." msgstr "Ein Agent führt Änderungen über mehrere Dateien vollständig durch." @@ -16535,6 +16539,9 @@ msgstr "Warnung" msgid "Warning occurred." msgstr "Es gab eine Warnung." +msgid "Watched by an agent in another workspace" +msgstr "Wird von einem Agent in einem anderen Arbeitsbereich beobachtet" + msgid "Watchers" msgstr "Beobachter" diff --git a/packages/i18n/locales/en/messages.po b/packages/i18n/locales/en/messages.po index 7cf3ac40d09..c4a2af254e2 100644 --- a/packages/i18n/locales/en/messages.po +++ b/packages/i18n/locales/en/messages.po @@ -1913,6 +1913,10 @@ msgstr "Also: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "An agent" + msgid "An agent completes multi-file changes end to end." msgstr "An agent completes multi-file changes end to end." @@ -16535,6 +16539,9 @@ msgstr "Warning" msgid "Warning occurred." msgstr "Warning occurred." +msgid "Watched by an agent in another workspace" +msgstr "Watched by an agent in another workspace" + msgid "Watchers" msgstr "Watchers" diff --git a/packages/i18n/locales/es/messages.po b/packages/i18n/locales/es/messages.po index 5f259376a47..1e256f35251 100644 --- a/packages/i18n/locales/es/messages.po +++ b/packages/i18n/locales/es/messages.po @@ -1913,6 +1913,10 @@ msgstr "También: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Sabrás siempre qué agente te necesita, con notificaciones que llevan directamente al agente bloqueado." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Un agente" + msgid "An agent completes multi-file changes end to end." msgstr "Un agente completa cambios en varios archivos de principio a fin." @@ -16535,6 +16539,9 @@ msgstr "Advertencia" msgid "Warning occurred." msgstr "Se produjo una advertencia." +msgid "Watched by an agent in another workspace" +msgstr "Observada por un agente de otro espacio de trabajo" + msgid "Watchers" msgstr "Observadores" diff --git a/packages/i18n/locales/fr/messages.po b/packages/i18n/locales/fr/messages.po index f5dddc9241d..f8b6ca7098a 100644 --- a/packages/i18n/locales/fr/messages.po +++ b/packages/i18n/locales/fr/messages.po @@ -1913,6 +1913,10 @@ msgstr "Également : @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Sachez toujours quel agent a besoin de vous, grâce à des notifications qui mènent directement à l'agent bloqué." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Un agent" + msgid "An agent completes multi-file changes end to end." msgstr "Un agent mène des changements multi-fichiers de bout en bout." @@ -16535,6 +16539,9 @@ msgstr "Avertissement" msgid "Warning occurred." msgstr "Un avertissement s'est produit." +msgid "Watched by an agent in another workspace" +msgstr "Surveillée par un agent d'un autre espace de travail" + msgid "Watchers" msgstr "Observateurs" diff --git a/packages/i18n/locales/id/messages.po b/packages/i18n/locales/id/messages.po index 414bb052447..9cf185e8637 100644 --- a/packages/i18n/locales/id/messages.po +++ b/packages/i18n/locales/id/messages.po @@ -1913,6 +1913,10 @@ msgstr "Juga: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Selalu tahu agen mana yang membutuhkan Anda, dengan notifikasi yang langsung menuju agen yang terhambat." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Agen" + msgid "An agent completes multi-file changes end to end." msgstr "Agen menyelesaikan perubahan lintas file dari awal sampai akhir." @@ -16535,6 +16539,9 @@ msgstr "Warning" msgid "Warning occurred." msgstr "Terjadi peringatan." +msgid "Watched by an agent in another workspace" +msgstr "Diawasi oleh agen di workspace lain" + msgid "Watchers" msgstr "Pengamat" diff --git a/packages/i18n/locales/it/messages.po b/packages/i18n/locales/it/messages.po index ab43e9bcd8e..6880635cec3 100644 --- a/packages/i18n/locales/it/messages.po +++ b/packages/i18n/locales/it/messages.po @@ -1913,6 +1913,10 @@ msgstr "Anche: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Sai sempre quale agente ha bisogno di te, con notifiche che portano dritte all'agente bloccato." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Un agente" + msgid "An agent completes multi-file changes end to end." msgstr "Un agente completa modifiche su più file dall'inizio alla fine." @@ -16535,6 +16539,9 @@ msgstr "Avviso" msgid "Warning occurred." msgstr "Si è verificato un avviso." +msgid "Watched by an agent in another workspace" +msgstr "Osservata da un agente in un altro workspace" + msgid "Watchers" msgstr "Osservatori" diff --git a/packages/i18n/locales/ja/messages.po b/packages/i18n/locales/ja/messages.po index 40ab48153ee..6043b1cbfac 100644 --- a/packages/i18n/locales/ja/messages.po +++ b/packages/i18n/locales/ja/messages.po @@ -1913,6 +1913,10 @@ msgstr "その他: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "どのエージェントがあなたを必要としているかが常に分かります。通知からブロック中のエージェントへ直接ジャンプできます。" +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "エージェント" + msgid "An agent completes multi-file changes end to end." msgstr "エージェントが複数ファイルにまたがる変更を最後までやり切る。" @@ -16535,6 +16539,9 @@ msgstr "警告" msgid "Warning occurred." msgstr "警告が発生しました。" +msgid "Watched by an agent in another workspace" +msgstr "別のワークスペースのエージェントが監視しています" + msgid "Watchers" msgstr "ウォッチャー" diff --git a/packages/i18n/locales/ko/messages.po b/packages/i18n/locales/ko/messages.po index da98c1b1cad..9f89d599868 100644 --- a/packages/i18n/locales/ko/messages.po +++ b/packages/i18n/locales/ko/messages.po @@ -1913,6 +1913,10 @@ msgstr "참고: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "어떤 에이전트가 나를 필요로 하는지 항상 알 수 있습니다. 알림을 누르면 막힌 에이전트로 바로 이동합니다." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "에이전트" + msgid "An agent completes multi-file changes end to end." msgstr "에이전트가 여러 파일에 걸친 변경을 처음부터 끝까지 완료합니다." @@ -16535,6 +16539,9 @@ msgstr "경고" msgid "Warning occurred." msgstr "경고가 발생했습니다." +msgid "Watched by an agent in another workspace" +msgstr "다른 워크스페이스의 에이전트가 감시 중입니다" + msgid "Watchers" msgstr "관찰자" diff --git a/packages/i18n/locales/nl/messages.po b/packages/i18n/locales/nl/messages.po index 50da8de9aae..87e8677e76e 100644 --- a/packages/i18n/locales/nl/messages.po +++ b/packages/i18n/locales/nl/messages.po @@ -1913,6 +1913,10 @@ msgstr "Ook: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Weet altijd welke agent jou nodig heeft, met meldingen die rechtstreeks naar de vastgelopen agent linken." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Een agent" + msgid "An agent completes multi-file changes end to end." msgstr "Een agent voltooit wijzigingen over meerdere bestanden van begin tot eind." @@ -16535,6 +16539,9 @@ msgstr "Warning" msgid "Warning occurred." msgstr "Er is een waarschuwing opgetreden." +msgid "Watched by an agent in another workspace" +msgstr "Bekeken door een agent in een andere werkruimte" + msgid "Watchers" msgstr "Watchers" diff --git a/packages/i18n/locales/pl/messages.po b/packages/i18n/locales/pl/messages.po index 83bf1a2a897..3f49acbc95f 100644 --- a/packages/i18n/locales/pl/messages.po +++ b/packages/i18n/locales/pl/messages.po @@ -1913,6 +1913,10 @@ msgstr "Także: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Zawsze wiedz, który agent Cię potrzebuje, dzięki powiadomieniom prowadzącym prosto do zablokowanego agenta." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Agent" + msgid "An agent completes multi-file changes end to end." msgstr "Agent wykonuje zmiany w wielu plikach od początku do końca." @@ -16535,6 +16539,9 @@ msgstr "Ostrzeżenie" msgid "Warning occurred." msgstr "Wystąpiło ostrzeżenie." +msgid "Watched by an agent in another workspace" +msgstr "Obserwowana przez agenta z innego obszaru roboczego" + msgid "Watchers" msgstr "Obserwujący" diff --git a/packages/i18n/locales/pt-BR/messages.po b/packages/i18n/locales/pt-BR/messages.po index 32b7e5cb762..54d286a88e0 100644 --- a/packages/i18n/locales/pt-BR/messages.po +++ b/packages/i18n/locales/pt-BR/messages.po @@ -1913,6 +1913,10 @@ msgstr "Também: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Saiba sempre qual agente precisa de você, com notificações que levam direto ao agente travado." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Um agente" + msgid "An agent completes multi-file changes end to end." msgstr "Um agente conclui mudanças em vários arquivos de ponta a ponta." @@ -16535,6 +16539,9 @@ msgstr "Aviso" msgid "Warning occurred." msgstr "Houve um aviso." +msgid "Watched by an agent in another workspace" +msgstr "Observada por um agente de outra área de trabalho" + msgid "Watchers" msgstr "Observadores" diff --git a/packages/i18n/locales/ru/messages.po b/packages/i18n/locales/ru/messages.po index 34f12a805b2..d4aa2aeaf88 100644 --- a/packages/i18n/locales/ru/messages.po +++ b/packages/i18n/locales/ru/messages.po @@ -1913,6 +1913,10 @@ msgstr "Также: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Всегда знайте, какому агенту вы нужны: уведомления ведут прямо к заблокированному агенту." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Агент" + msgid "An agent completes multi-file changes end to end." msgstr "Агент выполняет изменения в нескольких файлах от начала до конца." @@ -16535,6 +16539,9 @@ msgstr "Предупреждение" msgid "Warning occurred." msgstr "Возникло предупреждение." +msgid "Watched by an agent in another workspace" +msgstr "Отслеживается агентом из другой рабочей области" + msgid "Watchers" msgstr "Наблюдатели" diff --git a/packages/i18n/locales/tr/messages.po b/packages/i18n/locales/tr/messages.po index d9d6fabda2b..7ec5b48f89a 100644 --- a/packages/i18n/locales/tr/messages.po +++ b/packages/i18n/locales/tr/messages.po @@ -1913,6 +1913,10 @@ msgstr "Ayrıca: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Doğrudan engellenen ajana bağlanan bildirimlerle, hangi ajanın size ihtiyacı olduğunu her zaman bilin." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Bir ajan" + msgid "An agent completes multi-file changes end to end." msgstr "Bir ajan, çok dosyalı değişiklikleri baştan sona tamamlar." @@ -16535,6 +16539,9 @@ msgstr "Uyarı" msgid "Warning occurred." msgstr "Bir uyarı oluştu." +msgid "Watched by an agent in another workspace" +msgstr "Başka bir çalışma alanındaki bir ajan tarafından izleniyor" + msgid "Watchers" msgstr "İzleyenler" diff --git a/packages/i18n/locales/vi/messages.po b/packages/i18n/locales/vi/messages.po index d7061fcadba..c73c9fa1d68 100644 --- a/packages/i18n/locales/vi/messages.po +++ b/packages/i18n/locales/vi/messages.po @@ -1913,6 +1913,10 @@ msgstr "Ngoài ra: @superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "Luôn biết agent nào cần bạn, với thông báo dẫn thẳng tới agent đang bị chặn." +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "Agent" + msgid "An agent completes multi-file changes end to end." msgstr "Agent hoàn thành trọn vẹn các thay đổi trên nhiều tệp." @@ -16535,6 +16539,9 @@ msgstr "Cảnh báo" msgid "Warning occurred." msgstr "Có cảnh báo." +msgid "Watched by an agent in another workspace" +msgstr "Được một agent ở workspace khác theo dõi" + msgid "Watchers" msgstr "Người theo dõi" diff --git a/packages/i18n/locales/zh-CN/messages.po b/packages/i18n/locales/zh-CN/messages.po index 6d1746f47f3..e1058489f8e 100644 --- a/packages/i18n/locales/zh-CN/messages.po +++ b/packages/i18n/locales/zh-CN/messages.po @@ -1913,6 +1913,10 @@ msgstr "另有:@superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "随时知道哪个智能体需要你,通知可直接跳转到被阻塞的智能体。" +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "智能体" + msgid "An agent completes multi-file changes end to end." msgstr "智能体能端到端完成跨文件改动。" @@ -16535,6 +16539,9 @@ msgstr "警告" msgid "Warning occurred." msgstr "出现了警告。" +msgid "Watched by an agent in another workspace" +msgstr "由另一个工作区的智能体关注" + msgid "Watchers" msgstr "关注者" diff --git a/packages/i18n/locales/zh-TW/messages.po b/packages/i18n/locales/zh-TW/messages.po index e710d97df03..b46e7079e4f 100644 --- a/packages/i18n/locales/zh-TW/messages.po +++ b/packages/i18n/locales/zh-TW/messages.po @@ -1913,6 +1913,10 @@ msgstr "另有:@superset/ui/spinner" msgid "Always know which agent needs you, with notifications that deep-link straight to the blocked agent." msgstr "隨時知道哪個代理程式需要你,通知可直接跳轉到被阻塞的代理程式。" +msgctxt "page watcher with no known name" +msgid "An agent" +msgstr "代理程式" + msgid "An agent completes multi-file changes end to end." msgstr "代理程式能端到端完成跨檔案改動。" @@ -16535,6 +16539,9 @@ msgstr "警告" msgid "Warning occurred." msgstr "出現了警告。" +msgid "Watched by an agent in another workspace" +msgstr "由另一個工作區的代理程式監看" + msgid "Watchers" msgstr "關注者" From 6042209fb0bc4c0d762c2f77bfdb79fb2992a981 Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Tue, 22 Sep 2026 12:40:04 +0530 Subject: [PATCH 2/5] fix(i18n): match the page watcher strings to each catalog's own terms MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit zh-TW and nl already have a word for watching a page — 關注 and volgen, used by "Nothing is watching this page" and "Stop watching" — and the new status ignored both. German declines Agent weakly everywhere else in the catalog, 33 times against three exceptions; the new string was one of them, and so was the menu's own "Comments go to this agent". --- packages/i18n/locales/de/messages.po | 4 ++-- packages/i18n/locales/nl/messages.po | 2 +- packages/i18n/locales/zh-TW/messages.po | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/i18n/locales/de/messages.po b/packages/i18n/locales/de/messages.po index 46e3cf0dc5d..880ff13b8e6 100644 --- a/packages/i18n/locales/de/messages.po +++ b/packages/i18n/locales/de/messages.po @@ -3643,7 +3643,7 @@ msgid "Comments could not be loaded" msgstr "Kommentare konnten nicht geladen werden" msgid "Comments go to this agent" -msgstr "Kommentare gehen an diesen Agent" +msgstr "Kommentare gehen an diesen Agenten" msgid "Commit" msgstr "Committen" @@ -16540,7 +16540,7 @@ msgid "Warning occurred." msgstr "Es gab eine Warnung." msgid "Watched by an agent in another workspace" -msgstr "Wird von einem Agent in einem anderen Arbeitsbereich beobachtet" +msgstr "Wird von einem Agenten in einem anderen Arbeitsbereich beobachtet" msgid "Watchers" msgstr "Beobachter" diff --git a/packages/i18n/locales/nl/messages.po b/packages/i18n/locales/nl/messages.po index 87e8677e76e..acca4bac6fe 100644 --- a/packages/i18n/locales/nl/messages.po +++ b/packages/i18n/locales/nl/messages.po @@ -16540,7 +16540,7 @@ msgid "Warning occurred." msgstr "Er is een waarschuwing opgetreden." msgid "Watched by an agent in another workspace" -msgstr "Bekeken door een agent in een andere werkruimte" +msgstr "Gevolgd door een agent in een andere werkruimte" msgid "Watchers" msgstr "Watchers" diff --git a/packages/i18n/locales/zh-TW/messages.po b/packages/i18n/locales/zh-TW/messages.po index b46e7079e4f..47613ef5787 100644 --- a/packages/i18n/locales/zh-TW/messages.po +++ b/packages/i18n/locales/zh-TW/messages.po @@ -16540,7 +16540,7 @@ msgid "Warning occurred." msgstr "出現了警告。" msgid "Watched by an agent in another workspace" -msgstr "由另一個工作區的代理程式監看" +msgstr "由另一個工作區的代理程式關注" msgid "Watchers" msgstr "關注者" From 0fc74e30bef62e2878b53c9595a738290439a0a0 Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Wed, 23 Sep 2026 19:42:43 +0530 Subject: [PATCH 3/5] feat(desktop): show the agents watching a page, not a sentence about them The watcher control now reads as a list of watchers rather than a claim about one. Nothing watching renders nothing; one or more shows a robot badge with a live dot and a count, and opening it names each watching session, the workspace it sits in, and links to that agent's terminal. The watcher list is gathered by asking each host this machine can already reach for its own list, so a host that answers is reporting live state: no heartbeat to age out, and no per-host liveness rule to get wrong. A sandbox is only asked while it is the workspace on screen, since every request to one holds its VM awake. The page row's org-wide flag still covers the watcher we cannot enumerate, which is reported as such instead of as "nothing is watching". Drops the hand-off list and Stop watching: a watch starts by publishing from the agent, and ends where the agent is, which the list now links to. --- .../usePageWatchersForPage/index.ts | 5 + .../usePageWatchersForPage.ts | 116 ++++++++++ .../PagePaneHeaderExtras.tsx | 8 +- .../PageWatcherMenu/PageWatcherMenu.test.tsx | 171 ++++++++++----- .../PageWatcherMenu/PageWatcherMenu.tsx | 207 ++++++------------ .../src/trpc/router/page-watch/page-watch.ts | 35 ++- packages/i18n/locales/cs/messages.po | 38 +--- packages/i18n/locales/de/messages.po | 38 +--- packages/i18n/locales/en/messages.po | 38 +--- packages/i18n/locales/es/messages.po | 38 +--- packages/i18n/locales/fr/messages.po | 38 +--- packages/i18n/locales/id/messages.po | 38 +--- packages/i18n/locales/it/messages.po | 38 +--- packages/i18n/locales/ja/messages.po | 38 +--- packages/i18n/locales/ko/messages.po | 38 +--- packages/i18n/locales/nl/messages.po | 38 +--- packages/i18n/locales/pl/messages.po | 38 +--- packages/i18n/locales/pt-BR/messages.po | 38 +--- packages/i18n/locales/ru/messages.po | 38 +--- packages/i18n/locales/tr/messages.po | 38 +--- packages/i18n/locales/vi/messages.po | 38 +--- packages/i18n/locales/zh-CN/messages.po | 38 +--- packages/i18n/locales/zh-TW/messages.po | 38 +--- 23 files changed, 513 insertions(+), 675 deletions(-) create mode 100644 apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/index.ts create mode 100644 apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/usePageWatchersForPage.ts diff --git a/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/index.ts b/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/index.ts new file mode 100644 index 00000000000..910723b29e8 --- /dev/null +++ b/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/index.ts @@ -0,0 +1,5 @@ +export { + getHostPageWatchersQueryKey, + type PageWatcherRow, + usePageWatchersForPage, +} from "./usePageWatchersForPage"; diff --git a/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/usePageWatchersForPage.ts b/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/usePageWatchersForPage.ts new file mode 100644 index 00000000000..ca8380f3ac3 --- /dev/null +++ b/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/usePageWatchersForPage.ts @@ -0,0 +1,116 @@ +import { useQueries, useQueryClient } from "@tanstack/react-query"; +import { useCallback, useMemo } from "react"; +import { getHostServiceClientByUrl } from "renderer/lib/host-service-client"; +import { useHostWorkspaces } from "renderer/routes/_authenticated/providers/HostWorkspacesProvider"; +import { useWorkspaceEvent } from "../useWorkspaceEvent"; + +const REFRESH_MS = 30_000; + +export interface PageWatcherRow { + workspaceId: string; + workspaceName: string | null; + terminalId: string; + agentId: string | null; + sessionTitle: string | null; + hostId: string; +} + +export function getHostPageWatchersQueryKey(hostUrl: string) { + return ["page-watchers-by-host", hostUrl] as const; +} + +interface HostTarget { + hostId: string; + hostUrl: string; +} + +/** + * Every agent watching `pageId`, across the hosts this machine can already + * reach, with the workspace each one sits in. + * + * A host's in-memory list is the watch truth, so a host that answers is + * reporting live state — there is nothing to age out and no heartbeat to + * read. The cost is that a watcher on a host we cannot reach is not in here; + * the page's org-wide watch flag still says one exists, and the menu says so. + */ +export function usePageWatchersForPage({ + pageId, + workspaceId, +}: { + pageId: string | undefined; + workspaceId: string; +}): PageWatcherRow[] { + const { workspaces, cache } = useHostWorkspaces(); + const queryClient = useQueryClient(); + + const currentHostId = useMemo( + () => workspaces.find((workspace) => workspace.id === workspaceId)?.hostId, + [workspaces, workspaceId], + ); + + // A sandbox counts every request as activity, so polling one in the + // background would hold a cloud workspace's VM awake for as long as the app + // is open. Only the sandbox already on screen is asked. + const targets = useMemo(() => { + const seen = new Map(); + for (const workspace of workspaces) { + const hostId = workspace.hostId; + if (seen.has(hostId)) continue; + if (cache.isSandboxHost(hostId) && hostId !== currentHostId) continue; + const hostUrl = cache.resolveHostUrl(hostId); + if (!hostUrl) continue; + seen.set(hostId, { hostId, hostUrl }); + } + return [...seen.values()]; + }, [workspaces, cache, currentHostId]); + + const results = useQueries({ + queries: targets.map((target) => ({ + queryKey: getHostPageWatchersQueryKey(target.hostUrl), + enabled: Boolean(pageId), + staleTime: REFRESH_MS, + refetchInterval: REFRESH_MS, + queryFn: async () => + await getHostServiceClientByUrl(target.hostUrl).pageWatch.getAll.query( + {}, + ), + })), + }); + + useWorkspaceEvent( + "page-watch:changed", + workspaceId, + useCallback(() => { + void queryClient.invalidateQueries({ + queryKey: ["page-watchers-by-host"], + }); + }, [queryClient]), + ); + + const names = useMemo( + () => + new Map(workspaces.map((workspace) => [workspace.id, workspace.name])), + [workspaces], + ); + + return useMemo(() => { + if (!pageId) return []; + const rows: PageWatcherRow[] = []; + for (const [index, result] of results.entries()) { + const target = targets[index]; + if (!target) continue; + for (const watcher of result.data ?? []) { + if (watcher.pageId !== pageId) continue; + rows.push({ + workspaceId: watcher.workspaceId, + workspaceName: names.get(watcher.workspaceId) ?? null, + terminalId: watcher.terminalId, + agentId: watcher.agentId, + sessionTitle: watcher.sessionTitle, + hostId: target.hostId, + }); + } + } + return rows; + }, [results, targets, names, pageId]); +} diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/PagePaneHeaderExtras.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/PagePaneHeaderExtras.tsx index b71637a93e3..ab5c350c3ce 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/PagePaneHeaderExtras.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/PagePaneHeaderExtras.tsx @@ -8,7 +8,6 @@ import { Share2 } from "lucide-react"; import { usePageHeaderData } from "renderer/routes/_authenticated/_dashboard/hooks/usePageHeaderData"; import type { PagePaneData } from "../../../../types"; import { usePagePaneUi } from "../../hooks/usePagePaneUi"; -import { pagePaneLabel } from "../../utils/pagePaneLabel"; import { PageWatcherMenu } from "./components/PageWatcherMenu"; interface PagePaneHeaderExtrasProps { @@ -40,12 +39,7 @@ export function PagePaneHeaderExtras({ return ( <> {owned ? ( - + ) : null} = + []; -mock.module("renderer/hooks/host-service/usePageWatchers", () => ({ - usePageWatchers: () => - new Map(localWatchers.map((watcher) => [watcher.pageId, watcher])), -})); -mock.module("renderer/hooks/host-service/useTerminalAgentBindings", () => ({ - useTerminalAgentBindings: () => new Map(), +mock.module("renderer/hooks/host-service/usePageWatchersForPage", () => ({ + usePageWatchersForPage: () => rows, })); mock.module("renderer/lib/cloud-trpc", () => ({ cloudTrpc: { - useUtils: () => ({ page: { get: { invalidate: async () => {} } } }), page: { get: { useQuery: () => ({ data: { watch: cloudWatch } }) } }, }, })); -mock.module("@superset/workspace-client", () => ({ - workspaceTrpc: { - pageWatch: { - assign: { useMutation: () => ({ mutate: () => {}, isPending: false }) }, - unwatch: { useMutation: () => ({ mutate: () => {}, isPending: false }) }, - }, - }, +mock.module("@tanstack/react-router", () => ({ + useNavigate: () => () => Promise.resolve(), })); +mock.module( + "renderer/routes/_authenticated/_dashboard/utils/workspace-navigation", + () => ({ + navigateToV2Workspace: ( + workspaceId: string, + _navigate: unknown, + options?: { search?: { terminalId?: string } }, + ) => { + navigated.push({ + workspaceId, + terminalId: options?.search?.terminalId, + }); + return Promise.resolve(); + }, + }), +); +mock.module( + "renderer/routes/_authenticated/settings/agents/components/V2AgentsSettings/components/AgentIcon", + () => ({ AgentIcon: () => null }), +); const { act, cleanup, fireEvent, render, within } = await import( "@testing-library/react" @@ -57,23 +76,35 @@ afterAll(async () => { }); beforeEach(() => { - localWatchers = []; + rows = []; cloudWatch = { watching: false, agentId: null }; + navigated = []; }); -async function openMenu() { +function watcher(overrides: Partial = {}): Row { + return { + workspaceId: "ws-a", + workspaceName: "Chat UI", + terminalId: "term-1", + agentId: "codex", + sessionTitle: "Page watcher redesign", + hostId: "host-1", + ...overrides, + }; +} + +async function renderMenu() { let view!: ReturnType; await act(async () => { view = render( - , + , ); }); - const ui = within(view.baseElement as HTMLElement); + return within(view.baseElement as HTMLElement); +} + +async function openMenu() { + const ui = await renderMenu(); await act(async () => { fireEvent.pointerDown( ui.getByRole("button"), @@ -83,58 +114,92 @@ async function openMenu() { return ui; } -describe("a page watched by an agent in this workspace", () => { +describe("a page nothing is watching", () => { + test("shows no control at all, rather than a menu saying so", async () => { + const ui = await renderMenu(); + expect(ui.queryByRole("button")).toBeNull(); + }); +}); + +describe("a page one agent is watching", () => { beforeEach(() => { - localWatchers = [ - { pageId: PAGE_ID, terminalId: "term-1", agentId: "claude" }, - ]; - cloudWatch = { watching: true, agentId: "claude" }; + rows = [watcher()]; + cloudWatch = { watching: true, agentId: "codex" }; }); - test("names the agent comments reach", async () => { + test("names the session and the workspace it sits in", async () => { const ui = await openMenu(); - expect(ui.getByText("Comments go to this agent")).toBeDefined(); + expect(ui.getByText("Page watcher redesign")).toBeDefined(); + expect(ui.getByText("Chat UI")).toBeDefined(); + }); + + test("does not put the agent's name on the trigger", async () => { + const ui = await renderMenu(); + expect(ui.getByRole("button").textContent).not.toContain("codex"); }); - test("offers to stop watching, because the watcher is ours to stop", async () => { + test("opens that agent's terminal in its own workspace", async () => { const ui = await openMenu(); - expect(ui.getByText("Stop watching")).toBeDefined(); + await act(async () => { + fireEvent.click(ui.getByText("Page watcher redesign")); + }); + expect(navigated).toEqual([{ workspaceId: "ws-a", terminalId: "term-1" }]); + }); + + test("falls back to the agent's name when the session has no title", async () => { + rows = [watcher({ sessionTitle: null })]; + const ui = await openMenu(); + expect(ui.getByText("codex")).toBeDefined(); }); }); -describe("a page watched by an agent in another workspace", () => { +describe("a page several agents are watching", () => { beforeEach(() => { + rows = [ + watcher(), + watcher({ + workspaceId: "ws-b", + workspaceName: "Onboarding flow", + terminalId: "term-2", + agentId: "claude", + sessionTitle: "Onboarding copy pass", + hostId: "host-2", + }), + ]; cloudWatch = { watching: true, agentId: "codex" }; }); - test("says so rather than claiming nothing is watching", async () => { - const ui = await openMenu(); - expect( - ui.getByText("Watched by an agent in another workspace"), - ).toBeDefined(); - expect(ui.queryByText("Nothing is watching this page")).toBeNull(); + test("counts them on the trigger", async () => { + const ui = await renderMenu(); + expect(ui.getByRole("button").textContent).toContain("2"); }); - test("names the watching agent on the trigger", async () => { + test("lists every one of them", async () => { const ui = await openMenu(); - expect(ui.getByRole("button").textContent).toContain("codex"); + expect(ui.getByText("Page watcher redesign")).toBeDefined(); + expect(ui.getByText("Onboarding copy pass")).toBeDefined(); + }); +}); + +describe("a watcher on a host this machine cannot reach", () => { + beforeEach(() => { + cloudWatch = { watching: true, agentId: "codex" }; }); - test("falls back to a generic name when the agent is unnamed", async () => { - cloudWatch = { watching: true, agentId: null }; - const ui = await openMenu(); - expect(ui.getByRole("button").textContent).toContain("An agent"); + test("still shows the badge, because comments do reach it", async () => { + const ui = await renderMenu(); + expect(ui.getByRole("button")).toBeDefined(); }); - test("does not offer to stop a watcher it cannot reach", async () => { + test("says where it is instead of pretending nothing watches", async () => { const ui = await openMenu(); - expect(ui.queryByText("Stop watching")).toBeNull(); + expect(ui.getByText("On a host you can't reach")).toBeDefined(); + expect(ui.getByText("codex")).toBeDefined(); }); -}); -describe("a page nothing is watching", () => { - test("says nothing is watching", async () => { + test("names it generically when the flag carries no agent", async () => { + cloudWatch = { watching: true, agentId: null }; const ui = await openMenu(); - expect(ui.getByText("Nothing is watching this page")).toBeDefined(); + expect(ui.getByText("An agent")).toBeDefined(); }); }); diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx index 4447b47d83b..6edc44fef51 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx @@ -1,5 +1,4 @@ -import { Trans, useLingui } from "@lingui/react/macro"; -import { errorMessage } from "@superset/i18n/errors"; +import { Plural, Trans, useLingui } from "@lingui/react/macro"; import { Button } from "@superset/ui/button"; import { DropdownMenu, @@ -10,15 +9,16 @@ import { DropdownMenuTrigger, } from "@superset/ui/dropdown-menu"; import { useFramePointerDown } from "@superset/ui/page-comments"; -import { toast } from "@superset/ui/sonner"; -import { workspaceTrpc } from "@superset/workspace-client"; -import { formatDistanceToNowStrict } from "date-fns"; -import { Bot, Check, EyeOff } from "lucide-react"; +import { useNavigate } from "@tanstack/react-router"; +import { ArrowUpRight, Bot } from "lucide-react"; import { useCallback, useState } from "react"; -import { usePageWatchers } from "renderer/hooks/host-service/usePageWatchers"; -import { useTerminalAgentBindings } from "renderer/hooks/host-service/useTerminalAgentBindings"; +import { + type PageWatcherRow, + usePageWatchersForPage, +} from "renderer/hooks/host-service/usePageWatchersForPage"; import { cloudTrpc } from "renderer/lib/cloud-trpc"; -import { StatusIndicator } from "renderer/screens/main/components/StatusIndicator"; +import { navigateToV2Workspace } from "renderer/routes/_authenticated/_dashboard/utils/workspace-navigation"; +import { AgentIcon } from "renderer/routes/_authenticated/settings/agents/components/V2AgentsSettings/components/AgentIcon"; const WATCHING_REFRESH_MS = 30_000; const IDLE_REFRESH_MS = 5 * 60_000; @@ -26,26 +26,18 @@ const IDLE_REFRESH_MS = 5 * 60_000; interface PageWatcherMenuProps { workspaceId: string; pageId: string | undefined; - pageTitle: string; - pageSlug: string; } -export function PageWatcherMenu({ - workspaceId, - pageId, - pageTitle, - pageSlug, -}: PageWatcherMenuProps) { +export function PageWatcherMenu({ workspaceId, pageId }: PageWatcherMenuProps) { const { t } = useLingui(); - const bindings = useTerminalAgentBindings(workspaceId); - const watchers = usePageWatchers(workspaceId); - const cloudUtils = cloudTrpc.useUtils(); - const assign = workspaceTrpc.pageWatch.assign.useMutation(); - const unwatch = workspaceTrpc.pageWatch.unwatch.useMutation(); + const navigate = useNavigate(); + const watchers = usePageWatchersForPage({ pageId, workspaceId }); const [menuOpen, setMenuOpen] = useState(false); useFramePointerDown(useCallback(() => setMenuOpen(false), [])); + // The page row's own flag is the org-wide answer, and the only thing that + // knows about a watcher on a host this machine cannot reach. const cloudWatch = cloudTrpc.page.get.useQuery( { id: pageId ?? "" }, { @@ -57,60 +49,21 @@ export function PageWatcherMenu({ }, ); - const watcher = pageId ? watchers.get(pageId) : undefined; - const elsewhere = - !watcher && cloudWatch.data?.watch.watching === true - ? cloudWatch.data.watch - : null; - - const running = [...bindings.values()] - .filter((binding) => !binding.endedAt) - .sort((a, b) => b.lastEventAt - a.lastEventAt); + const watchedElsewhere = + watchers.length === 0 && cloudWatch.data?.watch.watching === true; if (!pageId) return null; + // Nothing is watching: the header says nothing rather than saying so. + if (watchers.length === 0 && !watchedElsewhere) return null; - const label = (terminalId: string) => { - const binding = bindings.get(terminalId); - return binding?.definitionId ?? binding?.agentId ?? terminalId.slice(0, 8); - }; - - const watch = (terminalId: string, agentId: string | null) => { - assign.mutate( - { - pageId, - slug: pageSlug, - title: pageTitle, - workspaceId, - terminalId, - agentId, - }, - { - onSettled: () => cloudUtils.page.get.invalidate({ id: pageId }), - onError: (error) => - toast.error( - t({ - message: "Could not watch this page", - }), - { description: errorMessage(error) }, - ), - }, - ); - }; - - const stop = () => { - unwatch.mutate( - { pageId }, - { - onSettled: () => cloudUtils.page.get.invalidate({ id: pageId }), - onError: (error) => - toast.error( - t({ - message: "Could not stop watching", - }), - { description: errorMessage(error) }, - ), + const open = (watcher: PageWatcherRow) => { + void navigateToV2Workspace(watcher.workspaceId, navigate, { + search: { + terminalId: watcher.terminalId, + focusRequestId: crypto.randomUUID(), }, - ); + }); + setMenuOpen(false); }; return ( @@ -119,87 +72,71 @@ export function PageWatcherMenu({ - + - {watcher ? ( - Comments go to this agent - ) : elsewhere ? ( - Watched by an agent in another workspace - ) : ( - Nothing is watching this page - )} + - {running.length === 0 ? ( - - No agents running here + {watchedElsewhere ? ( + + + + {cloudWatch.data?.watch.agentId ?? + t({ + message: "An agent", + context: "page watcher with no known name", + })} + + + On a host you can't reach + ) : ( - running.map((binding) => { - const current = watcher?.terminalId === binding.terminalId; + watchers.map((watcher) => { + const navigable = watcher.workspaceName !== null; return ( - watch(binding.terminalId, binding.definitionId ?? null) - } + key={`${watcher.hostId}:${watcher.terminalId}`} + onSelect={navigable ? () => open(watcher) : undefined} + disabled={!navigable} className="gap-2" > - {current ? ( - - ) : ( - - )} -
- - {binding.definitionId ?? binding.agentId} - - - - active{" "} - {formatDistanceToNowStrict(binding.lastEventAt, { - addSuffix: true, - })} - - -
+ + + {watcher.sessionTitle ?? + watcher.agentId ?? + watcher.terminalId.slice(0, 8)} + + + {watcher.workspaceName} + + {navigable ? ( + + ) : null}
); }) )} - {watcher ? ( - <> - - - - Stop watching - - - ) : null}
); diff --git a/packages/host-service/src/trpc/router/page-watch/page-watch.ts b/packages/host-service/src/trpc/router/page-watch/page-watch.ts index 1daf0a0fd1b..0abf098ec6a 100644 --- a/packages/host-service/src/trpc/router/page-watch/page-watch.ts +++ b/packages/host-service/src/trpc/router/page-watch/page-watch.ts @@ -1,6 +1,7 @@ import { TRPCError } from "@trpc/server"; import { z } from "zod"; import type { PageWatchStatus } from "../../../page-watch/index.ts"; +import { listTerminalSessions } from "../../../terminal/terminal.ts"; import { protectedProcedure, router } from "../../index"; const assignInputSchema = z.object({ @@ -18,10 +19,36 @@ const listInputSchema = z .object({ workspaceId: z.string().min(1).optional() }) .optional(); +export interface PageWatchStatusWithSession extends PageWatchStatus { + sessionTitle: string | null; +} + +/** + * The watching terminal's tab name, as the person watching it reads it — a + * rename if they gave one, else the title the agent set. A viewer listing + * watchers across hosts cannot ask each host for its terminals, so the name + * travels with the watch row rather than being joined to it. + */ +function withSessionTitles( + statuses: PageWatchStatus[], +): PageWatchStatusWithSession[] { + if (statuses.length === 0) return []; + const titles = new Map( + listTerminalSessions().map((session) => [ + session.terminalId, + session.title, + ]), + ); + return statuses.map((status) => ({ + ...status, + sessionTitle: titles.get(status.terminalId) ?? null, + })); +} + export const pageWatchRouter = router({ assign: protectedProcedure .input(assignInputSchema) - .mutation(async ({ ctx, input }): Promise => { + .mutation(async ({ ctx, input }): Promise => { try { await ctx.runtime.pageWatch.assign(input); } catch (error) { @@ -30,7 +57,7 @@ export const pageWatchRouter = router({ message: error instanceof Error ? error.message : "Cannot watch page", }); } - return ctx.runtime.pageWatch.list(input.workspaceId); + return withSessionTitles(ctx.runtime.pageWatch.list(input.workspaceId)); }), unwatch: protectedProcedure @@ -42,7 +69,7 @@ export const pageWatchRouter = router({ getAll: protectedProcedure .input(listInputSchema) - .query(({ ctx, input }): PageWatchStatus[] => - ctx.runtime.pageWatch.list(input?.workspaceId), + .query(({ ctx, input }): PageWatchStatusWithSession[] => + withSessionTitles(ctx.runtime.pageWatch.list(input?.workspaceId)), ), }); diff --git a/packages/i18n/locales/cs/messages.po b/packages/i18n/locales/cs/messages.po index 7e1f6cdc7b8..9d7a0de69db 100644 --- a/packages/i18n/locales/cs/messages.po +++ b/packages/i18n/locales/cs/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# pracovní prostor} few {# pracovní prostory} many {# msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {# běžící agent stále používá předchozí účet — přepnutí platí jen pro nová spuštění.} few {# běžící agenti stále používají předchozí účet — přepnutí platí jen pro nová spuštění.} many {# běžícího agenta stále používá předchozí účet — přepnutí platí jen pro nová spuštění.} other {# běžících agentů stále používá předchozí účet — přepnutí platí jen pro nová spuštění.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Komentáře jdou tomuto agentovi} few {Komentáře jdou těmto agentům} many {Komentáře jdou těmto agentům} other {Komentáře jdou těmto agentům}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Aktivace, kolik toho lidé používají, když už jsou uvnitř, a jestl msgid "Active" msgstr "Aktivní" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "aktivní {0}" - msgid "Active agent sessions." msgstr "Aktivní relace agentů." @@ -1664,6 +1664,9 @@ msgstr "Agenti si sami načtou náhled, proklikají UI a přiloží snímky jako msgid "Agents running at once" msgstr "Agentů běžících najednou" +msgid "Agents watching this page for comments" +msgstr "Agenti sledující tuto stránku kvůli komentářům" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Souhrnné využití agentů napříč všemi vývojáři v žebříčku Superset — tokeny, náklady, chování cache a modely, po kterých lidé skutečně sahají." @@ -3170,9 +3173,6 @@ msgstr "Vyberte, co se má z vestavěného prohlížeče vymazat." msgid "Choose when Superset pings you." msgstr "Zvolte, kdy vás Superset upozorní." -msgid "Choose which agent watches this page for comments" -msgstr "Vyberte, který agent sleduje komentáře na této stránce" - msgid "Churn" msgstr "Odchody" @@ -3642,9 +3642,6 @@ msgstr "Komentáře" msgid "Comments could not be loaded" msgstr "Komentáře se nepodařilo načíst" -msgid "Comments go to this agent" -msgstr "Komentáře jdou tomuto agentovi" - msgid "Commit" msgstr "Commitnout" @@ -4387,9 +4384,6 @@ msgstr "Relaci se nepodařilo spustit" msgid "Could not stop it" msgstr "Nepodařilo se ho zastavit" -msgid "Could not stop watching" -msgstr "Nepodařilo se přestat sledovat" - msgid "Could not submit prompt. Try again." msgstr "Prompt se nepodařilo odeslat. Zkuste to znovu." @@ -4409,9 +4403,6 @@ msgstr "Nepodařilo se aktualizovat větev" msgid "serverError.plugins.credentialUnverified" msgstr "Přihlašovací údaje se nepodařilo ověřit: {reason}" -msgid "Could not watch this page" -msgstr "Tuto stránku se nepodařilo sledovat" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Nepodařilo se ověřit stav hvězdy — zkontrolujte, že je nainstalované GitHub CLI (`gh`), že jste přihlášeni a že máte připojení k síti" @@ -9413,9 +9404,6 @@ msgstr "Na tomto počítači nejsou nastavení žádní agenti" msgid "No agents match \"{q}\"." msgstr "Žádný agent neodpovídá „{q}“." -msgid "No agents running here" -msgstr "Žádní agenti tu neběží" - msgid "No agents yet" msgstr "Zatím žádní agenti" @@ -10024,9 +10012,6 @@ msgstr "Zatím není nic nainstalováno." msgid "Nothing is running. Remove it and create a new one." msgstr "Nic neběží. Odeberte ho a vytvořte nový." -msgid "Nothing is watching this page" -msgstr "Tuto stránku nic nesleduje" - msgid "Nothing lives at {pathname}." msgstr "Na {pathname} nic není." @@ -10121,6 +10106,9 @@ msgstr "Starší" msgid "on {offScopeHostName} — won't run here" msgstr "na {offScopeHostName} — tady nepoběží" +msgid "On a host you can't reach" +msgstr "Na hostiteli, ke kterému nemáte přístup" + msgid "On click" msgstr "Po kliknutí" @@ -14296,9 +14284,6 @@ msgstr "Zastavit odpověď" msgid "Stop Superset here to delete from another device." msgstr "Ukončete tady Superset, ať ho smažete z jiného zařízení." -msgid "Stop watching" -msgstr "Přestat sledovat" - msgid "Stop workspace run command" msgstr "Zastavit spouštěcí příkaz pracovního prostoru" @@ -16539,9 +16524,6 @@ msgstr "Varování" msgid "Warning occurred." msgstr "Došlo k varování." -msgid "Watched by an agent in another workspace" -msgstr "Sleduje ji agent v jiném pracovním prostoru" - msgid "Watchers" msgstr "Sledující" diff --git a/packages/i18n/locales/de/messages.po b/packages/i18n/locales/de/messages.po index 880ff13b8e6..31e66b09028 100644 --- a/packages/i18n/locales/de/messages.po +++ b/packages/i18n/locales/de/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# Arbeitsbereich} other {# Arbeitsbereiche}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {Ein laufender Agent nutzt noch das vorherige Konto — der Wechsel gilt nur für neue Starts.} other {# laufende Agenten nutzen noch das vorherige Konto — der Wechsel gilt nur für neue Starts.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Kommentare gehen an diesen Agenten} other {Kommentare gehen an diese Agenten}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Aktivierung, wie viel Menschen es nutzen, sobald sie drin sind, und ob s msgid "Active" msgstr "Aktiv" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "aktiv {0}" - msgid "Active agent sessions." msgstr "Aktive Agenten-Sitzungen." @@ -1664,6 +1664,9 @@ msgstr "Agenten laden ihre eigene Vorschau, bedienen die Oberfläche und hängen msgid "Agents running at once" msgstr "Gleichzeitig laufende Agenten" +msgid "Agents watching this page for comments" +msgstr "Agenten, die diese Seite auf Kommentare beobachten" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Aggregierte Agent-Nutzung über alle Entwickler im Superset-Leaderboard — Tokens, Kosten, Cache-Verhalten und welche Modelle tatsächlich genutzt werden." @@ -3170,9 +3173,6 @@ msgstr "Wähle, was aus dem In-App-Browser gelöscht werden soll." msgid "Choose when Superset pings you." msgstr "Wähle, wann Superset dich anstupst." -msgid "Choose which agent watches this page for comments" -msgstr "Wähle, welcher Agent diese Seite auf Kommentare beobachtet" - msgid "Churn" msgstr "Abwanderung" @@ -3642,9 +3642,6 @@ msgstr "Kommentare" msgid "Comments could not be loaded" msgstr "Kommentare konnten nicht geladen werden" -msgid "Comments go to this agent" -msgstr "Kommentare gehen an diesen Agenten" - msgid "Commit" msgstr "Committen" @@ -4387,9 +4384,6 @@ msgstr "Sitzung konnte nicht gestartet werden" msgid "Could not stop it" msgstr "Konnte nicht beendet werden" -msgid "Could not stop watching" -msgstr "Beobachten ließ sich nicht beenden" - msgid "Could not submit prompt. Try again." msgstr "Prompt konnte nicht eingereicht werden. Versuche es erneut." @@ -4409,9 +4403,6 @@ msgstr "Branch konnte nicht aktualisiert werden" msgid "serverError.plugins.credentialUnverified" msgstr "Die Zugangsdaten konnten nicht überprüft werden: {reason}" -msgid "Could not watch this page" -msgstr "Seite ließ sich nicht beobachten" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Der Star-Status ließ sich nicht bestätigen — prüfe, ob die GitHub-CLI (`gh`) installiert und angemeldet ist und ob du eine Netzwerkverbindung hast" @@ -9413,9 +9404,6 @@ msgstr "Auf diesem Rechner sind keine Agenten konfiguriert" msgid "No agents match \"{q}\"." msgstr "Keine Agenten passen zu \"{q}\"." -msgid "No agents running here" -msgstr "Hier laufen keine Agents" - msgid "No agents yet" msgstr "Noch keine Agenten" @@ -10024,9 +10012,6 @@ msgstr "Noch nichts installiert." msgid "Nothing is running. Remove it and create a new one." msgstr "Es läuft nichts. Entferne ihn und erstelle einen neuen." -msgid "Nothing is watching this page" -msgstr "Nichts beobachtet diese Seite" - msgid "Nothing lives at {pathname}." msgstr "Unter {pathname} liegt nichts." @@ -10121,6 +10106,9 @@ msgstr "Älter" msgid "on {offScopeHostName} — won't run here" msgstr "auf {offScopeHostName} — läuft hier nicht" +msgid "On a host you can't reach" +msgstr "Auf einem Host, den du nicht erreichst" + msgid "On click" msgstr "Beim Klick" @@ -14296,9 +14284,6 @@ msgstr "Antwort stoppen" msgid "Stop Superset here to delete from another device." msgstr "Beende Superset hier, um von einem anderen Gerät aus zu löschen." -msgid "Stop watching" -msgstr "Nicht mehr beobachten" - msgid "Stop workspace run command" msgstr "Run-Befehl des Arbeitsbereichs stoppen" @@ -16539,9 +16524,6 @@ msgstr "Warnung" msgid "Warning occurred." msgstr "Es gab eine Warnung." -msgid "Watched by an agent in another workspace" -msgstr "Wird von einem Agenten in einem anderen Arbeitsbereich beobachtet" - msgid "Watchers" msgstr "Beobachter" diff --git a/packages/i18n/locales/en/messages.po b/packages/i18n/locales/en/messages.po index c4a2af254e2..16f34d35334 100644 --- a/packages/i18n/locales/en/messages.po +++ b/packages/i18n/locales/en/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# workspace} other {# workspaces}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Activation, how much people use it once they are in, and whether they co msgid "Active" msgstr "Active" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "active {0}" - msgid "Active agent sessions." msgstr "Active agent sessions." @@ -1664,6 +1664,9 @@ msgstr "Agents load their own preview, drive the UI, and attach screenshot proof msgid "Agents running at once" msgstr "Agents running at once" +msgid "Agents watching this page for comments" +msgstr "Agents watching this page for comments" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." @@ -3170,9 +3173,6 @@ msgstr "Choose what to clear from the in-app browser." msgid "Choose when Superset pings you." msgstr "Choose when Superset pings you." -msgid "Choose which agent watches this page for comments" -msgstr "Choose which agent watches this page for comments" - msgid "Churn" msgstr "Churn" @@ -3642,9 +3642,6 @@ msgstr "Comments" msgid "Comments could not be loaded" msgstr "Comments could not be loaded" -msgid "Comments go to this agent" -msgstr "Comments go to this agent" - msgid "Commit" msgstr "Commit" @@ -4387,9 +4384,6 @@ msgstr "Could not start session" msgid "Could not stop it" msgstr "Could not stop it" -msgid "Could not stop watching" -msgstr "Could not stop watching" - msgid "Could not submit prompt. Try again." msgstr "Could not submit prompt. Try again." @@ -4409,9 +4403,6 @@ msgstr "Could not update the branch" msgid "serverError.plugins.credentialUnverified" msgstr "Could not verify the credential: {reason}" -msgid "Could not watch this page" -msgstr "Could not watch this page" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" @@ -9413,9 +9404,6 @@ msgstr "No agents configured on this machine" msgid "No agents match \"{q}\"." msgstr "No agents match \"{q}\"." -msgid "No agents running here" -msgstr "No agents running here" - msgid "No agents yet" msgstr "No agents yet" @@ -10024,9 +10012,6 @@ msgstr "Nothing installed yet." msgid "Nothing is running. Remove it and create a new one." msgstr "Nothing is running. Remove it and create a new one." -msgid "Nothing is watching this page" -msgstr "Nothing is watching this page" - msgid "Nothing lives at {pathname}." msgstr "Nothing lives at {pathname}." @@ -10121,6 +10106,9 @@ msgstr "Older" msgid "on {offScopeHostName} — won't run here" msgstr "on {offScopeHostName} — won't run here" +msgid "On a host you can't reach" +msgstr "On a host you can't reach" + msgid "On click" msgstr "On click" @@ -14296,9 +14284,6 @@ msgstr "Stop response" msgid "Stop Superset here to delete from another device." msgstr "Stop Superset here to delete from another device." -msgid "Stop watching" -msgstr "Stop watching" - msgid "Stop workspace run command" msgstr "Stop workspace run command" @@ -16539,9 +16524,6 @@ msgstr "Warning" msgid "Warning occurred." msgstr "Warning occurred." -msgid "Watched by an agent in another workspace" -msgstr "Watched by an agent in another workspace" - msgid "Watchers" msgstr "Watchers" diff --git a/packages/i18n/locales/es/messages.po b/packages/i18n/locales/es/messages.po index 1e256f35251..e698cf4ef4b 100644 --- a/packages/i18n/locales/es/messages.po +++ b/packages/i18n/locales/es/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# espacio de trabajo} other {# espacios de trabajo}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {Un agente en marcha sigue usando la cuenta anterior; el cambio solo se aplica a los nuevos lanzamientos.} other {# agentes en marcha siguen usando la cuenta anterior; el cambio solo se aplica a los nuevos lanzamientos.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Los comentarios van a este agente} other {Los comentarios van a estos agentes}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "La activación, cuánto lo usan una vez dentro y si vuelven." msgid "Active" msgstr "Activo" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "activo {0}" - msgid "Active agent sessions." msgstr "Sesiones de agente activas." @@ -1664,6 +1664,9 @@ msgstr "Los agentes cargan su propia vista previa, manejan la interfaz y adjunta msgid "Agents running at once" msgstr "Agentes en marcha a la vez" +msgid "Agents watching this page for comments" +msgstr "Agentes que observan los comentarios de esta página" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Uso agregado de agentes de todos los desarrolladores de la clasificación de Superset: tokens, coste, comportamiento de la caché y qué modelos se usan realmente." @@ -3170,9 +3173,6 @@ msgstr "Elige qué borrar del navegador integrado." msgid "Choose when Superset pings you." msgstr "Elige cuándo te avisa Superset." -msgid "Choose which agent watches this page for comments" -msgstr "Elige qué agente observa los comentarios de esta página" - msgid "Churn" msgstr "Abandono" @@ -3642,9 +3642,6 @@ msgstr "Comentarios" msgid "Comments could not be loaded" msgstr "No se pudieron cargar los comentarios" -msgid "Comments go to this agent" -msgstr "Los comentarios van a este agente" - msgid "Commit" msgstr "Hacer commit" @@ -4387,9 +4384,6 @@ msgstr "No se pudo iniciar la sesión" msgid "Could not stop it" msgstr "No se pudo detener" -msgid "Could not stop watching" -msgstr "No se pudo dejar de observar" - msgid "Could not submit prompt. Try again." msgstr "No se pudo enviar el prompt. Inténtalo de nuevo." @@ -4409,9 +4403,6 @@ msgstr "No se pudo actualizar la rama" msgid "serverError.plugins.credentialUnverified" msgstr "No se pudo verificar la credencial: {reason}" -msgid "Could not watch this page" -msgstr "No se pudo observar esta página" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "No se pudo confirmar el estado de la estrella — comprueba que el CLI de GitHub (`gh`) esté instalado, con la sesión iniciada, y que tengas conexión de red" @@ -9413,9 +9404,6 @@ msgstr "No hay agentes configurados en esta máquina" msgid "No agents match \"{q}\"." msgstr "Ningún agente coincide con \"{q}\"." -msgid "No agents running here" -msgstr "No hay agentes en ejecución aquí" - msgid "No agents yet" msgstr "Aún no hay agentes" @@ -10024,9 +10012,6 @@ msgstr "Aún no hay nada instalado." msgid "Nothing is running. Remove it and create a new one." msgstr "No hay nada en ejecución. Quítalo y crea uno nuevo." -msgid "Nothing is watching this page" -msgstr "Nada está observando esta página" - msgid "Nothing lives at {pathname}." msgstr "No hay nada en {pathname}." @@ -10121,6 +10106,9 @@ msgstr "Más antiguo" msgid "on {offScopeHostName} — won't run here" msgstr "en {offScopeHostName}: no se ejecutará aquí" +msgid "On a host you can't reach" +msgstr "En un host que no puedes alcanzar" + msgid "On click" msgstr "Al hacer clic" @@ -14296,9 +14284,6 @@ msgstr "Detener la respuesta" msgid "Stop Superset here to delete from another device." msgstr "Detén Superset aquí para eliminarlo desde otro dispositivo." -msgid "Stop watching" -msgstr "Dejar de observar" - msgid "Stop workspace run command" msgstr "Detener el comando de ejecución del espacio de trabajo" @@ -16539,9 +16524,6 @@ msgstr "Advertencia" msgid "Warning occurred." msgstr "Se produjo una advertencia." -msgid "Watched by an agent in another workspace" -msgstr "Observada por un agente de otro espacio de trabajo" - msgid "Watchers" msgstr "Observadores" diff --git a/packages/i18n/locales/fr/messages.po b/packages/i18n/locales/fr/messages.po index f8b6ca7098a..e021b5bc69a 100644 --- a/packages/i18n/locales/fr/messages.po +++ b/packages/i18n/locales/fr/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# espace de travail} other {# espaces de travail}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {Un agent en cours utilise encore le compte précédent — le changement ne s'applique qu'aux nouveaux lancements.} other {# agents en cours utilisent encore le compte précédent — le changement ne s'applique qu'aux nouveaux lancements.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Les commentaires sont envoyés à cet agent} other {Les commentaires sont envoyés à ces agents}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "L'activation, l'usage une fois les gens entrés, et s'ils reviennent." msgid "Active" msgstr "Actives" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "actif {0}" - msgid "Active agent sessions." msgstr "Sessions d'agent actives." @@ -1664,6 +1664,9 @@ msgstr "Les agents chargent leur propre aperçu, pilotent l'interface et joignen msgid "Agents running at once" msgstr "Agents lancés en parallèle" +msgid "Agents watching this page for comments" +msgstr "Agents qui surveillent les commentaires de cette page" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "L'usage agrégé des agents sur l'ensemble des développeurs du classement Superset — tokens, coût, comportement du cache et modèles réellement utilisés." @@ -3170,9 +3173,6 @@ msgstr "Choisissez ce qu'il faut effacer du navigateur intégré." msgid "Choose when Superset pings you." msgstr "Choisissez quand Superset vous notifie." -msgid "Choose which agent watches this page for comments" -msgstr "Choisir l'agent qui surveille les commentaires de cette page" - msgid "Churn" msgstr "Attrition" @@ -3642,9 +3642,6 @@ msgstr "Commentaires" msgid "Comments could not be loaded" msgstr "Les commentaires n'ont pas pu être chargés" -msgid "Comments go to this agent" -msgstr "Les commentaires sont envoyés à cet agent" - msgid "Commit" msgstr "Commiter" @@ -4387,9 +4384,6 @@ msgstr "Impossible de démarrer la session" msgid "Could not stop it" msgstr "Impossible de l'arrêter" -msgid "Could not stop watching" -msgstr "Impossible d'arrêter la surveillance" - msgid "Could not submit prompt. Try again." msgstr "Impossible de soumettre le prompt. Réessayez." @@ -4409,9 +4403,6 @@ msgstr "Impossible de mettre à jour la branche" msgid "serverError.plugins.credentialUnverified" msgstr "Impossible de vérifier les identifiants : {reason}" -msgid "Could not watch this page" -msgstr "Impossible de surveiller cette page" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Impossible de confirmer l'état de l'étoile — vérifiez que la CLI GitHub (`gh`) est installée, que vous y êtes connecté et que vous disposez d'une connexion réseau" @@ -9413,9 +9404,6 @@ msgstr "Aucun agent configuré sur cette machine" msgid "No agents match \"{q}\"." msgstr "Aucun agent ne correspond à « {q} »." -msgid "No agents running here" -msgstr "Aucun agent en cours d'exécution ici" - msgid "No agents yet" msgstr "Aucun agent pour l'instant" @@ -10024,9 +10012,6 @@ msgstr "Rien d'installé pour le moment." msgid "Nothing is running. Remove it and create a new one." msgstr "Rien ne tourne. Supprimez-le et créez-en un nouveau." -msgid "Nothing is watching this page" -msgstr "Rien ne surveille cette page" - msgid "Nothing lives at {pathname}." msgstr "Il n'y a rien à l'emplacement {pathname}." @@ -10121,6 +10106,9 @@ msgstr "Plus ancien" msgid "on {offScopeHostName} — won't run here" msgstr "sur {offScopeHostName} — ne s'exécutera pas ici" +msgid "On a host you can't reach" +msgstr "Sur un hôte que vous ne pouvez pas joindre" + msgid "On click" msgstr "Au clic" @@ -14296,9 +14284,6 @@ msgstr "Arrêter la réponse" msgid "Stop Superset here to delete from another device." msgstr "Arrêtez Superset ici pour le supprimer depuis un autre appareil." -msgid "Stop watching" -msgstr "Arrêter la surveillance" - msgid "Stop workspace run command" msgstr "Arrêter la commande d'exécution de l'espace de travail" @@ -16539,9 +16524,6 @@ msgstr "Avertissement" msgid "Warning occurred." msgstr "Un avertissement s'est produit." -msgid "Watched by an agent in another workspace" -msgstr "Surveillée par un agent d'un autre espace de travail" - msgid "Watchers" msgstr "Observateurs" diff --git a/packages/i18n/locales/id/messages.po b/packages/i18n/locales/id/messages.po index 9cf185e8637..28e482b51f6 100644 --- a/packages/i18n/locales/id/messages.po +++ b/packages/i18n/locales/id/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# workspace} other {# workspace}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {# agen yang sedang berjalan masih memakai akun sebelumnya — pergantian hanya berlaku untuk peluncuran baru.} other {# agen yang sedang berjalan masih memakai akun sebelumnya — pergantian hanya berlaku untuk peluncuran baru.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Komentar masuk ke agen ini} other {Komentar masuk ke agen-agen ini}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Aktivasi, seberapa banyak dipakai setelah masuk, dan apakah mereka kemba msgid "Active" msgstr "Aktif" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "aktif {0}" - msgid "Active agent sessions." msgstr "Sesi agen yang aktif." @@ -1664,6 +1664,9 @@ msgstr "Agen memuat pratinjaunya sendiri, mengendalikan UI, dan melampirkan bukt msgid "Agents running at once" msgstr "Agen yang berjalan sekaligus" +msgid "Agents watching this page for comments" +msgstr "Agen yang memantau halaman ini untuk komentar" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Agregat penggunaan agen dari seluruh developer di papan peringkat Superset — token, biaya, perilaku cache, dan model yang benar-benar dipakai orang." @@ -3170,9 +3173,6 @@ msgstr "Pilih apa yang ingin dibersihkan dari browser dalam aplikasi." msgid "Choose when Superset pings you." msgstr "Pilih kapan Superset memberi tahu Anda." -msgid "Choose which agent watches this page for comments" -msgstr "Pilih agen yang memantau komentar di halaman ini" - msgid "Churn" msgstr "Churn" @@ -3642,9 +3642,6 @@ msgstr "Komentar" msgid "Comments could not be loaded" msgstr "Komentar tidak bisa dimuat" -msgid "Comments go to this agent" -msgstr "Komentar masuk ke agen ini" - msgid "Commit" msgstr "Commit" @@ -4387,9 +4384,6 @@ msgstr "Tidak bisa memulai sesi" msgid "Could not stop it" msgstr "Tidak bisa dihentikan" -msgid "Could not stop watching" -msgstr "Tidak bisa berhenti memantau" - msgid "Could not submit prompt. Try again." msgstr "Tidak bisa mengirim prompt. Coba lagi." @@ -4409,9 +4403,6 @@ msgstr "Tidak bisa memperbarui branch" msgid "serverError.plugins.credentialUnverified" msgstr "Tidak dapat memverifikasi kredensial: {reason}" -msgid "Could not watch this page" -msgstr "Tidak bisa memantau halaman ini" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Tidak bisa memastikan status star — pastikan GitHub CLI (`gh`) terpasang, sudah masuk, dan Anda punya koneksi jaringan" @@ -9413,9 +9404,6 @@ msgstr "Tidak ada agen yang dikonfigurasi di mesin ini" msgid "No agents match \"{q}\"." msgstr "Tidak ada agen yang cocok dengan \"{q}\"." -msgid "No agents running here" -msgstr "Tidak ada agen yang berjalan di sini" - msgid "No agents yet" msgstr "Belum ada agen" @@ -10024,9 +10012,6 @@ msgstr "Belum ada yang terpasang." msgid "Nothing is running. Remove it and create a new one." msgstr "Tidak ada yang berjalan. Hapus dan buat yang baru." -msgid "Nothing is watching this page" -msgstr "Tidak ada yang memantau halaman ini" - msgid "Nothing lives at {pathname}." msgstr "Tidak ada apa pun di {pathname}." @@ -10121,6 +10106,9 @@ msgstr "Lebih lama" msgid "on {offScopeHostName} — won't run here" msgstr "di {offScopeHostName} — tidak akan berjalan di sini" +msgid "On a host you can't reach" +msgstr "Di host yang tidak bisa kamu jangkau" + msgid "On click" msgstr "Saat diklik" @@ -14296,9 +14284,6 @@ msgstr "Hentikan respons" msgid "Stop Superset here to delete from another device." msgstr "Hentikan Superset di sini untuk menghapus dari perangkat lain." -msgid "Stop watching" -msgstr "Berhenti memantau" - msgid "Stop workspace run command" msgstr "Hentikan perintah run workspace" @@ -16539,9 +16524,6 @@ msgstr "Warning" msgid "Warning occurred." msgstr "Terjadi peringatan." -msgid "Watched by an agent in another workspace" -msgstr "Diawasi oleh agen di workspace lain" - msgid "Watchers" msgstr "Pengamat" diff --git a/packages/i18n/locales/it/messages.po b/packages/i18n/locales/it/messages.po index 6880635cec3..02714387167 100644 --- a/packages/i18n/locales/it/messages.po +++ b/packages/i18n/locales/it/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# workspace} other {# workspace}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {Un agente in esecuzione usa ancora l'account precedente: il cambio vale solo per i nuovi avvii.} other {# agenti in esecuzione usano ancora l'account precedente: il cambio vale solo per i nuovi avvii.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {I commenti vanno a questo agente} other {I commenti vanno a questi agenti}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "L'attivazione, quanto lo usano una volta entrati e se tornano." msgid "Active" msgstr "Attiva" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "attivo {0}" - msgid "Active agent sessions." msgstr "Sessioni degli agenti attive." @@ -1664,6 +1664,9 @@ msgstr "Gli agenti caricano la propria anteprima, guidano l'interfaccia e allega msgid "Agents running at once" msgstr "Agenti in esecuzione in parallelo" +msgid "Agents watching this page for comments" +msgstr "Agenti che osservano questa pagina per i commenti" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Utilizzo aggregato degli agenti di tutti gli sviluppatori nella classifica di Superset — token, costi, comportamento della cache e quali modelli vengono davvero usati." @@ -3170,9 +3173,6 @@ msgstr "Scegli cosa cancellare dal browser interno." msgid "Choose when Superset pings you." msgstr "Scegli quando Superset ti avvisa." -msgid "Choose which agent watches this page for comments" -msgstr "Scegli quale agente osserva i commenti di questa pagina" - msgid "Churn" msgstr "Abbandono" @@ -3642,9 +3642,6 @@ msgstr "Commenti" msgid "Comments could not be loaded" msgstr "Impossibile caricare i commenti" -msgid "Comments go to this agent" -msgstr "I commenti vanno a questo agente" - msgid "Commit" msgstr "Commit" @@ -4387,9 +4384,6 @@ msgstr "Impossibile avviare la sessione" msgid "Could not stop it" msgstr "Impossibile arrestarlo" -msgid "Could not stop watching" -msgstr "Impossibile smettere di osservare" - msgid "Could not submit prompt. Try again." msgstr "Impossibile inviare il prompt. Riprova." @@ -4409,9 +4403,6 @@ msgstr "Impossibile aggiornare il branch" msgid "serverError.plugins.credentialUnverified" msgstr "Impossibile verificare la credenziale: {reason}" -msgid "Could not watch this page" -msgstr "Impossibile osservare questa pagina" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Impossibile confermare lo stato della star — controlla che la CLI di GitHub (`gh`) sia installata, che tu abbia effettuato l'accesso e che ci sia connessione di rete" @@ -9413,9 +9404,6 @@ msgstr "Nessun agente configurato su questa macchina" msgid "No agents match \"{q}\"." msgstr "Nessun agente corrisponde a \"{q}\"." -msgid "No agents running here" -msgstr "Nessun agente in esecuzione qui" - msgid "No agents yet" msgstr "Ancora nessun agente" @@ -10024,9 +10012,6 @@ msgstr "Ancora nulla di installato." msgid "Nothing is running. Remove it and create a new one." msgstr "Non è in esecuzione nulla. Rimuovilo e creane uno nuovo." -msgid "Nothing is watching this page" -msgstr "Niente sta osservando questa pagina" - msgid "Nothing lives at {pathname}." msgstr "Non c'è niente in {pathname}." @@ -10121,6 +10106,9 @@ msgstr "Più vecchi" msgid "on {offScopeHostName} — won't run here" msgstr "su {offScopeHostName} — non verrà eseguita qui" +msgid "On a host you can't reach" +msgstr "Su un host che non puoi raggiungere" + msgid "On click" msgstr "Al clic" @@ -14296,9 +14284,6 @@ msgstr "Interrompi la risposta" msgid "Stop Superset here to delete from another device." msgstr "Chiudi Superset qui per eliminarlo da un altro dispositivo." -msgid "Stop watching" -msgstr "Smetti di osservare" - msgid "Stop workspace run command" msgstr "Arresta il comando di esecuzione del workspace" @@ -16539,9 +16524,6 @@ msgstr "Avviso" msgid "Warning occurred." msgstr "Si è verificato un avviso." -msgid "Watched by an agent in another workspace" -msgstr "Osservata da un agente in un altro workspace" - msgid "Watchers" msgstr "Osservatori" diff --git a/packages/i18n/locales/ja/messages.po b/packages/i18n/locales/ja/messages.po index 6043b1cbfac..0ab1d696830 100644 --- a/packages/i18n/locales/ja/messages.po +++ b/packages/i18n/locales/ja/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {#件のワークスペース} other {#件のワーク msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {実行中の#件のエージェントはまだ以前のアカウントを使用しています。切り替えが適用されるのは新規起動のみです。} other {実行中の#件のエージェントはまだ以前のアカウントを使用しています。切り替えが適用されるのは新規起動のみです。}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {コメントはこのエージェントに送られます} other {コメントはこれらのエージェントに送られます}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "アクティベーション、使い始めてからの利用量、そし msgid "Active" msgstr "有効" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "アクティブ {0}" - msgid "Active agent sessions." msgstr "実行中のエージェントセッション。" @@ -1664,6 +1664,9 @@ msgstr "エージェントが自らプレビューを開き、UIを操作し、 msgid "Agents running at once" msgstr "同時に動かしているエージェント数" +msgid "Agents watching this page for comments" +msgstr "このページのコメントを監視しているエージェント" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Supersetリーダーボード上の全開発者を横断したエージェント利用の集計 — トークン、コスト、キャッシュの挙動、実際に選ばれているモデル。" @@ -3170,9 +3173,6 @@ msgstr "アプリ内ブラウザから消去する項目を選択してくださ msgid "Choose when Superset pings you." msgstr "Supersetから通知するタイミングを選びます。" -msgid "Choose which agent watches this page for comments" -msgstr "このページのコメントを監視するエージェントを選択" - msgid "Churn" msgstr "解約" @@ -3642,9 +3642,6 @@ msgstr "コメント" msgid "Comments could not be loaded" msgstr "コメントを読み込めませんでした" -msgid "Comments go to this agent" -msgstr "コメントはこのエージェントに送られます" - msgid "Commit" msgstr "コミット" @@ -4387,9 +4384,6 @@ msgstr "セッションを開始できませんでした" msgid "Could not stop it" msgstr "停止できませんでした" -msgid "Could not stop watching" -msgstr "監視を停止できませんでした" - msgid "Could not submit prompt. Try again." msgstr "プロンプトを送信できませんでした。もう一度お試しください。" @@ -4409,9 +4403,6 @@ msgstr "ブランチを更新できませんでした" msgid "serverError.plugins.credentialUnverified" msgstr "認証情報を確認できませんでした: {reason}" -msgid "Could not watch this page" -msgstr "このページを監視できませんでした" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "スター状態を確認できませんでした — GitHub CLI (`gh`) がインストール・サインイン済みで、ネットワーク接続があることを確認してください" @@ -9413,9 +9404,6 @@ msgstr "このマシンにはエージェントが設定されていません" msgid "No agents match \"{q}\"." msgstr "「{q}」に一致するエージェントはありません。" -msgid "No agents running here" -msgstr "ここで実行中のエージェントはありません" - msgid "No agents yet" msgstr "エージェントはまだありません" @@ -10024,9 +10012,6 @@ msgstr "まだ何もインストールされていません。" msgid "Nothing is running. Remove it and create a new one." msgstr "何も実行されていません。削除して新しく作成してください。" -msgid "Nothing is watching this page" -msgstr "このページを監視しているものはありません" - msgid "Nothing lives at {pathname}." msgstr "{pathname}には何もありません。" @@ -10121,6 +10106,9 @@ msgstr "それ以前" msgid "on {offScopeHostName} — won't run here" msgstr "{offScopeHostName}上 — ここでは実行されません" +msgid "On a host you can't reach" +msgstr "接続できないホスト上" + msgid "On click" msgstr "クリック時" @@ -14296,9 +14284,6 @@ msgstr "応答を停止" msgid "Stop Superset here to delete from another device." msgstr "別のデバイスから削除するには、ここでSupersetを停止してください。" -msgid "Stop watching" -msgstr "監視を停止" - msgid "Stop workspace run command" msgstr "ワークスペースの実行コマンドを停止" @@ -16539,9 +16524,6 @@ msgstr "警告" msgid "Warning occurred." msgstr "警告が発生しました。" -msgid "Watched by an agent in another workspace" -msgstr "別のワークスペースのエージェントが監視しています" - msgid "Watchers" msgstr "ウォッチャー" diff --git a/packages/i18n/locales/ko/messages.po b/packages/i18n/locales/ko/messages.po index 9f89d599868..a8fab9337a6 100644 --- a/packages/i18n/locales/ko/messages.po +++ b/packages/i18n/locales/ko/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {워크스페이스 #개} other {워크스페이스 #개 msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {실행 중인 에이전트 #개가 아직 이전 계정을 사용하고 있습니다. 전환은 새 실행에만 적용됩니다.} other {실행 중인 에이전트 #개가 아직 이전 계정을 사용하고 있습니다. 전환은 새 실행에만 적용됩니다.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {댓글은 이 에이전트에게 전달됩니다} other {댓글은 이 에이전트들에게 전달됩니다}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "활성화, 들어온 뒤 얼마나 쓰는지, 그리고 다시 돌아오 msgid "Active" msgstr "활성" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "활성 {0}" - msgid "Active agent sessions." msgstr "활성 에이전트 세션입니다." @@ -1664,6 +1664,9 @@ msgstr "에이전트가 직접 미리 보기를 띄우고, UI를 조작하고, msgid "Agents running at once" msgstr "동시에 실행 중인 에이전트" +msgid "Agents watching this page for comments" +msgstr "이 페이지의 댓글을 감시 중인 에이전트" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Superset 리더보드에 참여한 모든 개발자의 에이전트 사용량 집계 — 토큰, 비용, 캐시 동작, 그리고 실제로 많이 쓰이는 모델입니다." @@ -3170,9 +3173,6 @@ msgstr "인앱 브라우저에서 삭제할 항목을 선택하세요." msgid "Choose when Superset pings you." msgstr "Superset이 언제 알릴지 선택하세요." -msgid "Choose which agent watches this page for comments" -msgstr "이 페이지의 댓글을 감시할 에이전트 선택" - msgid "Churn" msgstr "이탈" @@ -3642,9 +3642,6 @@ msgstr "댓글" msgid "Comments could not be loaded" msgstr "댓글을 불러올 수 없습니다" -msgid "Comments go to this agent" -msgstr "댓글은 이 에이전트에게 전달됩니다" - msgid "Commit" msgstr "커밋" @@ -4387,9 +4384,6 @@ msgstr "세션을 시작할 수 없습니다" msgid "Could not stop it" msgstr "중지할 수 없습니다" -msgid "Could not stop watching" -msgstr "감시를 중지할 수 없습니다" - msgid "Could not submit prompt. Try again." msgstr "프롬프트를 제출할 수 없습니다. 다시 시도하세요." @@ -4409,9 +4403,6 @@ msgstr "브랜치를 업데이트할 수 없습니다" msgid "serverError.plugins.credentialUnverified" msgstr "자격 증명을 확인하지 못했습니다: {reason}" -msgid "Could not watch this page" -msgstr "이 페이지를 감시할 수 없습니다" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "스타 상태를 확인하지 못했습니다 — GitHub CLI(`gh`)가 설치되어 로그인되어 있는지, 네트워크에 연결되어 있는지 확인하세요" @@ -9413,9 +9404,6 @@ msgstr "이 컴퓨터에 구성된 에이전트가 없습니다" msgid "No agents match \"{q}\"." msgstr "\"{q}\"과(와) 일치하는 에이전트가 없습니다." -msgid "No agents running here" -msgstr "여기에서 실행 중인 에이전트가 없습니다" - msgid "No agents yet" msgstr "아직 에이전트가 없습니다" @@ -10024,9 +10012,6 @@ msgstr "아직 설치된 항목이 없습니다." msgid "Nothing is running. Remove it and create a new one." msgstr "실행 중인 것이 없습니다. 제거하고 새로 만드세요." -msgid "Nothing is watching this page" -msgstr "이 페이지를 감시하는 에이전트가 없습니다" - msgid "Nothing lives at {pathname}." msgstr "{pathname}에는 아무것도 없습니다." @@ -10121,6 +10106,9 @@ msgstr "이전" msgid "on {offScopeHostName} — won't run here" msgstr "{offScopeHostName}에 있음 — 여기서는 실행되지 않습니다" +msgid "On a host you can't reach" +msgstr "접근할 수 없는 호스트에 있음" + msgid "On click" msgstr "클릭 시" @@ -14296,9 +14284,6 @@ msgstr "응답 중지" msgid "Stop Superset here to delete from another device." msgstr "다른 기기에서 삭제하려면 여기에서 Superset을 종료하세요." -msgid "Stop watching" -msgstr "감시 중지" - msgid "Stop workspace run command" msgstr "워크스페이스 실행 명령 중지" @@ -16539,9 +16524,6 @@ msgstr "경고" msgid "Warning occurred." msgstr "경고가 발생했습니다." -msgid "Watched by an agent in another workspace" -msgstr "다른 워크스페이스의 에이전트가 감시 중입니다" - msgid "Watchers" msgstr "관찰자" diff --git a/packages/i18n/locales/nl/messages.po b/packages/i18n/locales/nl/messages.po index acca4bac6fe..d85c7606fd3 100644 --- a/packages/i18n/locales/nl/messages.po +++ b/packages/i18n/locales/nl/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# werkruimte} other {# werkruimtes}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {Eén draaiende agent gebruikt nog het vorige account — de wissel geldt alleen voor nieuwe starts.} other {# draaiende agents gebruiken nog het vorige account — de wissel geldt alleen voor nieuwe starts.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Reacties gaan naar deze agent} other {Reacties gaan naar deze agents}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Activatie, hoeveel mensen het gebruiken zodra ze binnen zijn, en of ze t msgid "Active" msgstr "Actief" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "actief {0}" - msgid "Active agent sessions." msgstr "Actieve agentsessies." @@ -1664,6 +1664,9 @@ msgstr "Agents laden hun eigen preview, bedienen de UI en voegen screenshotbewij msgid "Agents running at once" msgstr "Agents die tegelijk draaien" +msgid "Agents watching this page for comments" +msgstr "Agents die deze pagina volgen voor reacties" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Totaal agentgebruik van alle developers op het Superset-leaderboard — tokens, kosten, cachegedrag en welke modellen mensen echt gebruiken." @@ -3170,9 +3173,6 @@ msgstr "Kies wat je uit de ingebouwde browser wilt wissen." msgid "Choose when Superset pings you." msgstr "Kies wanneer Superset je een seintje geeft." -msgid "Choose which agent watches this page for comments" -msgstr "Kies welke agent deze pagina volgt voor reacties" - msgid "Churn" msgstr "Opzeggingen" @@ -3642,9 +3642,6 @@ msgstr "Reacties" msgid "Comments could not be loaded" msgstr "Reacties konden niet worden geladen" -msgid "Comments go to this agent" -msgstr "Reacties gaan naar deze agent" - msgid "Commit" msgstr "Committen" @@ -4387,9 +4384,6 @@ msgstr "Kan sessie niet starten" msgid "Could not stop it" msgstr "Kon niet worden gestopt" -msgid "Could not stop watching" -msgstr "Kon niet stoppen met volgen" - msgid "Could not submit prompt. Try again." msgstr "Kan prompt niet insturen. Probeer het opnieuw." @@ -4409,9 +4403,6 @@ msgstr "Kan de branch niet bijwerken" msgid "serverError.plugins.credentialUnverified" msgstr "Kon de inloggegevens niet verifiëren: {reason}" -msgid "Could not watch this page" -msgstr "Kon deze pagina niet volgen" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Kan de sterstatus niet bevestigen — controleer of de GitHub-CLI (`gh`) is geïnstalleerd, of je bent ingelogd en of je een netwerkverbinding hebt" @@ -9413,9 +9404,6 @@ msgstr "Geen agents geconfigureerd op deze machine" msgid "No agents match \"{q}\"." msgstr "Geen agents komen overeen met \"{q}\"." -msgid "No agents running here" -msgstr "Geen agents actief hier" - msgid "No agents yet" msgstr "Nog geen agents" @@ -10024,9 +10012,6 @@ msgstr "Nog niets geïnstalleerd." msgid "Nothing is running. Remove it and create a new one." msgstr "Er draait niets. Verwijder deze en maak een nieuwe aan." -msgid "Nothing is watching this page" -msgstr "Niets volgt deze pagina" - msgid "Nothing lives at {pathname}." msgstr "Er staat niets op {pathname}." @@ -10121,6 +10106,9 @@ msgstr "Ouder" msgid "on {offScopeHostName} — won't run here" msgstr "op {offScopeHostName} — draait hier niet" +msgid "On a host you can't reach" +msgstr "Op een host die je niet kunt bereiken" + msgid "On click" msgstr "Bij klikken" @@ -14296,9 +14284,6 @@ msgstr "Antwoord stoppen" msgid "Stop Superset here to delete from another device." msgstr "Stop Superset hier om vanaf een ander apparaat te verwijderen." -msgid "Stop watching" -msgstr "Stoppen met volgen" - msgid "Stop workspace run command" msgstr "Run-commando van werkruimte stoppen" @@ -16539,9 +16524,6 @@ msgstr "Warning" msgid "Warning occurred." msgstr "Er is een waarschuwing opgetreden." -msgid "Watched by an agent in another workspace" -msgstr "Gevolgd door een agent in een andere werkruimte" - msgid "Watchers" msgstr "Watchers" diff --git a/packages/i18n/locales/pl/messages.po b/packages/i18n/locales/pl/messages.po index 3f49acbc95f..9536fdd0d78 100644 --- a/packages/i18n/locales/pl/messages.po +++ b/packages/i18n/locales/pl/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# obszar roboczy} few {# obszary robocze} many {# obsza msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {# działający agent nadal korzysta z poprzedniego konta — zmiana obejmuje tylko nowe uruchomienia.} few {# działających agentów nadal korzysta z poprzedniego konta — zmiana obejmuje tylko nowe uruchomienia.} many {# działających agentów nadal korzysta z poprzedniego konta — zmiana obejmuje tylko nowe uruchomienia.} other {# działającego agenta nadal korzysta z poprzedniego konta — zmiana obejmuje tylko nowe uruchomienia.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Komentarze trafiają do tego agenta} few {Komentarze trafiają do tych agentów} many {Komentarze trafiają do tych agentów} other {Komentarze trafiają do tych agentów}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Aktywacja, ile korzystają po wejściu i czy wracają." msgid "Active" msgstr "Aktywna" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "aktywny {0}" - msgid "Active agent sessions." msgstr "Aktywne sesje agentów." @@ -1664,6 +1664,9 @@ msgstr "Agenci ładują własny podgląd, sterują interfejsem i dołączają zr msgid "Agents running at once" msgstr "Agentów uruchomionych naraz" +msgid "Agents watching this page for comments" +msgstr "Agenci obserwujący tę stronę pod kątem komentarzy" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Zbiorcze użycie agentów przez wszystkich deweloperów w rankingu Superset — tokeny, koszt, zachowanie cache'u i modele, po które ludzie faktycznie sięgają." @@ -3170,9 +3173,6 @@ msgstr "Wybierz, co wyczyścić z przeglądarki w aplikacji." msgid "Choose when Superset pings you." msgstr "Wybierz, kiedy Superset ma Cię powiadamiać." -msgid "Choose which agent watches this page for comments" -msgstr "Wybierz, który agent obserwuje komentarze na tej stronie" - msgid "Churn" msgstr "Odejścia" @@ -3642,9 +3642,6 @@ msgstr "Komentarze" msgid "Comments could not be loaded" msgstr "Nie udało się wczytać komentarzy" -msgid "Comments go to this agent" -msgstr "Komentarze trafiają do tego agenta" - msgid "Commit" msgstr "Commituj" @@ -4387,9 +4384,6 @@ msgstr "Nie udało się uruchomić sesji" msgid "Could not stop it" msgstr "Nie udało się zatrzymać" -msgid "Could not stop watching" -msgstr "Nie udało się przestać obserwować" - msgid "Could not submit prompt. Try again." msgstr "Nie udało się wysłać promptu. Spróbuj ponownie." @@ -4409,9 +4403,6 @@ msgstr "Nie udało się zaktualizować gałęzi" msgid "serverError.plugins.credentialUnverified" msgstr "Nie udało się zweryfikować poświadczeń: {reason}" -msgid "Could not watch this page" -msgstr "Nie udało się obserwować tej strony" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Nie udało się potwierdzić statusu gwiazdki — sprawdź, czy GitHub CLI (`gh`) jest zainstalowane, zalogowane i czy masz połączenie z siecią" @@ -9413,9 +9404,6 @@ msgstr "Brak skonfigurowanych agentów na tej maszynie" msgid "No agents match \"{q}\"." msgstr "Żaden agent nie pasuje do „{q}”." -msgid "No agents running here" -msgstr "Nie ma tu uruchomionych agentów" - msgid "No agents yet" msgstr "Brak agentów" @@ -10024,9 +10012,6 @@ msgstr "Nic jeszcze nie zainstalowano." msgid "Nothing is running. Remove it and create a new one." msgstr "Nic nie działa. Usuń go i utwórz nowy." -msgid "Nothing is watching this page" -msgstr "Nic nie obserwuje tej strony" - msgid "Nothing lives at {pathname}." msgstr "Pod {pathname} nic nie ma." @@ -10121,6 +10106,9 @@ msgstr "Starsze" msgid "on {offScopeHostName} — won't run here" msgstr "na {offScopeHostName} — nie uruchomi się tutaj" +msgid "On a host you can't reach" +msgstr "Na hoście, do którego nie masz dostępu" + msgid "On click" msgstr "Po kliknięciu" @@ -14296,9 +14284,6 @@ msgstr "Zatrzymaj odpowiedź" msgid "Stop Superset here to delete from another device." msgstr "Zatrzymaj tutaj Superset, aby usunąć hosta z innego urządzenia." -msgid "Stop watching" -msgstr "Przestań obserwować" - msgid "Stop workspace run command" msgstr "Zatrzymaj polecenie uruchamiania obszaru roboczego" @@ -16539,9 +16524,6 @@ msgstr "Ostrzeżenie" msgid "Warning occurred." msgstr "Wystąpiło ostrzeżenie." -msgid "Watched by an agent in another workspace" -msgstr "Obserwowana przez agenta z innego obszaru roboczego" - msgid "Watchers" msgstr "Obserwujący" diff --git a/packages/i18n/locales/pt-BR/messages.po b/packages/i18n/locales/pt-BR/messages.po index 54d286a88e0..13509ebfe73 100644 --- a/packages/i18n/locales/pt-BR/messages.po +++ b/packages/i18n/locales/pt-BR/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# área de trabalho} other {# áreas de trabalho}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {Um agente em execução ainda usa a conta anterior — a troca só vale para novos lançamentos.} other {# agentes em execução ainda usam a conta anterior — a troca só vale para novos lançamentos.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Os comentários vão para este agente} other {Os comentários vão para estes agentes}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Ativação, quanto as pessoas usam depois de entrar e se voltam." msgid "Active" msgstr "Ativa" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "ativo {0}" - msgid "Active agent sessions." msgstr "Sessões de agente ativas." @@ -1664,6 +1664,9 @@ msgstr "Os agentes carregam a própria prévia, usam a interface e anexam captur msgid "Agents running at once" msgstr "Agentes rodando ao mesmo tempo" +msgid "Agents watching this page for comments" +msgstr "Agentes que observam esta página para comentários" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Uso agregado de agentes por todos os desenvolvedores do ranking do Superset — tokens, custo, comportamento de cache e quais modelos as pessoas realmente usam." @@ -3170,9 +3173,6 @@ msgstr "Escolha o que limpar do navegador do app." msgid "Choose when Superset pings you." msgstr "Escolha quando o Superset te avisa." -msgid "Choose which agent watches this page for comments" -msgstr "Escolha qual agente observa os comentários desta página" - msgid "Churn" msgstr "Cancelamentos" @@ -3642,9 +3642,6 @@ msgstr "Comentários" msgid "Comments could not be loaded" msgstr "Não foi possível carregar os comentários" -msgid "Comments go to this agent" -msgstr "Os comentários vão para este agente" - msgid "Commit" msgstr "Fazer commit" @@ -4387,9 +4384,6 @@ msgstr "Não foi possível iniciar a sessão" msgid "Could not stop it" msgstr "Não foi possível parar" -msgid "Could not stop watching" -msgstr "Não foi possível parar de observar" - msgid "Could not submit prompt. Try again." msgstr "Não foi possível enviar o prompt. Tente novamente." @@ -4409,9 +4403,6 @@ msgstr "Não foi possível atualizar a branch" msgid "serverError.plugins.credentialUnverified" msgstr "Não foi possível verificar a credencial: {reason}" -msgid "Could not watch this page" -msgstr "Não foi possível observar esta página" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Não foi possível confirmar o status da estrela — verifique se a CLI do GitHub (`gh`) está instalada, com login feito, e se você tem conexão" @@ -9413,9 +9404,6 @@ msgstr "Nenhum agente configurado nesta máquina" msgid "No agents match \"{q}\"." msgstr "Nenhum agente corresponde a \"{q}\"." -msgid "No agents running here" -msgstr "Nenhum agente em execução aqui" - msgid "No agents yet" msgstr "Nenhum agente ainda" @@ -10024,9 +10012,6 @@ msgstr "Nada instalado ainda." msgid "Nothing is running. Remove it and create a new one." msgstr "Nada está rodando. Remova e crie outra." -msgid "Nothing is watching this page" -msgstr "Nada está observando esta página" - msgid "Nothing lives at {pathname}." msgstr "Não há nada em {pathname}." @@ -10121,6 +10106,9 @@ msgstr "Mais antigo" msgid "on {offScopeHostName} — won't run here" msgstr "em {offScopeHostName} — não vai rodar aqui" +msgid "On a host you can't reach" +msgstr "Em um host que você não alcança" + msgid "On click" msgstr "Ao clicar" @@ -14296,9 +14284,6 @@ msgstr "Parar resposta" msgid "Stop Superset here to delete from another device." msgstr "Feche o Superset aqui para excluir a partir de outro dispositivo." -msgid "Stop watching" -msgstr "Parar de observar" - msgid "Stop workspace run command" msgstr "Parar o comando de execução da área de trabalho" @@ -16539,9 +16524,6 @@ msgstr "Aviso" msgid "Warning occurred." msgstr "Houve um aviso." -msgid "Watched by an agent in another workspace" -msgstr "Observada por um agente de outra área de trabalho" - msgid "Watchers" msgstr "Observadores" diff --git a/packages/i18n/locales/ru/messages.po b/packages/i18n/locales/ru/messages.po index d4aa2aeaf88..77e9352fb87 100644 --- a/packages/i18n/locales/ru/messages.po +++ b/packages/i18n/locales/ru/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# рабочая область} few {# рабочие msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {# работающий агент всё ещё использует прежний аккаунт — переключение действует только для новых запусков.} few {# работающих агента всё ещё используют прежний аккаунт — переключение действует только для новых запусков.} many {# работающих агентов всё ещё используют прежний аккаунт — переключение действует только для новых запусков.} other {# работающего агента всё ещё использует прежний аккаунт — переключение действует только для новых запусков.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Комментарии отправляются этому агенту} few {Комментарии отправляются этим агентам} many {Комментарии отправляются этим агентам} other {Комментарии отправляются этим агентам}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Активация, насколько активно им пользу msgid "Active" msgstr "Активна" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "активен {0}" - msgid "Active agent sessions." msgstr "Активные сессии агентов." @@ -1664,6 +1664,9 @@ msgstr "Агенты сами открывают свой предпросмот msgid "Agents running at once" msgstr "Агентов запущено одновременно" +msgid "Agents watching this page for comments" +msgstr "Агенты, следящие за комментариями на этой странице" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Совокупное использование агентов всеми разработчиками в лидерборде Superset — токены, стоимость, поведение кеша и модели, к которым люди действительно обращаются." @@ -3170,9 +3173,6 @@ msgstr "Выберите, что очистить во встроенном бр msgid "Choose when Superset pings you." msgstr "Выберите, когда Superset вас уведомляет." -msgid "Choose which agent watches this page for comments" -msgstr "Выберите, какой агент отслеживает комментарии на этой странице" - msgid "Churn" msgstr "Отток" @@ -3642,9 +3642,6 @@ msgstr "Комментарии" msgid "Comments could not be loaded" msgstr "Не удалось загрузить комментарии" -msgid "Comments go to this agent" -msgstr "Комментарии отправляются этому агенту" - msgid "Commit" msgstr "Закоммитить" @@ -4387,9 +4384,6 @@ msgstr "Не удалось запустить сессию" msgid "Could not stop it" msgstr "Не удалось остановить" -msgid "Could not stop watching" -msgstr "Не удалось прекратить отслеживание" - msgid "Could not submit prompt. Try again." msgstr "Не удалось отправить промпт. Повторите." @@ -4409,9 +4403,6 @@ msgstr "Не удалось обновить ветку" msgid "serverError.plugins.credentialUnverified" msgstr "Не удалось проверить учётные данные: {reason}" -msgid "Could not watch this page" -msgstr "Не удалось начать отслеживание этой страницы" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Не удалось проверить статус звезды — убедитесь, что GitHub CLI (`gh`) установлен, выполнен вход и есть подключение к сети" @@ -9413,9 +9404,6 @@ msgstr "На этой машине не настроено ни одного а msgid "No agents match \"{q}\"." msgstr "Нет агентов по запросу «{q}»." -msgid "No agents running here" -msgstr "Здесь нет запущенных агентов" - msgid "No agents yet" msgstr "Агентов пока нет" @@ -10024,9 +10012,6 @@ msgstr "Пока ничего не установлено." msgid "Nothing is running. Remove it and create a new one." msgstr "Ничего не запущено. Удалите её и создайте новую." -msgid "Nothing is watching this page" -msgstr "Эту страницу никто не отслеживает" - msgid "Nothing lives at {pathname}." msgstr "По адресу {pathname} ничего нет." @@ -10121,6 +10106,9 @@ msgstr "Ранее" msgid "on {offScopeHostName} — won't run here" msgstr "на {offScopeHostName} — здесь не запустится" +msgid "On a host you can't reach" +msgstr "На недоступном хосте" + msgid "On click" msgstr "По клику" @@ -14296,9 +14284,6 @@ msgstr "Остановить ответ" msgid "Stop Superset here to delete from another device." msgstr "Остановите Superset здесь, чтобы удалить с другого устройства." -msgid "Stop watching" -msgstr "Прекратить отслеживание" - msgid "Stop workspace run command" msgstr "Остановить команду запуска рабочей области" @@ -16539,9 +16524,6 @@ msgstr "Предупреждение" msgid "Warning occurred." msgstr "Возникло предупреждение." -msgid "Watched by an agent in another workspace" -msgstr "Отслеживается агентом из другой рабочей области" - msgid "Watchers" msgstr "Наблюдатели" diff --git a/packages/i18n/locales/tr/messages.po b/packages/i18n/locales/tr/messages.po index 7ec5b48f89a..b0c75af4194 100644 --- a/packages/i18n/locales/tr/messages.po +++ b/packages/i18n/locales/tr/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# çalışma alanı} other {# çalışma alanı}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {Çalışan bir ajan hâlâ önceki hesabı kullanıyor — geçiş yalnızca yeni başlatmalar için geçerli.} other {Çalışan # ajan hâlâ önceki hesabı kullanıyor — geçiş yalnızca yeni başlatmalar için geçerli.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Yorumlar bu ajana gider} other {Yorumlar bu ajanlara gider}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Aktivasyon, içeri girdikten sonra ne kadar kullandıkları ve geri dön msgid "Active" msgstr "Etkin" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "etkin {0}" - msgid "Active agent sessions." msgstr "Etkin ajan oturumları." @@ -1664,6 +1664,9 @@ msgstr "Ajanlar kendi önizlemelerini yükler, arayüzü kullanır ve işi incel msgid "Agents running at once" msgstr "Aynı anda çalışan ajanlar" +msgid "Agents watching this page for comments" +msgstr "Bu sayfayı yorumlar için izleyen ajanlar" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Superset liderlik tablosundaki her geliştiricinin toplam ajan kullanımı — token, maliyet, önbellek davranışı ve insanların gerçekte tercih ettiği modeller." @@ -3170,9 +3173,6 @@ msgstr "Uygulama içi tarayıcıdan neyin temizleneceğini seçin." msgid "Choose when Superset pings you." msgstr "Superset'in sizi ne zaman uyaracağını seçin." -msgid "Choose which agent watches this page for comments" -msgstr "Bu sayfanın yorumlarını hangi ajanın izleyeceğini seç" - msgid "Churn" msgstr "Kayıp" @@ -3642,9 +3642,6 @@ msgstr "Yorumlar" msgid "Comments could not be loaded" msgstr "Yorumlar yüklenemedi" -msgid "Comments go to this agent" -msgstr "Yorumlar bu ajana gider" - msgid "Commit" msgstr "Commit et" @@ -4387,9 +4384,6 @@ msgstr "Oturum başlatılamadı" msgid "Could not stop it" msgstr "Durdurulamadı" -msgid "Could not stop watching" -msgstr "İzleme durdurulamadı" - msgid "Could not submit prompt. Try again." msgstr "İstem gönderilemedi. Yeniden deneyin." @@ -4409,9 +4403,6 @@ msgstr "Dal güncellenemedi" msgid "serverError.plugins.credentialUnverified" msgstr "Kimlik bilgisi doğrulanamadı: {reason}" -msgid "Could not watch this page" -msgstr "Bu sayfa izlenemedi" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Yıldız durumu doğrulanamadı — GitHub CLI'nin (`gh`) kurulu ve oturum açmış olduğunu ve ağ bağlantınızın bulunduğunu kontrol edin" @@ -9413,9 +9404,6 @@ msgstr "Bu makinede yapılandırılmış ajan yok" msgid "No agents match \"{q}\"." msgstr "\"{q}\" ile eşleşen ajan yok." -msgid "No agents running here" -msgstr "Burada çalışan ajan yok" - msgid "No agents yet" msgstr "Henüz ajan yok" @@ -10024,9 +10012,6 @@ msgstr "Henüz kurulu bir şey yok." msgid "Nothing is running. Remove it and create a new one." msgstr "Hiçbir şey çalışmıyor. Bunu kaldırıp yeni bir tane oluşturun." -msgid "Nothing is watching this page" -msgstr "Bu sayfayı hiçbir şey izlemiyor" - msgid "Nothing lives at {pathname}." msgstr "{pathname} yolunda bir şey yok." @@ -10121,6 +10106,9 @@ msgstr "Daha eski" msgid "on {offScopeHostName} — won't run here" msgstr "{offScopeHostName} üzerinde — burada çalışmaz" +msgid "On a host you can't reach" +msgstr "Erişemediğin bir ana makinede" + msgid "On click" msgstr "Tıklandığında" @@ -14296,9 +14284,6 @@ msgstr "Yanıtı durdur" msgid "Stop Superset here to delete from another device." msgstr "Başka bir cihazdan silmek için Superset'i burada durdurun." -msgid "Stop watching" -msgstr "İzlemeyi durdur" - msgid "Stop workspace run command" msgstr "Çalışma alanı çalıştırma komutunu durdur" @@ -16539,9 +16524,6 @@ msgstr "Uyarı" msgid "Warning occurred." msgstr "Bir uyarı oluştu." -msgid "Watched by an agent in another workspace" -msgstr "Başka bir çalışma alanındaki bir ajan tarafından izleniyor" - msgid "Watchers" msgstr "İzleyenler" diff --git a/packages/i18n/locales/vi/messages.po b/packages/i18n/locales/vi/messages.po index c73c9fa1d68..dc0d34e215d 100644 --- a/packages/i18n/locales/vi/messages.po +++ b/packages/i18n/locales/vi/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {# workspace} other {# workspace}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {# agent đang chạy vẫn dùng tài khoản trước — việc chuyển chỉ áp dụng cho lần khởi chạy mới.} other {# agent đang chạy vẫn dùng tài khoản trước — việc chuyển chỉ áp dụng cho lần khởi chạy mới.}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {Bình luận sẽ được gửi tới agent này} other {Bình luận sẽ được gửi tới các agent này}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "Kích hoạt, mức độ sử dụng sau khi bắt đầu dùng, và li msgid "Active" msgstr "Đang hoạt động" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "hoạt động {0}" - msgid "Active agent sessions." msgstr "Các phiên agent đang hoạt động." @@ -1664,6 +1664,9 @@ msgstr "Agent tự mở bản xem trước, thao tác giao diện và đính kè msgid "Agents running at once" msgstr "Số agent chạy cùng lúc" +msgid "Agents watching this page for comments" +msgstr "Các agent đang theo dõi bình luận trên trang này" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Tổng hợp mức sử dụng agent của mọi lập trình viên trên bảng xếp hạng Superset — token, chi phí, hành vi cache và những mô hình mọi người thực sự dùng." @@ -3170,9 +3173,6 @@ msgstr "Chọn thứ cần xóa khỏi trình duyệt trong ứng dụng." msgid "Choose when Superset pings you." msgstr "Chọn khi nào Superset báo cho bạn." -msgid "Choose which agent watches this page for comments" -msgstr "Chọn agent theo dõi bình luận của trang này" - msgid "Churn" msgstr "Rời bỏ" @@ -3642,9 +3642,6 @@ msgstr "Bình luận" msgid "Comments could not be loaded" msgstr "Không thể tải bình luận" -msgid "Comments go to this agent" -msgstr "Bình luận sẽ được gửi tới agent này" - msgid "Commit" msgstr "Commit" @@ -4387,9 +4384,6 @@ msgstr "Không thể bắt đầu phiên" msgid "Could not stop it" msgstr "Không thể dừng" -msgid "Could not stop watching" -msgstr "Không thể ngừng theo dõi" - msgid "Could not submit prompt. Try again." msgstr "Không thể gửi prompt. Hãy thử lại." @@ -4409,9 +4403,6 @@ msgstr "Không thể cập nhật nhánh" msgid "serverError.plugins.credentialUnverified" msgstr "Không xác minh được thông tin đăng nhập: {reason}" -msgid "Could not watch this page" -msgstr "Không thể theo dõi trang này" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "Không xác nhận được trạng thái sao — hãy kiểm tra GitHub CLI (`gh`) đã cài, đã đăng nhập và bạn có kết nối mạng" @@ -9413,9 +9404,6 @@ msgstr "Chưa cấu hình agent nào trên máy này" msgid "No agents match \"{q}\"." msgstr "Không có agent nào khớp \"{q}\"." -msgid "No agents running here" -msgstr "Không có agent nào đang chạy ở đây" - msgid "No agents yet" msgstr "Chưa có agent nào" @@ -10024,9 +10012,6 @@ msgstr "Chưa cài gì cả." msgid "Nothing is running. Remove it and create a new one." msgstr "Không có gì đang chạy. Hãy gỡ nó và tạo cái mới." -msgid "Nothing is watching this page" -msgstr "Chưa có gì theo dõi trang này" - msgid "Nothing lives at {pathname}." msgstr "Không có gì ở {pathname}." @@ -10121,6 +10106,9 @@ msgstr "Cũ hơn" msgid "on {offScopeHostName} — won't run here" msgstr "trên {offScopeHostName} — sẽ không chạy ở đây" +msgid "On a host you can't reach" +msgstr "Trên một host bạn không kết nối được" + msgid "On click" msgstr "Khi nhấp" @@ -14296,9 +14284,6 @@ msgstr "Dừng phản hồi" msgid "Stop Superset here to delete from another device." msgstr "Hãy dừng Superset ở đây để xóa từ thiết bị khác." -msgid "Stop watching" -msgstr "Ngừng theo dõi" - msgid "Stop workspace run command" msgstr "Dừng lệnh chạy của workspace" @@ -16539,9 +16524,6 @@ msgstr "Cảnh báo" msgid "Warning occurred." msgstr "Có cảnh báo." -msgid "Watched by an agent in another workspace" -msgstr "Được một agent ở workspace khác theo dõi" - msgid "Watchers" msgstr "Người theo dõi" diff --git a/packages/i18n/locales/zh-CN/messages.po b/packages/i18n/locales/zh-CN/messages.po index e1058489f8e..768972d7c77 100644 --- a/packages/i18n/locales/zh-CN/messages.po +++ b/packages/i18n/locales/zh-CN/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {#个工作区} other {#个工作区}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {#个运行中的智能体仍在使用之前的账户。切换只对新启动生效。} other {#个运行中的智能体仍在使用之前的账户。切换只对新启动生效。}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {评论将发送给此智能体} other {评论将发送给这些智能体}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "激活情况、进来之后的使用量,以及他们是否会回来。 msgid "Active" msgstr "启用中" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "活跃{0}" - msgid "Active agent sessions." msgstr "活跃的智能体会话。" @@ -1664,6 +1664,9 @@ msgstr "智能体自己加载预览、操作界面,并在标记为待审查之 msgid "Agents running at once" msgstr "同时运行的智能体数" +msgid "Agents watching this page for comments" +msgstr "正在关注此页面评论的智能体" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Superset 排行榜上所有开发者的智能体使用汇总 —— token、成本、缓存表现,以及大家实际常用的模型。" @@ -3170,9 +3173,6 @@ msgstr "选择要从应用内浏览器清除的内容。" msgid "Choose when Superset pings you." msgstr "选择Superset在什么时候通知你。" -msgid "Choose which agent watches this page for comments" -msgstr "选择由哪个智能体关注此页面的评论" - msgid "Churn" msgstr "流失" @@ -3642,9 +3642,6 @@ msgstr "评论" msgid "Comments could not be loaded" msgstr "无法加载评论" -msgid "Comments go to this agent" -msgstr "评论将发送给此智能体" - msgid "Commit" msgstr "提交" @@ -4387,9 +4384,6 @@ msgstr "无法启动会话" msgid "Could not stop it" msgstr "无法停止" -msgid "Could not stop watching" -msgstr "无法停止关注" - msgid "Could not submit prompt. Try again." msgstr "无法提交提示词。请重试。" @@ -4409,9 +4403,6 @@ msgstr "无法更新分支" msgid "serverError.plugins.credentialUnverified" msgstr "无法验证凭据:{reason}" -msgid "Could not watch this page" -msgstr "无法关注此页面" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "无法确认加星状态,请检查是否已安装并登录GitHub CLI(`gh`),以及网络是否连通" @@ -9413,9 +9404,6 @@ msgstr "这台机器上没有配置智能体" msgid "No agents match \"{q}\"." msgstr "没有匹配“{q}”的智能体。" -msgid "No agents running here" -msgstr "这里没有运行中的智能体" - msgid "No agents yet" msgstr "暂无智能体" @@ -10024,9 +10012,6 @@ msgstr "还没有安装任何插件。" msgid "Nothing is running. Remove it and create a new one." msgstr "没有任何东西在运行。移除它,再建一个。" -msgid "Nothing is watching this page" -msgstr "没有智能体在关注此页面" - msgid "Nothing lives at {pathname}." msgstr "{pathname}下没有任何内容。" @@ -10121,6 +10106,9 @@ msgstr "更早" msgid "on {offScopeHostName} — won't run here" msgstr "在{offScopeHostName}上,不会在这里运行" +msgid "On a host you can't reach" +msgstr "在你无法连接的主机上" + msgid "On click" msgstr "点击时" @@ -14296,9 +14284,6 @@ msgstr "停止回复" msgid "Stop Superset here to delete from another device." msgstr "在此停止Superset,然后从其他设备删除。" -msgid "Stop watching" -msgstr "停止关注" - msgid "Stop workspace run command" msgstr "停止工作区运行命令" @@ -16539,9 +16524,6 @@ msgstr "警告" msgid "Warning occurred." msgstr "出现了警告。" -msgid "Watched by an agent in another workspace" -msgstr "由另一个工作区的智能体关注" - msgid "Watchers" msgstr "关注者" diff --git a/packages/i18n/locales/zh-TW/messages.po b/packages/i18n/locales/zh-TW/messages.po index 47613ef5787..9d70374e1c8 100644 --- a/packages/i18n/locales/zh-TW/messages.po +++ b/packages/i18n/locales/zh-TW/messages.po @@ -226,6 +226,10 @@ msgstr "{0, plural, one {#個工作區} other {#個工作區}}" msgid "{0, plural, one {A running agent still uses the previous account — the switch only reaches new launches.} other {# running agents still use the previous account — the switch only reaches new launches.}}" msgstr "{0, plural, one {#個執行中的代理程式仍在使用先前的帳戶。切換只對新啟動生效。} other {#個執行中的代理程式仍在使用先前的帳戶。切換只對新啟動生效。}}" +#. placeholder {0}: Math.max(watchers.length, 1) +msgid "{0, plural, one {Comments go to this agent} other {Comments go to these agents}}" +msgstr "{0, plural, one {評論將傳送給此代理程式} other {評論將傳送給這些代理程式}}" + #. placeholder {0}: failures.length #. placeholder {0}: nextFailures.length msgid "{0, plural, one {Couldn’t delete # workspace} other {Couldn’t delete # workspaces}}" @@ -1391,10 +1395,6 @@ msgstr "啟用情況、進來之後的使用量,以及他們是否會回來。 msgid "Active" msgstr "啟用中" -#. placeholder {0}: formatDistanceToNowStrict(binding.lastEventAt, { addSuffix: true, }) -msgid "active {0}" -msgstr "活躍{0}" - msgid "Active agent sessions." msgstr "活躍的代理程式會話。" @@ -1664,6 +1664,9 @@ msgstr "代理程式自己載入預覽、操作介面,並在標記為待審查 msgid "Agents running at once" msgstr "同時執行的代理程式數" +msgid "Agents watching this page for comments" +msgstr "正在關注此頁面評論的代理程式" + msgid "Aggregate agent usage across every developer on the Superset leaderboard — tokens, cost, cache behaviour and which models people actually reach for." msgstr "Superset 排行榜上所有開發者的彙總代理使用量 — tokens、成本、快取行為,以及大家實際選用的模型。" @@ -3170,9 +3173,6 @@ msgstr "選擇要從應用程式內瀏覽器清除的內容。" msgid "Choose when Superset pings you." msgstr "選擇Superset在什麼時候通知你。" -msgid "Choose which agent watches this page for comments" -msgstr "選擇由哪個代理程式關注此頁面的評論" - msgid "Churn" msgstr "流失" @@ -3642,9 +3642,6 @@ msgstr "評論" msgid "Comments could not be loaded" msgstr "無法載入留言" -msgid "Comments go to this agent" -msgstr "評論將傳送給此代理程式" - msgid "Commit" msgstr "提交" @@ -4387,9 +4384,6 @@ msgstr "無法啟動會話" msgid "Could not stop it" msgstr "無法停止" -msgid "Could not stop watching" -msgstr "無法停止關注" - msgid "Could not submit prompt. Try again." msgstr "無法提交提示詞。請重試。" @@ -4409,9 +4403,6 @@ msgstr "無法更新分支" msgid "serverError.plugins.credentialUnverified" msgstr "無法驗證憑證:{reason}" -msgid "Could not watch this page" -msgstr "無法關注此頁面" - msgid "Couldn't confirm star status — check that the GitHub CLI (`gh`) is installed, signed in, and that you have a network connection" msgstr "無法確認加星狀態,請檢查是否已安裝並登入GitHub CLI(`gh`),以及網路是否連通" @@ -9413,9 +9404,6 @@ msgstr "這臺機器上沒有配置代理程式" msgid "No agents match \"{q}\"." msgstr "沒有匹配「{q}」的代理程式。" -msgid "No agents running here" -msgstr "這裡沒有執行中的代理程式" - msgid "No agents yet" msgstr "暫無代理程式" @@ -10024,9 +10012,6 @@ msgstr "還沒有安裝任何外掛。" msgid "Nothing is running. Remove it and create a new one." msgstr "沒有任何東西在執行。移除它,再建一個。" -msgid "Nothing is watching this page" -msgstr "沒有代理程式在關注此頁面" - msgid "Nothing lives at {pathname}." msgstr "{pathname}下沒有任何內容。" @@ -10121,6 +10106,9 @@ msgstr "更早" msgid "on {offScopeHostName} — won't run here" msgstr "在{offScopeHostName}上,不會在這裡執行" +msgid "On a host you can't reach" +msgstr "在你無法連線的主機上" + msgid "On click" msgstr "點選時" @@ -14296,9 +14284,6 @@ msgstr "停止回覆" msgid "Stop Superset here to delete from another device." msgstr "在此停止Superset,然後從其他裝置刪除。" -msgid "Stop watching" -msgstr "停止關注" - msgid "Stop workspace run command" msgstr "停止工作區執行命令" @@ -16539,9 +16524,6 @@ msgstr "警告" msgid "Warning occurred." msgstr "出現了警告。" -msgid "Watched by an agent in another workspace" -msgstr "由另一個工作區的代理程式關注" - msgid "Watchers" msgstr "關注者" From 05548d239a3434748c9fab4c844c7644b365b38b Mon Sep 17 00:00:00 2001 From: Harshith Mullapudi Date: Thu, 24 Sep 2026 01:03:53 +0530 Subject: [PATCH 4/5] fix(desktop): give the watcher row room for the session name MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit At 288px the row spent its width on the workspace name and truncated the session to "Release notes ag…", which is the part that identifies the agent. The menu is 320px now, matching the design, and the session name takes the slack instead of the workspace. --- .../components/PageWatcherMenu/PageWatcherMenu.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx index 6edc44fef51..db02c4c1584 100644 --- a/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx +++ b/apps/desktop/src/renderer/routes/_authenticated/_dashboard/v2-workspace/$workspaceId/hooks/usePaneRegistry/components/PagePaneHeaderExtras/components/PageWatcherMenu/PageWatcherMenu.tsx @@ -82,7 +82,7 @@ export function PageWatcherMenu({ workspaceId, pageId }: PageWatcherMenuProps) { {watchers.length > 1 ? {watchers.length} : null} - + - + {watcher.sessionTitle ?? watcher.agentId ?? watcher.terminalId.slice(0, 8)} - + {watcher.workspaceName} {navigable ? ( From 68e01579f65b4e16f7cf1f7a2fada69be467441f Mon Sep 17 00:00:00 2001 From: Satya Patel Date: Wed, 23 Sep 2026 17:48:49 -0700 Subject: [PATCH 5/5] fix(desktop): stop a finished watch lingering as "on a host you can't reach" When a local agent stopped watching a page, the watcher menu kept its badge for up to 30s and listed the agent as "On a host you can't reach". The host lists refreshed on page-watch:changed, but the org-wide page.get flag that feeds the unreachable row did not, and the host announced the change before clearing that flag, so even a refetch could read the old value. Refresh page.get on page-watch:changed, and clear the flag before notifying. Verified in the running app: the badge now clears in 300-400ms after unwatch, down from 33s+. --- .../usePageWatchersForPage/usePageWatchersForPage.ts | 5 ++++- packages/host-service/src/page-watch/page-watch-manager.ts | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/usePageWatchersForPage.ts b/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/usePageWatchersForPage.ts index ca8380f3ac3..ab9a9cc9c3c 100644 --- a/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/usePageWatchersForPage.ts +++ b/apps/desktop/src/renderer/hooks/host-service/usePageWatchersForPage/usePageWatchersForPage.ts @@ -1,5 +1,6 @@ import { useQueries, useQueryClient } from "@tanstack/react-query"; import { useCallback, useMemo } from "react"; +import { cloudTrpc } from "renderer/lib/cloud-trpc"; import { getHostServiceClientByUrl } from "renderer/lib/host-service-client"; import { useHostWorkspaces } from "renderer/routes/_authenticated/providers/HostWorkspacesProvider"; import { useWorkspaceEvent } from "../useWorkspaceEvent"; @@ -42,6 +43,7 @@ export function usePageWatchersForPage({ }): PageWatcherRow[] { const { workspaces, cache } = useHostWorkspaces(); const queryClient = useQueryClient(); + const cloudUtils = cloudTrpc.useUtils(); const currentHostId = useMemo( () => workspaces.find((workspace) => workspace.id === workspaceId)?.hostId, @@ -84,7 +86,8 @@ export function usePageWatchersForPage({ void queryClient.invalidateQueries({ queryKey: ["page-watchers-by-host"], }); - }, [queryClient]), + if (pageId) void cloudUtils.page.get.invalidate({ id: pageId }); + }, [queryClient, cloudUtils, pageId]), ); const names = useMemo( diff --git a/packages/host-service/src/page-watch/page-watch-manager.ts b/packages/host-service/src/page-watch/page-watch-manager.ts index 9b5131c8dd8..56de96aa10c 100644 --- a/packages/host-service/src/page-watch/page-watch-manager.ts +++ b/packages/host-service/src/page-watch/page-watch-manager.ts @@ -104,8 +104,8 @@ export class PageWatchManager { if (!entry) return; this.entries.delete(pageId); this.stopTickingIfEmpty(); - this.notifyChanged(entry.workspaceId); await this.clearWatch(entry); + this.notifyChanged(entry.workspaceId); } private async clearWatch(entry: PageWatchEntry): Promise { @@ -157,8 +157,8 @@ export class PageWatchManager { this.stopTickingIfEmpty(); for (const entry of dropped) { - this.notifyChanged(entry.workspaceId); await this.clearWatch(entry); + this.notifyChanged(entry.workspaceId); } }