@@ -1192,6 +1192,164 @@ describe("buildStatusReply subagent summary", () => {
11921192 expect ( providerUsageCall [ 0 ] ?. providers ) . toEqual ( [ "deepseek" ] ) ;
11931193 } ) ;
11941194
1195+ it ( "uses the session-selected model provider for /status usage" , async ( ) => {
1196+ const usageResetBase = Math . floor ( Date . now ( ) / 1000 ) ;
1197+ providerUsageMock . loadProviderUsageSummary . mockImplementation (
1198+ async ( { providers = [ ] } = { } ) => ( {
1199+ updatedAt : Date . now ( ) ,
1200+ providers : providers . map ( ( provider ) =>
1201+ provider === "openai"
1202+ ? {
1203+ provider : "openai" ,
1204+ displayName : "OpenAI" ,
1205+ windows : [
1206+ {
1207+ label : "5h" ,
1208+ usedPercent : 9 ,
1209+ resetAt : ( usageResetBase + 60 * 60 ) * 1000 ,
1210+ } ,
1211+ ] ,
1212+ }
1213+ : {
1214+ provider,
1215+ displayName : "DeepSeek" ,
1216+ windows : [ ] ,
1217+ summary : "Balance ¥42.50" ,
1218+ } ,
1219+ ) ,
1220+ } ) ,
1221+ ) ;
1222+
1223+ const text = await buildStatusText ( {
1224+ cfg : {
1225+ ...baseCfg ,
1226+ agents : {
1227+ defaults : {
1228+ model : "deepseek/deepseek-v4-flash" ,
1229+ } ,
1230+ } ,
1231+ } ,
1232+ sessionEntry : {
1233+ sessionId : "sess-status-session-selected-usage" ,
1234+ updatedAt : 0 ,
1235+ providerOverride : "openai" ,
1236+ modelOverride : "gpt-5.5" ,
1237+ } ,
1238+ sessionKey : "agent:main:main" ,
1239+ parentSessionKey : "agent:main:main" ,
1240+ sessionScope : "per-sender" ,
1241+ statusChannel : "telegram" ,
1242+ provider : "deepseek" ,
1243+ model : "deepseek-v4-flash" ,
1244+ contextTokens : 1_000_000 ,
1245+ resolvedFastMode : false ,
1246+ resolvedVerboseLevel : "off" ,
1247+ resolvedReasoningLevel : "off" ,
1248+ resolveDefaultThinkingLevel : async ( ) => undefined ,
1249+ isGroup : false ,
1250+ defaultGroupActivation : ( ) => "mention" ,
1251+ modelAuthOverride : "oauth (openai:status)" ,
1252+ activeModelAuthOverride : "oauth (openai:status)" ,
1253+ } ) ;
1254+
1255+ const normalized = normalizeTestText ( text ) ;
1256+ expect ( normalized ) . toContain ( "Session selected: openai/gpt-5.5" ) ;
1257+ expect ( normalized ) . toContain ( "Configured default: deepseek/deepseek-v4-flash" ) ;
1258+ expect ( normalized ) . toContain ( "Usage: 5h 91% left" ) ;
1259+ expect ( normalized ) . not . toContain ( "Usage: Balance ¥42.50" ) ;
1260+ expect ( providerUsageMock . loadProviderUsageSummary ) . toHaveBeenCalledWith (
1261+ expect . objectContaining ( { providers : [ "openai" ] } ) ,
1262+ ) ;
1263+ } ) ;
1264+
1265+ it ( "uses provider-qualified model overrides for /status usage lookup" , async ( ) => {
1266+ await withTempHome (
1267+ async ( dir ) => {
1268+ saveStatusTestAuthProfile ( { dir, profileId : "openai:status" , provider : "openai" } ) ;
1269+
1270+ const usageResetBase = Math . floor ( Date . now ( ) / 1000 ) ;
1271+ providerUsageMock . loadProviderUsageSummary . mockImplementation (
1272+ async ( { providers = [ ] } = { } ) => ( {
1273+ updatedAt : Date . now ( ) ,
1274+ providers : providers . map ( ( provider ) =>
1275+ provider === "openai"
1276+ ? {
1277+ provider : "openai" ,
1278+ displayName : "OpenAI" ,
1279+ windows : [
1280+ {
1281+ label : "5h" ,
1282+ usedPercent : 9 ,
1283+ resetAt : ( usageResetBase + 60 * 60 ) * 1000 ,
1284+ } ,
1285+ ] ,
1286+ }
1287+ : {
1288+ provider,
1289+ displayName : "DeepSeek" ,
1290+ windows : [ ] ,
1291+ summary : "Balance ¥42.50" ,
1292+ } ,
1293+ ) ,
1294+ } ) ,
1295+ ) ;
1296+
1297+ const text = await buildStatusText ( {
1298+ cfg : {
1299+ ...baseCfg ,
1300+ models : {
1301+ providers : {
1302+ openai : {
1303+ models : [ { ...codexStatusModel , contextWindow : 258_000 , contextTokens : 258_000 } ] ,
1304+ } ,
1305+ } ,
1306+ } ,
1307+ agents : {
1308+ defaults : {
1309+ model : "deepseek/deepseek-v4-flash" ,
1310+ } ,
1311+ } ,
1312+ auth : {
1313+ order : {
1314+ openai : [ "openai:status" ] ,
1315+ } ,
1316+ } ,
1317+ } ,
1318+ sessionEntry : {
1319+ sessionId : "sess-status-qualified-session-selected-usage" ,
1320+ updatedAt : 0 ,
1321+ modelOverride : "openai/gpt-5.5" ,
1322+ } ,
1323+ sessionKey : "agent:main:main" ,
1324+ parentSessionKey : "agent:main:main" ,
1325+ sessionScope : "per-sender" ,
1326+ statusChannel : "telegram" ,
1327+ provider : "deepseek" ,
1328+ model : "deepseek-v4-flash" ,
1329+ contextTokens : 1_000_000 ,
1330+ resolvedFastMode : false ,
1331+ resolvedVerboseLevel : "off" ,
1332+ resolvedReasoningLevel : "off" ,
1333+ resolveDefaultThinkingLevel : async ( ) => undefined ,
1334+ isGroup : false ,
1335+ defaultGroupActivation : ( ) => "mention" ,
1336+ } ) ;
1337+
1338+ const normalized = normalizeTestText ( text ) ;
1339+ expect ( normalized ) . toContain ( "Session selected: openai/gpt-5.5" ) ;
1340+ expect ( normalized ) . toContain ( "Configured default: deepseek/deepseek-v4-flash" ) ;
1341+ expect ( normalized ) . toContain ( "oauth (openai:status)" ) ;
1342+ expect ( normalized ) . toContain ( "Context: ?/258k" ) ;
1343+ expect ( normalized ) . toContain ( "Usage: 5h 91% left" ) ;
1344+ expect ( normalized ) . not . toContain ( "Usage: Balance ¥42.50" ) ;
1345+ expect ( providerUsageMock . loadProviderUsageSummary ) . toHaveBeenCalledWith (
1346+ expect . objectContaining ( { providers : [ "openai" ] } ) ,
1347+ ) ;
1348+ } ,
1349+ { env : { OPENAI_API_KEY : undefined } } ,
1350+ ) ;
1351+ } ) ;
1352+
11951353 it ( "uses Codex OAuth auth labels for explicit OpenAI OpenClaw auth order" , async ( ) => {
11961354 await withTempHome (
11971355 async ( dir ) => {
0 commit comments