Files
pikasTech-HWLAB/internal/tasktree/contracts.ts
T

97 lines
3.2 KiB
TypeScript

export type TaskStatus = "pending" | "in_progress" | "completed" | "blocked";
export type TaskKind = "task" | "subtask" | "subsubtask";
export type TaskGroup = {
id: string;
name: string;
description: string;
createdAt: string;
updatedAt: string;
};
export type TaskItem = {
id: string;
groupId: string;
parentId: string | null;
kind: TaskKind;
title: string;
description: string;
status: TaskStatus;
startAt: string | null;
dueAt: string | null;
sortOrder: number;
createdAt: string;
updatedAt: string;
};
export type Milestone = {
id: string;
groupId: string;
taskId: string | null;
title: string;
occursAt: string;
createdAt: string;
};
export type ExecutionReport = {
id: string;
taskId: string;
title: string;
body: string;
status: string;
createdAt: string;
};
export type Timeline = {
group: TaskGroup;
tasks: TaskItem[];
milestones: Milestone[];
reports: ExecutionReport[];
};
export type TaskGroupOverview = {
group: TaskGroup;
taskCount: number;
subtaskCount: number;
subsubtaskCount: number;
reportCount: number;
startAt: string | null;
dueAt: string | null;
};
export type TaskTreeCommand =
| { operation: "health" }
| { operation: "group.list" }
| { operation: "group.overview" }
| { operation: "group.get"; groupId: string }
| { operation: "group.create"; name: string; description?: string }
| { operation: "group.delete"; groupId: string }
| { operation: "group.stats"; groupId: string }
| { operation: "group.import-markdown"; sourcePath: string; sourceModifiedAt: string; markdown: string; reports: Array<{ href: string; sourcePath: string; body: string; modifiedAt: string }>; groupName?: string; dryRun?: boolean }
| { operation: "task.list"; groupId: string }
| { operation: "task.get"; taskId: string }
| { operation: "task.create"; groupId: string; title: string; description?: string; startAt?: string; dueAt?: string; parentId?: string }
| { operation: "task.create-batch"; groupId: string; titles: string[]; parentId?: string; description?: string; startAt?: string; dueAt?: string }
| { operation: "task.update"; taskId: string; title?: string; description?: string; status?: TaskStatus; startAt?: string | null; dueAt?: string | null }
| { operation: "task.delete"; taskId: string }
| { operation: "task.start"; taskId: string }
| { operation: "task.complete"; taskId: string }
| { operation: "milestone.create"; groupId: string; title: string; occursAt: string; taskId?: string }
| { operation: "report.list"; taskId: string }
| { operation: "report.get"; reportId: string }
| { operation: "report.write"; taskId: string; title: string; body: string; status?: string }
| { operation: "report.create"; taskId: string; title: string; body: string; status?: string }
| { operation: "timeline.get"; groupId: string }
| { operation: "backup.create"; dryRun?: boolean; reason?: string }
| { operation: "backup.status" }
| { operation: "backup.verify" }
| { operation: "backup.restore"; confirm?: boolean; expectedSha256?: string }
| { operation: "workflow.start"; taskId: string };
export type TaskTreeResult = {
ok: boolean;
operation: TaskTreeCommand["operation"];
data?: unknown;
error?: { code: string; message: string; detail?: unknown };
};