1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
[]
= "running-process"
= true
= true
= true
= true
= true
= true
= "Subprocess and PTY runtime for the running-process project"
[]
# Phase 0 of #228: pick up the workspace-wide `disallowed_methods =
# "deny"` so bincode serialization is rejected at compile time.
= true
[[]]
# Wave 4 of #165: PM2-style supervisor CLI absorbed from
# `running-process-client`. Requires the `client` feature for IPC deps.
= "runpm"
= "src/bin/runpm.rs"
= ["client"]
[[]]
# Wave 5 of #165: daemon binary absorbed from `running-process-daemon`.
# Requires the heavy `daemon` feature (tokio, sqlite, etc.).
= "running-process-daemon"
= "src/bin/daemon.rs"
= ["daemon"]
[[]]
# Wave 6 of #165: tiny launcher binary absorbed from the
# `daemon-trampoline` crate. Reads a sidecar JSON file and execs the
# target command. No required-features — uses only serde/serde_json
# (promoted to unconditional deps below) plus libc + winapi which
# the lib already pulls in.
= "daemon-trampoline"
= "src/bin/trampoline.rs"
[[]]
= "running-process-cleanup"
= "src/bin/running-process-cleanup.rs"
= ["client"]
[[]]
= "running-process-broker-v1"
= "src/bin/running-process-broker-v1.rs"
= ["daemon"]
# v2 broker binary scaffold (slice 3a of #483). Pure print-and-exit
# scaffold today; subsequent slices add the pipe acceptor and Hello
# handler. Gated on `client` (not `daemon`) — v2 is a per-program proxy
# that doesn't need the full daemon runtime.
[[]]
= "running-process-broker-v2"
= "src/bin/running-process-broker-v2.rs"
= ["client"]
[[]]
# Dev-only evidence harness for #387: deploys the real broker binary plus
# a separate backend process and measures the opt-in handle-passing
# handoff against the reconnect fallback. Never shipped; see
# docs/v1-handoff-optimization.md for the recorded numbers.
= "handoff_rollout_evidence"
= ["client"]
[]
# Final feature scheme per #165:
# * `core` — always-available API (spawn / pty / containment).
# * `client` — adds proto types + IPC client (prost, interprocess, dirs).
# * `telemetry` — tee sink primitives without the full daemon runtime.
# * `daemon` — superset of client; adds the full daemon runtime
# (tokio, rusqlite, tracing, etc.).
# Default ships `client` so `cargo install running-process` installs
# the `runpm` binary out of the box (per Q1 resolution in #165:
# `required-features` are not auto-activated by cargo install).
= ["client"]
= []
= []
= [
"dep:prost", "dep:prost-types", "dep:interprocess", "dep:dirs",
"dep:anyhow", "dep:clap", "dep:blake3", "dep:sha2", "dep:getrandom",
# #445: Windows-only sidecar self-acquisition. These deps live under
# `[target.'cfg(windows)'.dependencies]` so enabling the feature on
# non-Windows targets is a cargo-level no-op for them.
"dep:ureq", "dep:zstd", "dep:tar",
# Phase 5 of #222 (#428): the `runpm` CLI parses `runpm.toml` batch
# config files (`[[app]]` entries). The TOML parsing helpers live
# in `src/runpm_config.rs` and are exercised by both the binary
# and the integration tests, so `toml` is gated on `client` rather
# than `daemon`. The `daemon` feature still composes `client`, so
# the daemon-side `src/daemon/config.rs` autostart loader picks up
# the same dep transitively.
"dep:toml",
]
# Opt-in async client surface for tokio daemons (#414). Adds async
# variants of `BackendHandle::probe_with_service` and `FrameClient`
# on top of the existing blocking surface. The synchronous probe and
# frame wire is the wire-of-record; the async layer wraps each
# round-trip in `tokio::task::spawn_blocking` so the caller's task
# yields the runtime worker thread without us duplicating the v1
# wire against `AsyncRead`/`AsyncWrite`. That keeps the tokio
# footprint minimal — only `rt` + `time` are required.
= [
"client",
"dep:tokio",
]
= [
"client",
"client-async",
"interprocess/tokio",
"dep:tokio", "dep:tokio-util", "dep:bytes", "dep:futures-util",
"tokio/full",
"dep:tracing", "dep:tracing-subscriber",
"dep:rusqlite",
]
= [] # used by running-process-py for cwd-tagging
# #433 R4: opt-in test seam. Gates the `RUNNING_PROCESS_FAKE_BACKEND` backdoor
# inside `connect_to_backend`. OFF by default and never listed by production
# consumers, so the backdoor is physically absent from every shipped build.
# Enabled only by the crate's own test pass (see `ci/test.py`).
= ["client"]
# #415: consumer-consumable conformance test kit
# (`crate::test_support::conformance`). Off by default; consumers opt in
# from their `dev-dependencies`.
= ["client"]
[]
= "0.2"
= "0.9"
= "0.30"
= { = true }
= { = "0.3", = ["errhandlingapi", "fileapi", "handleapi", "ioapiset", "jobapi2", "namedpipeapi", "processthreadsapi", "winnt", "minwindef", "windef", "winuser", "consoleapi", "processenv", "synchapi", "winbase", "wincon", "tlhelp32", "securitybaseapi", "winerror", "sysinfoapi"] }
# Wave 4 of #165: client-feature deps. All optional so the always-on
# `core` API stays a minimal-dep leaf.
= { = "0.14", = true }
= { = "0.14", = true }
= { = "2", = true }
= { = "6", = true }
# Used by the `runpm` PM2-style supervisor CLI (src/bin/runpm.rs).
= { = "1", = true }
= { = "4", = ["derive"], = true }
# Phase 1 of #228 (issue #230): broker user-SID hashing in
# `src/broker/lifecycle/sid.rs`. blake3 is small (no_std-capable,
# no transitive deps beyond `arrayref`/`arrayvec` and `cc`-built SIMD).
= { = "1", = true }
= { = "0.10", = true }
= { = "0.4", = true }
# Wave 5 of #165: daemon-feature deps. All optional.
# tokio: `client-async` (#414) only needs the `rt` (spawn_blocking)
# and `time` (`tokio::time::timeout`) features; the `daemon` feature
# layers `tokio/full` on top below. Cargo unifies feature sets, so
# any consumer enabling both ends up with the daemon footprint
# exactly as before.
= { = "1", = false, = ["rt", "time"], = true }
= { = "0.7", = ["codec"], = true }
= { = "1", = true }
= { = "0.3", = ["sink"], = true }
= { = "0.1", = true }
= { = "0.3", = ["env-filter"], = true }
= { = true, = true }
= { = "0.8", = true }
# Wave 6 of #165: serde / serde_json promoted from daemon-feature
# optional to unconditional so the `daemon-trampoline` binary (which
# does not need the full daemon runtime) can deserialize its sidecar
# JSON without forcing `--features daemon`. They were already pulled
# in transitively under the daemon path; this just makes them always
# present.
= { = "1", = ["derive"] }
= "1"
[]
# Wave 3 of #165: build.rs absorbed from `running-process-proto`.
# Compiles proto/daemon.proto into OUT_DIR.
= "0.14"
= "0.9"
# #447: build.rs parses `conpty-sidecar.sha256.toml` (at workspace root)
# to bake the per-arch SHA-256 verification table into the crate at
# compile time. The runtime then verifies the fetched sidecar against
# the table before decompression.
= "0.8"
[]
# Platform-default service-definition dir tests (#386) assert against
# the same `dirs` resolution the loader uses, not hardcoded strings.
= "6"
= "1"
= "3"
= { = "../test-watchdog" }
# Slice 33 of #500: trybuild UI harness assertions on the
# `BrokeredBackend` trait (#497) — every documented misuse pattern
# gets its own compile-fail case under `tests/ui/`.
= "1"
# #150: ConPTY passthrough rewrite uses windows-sys directly for the
# new conpty_passthrough module. Kept alongside (not replacing) the
# existing winapi 0.3 dep because the rest of the crate's Windows
# call sites are on winapi and migrating them is out of scope.
# windows-sys 0.59 exposes CreatePseudoConsole / ResizePseudoConsole /
# ClosePseudoConsole + PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE directly.
[]
= { = "0.59", = [
"Win32_Foundation",
"Win32_Security",
"Win32_Security_Authorization",
"Win32_Storage_FileSystem",
"Win32_System_Console",
"Win32_System_IO",
"Win32_System_LibraryLoader",
"Win32_System_Memory",
"Win32_System_Pipes",
"Win32_System_Registry",
"Win32_System_Threading",
"Win32_System_Diagnostics_Debug",
] }
# #445: transparent Win10 ConPTY sidecar self-acquisition. The runtime
# fetches a per-arch zstd-19 compressed tarball from this crate's
# matching GitHub release on first ConPTY use, caches it, and loads
# `conpty.dll` from there. Gated optional and pulled in by the `client`
# feature (which also enables `dirs` for cache-path discovery). ureq
# uses rustls so we don't drag in a C OpenSSL build on Windows.
= { = "2", = false, = ["tls"], = true }
= { = "0.13", = false, = true }
= { = "0.4", = false, = true }
# Wave 5 of #165: extra dev-deps absorbed from `running-process-daemon`
# for its windows-only and unix-only integration tests.
[]
= { = "0.3", = ["handleapi", "processthreadsapi", "winnt"] }