You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Clone from URL and publish a local repo in add-project #459
Synara 0.6.7 added GitHub project import to the create-project dialog: paste a URL or owner/repo, clone through the user's gh access, validate the destination name, show progress, reuse a compatible checkout, cancel, and recover if interrupted.
T3 Code's command palette Add Project clones from GitHub / GitLab / Bitbucket / Azure DevOps or any git URL, and Publish Repository creates a hosted remote for a local repo that has no origin (docs). If the local repo has no commits yet, publish wires the remote and does not push.
Solenta today
addProject (electron/services.js) requires an existing local directory that is already a git work tree. createProject is mkdir + git init in a chosen parent. There is no clone-from-URL path and no publish-this-folder-to-GitHub path.
Why it matters
"I have a GitHub URL and I want a Solenta project" is the first-run action for anyone who does not already live in a local checkout. Right now they leave the app, clone in a terminal, come back, and pick the folder. Synara and T3 both closed that loop. Publish is the inverse: a local experiment with no remote should not require a trip to github.com/new.
Scope suggestion
One extra field on add-project: URL or owner/repo. Clone with gh repo clone when GitHub, plain git clone otherwise. Destination defaults to a sibling of the last project. Publish is a later button on a project with no origin: gh repo create + set remote + optional first push. Pair with #193 / Bitbucket+ADO so the clone source is not GitHub-only forever.
Verified T3's implementation against a fresh clone of pingdotgg/t3code @ beab6886 — worth copying the shape, it is smaller than it looks:
Two steps, no dialog.AddProjectCloneFlow is {step: "repository"} -> {step: "confirm"} (packages/client-runtime/src/operations/projects.ts:43). Step 1 takes owner/repo (per-provider hint: group/project, workspace/repository, project/repository) or a raw URL. Step 2 is the same path input as manual add-project, with the repo folder pinned onto the browsed path so the destination reads <parent>/<repo> live — see #609, which is the prerequisite.
Lookup before clone. For a known provider it resolves the repo first: gh repo view <repo> --json nameWithOwner,url,sshUrl (apps/server/src/sourceControl/GitHubCli.ts:418), then defaults the remote to sshUrl (selectRemoteUrl, protocol auto -> ssh). This catches a typo'd repo before any clone starts and gives the folder name from the canonical nameWithOwner, not from what the user typed. For a pasted URL there is no lookup — the folder name is parsed off the URL (getCloneDirectoryName, handles git@host:o/r.git, ssh://host:22/o/r, query, fragment, trailing slash, and returns "" for a host-only URL so the destination falls back to the browsed folder).
Clone is plain git, not gh repo clone.git clone <remoteUrl> <dirname> run with cwd = the parent dir, 120 s timeout, 256 KB output cap (SourceControlRepositoryService.ts:206). Destination guard: must not exist, or exist and be empty; parent is mkdir -p'd. On success the resulting cwd goes through the ordinary add-project path — cloning is a pre-step, the project record is still just a directory.
Publish is the mirror.gh repo create <name> --private|--public -> ensureRemote(origin) -> push current branch. The nice detail: it checks git rev-parse --verify HEAD first, and a repo with no commits returns status: "remote_added" (remote created and wired, nothing pushed) instead of failing with git's opaque src refspec HEAD does not match any (SourceControlRepositoryService.ts:221-275).
Gating. The source list is built from live provider readiness, not config — unavailable providers render with their install hint, unauthenticated ones with their login hint, ready ones sort first. That is #608.
Gap pass #1532 checked this against main @24d3c36b (v0.24.0). Cloning from a URL shipped in 8d6932b (#1506): https or ssh git clone with progress, cancel and cleanup on failure (electron/projectClone.js:93-151), plus a clone mode in the add-project dialog.
Still missing, so keeping this open:
Publish: no gh repo create, remote setup or first push.
owner/repo shorthand is rejected (projectClone.js:40-51).
2026-10-09 board cleanup (#1532): clone from URL shipped in 0.24.0 (electron/projectClone.js). This issue now covers only the remaining half, Publish repository (create the GitHub repo from a local folder and push). That should use the GitHub API transport from #1528 when it lands.
Clone half is in PR #1691: owner/repo shorthand, gh repo clone when gh is signed in (git over https otherwise), an existing checkout of the same repo is added instead of refused, and the destination defaults next to the selected project. Publish already shipped as #456 in #1684. Not included: resuming an interrupted clone.
Activity
currentbits commentedon Aug 20, 2026
Verified T3's implementation against a fresh clone of
pingdotgg/t3code@beab6886— worth copying the shape, it is smaller than it looks:Two steps, no dialog.
AddProjectCloneFlowis{step: "repository"} -> {step: "confirm"}(packages/client-runtime/src/operations/projects.ts:43). Step 1 takesowner/repo(per-provider hint:group/project,workspace/repository,project/repository) or a raw URL. Step 2 is the same path input as manual add-project, with the repo folder pinned onto the browsed path so the destination reads<parent>/<repo>live — see #609, which is the prerequisite.Lookup before clone. For a known provider it resolves the repo first:
gh repo view <repo> --json nameWithOwner,url,sshUrl(apps/server/src/sourceControl/GitHubCli.ts:418), then defaults the remote to sshUrl (selectRemoteUrl, protocolauto-> ssh). This catches a typo'd repo before any clone starts and gives the folder name from the canonicalnameWithOwner, not from what the user typed. For a pasted URL there is no lookup — the folder name is parsed off the URL (getCloneDirectoryName, handlesgit@host:o/r.git,ssh://host:22/o/r, query, fragment, trailing slash, and returns "" for a host-only URL so the destination falls back to the browsed folder).Clone is plain git, not
gh repo clone.git clone <remoteUrl> <dirname>run with cwd = the parent dir, 120 s timeout, 256 KB output cap (SourceControlRepositoryService.ts:206). Destination guard: must not exist, or exist and be empty; parent ismkdir -p'd. On success the resulting cwd goes through the ordinary add-project path — cloning is a pre-step, the project record is still just a directory.Publish is the mirror.
gh repo create <name> --private|--public->ensureRemote(origin)-> push current branch. The nice detail: it checksgit rev-parse --verify HEADfirst, and a repo with no commits returnsstatus: "remote_added"(remote created and wired, nothing pushed) instead of failing with git's opaquesrc refspec HEAD does not match any(SourceControlRepositoryService.ts:221-275).Gating. The source list is built from live provider readiness, not config — unavailable providers render with their install hint, unauthenticated ones with their login hint, ready ones sort first. That is #608.
currentbits commentedon Oct 9, 2026
Gap pass #1532 checked this against main @24d3c36b (v0.24.0). Cloning from a URL shipped in 8d6932b (#1506): https or ssh
git clonewith progress, cancel and cleanup on failure (electron/projectClone.js:93-151), plus a clone mode in the add-project dialog.Still missing, so keeping this open:
gh repo create, remote setup or first push.owner/reposhorthand is rejected (projectClone.js:40-51).currentbits commentedon Oct 9, 2026
2026-10-09 board cleanup (#1532): clone from URL shipped in 0.24.0 (
electron/projectClone.js). This issue now covers only the remaining half, Publish repository (create the GitHub repo from a local folder and push). That should use the GitHub API transport from #1528 when it lands.currentbits commentedon Oct 19, 2026
Clone half is in PR #1691:
owner/reposhorthand,gh repo clonewhen gh is signed in (git over https otherwise), an existing checkout of the same repo is added instead of refused, and the destination defaults next to the selected project. Publish already shipped as #456 in #1684. Not included: resuming an interrupted clone.Clone GitHub owner/repo with the user's gh access, and reuse an exist…
currentbits commentedon Oct 19, 2026
Landed from Solenta thread "Clone from URL and publish a local repo in add-project" (PR #1691). Closed on merge.