// Copyright (C) 2026 Petr Mironychev // SPDX-License-Identifier: GPL-3.0-or-later // Additional attribution terms under GPLv3 §7(b) apply — see LICENSE #include "ChatPermissionProvider.hpp" #include #include #include namespace QodeAssist::Acp { ChatPermissionProvider::ChatPermissionProvider(Session::TurnLedger *ledger, QObject *parent) : LLMQore::Acp::AcpPermissionProvider(parent) , m_ledger(ledger) {} void ChatPermissionProvider::setRequestHandler(RequestHandler handler) { m_requestHandler = std::move(handler); } QFuture ChatPermissionProvider::requestPermission( const QString &sessionId, const LLMQore::Acp::ToolCall &toolCall, const QList &options) { Q_UNUSED(sessionId) auto promise = std::make_shared>(); promise->start(); const auto finish = [promise](const LLMQore::Acp::RequestPermissionResult &result) { promise->addResult(result); promise->finish(); }; if (!m_requestHandler) { finish(LLMQore::Acp::RequestPermissionResult::cancelled()); return promise->future(); } const QString requestId = m_ledger->registerPermission( [finish](const QString &optionId) { finish(LLMQore::Acp::RequestPermissionResult::selected(optionId)); }, [finish] { finish(LLMQore::Acp::RequestPermissionResult::cancelled()); }); QFuture future = promise->future(); m_requestHandler(requestId, toolCall, options); return future; } } // namespace QodeAssist::Acp