Skip to content

Commit 2bd8563

Browse files
authored
feat/repo selection (#83)
1 parent 9dc2071 commit 2bd8563

File tree

21 files changed

+1604
-486
lines changed

21 files changed

+1604
-486
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@
9090
"react-hook-form": "^7.64.0",
9191
"react-hotkeys-hook": "^4.4.4",
9292
"react-markdown": "^10.1.0",
93+
"sonner": "^2.0.7",
9394
"uuid": "^9.0.1",
9495
"zod": "^4.1.12",
9596
"zustand": "^4.5.0"

pnpm-lock.yaml

Lines changed: 18 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/main/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
} from "electron";
1313
import { registerAgentIpc, type TaskController } from "./services/agent.js";
1414
import { registerFsIpc } from "./services/fs.js";
15+
import { registerGitIpc } from "./services/git.js";
1516
import { registerOAuthHandlers } from "./services/oauth.js";
1617
import { registerOsIpc } from "./services/os.js";
1718
import { registerPosthogIpc } from "./services/posthog.js";
@@ -195,6 +196,7 @@ ipcMain.handle("app:get-version", () => app.getVersion());
195196
registerPosthogIpc();
196197
registerOAuthHandlers();
197198
registerOsIpc(() => mainWindow);
199+
registerGitIpc(() => mainWindow);
198200
registerAgentIpc(taskControllers, () => mainWindow);
199201
registerFsIpc();
200202
registerRecordingIpc();

src/main/preload.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,48 @@ contextBridge.exposeInMainWorld("electronAPI", {
7171
branch?: string;
7272
remote?: string;
7373
} | null> => ipcRenderer.invoke("detect-repo", directoryPath),
74+
validateRepositoryMatch: (
75+
path: string,
76+
organization: string,
77+
repository: string,
78+
): Promise<{
79+
valid: boolean;
80+
detected?: { organization: string; repository: string } | null;
81+
error?: string;
82+
}> =>
83+
ipcRenderer.invoke(
84+
"validate-repository-match",
85+
path,
86+
organization,
87+
repository,
88+
),
89+
checkSSHAccess: (): Promise<{
90+
available: boolean;
91+
error?: string;
92+
}> => ipcRenderer.invoke("check-ssh-access"),
93+
cloneRepository: (
94+
repoUrl: string,
95+
targetPath: string,
96+
): Promise<{ cloneId: string }> =>
97+
ipcRenderer.invoke("clone-repository", repoUrl, targetPath),
98+
onCloneProgress: (
99+
cloneId: string,
100+
listener: (event: {
101+
status: "cloning" | "complete" | "error";
102+
message: string;
103+
}) => void,
104+
): (() => void) => {
105+
const channel = `clone-progress:${cloneId}`;
106+
const wrapped = (
107+
_event: IpcRendererEvent,
108+
payload: {
109+
status: "cloning" | "complete" | "error";
110+
message: string;
111+
},
112+
) => listener(payload);
113+
ipcRenderer.on(channel, wrapped);
114+
return () => ipcRenderer.removeListener(channel, wrapped);
115+
},
74116
showMessageBox: (options: MessageBoxOptions): Promise<{ response: number }> =>
75117
ipcRenderer.invoke("show-message-box", options),
76118
openExternal: (url: string): Promise<void> =>

0 commit comments

Comments
 (0)