mirror of
https://github.com/morluto/rea.git
synced 2026-10-18 20:10:13 -05:00
Verify retained queries against authentic SQLite ELF and npm histories, retain failed RPC/cleanup/output costs, and make mixed-history verification repeatable. Record the separate validation-reuse bottleneck in #4810. Co-authored-by: gensokyo-dev <342580529+gensokyo-dev@users.noreply.github.com> Co-authored-by: Kaoru0822 <208281322+kaoru0822-kitauji@users.noreply.github.com>
47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
/** Keep settled and rejected RPCs in the same receipt before returning control. */
|
|
export const createRetainedQueryCaller =
|
|
(client, record) => async (name, input, phase) => {
|
|
const start = performance.now();
|
|
let reply;
|
|
try {
|
|
reply = await client.callTool(
|
|
{ name, arguments: input },
|
|
{ timeout: 300000 },
|
|
);
|
|
} catch (cause) {
|
|
const failure =
|
|
cause instanceof Error
|
|
? { name: cause.name, message: cause.message }
|
|
: { name: typeof cause, message: String(cause) };
|
|
const receipt = {
|
|
name,
|
|
input,
|
|
phase,
|
|
elapsed_ms: performance.now() - start,
|
|
reply_bytes: null,
|
|
is_error: true,
|
|
failure,
|
|
};
|
|
try {
|
|
await record(receipt, { name, input, phase, failure });
|
|
} catch (recordingFailure) {
|
|
throw new AggregateError(
|
|
[cause, recordingFailure],
|
|
"MCP call and receipt recording both failed",
|
|
);
|
|
}
|
|
throw cause;
|
|
}
|
|
const receipt = {
|
|
name,
|
|
input,
|
|
phase,
|
|
elapsed_ms: performance.now() - start,
|
|
reply_bytes: Buffer.byteLength(JSON.stringify(reply)),
|
|
is_error: reply.isError === true,
|
|
};
|
|
// A receipt-write failure is distinct from a rejected MCP call.
|
|
await record(receipt, { name, input, phase, reply });
|
|
return reply;
|
|
};
|