fix: show provider/model labels in TUI

This commit is contained in:
Peter Steinberger
2026-01-16 01:13:14 +00:00
parent bb665bf22c
commit f8f319713f
7 changed files with 12 additions and 3 deletions

View File

@@ -5,6 +5,7 @@
- Heartbeat: tighten prompt guidance + suppress duplicate alerts for 24h. (#980) — thanks @voidserf. - Heartbeat: tighten prompt guidance + suppress duplicate alerts for 24h. (#980) — thanks @voidserf.
- Plugins: add provider auth registry + `clawdbot models auth login` for plugin-driven OAuth/API key flows. - Plugins: add provider auth registry + `clawdbot models auth login` for plugin-driven OAuth/API key flows.
- Onboarding: prompt to modify/disable/delete when reconfiguring existing channel accounts and keep channel selection looping until Finished. - Onboarding: prompt to modify/disable/delete when reconfiguring existing channel accounts and keep channel selection looping until Finished.
- TUI: show provider/model labels for the active session and default model.
- Fix: list model picker entries as provider/model pairs for explicit selection. (#970) — thanks @mcinteerj. - Fix: list model picker entries as provider/model pairs for explicit selection. (#970) — thanks @mcinteerj.
- Fix: persist `gateway.mode=local` after selecting Local run mode in `clawdbot configure`, even if no other sections are chosen. - Fix: persist `gateway.mode=local` after selecting Local run mode in `clawdbot configure`, even if no other sections are chosen.
- Daemon: fix profile-aware service label resolution (env-driven) and add coverage for launchd/systemd/schtasks. (#969) — thanks @bjesuiter. - Daemon: fix profile-aware service label resolution (env-driven) and add coverage for launchd/systemd/schtasks. (#969) — thanks @bjesuiter.

View File

@@ -11,6 +11,7 @@ import {
startServerWithClient, startServerWithClient,
testState, testState,
} from "./test-helpers.js"; } from "./test-helpers.js";
import { DEFAULT_PROVIDER } from "../agents/defaults.js";
installGatewayTestHooks(); installGatewayTestHooks();
@@ -90,6 +91,7 @@ describe("gateway server sessions", () => {
const list1 = await rpcReq<{ const list1 = await rpcReq<{
path: string; path: string;
defaults?: { model?: string | null; modelProvider?: string | null };
sessions: Array<{ sessions: Array<{
key: string; key: string;
totalTokens?: number; totalTokens?: number;
@@ -102,6 +104,7 @@ describe("gateway server sessions", () => {
expect(list1.ok).toBe(true); expect(list1.ok).toBe(true);
expect(list1.payload?.path).toBe(storePath); expect(list1.payload?.path).toBe(storePath);
expect(list1.payload?.sessions.some((s) => s.key === "global")).toBe(false); expect(list1.payload?.sessions.some((s) => s.key === "global")).toBe(false);
expect(list1.payload?.defaults?.modelProvider).toBe(DEFAULT_PROVIDER);
const main = list1.payload?.sessions.find((s) => s.key === "agent:main:main"); const main = list1.payload?.sessions.find((s) => s.key === "agent:main:main");
expect(main?.totalTokens).toBe(30); expect(main?.totalTokens).toBe(30);
expect(main?.thinkingLevel).toBe("low"); expect(main?.thinkingLevel).toBe("low");

View File

@@ -311,6 +311,7 @@ export function getSessionDefaults(cfg: ClawdbotConfig): GatewaySessionsDefaults
lookupContextTokens(resolved.model) ?? lookupContextTokens(resolved.model) ??
DEFAULT_CONTEXT_TOKENS; DEFAULT_CONTEXT_TOKENS;
return { return {
modelProvider: resolved.provider ?? null,
model: resolved.model ?? null, model: resolved.model ?? null,
contextTokens: contextTokens ?? null, contextTokens: contextTokens ?? null,
}; };

View File

@@ -1,6 +1,7 @@
import type { SessionEntry } from "../config/sessions.js"; import type { SessionEntry } from "../config/sessions.js";
export type GatewaySessionsDefaults = { export type GatewaySessionsDefaults = {
modelProvider: string | null;
model: string | null; model: string | null;
contextTokens: number | null; contextTokens: number | null;
}; };

View File

@@ -34,7 +34,7 @@ export type GatewaySessionList = {
ts: number; ts: number;
path: string; path: string;
count: number; count: number;
defaults?: { model?: string | null; contextTokens?: number | null }; defaults?: { model?: string | null; modelProvider?: string | null; contextTokens?: number | null };
sessions: Array<{ sessions: Array<{
key: string; key: string;
sessionId?: string; sessionId?: string;

View File

@@ -117,7 +117,7 @@ export function createSessionActions(context: SessionActionContext) {
verboseLevel: entry?.verboseLevel, verboseLevel: entry?.verboseLevel,
reasoningLevel: entry?.reasoningLevel, reasoningLevel: entry?.reasoningLevel,
model: entry?.model ?? result.defaults?.model ?? undefined, model: entry?.model ?? result.defaults?.model ?? undefined,
modelProvider: entry?.modelProvider, modelProvider: entry?.modelProvider ?? result.defaults?.modelProvider ?? undefined,
contextTokens: entry?.contextTokens ?? result.defaults?.contextTokens, contextTokens: entry?.contextTokens ?? result.defaults?.contextTokens,
inputTokens: entry?.inputTokens ?? null, inputTokens: entry?.inputTokens ?? null,
outputTokens: entry?.outputTokens ?? null, outputTokens: entry?.outputTokens ?? null,

View File

@@ -37,7 +37,10 @@ export function formatStatusSummary(summary: GatewayStatusSummary) {
if (sessionPath) lines.push(`Session store: ${sessionPath}`); if (sessionPath) lines.push(`Session store: ${sessionPath}`);
const defaults = summary.sessions?.defaults; const defaults = summary.sessions?.defaults;
const defaultModel = defaults?.model ?? "unknown"; const defaultModel =
defaults?.model && defaults?.modelProvider
? `${defaults.modelProvider}/${defaults.model}`
: defaults?.model ?? "unknown";
const defaultCtx = const defaultCtx =
typeof defaults?.contextTokens === "number" typeof defaults?.contextTokens === "number"
? ` (${formatTokenCount(defaults.contextTokens)} ctx)` ? ` (${formatTokenCount(defaults.contextTokens)} ctx)`