Skip to main content

start_command/
mod.rs

1//! start-command library
2//!
3//! Provides command execution with isolation, substitution, and failure handling.
4
5pub mod args_parser;
6pub mod args_parser_queries;
7mod atomic_write;
8pub mod attached_diagnostics;
9pub mod cgroup_memory;
10pub mod cpu_penalty;
11pub mod cpu_penalty_monitor;
12pub mod detached_finalize;
13pub mod detached_output;
14pub(crate) mod docker_cleanup;
15pub mod docker_command_handoff;
16mod docker_network_lifecycle;
17pub mod docker_post_mortem;
18pub mod docker_recovery_options;
19pub mod docker_resource_limits;
20pub mod docker_resource_options;
21pub mod docker_snapshot_safety;
22pub mod execution_attach;
23pub mod execution_attempt;
24pub mod execution_control;
25pub mod execution_recovery;
26pub mod execution_resume;
27pub mod execution_resume_all;
28pub mod execution_store;
29pub mod exit_evidence;
30pub mod exit_reason;
31pub mod failure_handler;
32pub mod isolation;
33pub mod isolation_metadata;
34pub mod launch_owner;
35pub mod log_sanitizer;
36pub mod log_uploader;
37pub mod output_blocks;
38pub mod query_commands;
39pub mod recovery_delay;
40pub mod resume_resources;
41pub mod sequence_parser;
42pub mod session_probe;
43pub mod signal_handler;
44pub mod status_footer;
45pub mod status_formatter;
46pub mod status_probe;
47pub mod store_lock;
48pub mod substitution;
49pub mod usage;
50pub mod user_manager;
51
52mod lino_value_json;
53mod local_hostname;
54
55// Re-export commonly used items
56pub use args_parser::{
57    generate_session_name, generate_uuid, get_effective_mode, has_isolation, is_valid_uuid,
58    parse_args, validate_options, ParsedArgs, WrapperOptions, VALID_BACKENDS, VALID_OUTPUT_FORMATS,
59    VALID_SHELLS,
60};
61pub use detached_finalize::{
62    build_detached_finalize_snippet, finalize_detached_execution, reconcile_finalized_record,
63    run_internal_finalize, DetachedFinalizeFacts, FinalizeOutcome,
64    END_TIME_SOURCE_DOCKER_FINISHED_AT, END_TIME_SOURCE_LOG_FOOTER, END_TIME_SOURCE_OBSERVED_AT,
65    INTERNAL_FINALIZE_FLAG, WATCHER_LOST_CONTAINER,
66};
67pub use docker_cleanup::{
68    build_detached_docker_completion_script, build_detached_docker_completion_script_with,
69    docker_command, DockerContainerCleanupPolicy, DockerWatcherOptions,
70};
71pub use docker_post_mortem::{
72    build_docker_post_mortem_snippet, build_docker_removal_note_snippet,
73    build_docker_running_condition, build_docker_state_snippet,
74    build_docker_still_running_note_snippet, build_docker_wait_for_exit_snippet,
75    format_container_post_mortem, format_container_removal_note, format_lifetime,
76    normalize_docker_timestamp, ContainerPostMortem, DOCKER_RUNNING_INSPECT_FORMAT,
77    DOCKER_STATE_INSPECT_FORMAT, DOCKER_ZERO_TIME, LOG_CAPTURE_STOPPED_NOTE, POST_MORTEM_HEADER,
78    STILL_RUNNING_NOTE,
79};
80pub use execution_attach::{
81    attach_execution, attach_execution_with_runners, build_attach_plan,
82    format_attach_result_as_links_notation, AttachPlan, AttachResultFields, ExecutionAttachResult,
83    InteractiveRunner, SystemInteractiveRunner,
84};
85pub use execution_control::{
86    collect_descendant_pids, collect_descendant_pids_with_runner, collect_process_ids,
87    collect_process_ids_with_runner, control_execution, control_execution_with_runner,
88    format_control_result_as_links_notation, get_control_command, parse_screen_pid,
89    CommandRunOutput, CommandRunner, ControlAction, ControlCommand, ExecutionControlResult,
90    SystemCommandRunner,
91};
92pub use execution_resume::{
93    build_resume_plan, build_resumed_session_name, build_snapshot_image_name, resume_execution,
94    resume_execution_with, ExecutionResumeResult, ResumeHooks, ResumeMode, ResumePlan,
95    ResumeResultFields, SystemResumeHooks,
96};
97pub use execution_resume_all::{
98    format_resume_all, resume_all_executions, resume_all_executions_with, ExecutionResumeAllResult,
99    ResumeAllAction, ResumeAllEntry,
100};
101pub use execution_store::{
102    is_clink_installed, CleanupOptions, CleanupResult, ExecutionRecord, ExecutionRecordOptions,
103    ExecutionStats, ExecutionStatus, ExecutionStore, ExecutionStoreOptions,
104};
105pub use exit_reason::{
106    describe_exit_code, describe_exit_code_str, detect_exit_reason, resolve_exit_reason,
107    signal_name_for_exit_code, ExitCodeDescription,
108};
109pub use failure_handler::{handle_failure, Config as FailureConfig};
110pub use isolation::{
111    append_log_file, build_command_string, build_command_string_with, build_display_command,
112    build_shell_with_args_cmd_args, command_name, create_log_footer, create_log_header,
113    create_log_path, create_log_path_for_execution, docker_image_exists, docker_pull_image,
114    get_default_docker_image, get_timestamp, is_command_available, is_interactive_shell_command,
115    is_shell_invocation_with_args, quote_shell_arg, quote_shell_arg_with, run_as_isolated_user,
116    run_isolated, split_shell_words, split_shell_words_with, to_shell_words, write_log_file,
117    IsolationOptions, IsolationResult, LogHeaderParams, ShellQuotingStyle,
118};
119pub use isolation_metadata::{
120    build_isolation_options_map, docker_runtime_metadata, docker_runtime_status_lines,
121    docker_runtime_status_lines_for_options,
122};
123pub use log_uploader::upload_execution_log;
124#[allow(deprecated)]
125pub use output_blocks::{
126    // Timeline format API (formerly "status spine")
127    create_command_line,
128    create_empty_spine_line, // deprecated, use create_empty_timeline_line
129    create_empty_timeline_line,
130    create_finish_block,
131    create_spine_line, // deprecated, use create_timeline_line
132    create_start_block,
133    create_timeline_line,
134    create_timeline_separator,
135    create_virtual_command_block,
136    create_virtual_command_result,
137    escape_for_links_notation,
138    format_duration,
139    format_value_for_links_notation,
140    generate_isolation_lines,
141    get_result_marker,
142    parse_isolation_metadata,
143    FinishBlockOptions,
144    IsolationMetadata,
145    StartBlockOptions,
146    FAILURE_MARKER,
147    SPINE, // deprecated, use TIMELINE_MARKER
148    SUCCESS_MARKER,
149    TIMELINE_MARKER,
150};
151pub use query_commands::{dispatch_query_command, handle_cleanup, report_result, QueryOutcome};
152pub use session_probe::{probe_session, SessionProbe, SessionState};
153pub use signal_handler::{
154    clear_current_execution, get_signal_exit_code, set_current_execution, setup_signal_handlers,
155    was_signal_received,
156};
157pub use status_footer::{
158    parse_footer_from_tail, parse_footer_timestamp, read_footer_from_log, LogFooter,
159};
160pub use status_formatter::{
161    attach_current_time, enrich_detached_status, format_record, format_record_as_links_notation,
162    format_record_as_links_notation_with_current_time, format_record_as_text,
163    format_record_as_text_with_current_time, format_record_list,
164    format_record_list_as_links_notation, format_record_list_as_text,
165    format_record_with_current_time, list_executions, list_executions_filtered, query_status,
166    read_exit_code_from_log, StatusQueryResult,
167};
168pub use status_probe::is_detached_session_alive;
169pub use substitution::{process_command, ProcessOptions, SubstitutionResult};
170pub use usage::print_usage;
171pub use user_manager::{
172    create_isolated_user, delete_user, get_current_user, get_current_user_groups, has_sudo_access,
173    CreateIsolatedUserOptions, DeleteUserOptions, UserOperationResult,
174};