running-process 4.0.0__tar.gz → 4.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. {running_process-4.0.0 → running_process-4.0.2}/Cargo.lock +24 -14
  2. {running_process-4.0.0 → running_process-4.0.2}/Cargo.toml +1 -1
  3. {running_process-4.0.0 → running_process-4.0.2}/PKG-INFO +28 -7
  4. {running_process-4.0.0 → running_process-4.0.2}/README.md +27 -6
  5. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/Cargo.toml +23 -2
  6. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/proto/daemon.proto +83 -0
  7. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/client.rs +6 -0
  8. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/mod.rs +6 -0
  9. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/pty_session.rs +6 -0
  10. running_process-4.0.2/crates/running-process/src/client/telemetry.rs +264 -0
  11. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/console_detect.rs +3 -0
  12. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/containment.rs +2 -0
  13. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/attach_stream.rs +67 -6
  14. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/mod.rs +4 -0
  15. running_process-4.0.2/crates/running-process/src/daemon/handlers/telemetry.rs +403 -0
  16. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers_tests.rs +193 -2
  17. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/mod.rs +1 -0
  18. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/pipe_attach_stream.rs +67 -0
  19. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/pipe_sessions.rs +227 -0
  20. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/pty_sessions.rs +166 -4
  21. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/runtime_gc.rs +97 -0
  22. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/server.rs +22 -6
  23. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/shadow.rs +73 -0
  24. running_process-4.0.2/crates/running-process/src/daemon/telemetry.rs +937 -0
  25. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/lib.rs +82 -2
  26. running_process-4.0.2/crates/running-process/src/pty/backend.rs +405 -0
  27. running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/child.rs +93 -0
  28. running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/mod.rs +474 -0
  29. running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/pipes.rs +79 -0
  30. running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/proc_thread_attr.rs +102 -0
  31. running_process-4.0.2/crates/running-process/src/pty/conpty_passthrough/pseudoconsole.rs +100 -0
  32. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/mod.rs +29 -4
  33. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/native_pty_process.rs +48 -40
  34. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/pty_posix.rs +5 -2
  35. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/spawn_imp_unix.rs +8 -0
  36. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/spawn_imp_windows.rs +5 -0
  37. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/types.rs +10 -0
  38. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_autostart_test.rs +1 -0
  39. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_backlog_accumulation_test.rs +1 -0
  40. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_cross_process_pty_attach_test.rs +36 -11
  41. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_fast_ctrl_c_handoff_test.rs +1 -0
  42. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/main.rs +1 -0
  43. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_non_tty_attach_test.rs +1 -0
  44. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_pipe_session_attach_test.rs +76 -0
  45. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_pty_session_attach_test.rs +1 -0
  46. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_resize_rpc_test.rs +1 -0
  47. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_runpm_service_stubs.rs +1 -0
  48. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_sessions_bulk_ops_test.rs +1 -0
  49. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_sessions_log_test.rs +1 -0
  50. running_process-4.0.2/crates/running-process/tests/daemon_tee_ring_test.rs +337 -0
  51. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_termination_outcome_test.rs +1 -0
  52. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_tree_kill_test.rs +1 -0
  53. running_process-4.0.2/crates/running-process/tests/daemon_tui_repaint_test.rs +206 -0
  54. running_process-4.0.2/crates/running-process/tests/interactive_pty_session_test.rs +171 -0
  55. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/originator_test.rs +15 -1
  56. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/process_core_test.rs +79 -2
  57. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/pty_conhost_job_test.rs +11 -0
  58. running_process-4.0.2/crates/running-process/tests/pty_master_public_api_test.rs +93 -0
  59. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/Cargo.toml +1 -1
  60. {running_process-4.0.0 → running_process-4.0.2}/pyproject.toml +1 -1
  61. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/__init__.py +1 -1
  62. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/cli.py +5 -0
  63. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_idle_waiter.py +5 -1
  64. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_classmethod_api.py +5 -0
  65. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_wait_methods.py +7 -0
  66. {running_process-4.0.0 → running_process-4.0.2}/LICENSE +0 -0
  67. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/build.rs +0 -0
  68. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/bin/daemon.rs +0 -0
  69. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/bin/runpm.rs +0 -0
  70. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/bin/trampoline.rs +0 -0
  71. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/paths.rs +0 -0
  72. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/client/pipe_session.rs +0 -0
  73. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/config.rs +0 -0
  74. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/core.rs +0 -0
  75. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/kill.rs +0 -0
  76. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/maintenance.rs +0 -0
  77. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/pipe_sessions_handlers.rs +0 -0
  78. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/process_tree.rs +0 -0
  79. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/pty_sessions_handlers.rs +0 -0
  80. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/registry_handlers.rs +0 -0
  81. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/services.rs +0 -0
  82. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/spawn.rs +0 -0
  83. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/handlers/util.rs +0 -0
  84. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/idle.rs +0 -0
  85. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/platform/mod.rs +0 -0
  86. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/platform/unix.rs +0 -0
  87. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/platform/windows.rs +0 -0
  88. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/reaper.rs +0 -0
  89. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/daemon/registry.rs +0 -0
  90. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/helpers.rs +0 -0
  91. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/originator.rs +0 -0
  92. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/pty_windows.rs +0 -0
  93. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/pty/terminal_input.rs +0 -0
  94. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/public_symbols.rs +0 -0
  95. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/rust_debug.rs +0 -0
  96. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/spawn.rs +0 -0
  97. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/tests.rs +0 -0
  98. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/unix.rs +0 -0
  99. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/src/windows.rs +0 -0
  100. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/containment_test.rs +0 -0
  101. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/compiler_wrap_seam_test.rs +0 -0
  102. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/env_replace_test.rs +0 -0
  103. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/more_tests.rs +0 -0
  104. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/daemon_integration/stdout_seam_test.rs +0 -0
  105. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/fs_adversarial_test.rs +0 -0
  106. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process/tests/spawn_test.rs +0 -0
  107. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/containment.rs +0 -0
  108. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/daemon_client.rs +0 -0
  109. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/debug_traces.rs +0 -0
  110. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/helpers.rs +0 -0
  111. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/idle_detector.rs +0 -0
  112. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/lib.rs +0 -0
  113. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/metrics.rs +0 -0
  114. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/originator.rs +0 -0
  115. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/pid_tracking.rs +0 -0
  116. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/priority.rs +0 -0
  117. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/process.rs +0 -0
  118. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/process_tree.rs +0 -0
  119. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/pty_buffer.rs +0 -0
  120. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/pty_process.rs +0 -0
  121. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/public_symbols.rs +0 -0
  122. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/py_native_process.rs +0 -0
  123. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/registry.rs +0 -0
  124. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/signal_bool.rs +0 -0
  125. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/terminal_input.rs +0 -0
  126. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/control_churn.rs +0 -0
  127. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/expect_match.rs +0 -0
  128. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/idle_detector.rs +0 -0
  129. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/mod.rs +0 -0
  130. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/parse_command.rs +0 -0
  131. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/process_tree.rs +0 -0
  132. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/pty_buffer.rs +0 -0
  133. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/pty_process.rs +0 -0
  134. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/registry.rs +0 -0
  135. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/signal_bool.rs +0 -0
  136. {running_process-4.0.0 → running_process-4.0.2}/crates/running-process-py/src/tests/terminal_input.rs +0 -0
  137. {running_process-4.0.0 → running_process-4.0.2}/crates/test-watchdog/Cargo.toml +0 -0
  138. {running_process-4.0.0 → running_process-4.0.2}/crates/test-watchdog/src/lib.rs +0 -0
  139. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/assets/example.txt +0 -0
  140. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/command_render.py +0 -0
  141. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/compat.py +0 -0
  142. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/console_encoding.py +0 -0
  143. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/daemon.py +0 -0
  144. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/dashboard.py +0 -0
  145. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/exit_status.py +0 -0
  146. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/expect.py +0 -0
  147. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/interrupt_handler.py +0 -0
  148. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/launch.py +0 -0
  149. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/line_iterator.py +0 -0
  150. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/output_formatter.py +0 -0
  151. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/priority.py +0 -0
  152. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/process_utils.py +0 -0
  153. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/processor_cli.py +0 -0
  154. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/__init__.py +0 -0
  155. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_command.py +0 -0
  156. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_console_io.py +0 -0
  157. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_errors.py +0 -0
  158. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_idle_helpers.py +0 -0
  159. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_idle_state.py +0 -0
  160. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_interactive.py +0 -0
  161. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_process_helpers.py +0 -0
  162. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pseudo_terminal.py +0 -0
  163. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_expect.py +0 -0
  164. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_input_relay.py +0 -0
  165. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_reader.py +0 -0
  166. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_pty_wait_for.py +0 -0
  167. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_terminal_strip.py +0 -0
  168. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_types.py +0 -0
  169. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/pty/_wait_input.py +0 -0
  170. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/__init__.py +0 -0
  171. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_core.py +0 -0
  172. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_helpers.py +0 -0
  173. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_iter.py +0 -0
  174. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_subprocess.py +0 -0
  175. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process/_types.py +0 -0
  176. {running_process-4.0.0 → running_process-4.0.2}/src/running_process/running_process_manager.py +0 -0
@@ -59,7 +59,7 @@ version = "1.1.5"
59
59
  source = "registry+https://github.com/rust-lang/crates.io-index"
60
60
  checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc"
61
61
  dependencies = [
62
- "windows-sys",
62
+ "windows-sys 0.61.2",
63
63
  ]
64
64
 
65
65
  [[package]]
@@ -70,7 +70,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d"
70
70
  dependencies = [
71
71
  "anstyle",
72
72
  "once_cell_polyfill",
73
- "windows-sys",
73
+ "windows-sys 0.61.2",
74
74
  ]
75
75
 
76
76
  [[package]]
@@ -226,7 +226,7 @@ dependencies = [
226
226
  "libc",
227
227
  "option-ext",
228
228
  "redox_users",
229
- "windows-sys",
229
+ "windows-sys 0.61.2",
230
230
  ]
231
231
 
232
232
  [[package]]
@@ -260,7 +260,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
260
260
  checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
261
261
  dependencies = [
262
262
  "libc",
263
- "windows-sys",
263
+ "windows-sys 0.61.2",
264
264
  ]
265
265
 
266
266
  [[package]]
@@ -461,7 +461,7 @@ dependencies = [
461
461
  "recvmsg",
462
462
  "tokio",
463
463
  "widestring",
464
- "windows-sys",
464
+ "windows-sys 0.61.2",
465
465
  ]
466
466
 
467
467
  [[package]]
@@ -632,7 +632,7 @@ checksum = "50b7e5b27aa02a74bac8c3f23f448f8d87ff11f92d3aac1a6ed369ee08cc56c1"
632
632
  dependencies = [
633
633
  "libc",
634
634
  "wasi",
635
- "windows-sys",
635
+ "windows-sys 0.61.2",
636
636
  ]
637
637
 
638
638
  [[package]]
@@ -668,7 +668,7 @@ version = "0.50.3"
668
668
  source = "registry+https://github.com/rust-lang/crates.io-index"
669
669
  checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5"
670
670
  dependencies = [
671
- "windows-sys",
671
+ "windows-sys 0.61.2",
672
672
  ]
673
673
 
674
674
  [[package]]
@@ -1026,7 +1026,7 @@ checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
1026
1026
 
1027
1027
  [[package]]
1028
1028
  name = "running-process"
1029
- version = "4.0.0"
1029
+ version = "4.0.2"
1030
1030
  dependencies = [
1031
1031
  "anyhow",
1032
1032
  "bytes",
@@ -1053,11 +1053,12 @@ dependencies = [
1053
1053
  "tracing",
1054
1054
  "tracing-subscriber",
1055
1055
  "winapi",
1056
+ "windows-sys 0.59.0",
1056
1057
  ]
1057
1058
 
1058
1059
  [[package]]
1059
1060
  name = "running-process-py"
1060
- version = "4.0.0"
1061
+ version = "4.0.2"
1061
1062
  dependencies = [
1062
1063
  "interprocess",
1063
1064
  "libc",
@@ -1102,7 +1103,7 @@ dependencies = [
1102
1103
  "errno",
1103
1104
  "libc",
1104
1105
  "linux-raw-sys",
1105
- "windows-sys",
1106
+ "windows-sys 0.61.2",
1106
1107
  ]
1107
1108
 
1108
1109
  [[package]]
@@ -1183,7 +1184,7 @@ checksum = "9eb6ea5562eeaed6936b8b54e086aa0f88b9e5b1bef45beb038e2519fa1185b1"
1183
1184
  dependencies = [
1184
1185
  "cfg-if",
1185
1186
  "libc",
1186
- "windows-sys",
1187
+ "windows-sys 0.61.2",
1187
1188
  ]
1188
1189
 
1189
1190
  [[package]]
@@ -1246,7 +1247,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
1246
1247
  checksum = "3a766e1110788c36f4fa1c2b71b387a7815aa65f88ce0229841826633d93723e"
1247
1248
  dependencies = [
1248
1249
  "libc",
1249
- "windows-sys",
1250
+ "windows-sys 0.61.2",
1250
1251
  ]
1251
1252
 
1252
1253
  [[package]]
@@ -1297,7 +1298,7 @@ dependencies = [
1297
1298
  "getrandom 0.4.2",
1298
1299
  "once_cell",
1299
1300
  "rustix",
1300
- "windows-sys",
1301
+ "windows-sys 0.61.2",
1301
1302
  ]
1302
1303
 
1303
1304
  [[package]]
@@ -1375,7 +1376,7 @@ dependencies = [
1375
1376
  "signal-hook-registry",
1376
1377
  "socket2",
1377
1378
  "tokio-macros",
1378
- "windows-sys",
1379
+ "windows-sys 0.61.2",
1379
1380
  ]
1380
1381
 
1381
1382
  [[package]]
@@ -1663,6 +1664,15 @@ version = "0.2.1"
1663
1664
  source = "registry+https://github.com/rust-lang/crates.io-index"
1664
1665
  checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
1665
1666
 
1667
+ [[package]]
1668
+ name = "windows-sys"
1669
+ version = "0.59.0"
1670
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1671
+ checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
1672
+ dependencies = [
1673
+ "windows-targets",
1674
+ ]
1675
+
1666
1676
  [[package]]
1667
1677
  name = "windows-sys"
1668
1678
  version = "0.61.2"
@@ -3,7 +3,7 @@ resolver = "2"
3
3
  members = ["crates/running-process", "crates/running-process-py", "crates/test-watchdog"]
4
4
 
5
5
  [workspace.package]
6
- version = "4.0.0"
6
+ version = "4.0.2"
7
7
  edition = "2021"
8
8
  rust-version = "1.85"
9
9
  license = "BSD-3-Clause"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: running_process
3
- Version: 4.0.0
3
+ Version: 4.0.2
4
4
  License-File: LICENSE
5
5
  Summary: A Rust-backed subprocess wrapper with split stdout/stderr streaming
6
6
  Home-Page: https://github.com/zackees/running-process
@@ -200,6 +200,11 @@ PTY behavior:
200
200
 
201
201
  There is also a compatibility alias: `RunningProcess.psuedo_terminal(...)`.
202
202
 
203
+ Rust consumers should make the same transport choice explicitly: use
204
+ `NativeProcess` for one-shot noninteractive work and
205
+ `InteractivePtySession` / `NativePtyProcess` only for real terminal sessions.
206
+ See [Rust PTY guidance](docs/RUST_PTY.md).
207
+
203
208
  You can also inspect the intended interactive launch semantics without launching a child:
204
209
 
205
210
  ```python
@@ -283,7 +288,7 @@ PTY mode is intentionally more conservative:
283
288
  ./test
284
289
  ```
285
290
 
286
- `./install` bootstraps `rustup` into the shared user locations (`~/.cargo` and `~/.rustup`, or `CARGO_HOME` / `RUSTUP_HOME` if you override them), then installs the exact toolchain pinned in `rust-toolchain.toml`. Toolchain installs are serialized with a lock so concurrent repo bootstraps do not race the same shared version.
291
+ `./install` bootstraps `rustup` into the shared user locations (`~/.cargo` and `~/.rustup`, or `CARGO_HOME` / `RUSTUP_HOME` if you override them), then installs the exact toolchain pinned in `rust-toolchain.toml`. Toolchain installs are serialized with a lock so concurrent repo bootstraps do not race the same shared version. Rust build commands run through `uvx soldr`, so there is no separate `soldr` install step to maintain.
287
292
 
288
293
  `./lint` applies `cargo fmt` and Ruff autofixes before running the remaining lint checks, so fixable issues are rewritten in place.
289
294
 
@@ -291,16 +296,32 @@ PTY mode is intentionally more conservative:
291
296
 
292
297
  On local developer machines, `./test` also runs the Linux Docker preflight so Windows and macOS development catches Linux wheel, lint, and non-live pytest regressions before push. GitHub-hosted Actions skip that Docker-only preflight and run the native platform suite directly.
293
298
 
294
- If you want to invoke pytest directly, set `RUNNING_PROCESS_LIVE_TESTS=1` and run `uv run pytest -m live`.
299
+ For a live-only test run with the timeout crash watchdog and automatic thread
300
+ dumps still enabled, use:
295
301
 
296
- For direct Rust commands, prefer the repo trampolines, which prepend the shared `rustup` proxy location:
302
+ ```bash
303
+ uv run -m ci.test --live-only
304
+ ```
305
+
306
+ For a narrower live-only selection, pass pytest targets and selectors through
307
+ the same entrypoint:
297
308
 
298
309
  ```bash
299
- ./_cargo check --workspace
300
- ./_cargo fmt --all --check
301
- ./_cargo clippy --workspace --all-targets -- -D warnings
310
+ uv run -m ci.test --live-only tests/test_pty_support.py interrupt
302
311
  ```
303
312
 
313
+ For direct Cargo build commands, use `uvx soldr` directly:
314
+
315
+ ```bash
316
+ uvx soldr cargo check --workspace
317
+ uvx soldr cargo test --workspace
318
+ uvx soldr cargo package -p running-process --no-verify
319
+ ```
320
+
321
+ Keep `maturin`, `cargo fmt`, and `cargo clippy` on their normal entrypoints.
322
+ This repo's high-level scripts already choose the compatible path for those
323
+ tools.
324
+
304
325
  On Windows, native rebuilds that compile bundled C code should run from a Visual Studio developer shell. When the environment is ambiguous, point `maturin` at the MSVC toolchain binaries directly rather than relying on the generic cargo proxy.
305
326
 
306
327
  For local extension rebuilds, prefer:
@@ -186,6 +186,11 @@ PTY behavior:
186
186
 
187
187
  There is also a compatibility alias: `RunningProcess.psuedo_terminal(...)`.
188
188
 
189
+ Rust consumers should make the same transport choice explicitly: use
190
+ `NativeProcess` for one-shot noninteractive work and
191
+ `InteractivePtySession` / `NativePtyProcess` only for real terminal sessions.
192
+ See [Rust PTY guidance](docs/RUST_PTY.md).
193
+
189
194
  You can also inspect the intended interactive launch semantics without launching a child:
190
195
 
191
196
  ```python
@@ -269,7 +274,7 @@ PTY mode is intentionally more conservative:
269
274
  ./test
270
275
  ```
271
276
 
272
- `./install` bootstraps `rustup` into the shared user locations (`~/.cargo` and `~/.rustup`, or `CARGO_HOME` / `RUSTUP_HOME` if you override them), then installs the exact toolchain pinned in `rust-toolchain.toml`. Toolchain installs are serialized with a lock so concurrent repo bootstraps do not race the same shared version.
277
+ `./install` bootstraps `rustup` into the shared user locations (`~/.cargo` and `~/.rustup`, or `CARGO_HOME` / `RUSTUP_HOME` if you override them), then installs the exact toolchain pinned in `rust-toolchain.toml`. Toolchain installs are serialized with a lock so concurrent repo bootstraps do not race the same shared version. Rust build commands run through `uvx soldr`, so there is no separate `soldr` install step to maintain.
273
278
 
274
279
  `./lint` applies `cargo fmt` and Ruff autofixes before running the remaining lint checks, so fixable issues are rewritten in place.
275
280
 
@@ -277,16 +282,32 @@ PTY mode is intentionally more conservative:
277
282
 
278
283
  On local developer machines, `./test` also runs the Linux Docker preflight so Windows and macOS development catches Linux wheel, lint, and non-live pytest regressions before push. GitHub-hosted Actions skip that Docker-only preflight and run the native platform suite directly.
279
284
 
280
- If you want to invoke pytest directly, set `RUNNING_PROCESS_LIVE_TESTS=1` and run `uv run pytest -m live`.
285
+ For a live-only test run with the timeout crash watchdog and automatic thread
286
+ dumps still enabled, use:
281
287
 
282
- For direct Rust commands, prefer the repo trampolines, which prepend the shared `rustup` proxy location:
288
+ ```bash
289
+ uv run -m ci.test --live-only
290
+ ```
291
+
292
+ For a narrower live-only selection, pass pytest targets and selectors through
293
+ the same entrypoint:
283
294
 
284
295
  ```bash
285
- ./_cargo check --workspace
286
- ./_cargo fmt --all --check
287
- ./_cargo clippy --workspace --all-targets -- -D warnings
296
+ uv run -m ci.test --live-only tests/test_pty_support.py interrupt
288
297
  ```
289
298
 
299
+ For direct Cargo build commands, use `uvx soldr` directly:
300
+
301
+ ```bash
302
+ uvx soldr cargo check --workspace
303
+ uvx soldr cargo test --workspace
304
+ uvx soldr cargo package -p running-process --no-verify
305
+ ```
306
+
307
+ Keep `maturin`, `cargo fmt`, and `cargo clippy` on their normal entrypoints.
308
+ This repo's high-level scripts already choose the compatible path for those
309
+ tools.
310
+
290
311
  On Windows, native rebuilds that compile bundled C code should run from a Visual Studio developer shell. When the environment is ambiguous, point `maturin` at the MSVC toolchain binaries directly rather than relying on the generic cargo proxy.
291
312
 
292
313
  For local extension rebuilds, prefer:
@@ -35,13 +35,15 @@ path = "src/bin/trampoline.rs"
35
35
  # Final feature scheme per #165:
36
36
  # * `core` — always-available API (spawn / pty / containment).
37
37
  # * `client` — adds proto types + IPC client (prost, interprocess, dirs).
38
- # * `daemon` — superset of client; adds the full daemon runtime
39
- # (tokio, rusqlite, tracing, etc.).
38
+ # * `telemetry` — tee sink primitives without the full daemon runtime.
39
+ # * `daemon` — superset of client; adds the full daemon runtime
40
+ # (tokio, rusqlite, tracing, etc.).
40
41
  # Default ships `client` so `cargo install running-process` installs
41
42
  # the `runpm` binary out of the box (per Q1 resolution in #165:
42
43
  # `required-features` are not auto-activated by cargo install).
43
44
  default = ["client"]
44
45
  core = []
46
+ telemetry = []
45
47
  client = ["dep:prost", "dep:prost-types", "dep:interprocess", "dep:dirs", "dep:anyhow", "dep:clap"]
46
48
  daemon = [
47
49
  "client",
@@ -96,6 +98,25 @@ serde_json = "1"
96
98
  tempfile = "3"
97
99
  test-watchdog = { path = "../test-watchdog" }
98
100
 
101
+ # #150: ConPTY passthrough rewrite uses windows-sys directly for the
102
+ # new conpty_passthrough module. Kept alongside (not replacing) the
103
+ # existing winapi 0.3 dep because the rest of the crate's Windows
104
+ # call sites are on winapi and migrating them is out of scope.
105
+ # windows-sys 0.59 exposes CreatePseudoConsole / ResizePseudoConsole /
106
+ # ClosePseudoConsole + PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE directly.
107
+ [target.'cfg(windows)'.dependencies]
108
+ windows-sys = { version = "0.59", features = [
109
+ "Win32_Foundation",
110
+ "Win32_Security",
111
+ "Win32_Storage_FileSystem",
112
+ "Win32_System_Console",
113
+ "Win32_System_IO",
114
+ "Win32_System_Memory",
115
+ "Win32_System_Pipes",
116
+ "Win32_System_Threading",
117
+ "Win32_System_Diagnostics_Debug",
118
+ ] }
119
+
99
120
  # Wave 5 of #165: extra dev-deps absorbed from `running-process-daemon`
100
121
  # for its windows-only and unix-only integration tests.
101
122
  [target.'cfg(windows)'.dev-dependencies]
@@ -63,6 +63,10 @@ enum RequestType {
63
63
  REQUEST_TYPE_BULK_TERMINATE_SESSIONS = 73;
64
64
  // Resize a PTY session without attaching (#130 M5 follow-up).
65
65
  REQUEST_TYPE_RESIZE_PTY_SESSION = 74;
66
+ // Optional daemon-owned tee telemetry (#131).
67
+ REQUEST_TYPE_REGISTER_SESSION_TEE = 75;
68
+ REQUEST_TYPE_UNREGISTER_SESSION_TEE = 76;
69
+ REQUEST_TYPE_GET_SESSION_TEE_STATUS = 77;
66
70
  }
67
71
 
68
72
  enum StatusCode {
@@ -133,6 +137,9 @@ message DaemonRequest {
133
137
  PurgeExitedSessionsRequest purge_exited_sessions = 72;
134
138
  BulkTerminateSessionsRequest bulk_terminate_sessions = 73;
135
139
  ResizePtySessionRequest resize_pty_session = 74;
140
+ RegisterSessionTeeRequest register_session_tee = 75;
141
+ UnregisterSessionTeeRequest unregister_session_tee = 76;
142
+ GetSessionTeeStatusRequest get_session_tee_status = 77;
136
143
  }
137
144
 
138
145
  message DaemonResponse {
@@ -177,6 +184,9 @@ message DaemonResponse {
177
184
  PurgeExitedSessionsResponse purge_exited_sessions = 72;
178
185
  BulkTerminateSessionsResponse bulk_terminate_sessions = 73;
179
186
  ResizePtySessionResponse resize_pty_session = 74;
187
+ RegisterSessionTeeResponse register_session_tee = 75;
188
+ UnregisterSessionTeeResponse unregister_session_tee = 76;
189
+ GetSessionTeeStatusResponse get_session_tee_status = 77;
180
190
  }
181
191
 
182
192
  // ---------------------------------------------------------------------------
@@ -763,6 +773,79 @@ message ResizePtySessionRequest {
763
773
  }
764
774
  message ResizePtySessionResponse {}
765
775
 
776
+ // ---------------------------------------------------------------------------
777
+ // Optional session tee telemetry (#131).
778
+ // ---------------------------------------------------------------------------
779
+
780
+ enum TeeSessionKind {
781
+ TEE_SESSION_KIND_UNSPECIFIED = 0;
782
+ TEE_SESSION_KIND_PTY = 1;
783
+ TEE_SESSION_KIND_PIPE = 2;
784
+ }
785
+
786
+ enum TeeStreamKind {
787
+ TEE_STREAM_KIND_UNSPECIFIED = 0;
788
+ TEE_STREAM_KIND_PTY_OUTPUT = 1;
789
+ TEE_STREAM_KIND_STDOUT = 2;
790
+ TEE_STREAM_KIND_STDERR = 3;
791
+ TEE_STREAM_KIND_STDIN = 4;
792
+ }
793
+
794
+ enum TeeSinkKind {
795
+ TEE_SINK_KIND_UNSPECIFIED = 0;
796
+ // Daemon opens the path and owns the file descriptor until the tee is
797
+ // removed or the session ends. Path bytes are OS-native, not UTF-8.
798
+ TEE_SINK_KIND_FILE = 1;
799
+ }
800
+
801
+ enum TeeFileMode {
802
+ TEE_FILE_MODE_APPEND = 0;
803
+ TEE_FILE_MODE_TRUNCATE = 1;
804
+ }
805
+
806
+ enum TeeBackpressure {
807
+ TEE_BACKPRESSURE_DROP_OLDEST = 0;
808
+ TEE_BACKPRESSURE_BLOCK = 1;
809
+ }
810
+
811
+ message RegisterSessionTeeRequest {
812
+ string session_id = 1;
813
+ TeeSessionKind session_kind = 2;
814
+ TeeStreamKind stream = 3;
815
+ TeeSinkKind sink_kind = 4;
816
+ // OS-native path bytes: Unix = OsStr bytes; Windows = little-endian UTF-16.
817
+ bytes file_path = 5;
818
+ TeeFileMode file_mode = 6;
819
+ // 0 means use the daemon default.
820
+ uint32 queue_capacity = 7;
821
+ // false means write missed-byte markers, matching the Rust default.
822
+ bool suppress_missed_markers = 8;
823
+ TeeBackpressure backpressure = 9;
824
+ }
825
+
826
+ message RegisterSessionTeeResponse {
827
+ uint64 tee_handle = 1;
828
+ }
829
+
830
+ message UnregisterSessionTeeRequest {
831
+ string session_id = 1;
832
+ TeeSessionKind session_kind = 2;
833
+ uint64 tee_handle = 3;
834
+ }
835
+ message UnregisterSessionTeeResponse {}
836
+
837
+ message GetSessionTeeStatusRequest {
838
+ string session_id = 1;
839
+ TeeSessionKind session_kind = 2;
840
+ uint64 tee_handle = 3;
841
+ }
842
+
843
+ message GetSessionTeeStatusResponse {
844
+ TeeStreamKind stream = 1;
845
+ uint64 missed_bytes = 2;
846
+ bool disconnected = 3;
847
+ }
848
+
766
849
  // Daemon -> client stream frame for an attached stdout/stderr.
767
850
  message PipeStreamFrame {
768
851
  oneof frame {
@@ -778,6 +778,12 @@ pub fn connect_or_start(scope_hash: Option<&str>) -> Result<DaemonClient, Client
778
778
  spawn_daemon()?;
779
779
 
780
780
  // Retry with exponential back-off.
781
+ //
782
+ // #199: intentional — the daemon binds its socket asynchronously
783
+ // after `spawn_daemon()` returns. There's no event the OS can
784
+ // signal us with when the socket is ready, so we poll. Exponential
785
+ // back-off (50→100→200→400ms) is the standard pattern; total
786
+ // wait caps at 750ms.
781
787
  let delays_ms: [u64; 4] = [50, 100, 200, 400];
782
788
  for delay in delays_ms {
783
789
  std::thread::sleep(std::time::Duration::from_millis(delay));
@@ -5,10 +5,12 @@
5
5
  //! previously imported from `running_process_client::*` keeps working
6
6
  //! when it switches to `running_process::client::*`.
7
7
 
8
+ #[allow(clippy::module_inception)]
8
9
  pub mod client;
9
10
  pub mod paths;
10
11
  pub mod pipe_session;
11
12
  pub mod pty_session;
13
+ pub mod telemetry;
12
14
 
13
15
  pub use client::{
14
16
  connect_or_start, daemonize_command, launch_detached, ClientError, DaemonClient,
@@ -16,3 +18,7 @@ pub use client::{
16
18
  };
17
19
  pub use pipe_session::{PipeSpawnRequest, PipeStreamAttachment, SpawnedPipeSession};
18
20
  pub use pty_session::{AttachError, PtyAttachment, PtySpawnRequest, SpawnedPtySession};
21
+ pub use telemetry::{
22
+ SessionTeeBackpressure, SessionTeeFileMode, SessionTeeFileRequest, SessionTeeKind,
23
+ SessionTeeStatus, SessionTeeStream,
24
+ };
@@ -370,6 +370,12 @@ impl PtyAttachment {
370
370
  return Ok(None);
371
371
  }
372
372
  // Sleep a small amount; the OS will buffer incoming data.
373
+ //
374
+ // #199: intentional — `interprocess::local_socket::Stream`
375
+ // lacks a portable peek/ready primitive on Windows. The
376
+ // 20ms poll is the documented fallback. Replacing with
377
+ // an event-based primitive would require a per-platform
378
+ // shim that the upstream crate doesn't expose.
373
379
  std::thread::sleep(Duration::from_millis(20));
374
380
  // Probe by peeking a single byte: read from reader will block,
375
381
  // so we use the BufReader.fill_buf trick by reading 0 bytes