#pragma once #include #include #include #include #include #include namespace ZShell::llm { class LlmTool : public QObject { Q_OBJECT public: explicit LlmTool(QObject* parent = nullptr); ~LlmTool() override; [[nodiscard]] virtual QString name() const = 0; [[nodiscard]] virtual QString description() const = 0; [[nodiscard]] virtual QJsonObject parameters() const = 0; virtual void execute( const QJsonObject& args, std::function done) = 0; virtual void cancel(); [[nodiscard]] QJsonObject specification() const; }; class ToolRegistry : public QObject { Q_OBJECT Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) public: explicit ToolRegistry(QObject* parent = nullptr); [[nodiscard]] bool enabled() const { return m_enabled; } void setEnabled(bool value); void registerTool(LlmTool* tool); [[nodiscard]] LlmTool* tool(const QString& name) const; [[nodiscard]] QJsonArray specifications() const; void cancelAll(); Q_SIGNALS: void enabledChanged(); private: bool m_enabled = true; QList m_tools; }; } // namespace ZShell::llm