feat: support subtasks

This commit is contained in:
Henry Li
2026-02-07 16:14:48 +08:00
parent 39a5d8dc30
commit 3e2883e2a3
19 changed files with 433 additions and 109 deletions

View File

@@ -0,0 +1,46 @@
import { createContext, useCallback, useContext, useState } from "react";
import type { Subtask } from "./types";
export interface SubtaskContextValue {
tasks: Map<string, Subtask>;
}
export const SubtaskContext = createContext<SubtaskContextValue>({
tasks: new Map(),
});
export function SubtasksProvider({ children }: { children: React.ReactNode }) {
const [tasks] = useState<Map<string, Subtask>>(new Map());
return (
<SubtaskContext.Provider value={{ tasks }}>
{children}
</SubtaskContext.Provider>
);
}
export function useSubtaskContext() {
const context = useContext(SubtaskContext);
if (context === undefined) {
throw new Error(
"useSubtaskContext must be used within a SubtaskContext.Provider",
);
}
return context;
}
export function useSubtask(id: string) {
const { tasks } = useSubtaskContext();
return tasks.get(id);
}
export function useUpdateSubtask() {
const { tasks } = useSubtaskContext();
const updateSubtask = useCallback(
(task: Partial<Subtask> & { id: string }) => {
tasks.set(task.id, { ...tasks.get(task.id), ...task } as Subtask);
},
[tasks],
);
return updateSubtask;
}

View File

@@ -0,0 +1 @@
export * from "./types";

View File

@@ -0,0 +1,9 @@
export interface Subtask {
id: string;
status: "in_progress" | "completed" | "failed";
subagent_type: string;
description: string;
prompt: string;
result?: string;
error?: string;
}