@@ -58,6 +58,7 @@ import { RooIgnoreController } from "../ignore/RooIgnoreController"
5858import { getWorkspacePath } from "../../utils/path"
5959import { Mode , defaultModeSlug } from "../../shared/modes"
6060import { getModels , flushModels } from "../../api/providers/fetchers/modelCache"
61+ import { getFirmwareQuota } from "../../api/providers/fetchers/firmware"
6162import { GetModelsOptions } from "../../shared/api"
6263import { generateSystemPrompt } from "./generateSystemPrompt"
6364import { resolveDefaultSaveUri , saveLastExportPath } from "../../utils/export"
@@ -874,6 +875,7 @@ export const webviewMessageHandler = async (
874875 lmstudio : { } ,
875876 roo : { } ,
876877 chutes : { } ,
878+ firmware : { } ,
877879 }
878880
879881 const safeGetModels = async ( options : GetModelsOptions ) : Promise < ModelRecord > => {
@@ -924,6 +926,10 @@ export const webviewMessageHandler = async (
924926 key : "chutes" ,
925927 options : { provider : "chutes" , apiKey : apiConfiguration . chutesApiKey } ,
926928 } ,
929+ {
930+ key : "firmware" ,
931+ options : { provider : "firmware" , apiKey : apiConfiguration . firmwareApiKey } ,
932+ } ,
927933 ]
928934
929935 // IO Intelligence is conditional on api key
@@ -1104,6 +1110,33 @@ export const webviewMessageHandler = async (
11041110 }
11051111 break
11061112 }
1113+ case "requestFirmwareQuota" : {
1114+ const requestId = message . requestId
1115+ try {
1116+ const { apiConfiguration : firmwareApiConfig } = await provider . getState ( )
1117+ const apiKey = firmwareApiConfig ?. firmwareApiKey
1118+
1119+ if ( ! apiKey ) {
1120+ throw new Error ( "Firmware API key not configured" )
1121+ }
1122+
1123+ const quota = await getFirmwareQuota ( apiKey )
1124+
1125+ provider . postMessageToWebview ( {
1126+ type : "firmwareQuota" ,
1127+ requestId,
1128+ values : { remaining : quota . remaining , windowHours : quota . windowHours } ,
1129+ } )
1130+ } catch ( error ) {
1131+ const errorMessage = error instanceof Error ? error . message : String ( error )
1132+ provider . postMessageToWebview ( {
1133+ type : "firmwareQuota" ,
1134+ requestId,
1135+ values : { error : errorMessage } ,
1136+ } )
1137+ }
1138+ break
1139+ }
11071140 case "requestOpenAiModels" :
11081141 if ( message ?. values ?. baseUrl && message ?. values ?. apiKey ) {
11091142 const openAiModels = await getOpenAiModels (
0 commit comments