-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathCargo.toml
More file actions
186 lines (158 loc) · 5.02 KB
/
Copy pathCargo.toml
File metadata and controls
186 lines (158 loc) · 5.02 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
[package]
name = "operator"
version = "0.2.2"
edition = "2021"
rust-version = "1.95"
description = "Multi-agent orchestration dashboard for kanban shaped software development"
authors = ["untra"]
license = "MIT"
default-run = "operator"
[lib]
name = "operator"
path = "src/lib.rs"
[[bin]]
name = "operator"
path = "src/main.rs"
[[bin]]
name = "generate_types"
path = "src/bin/generate_types.rs"
[dependencies]
# Shared relay crate (also used by opr8r)
operator-relay = { path = "crates/relay" }
# TUI
# NOTE: ratatui is held at 0.29 and crossterm at 0.28 because the official
# `tui-textarea` 0.7 depends on ratatui 0.29 / crossterm 0.28.
# Bumping either here pulls a second ratatui/crossterm into the tree and the
# `Style`/`KeyEvent` types stop unifying in `form_field.rs`. Revisit when
# upstream `tui-textarea` supports ratatui 0.30.
ratatui = "0.29"
crossterm = "0.28"
tui-textarea = "0.7"
# Templating
handlebars = "6"
# Async runtime
tokio = { version = "1", features = ["full"] }
# File watching
notify = "8"
# Configuration
config = "0.15"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
serde_yaml = "0.9"
toml = "1"
# Schema and TypeScript generation
schemars = { version = "1.0", features = ["chrono04", "uuid1", "preserve_order"] }
ts-rs = { version = "12", features = ["uuid-impl", "chrono-impl", "no-serde-warnings", "serde-json-impl"] }
# CLI
clap = { version = "4", features = ["derive"] }
# Utilities
chrono = { version = "0.4", features = ["serde"] }
uuid = { version = "1", features = ["v4", "serde"] }
anyhow = "1"
thiserror = "2"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
tracing-appender = "0.2"
dirs = "6"
glob = "0.3"
regex = "1"
once_cell = "1"
lazy_static = "1"
backon = "1"
which = "8"
# System info (for core count)
sysinfo = "0.39"
# Cryptography (for content hashing)
sha2 = "0.11"
# HTTP client for API calls
reqwest = { version = "0.12", features = ["json", "rustls-tls", "blocking"] }
# Async traits
async-trait = "0.1"
# REST API
axum = { version = "0.8", features = ["macros", "tokio", "tracing"] }
# `Host` extractor moved out of axum core in 0.8; it now lives in axum-extra.
axum-extra = "0.10"
tokio-stream = "0.1"
futures-util = "0.3"
tower = "0.5"
tower-http = { version = "0.6", features = ["cors", "trace"] }
http-body-util = "0.1"
# OpenAPI documentation
utoipa = { version = "5", features = ["axum_extras", "uuid", "chrono"] }
utoipa-swagger-ui = { version = "9", features = ["axum"] }
# Agent Client Protocol (ACP) — JSON-RPC 2.0 over stdio for editor integration
agent-client-protocol = "0.14"
# Embedded web UI (behind embed-ui feature flag)
rust-embed = { version = "8", optional = true }
mime_guess = { version = "2", optional = true }
utoipa-axum = "0.2"
[features]
default = ["embed-ui"]
embed-ui = ["dep:rust-embed", "dep:mime_guess"]
[dev-dependencies]
operator-relay = { path = "crates/relay" }
tempfile = "3"
flate2 = "1"
[lints.rust]
unsafe_code = "deny"
[lints.clippy]
pedantic = { level = "warn", priority = -1 }
# Nursery lints for cohesion
cognitive_complexity = "warn"
redundant_clone = "warn"
# Allow noisy pedantic lints that don't add value here
module_name_repetitions = "allow"
must_use_candidate = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
return_self_not_must_use = "allow"
struct_excessive_bools = "allow"
too_many_lines = "allow"
cast_possible_truncation = "allow"
cast_sign_loss = "allow"
cast_precision_loss = "allow"
cast_lossless = "allow"
wildcard_imports = "allow"
# TUI/builder patterns make these too noisy
unused_self = "allow"
trivially_copy_pass_by_ref = "allow"
needless_pass_by_value = "allow"
similar_names = "allow"
struct_field_names = "allow"
# String building in TUI renderers
format_push_string = "allow"
# Many functions wrap for future error paths
unnecessary_wraps = "allow"
# Common in async code stubs
unused_async = "allow"
# Doc links with quotes are fine
doc_link_with_quotes = "allow"
# Allow cast_possible_wrap for u64→i64 in timestamps
cast_possible_wrap = "allow"
# Match arms kept separate for readability in TUI event handlers
match_same_arms = "allow"
# clone_from is less readable than reassignment
assigning_clones = "allow"
# let-else not always clearer
manual_let_else = "allow"
# Items after statements common in this codebase
items_after_statements = "allow"
# &Option<T> is idiomatic in this codebase for optional refs
ref_option = "allow"
# Excessive bools in setup functions are intentional
fn_params_excessive_bools = "allow"
# HashMap without explicit hasher is fine for non-perf-critical code
implicit_hasher = "allow"
# map_or readability is subjective
map_unwrap_or = "allow"
# for_each vs for loop is stylistic
needless_for_each = "allow"
# Explicit continue aids readability in complex loops
needless_continue = "allow"
# Wildcard matches are intentional for future-proofing
match_wildcard_for_single_variants = "allow"
# Platform-specific notifications
[target.'cfg(target_os = "macos")'.dependencies]
mac-notification-sys = "0.6"
[target.'cfg(target_os = "linux")'.dependencies]
notify-rust = "4"