Hmbown/CodeWhale · error

The installer did not report the destination path.

Error message

The installer did not report the destination path.

What it means

During plugin install the downloaded artifact's hash mismatched, and the automatic rollback could not even start because the installer reported no destination path (installed_path None or parentless) - crates/tui/src/commands/groups/plugins/mod.rs:569. The registry is still rediscovered and the skill cache refreshed, but the mismatched plugin was not uninstalled.

Source

Thrown at crates/tui/src/commands/groups/plugins/mod.rs:569

            other => CommandResult::error(format!("Unexpected install outcome: {other:?}")),
        },
        Err(error) => action_error(app, &format!("Plugin install failed: {error:#}")),
    }
}

fn rollback_hash_mismatch(
    app: &mut App,
    name: &str,
    installed_path: Option<&std::path::Path>,
    expected: &str,
    actual: Option<&str>,
) -> CommandResult {
    let locale = app.ui_locale;
    let missing_destination =
        tr(locale, MessageId::PluginKimiRollbackDestinationMissing).into_owned();
    let rollback = installed_path
        .and_then(std::path::Path::parent)
        .ok_or_else(|| anyhow::anyhow!(missing_destination))
        .and_then(|plugins_dir| crate::plugins::install::uninstall(name, plugins_dir));
    app.plugin_registry = app.plugin_registry.rediscover_for_workspace(&app.workspace);
    app.refresh_skill_cache();
    let actual = actual
        .map(escape_review_text)
        .unwrap_or_else(|| tr(locale, MessageId::PluginKimiHashUnavailable).into_owned());
    let name = escape_review_text(name);
    let expected = escape_review_text(expected);
    match rollback {
        Ok(()) => CommandResult::error(
            tr(locale, MessageId::PluginKimiMismatchRemoved)
                .replace("{name}", &name)
                .replace("{expected}", &expected)
                .replace("{actual}", &actual),
        ),
        Err(error) => CommandResult {
            message: Some(
                tr(locale, MessageId::PluginKimiMismatchRollbackFailed)

View on GitHub (pinned to 8880682c63)

Solutions

  1. Inspect the workspace plugins directory and remove the partially installed plugin folder by hand, then restart or re-run discovery
  2. Verify the archive checksum yourself and pin a source that is not rewritten in transit
  3. Re-run the install to get a clean destination, then uninstall through the normal command
  4. Report the installer-that-returns-no-path as a bug against that plugin source
Defensive patterns

Strategy: validation

Validate before calling

// Before install, confirm the source can report a destination and a stable hash
assert!(source.manifest().install_path.is_some(), "installer reports no destination");
assert!(source.archive_sha256().is_some(), "source provides no expected hash");

Try / catch

// Treat as 'manual cleanup required': locate and remove the residue, then rediscover
if let Err(e) = install_plugin(source) {
    if e.to_string().contains("did not report the destination path") {
        clean_plugins_dir_manually(&workspace).ok();
        app.refresh_plugin_registry();
    }
}

Prevention

When it happens

Trigger: A plugin source whose installer reports success without recording a path; an interrupted install that lost path bookkeeping; hash mismatch combined with a nonstandard install layout or manifest.

Common situations: Third-party plugin registries; corporate artifact mirrors that rewrite archives in transit (causing the mismatch) plus installers with custom layouts.

Related errors


AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16). Data as JSON: /api/errors/3e032c3949bd7039. Report an issue: GitHub.