feat: add repository cloning to project setup

Add project can clone repositories into a chosen folder
Command palette now opens the add project flow
Clone flow supports selecting Git identities
This commit is contained in:
Bohdan Triapitsyn
2026-05-07 01:10:17 +03:00
parent fd3557e5c3
commit d764ad6872
13 changed files with 419 additions and 126 deletions
+60 -56
View File
@@ -640,7 +640,6 @@ export const dict: Record<I18nKey, string> = {
'aboutDialog.actions.preparingDiagnostics': 'Przygotowywanie diagnostyki...',
'aboutDialog.diagnosticsDescription': 'Zawiera stan OpenChamber, kondycję OpenCode, katalogi i projekty.',
'aboutDialog.footerNote': 'Stworzone z sercem dla społeczności',
'aboutDialog.tagline': 'Kodowanie z agentami w starannie zaprojektowanej przestrzeni roboczej.',
'aboutDialog.toast.copyFailed': 'Nie udało się skopiować',
'aboutDialog.toast.diagnosticsCopied': 'Diagnostyka skopiowana',
'aboutDialog.toast.diagnosticsNotReady': 'Diagnostyka nie jest jeszcze gotowa. Poczekaj chwilę i spróbuj ponownie.',
@@ -963,6 +962,7 @@ export const dict: Record<I18nKey, string> = {
'commandPalette.input.placeholder': 'Szukaj plików, sesji i poleceń...',
'commandPalette.item.newSession': 'Nowa sesja',
'commandPalette.item.newWorktreeDraft': 'Nowy szkic drzewa pracy',
'commandPalette.item.addProject': 'Dodaj projekt',
'commandPalette.item.openSettings': 'Otwórz ustawienia...',
'commandPalette.item.showContextUsage': 'Pokaż użycie kontekstu',
'commandPalette.item.showSessionSwitcher': 'Pokaż przełącznik sesji',
@@ -1142,67 +1142,71 @@ export const dict: Record<I18nKey, string> = {
'diffView.change.renamed': 'Plik o zmienionej nazwie',
'diffView.change.untracked': 'Nieśledzony plik',
'diffView.image.modified': 'Zmodyfikowany',
'diffView.image.modifiedAlt': 'Modified: {path}',
'diffView.image.modifiedAlt': 'Zmodyfikowano: {path}',
'diffView.image.new': 'Nowy',
'diffView.image.original': 'Original',
'diffView.image.originalAlt': 'Original: {path}',
'diffView.mode.single.description': 'Show one file at a time',
'diffView.mode.single.label': 'Single file',
'diffView.mode.stacked.description': 'Stack all modified files together',
'diffView.mode.stacked.label': 'All files',
'diffView.image.original': 'Oryginał',
'diffView.image.originalAlt': 'Oryginał: {path}',
'diffView.mode.single.description': 'Pokazuj jeden plik naraz',
'diffView.mode.single.label': 'Pojedynczy plik',
'diffView.mode.stacked.description': 'Pokaż wszystkie zmodyfikowane pliki razem',
'diffView.mode.stacked.label': 'Wszystkie pliki',
'diffView.section.files': 'Pliki',
'diffView.selector.selectFile': 'Select file',
'diffView.selector.viewMode': 'View mode',
'diffView.state.cleanWorkingTree': 'Working tree clean, no changes to display',
'diffView.state.failedToLoadDiff': 'Failed to load diff',
'diffView.state.loadingChanges': 'Loading changes...',
'diffView.state.loadingDiff': 'Loading diff...',
'diffView.state.loadingRepositoryStatus': 'Loading repository status...',
'diffView.state.notGitRepository': 'Not a git repository. Use the Git tab to initialize or change directories.',
'diffView.state.selectSessionDirectory': 'Select a session directory to view diffs',
'diffView.summary.changedFilesPlural': '{count} files changed',
'diffView.summary.changedFilesSingle': '{count} file changed',
'directoryExplorerDialog.actions.addProject': 'Add project',
'directoryExplorerDialog.actions.adding': 'Adding...',
'directoryExplorerDialog.actions.alreadyAdded': 'Already added',
'directoryExplorerDialog.actions.cancel': 'Anuluj',
'directoryExplorerDialog.actions.createAndAdd': 'Create & add',
'directoryExplorerDialog.actions.openInFinder': 'Open in Finder',
'directoryExplorerDialog.actions.openingFinder': 'Opening...',
'directoryExplorerDialog.browse.addedBadge': 'Added',
'directoryExplorerDialog.browse.directories': 'Directories',
'directoryExplorerDialog.browse.empty': 'No matching directories.',
'directoryExplorerDialog.browse.loading': 'Loading directories...',
'directoryExplorerDialog.browse.parentDirectory': 'Parent directory',
'directoryExplorerDialog.description': 'Choose a folder to add as a project.',
'diffView.selector.selectFile': 'Wybierz plik',
'diffView.selector.viewMode': 'Tryb widoku',
'diffView.state.cleanWorkingTree': 'Drzewo robocze jest czyste, brak zmian do wyświetlenia',
'diffView.state.failedToLoadDiff': 'Nie udało się wczytać diffu',
'diffView.state.loadingChanges': 'Ładowanie zmian...',
'diffView.state.loadingDiff': 'Ładowanie diffu...',
'diffView.state.loadingRepositoryStatus': 'Ładowanie stanu repozytorium...',
'diffView.state.notGitRepository': 'To nie jest repozytorium Git. Użyj karty Git, aby zainicjować lub zmienić katalog.',
'diffView.state.selectSessionDirectory': 'Wybierz katalog sesji, aby zobaczyć diffy',
'diffView.summary.changedFilesPlural': 'Zmieniono {count} plików',
'diffView.summary.changedFilesSingle': 'Zmieniono {count} plik',
'directoryExplorerDialog.actions.addProject': 'Dodaj projekt',
'directoryExplorerDialog.actions.addLocalProject': 'Dodaj projekt lokalny',
'directoryExplorerDialog.actions.adding': 'Dodawanie...',
'directoryExplorerDialog.actions.alreadyAdded': 'Już dodano',
'directoryExplorerDialog.actions.cloneAndAdd': 'Sklonuj i dodaj',
'directoryExplorerDialog.actions.cloneRepository': 'Sklonuj repozytorium',
'directoryExplorerDialog.actions.cloning': 'Klonowanie...',
'directoryExplorerDialog.actions.createAndAdd': 'Utwórz i dodaj',
'directoryExplorerDialog.actions.openInFinder': 'Otwórz w Finderze',
'directoryExplorerDialog.actions.openingFinder': 'Otwieranie...',
'directoryExplorerDialog.browse.addedBadge': 'Dodano',
'directoryExplorerDialog.browse.directories': 'Katalogi',
'directoryExplorerDialog.browse.empty': 'Brak pasujących katalogów.',
'directoryExplorerDialog.browse.loading': 'Ładowanie katalogów...',
'directoryExplorerDialog.browse.parentDirectory': 'Katalog nadrzędny',
'directoryExplorerDialog.description': 'Wybierz folder, który chcesz dodać jako projekt.',
'directoryExplorerDialog.clone.remoteUrlPlaceholder': 'URL repozytorium (HTTPS lub SSH)',
'directoryExplorerDialog.footer.add': 'Dodaj',
'directoryExplorerDialog.footer.close': 'Zamknij',
'directoryExplorerDialog.footer.navigate': 'Navigate',
'directoryExplorerDialog.footer.navigate': 'Nawiguj',
'directoryExplorerDialog.footer.select': 'Wybierz',
'directoryExplorerDialog.pathInput.placeholder': 'Enter path or select from tree...',
'directoryExplorerDialog.pathInput.placeholder': 'Wpisz ścieżkę lub wybierz z drzewa...',
'directoryExplorerDialog.shortcut.enter': 'Enter',
'directoryExplorerDialog.title': 'Add project directory',
'directoryExplorerDialog.toast.desktopCouldNotGrantAccess': 'Desktop could not grant file access.',
'directoryExplorerDialog.toast.desktopDeniedAccess': 'Desktop denied directory access.',
'directoryExplorerDialog.toast.failedToAddProject': 'Failed to add project',
'directoryExplorerDialog.toast.failedToOpenDirectory': 'Failed to open directory',
'directoryExplorerDialog.toast.failedToSelectDirectory': 'Failed to select directory',
'directoryExplorerDialog.toast.selectValidDirectoryPath': 'Please select a valid directory path.',
'directoryExplorerDialog.toast.unableToAccessDirectory': 'Unable to access directory',
'directoryExplorerDialog.toast.unknownError': 'Unknown error occurred.',
'directoryExplorerDialog.toggle.showHidden': 'Show hidden',
'directoryExplorerDialog.title': 'Dodaj katalog projektu',
'directoryExplorerDialog.toast.desktopCouldNotGrantAccess': 'Aplikacja desktopowa nie mogła przyznać dostępu do pliku.',
'directoryExplorerDialog.toast.desktopDeniedAccess': 'Aplikacja desktopowa odmówiła dostępu do katalogu.',
'directoryExplorerDialog.toast.failedToAddProject': 'Nie udało się dodać projektu',
'directoryExplorerDialog.toast.cloneUrlRequired': 'Wpisz URL repozytorium przed klonowaniem.',
'directoryExplorerDialog.toast.failedToOpenDirectory': 'Nie udało się otworzyć katalogu',
'directoryExplorerDialog.toast.failedToSelectDirectory': 'Nie udało się wybrać katalogu',
'directoryExplorerDialog.toast.selectValidDirectoryPath': 'Wybierz prawidłową ścieżkę katalogu.',
'directoryExplorerDialog.toast.unableToAccessDirectory': 'Nie można uzyskać dostępu do katalogu',
'directoryExplorerDialog.toast.unknownError': 'Wystąpił nieznany błąd.',
'directoryExplorerDialog.toggle.showHidden': 'Pokaż ukryte',
'directoryTree.actions.cancel': 'Anuluj',
'directoryTree.actions.createDirectory': 'Create directory',
'directoryTree.actions.createNewDirectory': 'Create new directory',
'directoryTree.actions.pinDirectory': 'Pin directory',
'directoryTree.actions.selectWorkingDirectoryAria': 'Select working directory',
'directoryTree.actions.unpinDirectory': 'Unpin directory',
'directoryTree.actions.createDirectory': 'Utwórz katalog',
'directoryTree.actions.createNewDirectory': 'Utwórz nowy katalog',
'directoryTree.actions.pinDirectory': 'Przypnij katalog',
'directoryTree.actions.selectWorkingDirectoryAria': 'Wybierz katalog roboczy',
'directoryTree.actions.unpinDirectory': 'Odepnij katalog',
'directoryTree.field.newDirectoryPlaceholder': 'new_directory',
'directoryTree.section.browse': 'Browse',
'directoryTree.section.pinned': 'Pinned',
'directoryTree.state.loading': 'Loading...',
'directoryTree.state.locatingHomeDirectory': 'Locating home directory...',
'directoryTree.state.noDirectoriesFound': 'No directories found',
'directoryTree.section.browse': 'Przeglądaj',
'directoryTree.section.pinned': 'Przypięte',
'directoryTree.state.loading': 'Ładowanie...',
'directoryTree.state.locatingHomeDirectory': 'Wyszukiwanie katalogu domowego...',
'directoryTree.state.noDirectoriesFound': 'Nie znaleziono katalogów',
'filesView.dialog.cancel': 'Anuluj',
'filesView.dialog.confirm': 'Potwierdź',
'filesView.dialog.createFile.description': 'Utwórz nowy plik w {path}',
@@ -1319,7 +1323,7 @@ export const dict: Record<I18nKey, string> = {
'gitView.commit.addGitmoji': 'Dodaj gitmoji',
'gitView.commit.aiHighlights.insertAria': 'Wstaw',
'gitView.commit.aiHighlights.insertTooltip': 'Wstaw',
'gitView.commit.aiHighlights.title': 'Tytuł',
'gitView.commit.aiHighlights.title': 'Najważniejsze',
'gitView.commit.commit': 'Zatwierdź',
'gitView.commit.commitAria': 'Zatwierdź zmiany',
'gitView.commit.committing': 'Zatwierdzanie...',