Files
next-tjwater-agent/src/mcp/native-call-identity.ts
T

21 lines
1.2 KiB
TypeScript

import { isDeepStrictEqual } from "node:util";
import { queryMcpToolId } from "../runtime/product-mcp-tools.js";
const record = (value: unknown): value is Record<string, unknown> => !!value && typeof value === "object" && !Array.isArray(value);
// Use only host-read native history. Ambiguous simultaneous identical calls fail
// closed rather than assigning a second submission to the first call's job.
export function resolveMatchingNativeCall(messages: unknown, toolName: string, args: Record<string, unknown>): string | null {
if (!Array.isArray(messages)) return null;
const ids = new Set<string>();
for (const message of messages) {
if (!record(message) || !Array.isArray(message.parts)) continue;
for (const part of message.parts) {
if (!record(part) || part.type !== "tool" || part.tool !== queryMcpToolId(toolName) || !record(part.state)) continue;
if (!["running", "pending"].includes(String(part.state.status)) || !isDeepStrictEqual(part.state.input, args)) continue;
if (typeof part.callID === "string" && part.callID.length > 0 && part.callID.length <= 256) ids.add(part.callID);
}
}
return ids.size === 1 ? [...ids][0]! : null;
}