/** * 治理台取数 —— 每个查询一把键,写动作后按键失效。 * 前端零过程状态:所有画面都是服务端投影的函数,刷新即重建(§9.2)。 */ import { useQuery } from '@tanstack/react-query'; import type { UseQueryResult } from '@tanstack/react-query'; import type { GovActivitiesOutput, GovApprovalsOutput, GovChannelsOutput, GovGrantsOutput, GovLedgerPageOutput, GovLlmOutput, GovMemoryOutput, GovMetricsOutput, GovObjectsOutput, GovPackagesOutput, GovStaffOutput, GovTaskLogOutput, GovTasksOutput, GovToolsOutput, GovTriggersOutput, GovWorkflowOutput, } from '@contracts'; import { browseLedgerRoute, govMetricsRoute, govTaskLogRoute, govWorkflowRoute, listActivitiesRoute, listActivityMemoryRoute, listApprovalsRoute, listChannelsRoute, listGovTasksRoute, listGrantsRoute, listLedgerObjectsRoute, listLlmInstancesRoute, listProcessPackagesRoute, listStaffRoute, listToolsRoute, listTriggersRoute, } from '@contracts'; import { call } from '@web-shared/typed-fetch.ts'; export type GovTasks = GovTasksOutput; export type GovApprovals = GovApprovalsOutput; export type GovStaff = GovStaffOutput; export type GovActivities = GovActivitiesOutput; export type GovTools = GovToolsOutput; export type GovObjects = GovObjectsOutput; export type GovLedgerPage = GovLedgerPageOutput; export type GovMemory = GovMemoryOutput; export type GovMetrics = GovMetricsOutput; export type GovChannels = GovChannelsOutput; export type GovLlm = GovLlmOutput; export type GovWorkflow = GovWorkflowOutput; export type GovTaskLog = GovTaskLogOutput; export type GovGrants = GovGrantsOutput; export const useGovTasks = (): UseQueryResult => useQuery({ queryKey: ['gov', 'tasks'], queryFn: () => call(listGovTasksRoute) }); export const useGovApprovals = (): UseQueryResult => useQuery({ queryKey: ['gov', 'approvals'], queryFn: () => call(listApprovalsRoute) }); export const useGovStaff = (): UseQueryResult => useQuery({ queryKey: ['gov', 'staff'], queryFn: () => call(listStaffRoute) }); export const useGovGrants = (positionId: string | undefined): UseQueryResult => useQuery({ queryKey: ['gov', 'grants', positionId], queryFn: () => call(listGrantsRoute, { params: { positionId: positionId! } }), enabled: positionId !== undefined, }); export const useGovPackages = (): UseQueryResult => useQuery({ queryKey: ['gov', 'process'], queryFn: () => call(listProcessPackagesRoute) }); export const useGovTriggers = (): UseQueryResult => useQuery({ queryKey: ['gov', 'triggers'], queryFn: () => call(listTriggersRoute) }); export const useGovActivities = (): UseQueryResult => useQuery({ queryKey: ['gov', 'activities'], queryFn: () => call(listActivitiesRoute) }); export const useGovTools = (): UseQueryResult => useQuery({ queryKey: ['gov', 'tools'], queryFn: () => call(listToolsRoute) }); export const useGovObjects = (): UseQueryResult => useQuery({ queryKey: ['gov', 'objects'], queryFn: () => call(listLedgerObjectsRoute) }); export const useGovLedger = (domain: string | undefined, object: string | undefined): UseQueryResult => useQuery({ queryKey: ['gov', 'ledger', domain, object], queryFn: () => call(browseLedgerRoute, { params: { domain: domain!, object: object! } }), enabled: domain !== undefined && object !== undefined, }); export const useGovMemory = (activityId: string | undefined): UseQueryResult => useQuery({ queryKey: ['gov', 'memory', activityId], queryFn: () => call(listActivityMemoryRoute, { params: { activityId: activityId! } }), enabled: activityId !== undefined, }); export const useGovMetrics = (): UseQueryResult => useQuery({ queryKey: ['gov', 'metrics'], queryFn: () => call(govMetricsRoute) }); export const useGovChannels = (): UseQueryResult => useQuery({ queryKey: ['gov', 'channels'], queryFn: () => call(listChannelsRoute) }); export const useGovLlm = (): UseQueryResult => useQuery({ queryKey: ['gov', 'llm'], queryFn: () => call(listLlmInstancesRoute) }); export const useGovWorkflow = (id: string): UseQueryResult => useQuery({ queryKey: ['gov', 'workflow', id], queryFn: () => call(govWorkflowRoute, { params: { id } }) }); export const useGovTaskLog = (taskId: string): UseQueryResult => useQuery({ queryKey: ['gov', 'tasklog', taskId], queryFn: () => call(govTaskLogRoute, { params: { taskId } }) });