Merge pull request #1202 from pikasTech/fix/v03-workbench-entry-1199

fix: 修复 v0.3 Vue 工作台 bootstrap 降级
This commit is contained in:
Lyon
2026-06-14 13:55:34 +08:00
committed by GitHub
3 changed files with 33 additions and 5 deletions
@@ -60,7 +60,7 @@ function readWidth(): number {
<p class="page-eyebrow">Sessions</p>
<h2>显式会话</h2>
</div>
<button class="btn btn-primary btn-sm" type="button" @click="workbench.createSession">新建</button>
<button id="session-create" class="btn btn-primary btn-sm" type="button" @click="workbench.createSession">新建</button>
</div>
<div class="session-model-channel" id="session-model-channel">模型通道{{ workbench.providerProfile }}</div>
<div class="session-list" id="session-tabs">
@@ -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<ApiResult<WorkspaceBootstrapResponse>> {
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<WorkspaceBootstrapResponse>): Promise<ApiResult<WorkspaceBootstrapResponse>> {
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 {
@@ -17,7 +17,7 @@ useAutoRefresh(() => workbench.refreshLive(), 30_000);
</script>
<template>
<section class="workbench-route">
<section id="workspace" class="workbench-route">
<PageHeader eyebrow="Workbench" title="Code Workbench" description="Code Agent 是平台控制台中的一个应用页面;session、trace、HWPOD evidence 仍走 Cloud Web 同源 API。" />
<div class="workbench-status-row">
<StatusBadge :status="workbench.chatPending ? 'running' : 'source'" :label="workbench.chatPending ? '处理中' : 'SOURCE'" />