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
66 lines
1.8 KiB
TypeScript
66 lines
1.8 KiB
TypeScript
import { useMemo } from "react";
|
|
import type {
|
|
AgentGUITargetConnectionSource,
|
|
AgentGUITargetConnectionState
|
|
} from "../../../types";
|
|
import { useEngineSelector } from "../../../shared/engine/useEngineSelector";
|
|
import {
|
|
AgentGUITargetConnectionController,
|
|
type AgentGUITargetConnectionBinding
|
|
} from "./AgentGUITargetConnectionController";
|
|
|
|
export function useAgentGUITargetConnectionState(input: {
|
|
agentTargetId?: string | null;
|
|
source?: AgentGUITargetConnectionSource | null;
|
|
}): {
|
|
blocked: boolean;
|
|
visibleState: AgentGUITargetConnectionState | null;
|
|
} {
|
|
const binding = useMemo<AgentGUITargetConnectionBinding>(
|
|
() => ({
|
|
getSnapshot: () => {
|
|
const agentTargetId = input.agentTargetId?.trim() ?? "";
|
|
return agentTargetId
|
|
? (input.source?.getConnectionState(agentTargetId) ?? null)
|
|
: null;
|
|
},
|
|
subscribe: (listener) =>
|
|
input.source?.subscribe(listener) ?? (() => undefined)
|
|
}),
|
|
[input.agentTargetId, input.source]
|
|
);
|
|
const state = useEngineSelector(
|
|
binding,
|
|
identityTargetConnectionState,
|
|
targetConnectionStatesEqual
|
|
);
|
|
const controller = useMemo(
|
|
() => new AgentGUITargetConnectionController({ source: binding }),
|
|
[binding]
|
|
);
|
|
const visibleState = useEngineSelector(
|
|
controller,
|
|
identityTargetConnectionState,
|
|
targetConnectionStatesEqual
|
|
);
|
|
return {
|
|
blocked: state?.status === "connecting" || state?.status === "unavailable",
|
|
visibleState
|
|
};
|
|
}
|
|
|
|
function identityTargetConnectionState(
|
|
state: AgentGUITargetConnectionState | null
|
|
): AgentGUITargetConnectionState | null {
|
|
return state;
|
|
}
|
|
|
|
function targetConnectionStatesEqual(
|
|
left: AgentGUITargetConnectionState | null,
|
|
right: AgentGUITargetConnectionState | null
|
|
): boolean {
|
|
return (
|
|
left?.status === right?.status && left?.retryAttempt === right?.retryAttempt
|
|
);
|
|
}
|