Files
tutti/packages/agent/gui/shared/AgentTargetInfoRendererContext.tsx
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

69 lines
2.0 KiB
TypeScript

import {
createContext,
useContext,
useMemo,
type JSX,
type ReactNode
} from "react";
import type {
AgentGUIAgentTarget,
AgentGUIAgentTargetInfoRenderer
} from "../types";
interface AgentTargetInfoRendererContextValue {
renderer: AgentGUIAgentTargetInfoRenderer | null;
targetsByAgentTargetId: ReadonlyMap<string, AgentGUIAgentTarget>;
}
const EMPTY_TARGETS_BY_AGENT_TARGET_ID = new Map<string, AgentGUIAgentTarget>();
const AgentTargetInfoRendererContext =
createContext<AgentTargetInfoRendererContextValue>({
renderer: null,
targetsByAgentTargetId: EMPTY_TARGETS_BY_AGENT_TARGET_ID
});
export function AgentTargetInfoRendererProvider({
agentTargets,
children,
renderer
}: {
agentTargets: readonly AgentGUIAgentTarget[];
children: ReactNode;
renderer?: AgentGUIAgentTargetInfoRenderer | null;
}): JSX.Element {
const value = useMemo<AgentTargetInfoRendererContextValue>(() => {
const targetsByAgentTargetId = new Map<string, AgentGUIAgentTarget>();
for (const target of agentTargets) {
const agentTargetId = target.agentTargetId?.trim() ?? "";
if (agentTargetId && !targetsByAgentTargetId.has(agentTargetId)) {
targetsByAgentTargetId.set(agentTargetId, target);
}
}
return {
renderer: renderer ?? null,
targetsByAgentTargetId
};
}, [agentTargets, renderer]);
return (
<AgentTargetInfoRendererContext.Provider value={value}>
{children}
</AgentTargetInfoRendererContext.Provider>
);
}
export function useAgentTargetInfoRenderer(): AgentGUIAgentTargetInfoRenderer | null {
return useContext(AgentTargetInfoRendererContext).renderer;
}
export function useAgentTargetInfoTarget(
agentTargetId: string | null | undefined
): AgentGUIAgentTarget | null {
const normalizedAgentTargetId = agentTargetId?.trim() ?? "";
const { targetsByAgentTargetId } = useContext(AgentTargetInfoRendererContext);
return normalizedAgentTargetId
? (targetsByAgentTargetId.get(normalizedAgentTargetId) ?? null)
: null;
}