a3s 0.10.8

a3s — A3S coding agent CLI; `a3s code` launches the interactive TUI
Documentation
use std::sync::Arc;

use a3s_boot::{controller, Result as BootResult};

use super::service::KernelService;

pub(super) struct KernelTurnQueueController {
    service: Arc<KernelService>,
}

impl KernelTurnQueueController {
    pub(super) fn new(service: Arc<KernelService>) -> Self {
        Self { service }
    }
}

#[controller("/")]
impl KernelTurnQueueController {
    #[get("/v1/kernel/sessions/{session_id}/turn-queue")]
    async fn session_turn_queue(
        &self,
        #[param("session_id")] session_id: String,
    ) -> BootResult<serde_json::Value> {
        self.service.session_turn_queue(&session_id).await
    }

    #[post("/v1/kernel/sessions/{session_id}/turn-queue")]
    async fn enqueue_session_turn(
        &self,
        #[param("session_id")] session_id: String,
        #[body] request: serde_json::Value,
    ) -> BootResult<serde_json::Value> {
        self.service
            .enqueue_session_turn(&session_id, request)
            .await
    }

    #[patch("/v1/kernel/sessions/{session_id}/turn-queue/{turn_id}")]
    async fn update_session_turn(
        &self,
        #[param("session_id")] session_id: String,
        #[param("turn_id")] turn_id: String,
        #[body] request: serde_json::Value,
    ) -> BootResult<serde_json::Value> {
        self.service
            .update_session_turn(&session_id, &turn_id, request)
            .await
    }

    #[delete("/v1/kernel/sessions/{session_id}/turn-queue/{turn_id}")]
    async fn delete_session_turn(
        &self,
        #[param("session_id")] session_id: String,
        #[param("turn_id")] turn_id: String,
    ) -> BootResult<serde_json::Value> {
        self.service
            .delete_session_turn(&session_id, &turn_id)
            .await
    }

    #[post("/v1/kernel/sessions/{session_id}/turn-queue/reorder")]
    async fn reorder_session_turns(
        &self,
        #[param("session_id")] session_id: String,
        #[body] request: serde_json::Value,
    ) -> BootResult<serde_json::Value> {
        self.service
            .reorder_session_turns(&session_id, request)
            .await
    }

    #[post("/v1/kernel/sessions/{session_id}/turn-queue/actions/{action}")]
    async fn update_session_turn_queue_action(
        &self,
        #[param("session_id")] session_id: String,
        #[param("action")] action: String,
    ) -> BootResult<serde_json::Value> {
        self.service
            .update_session_turn_queue_action(&session_id, &action)
            .await
    }
}