decolua/9router · error
Antigravity executor not found
Error message
Antigravity executor not found
What it means
Thrown by the Antigravity image adapter's executeViaExecutor (open-sse/handlers/imageProviders/antigravity.js:32) when getExecutor('antigravity') returns falsy. The image adapter is a thin delegate: it builds a chat-style body and hands everything to the antigravity chat executor for the correct request envelope and auth. Without that executor registered in open-sse/executors/index.js, delegation is impossible and the adapter fails fast instead of building a malformed request.
Source
Thrown at open-sse/handlers/imageProviders/antigravity.js:32
// Raw base64 string (assume PNG)
if (/^[A-Za-z0-9+/]/.test(input) && input.length > 100 && !input.startsWith("http")) {
return { inlineData: { mimeType: "image/png", data: input } };
}
return null;
}
export default {
// Delegate to executor instead of building URL/headers/body manually
useExecutor: true,
// Stubs - required by imageGenerationCore interface but unused with useExecutor
buildUrl: () => "",
buildHeaders: () => ({}),
buildBody: () => ({}),
async executeViaExecutor(model, body, credentials, log) {
const executor = getExecutor("antigravity");
if (!executor) throw new Error("Antigravity executor not found");
// Ensure we use an image model for image generation
const isImageModel = (m) => /image|imagen|image-generation/i.test(m || "");
let targetModel = isImageModel(model) ? model : "gemini-3.1-flash-image";
// If body.size is provided, resolve aspect ratio and append to model
if (body.size && typeof body.size === "string") {
const ratio = sizeToAspectRatio(body.size);
const suffix = ratio.replace(":", "x");
if (!targetModel.includes(suffix)) {
targetModel = `${targetModel}-${suffix}`;
}
}
// Build parts: text prompt + optional input image for editing
const parts = [{ text: body.prompt }];
const imageInput = body.image || (Array.isArray(body.images) && body.images[0]);
if (imageInput) {View on GitHub (pinned to 90b52e06ff)
Solutions
- Ensure the antigravity executor exists and is exported in open-sse/executors/index.js (check the import and the id key match getExecutor('antigravity')).
- Rebuild/restart the server after pulling updates so newly added executor modules are loaded.
- If you renamed the provider, update both the provider registry id and the executor registration id so they match.
- Verify with a quick node -e "import('./open-sse/executors/index.js').then(m => console.log(!!m.getExecutor('antigravity')))" against the built sources.
Example fix
// before (executors/index.js)
import KiroExecutor from "./kiro.js";
// after
import KiroExecutor from "./kiro.js";
import AntigravityExecutor from "./antigravity.js";
const executors = { ..., antigravity: new AntigravityExecutor() }; Defensive patterns
Strategy: type-guard
Validate before calling
import { getExecutor } from "./open-sse/executors/index.js";
if (typeof getExecutor !== "function" || !getExecutor("antigravity")) {
throw new Error("antigravity executor is not registered — check executors/index.js");
} Type guard
function antigravityAvailable() {
try { return Boolean(getExecutor("antigravity")); } catch { return false; }
} Try / catch
try {
const image = await generateImage({ provider: "antigravity", ... });
} catch (e) {
if (/Antigravity executor not found/.test(e.message)) {
return fallbackImageProvider(prompt); // e.g. route to an OpenAI-compatible image provider
}
throw e;
} Prevention
- Never hand-edit the executor registration map without re-running registration checks.
- Add a startup smoke test asserting every useExecutor image adapter has a matching executor.
- Keep provider ids and executor ids in sync (single source of truth in config).
- Rebuild after dependency/provider updates so new executor modules are bundled.
When it happens
Trigger: An image-generation request routes to the antigravity image provider while the executor map in open-sse/executors/index.js has no 'antigravity' entry — typically because the executor module was not imported/registered (build tree missing it, custom fork stripped it), or the provider id was renamed in one place but not the other.
Common situations: Running a modified/trimmed build where executors/index.js was hand-edited and the antigravity import dropped; a custom provider id ('antigravity-pro') routed to this adapter; stale build cache after upgrading where new executor files were added but the bundle wasn't rebuilt.
Related errors
- HTTP ${result.response.status}
- Machine ID is required for Cursor API
- Failed to fetch image: ${res.status}
- BFL: no polling_url returned
- NanoBanana status ${r.status}
AI-assisted analysis of decolua/9router@90b52e06ff (2026-08-30).
Data as JSON: /api/errors/8a807b6305a11879.
Report an issue: GitHub.