paperclipai/paperclip · error · Error

Applying a company import from a non-interactive terminal…

Error message

Applying a company import from a non-interactive terminal requires --yes. Use --dry-run first to inspect the preview.

What it means

resolveCompanyImportApplyConfirmationMode needs a TTY to prompt for confirmation before applying an import; in a non-interactive terminal without --yes it aborts rather than apply unconfirmed.

Solutions

  1. Run interactively to confirm, or pass --yes (after a --dry-run preview) in non-interactive environments.
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at cli/src/commands/client/company.ts:814 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of paperclipai/paperclip@120ae5428f (2026-08-18). Data as JSON: /api/errors/ca7ad461dbf8a769. Report an issue: GitHub.

Appendix: source

Thrown at cli/src/commands/client/company.ts:814

  url.hash = "";
  return url.toString();
}

export function resolveCompanyImportApplyConfirmationMode(input: {
  yes?: boolean;
  interactive: boolean;
  json: boolean;
}): "skip" | "prompt" {
  if (input.yes) {
    return "skip";
  }
  if (input.json) {
    throw new Error(
      "Applying a company import with --json requires --yes. Use --dry-run first to inspect the preview.",
    );
  }
  if (!input.interactive) {
    throw new Error(
      "Applying a company import from a non-interactive terminal requires --yes. Use --dry-run first to inspect the preview.",
    );
  }
  return "prompt";
}

export function isHttpUrl(input: string): boolean {
  return /^https?:\/\//i.test(input.trim());
}

export function looksLikeRepoUrl(input: string): boolean {
  try {
    const url = new URL(input.trim());
    if (url.protocol !== "https:") return false;
    const segments = url.pathname.split("/").filter(Boolean);
    return segments.length >= 2;
  } catch {
    return false;

View on GitHub (pinned to 120ae5428f)