paperclipai/paperclip · error · Error
Invalid GitHub URL.
Error message
Invalid GitHub URL.
What it means
The GitHub URL passed normalization but its pathname has fewer than two segments, so owner and repo cannot be extracted; a generic guard inside normalizeGithubImportSource for malformed repo URLs.
Solutions
- Check the URL format; use https://github.com/owner/repo or a valid GitHub Enterprise URL.
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at cli/src/commands/client/company.ts:914 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/1f1a56bd9e9232b7.
Report an issue: GitHub.
Appendix: source
Thrown at cli/src/commands/client/company.ts:914
owner: owner!,
repo: repo!,
ref: ref || "main",
path: repoPath.join("/"),
});
}
if (!looksLikeRepoUrl(trimmed)) {
throw new Error("GitHub source must be a GitHub or GitHub Enterprise URL, or owner/repo[/path] shorthand.");
}
if (!ref) {
return trimmed;
}
const url = new URL(trimmed);
const hostname = url.hostname;
const parts = url.pathname.split("/").filter(Boolean);
if (parts.length < 2) {
throw new Error("Invalid GitHub URL.");
}
const owner = parts[0]!;
const repo = parts[1]!;
const existingPath = normalizeGithubImportPath(url.searchParams.get("path"));
const existingCompanyPath = normalizeGithubImportPath(url.searchParams.get("companyPath"));
if (existingCompanyPath) {
return buildGithubImportUrl({ hostname, owner, repo, ref, companyPath: existingCompanyPath });
}
if (existingPath) {
return buildGithubImportUrl({ hostname, owner, repo, ref, path: existingPath });
}
if (parts[2] === "tree") {
return buildGithubImportUrl({ hostname, owner, repo, ref, path: parts.slice(4).join("/") });
}
if (parts[2] === "blob") {
return buildGithubImportUrl({ hostname, owner, repo, ref, companyPath: parts.slice(4).join("/") });
}View on GitHub (pinned to 120ae5428f)