feat: improve ai workflow runtime observability

This commit is contained in:
2026-06-22 10:11:05 +08:00
parent 9515a4d121
commit d954279c9c
4 changed files with 245 additions and 66 deletions
+40 -1
View File
@@ -71,6 +71,43 @@ function createLightAiMenuRoute(
return route as RouteRecordStringComponent;
}
const PREFETCH_LIGHT_PAGE_KEYS = [
'../views/_core/agent-chat/index.vue',
'../views/_core/menu/index.vue',
'../views/_core/page-render/index.vue',
'../views/_core/role/index.vue',
'../views/_core/user/index.vue',
'../views/ai-platform/agent/index.vue',
'../views/ai-platform/model/index.vue',
'../views/ai-platform/workflow-runs/index.vue',
'../views/ai-platform/workflow/index.vue',
];
let lightPagesPrefetched = false;
function scheduleIdleTask(callback: () => void) {
if (typeof window === 'undefined') return;
const requestIdle = (window as any).requestIdleCallback;
if (typeof requestIdle === 'function') {
requestIdle(callback, { timeout: 3000 });
return;
}
window.setTimeout(callback, 1200);
}
function prefetchLightPages(pageMap: ComponentRecordType) {
if (lightPagesPrefetched) return;
lightPagesPrefetched = true;
scheduleIdleTask(() => {
for (const key of PREFETCH_LIGHT_PAGE_KEYS) {
const loader = pageMap[key];
if (typeof loader === 'function') {
void loader().catch(() => undefined);
}
}
});
}
const LIGHT_AI_PLATFORM_MENU_ROUTES = [
createLightAiMenuRoute({
component: '/_core/agent-chat/index',
@@ -220,7 +257,7 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
};
const routePageMap = normalizePageMap(pageMap);
return await generateAccessible(preferences.app.accessMode, {
const accessible = await generateAccessible(preferences.app.accessMode, {
...options,
fetchMenuListAsync: async () => {
const appContextStore = useAppContextStore();
@@ -235,6 +272,8 @@ async function generateAccess(options: GenerateMenuAndRoutesOptions) {
layoutMap,
pageMap,
});
prefetchLightPages(pageMap);
return accessible;
}
export { generateAccess };