diff --git a/frontend/src/stores/tasks.ts b/frontend/src/stores/tasks.ts index 231ee52..a0d73cc 100644 --- a/frontend/src/stores/tasks.ts +++ b/frontend/src/stores/tasks.ts @@ -2,7 +2,7 @@ import { ref } from "vue"; import { defineStore } from "pinia"; import { apiGet, apiPost, apiPut, apiPatch, apiDelete } from "@/api/client"; import { useToastStore } from "@/stores/toast"; -import type { Task, TaskListResponse, TaskStatus, TaskPriority } from "@/types/task"; +import type { Task, TaskListResponse, TaskStatus, TaskPriority, StartPlanningResult } from "@/types/task"; export const useTasksStore = defineStore("tasks", () => { const tasks = ref([]); @@ -129,6 +129,21 @@ export const useTasksStore = defineStore("tasks", () => { } } + async function startPlanning( + projectId: number, + title: string + ): Promise { + try { + return await apiPost("/api/tasks/planning", { + project_id: projectId, + title, + }); + } catch (e) { + useToastStore().show("Failed to start planning", "error"); + throw e; + } + } + function setStatusFilter(statuses: TaskStatus[]) { statusFilter.value = statuses; offset.value = 0; diff --git a/frontend/src/types/note.ts b/frontend/src/types/note.ts index bceb8e2..d68d2be 100644 --- a/frontend/src/types/note.ts +++ b/frontend/src/types/note.ts @@ -22,6 +22,7 @@ export interface Note { recurrence_next_spawn_at: string | null; is_task: boolean; note_type: NoteType; + task_kind?: "work" | "plan"; metadata: Record; created_at: string; updated_at: string; diff --git a/frontend/src/types/task.ts b/frontend/src/types/task.ts index b7ba893..8b55262 100644 --- a/frontend/src/types/task.ts +++ b/frontend/src/types/task.ts @@ -5,6 +5,21 @@ export interface TaskListResponse { total: number; } +export interface StartPlanningResult { + task: import("./note").Note; + applicable_rules: { + id: number; + title: string; + statement: string; + topic_title: string; + rulebook_title: string; + }[]; + subscribed_rulebooks: { id: number; title: string }[]; + applicable_rules_truncated: boolean; + project_goal: string; + open_task_count: number; +} + export interface TaskLog { id: number; task_id: number;