Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 15 additions & 11 deletions client/src/lib/api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,21 +36,25 @@ async function mcp<T>(tool: string, input: Record<string, any> = {}): Promise<T>
export const api = {
// ✅ method syntax (preferred)
async listRepos(): Promise<{ repos: string[] }> {
const data = await mcp<{ repositories: { full_name: string; branches?: string[] }[] }>(
"repo_reader",
{}
);
const repos = (data.repositories ?? []).map(r => r.full_name);
const outer = await mcp<{
success: boolean;
data: { provider: string; user: string; repositories: { full_name: string }[] };
}>("repo_reader", {});

const inner = outer?.data;
const repos = inner?.repositories?.map(r => r.full_name) ?? [];
return { repos };
},

async listBranches(repo: string): Promise<{ branches: string[] }> {
const data = await mcp<{ repositories: { full_name: string; branches?: string[] }[] }>(
"repo_reader",
{}
);
const item = (data.repositories ?? []).find(r => r.full_name === repo);
return { branches: item?.branches ?? [] };
const outer = await mcp<{
success: boolean;
data: { provider: string; user: string; repositories: { full_name: string; branches?: string[] }[] };
}>("repo_reader", {});

const inner = outer?.data;
const match = inner?.repositories?.find(r => r.full_name === repo);
return { branches: match?.branches ?? [] };
},

async createPipeline(payload: any) {
Expand Down
6 changes: 5 additions & 1 deletion client/src/pages/ConnectPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,10 @@ export default function ConnectPage() {
<GlassButton
variant="secondary"
className="bg-white/20 hover:bg-white/30 text-white"
onClick={loadRepos}
onClick={() => {
console.log("[Page] Re-sync clicked");
loadRepos();
}}
>
Re-sync Repos
</GlassButton>
Expand All @@ -61,6 +64,7 @@ export default function ConnectPage() {
<Select
value={repo ?? ""}
onValueChange={(v) => {
console.log("[Page] Repo selected:", v);
setRepo(v);
loadBranches(v);
}}
Expand Down
32 changes: 24 additions & 8 deletions client/src/store/useRepoStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,22 @@ export const useRepoStore = create<RepoState & RepoActions>()(
setBranch: (b) => set({ branch: b }),

async loadRepos() {
console.log("[Store] loadRepos() start");
set({ loading: true, error: undefined });

try {
const { repos } = await api.listRepos(); // requires session cookie from OAuth
const result = await api.listRepos();
console.log("[Store] loadRepos() result:", result);

set({
repos: repos ?? [],
connected: true, // ← we’re authenticated
repos: result?.repos ?? [],
connected: true,
loading: false,
});

console.log("[Store] loadRepos() repos saved:", result?.repos);
} catch (e: any) {
// If unauthorized, backend should return 401 and this sets connected false.
console.error("[Store] loadRepos() error:", e);
set({
error: e?.message ?? String(e),
connected: false,
Expand All @@ -63,18 +69,28 @@ export const useRepoStore = create<RepoState & RepoActions>()(
},

async loadBranches(repo: string) {
console.log("[Store] loadBranches() start for repo:", repo);
set({ loading: true, error: undefined, repo, branch: null, branches: [] });

try {
const { branches } = await api.listBranches(repo);
// Optional: preselect a sensible default branch
const list = branches ?? [];
const preferred = list.find(b => b === "main") ?? list.find(b => b === "master") ?? null;
const result = await api.listBranches(repo);
console.log("[Store] loadBranches() result:", result);

const list = result?.branches ?? [];
const preferred =
list.find(b => b === "main") ??
list.find(b => b === "master") ??
null;

set({
branches: list,
branch: preferred,
loading: false,
});

console.log("[Store] loadBranches() branches saved:", list);
} catch (e: any) {
console.error("[Store] loadBranches() error:", e);
set({
error: e?.message ?? String(e),
loading: false,
Expand Down
Loading