-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathCargo.toml
More file actions
130 lines (114 loc) · 5.48 KB
/
Copy pathCargo.toml
File metadata and controls
130 lines (114 loc) · 5.48 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
[workspace]
# Internal crates split out of the homeboy monolith to gain per-crate
# incremental compilation and lower peak build memory. They are path-only
# dependencies of the `homeboy` crate. The entire workspace is private; the
# shipped CLI artifact remains the single `homeboy` binary.
#
# Both globs are prefix-qualified (`homeboy-*`) rather than a bare `crates/*`.
# A bare `crates/*` also matches the `crates/contracts` grouping directory,
# which is not itself a crate, so cargo fails to load its (nonexistent)
# manifest. The previous workaround was `exclude = ["crates/contracts"]`, but
# cargo's `exclude` matches by path PREFIX and outranks the members globs, so it
# silently dropped all 18 `crates/contracts/*` crates from the workspace too
# (#10550). Keeping the grouping directory out of the glob in the first place is
# what makes the membership honest. Every crate under `crates/` and
# `crates/contracts/` is named `homeboy-*`; `workspace_membership_is_complete`
# in `crates/homeboy-paths` fails closed if a crate is ever added that these
# globs would miss.
members = ["crates/homeboy-*", "crates/contracts/homeboy-*"]
[package]
name = "homeboy"
version = "0.334.0"
edition = "2021"
default-run = "homeboy"
license = "MIT"
authors = ["Chris Huber <chubes@extrachill.com>"]
description = "Headless automation for agentic software engineering workflows"
repository = "https://github.com/Extra-Chill/homeboy"
homepage = "https://github.com/Extra-Chill/homeboy"
exclude = ["/artifacts/"]
publish = false
[package.metadata.dist]
dist = true
[package.metadata.cargo-machete]
ignored = [
"homeboy-lab-contract", # Required as a direct edge by release preflight.
"homeboy-agents", # Dev-only edge: activates `test-support` in the CARGO_BIN_EXE_homeboy test binary.
]
[lib]
name = "homeboy"
path = "src/lib.rs"
[[bin]]
name = "homeboy"
path = "src/main.rs"
# Bench binaries follow the homeboy-extensions/rust convention:
# any [[bin]] whose name starts with `bench-` is discoverable by
# `homeboy bench homeboy`. See src/bin/bench-*.rs for the workload
# contract (reads HOMEBOY_BENCH_ITERATIONS, emits timings plus optional memory evidence).
[[bin]]
name = "bench-audit-self"
path = "src/bin/bench-audit-self.rs"
[dependencies]
homeboy-product-identity = { path = "crates/homeboy-product-identity" }
homeboy-cli = { path = "crates/homeboy-cli" }
homeboy-core = { path = "crates/homeboy-core" }
homeboy-lab-contract = { path = "crates/contracts/homeboy-lab-contract" }
# Core library dependencies
base64 = "0.22"
serde_json = "1.0"
uuid = { version = "1.11", features = ["v4", "v5", "serde"] }
# default-features disabled to drop reqwest's `default-tls` (native-tls/openssl),
# which pulled a second, redundant TLS stack alongside the rustls-tls we actually use.
# Kept features cover current usage (blocking JSON client, socks proxy, http2, charset,
# system proxy).
reqwest = { version = "0.12", default-features = false, features = ["json", "blocking", "rustls-tls", "socks", "http2", "charset", "system-proxy"] }
chrono = "0.4"
libc = "0.2"
rusqlite = { version = "0.32", features = ["bundled"] }
tempfile = "3.14"
# CLI dependencies
clap = { version = "4.5", features = ["derive", "env", "string"] }
[dev-dependencies]
# Enable homeboy-core's shared hermetic test fixtures for this crate's test build
# (integration tests reach them via `homeboy::test_support`).
homeboy-core = { version = "0.1.0", path = "crates/homeboy-core", features = ["test-support"] }
homeboy-extension = { version = "0.1.0", path = "crates/homeboy-extension" }
homeboy-engine-primitives = { version = "0.1.0", path = "crates/homeboy-engine-primitives" }
# Enables CLI argument fixtures used by root integration tests without adding a
# production default for those constructors.
homeboy-cli = { version = "0.1.0", path = "crates/homeboy-cli", features = ["test-support"] }
# Integration tests here spawn the real binary via CARGO_BIN_EXE_homeboy and
# dispatch `--backend fixture` (tests/reverse_cook_queue_acceptance.rs). That
# executor double is compiled only under `homeboy-agents/test-support`, and this
# dev-only edge is what activates it for the test build of that binary (#11118).
homeboy-agents = { version = "0.1.0", path = "crates/homeboy-agents", features = ["test-support"] }
[features]
default = []
slow-tests = []
# Enables the shared hermetic test fixtures (homeboy-core's test_support), used by
# this crate's integration tests, plus the `fixture` agent-task executor double.
# `cargo run --features test-support` is what makes the deterministic agent-task
# smoke gate in docs/commands/agent-task.md runnable from a source checkout.
test-support = ["homeboy-core/test-support", "homeboy-cli/test-support"]
# Hash and compression crates run at optimization even in dev/test builds.
#
# `agent-task cook` pins an immutable content-addressed controller runtime, which
# means SHA-256 over the homeboy executable. That binary is ~700 MB unoptimized,
# and `sha2` compiled at opt-level 0 hashes it roughly 40x slower than an
# optimized build: ~40 s per digest instead of ~0.5 s.
#
# Every cook integration test spawns the real binary, so each one paid ~44 s of
# pure hashing. That is the dominant cost in the test gate's 2700 s budget
# (#10687). Optimizing just these dependencies keeps our own crates fully
# debuggable while removing the cost.
[profile.dev.package.sha2]
opt-level = 3
[profile.dev.package.sha1]
opt-level = 3
[profile.dev.package.digest]
opt-level = 3
[profile.dev.package.crypto-common]
opt-level = 3
[profile.dist]
inherits = "release"
lto = "thin"