diff --git a/web/workspace/deno.json b/web/workspace/deno.json index c3a7acf36..3b9e7853b 100644 --- a/web/workspace/deno.json +++ b/web/workspace/deno.json @@ -6,7 +6,7 @@ "dev": "deno run -A npm:vite@7.2.7 dev", "dev:backend": "cd ../.. && cargo run -p yoi-workspace-server --bin yoi-server -- serve --listen 127.0.0.1:8787", "check": "deno run -A npm:@sveltejs/kit@2.49.4 sync && deno run -A npm:svelte-check@4.3.4 --tsconfig ./tsconfig.json", - "test": "deno test --allow-read=src,test,tests,../../docs --allow-env=LOG,VSCODE_TEXTMATE_DEBUG,NODE_ENV tests/workspace-model.test.ts tests/repository-api.test.ts tests/workspace-catalog.test.ts tests/profile-api.test.ts tests/skill-api.test.ts tests/tooltip-contract.test.ts tests/bevel-contract.test.ts tests/bevel-line-contract.test.ts tests/typography-contract.test.ts src/lib/workspace/auth/model.test.ts tests/auth-api.test.ts src/lib/workspace/api/http.test.ts src/lib/workspace/api/workers.test.ts src/lib/workspace/header/breadcrumb-model.test.ts src/lib/workspace/console/chat-submit.test.ts src/lib/workspace/console/composer-delivery.test.ts test/composer-history.test.ts tests/composer-paste.test.ts src/lib/workspace/console/composer-command.test.ts src/lib/workspace/console/composer-draft.test.ts src/lib/workspace/console/composer-completion.test.ts test/console/ansi.test.ts src/lib/workspace/console/model.test.ts src/lib/workspace/console/run-status.test.ts src/lib/workspace/companion/api.test.ts tests/workdir-api.test.ts src/lib/workspace/console/tasks.test.ts test/ticket-detail-route-reuse.test.ts test/objective-pages.test.ts test/repositories/ui.test.ts src/lib/workspace/console/worker-console.ui.test.ts src/lib/workspace/settings/model.test.ts tests/runtime-connection.test.ts tests/runtime-management.test.ts tests/runtime-management-source.test.ts src/lib/workspace/sidebar/override-stack.test.ts src/lib/workspace/sidebar/workers.test.ts src/lib/workspace/sidebar/workspace-switcher.test.ts src/lib/workspace/sidebar/worker-subscription.test.ts src/lib/workspace/sidebar/worker-launch.test.ts test/sidebar/worker-actions.test.ts src/lib/workspace/tickets/merge-request-resources.test.ts src/lib/workspace/tickets/ticket-panel.test.ts test/merge-request-status.test.ts test/config-source/decodal-grammar.test.ts test/config-source/editor-state.test.ts test/config-source/fixed-schema-wrapper.test.ts test/config-source/toolchain.test.ts test/config-source/wasm-parity.test.ts test/repository-access/api.test.ts test/repository-access/loader.test.ts test/repository-access/ui.test.ts test/repository-ssh-connection-ui.test.ts", + "test": "deno test --allow-read=src,test,tests,../../docs --allow-env=LOG,VSCODE_TEXTMATE_DEBUG,NODE_ENV tests/workspace-model.test.ts tests/repository-api.test.ts tests/workspace-catalog.test.ts tests/profile-api.test.ts tests/skill-api.test.ts tests/tooltip-contract.test.ts tests/bevel-contract.test.ts tests/bevel-line-contract.test.ts tests/typography-contract.test.ts src/lib/workspace/auth/model.test.ts tests/auth-api.test.ts src/lib/workspace/api/http.test.ts src/lib/workspace/api/workers.test.ts src/lib/workspace/header/breadcrumb-model.test.ts src/lib/workspace/console/chat-submit.test.ts src/lib/workspace/console/composer-delivery.test.ts test/composer-history.test.ts tests/composer-paste.test.ts src/lib/workspace/console/composer-command.test.ts src/lib/workspace/console/composer-draft.test.ts src/lib/workspace/console/composer-completion.test.ts test/console/ansi.test.ts src/lib/workspace/console/model.test.ts src/lib/workspace/console/run-status.test.ts src/lib/workspace/companion/api.test.ts tests/workdir-api.test.ts src/lib/workspace/console/tasks.test.ts test/ticket-detail-route-reuse.test.ts test/objective-pages.test.ts test/repositories/ui.test.ts src/lib/workspace/console/worker-console.ui.test.ts src/lib/workspace/settings/model.test.ts tests/runtime-connection.test.ts tests/runtime-management.test.ts tests/runtime-management-source.test.ts src/lib/workspace/sidebar/override-stack.test.ts src/lib/workspace/sidebar/workers.test.ts src/lib/workspace/sidebar/workspace-switcher.test.ts src/lib/workspace/sidebar/worker-subscription.test.ts src/lib/workspace/sidebar/worker-workdir-meta.test.ts src/lib/workspace/sidebar/worker-launch.test.ts test/sidebar/worker-actions.test.ts src/lib/workspace/tickets/merge-request-resources.test.ts src/lib/workspace/tickets/ticket-panel.test.ts test/merge-request-status.test.ts test/config-source/decodal-grammar.test.ts test/config-source/editor-state.test.ts test/config-source/fixed-schema-wrapper.test.ts test/config-source/toolchain.test.ts test/config-source/wasm-parity.test.ts test/repository-access/api.test.ts test/repository-access/loader.test.ts test/repository-access/ui.test.ts test/repository-ssh-connection-ui.test.ts", "test:component": "deno run -A npm:vitest@3.2.4 run --config vitest.config.ts", "build": "deno run -A npm:vite@7.2.7 build", "preview": "deno run -A npm:vite@7.2.7 preview", diff --git a/web/workspace/src/lib/workspace/console/worker-console.ui.test.ts b/web/workspace/src/lib/workspace/console/worker-console.ui.test.ts index 774df4ab1..5f5094f8f 100644 --- a/web/workspace/src/lib/workspace/console/worker-console.ui.test.ts +++ b/web/workspace/src/lib/workspace/console/worker-console.ui.test.ts @@ -219,6 +219,9 @@ Deno.test("workspace Worker list lives on the dedicated Workers page", async () const workersNav = await Deno.readTextFile( new URL("../sidebar/WorkersNavSection.svelte", import.meta.url), ); + const workerWorkdirMeta = await Deno.readTextFile( + new URL("../sidebar/worker-workdir-meta.ts", import.meta.url), + ); const sidebar = await Deno.readTextFile( new URL("../sidebar/WorkspaceSidebar.svelte", import.meta.url), ); @@ -256,12 +259,18 @@ Deno.test("workspace Worker list lives on the dedicated Workers page", async () workersNav.includes("worker.display_name || worker.label") && workersNav.includes("worker-status-dot") && workersNav.includes("worker-status-spinner") && - workersNav.includes("workdirMeta(worker)") && - workersNav.includes("attachment.alias") && - workersNav.includes("attachment.repository_key ?? '—'") && - workersNav.includes("attachment.working_directory_id") && + workersNav.includes("sidebarWorkdirMeta(worker.workdir_attachments)") && + workersNav.includes("title={workdir.details}") && + !workersNav.includes("attachment.alias") && + workerWorkdirMeta.includes("workdir.current_selector") && + workerWorkdirMeta.includes("workdir.creation_selector") && + workerWorkdirMeta.includes("explicitReferenceFallback(") && + workerWorkdirMeta.includes('"detached"') && + sidebarCss.includes(".worker-nav-meta") && + sidebarCss.includes("text-overflow: ellipsis") && + sidebarCss.includes("white-space: nowrap") && !workersNav.includes('aria-disabled="true"'), - "Workers sidebar should link to the Worker list page and show state indicators with repository/workdir metadata", + "Workers sidebar should show truncated repo:branch Workdir metadata with detached fallback and detail-only attachment identifiers", ); assert( workersNav.includes("COLLAPSED_WORKER_COUNT = 6") && diff --git a/web/workspace/src/lib/workspace/sidebar/WorkersNavSection.svelte b/web/workspace/src/lib/workspace/sidebar/WorkersNavSection.svelte index 3260def2e..6adcb63c5 100644 --- a/web/workspace/src/lib/workspace/sidebar/WorkersNavSection.svelte +++ b/web/workspace/src/lib/workspace/sidebar/WorkersNavSection.svelte @@ -12,6 +12,7 @@ type SidebarWorker, } from './worker-subscription'; import { canShowWorkerInSidebar, sidebarWorkerActivity } from './workers'; + import { sidebarWorkdirMeta } from './worker-workdir-meta'; const COLLAPSED_WORKER_COUNT = 6; type WorkerActionKind = 'stop' | 'delete'; @@ -37,14 +38,6 @@ Math.max(0, workers.length - COLLAPSED_WORKER_COUNT), ); - function workdirMeta(worker: SidebarWorker): string { - const attachments = worker.workdir_attachments; - if (attachments.length === 0) return '—'; - return attachments - .map((attachment) => `${attachment.alias}: ${attachment.repository_key ?? '—'}・${attachment.working_directory_id}`) - .join(', '); - } - function workerKey(worker: SidebarWorker): string { return `${worker.runtime_id}:${worker.worker_id}`; } @@ -180,6 +173,7 @@ {@const activity = sidebarWorkerActivity(worker)} {@const key = workerKey(worker)} {@const label = worker.display_name || worker.label} + {@const workdir = sidebarWorkdirMeta(worker.workdir_attachments)}
  • {label} - - {workdirMeta(worker)} + + {workdir.text}