fix(agents): guard session tool snapshot errors

This commit is contained in:
Vincent Koc
2026-06-05 10:52:57 +02:00
parent b66936a3db
commit 8c140f72be
2 changed files with 21 additions and 5 deletions

View File

@@ -9,6 +9,12 @@ import {
} from "./tool-definition-wrapper.js";
function createUnreadableParametersDefinition(name: string): ToolDefinition {
const hostileError = new Error("revoked schema");
Object.defineProperty(hostileError, "message", {
get() {
throw new Error("message denied");
},
});
const definition = {
name,
label: name,
@@ -19,7 +25,7 @@ function createUnreadableParametersDefinition(name: string): ToolDefinition {
} as ToolDefinition;
Object.defineProperty(definition, "parameters", {
get: () => {
throw new Error("revoked schema");
throw hostileError;
},
});
return definition;
@@ -92,6 +98,12 @@ describe("session tool definition wrapper", () => {
});
it("skips unreadable AgentTool schemas while preserving healthy base overrides", () => {
const hostileError = new Error("revoked schema");
Object.defineProperty(hostileError, "message", {
get() {
throw new Error("message denied");
},
});
const badTool = {
name: "bad_override",
label: "Bad Override",
@@ -102,7 +114,7 @@ describe("session tool definition wrapper", () => {
} as AgentTool;
Object.defineProperty(badTool, "parameters", {
get: () => {
throw new Error("revoked schema");
throw hostileError;
},
});
const healthyTool = {

View File

@@ -25,10 +25,14 @@ type SessionToolSchemaCloneState = {
};
function describeSessionToolSnapshotError(err: unknown): string {
if (err instanceof Error && err.message) {
return err.message;
try {
if (err instanceof Error) {
return err.message || err.name || "Unknown session tool snapshot error";
}
return String(err);
} catch {
return "Unknown session tool snapshot error";
}
return String(err);
}
function readStringField(value: unknown, fieldName: string, fallback?: string): string {