Skip to content

Commit 0a33814

Browse files
committed
refactor(numbers): share non-negative finite guard
1 parent 013e33c commit 0a33814

5 files changed

Lines changed: 8 additions & 16 deletions

File tree

src/agents/command/session-store.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { patchSessionEntry } from "../../config/sessions/session-accessor.js";
1111
import { resolveMaintenanceConfigFromInput } from "../../config/sessions/store-maintenance.js";
1212
import type { OpenClawConfig } from "../../config/types.openclaw.js";
1313
import { createLazyImportLoader } from "../../shared/lazy-promise.js";
14+
import { resolveNonNegativeNumber } from "../../shared/number-coercion.js";
1415
import { clearCliSession, setCliSessionBinding, setCliSessionId } from "../cli-session.js";
1516
import { DEFAULT_CONTEXT_TOKENS } from "../defaults.js";
1617
import { isCliProvider } from "../model-selection.js";
@@ -29,10 +30,6 @@ async function getContextModule() {
2930
return await contextModuleLoader.load();
3031
}
3132

32-
function resolveNonNegativeNumber(value: number | undefined): number | undefined {
33-
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
34-
}
35-
3633
function resolvePositiveInteger(value: number | undefined): number | undefined {
3734
if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
3835
return undefined;

src/auto-reply/reply/session-usage.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
import { updateSessionEntry } from "../../config/sessions/session-accessor.js";
1919
import type { OpenClawConfig } from "../../config/types.openclaw.js";
2020
import { logVerbose } from "../../globals.js";
21+
import { resolveNonNegativeNumber } from "../../shared/number-coercion.js";
2122
import { estimateUsageCost, resolveModelCostConfig } from "../../utils/usage-format.js";
2223

2324
function applyCliSessionIdToSessionPatch(
@@ -67,10 +68,6 @@ function applyCliSessionIdToSessionPatch(
6768
return patch;
6869
}
6970

70-
function resolveNonNegativeNumber(value: number | undefined): number | undefined {
71-
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
72-
}
73-
7471
function resolveNonNegativeTokenCount(value: number | undefined): number | undefined {
7572
const resolved = resolveNonNegativeNumber(value);
7673
return resolved === undefined ? undefined : Math.floor(resolved);

src/cron/isolated-agent/run.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import { createDiagnosticMessageLifecycle } from "../../logging/message-lifecycl
3939
import { isCommandLaneTaskTimeoutError } from "../../process/command-queue.js";
4040
import { CommandLane } from "../../process/lanes.js";
4141
import { createLazyImportLoader } from "../../shared/lazy-promise.js";
42+
import { resolveNonNegativeNumber } from "../../shared/number-coercion.js";
4243
import { resolveCronSkillsSnapshot } from "../../skills/runtime/cron-snapshot.js";
4344
import type { SkillSnapshot } from "../../skills/types.js";
4445
import {
@@ -175,10 +176,6 @@ function hasConfiguredAuthProfiles(cfg: OpenClawConfig): boolean {
175176
);
176177
}
177178

178-
function resolveNonNegativeNumber(value: number | undefined): number | undefined {
179-
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
180-
}
181-
182179
function isCronNestedLaneTaskTimeoutError(err: unknown): boolean {
183180
return isCommandLaneTaskTimeoutError(err, CommandLane.CronNested);
184181
}

src/gateway/session-utils.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ import {
9191
isWorkspaceRelativeAvatarPath,
9292
resolveAvatarMime,
9393
} from "../shared/avatar-policy.js";
94+
import { resolveNonNegativeNumber } from "../shared/number-coercion.js";
9495
import { normalizeSessionDeliveryFields } from "../utils/delivery-context.shared.js";
9596
import type { ModelCostConfig } from "../utils/usage-format.js";
9697
import { estimateUsageCost, resolveModelCostConfig } from "../utils/usage-format.js";
@@ -274,10 +275,6 @@ function resolvePositiveNumber(value: number | null | undefined): number | undef
274275
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : undefined;
275276
}
276277

277-
function resolveNonNegativeNumber(value: number | null | undefined): number | undefined {
278-
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
279-
}
280-
281278
type SessionCompactionCheckpointEntry = NonNullable<SessionEntry["compactionCheckpoints"]>[number];
282279

283280
function isProjectableCompactionCheckpoint(

src/shared/number-coercion.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,6 @@
11
/** Shared numeric coercion facade for legacy imports inside core. */
22
export * from "@openclaw/normalization-core/number-coercion";
3+
4+
export function resolveNonNegativeNumber(value: number | null | undefined): number | undefined {
5+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : undefined;
6+
}

0 commit comments

Comments
 (0)