diff options
| author | soryu <soryu@soryu.co> | 2026-01-16 01:39:16 +0000 |
|---|---|---|
| committer | soryu <soryu@soryu.co> | 2026-01-16 01:39:16 +0000 |
| commit | 05931d19bc0c161d0177c3f983d0cd903d5e8ae3 (patch) | |
| tree | e7a43350f103972707b76c540095449f90a31dff | |
| parent | b69dc962cd99aa8b478b7c5facbd56bfb63eda27 (diff) | |
| download | soryu-0.1.0.tar.gz soryu-0.1.0.zip | |
Fixup: add task contract type to frontendv0.1.0
| -rw-r--r-- | makima/docs/PLAN-resume-history-system.md | 4 | ||||
| -rw-r--r-- | makima/frontend/src/lib/api.ts | 50 | ||||
| -rw-r--r-- | makima/frontend/src/routes/contracts.tsx | 22 | ||||
| -rw-r--r-- | makima/migrations/20250118000000_history_tables.sql (renamed from makima/migrations/20250117000000_history_tables.sql) | 0 |
4 files changed, 70 insertions, 6 deletions
diff --git a/makima/docs/PLAN-resume-history-system.md b/makima/docs/PLAN-resume-history-system.md index 9e81c93..19d02f3 100644 --- a/makima/docs/PLAN-resume-history-system.md +++ b/makima/docs/PLAN-resume-history-system.md @@ -18,7 +18,7 @@ This document provides a detailed, actionable implementation plan for the Resume ### Task 1.1: Create Database Migrations **Files to Create:** -- `makima/migrations/20250117000000_history_tables.sql` +- `makima/migrations/20250118000000_history_tables.sql` **Schema Changes:** @@ -1243,7 +1243,7 @@ Phase 5 (Daemon) can be done in parallel with Phases 3-4 ### Files to Create -1. `makima/migrations/20250117000000_history_tables.sql` +1. `makima/migrations/20250118000000_history_tables.sql` 2. `makima/src/server/handlers/history.rs` ### Files to Modify 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(); +} diff --git a/makima/frontend/src/routes/contracts.tsx b/makima/frontend/src/routes/contracts.tsx index 5e9bf60..8ed4ab5 100644 --- a/makima/frontend/src/routes/contracts.tsx +++ b/makima/frontend/src/routes/contracts.tsx @@ -474,6 +474,20 @@ function ContractsPageContent() { <button type="button" onClick={() => { + setContractType("task"); + setInitialPhase("execute"); + }} + className={`flex-1 px-3 py-2 font-mono text-xs uppercase transition-colors ${ + contractType === "task" + ? "bg-[#0f3c78] text-[#dbe7ff] border border-[#75aafc]" + : "bg-[#0d1b2d] text-[#8b949e] border border-[#3f6fb3] hover:border-[#75aafc]" + }`} + > + Task + </button> + <button + type="button" + onClick={() => { setContractType("simple"); setInitialPhase("plan"); }} @@ -501,7 +515,9 @@ function ContractsPageContent() { </button> </div> <p className="mt-1 font-mono text-xs text-[#8b949e]"> - {contractType === "simple" + {contractType === "task" + ? "Execute: One-off adhoc task with no supervisor (auto-archives on completion)" + : contractType === "simple" ? "Plan → Execute: Simple workflow with a plan document" : "Research → Specify → Plan → Execute → Review: Full specification-driven development with TDD"} </p> @@ -524,7 +540,9 @@ function ContractsPageContent() { ))} </select> <p className="mt-1 font-mono text-xs text-[#8b949e]"> - {contractType === "simple" + {contractType === "task" + ? "Task contracts always start in Execute phase" + : contractType === "simple" ? "Start in Plan to define what to build, or Execute if already planned" : "Skip earlier phases if you already have requirements defined"} </p> diff --git a/makima/migrations/20250117000000_history_tables.sql b/makima/migrations/20250118000000_history_tables.sql index 60e371c..60e371c 100644 --- a/makima/migrations/20250117000000_history_tables.sql +++ b/makima/migrations/20250118000000_history_tables.sql |
