- Add clone_mode and branch fields to tool_instances - Add ssh_key_id to git_repositories for per-repo SSH key assignment - Implement host-side git cloning with branch selection (default: main) - Mount SSH keys into containers for git operations in clone mode - Add dirty state check on clone-mode instance deletion with confirmation - Update SessionsPage with mount/clone selector, branch input, SSH key display - Add SSH key selector to repository creation form - Add dirty delete confirmation modal with changed files list - Update API schemas and endpoints for new fields - Sync delta specs to main specs (git-repo, tool-instances, repo-clone-mode) - Archive completed OpenSpec change: repo-clone-mode-with-ssh - Document git requirement for custom tool types Quality gates: Frontend typecheck and build passed OpenSpec: repo-clone-mode-with-ssh archived with all tasks complete
2.1 KiB
Context
The current repository creation flow already supports cloning remote repositories via remote_url and can normalize pasted browser URLs. However, the UI asks for a full URL, which is awkward for the fixed provider git.commumedia.org. The requested behavior is to enter owner and repo, check whether the repository exists, and clone only if it does.
Goals / Non-Goals
Goals:
- Accept SSH-only
ownerandrepoinputs for cloning fromgit.commumedia.org - Verify repository existence before clone
- Preserve full URL paste as a fallback path
- Preserve blank repository creation
- Reuse the existing repository create endpoint and shared dialog
Non-Goals:
- Supporting multiple git providers
- Adding a remote repository discovery API
- Supporting HTTPS clone flow for the new structured path
- Changing repository storage or clone behavior beyond preflight validation
Decisions
1. Provider assumption
- Hardcode
git.commumedia.orgfor the structured clone path - Build SSH URLs as
git@git.commumedia.org:{owner}/{repo}.git
2. Existence check
- Use
git ls-remoteon the constructed SSH URL before cloning - If the command fails, surface a repository-not-found/inaccessible error and do not clone
3. UI structure
- Keep the shared repository creation dialog as the single entry point
- In clone mode, collect
ownerandrepoinstead of asking for a full URL - Keep an advanced paste-URL fallback for existing behavior and browser URL parsing
- Keep blank repository creation available in the same dialog
4. Backend behavior
- Reuse
POST /projects/{project_id}/repositories - Add preflight logic before the existing
git clone --mirror - Leave the database schema unchanged
Risks / Trade-offs
[Risk] SSH auth may still fail even if the repo exists → Mitigation: preflight error should be explicit and user-facing.
[Risk] Command availability → Mitigation: reuse the same git dependency already required for cloning.
[Risk] UI complexity → Mitigation: keep the dialog shared and minimal, with fallback URL paste.