diff --git a/CHANGELOG.md b/CHANGELOG.md
index 35eb04d..1ed3923 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -30,6 +30,7 @@
- `跟踪已读 / 批量跟踪同步 / 单账号跟踪同步 / 高分作品分析 / 平台技能验收` 已改成“真实调用优先”,避免旧 capability 口径把已接好的接口误判成未接入。
- `OneLiner 会话 / 运行详情 / 治理控制面 / integrations / live-recorder` 这些固定接口也已经切成 live-first,请求失败才降级,不再先被陈旧 capability 表拦住。
- 任务恢复链会优先真实调用 `/v2/explore/jobs/{job_id}/retry`,只有接口真的不存在时才回退到手动恢复模板。
+- `找对标 / 跟踪账号` 里一批已经失效的 “当前平台待接入” 按钮禁用与入口分支已删除,当前 active 平台都直接走真实路由,失败时再给真实反馈。
### NAS 联调与回归
diff --git a/web/storyforge-web-v4/assets/app.js b/web/storyforge-web-v4/assets/app.js
index 0bc04b8..8b3f66a 100644
--- a/web/storyforge-web-v4/assets/app.js
+++ b/web/storyforge-web-v4/assets/app.js
@@ -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 `
@@ -5544,8 +5526,8 @@ function renderDiscoveryOverviewSection({ selected, selectedProject, importedSou
${escapeHtml(selectedProject?.name || "未选项目")}
${escapeHtml(getSelectedAssistant()?.name || "未选 Agent")}
- ${actionTag(importedSources.length ? "继续同步" : "导入当前对标", "open-import-selected-account", "", { disabledReason: workbenchReason || "" })}
- ${tracked ? `已在跟踪` : actionTag("加入跟踪", "open-track-selected-account", "", { disabledReason: workbenchReason || "" })}
+ ${actionTag(importedSources.length ? "继续同步" : "导入当前对标", "open-import-selected-account")}
+ ${tracked ? `已在跟踪` : actionTag("加入跟踪", "open-track-selected-account")}
` : `
还没有选中账号
先从上方列表选一个对标账号,再决定是否导入到当前项目。
`}
@@ -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 }));