fix(agents): guard current time context timestamp

This commit is contained in:
Peter Steinberger
2026-05-30 07:47:11 -04:00
parent 15fb3314de
commit 2f07e4e6c0
2 changed files with 25 additions and 3 deletions

View File

@@ -0,0 +1,20 @@
import { afterEach, describe, expect, it, vi } from "vitest";
import { resolveCronStyleNow } from "./current-time.js";
describe("resolveCronStyleNow", () => {
afterEach(() => {
vi.restoreAllMocks();
});
it("falls back when nowMs is outside Date range", () => {
vi.spyOn(Date, "now").mockReturnValue(Date.parse("2026-05-30T12:00:00.000Z"));
const result = resolveCronStyleNow(
{ agents: { defaults: { userTimezone: "UTC", timeFormat: "24" } } },
8_640_000_000_000_001,
);
expect(result.formattedTime).toBe("Saturday, May 30th, 2026 - 12:00");
expect(result.timeLine).toContain("Reference UTC: 2026-05-30 12:00 UTC");
});
});

View File

@@ -1,3 +1,4 @@
import { asDateTimestampMs } from "../shared/number-coercion.js";
import {
type TimeFormatPreference,
formatUserTime,
@@ -23,9 +24,10 @@ type TimeConfigLike = {
export function resolveCronStyleNow(cfg: TimeConfigLike, nowMs: number): CronStyleNow {
const userTimezone = resolveUserTimezone(cfg.agents?.defaults?.userTimezone);
const userTimeFormat = resolveUserTimeFormat(cfg.agents?.defaults?.timeFormat);
const formattedTime =
formatUserTime(new Date(nowMs), userTimezone, userTimeFormat) ?? new Date(nowMs).toISOString();
const utcTime = new Date(nowMs).toISOString().replace("T", " ").slice(0, 16) + " UTC";
const timestampMs = asDateTimestampMs(nowMs) ?? Date.now();
const date = new Date(timestampMs);
const formattedTime = formatUserTime(date, userTimezone, userTimeFormat) ?? date.toISOString();
const utcTime = date.toISOString().replace("T", " ").slice(0, 16) + " UTC";
const timeLine = `Current time: ${formattedTime} (${userTimezone})\nReference UTC: ${utcTime}`;
return { userTimezone, formattedTime, timeLine };
}