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.
- 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.
- 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: 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.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -37,7 +37,10 @@ export function formatStatusSummary(summary: GatewayStatusSummary) {
if (sessionPath) lines.push(`Session store: ${sessionPath}`);
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 =
typeof defaults?.contextTokens === "number"
? ` (${formatTokenCount(defaults.contextTokens)} ctx)`