+
+
+ {#if showAddRepository}
+
+ {/if}
+
+ {#if requestError}
+ {requestError}
+ {/if}
+
+ {#if data.repositoriesError}
+ {data.repositoriesError}
+ {:else if !data.repositories}
+ Loading Repositories…
+ {:else if data.repositories.items.length === 0}
+ No Repositories are registered.
+ {:else}
+
+
+
+
+ | Repository |
+ Source |
+ Default ref |
+ Status |
+ Access |
+
+
+
+ {#each data.repositories.items as repository (repository.repository_id)}
+
+
+
+ {repository.display_name}
+
+ {repository.repository_id}
+ |
+
+ {repository.source.kind === 'local_path' ? 'Local' : 'Remote Git'}
+ {repository.source.uri}
+ |
+ {repository.default_selector ?? '—'} |
+ {repository.observed.status} |
+
+ {#if repository.source.kind === 'remote_git'}
+ Configure access
+ {:else}
+ Not required
+ {/if}
+ |
+
+ {/each}
+
+
+
+ {/if}
+
diff --git a/web/workspace/src/routes/w/[workspaceId]/settings/repositories/+page.ts b/web/workspace/src/routes/w/[workspaceId]/settings/repositories/+page.ts
new file mode 100644
index 00000000..807b4224
--- /dev/null
+++ b/web/workspace/src/routes/w/[workspaceId]/settings/repositories/+page.ts
@@ -0,0 +1,38 @@
+import { loadJson, workspaceApiPath } from "$lib/workspace/api/http";
+import type { PageLoad } from "./$types";
+
+export type RepositorySource = {
+ kind: "local_path" | "remote_git";
+ uri: string;
+};
+
+export type RepositorySummary = {
+ repository_id: string;
+ display_name: string;
+ kind: string;
+ provider: string;
+ source: RepositorySource;
+ default_selector?: string | null;
+ observed: {
+ status: string;
+ observed_at?: string | null;
+ };
+ diagnostics: Array<{ code: string; message: string }>;
+};
+
+type RepositoryListResponse = {
+ items: RepositorySummary[];
+ diagnostics: Array<{ code: string; message: string }>;
+};
+
+export const load: PageLoad = async ({ fetch, params }) => {
+ const repositories = await loadJson