




















@@ -21,6 +21,7 @@ import {
2121} from "./concept-vocabulary.js";
2222import { asRecord } from "./dreaming-shared.js";
2323import { compactMemoryForBudget, DEFAULT_MEMORY_FILE_MAX_CHARS } from "./memory-budget.js";
24+import { resolveMemoryCoreNowMs, resolveMemoryCoreTimestamp } from "./time.js";
24252526const SHORT_TERM_PATH_RE = /(?:^|\/)memory\/(?:[^/]+\/)*(\d{4})-(\d{2})-(\d{2})(?:-[^/]+)?\.md$/;
2627const DREAMING_MEMORY_PATH_RE = /(?:^|\/)memory\/dreaming\//;
@@ -1052,8 +1053,8 @@ export async function recordShortTermRecalls(params: {
10521053return;
10531054}
105410551055-const nowMs = Number.isFinite(params.nowMs) ? (params.nowMs as number) : Date.now();
1056-const nowIso = new Date(nowMs).toISOString();
1056+const nowMs = resolveMemoryCoreNowMs(params.nowMs);
1057+const nowIso = resolveMemoryCoreTimestamp(nowMs);
10571058const signalType = params.signalType ?? "recall";
10581059const queryHash = hashQuery(query);
10591060const todayBucket =
@@ -1199,8 +1200,8 @@ export async function recordGroundedShortTermCandidates(params: {
11991200return;
12001201}
120112021202-const nowMs = Number.isFinite(params.nowMs) ? (params.nowMs as number) : Date.now();
1203-const nowIso = new Date(nowMs).toISOString();
1203+const nowMs = resolveMemoryCoreNowMs(params.nowMs);
1204+const nowIso = resolveMemoryCoreTimestamp(nowMs);
12041205const fallbackDayBucket = formatMemoryDreamingDay(nowMs, params.timezone);
12051206await withShortTermLock(workspaceDir, async () => {
12061207const store = await readStore(workspaceDir, nowIso);
@@ -1281,8 +1282,8 @@ export async function recordDreamingPhaseSignals(params: {
12811282if (keys.length === 0) {
12821283return;
12831284}
1284-const nowMs = Number.isFinite(params.nowMs) ? (params.nowMs as number) : Date.now();
1285-const nowIso = new Date(nowMs).toISOString();
1285+const nowMs = resolveMemoryCoreNowMs(params.nowMs);
1286+const nowIso = resolveMemoryCoreTimestamp(nowMs);
1286128712871288await withShortTermLock(workspaceDir, async () => {
12881289const [store, phaseSignals] = await Promise.all([
@@ -1334,8 +1335,8 @@ export async function recordRemConsideredPhaseSignals(params: {
13341335if (keys.length === 0) {
13351336return;
13361337}
1337-const nowMs = Number.isFinite(params.nowMs) ? (params.nowMs as number) : Date.now();
1338-const nowIso = new Date(nowMs).toISOString();
1338+const nowMs = resolveMemoryCoreNowMs(params.nowMs);
1339+const nowIso = resolveMemoryCoreTimestamp(nowMs);
1339134013401341await withShortTermLock(workspaceDir, async () => {
13411342const [store, phaseSignals] = await Promise.all([
@@ -1376,8 +1377,8 @@ export async function readLightStagedKeys(params: {
13761377if (!workspaceDir) {
13771378return new Set();
13781379}
1379-const nowMs = Number.isFinite(params.nowMs) ? (params.nowMs as number) : Date.now();
1380-const nowIso = new Date(nowMs).toISOString();
1380+const nowMs = resolveMemoryCoreNowMs(params.nowMs);
1381+const nowIso = resolveMemoryCoreTimestamp(nowMs);
13811382const store = await readPhaseSignalStore(workspaceDir, nowIso);
13821383const keys = new Set<string>();
13831384for (const [key, entry] of Object.entries(store.entries)) {
@@ -1409,8 +1410,8 @@ export async function rankShortTermPromotionCandidates(
14091410return [];
14101411}
141114121412-const nowMs = Number.isFinite(options.nowMs) ? (options.nowMs as number) : Date.now();
1413-const nowIso = new Date(nowMs).toISOString();
1413+const nowMs = resolveMemoryCoreNowMs(options.nowMs);
1414+const nowIso = resolveMemoryCoreTimestamp(nowMs);
14141415const minScore = toFiniteScore(options.minScore, DEFAULT_PROMOTION_MIN_SCORE);
14151416const minRecallCount = toFiniteNonNegativeInt(
14161417options.minRecallCount,
@@ -1550,8 +1551,8 @@ export async function readShortTermRecallEntries(params: {
15501551if (!workspaceDir) {
15511552return [];
15521553}
1553-const nowMs = Number.isFinite(params.nowMs) ? (params.nowMs as number) : Date.now();
1554-const nowIso = new Date(nowMs).toISOString();
1554+const nowMs = resolveMemoryCoreNowMs(params.nowMs);
1555+const nowIso = resolveMemoryCoreTimestamp(nowMs);
15551556const store = await readStore(workspaceDir, nowIso);
15561557return Object.values(store.entries).filter(
15571558(entry): entry is ShortTermRecallEntry =>
@@ -1838,8 +1839,8 @@ export async function applyShortTermPromotions(
18381839options: ApplyShortTermPromotionsOptions,
18391840): Promise<ApplyShortTermPromotionsResult> {
18401841const workspaceDir = options.workspaceDir.trim();
1841-const nowMs = Number.isFinite(options.nowMs) ? (options.nowMs as number) : Date.now();
1842-const nowIso = new Date(nowMs).toISOString();
1842+const nowMs = resolveMemoryCoreNowMs(options.nowMs);
1843+const nowIso = resolveMemoryCoreTimestamp(nowMs);
18431844const limit = Number.isFinite(options.limit)
18441845 ? Math.max(0, Math.floor(options.limit as number))
18451846 : options.candidates.length;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。