C++ / fmt (pull_request) Failing after 6s
C++ / build (pull_request) Failing after 10s
C++ / clang-tidy (pull_request) Failing after 9s
JS/TS / fmt (pull_request) Successful in 10s
JS/TS / lint (pull_request) Successful in 8s
Python / static (pull_request) Successful in 30s
Rust / build (pull_request) Successful in 49s
Python / verify (pull_request) Successful in 1m35s
Rust / fmt (pull_request) Successful in 36s
Rust / clippy (pull_request) Successful in 54s
55 lines
1.1 KiB
C++
55 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "tool.hpp"
|
|
|
|
#include <QList>
|
|
#include <QPointer>
|
|
#include <QStringList>
|
|
|
|
class QProcess;
|
|
class QTimer;
|
|
|
|
namespace ZShell::llm {
|
|
|
|
class ShellTool : public LlmTool {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit ShellTool(ToolRegistry* registry, QObject* parent = nullptr);
|
|
~ShellTool() override;
|
|
|
|
QString name() const override;
|
|
QString description() const override;
|
|
QJsonObject parameters() const override;
|
|
bool available(const ToolContext& context) const override;
|
|
void execute(
|
|
const ToolContext& context,
|
|
const QJsonObject& args,
|
|
ToolDone done) override;
|
|
void cancel() override;
|
|
|
|
static constexpr int DefaultTimeoutSeconds = 60;
|
|
static constexpr int MaxTimeoutSeconds = 300;
|
|
|
|
private:
|
|
struct Job {
|
|
QPointer<QProcess> process;
|
|
QPointer<QTimer> timer;
|
|
int timeoutSeconds = DefaultTimeoutSeconds;
|
|
int outputBudgetChars = 0;
|
|
ToolDone done;
|
|
QString startError;
|
|
bool timedOut = false;
|
|
bool cancelled = false;
|
|
bool finished = false;
|
|
};
|
|
|
|
static QStringList sandboxArguments(const QString& workspace);
|
|
|
|
void finishJob(Job* job);
|
|
|
|
QList<Job*> m_jobs;
|
|
};
|
|
|
|
} // namespace ZShell::llm
|