mirror of
https://github.com/badlogic/pi-mono.git
synced 2026-11-05 23:37:25 +00:00
pi-schema: opt-in coercion, compile(schema, { coerce: true }) with coerce() and
parse(), the superset of TypeBox's Value.Convert rules and pi-ai's old coercion;
unresolvedRefs option; url and json-pointer-uri-fragment formats.
pi-ai: Tool takes any JSON Schema; validation through pi-schema; Type, Static
and TSchema are no longer exported (breaking). pi-agent-core and pi-durable:
tools on pi-schema, no TypeBox dependency. Coding agent: extensions keep Type,
Static, TSchema and StringEnum through an extension view of pi-ai; built-in
tools stay on TypeBox.
46 lines
1.6 KiB
TypeScript
46 lines
1.6 KiB
TypeScript
import { obj, opt, type Static, str } from "@earendil-works/pi-schema";
|
|
import type { AgentTool, AgentToolResult } from "../../src/types.ts";
|
|
|
|
export interface GetCurrentTimeResult extends AgentToolResult<{ utcTimestamp: number }> {}
|
|
|
|
export async function getCurrentTime(timezone?: string): Promise<GetCurrentTimeResult> {
|
|
const date = new Date();
|
|
if (timezone) {
|
|
try {
|
|
const timeStr = date.toLocaleString("en-US", {
|
|
timeZone: timezone,
|
|
dateStyle: "full",
|
|
timeStyle: "long",
|
|
});
|
|
return {
|
|
content: [{ type: "text", text: timeStr }],
|
|
details: { utcTimestamp: date.getTime() },
|
|
};
|
|
} catch (_e) {
|
|
throw new Error(`Invalid timezone: ${timezone}. Current UTC time: ${date.toISOString()}`);
|
|
}
|
|
}
|
|
const timeStr = date.toLocaleString("en-US", { dateStyle: "full", timeStyle: "long" });
|
|
return {
|
|
content: [{ type: "text", text: timeStr }],
|
|
details: { utcTimestamp: date.getTime() },
|
|
};
|
|
}
|
|
|
|
const getCurrentTimeSchema = obj(
|
|
{ timezone: opt(str({ description: "Optional timezone (e.g., 'America/New_York', 'Europe/London')" })) },
|
|
// Open, as the tool accepted extra arguments before it moved from TypeBox.
|
|
{ open: true },
|
|
);
|
|
|
|
type GetCurrentTimeParams = Static<typeof getCurrentTimeSchema>;
|
|
|
|
export const getCurrentTimeTool: AgentTool<typeof getCurrentTimeSchema, { utcTimestamp: number }> = {
|
|
label: "Current Time",
|
|
name: "get_current_time",
|
|
description: "Get the current date and time",
|
|
parameters: getCurrentTimeSchema,
|
|
execute: async (_toolCallId: string, args: GetCurrentTimeParams) => {
|
|
return getCurrentTime(args.timezone);
|
|
},
|
|
};
|