- 新增 PtyTool:spawn/write/read/kill/list 五操作管理真实伪终端会话(portable-pty) - PtySessionManager:活动续期 TTL 惰性回收、ANSI 剥离、增量读取游标 - kill 走完整 Child::kill() 语义(Unix SIGHUP→宽限→SIGKILL),spawn_blocking 执行 - 修复:write_input 不再持管理器锁跨阻塞 IO;kill 前 drain 管道尾部输出;watcher 改 try_lock - 移除 shell_session.rs 管道式实现;前端 Tools/Subagents 页补充 PTY 条目
88 lines
2.9 KiB
TOML
88 lines
2.9 KiB
TOML
[package]
|
||
name = "picobot"
|
||
version = "0.4.4"
|
||
edition = "2024"
|
||
|
||
[lints.rust]
|
||
# 编译期硬错误:避免明显的内存安全/正确性隐患
|
||
unsafe_op_in_unsafe_fn = "warn"
|
||
rust_2018_idioms = "warn"
|
||
|
||
[lints.clippy]
|
||
# 渐进式策略:
|
||
# - 不直接声明 lint group(correctness/suspicious/complexity/perf),
|
||
# 因为 lint group 在 [lints] 中需用 priority 语法,简单 = "warn" 会报错;
|
||
# 且 clippy 默认已把 correctness 设为 deny,无需重复声明。
|
||
# - 仅显式 warn 少量高价值且存量不大的具体规则,避免一上线淹没在噪音中。
|
||
# 后续随着存量问题清理,可逐步把 unwrap_used/expect_used 升级为 warn。
|
||
redundant_clone = "warn"
|
||
dbg_macro = "warn"
|
||
print_stderr = "warn"
|
||
print_stdout = "warn"
|
||
|
||
[dependencies]
|
||
reqwest = { version = "0.13.2", default-features = false, features = ["json", "rustls", "multipart", "stream"] }
|
||
dotenv = "0.15"
|
||
serde = { version = "1.0", features = ["derive"] }
|
||
regex = "1.0"
|
||
serde_json = "1.0"
|
||
serde_yaml = "0.9"
|
||
async-trait = "0.1"
|
||
thiserror = "2.0.18"
|
||
tokio = { version = "1.0", features = ["full"] }
|
||
tokio-util = { version = "0.7", features = ["rt"] }
|
||
uuid = { version = "1.0", features = ["v4"] }
|
||
axum = { version = "0.8", features = ["ws"] }
|
||
tokio-tungstenite = { version = "0.29.0", features = ["rustls-tls-webpki-roots", "rustls"] }
|
||
futures-util = "0.3"
|
||
clap = { version = "4", features = ["derive"] }
|
||
dirs = "6.0.0"
|
||
prost = "0.14"
|
||
tracing = "0.1"
|
||
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
||
tracing-appender = "0.2"
|
||
metrics = "0.23"
|
||
metrics-exporter-prometheus = "0.15"
|
||
anyhow = "1.0"
|
||
chrono = { version = "0.4", features = ["serde"] }
|
||
chrono-tz = "0.10"
|
||
cron = { version = "0.13", features = ["serde"] }
|
||
iana-time-zone = "0.1"
|
||
mime_guess = "2.0"
|
||
base64 = "0.22"
|
||
image = { version = "0.25", default-features = false, features = ["jpeg", "png", "gif", "webp"] }
|
||
tempfile = "3"
|
||
meval = "0.2"
|
||
rusqlite = { version = "0.39", features = ["bundled"] }
|
||
r2d2 = "0.8"
|
||
r2d2_sqlite = "0.34"
|
||
rustls = { version = "0.23", features = ["ring"] }
|
||
subtle = "2.6"
|
||
parking_lot = "0.12"
|
||
wechatbot = { path = "vendor/wechatbot" }
|
||
encoding_rs = "0.8"
|
||
gray_matter = { version = "0.2", default-features = false, features = ["yaml"] }
|
||
# MCP (Model Context Protocol) support
|
||
rmcp = { version = "1.7", features = [
|
||
"client",
|
||
"transport-child-process",
|
||
"transport-streamable-http-client-reqwest",
|
||
"reqwest",
|
||
] }
|
||
schemars = "1.0"
|
||
http = "1"
|
||
tower-http = { version = "0.6", features = ["fs", "cors"] }
|
||
rust-embed = "8"
|
||
# PTY support for the pty tool (Unix pty + Windows ConPTY).
|
||
# 锁定 0.8 系:0.9 在 Windows 启用 PSEUDOCONSOLE_INHERIT_CURSOR,
|
||
# ConPTY 启动时发 DSR 查询并阻塞子进程输出,直到宿主应答(已知回归)。
|
||
portable-pty = "0.8"
|
||
|
||
[target.'cfg(windows)'.dependencies]
|
||
windows-sys = { version = "0.59", features = [
|
||
"Win32_System_Threading",
|
||
"Win32_System_Diagnostics_Debug",
|
||
"Win32_Foundation",
|
||
"Win32_System_Kernel",
|
||
] }
|