{"record":{"id":"af6500bb2f5491cf","repo":"diegosouzapw/OmniRoute","slug":"handler-not-found-skill-handler","errorCode":null,"errorMessage":"Handler not found: ${skill.handler}","messagePattern":"Handler not found: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/lib/skills/executor.ts","lineNumber":91,"sourceCode":"        SkillStatus.RUNNING,\n        new Date().toISOString()\n      );\n\n      let handler = this.handlers.get(skill.handler);\n      if (!handler) {\n        // Builtin handlers are registered by instrumentation-node at startup,\n        // but Next.js may compile this module into multiple chunks (each with\n        // its own SkillExecutor singleton). Fall back to the builtin registry\n        // so `POST /api/skills/executions` works regardless of which chunk the\n        // route is served from.\n        const builtin = builtinSkills[skill.handler];\n        if (builtin) {\n          this.handlers.set(skill.handler, builtin);\n          handler = builtin;\n        }\n      }\n      if (!handler) {\n        throw new Error(`Handler not found: ${skill.handler}`);\n      }\n\n      let output: Record<string, unknown> | null = null;\n      let errorMessage: string | null = null;\n      let status = SkillStatus.SUCCESS;\n\n      try {\n        const result = await this.executeWithTimeout(\n          handler(input, { apiKeyId: context.apiKeyId, sessionId: context.sessionId || \"\" })\n        );\n        output = result;\n      } catch (err) {\n        errorMessage = err instanceof Error ? err.message : String(err);\n        status = SkillStatus.ERROR;\n      }\n\n      const durationMs = Date.now() - startTime;\n","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/diegosouzapw/OmniRoute/blob/a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d/src/lib/skills/executor.ts#L73-L109","documentation":"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.","triggerScenarios":"Thrown at src/lib/skills/executor.ts:91 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","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"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"a179ffed5bb2e0b883b9ae7214ce8717b2a94c4d","analyzedAt":"2026-08-25T18:35:09.898Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}