2026-03-01 04:01:58 +01:00
|
|
|
/**
|
2026-03-03 22:40:18 +01:00
|
|
|
* @fileoverview Task queue type definitions.
|
|
|
|
|
*
|
|
|
|
|
* Types for the prompt execution queue: TaskDefinition (input) and
|
|
|
|
|
* TaskState (persisted state with execution details).
|
|
|
|
|
*
|
|
|
|
|
* Key exports:
|
|
|
|
|
* - TaskDefinition — input type for creating a task (prompt, workingDir, priority, dependencies)
|
|
|
|
|
* - TaskState — persisted state with execution details (status, assignedSessionId, output, error)
|
|
|
|
|
* - TaskStatus — 'pending' | 'running' | 'completed' | 'failed'
|
|
|
|
|
*
|
|
|
|
|
* Cross-domain relationships:
|
|
|
|
|
* - TaskState.assignedSessionId links to SessionState.id (session domain)
|
|
|
|
|
* - TaskState is stored in AppState.tasks (app-state domain)
|
|
|
|
|
*
|
|
|
|
|
* Persisted to `~/.codeman/state.json`. No dependencies on other domain modules.
|
2026-03-01 04:01:58 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/** Status of a task in the queue */
|
|
|
|
|
export type TaskStatus = 'pending' | 'running' | 'completed' | 'failed';
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Definition of a task to be executed
|
|
|
|
|
*/
|
|
|
|
|
export interface TaskDefinition {
|
|
|
|
|
/** Unique task identifier */
|
|
|
|
|
id: string;
|
|
|
|
|
/** Prompt to send to Claude */
|
|
|
|
|
prompt: string;
|
|
|
|
|
/** Working directory for task execution */
|
|
|
|
|
workingDir: string;
|
|
|
|
|
/** Priority level (higher = processed first) */
|
|
|
|
|
priority: number;
|
|
|
|
|
/** IDs of tasks that must complete first */
|
|
|
|
|
dependencies: string[];
|
|
|
|
|
/** Custom phrase to detect task completion */
|
|
|
|
|
completionPhrase?: string;
|
|
|
|
|
/** Timeout in milliseconds */
|
|
|
|
|
timeoutMs?: number;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Full state of a task including execution details
|
|
|
|
|
*/
|
|
|
|
|
export interface TaskState {
|
|
|
|
|
/** Unique task identifier */
|
|
|
|
|
id: string;
|
|
|
|
|
/** Prompt sent to Claude */
|
|
|
|
|
prompt: string;
|
|
|
|
|
/** Working directory for task execution */
|
|
|
|
|
workingDir: string;
|
|
|
|
|
/** Priority level (higher = processed first) */
|
|
|
|
|
priority: number;
|
|
|
|
|
/** IDs of tasks that must complete first */
|
|
|
|
|
dependencies: string[];
|
|
|
|
|
/** Custom phrase to detect task completion */
|
|
|
|
|
completionPhrase?: string;
|
|
|
|
|
/** Timeout in milliseconds */
|
|
|
|
|
timeoutMs?: number;
|
|
|
|
|
/** Current task status */
|
|
|
|
|
status: TaskStatus;
|
|
|
|
|
/** ID of session running this task, null if not assigned */
|
|
|
|
|
assignedSessionId: string | null;
|
|
|
|
|
/** Timestamp when task was created */
|
|
|
|
|
createdAt: number;
|
|
|
|
|
/** Timestamp when task started executing */
|
|
|
|
|
startedAt: number | null;
|
|
|
|
|
/** Timestamp when task completed */
|
|
|
|
|
completedAt: number | null;
|
|
|
|
|
/** Captured output from Claude */
|
|
|
|
|
output: string;
|
|
|
|
|
/** Error message if task failed */
|
|
|
|
|
error: string | null;
|
|
|
|
|
}
|