feat(workbench): integrate runtime data and map tooling

This commit is contained in:
2026-09-22 10:45:46 +08:00
parent bf44cc0f25
commit bebcf2a06c
163 changed files with 15642 additions and 1312 deletions
@@ -7,6 +7,7 @@ import type { PersonaState } from "@/shared/ai-elements/persona";
import type { AccessTokenProvider } from "@/shared/auth/keycloak-auth";
import { env } from "@/shared/config/env";
import { showMapNotice } from "@/features/map/core";
import { findOwnedWorkbenchProject } from "../api/project-client";
import {
FrontendActionExecutor,
agentBootstrapKey,
@@ -62,7 +63,18 @@ export function useWorkbenchAgent({
const collapseTimerRef = useRef<number | null>(null);
const mobileCollapseTimerRef = useRef<number | null>(null);
const sessionStreamAbortRef = useRef<AbortController | null>(null);
const clientRef = useRef(createAgentApiClient(undefined, { getAccessToken }));
const projectIdPromiseRef = useRef<Promise<string> | null>(null);
const getProjectId = useCallback(() => {
projectIdPromiseRef.current ??= findOwnedWorkbenchProject(getAccessToken).then(
({ project }) => project.project_id,
(error) => {
projectIdPromiseRef.current = null;
throw error;
}
);
return projectIdPromiseRef.current;
}, [getAccessToken]);
const clientRef = useRef(createAgentApiClient(undefined, { getAccessToken, getProjectId }));
const sessionIdRef = useRef<string | null>(null);
const approvalModeRef = useRef<AgentApprovalMode>("request");
const registryRef = useRef<UIRegistry | null>(null);
@@ -82,6 +94,7 @@ export function useWorkbenchAgent({
const [resumedStreaming, setResumedStreaming] = useState(false);
const [modelOptions, setModelOptions] = useState<AgentModelOption[]>([]);
const [selectedModel, setSelectedModel] = useState("");
const [promptDraft, setPromptDraft] = useState("");
const [approvalMode, setApprovalModeState] = useState<AgentApprovalMode>("request");
const [streamRenderState, setStreamRenderState] = useState<AgentStreamRenderState>({});
const [permissionOverrides, setPermissionOverrides] = useState<Record<string, PermissionOverride>>({});
@@ -605,6 +618,7 @@ export function useWorkbenchAgent({
setPermissionOverrides({});
setQuestionOverrides({});
setStreamRenderState({});
setPromptDraft("");
chat.setMessages([]);
},
[chat, clearSessionId]
@@ -821,7 +835,9 @@ export function useWorkbenchAgent({
statusLabel,
streamRenderState,
selectedModel,
promptDraft,
setApprovalMode,
setPromptDraft,
setSelectedModel,
stopPrompt,
streaming,