{"record":{"id":"8b8784b8e1677087","repo":"tinyhumansai/openhuman","slug":"unknown-composio-mode-unknown-supported-ba","errorCode":null,"errorMessage":"unknown composio mode: \"{unknown}\". Supported: \"backend\", \"direct\"","messagePattern":"unknown composio mode: \"(.+?)\"\\. Supported: \"backend\", \"direct\"","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/integrations/composio/client.rs","lineNumber":848,"sourceCode":"                        .filter(|k| !k.is_empty())\n                })\n                .ok_or_else(|| {\n                    anyhow::anyhow!(\n                        \"composio direct mode selected but no api key is configured \\\n                         (set via composio.set_api_key RPC or config.composio.api_key)\"\n                    )\n                })?;\n\n            let tool = create_direct_composio_tool_for_api_key(config, &api_key)?;\n            tracing::debug!(\n                key_len = api_key.len(),\n                \"[composio-factory] resolved direct variant (key redacted)\"\n            );\n            Ok(ComposioClientKind::Direct(tool))\n        }\n        unknown => {\n            tracing::warn!(mode = %unknown, \"[composio-factory] unknown composio mode\");\n            Err(anyhow::anyhow!(\n                \"unknown composio mode: \\\"{unknown}\\\". Supported: \\\"backend\\\", \\\"direct\\\"\"\n            ))\n        }\n    }\n}\n\n// ── Direct-mode response reshapers ──────────────────────────────────\n//\n// The direct-mode `ComposioTool` (in `composio/tools/direct.rs`)\n// speaks `backend.composio.dev/api/v3/*` natively. The helpers below\n// reshape those v3 responses into the same envelopes the\n// backend-proxied [`ComposioClient`] returns, so callers in `ops.rs` /\n// `tools.rs` don't have to branch on mode for downstream concerns\n// (event-bus shape, log format, frontend type contract).\n//\n// All three helpers live next to the factory so anyone touching the\n// direct-mode plumbing can see the full envelope-translation surface\n// in one place.","sourceCodeStart":830,"sourceCodeEnd":866,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/integrations/composio/client.rs#L830-L866","documentation":"create_composio_client rejected an unrecognized config.composio.mode string. Only \"backend\" and \"direct\" are supported; unknown values fail loud by design so a typo in config.toml does not silently downgrade the auth mode.","triggerScenarios":"Thrown at src/openhuman/integrations/composio/client.rs:848 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set composio.mode to \"backend\" or \"direct\" in config.toml","Remove the mode key entirely to accept the default (backend)"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"749120085864ce16e0f273c7b86fac7740b39c5b","analyzedAt":"2026-08-17T21:21:45.363Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}