docs(FN-007): add repository connection documentation

- Update development.md with Repository Connections section
- Document SSH key generation and provider adapter usage
This commit is contained in:
2026-05-16 13:43:00 +02:00
parent ed642dcc66
commit e071e3418d
+54 -1
View File
@@ -217,7 +217,7 @@ and local CLI operations evolve independently:
Security rules for the package: Security rules for the package:
- Credential models store **only** `encrypted_payload` — no plaintext `token` or `private_key` fields. - Credential models store **only** `encrypted_payload` — no plaintext `token` or `private_key` fields.
- SSH private keys are encrypted before storage; the field uses `repr=False`. - SSH private keys are encrypted before storage; the field uses `repr=False`.
- Real encryption of the payload is deferred to FN-009; the current placeholder is base64-only. - SSH private keys are encrypted with Fernet before storage.
## Tool Spawn Workflow ## Tool Spawn Workflow
@@ -324,6 +324,59 @@ When a tool instance is spawned:
Before spawning, the system validates that all required secrets exist. If any are missing, the spawn fails with an error message listing the missing secrets. Before spawning, the system validates that all required secrets exist. If any are missing, the spawn fails with an error message listing the missing secrets.
## Repository Connections
### Overview
The platform supports connecting Git repositories to projects with provider-independent authentication.
### Architecture
1. **Repository** (`apps/api/app/models/repository.py`):
- Stores repository metadata (name, git_url, provider_type, default_branch)
- Belongs to a project
2. **Repository Connection** (`apps/api/app/models/repository_connection.py`):
- Links a repository to a Git provider with credentials
- Tracks connection status (pending, connected, error, disconnected)
- Supports SSH key authentication
3. **Credential Storage** (`apps/api/app/git/credential_storage.py`):
- Database-backed storage for encrypted credentials
- Uses Fernet encryption for payload
- Supports access tokens and SSH keys
4. **Provider Adapters** (`apps/api/app/git/providers/`):
- GitHubAdapter and GitLabAdapter with URL parsing
- Extensible for other providers (Gitea, Forgejo)
5. **SSH Key Lifecycle** (`apps/api/app/git/ssh_key.py`):
- Ed25519 key pair generation
- Fernet-encrypted private key storage
- Public key available for deploy key registration
### API Endpoints
- `POST /projects/{id}/repositories` — Add repository
- `GET /projects/{id}/repositories` — List repositories
- `DELETE /projects/{id}/repositories/{id}` — Remove repository
- `POST /projects/{id}/repository-connections` — Create connection
- `GET /projects/{id}/repository-connections` — List connections
- `DELETE /projects/{id}/repository-connections/{id}` — Remove connection
- `POST /projects/{id}/repository-connections/{id}/ssh-key` — Generate SSH key
- `POST /projects/{id}/repository-connections/{id}/validate` — Validate connection
### Frontend
- `/repositories` — Repository list and creation
- `/projects/{id}/repositories/{id}` — Repository detail with connections
### Git Operations
Local Git operations are supported via subprocess:
- Clone, fetch, push with credential-aware subprocess
- Working tree status (branch, clean, untracked, modified, staged, deleted)
## OpenCode Tool ## OpenCode Tool
### Overview ### Overview