fix: avoid unsupported workdir subscription

This commit is contained in:
2026-09-21 22:52:19 +09:00
parent 8e6bd1be5c
commit d7240470d1
2 changed files with 11 additions and 22 deletions
@@ -222,6 +222,9 @@ Deno.test("workspace Worker list lives on the dedicated Workers page", async ()
const workerWorkdirMeta = await Deno.readTextFile( const workerWorkdirMeta = await Deno.readTextFile(
new URL("../sidebar/worker-workdir-meta.ts", import.meta.url), new URL("../sidebar/worker-workdir-meta.ts", import.meta.url),
); );
const workerSubscription = await Deno.readTextFile(
new URL("../sidebar/worker-subscription.ts", import.meta.url),
);
const sidebar = await Deno.readTextFile( const sidebar = await Deno.readTextFile(
new URL("../sidebar/WorkspaceSidebar.svelte", import.meta.url), new URL("../sidebar/WorkspaceSidebar.svelte", import.meta.url),
); );
@@ -266,6 +269,10 @@ Deno.test("workspace Worker list lives on the dedicated Workers page", async ()
workerWorkdirMeta.includes("workdir.creation_selector") && workerWorkdirMeta.includes("workdir.creation_selector") &&
workerWorkdirMeta.includes("explicitReferenceFallback(") && workerWorkdirMeta.includes("explicitReferenceFallback(") &&
workerWorkdirMeta.includes('"detached"') && workerWorkdirMeta.includes('"detached"') &&
workerSubscription.includes(
'workspaceApiPath(workspaceId, "/working-directories")',
) &&
!workerSubscription.includes('topic: "workspace_workdirs"') &&
sidebarCss.includes(".worker-nav-meta") && sidebarCss.includes(".worker-nav-meta") &&
sidebarCss.includes("text-overflow: ellipsis") && sidebarCss.includes("text-overflow: ellipsis") &&
sidebarCss.includes("white-space: nowrap") && sidebarCss.includes("white-space: nowrap") &&
@@ -47,22 +47,20 @@ export function workspaceWorkersStore(
let loading = true; let loading = true;
let error: string | null = null; let error: string | null = null;
let disposed = false; let disposed = false;
let workdirRequest = 0;
const publish = () => { const publish = () => {
const workers = [...projection.workers.values()] const workers = [...projection.workers.values()]
.map((worker) => projectWorker(worker, workdirs)) .map((worker) => projectWorker(worker, workdirs))
.sort(compareWorkersForSidebar); .sort(compareWorkersForSidebar);
set({ loading, error, workers }); set({ loading, error, workers });
}; };
const refreshWorkdirs = async () => { const loadWorkdirs = async () => {
const request = ++workdirRequest;
const result = await loadJson( const result = await loadJson(
fetch, fetch,
workspaceApiPath(workspaceId, "/working-directories"), workspaceApiPath(workspaceId, "/working-directories"),
undefined, undefined,
parseWorkingDirectoryListResponse, parseWorkingDirectoryListResponse,
); );
if (disposed || request !== workdirRequest || !result.data) return; if (disposed || !result.data) return;
workdirs = new Map( workdirs = new Map(
result.data.items.map(( result.data.items.map((
workdir, workdir,
@@ -70,8 +68,7 @@ export function workspaceWorkersStore(
); );
publish(); publish();
}; };
const multiplexer = workspaceMultiplexer(workspaceId); const subscription = workspaceMultiplexer(workspaceId).subscribe(
const subscription = multiplexer.subscribe(
{ topic: "workspace_workers" }, { topic: "workspace_workers" },
{ {
onFrame: (frame) => { onFrame: (frame) => {
@@ -114,25 +111,10 @@ export function workspaceWorkersStore(
}, },
}, },
); );
const workdirSubscription = multiplexer.subscribe( void loadWorkdirs();
{ topic: "workspace_workdirs" },
{
onFrame: (frame) => {
const isSnapshot = frame.frame === "response" &&
frame.message.result === "subscribed";
const isUpdate = frame.frame === "event" &&
frame.message.event === "event" &&
(frame.message.data.payload.event === "workdir_upserted" ||
frame.message.data.payload.event === "workdir_removed");
if (isSnapshot || isUpdate) void refreshWorkdirs();
},
},
);
void refreshWorkdirs();
return () => { return () => {
disposed = true; disposed = true;
subscription.close(); subscription.close();
workdirSubscription.close();
}; };
}, },
); );