diegosouzapw/OmniRoute · error
Handler not found
Error message
Handler not found: ${skill.handler} What it means
Handler-resolution failure in SkillExecutor: the skill's configured `handler` name is neither registered in this executor's handler map nor present in the builtinSkills fallback registry. The comment notes Next.js may compile the executor into multiple chunks; the builtin fallback normally covers that, so this throw means the handler name is genuinely unknown — a broken/mismatched skill definition or a custom handler that was never registered.
Solutions
- Verify the skill's handler name matches a registered handler or a builtin key
- Register the custom handler with the executor before the skill is invoked
- Reinstall or fix the skill definition if it references a renamed handler
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at src/lib/skills/executor.ts:91 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/af6500bb2f5491cf.
Report an issue: GitHub.
Appendix: source
Thrown at src/lib/skills/executor.ts:91
SkillStatus.RUNNING,
new Date().toISOString()
);
let handler = this.handlers.get(skill.handler);
if (!handler) {
// Builtin handlers are registered by instrumentation-node at startup,
// but Next.js may compile this module into multiple chunks (each with
// its own SkillExecutor singleton). Fall back to the builtin registry
// so `POST /api/skills/executions` works regardless of which chunk the
// route is served from.
const builtin = builtinSkills[skill.handler];
if (builtin) {
this.handlers.set(skill.handler, builtin);
handler = builtin;
}
}
if (!handler) {
throw new Error(`Handler not found: ${skill.handler}`);
}
let output: Record<string, unknown> | null = null;
let errorMessage: string | null = null;
let status = SkillStatus.SUCCESS;
try {
const result = await this.executeWithTimeout(
handler(input, { apiKeyId: context.apiKeyId, sessionId: context.sessionId || "" })
);
output = result;
} catch (err) {
errorMessage = err instanceof Error ? err.message : String(err);
status = SkillStatus.ERROR;
}
const durationMs = Date.now() - startTime;
View on GitHub (pinned to a179ffed5b)