Repository navigation
Expand file tree
/
Copy pathCargo.toml
More file actions
217 lines (211 loc) · 13.7 KB
/
Copy pathCargo.toml
File metadata and controls
217 lines (211 loc) · 13.7 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
215
216
217
[workspace]
members = ["crates/embed-resource", "crates/herdr-acp", "crates/herdr-automate", "crates/herdr-automation", "crates/herdr-chat-protocol", "crates/herdr-client", "crates/herdr-commands", "crates/herdr-control-protocol", "crates/herdr-credentials", "crates/herdr-diagnostics", "crates/herdr-gpui", "crates/herdr-github", "crates/herdr-gpui-launcher", "crates/herdr-orchestrator", "crates/herdr-protocol", "crates/herdr-remote", "crates/herdr-remote-control", "crates/herdr-updater", "crates/herdr-usage", "crates/herdr-vcs"]
resolver = "2"
[workspace.package]
edition = "2024"
license = "Apache-2.0"
rust-version = "1.96"
# Cargo metadata only. Releases carry a derived calendar version YYYYMMDD.COUNTER
# that CI embeds as HERDR_RELEASE_VERSION; this value never reaches the UI.
version = "0.1.0"
# Workspace crates are not published to crates.io; they build this application.
publish = false
[workspace.lints.rust]
unsafe_code = "deny"
unused_qualifications = "deny"
[workspace.lints.clippy]
expect_used = "deny"
unwrap_used = "deny"
[workspace.dependencies]
url = "2"
# ACP wire types for herdr-acp; its own transport, so no async runtime.
acp = { default-features = false, package = "agent-client-protocol-schema", version = "1.12" }
anyhow = "1"
aes = "0.9.3"
ammonia = "4.2.1"
cbc = { features = ["block-padding"], version = "0.2.1" }
percent-encoding = "2"
pbkdf2 = { default-features = false, features = ["hmac"], version = "0.13.0" }
pulldown-cmark = { default-features = false, features = ["html"], version = "0.13.4" }
# The remote control pairing QR, drawn as quads; no image or SVG renderer.
qrcode = { default-features = false, version = "0.14.1" }
# Native chat math: the engine exposes baseline metrics and bounds before rasterization.
ratex-layout = "=0.1.15"
ratex-parser = "=0.1.15"
ratex-render = { features = ["embed-fonts"], version = "=0.1.15" }
ratex-types = "=0.1.15"
base64 = "0.23.1"
bincode = { default-features = false, features = ["serde", "std"], version = "2" }
# Reads the Windows clipboard off the UI thread, sized before it is copied.
clipboard-win = { default-features = false, features = ["std"], version = "5.4.1" }
chrono = { default-features = false, features = ["clock", "serde"], version = "0.4" }
cocoa = "0.27"
config_loader = { default-features = false, features = ["toml"], package = "config", version = "0.15.25" }
core-graphics = "0.25"
crossbeam-channel = "0.5"
ed25519-dalek = { default-features = false, features = ["std"], version = "2.2" }
flate2 = "1"
# Use the same strict macOS family lookup as GPUI, including legacy aliases.
font-kit = { package = "zed-font-kit", version = "=0.14.1-zed" }
# Time zone names in automation schedules; the version the lockfile already has.
jiff = "0.2.38"
# Locates installed font files on Linux, as GPUI's own text system does.
fontdb = "0.24"
foreign-types = "0.5"
futures-lite = "2"
getrandom = "0.4.3"
gpui = { package = "gpui-pre", version = "=0.3.6" }
gpui_platform = { package = "gpui-pre-platform", version = "=0.3.6" }
# Reads local repositories for the orchestrator without starting `git`:
# discovery, config with its includes and URL rewrites, refs, and rev-parse.
gix = { default-features = false, features = ["sha1"], version = "0.90" }
# The web views behind browser tabs; `browser::page` lays them out in the window.
wry = { package = "lb-wry", version = "=0.53.3" }
# Reports only by default; the daemon turns on the Luau engine.
herdr-automation = { default-features = false, path = "crates/herdr-automation" }
herdr-chat-protocol = { path = "crates/herdr-chat-protocol" }
herdr-client = { path = "crates/herdr-client" }
herdr-commands = { path = "crates/herdr-commands" }
herdr-control-protocol = { path = "crates/herdr-control-protocol" }
herdr-credentials = { path = "crates/herdr-credentials" }
herdr-diagnostics = { path = "crates/herdr-diagnostics" }
herdr-github = { path = "crates/herdr-github" }
herdr-orchestrator = { path = "crates/herdr-orchestrator" }
herdr-protocol = { path = "crates/herdr-protocol" }
herdr-remote = { default-features = false, path = "crates/herdr-remote" }
herdr-remote-control = { default-features = false, path = "crates/herdr-remote-control" }
herdr-updater = { path = "crates/herdr-updater" }
herdr-usage = { path = "crates/herdr-usage" }
herdr-vcs = { path = "crates/herdr-vcs" }
interprocess = "2.4.2"
# Local interface addresses, so Bonjour discovery skips this machine; the
# version mdns-sd already uses.
if-addrs = "0.15"
# Display and idle holds behind the status bar cup; `bin` would pull in a CLI.
keepawake = { default-features = false, version = "0.6.1" }
image = { default-features = false, features = ["gif", "jpeg", "png", "webp"], version = "0.25.10" }
# The sandboxed Luau interpreter behind automation scripts, built from source.
mlua = { features = ["error-send", "luau"], version = "0.12.2" }
# Mermaid fences in chat answers become diagrams: parse, lay out, and write
# SVG in pure Rust; GPUI rasterizes the SVG. No CLI and no PNG writer.
mermaid-rs-renderer = { default-features = false, version = "0.3.1" }
# Helix's fzf-style scorer behind the command palette.
nucleo-matcher = "0.3.1"
# Bonjour browsing for SSH hosts in the Add Device dialog; it runs its own
# thread and needs no async runtime.
mdns-sd = { default-features = false, version = "0.21.5" }
nix = { default-features = false, features = ["socket", "term", "user"], version = "=0.31.3" }
objc = "0.2"
# The Secret Service client GPUI's Linux platform links, with its async-io backend.
oo7 = { default-features = false, features = ["async-std", "native_crypto"], version = "0.6" }
objc2 = "0.6.4"
objc2-app-kit = { default-features = false, features = ["NSApplication", "NSColor", "NSDockTile", "NSDragging", "NSEvent", "NSGraphics", "NSGraphicsContext", "NSImage", "NSImageRep", "NSPasteboard", "NSPasteboardItem", "NSResponder", "NSTextInputContext", "NSTrackingArea", "NSView", "NSWindow", "block2", "objc2-core-foundation", "std"], version = "0.3.2" }
objc2-foundation = { default-features = false, features = ["NSArray", "NSBundle", "NSData", "NSError", "NSProcessInfo", "NSString", "NSURL", "std"], version = "0.3.2" }
# The WebKit snapshot behind page annotation screenshots and the popups pages
# open, at the versions wry uses.
block2 = "0.6.2"
dispatch2 = { default-features = false, features = ["objc2", "std"], version = "0.3.1" }
objc2-core-foundation = { default-features = false, features = ["CFCGTypes", "std"], version = "0.3.2" }
objc2-web-kit = { default-features = false, features = ["WKSnapshotConfiguration", "WKUIDelegate", "WKWebView", "block2", "objc2-app-kit", "objc2-core-foundation", "std"], version = "0.3.2" }
# Asks for Dock badge permission; the version GPUI's macOS platform already links.
objc2-user-notifications ={ default-features = false, features = ["UNUserNotificationCenter", "block2", "std"], version = "0.3.2" }
raw-window-handle = "0.6"
# herdr-acp's in-pane chat view.
ratatui = { default-features = false, features = ["crossterm"], version = "0.30" }
crossterm = "0.29"
# TLS for the Azure sandbox exec stream, with the ring provider and roots
# ureq already links.
rustls = { default-features = false, features = ["ring", "std", "tls12"], version = "0.23" }
# The remote control daemon's own certificate authority and server
# certificates; ring signs, as rustls does, and x509-parser reloads the CA.
rcgen = { default-features = false, features = ["crypto", "pem", "ring", "x509-parser"], version = "0.14.10" }
# Reads the names a user-supplied remote control certificate lists; rcgen
# already links it.
x509-parser = { default-features = false, version = "0.18" }
# Checks the remote control daemon's mobileconfig profile in tests.
roxmltree = "0.21"
rusqlite = { features = ["bundled"], version = "0.40" }
rodio = { default-features = false, features = ["playback", "symphonia-mp3", "tracing"], version = "0.22.2" }
rustix = { features = ["event", "fs", "process", "pty", "termios"], version = "=1.1.5" }
secrecy = { features = ["serde"], version = "=0.10.3" }
security-framework = "=3.7.0"
serde = { features = ["derive"], version = "1" }
serde_json = "1"
serde_ignored = "0.1.14"
sha1 = "0.11.0"
# herdr-remote: P-256 verifies the signatures paired phones make with their
# WebCrypto keys, and with HKDF and AES-GCM implements Web Push (VAPID ES256,
# RFC 8291 encryption) on the sha2 below. Not web-push-native, which brings
# jwt-simple and a second crypto stack; not ring, whose ECDH cannot take the
# fixed key RFC 8291's test vector uses.
aes-gcm = { default-features = false, features = ["aes", "alloc"], version = "0.11" }
hkdf = "0.13"
p256 = { default-features = false, features = ["ecdh", "ecdsa", "pem", "std"], version = "0.14" }
sha2 = "0.11.0"
# Reads embedded bitmap strikes to spot fonts GPUI's Linux rasterizer panics on.
skrifa = { default-features = false, features = ["std"], version = "0.48" }
# Tests hold a port with a socket that is bound but never listens; mdns-sd
# already locks this version.
socket2 = "0.6.5"
# Diff syntax colouring: bundled grammars, parsed with the pure-Rust regex
# engine, no themes (colours come from the app's theme).
syntect = { default-features = false, features = ["default-syntaxes", "parsing", "regex-fancy"], version = "5.3" }
# The version GPUI's screen capture already locks; only CPU and memory are read.
sysinfo = { default-features = false, features = ["disk", "system"], version = "0.39.6" }
tar = "0.4"
tempfile = "3"
test-case = "3"
thiserror = "2"
# The remote control daemon's runtime and web server; only herdr-remote-control uses them.
tokio = { features = ["macros", "net", "rt-multi-thread", "signal", "sync", "time"], version = "1" }
# Server-rendered HTML for the remote control web app, escaped by default.
maud = "0.27"
axum = { default-features = false, features = ["http1", "json", "matched-path", "query", "tokio"], version = "0.8" }
# Drives herdr-remote-control's router in tests without a socket; axum already links it.
tower = { default-features = false, features = ["util"], version = "0.5" }
tokio-rustls = { default-features = false, features = ["ring", "tls12"], version = "0.26" }
# herdr-remote-control's APNs sender for iOS Live Activities: APNs speaks only
# HTTP/2, which ureq lacks. hyper's own HTTP/2 client (plus h2) over the
# tokio-rustls above on the daemon's Tokio runtime is the smallest maintained
# stack for it: axum already links hyper, hyper-util, and http-body-util, so
# only h2 is new. Not reqwest, which would bring a second connection pool and
# TLS configuration; not a2, which pins its own HTTP and crypto stacks.
http-body-util = "0.1"
hyper = { default-features = false, features = ["client", "http2"], version = "1" }
hyper-util = { default-features = false, features = ["tokio"], version = "0.1" }
# Certificate validity dates for rcgen, from a `SystemTime`.
time = { default-features = false, features = ["std"], version = "0.3.47" }
toml = "1.1"
toml_edit = "0.25"
tracing = "0.1"
# The Azure sandbox exec stream; TLS comes from `rustls` above.
tungstenite = { default-features = false, features = ["handshake"], version = "0.30" }
tracing-subscriber = { default-features = false, features = ["registry", "std"], version = "0.3" }
unicode-normalization = "0.1.26"
unicode-properties = { version = "0.1.4", default-features = false, features = ["emoji"] }
unicode-segmentation = "1"
unicode-width = "0.2.2"
ureq = "3"
webpki-roots = "1"
uuid = { features = ["serde", "v4", "v5"], version = "1" }
# Window shell properties behind the taskbar relaunch identity; the version
# GPUI's Windows platform already links.
windows = { features = ["Win32_Foundation", "Win32_Storage_EnhancedStorage", "Win32_System_Com", "Win32_System_Com_StructuredStorage", "Win32_System_Variant", "Win32_UI_Shell", "Win32_UI_Shell_PropertiesSystem"], version = "0.62.2" }
windows-registry = "0.100.0"
# The error type `windows-registry` returns; its own version, not `windows`'s.
windows-result = "0.100.0"
windows-sys = { features = ["Win32_Foundation", "Win32_System_Pipes"], version = "0.61.2" }
# Embeds the Windows executable's icon and version information; a build
# dependency, so it runs on the host.
winresource = "0.1.34"
zeroize = "=1.9.1"
# Line tables keep file:line in backtraces and crash reports while cutting most
# of the debug info a full build writes and links for herdr-gpui. Use
# `CARGO_PROFILE_DEV_DEBUG=full` for a debugger session that needs locals.
[profile.dev]
debug = "line-tables-only"
# GPUI's build script embeds its own Windows manifest through embed-resource,
# which would clash with Herdr's (crates/herdr-gpui/windows.manifest); this
# no-op stands in for it. See crates/embed-resource.
[patch.crates-io]
embed-resource = { path = "crates/embed-resource" }