summaryrefslogtreecommitdiff
path: root/makima/frontend/src/lib/api.ts
diff options
context:
space:
mode:
Diffstat (limited to 'makima/frontend/src/lib/api.ts')
-rw-r--r--makima/frontend/src/lib/api.ts50
1 files changed, 48 insertions, 2 deletions
diff --git a/makima/frontend/src/lib/api.ts b/makima/frontend/src/lib/api.ts
index 100a85a..1e62732 100644
--- a/makima/frontend/src/lib/api.ts
+++ b/makima/frontend/src/lib/api.ts
@@ -1415,7 +1415,7 @@ export async function deleteAccount(
// =============================================================================
/** Contract type determines the workflow and required documents */
-export type ContractType = "simple" | "specification";
+export type ContractType = "simple" | "specification" | "task";
export type ContractPhase = "research" | "specify" | "plan" | "execute" | "review";
export type ContractStatus = "active" | "completed" | "archived";
export type RepositorySourceType = "remote" | "local" | "managed";
@@ -1426,12 +1426,17 @@ export function getValidPhases(contractType: ContractType): ContractPhase[] {
if (contractType === "simple") {
return ["plan", "execute"];
}
+ if (contractType === "task") {
+ return ["execute"];
+ }
return ["research", "specify", "plan", "execute", "review"];
}
/** Get default initial phase for a contract type */
export function getDefaultPhase(contractType: ContractType): ContractPhase {
- return contractType === "simple" ? "plan" : "research";
+ if (contractType === "simple") return "plan";
+ if (contractType === "task") return "execute";
+ return "research";
}
export interface ContractRepository {
@@ -2047,3 +2052,44 @@ export async function deleteRepositoryHistory(id: string): Promise<void> {
throw new Error(`Failed to delete repository history: ${res.statusText}`);
}
}
+
+// =============================================================================
+// Adhoc Task Types (for one-off tasks without supervisor overhead)
+// =============================================================================
+
+/** Request payload for creating an adhoc (one-off) task */
+export interface AdhocTaskRequest {
+ /** Name/description of the task */
+ name: string;
+ /** The plan/instructions for the task */
+ plan: string;
+ /** Repository URL (optional) */
+ repositoryUrl?: string;
+ /** Base branch to work from */
+ baseBranch?: string;
+}
+
+/** Response for adhoc task creation */
+export interface AdhocTaskResponse {
+ contract: ContractSummary;
+ task: Task;
+}
+
+/**
+ * Create an adhoc (one-off) task without supervisor overhead.
+ * This creates a minimal "task" type contract with a single task.
+ * The contract auto-archives when the task completes.
+ */
+export async function createAdhocTask(
+ data: AdhocTaskRequest
+): Promise<AdhocTaskResponse> {
+ const res = await authFetch(`${API_BASE}/api/v1/tasks/adhoc`, {
+ method: "POST",
+ body: JSON.stringify(data),
+ });
+ if (!res.ok) {
+ const errorText = await res.text();
+ throw new Error(`Failed to create adhoc task: ${errorText || res.statusText}`);
+ }
+ return res.json();
+}