Skip to content

Commit f842b0f

Browse files
authored
feat: task archiving (#1074)
1 parent 671d523 commit f842b0f

37 files changed

Lines changed: 2372 additions & 132 deletions

apps/twig/.storybook/mocks/electron-trpc.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@
22
sendMessage: () => Promise.resolve(),
33
onMessage: () => () => {},
44
};
5+
6+
export function ipcLink() {
7+
return () => {};
8+
}

apps/twig/src/main/di/container.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import "reflect-metadata";
22
import { Container } from "inversify";
33
import { AgentService } from "../services/agent/service.js";
44
import { AppLifecycleService } from "../services/app-lifecycle/service.js";
5+
import { ArchiveService } from "../services/archive/service.js";
56
import { CloudTaskService } from "../services/cloud-task/service.js";
67
import { ConnectivityService } from "../services/connectivity/service.js";
78
import { ContextMenuService } from "../services/context-menu/service.js";
89
import { DeepLinkService } from "../services/deep-link/service.js";
9-
1010
import { ExternalAppsService } from "../services/external-apps/service.js";
1111
import { FileWatcherService } from "../services/file-watcher/service.js";
1212
import { FocusService } from "../services/focus/service.js";
@@ -19,20 +19,23 @@ import { NotificationService } from "../services/notification/service.js";
1919
import { OAuthService } from "../services/oauth/service.js";
2020
import { PosthogPluginService } from "../services/posthog-plugin/service.js";
2121
import { ProcessTrackingService } from "../services/process-tracking/service.js";
22+
import { settingsStore } from "../services/settingsStore.js";
2223
import { ShellService } from "../services/shell/service.js";
2324
import { SleepService } from "../services/sleep/service.js";
2425
import { TaskLinkService } from "../services/task-link/service.js";
2526
import { UIService } from "../services/ui/service.js";
2627
import { UpdatesService } from "../services/updates/service.js";
2728
import { WatcherRegistryService } from "../services/watcher-registry/service.js";
2829
import { WorkspaceService } from "../services/workspace/service.js";
30+
import { archiveStore, foldersStore } from "../utils/store.js";
2931
import { MAIN_TOKENS } from "./tokens.js";
3032

3133
export const container = new Container({
3234
defaultScope: "Singleton",
3335
});
3436

3537
container.bind(MAIN_TOKENS.AgentService).to(AgentService);
38+
container.bind(MAIN_TOKENS.ArchiveService).to(ArchiveService);
3639
container.bind(MAIN_TOKENS.AppLifecycleService).to(AppLifecycleService);
3740
container.bind(MAIN_TOKENS.CloudTaskService).to(CloudTaskService);
3841
container.bind(MAIN_TOKENS.ConnectivityService).to(ConnectivityService);
@@ -58,3 +61,7 @@ container.bind(MAIN_TOKENS.UpdatesService).to(UpdatesService);
5861
container.bind(MAIN_TOKENS.TaskLinkService).to(TaskLinkService);
5962
container.bind(MAIN_TOKENS.WatcherRegistryService).to(WatcherRegistryService);
6063
container.bind(MAIN_TOKENS.WorkspaceService).to(WorkspaceService);
64+
65+
container.bind(MAIN_TOKENS.ArchiveStore).toConstantValue(archiveStore);
66+
container.bind(MAIN_TOKENS.FoldersStore).toConstantValue(foldersStore);
67+
container.bind(MAIN_TOKENS.SettingsStore).toConstantValue(settingsStore);

apps/twig/src/main/di/tokens.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,14 @@
55
* Never import this file from renderer code.
66
*/
77
export const MAIN_TOKENS = Object.freeze({
8+
// Stores
9+
ArchiveStore: Symbol.for("Main.ArchiveStore"),
10+
FoldersStore: Symbol.for("Main.FoldersStore"),
11+
SettingsStore: Symbol.for("Main.SettingsStore"),
12+
813
// Services
914
AgentService: Symbol.for("Main.AgentService"),
15+
ArchiveService: Symbol.for("Main.ArchiveService"),
1016
AppLifecycleService: Symbol.for("Main.AppLifecycleService"),
1117
CloudTaskService: Symbol.for("Main.CloudTaskService"),
1218
ConnectivityService: Symbol.for("Main.ConnectivityService"),
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { z } from "zod";
2+
3+
export const archiveTaskInput = z.object({
4+
taskId: z.string(),
5+
});
6+
7+
export type ArchiveTaskInput = z.infer<typeof archiveTaskInput>;
8+
9+
export const unarchiveTaskInput = z.object({
10+
taskId: z.string(),
11+
recreateBranch: z.boolean().optional(),
12+
});
13+
14+
export type UnarchiveTaskInput = z.infer<typeof unarchiveTaskInput>;
15+
16+
export const archivedTaskSchema = z.object({
17+
taskId: z.string(),
18+
archivedAt: z.string(),
19+
folderId: z.string(),
20+
mode: z.enum(["worktree", "local", "cloud"]),
21+
worktreeName: z.string().nullable(),
22+
branchName: z.string().nullable(),
23+
checkpointId: z.string().nullable(),
24+
});
25+
26+
export const archiveTaskOutput = archivedTaskSchema;
27+
28+
export const unarchiveTaskOutput = z.object({
29+
taskId: z.string(),
30+
worktreeName: z.string().nullable(),
31+
});
32+
33+
export const listArchivedTasksOutput = z.array(archivedTaskSchema);
34+
35+
export const archivedTaskIdsOutput = z.array(z.string());
36+
37+
export const deleteArchivedTaskInput = z.object({
38+
taskId: z.string(),
39+
});
40+
41+
export const deleteArchivedTaskOutput = z.void();

0 commit comments

Comments
 (0)