{"record":{"id":"deee73ada13e9495","repo":"Hmbown/CodeWhale","slug":"plugin-agent-component-is-unavailable","errorCode":null,"errorMessage":"plugin Agent component is unavailable: {}","messagePattern":"plugin Agent component is unavailable: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/fleet/profile.rs","lineNumber":310,"sourceCode":"            Ok(mut profile) => {\n                profile.origin = ProfileOrigin::Plugin;\n                (vec![profile], Vec::new())\n            }\n            Err(error) => {\n                let identity = load_agent_profile_identity_file(component).ok();\n                (\n                    Vec::new(),\n                    vec![AgentProfileLoadIssue::new(\n                        component,\n                        identity.as_ref().map(|identity| identity.id.as_str()),\n                        ProfileOrigin::Plugin,\n                        format!(\"{error:#}\"),\n                    )],\n                )\n            }\n        }\n    } else {\n        return Err(anyhow!(\n            \"plugin Agent component is unavailable: {}\",\n            component.display()\n        ));\n    };\n    for profile in &mut profiles {\n        profile.plugin_authority = Some(authority.clone());\n    }\n    Ok((profiles, issues))\n}\n\n/// Read only the identity-bearing fields from workspace profiles for the\n/// authoring collision gate.  Unknown legacy fields are harmless here because\n/// no profile behavior is loaded or executed from this representation.\npub fn load_workspace_agent_profile_identities(\n    workspace: impl AsRef<Path>,\n) -> Result<Vec<AgentProfileIdentity>> {\n    let dir = workspace.as_ref().join(WORKSPACE_AGENT_PROFILE_DIR);\n    load_agent_profile_identities_from_dir(dir)","sourceCodeStart":292,"sourceCodeEnd":328,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/fleet/profile.rs#L292-L328","documentation":"This error is thrown by load_plugin_agent_profiles_from_component when a Fleet plugin component binary (a Path passed to the loader) does not exist on disk, so the plugin's Agent profiles cannot be loaded. The loader checks the component path with an existence check before executing it; when the check fails it wraps the path display in this anyhow error. It indicates a plugin registration/configuration problem, not a profile file parsing problem (those get their own errors).","triggerScenarios":"Calling load_with_personal_dir_and_plugins with a plugin entry whose component path points to a nonexistent file: the plugin directory exists but the component executable was deleted, renamed, not built, or the configured path has a typo or wrong relative base.","commonSituations":"User config lists a Fleet plugin whose binary was removed by a clean rebuild; plugin path resolved relative to a directory other than the one assumed; packaging missed the component binary; stale plugin cache referencing an old artifact path.","solutions":["Verify the component path exists: run `ls <component>`; if missing, rebuild or reinstall the plugin binary.","Fix the plugin component path in the user's plugin configuration (absolute path or correct relative-to-config-dir path).","Rebuild the plugin with the project's build command so the artifact is present at the configured path.","Remove the plugin entry from configuration if the plugin is no longer wanted."],"exampleFix":"// before\nplugins = [{ name = \"myfleet\", component = \"target/release/fleet-myfleet\" }]\n// after\nplugins = [{ name = \"myfleet\", component = \"/home/user/.local/bin/fleet-myfleet\" }] # path that actually exists","handlingStrategy":"validation","validationCode":"// Rust\nif !component.exists() {\n    return Err(anyhow!(\"plugin component missing: {}\", component.display()));\n}\nlet profiles = load_with_personal_dir_and_plugins(dir, &plugins)?;","typeGuard":"fn component_exists(p: &std::path::Path) -> bool { p.is_file() }","tryCatchPattern":null,"preventionTips":["Rebuild plugins before sessions that depend on them and verify artifact paths exist.","Use absolute paths for plugin components in configuration.","Prune plugin entries whose binaries are no longer produced by the build."],"tags":["plugin","file-not-found","configuration","fleet"],"backgroundTag":"file-not-found","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}