MCPcopy Create free account
hub / github.com/Serial-Studio/Serial-Studio / dispatchByCallSafety

Method dispatchByCallSafety

app/src/AI/Conversation.cpp:853–892  ·  view source on GitHub ↗

* @brief Routes a non-meta tool call by its CommandRegistry safety tag. */

Source from the content-addressed store, hash-verified

851 * @brief Routes a non-meta tool call by its CommandRegistry safety tag.
852 */
853void AI::Conversation::dispatchByCallSafety(const QString& callId,
854 const QString& requestedName,
855 const QJsonObject& arguments)
856{
857 const QString name = m_dispatcher->canonicalToolName(requestedName);
858 const auto safety = AI::CommandRegistry::instance().safetyOf(name);
859 qCDebug(serialStudioAI) << "Tool call" << name << "safety=" << static_cast<int>(safety);
860
861 if (safety == Safety::Blocked) {
862 QJsonObject denial;
863 denial[QStringLiteral("ok")] = false;
864 denial[QStringLiteral("error")] = QStringLiteral("blocked");
865 appendToolCallCard(callId, name, arguments, CallStatus::Blocked);
866 recordToolResult(callId, name, denial);
867 updateToolCallCard(callId, CallStatus::Blocked, denial);
868 releaseOutstandingToolResult();
869 return;
870 }
871
872 if (safety == Safety::Confirm || safety == Safety::AlwaysConfirm) {
873 const bool autoApprove =
874 (safety == Safety::Confirm) && Assistant::instance().autoApproveEdits();
875 if (autoApprove) {
876 appendToolCallCard(callId, name, arguments, CallStatus::Running);
877 runToolCall(callId, name, arguments, true);
878 return;
879 }
880
881 appendToolCallCard(callId, name, arguments, CallStatus::AwaitingConfirm);
882 PendingCall pending;
883 pending.name = name;
884 pending.arguments = arguments;
885 m_awaitingConfirm.insert(callId, pending);
886 setAwaitingConfirmation(true);
887 return;
888 }
889
890 appendToolCallCard(callId, name, arguments, CallStatus::Running);
891 runToolCall(callId, name, arguments, true);
892}
893
894/**
895 * @brief Handles end-of-stream: either continue with tool results or end the turn.

Callers

nothing calls this directly

Calls 3

canonicalToolNameMethod · 0.80
safetyOfMethod · 0.80
autoApproveEditsMethod · 0.80

Tested by

no test coverage detected