#ifndef DROPSHELL_RUNNER_H #define DROPSHELL_RUNNER_H #include #include #include #include namespace dropshell { /** * Runner library for executing commands locally or remotely via SSH */ class Runner { public: /** * Execute a command according to the specification in the JSON * @param run_json JSON specification for the command * @return true if command executed successfully, false otherwise */ static bool run(const nlohmann::json& run_json); /** * Execute a command and capture its output * @param run_json JSON specification for the command * @param output Reference to string where output will be stored * @return true if command executed successfully, false otherwise */ static bool run(const nlohmann::json& run_json, std::string& output); private: /** * Execute a command locally * @param command Command to execute * @param args Command arguments * @param env Environment variables * @param silent Whether to suppress output * @param interactive Whether to enable interactive mode * @param output Reference to string where output will be stored (if capturing) * @param capture_output Whether to capture output * @return exit code of the command, or -1 if execution failed */ static int execute_local( const std::string& command, const std::vector& args, const std::map& env, bool silent, bool interactive, std::string* output = nullptr, bool capture_output = false ); /** * Execute a command remotely via SSH * @param ssh_config SSH configuration * @param command Command to execute * @param args Command arguments * @param env Environment variables * @param silent Whether to suppress output * @param interactive Whether to enable interactive mode * @param output Reference to string where output will be stored (if capturing) * @param capture_output Whether to capture output * @return exit code of the command, or -1 if execution failed */ static int execute_ssh( const nlohmann::json& ssh_config, const std::string& command, const std::vector& args, const std::map& env, bool silent, bool interactive, std::string* output = nullptr, bool capture_output = false ); /** * Parse command specification from JSON * @param run_json JSON specification * @param command Output parameter for command * @param args Output parameter for command arguments * @param env Output parameter for environment variables * @param silent Output parameter for silent option * @param interactive Output parameter for interactive option * @return true if parsing was successful, false otherwise */ static bool parse_json( const nlohmann::json& run_json, std::string& command, std::vector& args, std::map& env, bool& silent, bool& interactive ); }; } // namespace dropshell #endif // DROPSHELL_RUNNER_H