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
69 lines
2.0 KiB
TypeScript
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;
|
|
}
|