group(function () { // Plans (read) Route::get('v1/plans', [AgentApiController::class, 'listPlans']); Route::get('v1/plans/{slug}', [AgentApiController::class, 'getPlan']); // Phases (read) Route::get('v1/plans/{slug}/phases/{phase}', [AgentApiController::class, 'getPhase']); // Sessions (read) Route::get('v1/sessions', [AgentApiController::class, 'listSessions']); Route::get('v1/sessions/{sessionId}', [AgentApiController::class, 'getSession']); }); Route::middleware(AgentApiAuth::class.':plans.write')->group(function () { // Plans (write) Route::post('v1/plans', [AgentApiController::class, 'createPlan']); Route::patch('v1/plans/{slug}', [AgentApiController::class, 'updatePlan']); Route::delete('v1/plans/{slug}', [AgentApiController::class, 'archivePlan']); }); Route::middleware(AgentApiAuth::class.':phases.write')->group(function () { // Phases (write) Route::patch('v1/plans/{slug}/phases/{phase}', [AgentApiController::class, 'updatePhase']); Route::post('v1/plans/{slug}/phases/{phase}/checkpoint', [AgentApiController::class, 'addCheckpoint']); Route::patch('v1/plans/{slug}/phases/{phase}/tasks/{taskIdx}', [AgentApiController::class, 'updateTask']) ->whereNumber('taskIdx'); Route::post('v1/plans/{slug}/phases/{phase}/tasks/{taskIdx}/toggle', [AgentApiController::class, 'toggleTask']) ->whereNumber('taskIdx'); }); Route::middleware(AgentApiAuth::class.':sessions.write')->group(function () { // Sessions (write) Route::post('v1/sessions', [AgentApiController::class, 'startSession']); Route::post('v1/sessions/{sessionId}/end', [AgentApiController::class, 'endSession']); Route::post('v1/sessions/{sessionId}/continue', [AgentApiController::class, 'continueSession']); });