-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathCargo.toml
More file actions
142 lines (124 loc) · 5.58 KB
/
Copy pathCargo.toml
File metadata and controls
142 lines (124 loc) · 5.58 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
# UmaDev — workspace manifest.
#
# UmaDev is a coach for AI coding hosts. One specification, one
# binary, five first-class host CLI backends. No UmaDev API key — drives your already
# logged-in coding CLI as a subprocess.
[workspace]
resolver = "2"
members = [
"crates/umadev",
"crates/umadev-spec",
"crates/umadev-governance",
"crates/umadev-agent",
"crates/umadev-runtime",
"crates/umadev-host",
"crates/umadev-process",
"crates/umadev-knowledge",
"crates/umadev-contract",
"crates/umadev-tui",
"crates/umadev-i18n",
"crates/umadev-state",
]
[workspace.package]
version = "1.0.64"
edition = "2021"
rust-version = "1.88"
license = "MIT"
authors = ["Shangyan Technology <11964948@qq.com>"]
repository = "https://github.com/umacloud/umadev"
homepage = "https://github.com/umacloud/umadev"
description = "AI 编码的项目经理 — drives five authenticated AI coding CLIs through a commercial delivery pipeline. No UmaDev API key needed."
[workspace.dependencies]
# --- runtime / async ---
tokio = { version = "1", features = ["rt-multi-thread", "macros", "fs", "io-util", "process", "signal", "sync", "time"] }
async-trait = "0.1"
futures = "0.3"
# --- HTTP ---
reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls", "stream"] }
eventsource-stream = "0.2"
# --- serde / data ---
serde = { version = "1", features = ["derive"] }
serde_json = "1"
semver = "1"
# ACP v1 wire types only. Transport/process ownership stays in umadev-host so
# Windows shims, bounded stderr, cancellation, and child cleanup remain shared.
agent-client-protocol-schema = "=1.4.0"
toml = "0.8"
# Format-preserving TOML editor — used by the MCP manager to parse-merge
# codex's ~/.codex config.toml `[mcp_servers]` table without clobbering the
# user's existing keys, comments, or formatting. Already in the tree via `toml`.
toml_edit = "0.22"
# --- error handling ---
anyhow = "1"
thiserror = "2"
# --- CLI ---
clap = { version = "4.5", features = ["derive", "env"] }
# --- TUI ---
# Keep Ratatui exact so its MSRV and split backend graph cannot drift in place.
# Disable its default Crossterm backend (currently Crossterm 0.29); 0.30's
# split backend crate is selected explicitly below so input events and terminal
# modes have one shared Crossterm 0.28 runtime.
ratatui = { version = "=0.30.2", default-features = false, features = ["layout-cache", "macros", "std", "underline-color"] }
ratatui-crossterm = { version = "=0.1.2", default-features = false, features = ["crossterm_0_28", "underline-color"] }
crossterm = { version = "0.28", features = ["event-stream"] }
# Unicode display-width table (zero-width combining marks / variation selectors
# / wide CJK / emoji) for correct terminal cursor + wrap math in the TUI editor.
# Already in the tree via ratatui; pinned here so the TUI can depend on it
# directly without re-resolving. The dependency-light constraint only binds the
# spec / governance / contract crates, not the TUI.
unicode-width = "0.2"
# Pure-Rust, dependency-light text-diffing (Myers / Patience) used by the TUI to
# turn a Write/Edit before→after into a line-level diff card. Already in the
# tree transitively; pinned here so the TUI can depend on it directly. The
# dependency-light constraint only binds the spec / governance / contract crates,
# not the TUI.
similar = "2.7"
# --- governance / parsing ---
regex = "1.10"
sha2 = "0.10"
getrandom = "0.2"
# --- time ---
chrono = { version = "0.4", default-features = false, features = ["clock", "serde"] }
# --- logging ---
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
# --- archive ---
zip = { version = "2", default-features = false, features = ["deflate"] }
# Embed the curated `knowledge/` corpus into the shipped binary so end users get
# the full commercial-engineering KB with zero setup (extracted to
# ~/.umadev/knowledge on first run). Text-only corpus → fast compile, ~5.5M.
include_dir = "0.7"
# --- testing ---
insta = { version = "1.41", features = ["json", "yaml"] }
pretty_assertions = "1"
mockito = "1"
# --- internal ---
umadev-spec = { path = "crates/umadev-spec", version = "1.0.0" }
umadev-governance = { path = "crates/umadev-governance", version = "1.0.0" }
umadev-agent = { path = "crates/umadev-agent", version = "1.0.0" }
umadev-runtime = { path = "crates/umadev-runtime", version = "1.0.0" }
umadev-host = { path = "crates/umadev-host", version = "1.0.0" }
umadev-process = { path = "crates/umadev-process", version = "1.0.0" }
umadev-knowledge = { path = "crates/umadev-knowledge", version = "1.0.0" }
umadev-contract = { path = "crates/umadev-contract", version = "1.0.0" }
umadev-tui = { path = "crates/umadev-tui", version = "1.0.0" }
umadev-i18n = { path = "crates/umadev-i18n", version = "1.0.0" }
umadev-state = { path = "crates/umadev-state", version = "1.0.0" }
[profile.release]
lto = "fat"
codegen-units = 1
strip = true
opt-level = 3
# `unwind`, NOT `abort`: the fail-open contract depends on it. `panic = "abort"`
# makes `std::panic::catch_unwind` INERT (a panic aborts the process instead of
# being caught), which silently disabled the three fail-open guards in a release
# build — the governance hook collapsing a panicking rule to `Decision::pass()`,
# the critic-review fallback, and the TUI markdown compile. With `abort`, a panic
# in markdown rendering would CRASH the user's whole session instead of degrading
# to raw text. The landing-pad cost is negligible at runtime (only paid while
# actually unwinding); honoring "governance/render never crashes the host" wins.
panic = "unwind"
[profile.dev]
opt-level = 0
[profile.test]
opt-level = 1