fix: remove stale workbench platform gating
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
- `跟踪已读 / 批量跟踪同步 / 单账号跟踪同步 / 高分作品分析 / 平台技能验收` 已改成“真实调用优先”,避免旧 capability 口径把已接好的接口误判成未接入。
|
||||
- `OneLiner 会话 / 运行详情 / 治理控制面 / integrations / live-recorder` 这些固定接口也已经切成 live-first,请求失败才降级,不再先被陈旧 capability 表拦住。
|
||||
- 任务恢复链会优先真实调用 `/v2/explore/jobs/{job_id}/retry`,只有接口真的不存在时才回退到手动恢复模板。
|
||||
- `找对标 / 跟踪账号` 里一批已经失效的 “当前平台待接入” 按钮禁用与入口分支已删除,当前 active 平台都直接走真实路由,失败时再给真实反馈。
|
||||
|
||||
### NAS 联调与回归
|
||||
|
||||
|
||||
@@ -2589,11 +2589,6 @@ async function bootstrap() {
|
||||
async function markTrackingDigestRead() {
|
||||
const platform = getCurrentPlatformValue();
|
||||
const trackingCursorPath = getWorkbenchRoute(platform, "trackingCursor");
|
||||
if (!trackingCursorPath) {
|
||||
rememberAction("当前平台待接入", getPendingWorkbenchReason(platform), "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const nextSeenAt = new Date().toISOString();
|
||||
try {
|
||||
await storyforgeFetch(trackingCursorPath, {
|
||||
@@ -2627,11 +2622,6 @@ async function markTrackingDigestRead() {
|
||||
async function refreshTrackingAccountsAction() {
|
||||
const platform = getCurrentPlatformValue();
|
||||
const trackingRefreshPath = getWorkbenchRoute(platform, "trackingRefresh");
|
||||
if (!trackingRefreshPath) {
|
||||
rememberAction("当前平台待接入", getPendingWorkbenchReason(platform), "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
setBusy(true, "正在同步跟踪账号...");
|
||||
try {
|
||||
let payload;
|
||||
@@ -2668,11 +2658,6 @@ async function refreshTrackedAccountAction(trackedAccountId) {
|
||||
const trackedItem = getTrackingAccounts().find((item) => item.tracked_account_id === trackedAccountId);
|
||||
const platform = trackedItem?.platform || getCurrentPlatformValue();
|
||||
const trackingRefreshPath = getWorkbenchRoute(platform, "trackingAccountRefresh", trackedAccountId);
|
||||
if (!trackingRefreshPath) {
|
||||
rememberAction("当前平台待接入", getPendingWorkbenchReason(platform), "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
setBusy(true, "正在同步该跟踪账号...");
|
||||
try {
|
||||
let payload;
|
||||
@@ -4612,11 +4597,8 @@ function markSavedCandidate(candidate, links) {
|
||||
|
||||
async function saveCandidateAsBenchmark(candidateIndex, relationType = "benchmark") {
|
||||
const account = requireSelectedAccountRow();
|
||||
const gate = getAccountWorkbenchGate(account);
|
||||
if (!gate.enabled) throw new Error(gate.reason);
|
||||
const platform = gate.platform;
|
||||
const platform = getAccountPlatform(account);
|
||||
const benchmarkPath = getWorkbenchRoute(platform, "benchmarkLinks", account.id);
|
||||
if (!benchmarkPath) throw new Error(getPendingWorkbenchReason(platform));
|
||||
const candidate = safeArray(appState.lastSimilaritySearch?.candidates)[Number(candidateIndex)];
|
||||
if (!candidate) throw new Error("当前候选不存在,请先重新查相似");
|
||||
const payload = {
|
||||
@@ -5531,7 +5513,7 @@ function renderDetailTabs(stateKey, tabs) {
|
||||
`;
|
||||
}
|
||||
|
||||
function renderDiscoveryOverviewSection({ selected, selectedProject, importedSources, tracked, workbenchReason, topVideos, reports, latestVideos, currentPlatformLabel, topVideoBatchResult }) {
|
||||
function renderDiscoveryOverviewSection({ selected, selectedProject, importedSources, tracked, topVideos, reports, latestVideos, currentPlatformLabel, topVideoBatchResult }) {
|
||||
return `
|
||||
<div class="layout-grid grid-main">
|
||||
<div class="side-stack">
|
||||
@@ -5544,8 +5526,8 @@ function renderDiscoveryOverviewSection({ selected, selectedProject, importedSou
|
||||
<div class="task-meta">
|
||||
<span class="tag">${escapeHtml(selectedProject?.name || "未选项目")}</span>
|
||||
<span class="tag">${escapeHtml(getSelectedAssistant()?.name || "未选 Agent")}</span>
|
||||
${actionTag(importedSources.length ? "继续同步" : "导入当前对标", "open-import-selected-account", "", { disabledReason: workbenchReason || "" })}
|
||||
${tracked ? `<span class="tag green">已在跟踪</span>` : actionTag("加入跟踪", "open-track-selected-account", "", { disabledReason: workbenchReason || "" })}
|
||||
${actionTag(importedSources.length ? "继续同步" : "导入当前对标", "open-import-selected-account")}
|
||||
${tracked ? `<span class="tag green">已在跟踪</span>` : actionTag("加入跟踪", "open-track-selected-account")}
|
||||
</div>
|
||||
</div>
|
||||
` : `<div class="task-item"><h4>还没有选中账号</h4><p>先从上方列表选一个对标账号,再决定是否导入到当前项目。</p></div>`}
|
||||
@@ -5687,7 +5669,6 @@ function renderDiscoveryScreen() {
|
||||
const selected = getSelectedAccount();
|
||||
const selectedPlatform = getAccountPlatform(selected);
|
||||
const effectivePlatform = selectedPlatform || currentPlatform;
|
||||
const workbenchReason = !isWorkbenchPlatform(effectivePlatform) ? getPendingWorkbenchReason(effectivePlatform) : "";
|
||||
const reports = safeArray(appState.analysisReports.length ? appState.analysisReports : appState.selectedWorkspace?.recent_reports);
|
||||
const linkedAccounts = safeArray(appState.selectedWorkspace?.linked_accounts);
|
||||
const videos = safeArray(appState.selectedVideos?.items);
|
||||
@@ -5750,7 +5731,6 @@ function renderDiscoveryScreen() {
|
||||
selectedProject,
|
||||
importedSources,
|
||||
tracked,
|
||||
workbenchReason,
|
||||
topVideos,
|
||||
reports,
|
||||
latestVideos,
|
||||
@@ -5763,13 +5743,11 @@ function renderDiscoveryScreen() {
|
||||
detailBodyHtml = renderDiscoveryRelationsSection(linkedAccounts, similarCandidates);
|
||||
}
|
||||
const discoveryActionsHtml = isMobileUi
|
||||
? `${button("导入主页", "open-import-homepage")} ${button("交给主 Agent", "handoff-to-main-agent", "secondary", { attrs: discoveryHandoffAttrs })} ${button("存对标", "open-benchmark-link", "primary", { disabledReason: workbenchReason || "" })}`
|
||||
: `${button("导入主页", "open-import-homepage")} ${button("导入当前对标", "open-import-selected-account", "secondary", { disabledReason: workbenchReason || "" })} ${button(tracked ? "已在跟踪" : "加入跟踪", "open-track-selected-account", "secondary", { disabledReason: workbenchReason || "" })} ${button("账号分析", "analyze-selected-account", "secondary", { disabledReason: workbenchReason || "" })} ${button("高分分析", "analyze-top-videos", "secondary", { disabledReason: workbenchReason || "" })} ${button("查相似", "open-similar-search", "secondary", { disabledReason: workbenchReason || "" })} ${button("交给主 Agent", "handoff-to-main-agent", "secondary", { attrs: discoveryHandoffAttrs })} ${button("存对标", "open-benchmark-link", "primary", { disabledReason: workbenchReason || "" })}`;
|
||||
? `${button("导入主页", "open-import-homepage")} ${button("交给主 Agent", "handoff-to-main-agent", "secondary", { attrs: discoveryHandoffAttrs })} ${button("存对标", "open-benchmark-link", "primary")}`
|
||||
: `${button("导入主页", "open-import-homepage")} ${button("导入当前对标", "open-import-selected-account", "secondary")} ${button(tracked ? "已在跟踪" : "加入跟踪", "open-track-selected-account", "secondary")} ${button("账号分析", "analyze-selected-account", "secondary")} ${button("高分分析", "analyze-top-videos", "secondary")} ${button("查相似", "open-similar-search", "secondary")} ${button("交给主 Agent", "handoff-to-main-agent", "secondary", { attrs: discoveryHandoffAttrs })} ${button("存对标", "open-benchmark-link", "primary")}`;
|
||||
return screenShell(
|
||||
"找对标",
|
||||
isWorkbenchPlatform(currentPlatform)
|
||||
? `这里已经接入真实${currentPlatformLabel}账号列表和单账号详情。`
|
||||
: `${workbenchReason}。当前仍可导入内容源、绑定 Agent 和沉淀复盘。`,
|
||||
`这里已经接入真实${currentPlatformLabel}账号列表和单账号详情。`,
|
||||
discoveryActionsHtml,
|
||||
`
|
||||
${renderMainAgentLandingNotice("discovery")}
|
||||
@@ -5917,15 +5895,6 @@ function renderTrackingScreen() {
|
||||
return screenShell("跟踪账号", "完成工作区自动连接后才能生成真实日报。", `${button("自动连接", "open-auth", "primary")}`, renderEmptyState("日报未加载", "当前还没有可用的对标账号数据。"));
|
||||
}
|
||||
const currentPlatform = getCurrentPlatformValue();
|
||||
const trackingAccountsPath = getWorkbenchRoute(currentPlatform, "trackingAccounts");
|
||||
if (!trackingAccountsPath) {
|
||||
return screenShell(
|
||||
"跟踪账号",
|
||||
`${getPendingWorkbenchReason(currentPlatform)}。`,
|
||||
`${button("跳到找对标", "goto-discovery", "primary")}`,
|
||||
renderEmptyState("跟踪能力暂未接入", `当前实例还没有提供 ${platformLabel(currentPlatform)} 跟踪入口,等 collector 开放后这里会自动切成真实日报。`)
|
||||
);
|
||||
}
|
||||
const trackedAccounts = getTrackingAccounts().filter((item) => item.platform === currentPlatform);
|
||||
const digestItems = getTrackingDigestItems(12, { platform: currentPlatform });
|
||||
const platformCursor = getTrackingCursorForPlatform(currentPlatform) || appState.lastSeenAt;
|
||||
@@ -8338,13 +8307,7 @@ function openImportHomepageAction() {
|
||||
|
||||
function openImportSelectedAccountAction() {
|
||||
const account = requireSelectedAccountRow();
|
||||
const gate = getAccountWorkbenchGate(account);
|
||||
if (!gate.enabled) {
|
||||
rememberAction("当前平台待接入", gate.reason, "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const platform = gate.platform;
|
||||
const platform = getAccountPlatform(account);
|
||||
const project = requireSelectedProject();
|
||||
const assistants = getAssistantOptions(project.id);
|
||||
const currentSources = getCurrentProjectSourcesForAccount(account, project.id);
|
||||
@@ -8412,19 +8375,8 @@ function openImportSelectedAccountAction() {
|
||||
|
||||
function openTrackSelectedAccountAction() {
|
||||
const account = requireSelectedAccountRow();
|
||||
const gate = getAccountWorkbenchGate(account);
|
||||
if (!gate.enabled) {
|
||||
rememberAction("当前平台待接入", gate.reason, "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const platform = gate.platform;
|
||||
const platform = getAccountPlatform(account);
|
||||
const trackingAccountsPath = getWorkbenchRoute(platform, "trackingAccounts");
|
||||
if (!trackingAccountsPath) {
|
||||
rememberAction("当前平台待接入", getPendingWorkbenchReason(platform), "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const project = requireSelectedProject();
|
||||
const assistants = getAssistantOptions(project.id);
|
||||
const trackedItem = safeArray(appState.trackingAccounts).find((item) => item.tracked_account_id === account.id);
|
||||
@@ -9579,19 +9531,8 @@ function openEditAssistantAction(assistantId = "") {
|
||||
|
||||
function openAnalyzeSelectedAccountAction() {
|
||||
const account = requireSelectedAccountRow();
|
||||
const gate = getAccountWorkbenchGate(account);
|
||||
if (!gate.enabled) {
|
||||
rememberAction("当前平台待接入", gate.reason, "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const platform = gate.platform;
|
||||
const platform = getAccountPlatform(account);
|
||||
const analyzePath = getWorkbenchRoute(platform, "analyzeAccount", account.id);
|
||||
if (!analyzePath) {
|
||||
rememberAction("当前平台待接入", getPendingWorkbenchReason(platform), "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
openActionModal({
|
||||
title: "分析当前对标账号",
|
||||
description: "从商业化和内容运营角度重跑一次账号分析。",
|
||||
@@ -9627,19 +9568,8 @@ function openAnalyzeSelectedAccountAction() {
|
||||
|
||||
function openAnalyzeTopVideosAction() {
|
||||
const account = requireSelectedAccountRow();
|
||||
const gate = getAccountWorkbenchGate(account);
|
||||
if (!gate.enabled) {
|
||||
rememberAction("当前平台待接入", gate.reason, "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const platform = gate.platform;
|
||||
const platform = getAccountPlatform(account);
|
||||
const analyzePath = getWorkbenchRoute(platform, "analyzeTopVideos", account.id);
|
||||
if (!analyzePath) {
|
||||
rememberAction("当前平台待接入", getPendingWorkbenchReason(platform), "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
openActionModal({
|
||||
title: "分析高分作品",
|
||||
description: "对当前对标账号的高分作品批量补分析。",
|
||||
@@ -9684,19 +9614,8 @@ function openAnalyzeTopVideosAction() {
|
||||
|
||||
function openSimilaritySearchAction() {
|
||||
const account = requireSelectedAccountRow();
|
||||
const gate = getAccountWorkbenchGate(account);
|
||||
if (!gate.enabled) {
|
||||
rememberAction("当前平台待接入", gate.reason, "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const platform = gate.platform;
|
||||
const platform = getAccountPlatform(account);
|
||||
const createPath = getWorkbenchRoute(platform, "similarSearches");
|
||||
if (!createPath) {
|
||||
rememberAction("当前平台待接入", getPendingWorkbenchReason(platform), "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
openActionModal({
|
||||
title: "查相似账号",
|
||||
description: "让 Agent 基于当前账号画像找更多可借鉴对象。",
|
||||
@@ -9733,19 +9652,8 @@ function openSimilaritySearchAction() {
|
||||
|
||||
function openBenchmarkLinkAction(defaults = {}) {
|
||||
const account = requireSelectedAccountRow();
|
||||
const gate = getAccountWorkbenchGate(account);
|
||||
if (!gate.enabled) {
|
||||
rememberAction("当前平台待接入", gate.reason, "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const platform = gate.platform;
|
||||
const platform = getAccountPlatform(account);
|
||||
const benchmarkPath = getWorkbenchRoute(platform, "benchmarkLinks", account.id);
|
||||
if (!benchmarkPath) {
|
||||
rememberAction("当前平台待接入", getPendingWorkbenchReason(platform), "orange");
|
||||
renderAll();
|
||||
return;
|
||||
}
|
||||
const options = safeArray(appState.accounts)
|
||||
.filter((item) => item.id !== account.id)
|
||||
.map((item) => ({ value: item.id, label: getAccountName(item) || item.id }));
|
||||
|
||||
Reference in New Issue
Block a user