Repository navigation
Expand file tree
/
Copy pathCargo.toml
More file actions
214 lines (208 loc) · 10.9 KB
/
Copy pathCargo.toml
File metadata and controls
214 lines (208 loc) · 10.9 KB
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
[workspace]
resolver = "3"
members = ["crates/*", "crates/runvil-internal/types", "crates/runvil-internal/engine", "crates/runvil-internal/lua", "crates/runvil-internal/prompt", "crates/runvil-internal/vfs", "crates/runvil-internal/model-client", "crates/workshop/desktop", "crates/workshop/server", "crates/workshop/server-api", "crates/workshop/gateway", "crates/workshop/gateway-discovery", "crates/workshop/menu", "crates/workshop/protocol", "crates/workshop/registry", "crates/workshop/status", "crates/workshop/support", "crates/workshop/user-state", "crates/workshop/workspace", "crates/workshop/run-log", "crates/workshop/agents", "crates/harness-internal/runner", "crates/harness-internal/plugin-loader", "crates/harness-internal/test-plugin"]
# crates/runvil-internal, crates/workshop, and crates/harness-internal
# are manifestless containers holding their families' private crates.
# Cargo prunes excluded subtrees from member globs, so a "crates/workshop/*"
# glob beside the exclude below would match nothing; the container crates
# are enumerated explicitly instead.
exclude = ["crates/runvil-internal", "crates/workshop", "crates/harness-internal"]
# Plain `cargo build`/`cargo test` build the Engine and its facades: they
# compile on a fresh macOS or Linux clone with no native toolkit, no
# CUDA, and no Tauri system packages. The desktop app is an explicit
# choice: `cargo build -p workshop`.
default-members = ["crates/runvil", "crates/runvil-plugin", "crates/harness", "crates/harness-gateway-client"]
[workspace.package]
version = "0.3.0"
edition = "2024"
# The Engine crates' floor, which CI's msrv job builds them at:
# `runvil-lua` calls the atomics' `try_update`, stable since 1.95.
rust-version = "1.95"
license = "BSL-1.0"
repository = "https://github.com/cppalliance/runvil"
[workspace.dependencies]
bytes = "1"
runvil = { path = "crates/runvil" }
runvil-engine = { path = "crates/runvil-internal/engine" }
runvil-plugin = { path = "crates/runvil-plugin" }
# The C Plugin contract, version 0.2, from its own repository, pinned by
# commit. `version` beside `git` keeps cargo-deny's wildcard check quiet.
runvil-plugin-sys = { version = "0.2.0", git = "https://github.com/cppalliance/runvil-plugin-api", rev = "63a2403761b925b1f52bcf361c97b4fb04c04d74" }
runvil-types = { path = "crates/runvil-internal/types" }
workshop-gateway-discovery = { path = "crates/workshop/gateway-discovery" }
shared-error-source = { path = "crates/shared-error-source" }
harness = { path = "crates/harness" }
harness-gateway-client = { path = "crates/harness-gateway-client" }
harness-runner = { path = "crates/harness-internal/runner" }
harness-plugin-loader = { path = "crates/harness-internal/plugin-loader" }
plugin-user-input = { path = "crates/plugin-user-input" }
plugin-web = { path = "crates/plugin-web" }
plugin-std = { path = "crates/plugin-std" }
plugin-mcp = { path = "crates/plugin-mcp" }
runvil-lua = { path = "crates/runvil-internal/lua" }
runvil-model-client = { path = "crates/runvil-internal/model-client" }
runvil-prompt = { path = "crates/runvil-internal/prompt" }
runvil-vfs = { path = "crates/runvil-internal/vfs" }
workshop-server = { path = "crates/workshop/server" }
workshop-server-api = { path = "crates/workshop/server-api" }
workshop-gateway = { path = "crates/workshop/gateway" }
workshop-menu = { path = "crates/workshop/menu" }
workshop-protocol = { path = "crates/workshop/protocol" }
workshop-status = { path = "crates/workshop/status" }
workshop-support = { path = "crates/workshop/support" }
workshop-registry = { path = "crates/workshop/registry" }
workshop-workspace = { path = "crates/workshop/workspace" }
workshop-run-log = { path = "crates/workshop/run-log" }
workshop-agents = { path = "crates/workshop/agents" }
workshop-user-state = { path = "crates/workshop/user-state" }
# default-features off: both users (the parser and build-xtask's doctest
# scan) read only the core event stream, never the `html` renderer or the
# `getopts` binary.
pulldown-cmark = { version = "0.12", default-features = false }
serde = { version = "1", features = ["derive"] }
serde_yaml_ng = "0.10"
# `float_roundtrip` makes `from_str` reproduce the exact `f64` that
# `to_string` printed, so a payload the run log stores reads back bit-for-bit.
serde_json = { version = "1", features = ["float_roundtrip"] }
# 0.13 rather than 0.12 so the tree links exactly one rustls crypto backend:
# aws-lc-rs, the one Tauri already selects. 0.13 has no `ring`
# option, so a bump cannot re-enable it; CI checks that `ring` stays out of
# each Rust binary's normal closure. Root certificates come from the OS trust
# store through the platform verifier (the `rustls` feature's default), not
# from a bundled Mozilla list. `query` became opt-in in 0.13.
# `system-proxy` makes reqwest honor Windows registry and macOS proxies.
reqwest = { version = "0.13", default-features = false, features = ["json", "query", "rustls", "stream", "system-proxy"] }
rand = "0.9"
readabilityrs = "0.1"
htmd = "0.5"
mime = "0.3"
encoding_rs = "0.8"
url = "2"
# Percent-decoding for path parameters; already in the tree as url's own core.
percent-encoding = "2"
ipnet = "2"
dunce = "1"
tokio = { version = "1", features = ["macros", "rt-multi-thread", "net", "time", "sync"] }
thiserror = "2"
anyhow = "1"
axum = { version = "0.8", features = ["multipart", "ws"] }
# Pinned to 3.5.1, the release `plugin-mcp` was written against (its
# `ClientConfig` handler, `send_cancellable_request`, and `RequestHandle`
# fields). default-features off drops `server` and `macros`; `base64` still
# arrives through `client-side-sse`, which `transport-streamable-http-client`
# turns on. Each crate that uses it names the features it needs.
rmcp = { version = "=3.5.1", default-features = false }
# 0.29 rather than the newer 0.30 so the resolver unifies with the copy axum's
# `ws` feature already pulls in, instead of compiling two.
tokio-tungstenite = "0.29"
async-trait = "0.1"
flate2 = "1"
futures-util = "0.3"
mlua = { version = "0.12", features = ["lua55", "vendored", "serialize", "send"] }
# 1.x rather than 0.8 so the resolver unifies with the copy tauri-utils
# already pulls in, instead of compiling two toml lines (and the 0.8 line's
# exclusive toml_edit 0.19 and winnow 0.5 tail).
toml = "1"
# Parses the runvil facade's source for build-xtask's shape check;
# `full` is the feature that parses items and `use` trees. 3 is the newest
# major the lockfile already carries.
syn = { version = "3", features = ["full"] }
# `span-locations` makes a span parsed outside a proc macro report its line,
# which the shape check prints with every violation.
proc-macro2 = { version = "1", features = ["span-locations"] }
# The rustdoc JSON model `cargo xtask api` reads. Exact pin: each release
# matches one `format_version`, so it moves only together with the pinned
# nightly in build-xtask's `api/toolchain.rs`.
rustdoc-types = "=0.61.0"
tracing = "0.1"
tower = { version = "0.5", features = ["util"] }
arc-swap = "1"
# Serves the UIs: reads $OUT_DIR/ui-dist from disk in debug builds, embeds it
# into the binary in release builds. interpolate-folder-path resolves the
# $OUT_DIR prefix in the `folder` attribute.
rust-embed = { version = "8", features = ["interpolate-folder-path"] }
humantime = "2"
tempfile = "3"
# Exact pin: turso is pre-1.0 and backs user-visible workspace files, so
# upgrades are deliberate, reviewed changes rather than resolver drift.
# default-features off: the `mimalloc` default installs a
# `#[global_allocator]` from inside the library (process-global state and a
# C build in a serve path), and `fts` is unused; the workspace schema is
# three plain tables.
turso = { version = "=0.7.2", default-features = false }
time = { version = "0.3", features = ["formatting"] }
sha2 = "0.11"
# Loads plugin dynamic libraries without linking them into Cargo builds.
libloading = "0.8"
socket2 = { version = "0.6", features = ["all"] }
# Cross-platform Ctrl-C handling for the Workshop build orchestrator.
ctrlc = "3.5"
# Thin process-image shims for the Workshop gateway discovery reader's stale
# detection; both are already in the tree transitively.
libc = "0.2"
windows-sys = { version = "0.61", default-features = false }
# Benchmark framework for the executor and Lua-boundary benches; dev-only.
criterion = "0.5"
# The Engine's GetDynamicTools pattern search; already in the tree through
# criterion, readabilityrs, and turso.
regex = "1"
# Tauri v2 desktop framework for workshop. tauri is pinned to the
# minor because `with_webview` exposes webview2-com/webkit2gtk types that may
# shift in a Tauri minor release (the upstream guidance for `with_webview`).
tauri = "~2.11"
tauri-build = "2.6.3"
tauri-plugin-dialog = "2.7.3"
tauri-plugin-opener = "2.5.5"
tauri-plugin-process = "2.3.1"
# default-features off drops the Tauri plugin's `rustls-tls` default, which is
# the one dependency in the tree that pins rustls to the `ring` backend (and
# installs it as the process-global CryptoProvider). The plugin's `rustls-tls`
# default would put `ring` into the Workshop binary. The plugin's reqwest
# calls still get TLS: cargo unifies reqwest's features per binary and the
# workspace pin above enables `rustls` (aws-lc-rs), so the Workshop links one
# crypto backend. `system-proxy` is the plugin's other default, kept as it
# was. The `zip` default stays off: it only unpacks the older v1Compatible
# update bundles (the Windows `.zip` and the Linux `.AppImage.tar.gz`), and
# the desktop app's `"createUpdaterArtifacts": true` ships the signed
# installers themselves (the NSIS `-setup.exe` and the raw `.AppImage`). The
# macOS `.app.tar.gz` path uses `tar` and `flate2` with no feature.
tauri-plugin-updater = { version = "2.11.0", default-features = false, features = ["system-proxy"] }
tauri-plugin-single-instance = "2.4.4"
[workspace.lints.rust]
unsafe_code = "deny"
missing_docs = "warn"
missing_debug_implementations = "warn"
unreachable_pub = "warn"
unsafe_op_in_unsafe_fn = "deny"
future_incompatible = { level = "warn", priority = -1 }
rust_2018_idioms = { level = "warn", priority = -1 }
[workspace.lints.rustdoc]
broken_intra_doc_links = "deny"
private_intra_doc_links = "deny"
unescaped_backticks = "deny"
[workspace.lints.clippy]
all = { level = "deny", priority = -1 }
pedantic = { level = "deny", priority = -1 }
unwrap_used = "deny"
expect_used = "deny"
dbg_macro = "warn"
todo = "deny"
undocumented_unsafe_blocks = "deny"
missing_safety_doc = "deny"
allow_attributes = "deny"
allow_attributes_without_reason = "deny"
exit = "deny"
disallowed_methods = "deny"
disallowed_types = "deny"
disallowed_macros = "deny"
# Cherry-picked out of pedantic: it flags product names (Runvil, OpenAI) in
# prose, which reads worse backticked than the lint is worth.
doc_markdown = "allow"
# Cherry-picked out of pedantic: its suggested rewrite for a collection is
# `assert_eq!(x, [] as [T; 0])`, which has to spell out the element type and
# needs `T: PartialEq + Debug`, so it cannot be applied to most call sites.
assert_is_empty = "allow"
# The profile that 'dist' will build with
[profile.dist]
inherits = "release"
lto = "thin"