Hmbown/CodeWhale · warning

no bundle is installed

Error message

no bundle is installed

What it means

`remove-bundle` reads the current connection record and its optional `bundle` field; this error fires when there is no connection record at all, or the record has `bundle: None` — install-bundle never completed or its record was already cleared. The command refuses to guess rather than delete anything, so nothing is removed when it triggers.

Source

Thrown at crates/tui/src/integrations/cli.rs:463

                "installed: {} {} into {} (patch sha256 {})",
                bundle.package_name,
                bundle.package_version,
                bundle.profile_dir.display(),
                bundle.patch_sha256
            );
            println!(
                "launch without --patch: dsh --profile {}  (or `{CLI_COMMAND} launch`)",
                dsh::bundle::BUNDLE_PROFILE
            );
            Ok(())
        }
        DshIntegrationCommand::RemoveBundle { yes } => {
            let (paths, report) = status_report(config, workspace, false)?;
            let bundle = report
                .record
                .as_ref()
                .and_then(|r| r.bundle.as_ref())
                .ok_or_else(|| anyhow::anyhow!("no bundle is installed"))?;
            println!(
                "remove-bundle will run: dsh plugin --profile {} remove {}",
                bundle.profile, bundle.package_name
            );
            println!("  then delete only {}", paths.bundle_dir.display());
            println!(
                "  the DSH profile dir {} and its app bundle link stay in place (DSH-owned)",
                bundle.profile_dir.display()
            );
            confirm(
                yes,
                "Remove the Codewhale bundle from DSH profile `codewhale`?",
            )?;
            let removed = dsh::remove_bundle(&paths, &report.detection, &dsh::ProcessRunner)?;
            println!(
                "removed bundle; deleted {} Codewhale-owned file(s)",
                removed.len()
            );

View on GitHub (pinned to 8880682c63)

Solutions

  1. Check `codewhale integrations dsh status` — the connected line only mentions a bundle when one is recorded
  2. If a previous install-bundle failed halfway, re-run install-bundle to completion first, then remove-bundle
  3. If the goal is removing the entire integration (overlay, receipt, bundle dir), use `codewhale integrations dsh remove` instead
  4. Treat this error as a no-op signal in automation: exit without action
Defensive patterns

Strategy: validation

Validate before calling

let (_paths, report) = status_report(config, workspace, false)?;
if report.record.as_ref().and_then(|r| r.bundle.as_ref()).is_none() {
    println!("no bundle is installed; nothing to remove");
    return Ok(());
}

Type guard

fn bundle_present(report: &DshStatusReport) -> bool {
    report.record.as_ref().and_then(|r| r.bundle.as_ref()).is_some()
}

Prevention

When it happens

Trigger: Running `codewhale integrations dsh remove-bundle` before any install-bundle, after a successful remove-bundle, after `remove` deleted the whole receipt, or when a prior install-bundle failed before writing the bundle record.

Common situations: Cleanup scripts that run remove-bundle unconditionally; retrying remove-bundle after it already succeeded; trying to clean up a half-finished install-bundle whose record was never written.

Related errors


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