diff --git a/AgentCompany-New/src/main/app/ipc-handlers.ts b/AgentCompany-New/src/main/app/ipc-handlers.ts index 2d56d588..7f2f9a6e 100644 --- a/AgentCompany-New/src/main/app/ipc-handlers.ts +++ b/AgentCompany-New/src/main/app/ipc-handlers.ts @@ -1,4 +1,4 @@ -import { ipcMain, shell, type BrowserWindow } from "electron"; +import { dialog, ipcMain, shell, type BrowserWindow } from "electron"; import type { DatabaseConnection } from "../database/connection"; import { IPC_CHANNELS } from "../../shared/ipc"; import { fail, ok, type DesktopResult } from "../../shared/result"; @@ -196,6 +196,16 @@ export function registerIpcHandlers(deps: IpcDeps): void { } }); + ipcMain.handle(IPC_CHANNELS.pickDirectory, async () => { + try { + const result = await dialog.showOpenDialog(deps.mainWindow, { properties: ["openDirectory", "createDirectory"] }); + if (result.canceled || result.filePaths.length === 0) return ok(null); + return ok(result.filePaths[0]); + } catch (error) { + return fail("pick_directory_failed", error instanceof Error ? error.message : String(error)); + } + }); + ipcMain.handle(IPC_CHANNELS.createMigrationReport, (_event, input) => mutate(() => migrations.createReport(input))); ipcMain.handle(IPC_CHANNELS.createRollbackSnapshot, (_event, input) => mutate(() => rollback.createSnapshot(input))); ipcMain.handle(IPC_CHANNELS.setRollbackSnapshotActive, (_event, input) => mutate(() => rollback.setActive(input))); diff --git a/AgentCompany-New/src/preload/index.ts b/AgentCompany-New/src/preload/index.ts index f27580d1..3c4939c7 100644 --- a/AgentCompany-New/src/preload/index.ts +++ b/AgentCompany-New/src/preload/index.ts @@ -43,6 +43,7 @@ const api: DesktopApi = { createScheduledPost: (input) => invoke(IPC_CHANNELS.createScheduledPost, input), setScheduledPostState: (input) => invoke(IPC_CHANNELS.setScheduledPostState, input), importFile: (input) => invoke(IPC_CHANNELS.importFile, input), + pickDirectory: () => invoke(IPC_CHANNELS.pickDirectory), setFilePinned: (input) => invoke(IPC_CHANNELS.setFilePinned, input), createMigrationReport: (input) => invoke(IPC_CHANNELS.createMigrationReport, input), createRollbackSnapshot: (input) => invoke(IPC_CHANNELS.createRollbackSnapshot, input), diff --git a/AgentCompany-New/src/renderer/src/app/Onboarding.tsx b/AgentCompany-New/src/renderer/src/app/Onboarding.tsx index 5ce948e1..d936981e 100644 --- a/AgentCompany-New/src/renderer/src/app/Onboarding.tsx +++ b/AgentCompany-New/src/renderer/src/app/Onboarding.tsx @@ -312,6 +312,11 @@ function authBadge(authType: string): string { } function CompanyStep({ draft, onChange, onBack, onNext }: StepProps) { + const chooseWorkspace = () => { + void window.agentCompany.pickDirectory().then((result) => { + if (result.ok && result.data) onChange({ workspacePath: result.data }); + }); + }; return (