feat(04-01): create AgentRepository port interface
- Define AgentRepository interface with CRUD operations - Add findByName, findByTaskId, findBySessionId for lookups - Add findByStatus for filtering by agent state - Add updateStatus and updateSessionId for state changes - Export AgentStatus type - Export from repositories barrel file
This commit is contained in:
86
src/db/repositories/agent-repository.ts
Normal file
86
src/db/repositories/agent-repository.ts
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
/**
|
||||||
|
* Agent Repository Port Interface
|
||||||
|
*
|
||||||
|
* Port for Agent aggregate operations.
|
||||||
|
* Implementations (Drizzle, etc.) are adapters.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { Agent, NewAgent } from '../schema.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Agent status values.
|
||||||
|
*/
|
||||||
|
export type AgentStatus = 'idle' | 'running' | 'waiting_for_input' | 'stopped' | 'crashed';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Agent Repository Port
|
||||||
|
*
|
||||||
|
* Defines operations for the Agent aggregate.
|
||||||
|
* Enables agent state persistence for session resumption and listing.
|
||||||
|
*/
|
||||||
|
export interface AgentRepository {
|
||||||
|
/**
|
||||||
|
* Create a new agent.
|
||||||
|
* Generates id and sets timestamps automatically.
|
||||||
|
* Name must be unique.
|
||||||
|
*/
|
||||||
|
create(agent: Omit<NewAgent, 'id' | 'createdAt' | 'updatedAt'>): Promise<Agent>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find an agent by its ID.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
findById(id: string): Promise<Agent | null>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find an agent by its human-readable name.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
findByName(name: string): Promise<Agent | null>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find an agent by its associated task.
|
||||||
|
* Returns null if no agent is assigned to that task.
|
||||||
|
*/
|
||||||
|
findByTaskId(taskId: string): Promise<Agent | null>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find an agent by its Claude CLI session ID.
|
||||||
|
* Used for session resumption.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
findBySessionId(sessionId: string): Promise<Agent | null>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find all agents.
|
||||||
|
* Returns empty array if none exist.
|
||||||
|
*/
|
||||||
|
findAll(): Promise<Agent[]>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find agents by status.
|
||||||
|
* Returns empty array if no agents have that status.
|
||||||
|
*/
|
||||||
|
findByStatus(status: AgentStatus): Promise<Agent[]>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update an agent's status.
|
||||||
|
* Throws if agent not found.
|
||||||
|
* Updates updatedAt timestamp automatically.
|
||||||
|
*/
|
||||||
|
updateStatus(id: string, status: AgentStatus): Promise<Agent>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update an agent's session ID.
|
||||||
|
* Called after first CLI run completes and provides session ID.
|
||||||
|
* Throws if agent not found.
|
||||||
|
* Updates updatedAt timestamp automatically.
|
||||||
|
*/
|
||||||
|
updateSessionId(id: string, sessionId: string): Promise<Agent>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete an agent.
|
||||||
|
* Throws if agent not found.
|
||||||
|
*/
|
||||||
|
delete(id: string): Promise<void>;
|
||||||
|
}
|
||||||
@@ -29,3 +29,5 @@ export type {
|
|||||||
CreateTaskData,
|
CreateTaskData,
|
||||||
UpdateTaskData,
|
UpdateTaskData,
|
||||||
} from './task-repository.js';
|
} from './task-repository.js';
|
||||||
|
|
||||||
|
export type { AgentRepository, AgentStatus } from './agent-repository.js';
|
||||||
|
|||||||
Reference in New Issue
Block a user