From 4734f99108d69cff647d9017e0ccf4adbbe3892c Mon Sep 17 00:00:00 2001 From: Bin Deng Date: Sun, 15 Feb 2026 03:07:38 +0800 Subject: [PATCH] Fix: Add type safety to models status command (#16395) Merged via /review-pr -> /prepare-pr -> /merge-pr. Prepared head SHA: 1554137ae34b8183a924d48e3894e9d60c4e2dde Co-authored-by: BinHPdev <219093083+BinHPdev@users.noreply.github.com> Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com> Reviewed-by: @gumadeiras --- CHANGELOG.md | 1 + src/commands/models/list.status-command.ts | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79be688c998..fd879c8ff3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -50,6 +50,7 @@ Docs: https://docs.openclaw.ai - Cron: repair missing/corrupt `nextRunAtMs` for the updated job without globally recomputing unrelated due jobs during `cron update`. (#15750) - Discord: prefer gateway guild id when logging inbound messages so cached-miss guilds do not appear as `guild=dm`. Thanks @thewilloftheshadow. - TUI: refactor searchable select list description layout and add regression coverage for ANSI-highlight width bounds. +- Models/CLI: guard `models status` string trimming paths to prevent crashes from malformed non-string config values. (#16395) Thanks @BinHPdev. ## 2026.2.14 diff --git a/src/commands/models/list.status-command.ts b/src/commands/models/list.status-command.ts index 66f830b2f55..842cad3372b 100644 --- a/src/commands/models/list.status-command.ts +++ b/src/commands/models/list.status-command.ts @@ -107,7 +107,7 @@ export async function modelsStatusCommand( const imageFallbacks = typeof imageConfig === "object" ? (imageConfig?.fallbacks ?? []) : []; const aliases = Object.entries(cfg.agents?.defaults?.models ?? {}).reduce>( (acc, [key, entry]) => { - const alias = entry?.alias?.trim(); + const alias = typeof entry?.alias === "string" ? entry.alias.trim() : undefined; if (alias) { acc[alias] = key; } @@ -127,7 +127,7 @@ export async function modelsStatusCommand( ); const providersFromConfig = new Set( Object.keys(cfg.models?.providers ?? {}) - .map((p) => p.trim()) + .map((p) => (typeof p === "string" ? p.trim() : "")) .filter(Boolean), ); const providersFromModels = new Set(); @@ -176,7 +176,7 @@ export async function modelsStatusCommand( ...providersFromEnv, ]), ) - .map((p) => p.trim()) + .map((p) => (typeof p === "string" ? p.trim() : "")) .filter(Boolean) .toSorted((a, b) => a.localeCompare(b));