tinyhumansai/openhuman · error
composio client unavailable: {e}
Error message
composio client unavailable: {e} What it means
Error "composio client unavailable: {e}" thrown in tinyhumansai/openhuman.
Source
Thrown at src/openhuman/agent/learning/linkedin_enrichment.rs:521
/// **HTML body** — which Gmail returns as base64-encoded data inside
/// `payload.parts[].body.data`. We must decode those parts before
/// regex-matching; searching the raw JSON alone misses them.
async fn search_gmail_for_linkedin(config: &Config) -> anyhow::Result<Option<String>> {
use crate::openhuman::integrations::composio::client::{
create_composio_client, direct_execute, ComposioClientKind,
};
use base64::engine::general_purpose::URL_SAFE_NO_PAD;
use base64::Engine;
// Resolve through the mode-aware factory so a direct-mode user
// with a stored API key can still drive Gmail enrichment from the
// personal Composio tenant (#1710 Wave 2). Pre-fix this path used
// `build_composio_client` and returned early for any user without
// a backend session, silently disabling LinkedIn enrichment for
// direct-mode users even when their LinkedIn/Gmail connections
// were healthy on app.composio.dev.
let client_kind = create_composio_client(config)
.map_err(|e| anyhow::anyhow!("composio client unavailable: {e}"))?;
// `comm/in/<username>` — LinkedIn's own notification emails always use
// this form to refer to the email *recipient's* profile.
static COMM_RE: LazyLock<Regex> =
LazyLock::new(|| Regex::new(r"linkedin\.com/comm/in/([a-zA-Z0-9_-]+)").unwrap());
let args = json!({
"query": "from:linkedin.com",
"max_results": 10,
});
let resp = match &client_kind {
ComposioClientKind::Backend(client) => client
.execute_tool("GMAIL_FETCH_EMAILS", Some(args))
.await
.map_err(|e| anyhow::anyhow!("GMAIL_FETCH_EMAILS failed: {e:#}"))?,
ComposioClientKind::Direct(direct) => {
tracing::debug!(
"[linkedin_enrichment][composio-direct] GMAIL_FETCH_EMAILS via direct tenant"View on GitHub (pinned to a221052e0d)
When it happens
Trigger: Thrown at src/openhuman/agent/learning/linkedin_enrichment.rs:521 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tinyhumansai/openhuman@a221052e0d (2026-08-16).
Data as JSON: /api/errors/89f9b6806e82576a.
Report an issue: GitHub.