57 bool send_input(std::size_t index,
const std::string& input, std::string* out_error);
62 struct ManagedProcess;
63 struct ExternalAttachSession {
64 std::size_t process_index = 0;
66 std::uintptr_t listen_handle = 0;
67 std::uintptr_t client_handle = 0;
72 std::string socket_path;
76 bool can_start(
const ManagedProcess& process)
const;
77 bool start_process_internal(std::size_t index, std::string* out_error);
78 void sample_metrics_if_due();
79 void sample_process_metrics(ManagedProcess* process);
80 void capture_output(ManagedProcess* process);
81 void append_log(ManagedProcess* process,
const std::string& text);
82 void append_log_line(ManagedProcess* process,
const std::string& text);
83 void poll_external_attach();
84 void close_external_attach(
const std::string& reason);
85 void enforce_log_limit(ManagedProcess* process);
87 std::vector<ManagedProcess> _processes;
88 ExternalAttachSession _external_attach;
89 std::optional<std::string> _terminal_command;
90 double _sample_rate_seconds = 2.0;
91 std::uint64_t _last_sample_tick_ms = 0;