mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-07 08:01:40 +00:00
fix(auth/session): preserve override reset behavior and repair oauth profile-id drift (openclaw#18820) thanks @Glucksberg
Verified: - pnpm build - pnpm check - pnpm test:macmini Co-authored-by: Glucksberg <80581902+Glucksberg@users.noreply.github.com> Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
import { resolveAgentDir, resolveSessionAgentId } from "../../agents/agent-scope.js";
|
||||
import { DEFAULT_MODEL, DEFAULT_PROVIDER } from "../../agents/defaults.js";
|
||||
import { resolveModelAuthLabel } from "../../agents/model-auth-label.js";
|
||||
import { loadModelCatalog } from "../../agents/model-catalog.js";
|
||||
import {
|
||||
buildAllowedModelSet,
|
||||
@@ -8,6 +10,7 @@ import {
|
||||
resolveModelRefFromString,
|
||||
} from "../../agents/model-selection.js";
|
||||
import type { OpenClawConfig } from "../../config/config.js";
|
||||
import type { SessionEntry } from "../../config/sessions.js";
|
||||
import {
|
||||
buildModelsKeyboard,
|
||||
buildProviderKeyboard,
|
||||
@@ -177,11 +180,47 @@ function parseModelsArgs(raw: string): {
|
||||
};
|
||||
}
|
||||
|
||||
function resolveProviderLabel(params: {
|
||||
provider: string;
|
||||
cfg: OpenClawConfig;
|
||||
agentDir?: string;
|
||||
sessionEntry?: SessionEntry;
|
||||
}): string {
|
||||
const authLabel = resolveModelAuthLabel({
|
||||
provider: params.provider,
|
||||
cfg: params.cfg,
|
||||
sessionEntry: params.sessionEntry,
|
||||
agentDir: params.agentDir,
|
||||
});
|
||||
if (!authLabel || authLabel === "unknown") {
|
||||
return params.provider;
|
||||
}
|
||||
return `${params.provider} · 🔑 ${authLabel}`;
|
||||
}
|
||||
|
||||
export function formatModelsAvailableHeader(params: {
|
||||
provider: string;
|
||||
total: number;
|
||||
cfg: OpenClawConfig;
|
||||
agentDir?: string;
|
||||
sessionEntry?: SessionEntry;
|
||||
}): string {
|
||||
const providerLabel = resolveProviderLabel({
|
||||
provider: params.provider,
|
||||
cfg: params.cfg,
|
||||
agentDir: params.agentDir,
|
||||
sessionEntry: params.sessionEntry,
|
||||
});
|
||||
return `Models (${providerLabel}) — ${params.total} available`;
|
||||
}
|
||||
|
||||
export async function resolveModelsCommandReply(params: {
|
||||
cfg: OpenClawConfig;
|
||||
commandBodyNormalized: string;
|
||||
surface?: string;
|
||||
currentModel?: string;
|
||||
agentDir?: string;
|
||||
sessionEntry?: SessionEntry;
|
||||
}): Promise<ReplyPayload | null> {
|
||||
const body = params.commandBodyNormalized.trim();
|
||||
if (!body.startsWith("/models")) {
|
||||
@@ -237,10 +276,16 @@ export async function resolveModelsCommandReply(params: {
|
||||
|
||||
const models = [...(byProvider.get(provider) ?? new Set<string>())].toSorted();
|
||||
const total = models.length;
|
||||
const providerLabel = resolveProviderLabel({
|
||||
provider,
|
||||
cfg: params.cfg,
|
||||
agentDir: params.agentDir,
|
||||
sessionEntry: params.sessionEntry,
|
||||
});
|
||||
|
||||
if (total === 0) {
|
||||
const lines: string[] = [
|
||||
`Models (${provider}) — none`,
|
||||
`Models (${providerLabel}) — none`,
|
||||
"",
|
||||
"Browse: /models",
|
||||
"Switch: /model <provider/model>",
|
||||
@@ -263,7 +308,13 @@ export async function resolveModelsCommandReply(params: {
|
||||
pageSize: telegramPageSize,
|
||||
});
|
||||
|
||||
const text = `Models (${provider}) — ${total} available`;
|
||||
const text = formatModelsAvailableHeader({
|
||||
provider,
|
||||
total,
|
||||
cfg: params.cfg,
|
||||
agentDir: params.agentDir,
|
||||
sessionEntry: params.sessionEntry,
|
||||
});
|
||||
return {
|
||||
text,
|
||||
channelData: { telegram: { buttons } },
|
||||
@@ -289,7 +340,7 @@ export async function resolveModelsCommandReply(params: {
|
||||
const endIndexExclusive = Math.min(total, startIndex + effectivePageSize);
|
||||
const pageModels = models.slice(startIndex, endIndexExclusive);
|
||||
|
||||
const header = `Models (${provider}) — showing ${startIndex + 1}-${endIndexExclusive} of ${total} (page ${safePage}/${pageCount})`;
|
||||
const header = `Models (${providerLabel}) — showing ${startIndex + 1}-${endIndexExclusive} of ${total} (page ${safePage}/${pageCount})`;
|
||||
|
||||
const lines: string[] = [header];
|
||||
for (const id of pageModels) {
|
||||
@@ -313,11 +364,21 @@ export const handleModelsCommand: CommandHandler = async (params, allowTextComma
|
||||
return null;
|
||||
}
|
||||
|
||||
const modelsAgentId =
|
||||
params.agentId ??
|
||||
resolveSessionAgentId({
|
||||
sessionKey: params.sessionKey,
|
||||
config: params.cfg,
|
||||
});
|
||||
const modelsAgentDir = resolveAgentDir(params.cfg, modelsAgentId);
|
||||
|
||||
const reply = await resolveModelsCommandReply({
|
||||
cfg: params.cfg,
|
||||
commandBodyNormalized: params.command.commandBodyNormalized,
|
||||
surface: params.ctx.Surface,
|
||||
currentModel: params.model ? `${params.provider}/${params.model}` : undefined,
|
||||
agentDir: modelsAgentDir,
|
||||
sessionEntry: params.sessionEntry,
|
||||
});
|
||||
if (!reply) {
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user