返回 CodeWhale
Cargo.toml
根目录 / crates / tui / Cargo.toml
1 [package]
2 name = "codewhale-tui"
3 version.workspace = true
4 edition.workspace = true
5 rust-version.workspace = true
6 license.workspace = true
7 repository.workspace = true
8 description = "Terminal UI for open-source and open-weight coding models"
9 default-run = "codewhale-tui"
10
11 [lints]
12 workspace = true
13
14 [features]
15 default = ["mimalloc-allocator"]
16 mimalloc-allocator = ["dep:mimalloc"]
17 long-running-tests = []
18 # Opt-in global-allocator swap (#5872): build on rusty_alloc (the pure-Rust
19 # mimalloc v2.4.5 remake — no C compiler, no build script) instead of the
20 # default mimalloc. Off by default; the default build is unchanged.
21 # Build with: cargo build -p codewhale-tui --no-default-features --features rusty-alloc
22 rusty-alloc = ["dep:rusty_alloc-api"]
23
24 [lib]
25 name = "codewhale_tui"
26 path = "src/lib.rs"
27
28 [[bin]]
29 name = "codewhale-tui"
30 path = "src/main.rs"
31
32 [dependencies]
33 codewhale-memory = { path = "../memory", version = "0.10.0" }
34 ahash = "0.8"
35 anyhow.workspace = true
36 codewhale-config = { path = "../config", version = "0.10.0" }
37 codewhale-cloud-facts = { path = "../cloud-facts", version = "0.10.0" }
38 codewhale-command-contract = { path = "../command-contract", version = "0.10.0" }
39 codewhale-core = { path = "../core", version = "0.10.0" }
40 codewhale-execpolicy = { path = "../execpolicy", version = "0.10.0" }
41 codewhale-hooks = { path = "../hooks", version = "0.10.0" }
42 codewhale-lane = { path = "../lane", version = "0.10.0" }
43 codewhale-models = { path = "../models", version = "0.10.0" }
44 codewhale-palette = { path = "../palette", version = "0.10.0" }
45 codewhale-paths = { path = "../paths", version = "0.10.0" }
46 codewhale-protocol = { path = "../protocol", version = "0.10.0" }
47 codewhale-release = { path = "../release", version = "0.10.0" }
48 codewhale-secrets = { path = "../secrets", version = "0.10.0" }
49 codewhale-telemetry = { path = "../telemetry", version = "0.10.0" }
50 codewhale-tools = { path = "../tools", version = "0.10.0" }
51 codewhale-workflow = { path = "../workflow", version = "0.10.0" }
52 codewhale-workflow-js = { path = "../workflow-js", version = "0.10.0" }
53 async-stream = "0.3.6"
54 async-trait.workspace = true
55 base64 = "0.23.1"
56 axum.workspace = true
57 clap.workspace = true
58 clap_complete.workspace = true
59 colored = "3.0.0"
60 crossterm = "0.29"
61 dotenvy = "0.15.7"
62 encoding_rs.workspace = true
63 fd-lock = "4.0.4"
64 dirs.workspace = true
65 futures-util = "0.3.31"
66 hyper-util = { version = "=0.1.20", features = ["client-proxy"] }
67 oauth2 = { version = "5", default-features = false }
68 # No ratatui-core pin: ColorCompatBackend answers `get_cursor_position()`
69 # from tracked state (ratatui#2640's recommended workaround), so the CPR query
70 # inside `Terminal::clear()` no longer races the input loop. See
71 # `tui/color_compat.rs`.
72 ratatui = { version = "=0.30.2", features = ["unstable-rendered-line-info"] }
73 regex = "1.11"
74 reqwest = { workspace = true, features = ["blocking", "stream", "form", "http2"] }
75 rusqlite.workspace = true
76 rquickjs.workspace = true
77 rmcp = { version = "3.2.0", default-features = false, features = ["auth", "client"] }
78 rustls.workspace = true
79 qrcode = { version = "0.14", default-features = false }
80 similar = { version = "3", features = ["unicode"] }
81 ansi-to-tui = { version = "8.0.1", default-features = false }
82 # The renderer uses embedded syntax/theme dumps, not external YAML/plist loaders.
83 syntect = { version = "5.2", default-features = false, features = ["default-syntaxes", "default-themes", "regex-fancy"] }
84 serde.workspace = true
85 serde_json = { workspace = true, features = ["preserve_order", "raw_value"] }
86 schemars = { version = "1.2.1", features = ["derive", "preserve_order"] }
87 shellexpand = "3"
88 # Grammar-exact Rust parsing for the post-edit syntax gate (#6204). `syn` is
89 # already in the lockfile as a proc-macro build dependency; this reuses that
90 # same version rather than vendoring a second parser (#6151). `span-locations`
91 # is what turns a parse failure into the `line:column` the model needs — the
92 # feature is inert without it.
93 syn = { version = "3.0.3", default-features = false, features = ["full", "parsing"] }
94 proc-macro2 = { version = "1.0.107", features = ["span-locations"] }
95 toml.workspace = true
96 toml_edit.workspace = true
97 tokio.workspace = true
98 tokio-util = { version = "0.7.16", features = ["io"] }
99 unicode-width = "0.2"
100 unicode-segmentation = "1.12"
101 unicode-normalization = "0.1"
102 urlencoding = "2.1"
103 uuid.workspace = true
104 chrono.workspace = true
105 tempfile.workspace = true
106 thiserror.workspace = true
107 tracing.workspace = true
108 tracing-subscriber.workspace = true
109 tower-http.workspace = true
110 wait-timeout = "0.2"
111 webbrowser = "1.0"
112 shlex = "2.0.1"
113 globset = "0.4"
114 ignore = "0.4"
115 image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif"] }
116 htmd = "0.5.4"
117 # lru >= 0.18.2 fixes RUSTSEC-2026-0253 (panic-unsafe `pop()`).
118 lru = "0.18"
119 parking_lot = "0.12"
120 tar = "0.4"
121 # Vendored static liblzma keeps the full-fidelity session archive export
122 # (`session_export`) hermetic on every release target; no system xz headers.
123 # liblzma is the maintained, API-compatible continuation of xz2.
124 liblzma = { version = "0.4", features = ["static"] }
125 flate2 = "1.1"
126 sha2.workspace = true
127 semver.workspace = true
128 codewhale-localization = { path = "../localization", version = "0.10.0" }
129 shell-words = "1.1.1"
130 mimalloc = { workspace = true, optional = true }
131 rusty_alloc-api = { workspace = true, optional = true }
132
133 [build-dependencies]
134 codewhale-build-support = { path = "../build-support", version = "0.10.0" }
135
136 [dev-dependencies]
137 codewhale-models = { path = "../models", version = "0.10.0", features = [
138 "test-support",
139 ] }
140 cucumber = "0.23.0"
141 jsonschema.workspace = true
142 wiremock = "0.6"
143 tiny_http = "0.12"
144 pretty_assertions = "1.4"
145 rio-vt = "0.5.1"
146
147 [target.'cfg(unix)'.dependencies]
148 libc = "0.2"
149
150 [target.'cfg(windows)'.dependencies]
151 windows-sys = { version = "0.61.2", features = ["Wdk_Storage_FileSystem", "Win32_System_IO", "Win32_Foundation", "Win32_Security", "Win32_Security_Authorization", "Win32_Storage_FileSystem", "Win32_System_Pipes", "Win32_System_Threading"] }
152
153 [target.'cfg(any(target_os = "macos", target_os = "windows", all(target_os = "linux", not(target_env = "ohos"))))'.dependencies]
154 arboard = { version = "3.4", features = ["wayland-data-control"] }
155
156 [target.'cfg(not(target_env = "ohos"))'.dependencies]
157 portable-pty = "0.9"
158
159 [target.'cfg(target_os = "macos")'.dependencies]
160 objc2 = "0.6.3"
161 objc2-foundation = { version = "0.3.2", default-features = false, features = ["std", "NSArray", "NSDictionary", "NSError", "NSObject", "NSString", "NSURL"] }
162
163 [target.'cfg(target_os = "windows")'.dependencies]
164 windows = { version = "0.62", features = ["Win32_Foundation", "Win32_Media_Audio", "Win32_Security", "Win32_Security_Authorization", "Win32_Storage_FileSystem", "Win32_System_Console", "Win32_System_Diagnostics_Debug", "Win32_System_Diagnostics_ToolHelp", "Win32_System_Environment", "Win32_System_JobObjects", "Win32_System_Registry", "Win32_System_Threading", "Win32_UI_WindowsAndMessaging"] }
165 # `windows` re-exports most of windows-core's types but not all of them
166 # (BOOL, HRESULT, … live in windows-core itself); window_control.rs names
167 # windows_core::BOOL for the EnumWindows callback, so it must be a direct
168 # dependency. Version already resolved via `windows` — no extra build work.
169 windows-core = { version = "0.62" }
170
170 lines TOML