Browse Source

fix(agent-document): serialize Date fields to ISO strings in executor output

drizzle timestamp_ms mode returns Date objects, but AI SDK Zod schema
validation rejects Date in tool-result output.value (expects string).
Add toISO() helper to convert all createdAt/updatedAt fields to ISO
string format before returning from document executor.

Co-authored-by: CodeFree <codefree@chinatelcom.cn>
feat/agent-independence
npmrun 2 months ago
parent
commit
50f0ca4a16
  1. 20
      server/service/agent-tool/executors/document/document.ts

20
server/service/agent-tool/executors/document/document.ts

@ -29,6 +29,10 @@ export const documentInputSchema = z.object({
type DocumentInput = z.infer<typeof documentInputSchema>;
function toISO(date: Date | null | undefined): string | null {
return date ? date.toISOString() : null;
}
export const documentExecutor: ToolExecutor<DocumentToolConfig> = {
buildInputSchema(_config: DocumentToolConfig): JSONSchema7 {
return {
@ -129,8 +133,8 @@ export const documentExecutor: ToolExecutor<DocumentToolConfig> = {
title: doc.title,
summary: doc.summary,
tags: deserializeTags(doc.tags),
createdAt: doc.createdAt,
updatedAt: doc.updatedAt,
createdAt: toISO(doc.createdAt),
updatedAt: toISO(doc.updatedAt),
},
metadata: { durationMs: Date.now() - start },
};
@ -160,8 +164,8 @@ export const documentExecutor: ToolExecutor<DocumentToolConfig> = {
title: doc.title,
summary: doc.summary,
tags: deserializeTags(doc.tags),
createdAt: doc.createdAt,
updatedAt: doc.updatedAt,
createdAt: toISO(doc.createdAt),
updatedAt: toISO(doc.updatedAt),
};
if (data.fullContent) {
result.content = doc.content;
@ -211,8 +215,8 @@ export const documentExecutor: ToolExecutor<DocumentToolConfig> = {
title: updated.title,
summary: updated.summary,
tags: deserializeTags(updated.tags),
createdAt: updated.createdAt,
updatedAt: updated.updatedAt,
createdAt: toISO(updated.createdAt),
updatedAt: toISO(updated.updatedAt),
},
metadata: { durationMs: Date.now() - start },
};
@ -260,8 +264,8 @@ export const documentExecutor: ToolExecutor<DocumentToolConfig> = {
title: item.title,
summary: item.summary,
tags: deserializeTags(item.tags),
createdAt: item.createdAt,
updatedAt: item.updatedAt,
createdAt: toISO(item.createdAt),
updatedAt: toISO(item.updatedAt),
})),
total: result.total,
page: result.page,

Loading…
Cancel
Save