| import memoize from 'lodash-es/memoize.js' | |
| // This ensures you get the LOCAL date in ISO format | |
| export function getLocalISODate(): string { | |
| // Check for ant-only date override | |
| if (process.env.CLAUDE_CODE_OVERRIDE_DATE) { | |
| return process.env.CLAUDE_CODE_OVERRIDE_DATE | |
| } | |
| const now = new Date() | |
| const year = now.getFullYear() | |
| const month = String(now.getMonth() + 1).padStart(2, '0') | |
| const day = String(now.getDate()).padStart(2, '0') | |
| return `${year}-${month}-${day}` | |
| } | |
| // Memoized for prompt-cache stability — captures the date once at session start. | |
| // The main interactive path gets this behavior via memoize(getUserContext) in | |
| // context.ts; simple mode (--bare) calls getSystemPrompt per-request and needs | |
| // an explicit memoized date to avoid busting the cached prefix at midnight. | |
| // When midnight rolls over, getDateChangeAttachments appends the new date at | |
| // the tail (though simple mode disables attachments, so the trade-off there is: | |
| // stale date after midnight vs. ~entire-conversation cache bust — stale wins). | |
| export const getSessionStartDate = memoize(getLocalISODate) | |
| // Returns "Month YYYY" (e.g. "February 2026") in the user's local timezone. | |
| // Changes monthly, not daily — used in tool prompts to minimize cache busting. | |
| export function getLocalMonthYear(): string { | |
| const date = process.env.CLAUDE_CODE_OVERRIDE_DATE | |
| ? new Date(process.env.CLAUDE_CODE_OVERRIDE_DATE) | |
| : new Date() | |
| return date.toLocaleString('en-US', { month: 'long', year: 'numeric' }) | |
| } | |