1#[macro_export]
11macro_rules! print {
12 ($($arg:tt)*) => {{
13 use ::std::io::Write as _;
14 let _ = ::std::write!(::std::io::stdout(), $($arg)*);
15 }};
16}
17
18#[macro_export]
19macro_rules! println {
20 ($($arg:tt)*) => {{
21 use ::std::io::Write as _;
22 let _ = ::std::writeln!(::std::io::stdout(), $($arg)*);
23 }};
24}
25
26#[macro_export]
27macro_rules! eprint {
28 ($($arg:tt)*) => {{
29 use ::std::io::Write as _;
30 let _ = ::std::write!(::std::io::stderr(), $($arg)*);
31 }};
32}
33
34#[macro_export]
35macro_rules! eprintln {
36 ($($arg:tt)*) => {{
37 use ::std::io::Write as _;
38 let _ = ::std::writeln!(::std::io::stderr(), $($arg)*);
39 }};
40}
41
42pub mod args_parser;
43pub mod args_parser_queries;
44mod atomic_write;
45pub mod attached_diagnostics;
46pub mod cgroup_memory;
47pub mod container_removal;
48pub mod cpu_penalty;
49pub mod cpu_penalty_monitor;
50pub mod detached_finalize;
51pub mod detached_output;
52pub(crate) mod docker_cleanup;
53pub mod docker_command_handoff;
54pub mod docker_init_option;
55pub mod docker_inspect_batch;
56mod docker_network_lifecycle;
57pub mod docker_post_mortem;
58pub mod docker_recovery_options;
59pub mod docker_resource_limits;
60pub mod docker_resource_options;
61pub mod docker_snapshot_resume;
62pub mod docker_snapshot_safety;
63pub mod execution_attach;
64pub mod execution_attempt;
65pub mod execution_chain;
66pub mod execution_cleanup;
67pub mod execution_control;
68pub mod execution_env;
69pub mod execution_identity;
70pub mod execution_recovery;
71pub mod execution_resume;
72pub mod execution_resume_all;
73pub mod execution_store;
74pub mod exit_evidence;
75pub mod exit_reason;
76pub mod failure_handler;
77pub mod formal_ai;
78pub mod formal_ai_cli;
79pub mod formal_ai_client;
80pub mod formal_ai_files;
81pub mod formal_ai_policy;
82pub mod formal_ai_runtime;
83pub mod formal_ai_tool;
84pub mod isolation;
85pub mod isolation_metadata;
86pub mod launch_identity;
87pub mod launch_identity_options;
88pub mod launch_owner;
89pub mod log_sanitizer;
90pub mod log_uploader;
91pub mod output_blocks;
92pub mod query_commands;
93pub mod recovery_delay;
94pub mod resume_resources;
95pub mod sequence_parser;
96pub mod session_probe;
97pub mod signal_handler;
98pub mod snapshot_resume_options;
99pub mod status_footer;
100pub mod status_formatter;
101pub mod status_probe;
102pub mod store_decode_cache;
103pub mod store_lock;
104pub mod substitution;
105pub mod usage;
106pub mod user_manager;
107pub mod version_info;
108
109mod lino_value_json;
110mod local_hostname;
111
112pub use args_parser::{
114 generate_session_name, generate_uuid, get_effective_mode, has_isolation, is_valid_uuid,
115 parse_args, validate_options, ParsedArgs, WrapperOptions, VALID_BACKENDS, VALID_OUTPUT_FORMATS,
116 VALID_SHELLS,
117};
118pub use detached_finalize::{
119 build_detached_finalize_snippet, finalize_detached_execution, reconcile_finalized_record,
120 run_internal_finalize, DetachedFinalizeFacts, FinalizeOutcome,
121 END_TIME_SOURCE_DOCKER_FINISHED_AT, END_TIME_SOURCE_LOG_FOOTER, END_TIME_SOURCE_OBSERVED_AT,
122 INTERNAL_FINALIZE_FLAG, WATCHER_LOST_CONTAINER,
123};
124pub use docker_cleanup::{
125 build_detached_docker_completion_script, build_detached_docker_completion_script_with,
126 docker_command, DockerContainerCleanupPolicy, DockerWatcherOptions,
127};
128pub use docker_post_mortem::{
129 build_docker_post_mortem_snippet, build_docker_removal_note_snippet,
130 build_docker_running_condition, build_docker_state_snippet,
131 build_docker_still_running_note_snippet, build_docker_wait_for_exit_snippet,
132 format_container_post_mortem, format_container_removal_note, format_lifetime,
133 normalize_docker_timestamp, ContainerPostMortem, DOCKER_RUNNING_INSPECT_FORMAT,
134 DOCKER_STATE_INSPECT_FORMAT, DOCKER_ZERO_TIME, LOG_CAPTURE_STOPPED_NOTE, POST_MORTEM_HEADER,
135 STILL_RUNNING_NOTE,
136};
137pub use execution_attach::{
138 attach_execution, attach_execution_with_runners, build_attach_plan,
139 format_attach_result_as_links_notation, AttachPlan, AttachResultFields, ExecutionAttachResult,
140 InteractiveRunner, SystemInteractiveRunner,
141};
142pub use execution_control::{
143 collect_descendant_pids, collect_descendant_pids_with_runner, collect_process_ids,
144 collect_process_ids_with_runner, control_execution, control_execution_with_runner,
145 format_control_result_as_links_notation, get_control_command, parse_screen_pid,
146 CommandRunOutput, CommandRunner, ControlAction, ControlCommand, ExecutionControlResult,
147 SystemCommandRunner,
148};
149pub use execution_resume::{
150 build_resume_plan, build_resumed_session_name, build_snapshot_image_name, resume_execution,
151 resume_execution_with, ExecutionResumeResult, ResumeHooks, ResumeMode, ResumePlan,
152 ResumeResultFields, SystemResumeHooks,
153};
154pub use execution_resume_all::{
155 format_resume_all, resume_all_executions, resume_all_executions_with, ExecutionResumeAllResult,
156 ResumeAllAction, ResumeAllEntry,
157};
158pub use execution_store::{
159 clink_reference, is_clink_installed, CleanupOptions, CleanupResult, ExecutionRecord,
160 ExecutionRecordOptions, ExecutionStats, ExecutionStatus, ExecutionStore, ExecutionStoreOptions,
161};
162pub use exit_reason::{
163 describe_exit_code, describe_exit_code_str, detect_exit_reason, resolve_exit_reason,
164 signal_name_for_exit_code, ExitCodeDescription,
165};
166pub use failure_handler::{handle_failure, Config as FailureConfig};
167pub use isolation::{
168 append_log_file, build_command_string, build_command_string_with, build_display_command,
169 build_shell_with_args_cmd_args, command_name, create_log_footer, create_log_header,
170 create_log_path, create_log_path_for_execution, docker_image_exists, docker_pull_image,
171 get_default_docker_image, get_timestamp, is_command_available, is_interactive_shell_command,
172 is_shell_invocation_with_args, quote_shell_arg, quote_shell_arg_with, run_as_isolated_user,
173 run_isolated, split_shell_words, split_shell_words_with, to_shell_words, write_log_file,
174 IsolationOptions, IsolationResult, LogHeaderParams, ShellQuotingStyle,
175};
176pub use isolation_metadata::{
177 build_isolation_options_map, docker_runtime_metadata, docker_runtime_status_lines,
178 docker_runtime_status_lines_for_options,
179};
180pub use log_uploader::upload_execution_log;
181#[allow(deprecated)]
182pub use output_blocks::{
183 create_command_line,
185 create_empty_spine_line, create_empty_timeline_line,
187 create_finish_block,
188 create_spine_line, create_start_block,
190 create_timeline_line,
191 create_timeline_separator,
192 create_virtual_command_block,
193 create_virtual_command_result,
194 escape_for_links_notation,
195 format_duration,
196 format_value_for_links_notation,
197 generate_isolation_lines,
198 get_result_marker,
199 parse_isolation_metadata,
200 FinishBlockOptions,
201 IsolationMetadata,
202 StartBlockOptions,
203 FAILURE_MARKER,
204 SPINE, SUCCESS_MARKER,
206 TIMELINE_MARKER,
207};
208pub use query_commands::{dispatch_query_command, handle_cleanup, report_result, QueryOutcome};
209pub use session_probe::{probe_session, SessionProbe, SessionState};
210pub use signal_handler::{
211 clear_current_execution, get_signal_exit_code, set_current_execution, setup_signal_handlers,
212 was_signal_received,
213};
214pub use status_footer::{
215 parse_footer_from_tail, parse_footer_timestamp, read_footer_from_log, LogFooter,
216};
217pub use status_formatter::{
218 attach_current_time, enrich_detached_status, format_record, format_record_as_links_notation,
219 format_record_as_links_notation_with_current_time, format_record_as_text,
220 format_record_as_text_with_current_time, format_record_list,
221 format_record_list_as_links_notation, format_record_list_as_text,
222 format_record_with_current_time, list_executions, list_executions_filtered, query_status,
223 read_exit_code_from_log, StatusQueryResult,
224};
225pub use status_probe::is_detached_session_alive;
226pub use substitution::{process_command, ProcessOptions, SubstitutionResult};
227pub use usage::print_usage;
228pub use user_manager::{
229 create_isolated_user, delete_user, get_current_user, get_current_user_groups, has_sudo_access,
230 CreateIsolatedUserOptions, DeleteUserOptions, UserOperationResult,
231};