summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-16 01:39:16 +0000
committersoryu <soryu@soryu.co>2026-01-16 01:39:16 +0000
commit05931d19bc0c161d0177c3f983d0cd903d5e8ae3 (patch)
treee7a43350f103972707b76c540095449f90a31dff
parentb69dc962cd99aa8b478b7c5facbd56bfb63eda27 (diff)
downloadsoryu-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.md4
-rw-r--r--makima/frontend/src/lib/api.ts50
-rw-r--r--makima/frontend/src/routes/contracts.tsx22
-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