diff --git a/web/hwlab-cloud-web/src/components/workbench/SessionRail.vue b/web/hwlab-cloud-web/src/components/workbench/SessionRail.vue
index 5177348d..5187d95e 100644
--- a/web/hwlab-cloud-web/src/components/workbench/SessionRail.vue
+++ b/web/hwlab-cloud-web/src/components/workbench/SessionRail.vue
@@ -60,7 +60,7 @@ function readWidth(): number {
Sessions
显式会话
-
+
模型通道:{{ workbench.providerProfile }}
diff --git a/web/hwlab-cloud-web/src/composables/useWorkspaceBootstrap.ts b/web/hwlab-cloud-web/src/composables/useWorkspaceBootstrap.ts
index 6e48d357..0eeacdc5 100644
--- a/web/hwlab-cloud-web/src/composables/useWorkspaceBootstrap.ts
+++ b/web/hwlab-cloud-web/src/composables/useWorkspaceBootstrap.ts
@@ -1,4 +1,4 @@
-import { authAPI, type WorkspaceBootstrapResponse } from "@/api";
+import { authAPI, workbenchAPI, type WorkspaceBootstrapResponse } from "@/api";
import type { ApiResult, WorkspaceRecord } from "@/types";
import { DEFAULT_WORKBENCH_PROJECT_ID, asRecord, normalizeWorkbenchProjectId } from "@/utils";
@@ -20,8 +20,36 @@ export async function consumeEarlyWorkspaceBootstrap(projectId: string): Promise
export async function resolveWorkspaceBootstrap(projectId: string): Promise
> {
const normalizedProjectId = normalizeWorkbenchProjectId(projectId) ?? DEFAULT_WORKBENCH_PROJECT_ID;
const early = await consumeEarlyWorkspaceBootstrap(normalizedProjectId);
- if (early) return early;
- return authAPI.workspaceBootstrap(normalizedProjectId);
+ if (early && (early.ok || early.status !== 404)) return early;
+ const primary = await authAPI.workspaceBootstrap(normalizedProjectId);
+ if (primary.ok || primary.status !== 404) return primary;
+ return resolveWorkspaceBootstrapFallback(normalizedProjectId, primary);
+}
+
+async function resolveWorkspaceBootstrapFallback(projectId: string, primary: ApiResult): Promise> {
+ const session = await authAPI.session();
+ const sessionPayload = session.data ?? { authenticated: false, mode: "server" as const };
+ if (!session.ok || sessionPayload.authenticated !== true) {
+ return {
+ ok: session.ok,
+ status: session.status,
+ data: { ...sessionPayload, projectId, workspace: null, workspaceStatus: null, workspaceError: primary.error ?? primary.status },
+ error: session.error
+ };
+ }
+ const workspace = await workbenchAPI.workspace(projectId);
+ return {
+ ok: true,
+ status: session.status,
+ data: {
+ ...sessionPayload,
+ projectId,
+ workspace: workspace.ok ? workspace.data?.workspace ?? null : null,
+ workspaceStatus: workspace.status,
+ workspaceError: workspace.ok ? null : workspace.error ?? workspace.status
+ },
+ error: null
+ };
}
export function publishWorkspaceBootstrap(projectId: string, workspace: WorkspaceRecord | null | undefined): void {
diff --git a/web/hwlab-cloud-web/src/views/workbench/CodeWorkbenchView.vue b/web/hwlab-cloud-web/src/views/workbench/CodeWorkbenchView.vue
index 60293d9c..e0ccd3f1 100644
--- a/web/hwlab-cloud-web/src/views/workbench/CodeWorkbenchView.vue
+++ b/web/hwlab-cloud-web/src/views/workbench/CodeWorkbenchView.vue
@@ -17,7 +17,7 @@ useAutoRefresh(() => workbench.refreshLive(), 30_000);
-