平台 Agent
@@ -9263,6 +9263,14 @@ async function openUserPlatformPolicyHistoryAction(platform, preferredVersionId
});
}
+function focusAdminGovernanceAgentsWorkspace(anchorId = "admin-governance-anchor") {
+ appState.adminWorkbenchTab = "agents";
+ setScreen("admin-workbench");
+ setTimeout(() => {
+ document.getElementById(anchorId)?.scrollIntoView({ block: "start", behavior: "smooth" });
+ }, 0);
+}
+
function openSystemMainPolicyAction() {
if (!ensureAdminGovernanceAccess()) return;
const projectId = getOneLinerProjectId();
@@ -9293,6 +9301,7 @@ function openSystemMainPolicyAction() {
await loadAgentControlSurfaces(projectId);
rememberAction("系统主 Agent 策略已保存", `已发布版本 ${saved.current_version?.version_no || 1}。`, "green", saved);
renderAll();
+ focusAdminGovernanceAgentsWorkspace("admin-governance-anchor");
}
});
}
@@ -9331,6 +9340,7 @@ function openSystemPlatformPolicyAction(platform) {
await loadAgentControlSurfaces(projectId);
rememberAction(`${platformLabel(normalizedPlatform)} 系统平台策略已保存`, `已发布版本 ${saved.current_version?.version_no || 1}。`, "green", saved);
renderAll();
+ focusAdminGovernanceAgentsWorkspace("admin-governance-anchor");
}
});
}
@@ -9949,6 +9959,7 @@ function openActionRegistryEditAction(actionKey) {
rememberAction("动作已更新", `OneLiner 动作「${saved.label || saved.action_key}」已保存。`, "green", saved);
await loadAgentControlSurfaces(project.id);
renderAll();
+ focusAdminGovernanceAgentsWorkspace("admin-action-registry-anchor");
}
});
}
diff --git a/web/storyforge-web-v4/tests/workbench-pages.test.mjs b/web/storyforge-web-v4/tests/workbench-pages.test.mjs
index 8c93dc7..c757a61 100644
--- a/web/storyforge-web-v4/tests/workbench-pages.test.mjs
+++ b/web/storyforge-web-v4/tests/workbench-pages.test.mjs
@@ -697,15 +697,23 @@ test("admin governance history actions stay read-only when there are no versions
test("admin governance actions apply local permission and empty-directory guards before mutating", () => {
const helpers = extractBetween(APP, "function ensureAdminGovernanceAccess()", "function openUserGlobalPolicyAction()");
+ const adminFocusHelper = extractBetween(APP, "function focusAdminGovernanceAgentsWorkspace(anchorId = \"admin-governance-anchor\") {", "function openSystemMainPolicyAction() {");
const targetPicker = extractBetween(APP, "async function openAdminOverrideTargetAction()", "function openAdminOverridePolicyAction()");
const systemMain = extractBetween(APP, "function openSystemMainPolicyAction()", "function openSystemPlatformPolicyAction(platform)");
const systemPlatform = extractBetween(APP, "function openSystemPlatformPolicyAction(platform)", "async function openAdminOverrideTargetAction()");
+ const actionRegistry = extractBetween(APP, "function openActionRegistryEditAction(actionKey)", "function openTenantQuotaAction()");
assert.match(helpers, /function ensureAdminGovernanceAccess\(\)/);
assert.match(helpers, /function ensureAdminOverrideTargetReady\(target\)/);
+ assert.match(adminFocusHelper, /appState\.adminWorkbenchTab = "agents"/);
+ assert.match(adminFocusHelper, /setScreen\("admin-workbench"\)/);
+ assert.match(adminFocusHelper, /scrollIntoView/);
assert.match(targetPicker, /hideSubmit:\s*!directoryItems\.length/);
assert.match(systemMain, /if \(!ensureAdminGovernanceAccess\(\)\) return;/);
assert.match(systemPlatform, /if \(!ensureAdminGovernanceAccess\(\)\) return;/);
+ assert.match(systemMain, /focusAdminGovernanceAgentsWorkspace\("admin-governance-anchor"\)/);
+ assert.match(systemPlatform, /focusAdminGovernanceAgentsWorkspace\("admin-governance-anchor"\)/);
+ assert.match(actionRegistry, /focusAdminGovernanceAgentsWorkspace\("admin-action-registry-anchor"\)/);
});
test("user governance UI exposes personal history and rollback entrypoints", () => {