diegosouzapw/OmniRoute · error · Error
Volcano plan model discovery ( ) failed ` : ""}
Error message
Volcano ${kind} plan model discovery (${cfg.action}) failed${result.error ? `: ${result.error}` : ""} What it means
Thrown by fetchVolcPlanModels when the direct Volcano console API call for the plan's model-discovery action returns not-ok, with the console error appended when available. The plan itself is active (detectPlan passed) and credentials/AccountId were valid, so this is a per-action failure: console API error, permission change, or Volcano-side outage. Throwing (instead of returning []) protects the user's synced model catalog from being erased by a bad response.
Solutions
- Inspect the appended result.error (and callConsoleApiDirect logs) for the console's error code; auth errors → re-bind, 5xx → retry later.
- Verify the plan's discovery action/payload config in PLAN_DISCOVERY_CONFIG is still current with Volcano's console API.
- Retry the model sync after the console recovers; models are preserved because discovery aborts on error.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at src/lib/providers/volcenginePlanModelDiscovery.ts:383 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of diegosouzapw/OmniRoute@a179ffed5b (2026-08-25).
Data as JSON: /api/errors/54ddcc40ee47aacd.
Report an issue: GitHub.
Appendix: source
Thrown at src/lib/providers/volcenginePlanModelDiscovery.ts:383
const payload: JsonRecord = { ...cfg.payload };
if (cfg.requiresAccountId) {
const accountId = extractAccountId(cookieHeader);
if (accountId === null) {
throw new Error(
`Volcano ${kind} plan discovery requires AccountId, but none found in console cookie — re-bind the plan`
);
}
payload.AccountId = accountId;
}
const result = await callConsoleApiDirect(
cfg.action,
payload,
cookieHeader,
csrfToken,
cfg.referer
);
if (!result.ok) {
throw new Error(
`Volcano ${kind} plan model discovery (${cfg.action}) failed${result.error ? `: ${result.error}` : ""}`
);
}
const discovered = parseLatestModelList(result.json);
if (discovered.length === 0) {
throw new Error(`Volcano ${kind} plan returned no usable models`);
}
return discovered.map(enrichModel);
}
export function providerToVolcPlanKind(providerId: string): VolcPlanKind | null {
const id = providerId.trim().toLowerCase();
if (id === "volcengine-agent-plan") return "agent";
if (id === "volcengine-coding-plan") return "coding";
return null;
}
View on GitHub (pinned to a179ffed5b)