Add a keyboard-driven project setup flow (#2097)

* feat(projects): add keyboard-driven project setup

* test(app): update add project loading assertion

* fix(projects): harden GitHub project setup
This commit is contained in:
Mohamed Boudra
2026-07-15 21:16:10 +02:00
committed by GitHub
parent 90e0a0e353
commit dfe3330ef8
52 changed files with 3851 additions and 1023 deletions
+35
View File
@@ -55,7 +55,9 @@ import type {
PaseoWorktreeArchiveResponse,
ProjectIconResponse,
ProjectAddResponse,
ProjectCreateDirectoryResponse,
OpenProjectResponseMessage,
WorkspaceGithubSearchRepositoriesResponse,
WorkspaceGithubCloneProtocol,
WorkspaceGithubCloneResponse,
ArchiveWorkspaceResponseMessage,
@@ -763,6 +765,9 @@ export interface RenameTerminalInput {
}
type OpenProjectPayload = OpenProjectResponseMessage["payload"];
type ProjectAddPayload = ProjectAddResponse["payload"];
export type ProjectCreateDirectoryPayload = ProjectCreateDirectoryResponse["payload"];
export type WorkspaceGithubSearchRepositoriesPayload =
WorkspaceGithubSearchRepositoriesResponse["payload"];
type WorkspaceGithubClonePayload = WorkspaceGithubCloneResponse["payload"];
type ArchiveWorkspacePayload = ArchiveWorkspaceResponseMessage["payload"];
type WorkspaceSetupStatusPayload = WorkspaceSetupStatusResponseMessage["payload"];
@@ -1994,6 +1999,36 @@ export class DaemonClient {
});
}
async createProjectDirectory(
input: { parentPath: string; name: string },
requestId?: string,
): Promise<ProjectCreateDirectoryPayload> {
return this.sendNamespacedCorrelatedSessionRequest<"project.create_directory.response">({
requestId,
message: {
type: "project.create_directory.request",
parentPath: input.parentPath,
name: input.name,
},
});
}
async searchGithubRepositories(
input: { query: string; limit?: number },
requestId?: string,
): Promise<WorkspaceGithubSearchRepositoriesPayload> {
return this.sendNamespacedCorrelatedSessionRequest<"workspace.github.search_repositories.response">(
{
requestId,
message: {
type: "workspace.github.search_repositories.request",
query: input.query,
limit: input.limit,
},
},
);
}
async cloneGithubWorkspace(
input: { repo: string; targetDirectory: string; cloneProtocol?: WorkspaceGithubCloneProtocol },
requestId?: string,