#include "kompanioncontroller.h" #include "regexregistry.h" #include "guardrailspolicy.h" #include #include KompanionController::KompanionController(QObject *parent) : QObject(parent) { registry_ = new RegexRegistry(this); policy_ = new DefaultGuardrails(this); } QString KompanionController::sendPrompt(const QString &prompt) { QString tool; QVariantMap args; if (!mapPromptToTool(prompt, tool, args)) { const QString req = generateRequestId(); emit textOutput(req, QStringLiteral("(no mapping) %1").arg(prompt)); return QString(); } const QString req = generateRequestId(); if (policy_) { auto dec = policy_->evaluate(tool, args); if (!dec.allow) { emit textOutput(req, QStringLiteral("blocked by guardrails: %1").arg(dec.reason)); return QString(); } } emit toolRequested(req, tool, args); return req; } void KompanionController::onToolResult(const QString &requestId, const QString &resultJson, bool success) { Q_UNUSED(success); emit textOutput(requestId, resultJson); } void KompanionController::cancelRequest(const QString &requestId) { emit textOutput(requestId, QStringLiteral("cancel requested")); } QString KompanionController::generateRequestId() const { QByteArray seed = QByteArray::number(QDateTime::currentMSecsSinceEpoch()); return QString::fromLatin1(QCryptographicHash::hash(seed, QCryptographicHash::Sha256).toHex().left(12)); } bool KompanionController::mapPromptToTool(const QString &prompt, QString &toolName, QVariantMap &args) const { if (registry_) return registry_->match(prompt, toolName, args); return false; }