{"record":{"id":"93a31b1eacee4dd8","repo":"deepseek-ai/deepseek-harness","slug":"host-call-method-on-pluginid-failed-insid","errorCode":null,"errorMessage":"host.call(\"${method}\") on ${pluginId} failed inside the host handler: ${result.message}","messagePattern":"host\\.call\\(\"(.+?)\"\\) on (.+?) failed inside the host handler: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/extensions/cordis-client-runner/src/client/index.ts","lineNumber":223,"sourceCode":"  const runner = new DynamicCordisPackageRunner({\n    ctx,\n    loader: ctx.loader,\n    modules: ctx.get('modules') as ClientModuleSystem,\n    slots: ctx.get('slots') as SlotRegistry,\n    invoke: async (pluginId, pluginRunId, method, args) => {\n      // Model-authored arguments reach this boundary untyped; the namespace's\n      // generated codec is what validates them as JSON, and its rejection is a\n      // bare field name — this is the only place that still knows which call it\n      // belonged to, so the teaching has to be added here.\n      const answered = await ctx.remote.dynamicCordisRunner.invoke(pluginId, pluginRunId, method, args as JsonValue)\n        .catch((error: unknown) => { throw new Error(wireFailure(pluginId, method, error)) })\n      // Two failure layers, and they teach different things: the carrier's error\n      // branch means the call never reached the host half, while the namespace's\n      // own `ok: false` is that half answering with a refusal.\n      if (!answered.ok) throw new Error(wireFailure(pluginId, method, `${answered.error.code}: ${answered.error.message}`))\n      const result = answered.value\n      if (result.ok) return result.value\n      throw invokeError(pluginId, method, result)\n    },\n    // Post-settle diagnosis, deliberately fire-and-forget: the run this package\n    // belongs to was answered before it ever rendered, so nothing waits on this\n    // and a failed report must not turn one crash into two.\n    reportRenderFailure: (agentId, pluginId, pluginRunId, failure) => {\n      void ctx.remote.dynamicCordisRunner.reportRenderFailure(agentId, pluginId, pluginRunId, failure).then((result) => {\n        if (!result.ok) {\n          console.error(`[cordis-client-runner] reporting a render failure of ${pluginId} failed:`, result.error)\n        }\n      }, (error: unknown) => {\n        console.error(`[cordis-client-runner] reporting a render failure of ${pluginId} failed:`, error)\n      })\n    },\n    reportGuardFailure: (agentId, pluginId, pluginRunId, failure) => {\n      void ctx.remote.dynamicCordisRunner.reportClientGuardFailure(agentId, pluginId, pluginRunId, failure).then((result) => {\n        if (!result.ok) {\n          console.error(`[cordis-client-runner] reporting a guard failure of ${pluginId} failed:`, result.error)\n        }","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/deepseek-ai/deepseek-harness/blob/b150a551b8d465e31e418e1b2eaf5e79bbb7d28e/packages/extensions/cordis-client-runner/src/client/index.ts#L205-L241","documentation":"Error \"host.call(\"${method}\") on ${pluginId} failed inside the host handler: ${result.message}\" thrown in deepseek-ai/deepseek-harness.","triggerScenarios":"Thrown at packages/extensions/cordis-client-runner/src/client/index.ts:223 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the plugin host handler for the named method and reload the plugin."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"b150a551b8d465e31e418e1b2eaf5e79bbb7d28e","analyzedAt":"2026-08-24T18:12:29.105Z","schemaVersion":2},"datasetVersion":"2026-08-24T22:17:12.610Z"}