feat(session_status): include ISO-8601 and Unix timestamps for scheduling

This commit is contained in:
Jean-Luc Thumm 2026-02-06 18:38:10 -08:00
parent de77497ea8
commit 07bbb07538
No known key found for this signature in database
4 changed files with 38 additions and 5 deletions

View File

@ -115,6 +115,33 @@ describe("session_status tool", () => {
expect(details.statusText).not.toContain("OAuth/token status");
});
it("includes ISO-8601 and Unix timestamps for scheduling", async () => {
loadSessionStoreMock.mockReset();
updateSessionStoreMock.mockReset();
loadSessionStoreMock.mockReturnValue({
main: {
sessionId: "s1",
updatedAt: 10,
},
});
const tool = createOpenClawTools({ agentSessionKey: "main" }).find(
(candidate) => candidate.name === "session_status",
);
expect(tool).toBeDefined();
if (!tool) {
throw new Error("missing session_status tool");
}
const result = await tool.execute("call-time", {});
const details = result.details as { ok?: boolean; statusText?: string };
expect(details.ok).toBe(true);
// ISO-8601 format: YYYY-MM-DDTHH:MM:SS.sssZ
expect(details.statusText).toMatch(/ISO-8601: \d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z/);
// Unix timestamp: 10-digit number
expect(details.statusText).toMatch(/Unix: \d{10}/);
});
it("errors for unknown session keys", async () => {
resetSessionStore({
main: { sessionId: "s1", updatedAt: 10 },

View File

@ -363,7 +363,7 @@ describe("buildAgentSystemPrompt", () => {
}
});
it("hints to use session_status for current date/time", () => {
it("hints to use session_status for current date/time with scheduling formats", () => {
const prompt = buildAgentSystemPrompt({
workspaceDir: "/tmp/clawd",
userTimezone: "America/Chicago",
@ -371,6 +371,9 @@ describe("buildAgentSystemPrompt", () => {
expect(prompt).toContain("session_status");
expect(prompt).toContain("current date");
expect(prompt).toContain("ISO-8601");
expect(prompt).toContain("Unix");
expect(prompt).toContain("scheduling");
});
// The system prompt intentionally does NOT include the current date/time.

View File

@ -497,7 +497,7 @@ export function buildAgentSystemPrompt(params: {
: "",
params.modelAliasLines && params.modelAliasLines.length > 0 && !isMinimal ? "" : "",
userTimezone
? "If you need the current date, time, or day of week, run session_status (📊 session_status)."
? "If you need current date, time, or day of week (includes ISO-8601 and Unix for scheduling), run session_status (📊 session_status)."
: "",
"## Workspace",
`Your working directory is: ${displayWorkspaceDir}`,

View File

@ -343,10 +343,13 @@ export function createSessionStatusTool(opts?: {
const userTimezone = resolveUserTimezone(cfg.agents?.defaults?.userTimezone);
const userTimeFormat = resolveUserTimeFormat(cfg.agents?.defaults?.timeFormat);
const userTime = formatUserTime(new Date(), userTimezone, userTimeFormat);
const now = new Date();
const userTime = formatUserTime(now, userTimezone, userTimeFormat);
const iso = now.toISOString();
const unix = Math.floor(now.getTime() / 1000);
const timeLine = userTime
? `🕒 Time: ${userTime} (${userTimezone})`
: `🕒 Time zone: ${userTimezone}`;
? `🕒 Time: ${userTime} (${userTimezone})\n ISO-8601: ${iso} | Unix: ${unix}`
: `🕒 Time zone: ${userTimezone}\n ISO-8601: ${iso} | Unix: ${unix}`;
const agentDefaults = cfg.agents?.defaults ?? {};
const defaultLabel = `${configured.provider}/${configured.model}`;