-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathCargo.toml
More file actions
123 lines (110 loc) · 4.82 KB
/
Copy pathCargo.toml
File metadata and controls
123 lines (110 loc) · 4.82 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
[package]
name = "coffee-cli"
version = "3.3.0"
edition = "2021"
description = "Lightweight Multi-layer AI CLI Terminal"
license = "AGPL-3.0-or-later"
repository = "https://github.com/edison7009/Coffee-CLI"
keywords = ["ai", "prompt", "coding", "llm", "tree-sitter"]
categories = ["command-line-utilities", "development-tools"]
build = "build.rs"
[[bin]]
name = "coffee-cli"
path = "src/main.rs"
[build-dependencies]
tauri-build = { version = "2", features = [] }
[dependencies]
# Tier Terminal — PTY (portable-pty, WezTerm's cross-platform PTY library)
portable-pty = "0.9"
# Only `task::spawn_blocking` is used by the system-font scanner. The old
# loopback hook server and its network/runtime features have been removed.
tokio = { version = "1", features = ["rt"] }
# Regex (used by terminal.rs for ANSI strip)
regex = "1"
# CLI
clap = { version = "4", features = ["derive"] }
# Tauri
# `devtools` feature dropped: it only enables WebView devtools in *release*
# builds, and our shipped UI explicitly blocks F12 / Ctrl+Shift+I and the
# context menu (see src-ui/src/main.tsx + App.tsx). Dev builds get devtools
# automatically without the feature flag, so dev workflow is unaffected.
tauri = { version = "2", features = ["protocol-asset"] }
tauri-plugin-dialog = "2"
tauri-plugin-clipboard-manager = "2"
# Utilities
serde = { version = "1", features = ["derive"] }
serde_json = "1"
anyhow = "1"
log = "0.4"
dirs = "5"
# Pure-Rust font parsing for the terminal font picker (list installed
# families + monospace flag). No system deps, unlike font-kit.
ttf-parser = "0.20"
base64 = "0.22.1"
# PNG encoder for clipboard-image paste (issue #96): the Tauri clipboard
# plugin's read_image() returns raw RGBA — no original format — so we encode
# to PNG before writing the temp file the AI CLI references by path. Reuses
# the same png 0.17.x already pulled in transitively by tauri, no extra build.
png = "0.17"
# In-app self-update downloader (Windows). Blocking + rustls, runs on a
# spawn_blocking thread; streams the installer so we can emit download %.
ureq = "2"
notify = "6.1.1"
# Coalesces bursts of fs events (e.g. CLI writing 50 files in a row) into a
# single handler callback so the frontend doesn't re-scan 50 times.
notify-debouncer-full = "0.3"
rusqlite = { version = "0.32", features = ["bundled"] }
keyring = "3"
# Multi-agent MCP server (v1.0: 3 tools, HTTP Streamable transport)
# See docs/MULTI-AGENT-ARCHITECTURE.md §5.5 for why HTTP over stdio.
# Note: schemars is NOT a direct dep — we use rmcp's re-exported schemars
# to avoid version conflicts (rmcp 0.8 uses schemars 1.x internally).
rmcp = { version = "0.8", features = ["server", "macros", "transport-streamable-http-server"] }
axum = "0.7"
uuid = { version = "1", features = ["v4"] }
[profile.release]
opt-level = "z"
lto = true
strip = true
# Drop unwinding tables. Panics terminate the process directly — fine for
# a desktop app where panics are bugs anyway, and Tauri's command boundary
# catches plugin errors via Result<_, _> rather than catch_unwind.
panic = "abort"
codegen-units = 1
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
tauri-plugin-global-shortcut = "2"
# Prevents two Coffee CLI processes from running side-by-side. Without this,
# launching twice spawns two WebView2 instances that fight over the OS IME
# context, parking the candidate popup at primary-monitor (0,0). The plugin
# detects an existing instance, forwards the activation, and exits the
# duplicate. Multi-window users still get there via the existing tab-detach
# path (same process, no IME conflict).
tauri-plugin-single-instance = "2"
# Win32 bindings:
# - DWM: force square window corners on Windows 11 (otherwise rounds
# borderless windows by default).
# - System_Console: AttachConsole for the `mcp-status` CLI subcommand
# so its stdout reaches the parent terminal in release builds
# (which link with windows_subsystem = "windows").
# - System_Threading: process-liveness probe for the manifest reader,
# plus OpenProcess for Job Object assignment.
# - System_JobObjects: bind every PTY child (claude/codex/etc.) to a
# kill-on-close job so orphan `claude.exe` / `node.exe` can't outlive
# a closed Coffee CLI and lock `~/.claude/` session files.
# - System_Registry: read the real PATH (HKCU+HKLM) so a GUI-launched
# process finds CLIs installed via scoop/volta/nvm/mise/native-
# installer etc. — replaces the old 5-dir hardcoded PATH repair
# (src/windows_path.rs).
[target.'cfg(windows)'.dependencies]
windows = { version = "0.58", features = [
"Win32_Foundation",
"Win32_Graphics_Dwm",
"Win32_Security",
"Win32_System_Console",
"Win32_System_JobObjects",
"Win32_System_Registry",
"Win32_System_Threading",
] }
# `libc::kill(pid, 0)` for process-liveness probe in cli::mcp_status.
[target.'cfg(unix)'.dependencies]
libc = "0.2"