upstash/context7 · info

Installation cancelled

Error message

Installation cancelled

What it means

A warning logged when the interactive multi-select prompt inside `skill install` throws (typically because the user pressed Ctrl+C / Esc to abort the prompt). The command catches the exception, logs 'Installation cancelled', and returns early without installing anything.

Solutions

  1. Re-run the command and complete the selection prompt to proceed with installation
  2. Run in an interactive TTY-enabled terminal; prompts cannot run in non-interactive shells
  3. Pass flags that skip the interactive prompt if available (e.g. --all or an explicit skill list)
  4. No harm was done: nothing was installed, so simply retry when ready

Example fix

// before (non-interactive CI fails at prompt)
opencode skill install org/skills
// after
opencode skill install org/skills --all   # or run locally in an interactive terminal
Defensive patterns

Strategy: try-catch

Validate before calling

if (!process.stdin.isTTY) {
  console.error('Interactive prompt requires a TTY; use explicit flags instead.');
  process.exit(1);
}

Try / catch

try {
  selectedSkills = await prompt(...);
} catch {
  console.warn('Installation cancelled');
  return;
}

Prevention

When it happens

Trigger: User aborts the interactive skill-selection prompt during `opencode skill install` (Ctrl+C or Esc), causing the prompt library to throw, which the `catch` block converts into this warning.

Common situations: User changes their mind mid-prompt; non-interactive CI terminal where prompts cannot render and abort immediately; terminal without TTY support interrupting the prompt library.

Related errors


AI-assisted analysis of upstash/context7@4416fb855b (2026-09-16). Data as JSON: /api/errors/3543dba3cb705147. Report an issue: GitHub.

Appendix: source

Thrown at packages/cli/src/commands/skill.ts:386

        headerPad + pc.dim("Popularity".padEnd(popularityColWidth)) + pc.dim("Trust");

      try {
        selectedSkills = await checkboxWithHover({
          message: `Select skills to install:\n${headerLine}`,
          choices,
          pageSize: 15,
          loop: false,
          theme: {
            style: {
              message: (text: string, status: string) => {
                if (status === "done") return pc.dim(text.split("\n")[0]);
                return pc.bold(text);
              },
            },
          },
        });
      } catch {
        log.warn("Installation cancelled");
        return;
      }
    }
  }

  if (selectedSkills.length === 0) {
    log.warn("No skills selected");
    return;
  }

  const targets = await promptForInstallTargets(options);
  if (!targets) {
    log.warn("Installation cancelled");
    return;
  }

  const targetDirs = getTargetDirs(targets);

View on GitHub (pinned to 4416fb855b)