Hmbown/CodeWhale · error
DSH plugin path not available: {reason}
Error message
DSH plugin path not available: {reason} What it means
`install-bundle` composes bundles through dsh's documented plugin path, which shells out to pnpm (`dsh plugin --profile codewhale add <path>`). Before touching anything it checks `report.bundle_availability`; `NotAvailable { reason }` means the pnpm probe failed — either `pnpm --version` exited non-zero or pnpm could not be executed at all (crates/tui/src/integrations/dsh/bundle.rs:137-142 produces the two reason strings).
Source
Thrown at crates/tui/src/integrations/cli.rs:390
);
Ok(())
}
DshIntegrationCommand::Enable => {
let paths = DshPaths::from_process()?;
let record = dsh::set_disabled(&paths, false)?;
println!("enabled: {}", record.overlay_path.display());
Ok(())
}
DshIntegrationCommand::InstallBundle { app, yes } => {
let app = dsh::DshAppBundle::parse(&app)
.ok_or_else(|| anyhow::anyhow!("--app must be `web` or `headless`, got `{app}`"))?;
let (paths, report) = status_report(config, workspace, false)?;
ensure_launchable_dsh(&report)?;
let record = report.record.as_ref().ok_or_else(|| {
anyhow::anyhow!("DSH is not connected; run `{CLI_COMMAND} connect` first")
})?;
if let dsh::BundleAvailability::NotAvailable { reason } = &report.bundle_availability {
anyhow::bail!("DSH plugin path not available: {reason}");
}
if matches!(report.state, DshIntegrationState::StaleConfig { .. }) {
anyhow::bail!("overlay is stale; run `{CLI_COMMAND} update` before install-bundle");
}
let app_source = dsh::bundle::app_bundle_source(
report
.detection
.binary
.as_ref()
.ok_or_else(|| anyhow::anyhow!("dsh binary path is unknown"))?,
app,
)?;
let profile_dir = report
.detection
.dsh_home
.join("profiles")
.join(dsh::bundle::BUNDLE_PROFILE);
println!("{RELATIONSHIP_LABEL} — install-bundle plan (nothing written yet)");View on GitHub (pinned to 8880682c63)
Solutions
- Install pnpm (`npm i -g pnpm` or `corepack enable && corepack prepare pnpm@latest --activate`) and confirm `pnpm --version` succeeds in the same shell you run Codewhale from
- If the reason says exited non-zero, run `pnpm --version` manually to see pnpm's own error output
- Check availability without side effects: `codewhale integrations dsh status` prints a `dsh plugin path (bundle):` line
- Remember only bundle install/remove needs pnpm — `connect`, `update`, and `launch` never invoke it
Defensive patterns
Strategy: validation
Validate before calling
if !matches!(
dsh::bundle_availability_now(),
dsh::BundleAvailability::Available { .. }
) {
eprintln!("install pnpm first: npm i -g pnpm");
return Ok(());
} Type guard
fn pnpm_ready(availability: &dsh::BundleAvailability) -> bool {
matches!(availability, dsh::BundleAvailability::Available { .. })
} Prevention
- Probe `pnpm --version` in provisioning scripts before any install-bundle step
- Install pnpm via corepack in Node-based environments so it tracks the project
- Remember connect/update/launch never need pnpm — scope the pnpm requirement to bundle commands only
When it happens
Trigger: `install-bundle` when pnpm is absent from PATH, present but broken (bad node shim, wrong architecture, corrupted install), or when `pnpm --version` itself exits non-zero. The `{reason}` says which case it was: 'pnpm could not be run: …' versus 'pnpm --version exited non-zero'.
Common situations: npm-only Node installs; pnpm provided via corepack but corepack not enabled; minimal CI images without pnpm; Windows where pnpm.cmd is not visible to the spawning process's PATH; nvm shim paths missing in non-login shells.
Related errors
- dsh binary path is unknown
- dsh is not on PATH; install the official DeepSeek Harness fi
- dsh is offline: {reason}
- dsh binary is unknown
- dsh plugin add {} failed: {}
AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16).
Data as JSON: /api/errors/85ce1a8fecc49515.
Report an issue: GitHub.